Name

sn_ci_analytics.VAConditionBuilderAPIUtils

Description

No description available

Script

var VAConditionBuilderAPIUtils = Class.create();
VAConditionBuilderAPIUtils.prototype = {
  initialize: function() {
      this.cache = {};
  },

  getAppseeAPIResponse: function(appseeApiPayload) {
      var body, response;
      try {
          if (appseeApiPayload.dynamic_property_name) {
              body = {
                  platform: "chat",
                  dynamic_property_name: appseeApiPayload.dynamic_property_name
              };
              response = this.getAnalyticsApiResponse("Session", "getDynamicPropertyUniqueValues", body);
          } else if (appseeApiPayload.event_type_filter) {
              body = {
                  platform: "chat",
                  event_type_filter: appseeApiPayload.event_type_filter
              };
              response = this.getAnalyticsApiResponse("Event", "getEventNamesByType", body);
              response = response[appseeApiPayload.event_type_filter];
          } else if (appseeApiPayload.event_property_name && appseeApiPayload.event_type) {
              body = {
                  platform: "chat",
                  event_property_name: appseeApiPayload.event_property_name,
                  event_type: appseeApiPayload.event_type
              };
              response = this.getAnalyticsApiResponse("Event", "getEventNamesByEventPropertyValues", body);
              if (appseeApiPayload.fieldInternalValue) {
                  response = this.transformTopicSubCategoryData(response, appseeApiPayload.fieldInternalValue);
              }
              if (appseeApiPayload.tableName === 'topic_node_filter') {
                  // TEMP COMMENT :
                  // Its possible to not have the topicNodeName while rebuilding conditions.
                  // Since we are only storing internal values and rebuilding conditions recursively
                  // child rows dont have context of parent row's node name. One way we can have the node
                  // name on the fly is by saving it in the dropdown id's. otherwise make an API call and 
                  // get the node name by filtering based on node id which is costly. Suggestions ? 
                  var topicNodeName = appseeApiPayload.topicNodeName;
                  if (!topicNodeName) {
                      var screens = this.getAnalyticsApiResponse("Screen", "getScreens", {
                          screen_type: '4'
                      });
                      for (var i in screens) {
                          if (screens[i].Name.indexOf(appseeApiPayload.topicNodeId) > -1) {
                              topicNodeName = screens[i].DisplayName;
                          }
                      }
                  }
                  response = this.getTopicNodeSelectedValues(response, appseeApiPayload.topicNodeId, topicNodeName, appseeApiPayload.nodeType);
              }
          } else if (appseeApiPayload.event_name) {
              body = {
                  platform: "chat",
                  event_name: appseeApiPayload.event_name
              };
              response = this.getAnalyticsApiResponse("Event", "getEventPropertyNames", body);
          } else if (appseeApiPayload.language) {
              body = {
                  platform: "chat"
              };
              response = this.getAnalyticsApiResponse("Session", "getAnalyticsSessionTranslatedLocale", body);
          } else if (appseeApiPayload.screen_type) {
              if (appseeApiPayload.screen_type == '4') {
                  body = {
                      platform: appseeApiPayload.platform,
                      screen_type: appseeApiPayload.screen_type
                  };
                  response = this.getAnalyticsApiResponse("Screen", "getScreens", body);
                  var screens = this.getAnalyticsApiResponse("Screen", "getScreens", {
                      platform: '3',
                      screen_type: '3'
                  });
                  var typeToTopicNodeMapping = this.getAnalyticsApiResponse("Event", "getEventNamesByEventPropertyValues", {
                      event_type: 'Topic Node',
                      event_property_name: 'Type'
                  });
                  var topicNodeToTypeMapping = this.getTopicNodeToTypeMapping(typeToTopicNodeMapping);
                  var selectedScreenId;
                  if (appseeApiPayload.screenId) {
                      selectedScreenId = appseeApiPayload.screenId;
                  } else {
                      for (var i in screens) {
                          if (screens[i].DisplayName === appseeApiPayload.topicName) {
                              selectedScreenId = screens[i].Name;
                              break;
                          }
                      }
                  }
                  var options = [];
                  response.forEach(function(topicNode) {
                      if (topicNode.Name.indexOf(selectedScreenId) > -1) {
                          var screenData = {
                              appId: topicNode.AppId.$oid,
                              platform: 3,
                              screenName: topicNode.Name,
                              nodeType: topicNodeToTypeMapping[topicNode.DisplayName]
                          };

                          options.push({
                              id: JSON.stringify(screenData),
                              label: topicNode.DisplayName
                          });
                      }
                  });
                  response = options;
              } else if (appseeApiPayload.screen_type == '3') {
                  body = {
                      platform: appseeApiPayload.platform,
                      screen_type: appseeApiPayload.screen_type
                  };
                  response = this.getAnalyticsApiResponse("Screen", "getScreens", body);
                  response.sort(function(a, b) {
                      var nameA = a["DisplayName"].toLowerCase();
                      var nameB = b["DisplayName"].toLowerCase();
                      if (nameA < nameB) return -1;
                      if (nameA > nameB) return 1;
                      return 0;
                  });
              }
          }
          return response;
      } catch (ex) {
          gs.error(ex);
          gs.addErrorMessage(ex.message);
      }
  },

  transformTopicSubCategoryData: function(data, topicSubCategory) {
      return data && data[topicSubCategory] ? data[topicSubCategory] : [];
  },

  getTopicNodeToTypeMapping: function(typeToTopicNodeMapping) {
      var topicNodeToTypeMapping = {};
      Object.keys(typeToTopicNodeMapping).forEach(function(typeKey) {
          typeToTopicNodeMapping[typeKey].forEach(function(topicNode) {
              if (!topicNodeToTypeMapping[topicNode]) {
                  topicNodeToTypeMapping[topicNode] = typeKey;
              }
          });
      });
      return topicNodeToTypeMapping;
  },

  getTopicNodeSelectedValues: function(selectedValuesToTopicNodeMapping, topicNodeId, topicNodeName, topicNodeType) {
      var selectedValues = [];
      Object.keys(selectedValuesToTopicNodeMapping).forEach(function(selectedValue) {
          selectedValuesToTopicNodeMapping[selectedValue].forEach(function(topicNode) {
              if (topicNode === topicNodeName) {
                  selectedValues.push({
                      id: JSON.stringify({
                          topic_node_id: topicNodeId,
                          topic_node_name: topicNodeName,
                          type: topicNodeType,
                          id: selectedValue
                      }),
                      label: selectedValue
                  });
              }
          });
      });
      return selectedValues;
  },

  getAnalyticsApiResponse: function(serviceType, serviceName, params) {
      var obj = {
          type: serviceType,
          name: serviceName,
          params: params
      };
      var key = JSON.stringify(obj);
      if (this.cache[key])
          return this.cache[key];

      var response = AnalyticsServiceInvoker.invoke(serviceType, serviceName, params);
      this.cache[key] = response;

      return response;
  }

};

Sys ID

b4be015b534c3010a86bddeeff7b1266

Offical Documentation

Official Docs: