Name

sn_sow_collab.SowCollabUtils

Description

No description available

Script

var SowCollabUtils = Class.create();
SowCollabUtils.prototype = {
  initialize: function() {},

  SOW_CONTEXTUAL_PANEL_VISIBILITY_HANDLER: "sn_sow_collab.SOWContextualPanelVisibility",

  contextPanelConfigHandler: function(context, requestPayload) {
      var sectionProps = [];

      var SOW_CONTEXTUAL_PANEL_PROPS_HANDLER = "sn_sow_collab.SOWContextualPanelConfig";
      var exPointImplementations = new GlideScriptedExtensionPoint().getExtensions(SOW_CONTEXTUAL_PANEL_PROPS_HANDLER);
      if (exPointImplementations) {
          for (i = 0; i < exPointImplementations.length; i++) {
              var handler = exPointImplementations[i];
              if (context === "dropDown")
                  handler.getPanelDropdownPayload().forEach(function(content) {
                      sectionProps.push(content);
                  });
              else if (context === "cardProps")
                  handler.fetchPanelCardProps(requestPayload.recordSysId, requestPayload.chatSysId, requestPayload.chatsLimit).forEach(function(prop) {
                      sectionProps.push(prop);
                  });
              else if (context === "recommendedUsers")
                  handler.getRecommendedUsers(requestPayload.recordSysId, requestPayload.tableName).forEach(function(recommendedUser) {
                      sectionProps.push(recommendedUser);
                  });
              else if (context === "handleChannelRedirect") {
                  var handleChannelRedirectOutput = handler.handleChannelRedirect(requestPayload.recordSysId, requestPayload.tableName, requestPayload.requestorData);
                  if (handleChannelRedirectOutput.errorMsg)
                      return handleChannelRedirectOutput;
                  else
                      handleChannelRedirectOutput.forEach(function(channelData) {
                          sectionProps.push(channelData);
                      });
              } else if (context === "getChannelConfigData") sectionProps.push(handler.getChannelConfigData(requestPayload.methodName, requestPayload.params));
              else if (context === "refreshUserPreference")
                  handler.refreshUserPreference(requestPayload.recommendedParticipants).forEach(function(data) {
                      sectionProps.push(data);
                  });
          }
      }

      return sectionProps;
  },

  buildDropDownPanelPayload: function(content) {
      var payload = {};
      payload.id = content.id;
      payload.label = content.label;
      payload.icon = content.icon;
      return payload;
  },

  getDropDownPanelContents: function() {
      var that = this;
      var contentsArr = this.contextPanelConfigHandler("dropDown", {});

      if (!contentsArr.length)
          return [];

      var sectionsMap = {};

      contentsArr.forEach(function(content) {
          if (!sectionsMap[content.sectionId]) {
              var section = {};
              section.id = content.sectionId;
              section.label = content.sectionLabel;
              section.children = [];
              sectionsMap[content.sectionId] = section;
          }
          sectionsMap[content.sectionId].children.push(that.buildDropDownPanelPayload(content));
      });
      var sections = [];
      Object.keys(sectionsMap).forEach(function(s) {
          sections.push(sectionsMap[s]);
      });
      return sections;
  },

  getPanelCardProps: function(recordSysId, chatSysId, chatsLimit) {
      var payload = {
          recordSysId: recordSysId,
          chatSysId: chatSysId,
  		chatsLimit: chatsLimit
      };

      var contentsArr = this.contextPanelConfigHandler("cardProps", payload);
      return contentsArr;
  },

  getRecommededUsers: function(recordSysId, tableName) {
      var payload = {
          recordSysId: recordSysId,
          tableName: tableName
      };
      var recommendedUsersArr = this.contextPanelConfigHandler("recommendedUsers", payload);
      return recommendedUsersArr;
  },

  handleChannelRedirect: function(recordSysId, tableName, requestorData) {
      var payload = {
          recordSysId: recordSysId,
          tableName: tableName,
          requestorData: requestorData
      };

      try {
          return this.contextPanelConfigHandler("handleChannelRedirect", payload);
      } catch (e) {
          return {
              errorMsg: e.message
          };
      }
  },

  refreshUserPreference: function(recommendedParticipants) {
      var payload = {
          recommendedParticipants: recommendedParticipants,
      };

      var recommendedUsersArr = this.contextPanelConfigHandler("refreshUserPreference", payload);
      return recommendedUsersArr;
  },

  getChannelConfigData: function(methodName, params) {
      var payload = {
          methodName: methodName,
          params: params ? params : ''
      };

      var channelConfigData = this.contextPanelConfigHandler("getChannelConfigData", payload);

      if (methodName === 'fetchRefreshDuration') channelConfigData = Math.min.apply(null, channelConfigData);

      return channelConfigData;
  },

  isTokenAvailable: function() {
      if (GlidePluginManager.isActive('com.snc.tcm_collab_hook')) {
          var msTeamsCredentialsHelper = new sn_tcm_collab_hook.MSTeamsCredentialsHelper();
          return msTeamsCredentialsHelper.isAccessTokenOrRefreshTokenAvailable();
      }
      return false;
  },

  canViewChats: function(table, sysId) {
      var exPointImplementations = new GlideScriptedExtensionPoint().getExtensions(this.SOW_CONTEXTUAL_PANEL_VISIBILITY_HANDLER);
      if (exPointImplementations) {
          for (i = 0; i < exPointImplementations.length; i++) {
              var handler = exPointImplementations[i];
              if (handler.canLaunchChat(sysId, table))
                  return true;
          }
      }
      return false;
  },

  canViewCalls: function(table, sysId) {
      if (GlidePluginManager.isActive('com.snc.notify'))
          return new sn_uib_notify.NotifyUXFConferenceUtil().canViewCalls(table, sysId);
      return false;
  },

  getNumberOfChats: function(table, sysId) {
      if (!this.isTeamsITPluginActive())
          return 0;
      var teamsChatGa = new GlideAggregate('sn_tcm_collab_hook_ms_teams_chat');
      teamsChatGa.addAggregate('COUNT');
      teamsChatGa.addQuery('source_table', table);
      teamsChatGa.addQuery('source', sysId);
      teamsChatGa.query();
      if (teamsChatGa.next())
          return teamsChatGa.getAggregate('COUNT');
      return 0;
  },

  isTeamsITPluginActive: function() {
      return GlidePluginManager.isActive('com.snc.ms_teams.it');
  },

  type: 'SowCollabUtils'
};

Sys ID

0be0966553c23010a487ddeeff7b129c

Offical Documentation

Official Docs: