Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
  <head>
    <meta name="description" content="Set presence">
    <title>Circuit JS SDK</title>
    <script src="https://unpkg.com/circuit-sdk@beta"></script>
    <script src="https://rawgit.com/circuit/js-sdk/master/jsbin-template.js"></script>
    <link rel="stylesheet" href="https://rawgit.com/circuit/js-sdk/master/jsbin-template.css">
  </head>
  <body>
    <div id="template"></div>
    <section id="main" style="display:none">
      <div>
        <select id="presenceList" size="10" style="width:100px">
          <option value="AVAILABLE">AVAILABLE</option>
          <option value="AWAY">AWAY</option>
          <option value="DND">DND</option>
          <option value="BUSY">BUSY</option>
        </select>
        <div>Current state: <span id="state"></span></div>
        <button onclick="setPresence()">Set Presence</button>
      </div>
    </section>
</body>
</html>
 
/*jshint esnext: true */
// Create client instance
const client = new Circuit.Client({
  domain: jsBinTpl.domain,       // read domain from url
  client_id: jsBinTpl.client_id, // get client_id for domain 
  scope: 'ALL'
});
// Template for Circuit JSBin examples. Builds generic part of page incl. login button.
const {logonButton, logoutButton, print} = jsBinTpl.init(client, template, {
  title: 'Circuit JS SDK: Set presence',
  description: 'Set different presence states for local user.',
  apiMethods: ['getPresence', 'subscribePresence', 'setPresence'], 
  prerequisites: ['None']
});
//Circuit.logger.setLevel(Circuit.Enums.LogLevel.Debug);
logonButton.addEventListener('click', () => {  
  client.logon()
  .then(user => {
    print(`Successfully authenticated as ${user.displayName}`);
    document.getElementById('state').innerHTML = user.userPresenceState.state;
  })
  .then(() => client.subscribePresence([client.loggedOnUser.userId]))
  .catch(print);
});
logoutButton.addEventListener('click', () => {
  client.logout()
  .catch(print);
});
function setPresence() {
  var req = {state: presenceList.options[presenceList.selectedIndex].value};
  if (req.state === Circuit.Enums.PresenceState.DND) {
    var d = new Date();
    req.dndUntil = d.setHours(d.getHours() + 1);
  }
  
  let state = document.getElementById('state');
  if (state.innerHTML === Circuit.Enums.PresenceState.DND) {
    // If we are in DND and change the state to something else,
    // we probably want to reset the dndUntil
    req.dndUntil = 0;
  }
  client.setPresence(req)
    .then(() => {
      return client.getPresence([client.loggedOnUser.userId])
    })
    .catch(print);
}
client.addEventListener('userPresenceChanged', evt => {
  if (evt.presenceState.userId === client.loggedOnUser.userId) {
    let state = document.getElementById('state');
    state.innerHTML = evt.presenceState.state;
  }
});
client.addEventListener('userUpdated', evt => {
  print(evt)
});
Circuit.supportedEvents && Circuit.supportedEvents.forEach(e => {
    client.addEventListener(e, evt => print(`Received ${e} event:`, evt));
});
Output 300px

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
rogerupro
0viewers