{"version":3,"file":"wrappers.js?id=78823bad","mappings":"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","sources":["webpack:///webpack/runtime/chunk loaded","webpack:///./src/main/webapp/assets/modules/injected-js-handlers/buildInfo.ts","webpack:///./src/main/webapp/assets/modules/injected-js-handlers/reseller-user.ts","webpack:///./src/main/webapp/assets/modules/injected-js-handlers/reseller.ts","webpack:///./src/main/webapp/assets/modules/libs/datatablequery.ts","webpack:///./src/main/webapp/assets/modules/libs/querybuilder.ts","webpack:///./src/main/webapp/assets/modules/managers/helpdesk.ts","webpack:///./src/main/webapp/assets/modules/managers/session.ts","webpack:///./src/main/webapp/assets/modules/managers/stats.ts","webpack:///./src/main/webapp/assets/modules/managers/tenant-template.ts","webpack:///./src/main/webapp/assets/modules/managers/tenant.ts","webpack:///./src/main/webapp/assets/modules/tenant-edit-dialog/assistant-utils.ts","webpack:///./src/main/webapp/assets/modules/tenant-edit-dialog/sales-flow-utils.ts","webpack:///./src/main/webapp/assets/modules/tenant-edit-dialog/tenant-edit-dialog-utils.ts","webpack:///./src/main/webapp/assets/modules/utils/country.ts","webpack:///./src/main/webapp/assets/modules/utils/debounce.ts","webpack:///./src/main/webapp/assets/modules/utils/language.ts","webpack:///./src/main/webapp/assets/modules/utils/localehelpers.ts","webpack:///./src/main/webapp/assets/modules/utils/locales.ts","webpack:///./src/main/webapp/assets/modules/utils/sort-options.ts","webpack:///./src/main/webapp/assets/modules/utils/util.ts","webpack:///./src/main/webapp/assets/modules/utils/validators.ts","webpack:///./src/main/webapp/assets/modules/utils/vuehelper.ts","webpack:///./src/main/webapp/assets/plugins/pinia.ts","webpack:///./src/main/webapp/assets/plugins/store/index.ts","webpack:///./src/main/webapp/assets/plugins/store/localestore.ts","webpack:///./src/main/webapp/assets/modules/index.ts","webpack:///./src/main/webapp/templates-hidden/liftwrapper.ts","webpack:///./src/main/webapp/types/oldtypes.ts","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/node module decorator","webpack:///webpack/runtime/jsonp chunk loading","webpack:///webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","const BuildInfo = {\n  isTestMode(): boolean {\n    return window.applicationInfo?.testMode === \"true\"\n  },\n\n  siteName(): string {\n    return window.applicationInfo?.siteName\n  },\n\n  versionNumber(): string {\n    return window.applicationInfo?.versionNumber\n  },\n\n  buildNumber(): string {\n    return window.applicationInfo?.buildNumber\n  },\n\n  backendName(): string {\n    return window.applicationInfo?.backendName\n  },\n}\n\nexport default BuildInfo","import Util from \"@/modules/utils/util\"\n\nconst ResellerUser = {\n  login(): string | undefined {\n    return window?.__resellerUser?.login\n  },\n  fullName(): string | undefined {\n    return window?.__resellerUser?.fullName\n  },\n  email(): string | undefined {\n    return window?.__resellerUser?.email\n  },\n  language(): string | undefined {\n    return window?.__resellerUser?.language\n  },\n  permissions(): string[] {\n    return window?.__resellerUser?.expandedPermissions || []\n  },\n  hasPermission(perm: string): boolean {\n    if (!perm) return false\n    if (!Util.isNonEmptyArray(ResellerUser.permissions())) return false\n\n    const perms = ResellerUser.permissions()\n\n    if (Array.isArray(perms)) {\n      return perms.includes(perm)\n    }\n\n    return false\n  },\n  isReseller(): boolean {\n    return window?.__resellerUser.userType === \"Reseller\"\n  },\n  isAdmin(): boolean {\n    return window?.__resellerUser.userType === \"Admin\"\n  },\n}\n\nexport default ResellerUser\n","import Util from \"@/modules/utils/util\"\n\nconst Reseller = {\n  codeName(): string | undefined {\n    return window?.__reseller?.codeName\n  },\n  name(): string | undefined {\n    return window?.__reseller?.name\n  },\n  email(): string | undefined {\n    return window?.__reseller?.email\n  },\n  defaultWhiteLabel(): string | undefined {\n    return window?.__reseller?.tenantWhiteLabel\n  },\n  allowableTenantOptions(): string[] {\n    return window?.__reseller?.allowableTenantOptions || []\n  },\n  options(): string[] {\n    return window?.__reseller?.options || []\n  },\n  hasAllowableTenantOption(opt: string): boolean {\n    if (!opt) return false\n    if (!Util.isNonEmptyArray(Reseller.allowableTenantOptions())) return false\n\n    return Reseller.allowableTenantOptions().includes(opt)\n  },\n  hasOption(opt: string): boolean {\n    if (!opt) return false\n    if (!Util.isNonEmptyArray(Reseller.options())) return false\n\n    return Reseller.options().includes(opt)\n  },\n  language(): string | undefined {\n    return window?.__reseller?.language\n  },\n  country(): string | undefined {\n    return window?.__reseller?.country\n  },\n  timeZone(): string | undefined {\n    return window?.__reseller?.timeZone\n  },\n}\n\nexport default Reseller\n","import Debouncer from \"@/modules/utils/debounce\"\nimport { QueryBuilder } from \"@/modules/libs/querybuilder\"\n\nimport {\n  DataTableOptions,\n  DeletedFlag,\n} from \"@/types\"\n\nexport class DataTableQuery {\n  options: DataTableOptions<any>\n  reloadCallback: Function\n\n  queryBuilder = new QueryBuilder()\n  debouncer = new Debouncer()\n\n  constructor(options: DataTableOptions<any>, reloadCallback: Function) {\n    this.options = options\n    this.setOptions(options)\n    this.reloadCallback = reloadCallback\n\n    this.updateList()\n  }\n\n  setOptions(options: DataTableOptions<any>): void {\n    if (!options) return\n\n    this.options.page = options.page\n    this.options.itemsPerPage = options.itemsPerPage\n    this.options.sortBy = options.sortBy\n    this.options.sortDesc = options.sortDesc\n\n    const sortByHead = this.options?.sortBy?.[0]\n    const sortDescHead = this.options?.sortDesc?.[0]\n\n    if (sortByHead !== undefined && sortDescHead !== undefined) {\n      if (typeof(sortByHead) === \"string\") {\n        this.queryBuilder.setOrder(sortByHead, sortDescHead)\n      }\n    }\n\n    this.queryBuilder.setNumRecords(this.options.itemsPerPage)\n\n    const offset = (options.page - 1) * options.itemsPerPage\n\n    this.queryBuilder.setOffset(offset)\n  }\n\n  updateList(): void {\n    if (this.reloadCallback) {\n      this.debouncer.debounce(() =>\n        this.reloadCallback(this.queryBuilder.getQuery())\n      )\n    }\n  }\n\n  setDeletedFlagFilter(flag: DeletedFlag): void {\n    this.queryBuilder.setDeletedFlag(flag)\n  }\n}\n","import Util from \"@/modules/utils/util\"\n\nimport {\n  DeletedFlag,\n  Filter,\n  FilterClause,\n  isCustomData,\n  isFilterClauseWithFieldValue,\n  isFilterClauseWithSubclauses,\n  Ordering,\n  Query,\n  QueryDirection,\n} from \"@/types\"\n\nexport class QueryBuilder {\n  order: Ordering = {\n    direction: QueryDirection.descending,\n    field: \"lastModified\",\n  }\n  deletedFlag: DeletedFlag = DeletedFlag.NotDeleted\n  numRecords: number = 25\n  offset: number = 0\n  filters: FilterClause[] = []\n\n  constructor(\n    filters?: FilterClause[],\n    orderField?: string,\n    ascendingOrDescending?: boolean,\n    deletedFlag?: DeletedFlag,\n    numRecords?: number,\n    offset?: number\n  ) {\n    if (filters !== undefined) {\n      this.filters = filters\n    }\n    if (orderField !== undefined) {\n      this.setOrder(orderField, this.order.direction === QueryDirection.descending)\n    }\n    if (ascendingOrDescending !== undefined) {\n      this.setOrder(this.order.field, ascendingOrDescending)\n    }\n    if (deletedFlag !== undefined) {\n      this.deletedFlag = deletedFlag\n    }\n    if (numRecords !== undefined) {\n      this.numRecords = numRecords\n    }\n    if (offset !== undefined) {\n      this.offset = offset\n    }\n  }\n\n  /**\n   * Get a query object to send to backend\n   */\n  getQuery(): Query {\n    return {\n      filter: this.getFilter(),\n      order: [ this.order ],\n      deletedFlag: this.deletedFlag,\n      numRecords: this.numRecords,\n      offset: this.offset,\n    }\n  }\n\n  setOrder(field: string, descending: boolean): void {\n    this.order = {\n      direction: descending ? QueryDirection.descending : QueryDirection.ascending,\n      field: field,\n    }\n  }\n\n  /**\n   * Set the deleted flag\n   */\n  setDeletedFlag(flag: DeletedFlag): void {\n    this.deletedFlag = flag\n  }\n\n  /**\n   * Set the offset\n   */\n  setOffset(offset: number): void {\n    this.offset = offset\n  }\n\n  /**\n   * Set the num records\n   */\n  setNumRecords(numRecords: number): void {\n    this.numRecords = numRecords\n  }\n\n  /**\n   * Get filter object\n   */\n  getFilter(): Filter | undefined {\n    if (this.filters.length > 0) {\n      return {\n        type: \"and\",\n        subclauses: this.filters,\n      }\n    } else {\n      return undefined\n    }\n  }\n\n  /**\n   * Add filter\n   */\n  addFilter(filter: FilterClause): void {\n    this.filters.push(filter)\n  }\n\n  /**\n   * Remove filter\n   */\n  removeFilter(filter: FilterClause): void {\n    const filterAreEq = (filterA: FilterClause,\n      filterB: FilterClause): boolean => {\n      if (isCustomData(filterA) && isCustomData(filterB)) {\n        return filterA.key + filterA.moduleId === filterB.key + filterB.moduleId\n      } else if (isFilterClauseWithSubclauses(filterA) || isFilterClauseWithSubclauses(filterB)) {\n        const filterAFields = []\n        const filterBFields = []\n\n        if (isFilterClauseWithSubclauses(filterA)) {\n          const clauses = filterA.subclauses.filter(s => isFilterClauseWithFieldValue(s))\n          filterAFields.push(...clauses.map(c => c.field))\n        } else if (isFilterClauseWithFieldValue(filterA)) {\n          filterAFields.push(filterA.field)\n        }\n\n        if (isFilterClauseWithSubclauses(filterB)) {\n          const clauses = filterB.subclauses.filter(s => isFilterClauseWithFieldValue(s))\n          filterBFields.push(...clauses.map(c => c.field))\n        } else if (isFilterClauseWithFieldValue(filterB)) {\n          filterBFields.push(filterB.field)\n        }\n\n        return Util.intersection(filterAFields, filterBFields)?.length > 0\n      }\n      else if (isFilterClauseWithFieldValue(filterA) && isFilterClauseWithFieldValue(filterB)) {\n        return filterA.field === filterB.field\n      }\n\n      return false\n    }\n\n    const index = this.filters.findIndex((obj) => filterAreEq(obj, filter))\n\n    if (index !== -1) this.filters.splice(index, 1)\n  }\n}\n","import $ from \"jquery\"\n\nexport type Article = {\n  author_id: number,\n  body: string,\n  comments_disabled: boolean,\n  content_tag_ids: any[],\n  created_at: string,\n  draft: boolean,\n  edited_at: string,\n  html_url: string,\n  id: number,\n  label_names: any[]\n  locale: string,\n  name: string,\n  outdated: boolean,\n  outdated_locales: any[],\n  permission_group_id: number,\n  position: number,\n  promoted: boolean,\n  section_id: number,\n  source_locale: string,\n  title: string,\n  updated_at: string,\n  url: string,\n  user_segment_id: any,\n  vote_count: number,\n  vote_sum: number,\n}\n\nexport type Section = {\n  category_id: number,\n  created_at: string,\n  description: string,\n  html_url: string,\n  id: number\n  locale: string,\n  name: string,\n  outdated: boolean,\n  parent_section_id: any,\n  position: number,\n  sorting: string,\n  source_locale: string,\n  theme_template: string,\n  updated_at: string,\n  url: string,\n}\n\nconst HelpDesk = {\n\n  /**\n   * Fetch an section from Zendesk API\n   * @param categoryId - category id in Zendesk\n   * @param lang - the chosen language, defaults to the user language\n   */\n\n  async getResellerSections(categoryId: string, lang: string): Promise<Section[]> {\n    return new Promise((resolve, reject) => {\n      const rootApiUrl = \"https://helpdesk.sharespine.com/api/v2/help_center/\"\n      const localizedUrl = HelpDesk.getLocalizedUrl(rootApiUrl, lang)\n      const categoryUrl = `${localizedUrl}/categories/${categoryId}/sections`\n\n      return $.ajax({\n        type: \"GET\",\n        contentType: \"application/json\",\n        url: categoryUrl,\n      })\n        .then(response => resolve(response.sections))\n      // @ts-ignore\n        .catch(error => reject(error.responseJSON))\n    })\n  },\n\n  /**\n   * Fetch articles from section from Zendesk API\n   * @param sectionId - the section id\n   * @param lang - the chosen language, defaults to the user language\n   * @returns the article from Zendesk API\n   */\n  getSectionArticles(lang: string, sectionId: string): Promise<Article[]> {\n    return new Promise((resolve, reject) => {\n      const rootApiUrl = \"https://helpdesk.sharespine.com/api/v2/help_center/\"\n      const localizedUrl = HelpDesk.getLocalizedUrl(rootApiUrl, lang)\n      const sectionUrl = `${localizedUrl}/sections/${sectionId}/articles`\n\n      return $.ajax({\n        type: \"GET\",\n        contentType: \"application/json\",\n        url: sectionUrl,\n      })\n        .then(response => resolve(response.articles))\n      // @ts-ignore\n        .catch(error => reject(error.responseJSON))\n    })\n  },\n\n  /**\n   * Get localized helpdesk article\n   * @param {string} prefix - prefix url\n   * @param {string} language - the chosen language, defaults to user language\n   */\n  getLocalizedUrl(prefix: string, language: string): string {\n    const getLocaleCode = (code: string): string => {\n      switch (code) {\n        case \"en\":\n        case \"eng\":\n          return \"en-gb\"\n        default:\n          return \"sv\"\n      }\n    }\n\n    const getUrl = (prefix: string): string => {\n      const localeCode = getLocaleCode(language)\n      return `${prefix}${localeCode}`\n    }\n\n    return getUrl(prefix)\n  },\n\n}\n\nexport default HelpDesk","export type LoginLogoutResponse = {\n  succeeded: boolean,\n}\n\nexport type AuthType = \"OpenIDConnect\" | \"UserPassword\"\n\nexport type AuthTypeOrRedirectResponse = {\n  OK: boolean,\n  redirectUri?: string,\n  authType?: AuthType,\n  err?: string,\n}\n\nconst Session = {\n  login(reseller: string, login: string, password: string): Promise<LoginLogoutResponse> {\n    return window.sessionServerFuncs\n      .login({\n        reseller: reseller,\n        login: login,\n        password: password,\n      })\n  },\n\n  logout(): Promise<LoginLogoutResponse> {\n    return window.sessionServerFuncs.logout(\"\")\n  },\n\n  checkAuthTypeOrRedirect(codeName: string): Promise<AuthTypeOrRedirectResponse> {\n    return window.sessionServerFuncs.checkAuthTypeOrRedirect(codeName)\n  },\n}\n\nexport default Session","import {\n  TenantIssueSummary,\n  TransferStatsSummary,\n  RequestTenantCount,\n  TenantCounts,\n  TenantCountsPerAssistant,\n  TenantCountsPerConnector,\n  TenantCountsPerCountry,\n  TenantCountsPerOption,\n} from \"@/types\"\n\nimport moment from \"moment\"\n\nexport default {\n  /**\n   * Get daily summarized transfer stats for a tenant.\n   * Returns an object with keys as record types and then an object with import/export lists.\n   * @param from - YYYY-MM-DD\n   * @param to - YYYY-MM-DD\n   */\n  dailySummarizedTransferStats(from: string, to: string): Promise<TransferStatsSummary[]> {\n    const list: TransferStatsSummary[] = []\n\n    return new Promise((res, rej) => {\n      return window?.statsServerFuncs.dailySummarizedTransferStats({\n        fromTime: from + \"T00:00:00Z\",\n        toTime: to + \"T23:59:59Z\",\n      })\n        .then((response: any) => {\n          if (Array.isArray(response)) {\n            list.push(...response)\n          }\n          else {\n            return rej(response)\n          }\n        })\n        .catch((error: any) => rej(error))\n        .done(() => res(list))\n    })\n  },\n\n  /**\n   * Get if there is tenants with issues\n   * Returns boolean\n   */\n  async tenantsWithIssues(): Promise<number> {\n    const fromDate = moment().subtract(3, \"hours\").startOf(\"hour\").format(\"YYYY-MM-DDTHH:mm:ssZ\")\n    const toDate = moment().subtract(1, \"hours\").endOf(\"hour\").format(\"YYYY-MM-DDTHH:mm:ssZ\")\n\n    try {\n      const allTenantsWithIssues = await this.tenantsIssues(fromDate, toDate)\n      const tenantsWithIssues = allTenantsWithIssues.filter(tenant => tenant.numIssues > 0).length\n      return tenantsWithIssues || 0\n    } catch {\n      return 0\n    }\n  },\n\n  /**\n   * Get daily summarized transfer stats for a tenant.\n   * Returns an object with keys as record types and then an object with import/export lists.\n   * @param from - YYYY-MM-DD\n   * @param to - YYYY-MM-DD\n   */\n  tenantsIssues(from: string, to: string): Promise<TenantIssueSummary[]> {\n    const savedIssues: TenantIssueSummary[] = []\n    const previousTenants: Map<string, boolean> = new Map()\n\n    const processIssueData = (issues: TenantIssueSummary[]): void => {\n      const sortByLatest = issues.sort((a: TenantIssueSummary, b: TenantIssueSummary) => {\n        return new Date(b.hour).getTime() - new Date(a.hour).getTime()\n      })\n\n      for (let issue of sortByLatest) {\n        if (previousTenants.has(issue.tenantCodeName)) {\n          let existing = savedIssues.find(x => x.tenantCodeName === issue.tenantCodeName)\n\n          if (existing) {\n            existing.numIssues = Math.max(existing.numIssues, issue.numIssues)\n          }\n        }\n        else {\n          previousTenants.set(issue.tenantCodeName, true)\n          savedIssues.push(issue)\n        }\n      }\n    }\n\n    return new Promise((resolve, reject) => {\n      return window?.statsServerFuncs.requestTenantTransferIssuesCounts({\n        fromTime: from,\n        toTime: to,\n      })\n        .then((issues: TenantIssueSummary[]) => processIssueData(issues))\n        .catch(reject)\n        .done(() => resolve(savedIssues))\n    })\n  },\n\n  requestTenantCounts(fromTime: string, toTime: string): Promise<TenantCounts[]> {\n    const list: TenantCounts[] = []\n\n    return new Promise((resolve, reject) => {\n      return window?.statsServerFuncs.requestTenantCounts({\n        type: RequestTenantCount.TenantCounts,\n        fromTime: fromTime,\n        toTime: toTime,\n      })\n        .then((counts: TenantCounts[]) => list.push(...counts))\n        .fail(reject)\n        .done(() => resolve(list))\n    })\n  },\n\n  requestTenantCountsPerAssistant(fromTime: string, toTime: string)\n    : Promise<TenantCountsPerAssistant[]> {\n    const list: TenantCountsPerAssistant[] = []\n\n    return new Promise((resolve, reject) => {\n      return window?.statsServerFuncs.requestTenantCounts({\n        type: RequestTenantCount.TenantCountsPerAssistant,\n        fromTime: fromTime,\n        toTime: toTime,\n      })\n        .then((counts: TenantCountsPerAssistant[]) => list.push(...counts))\n        .fail(reject)\n        .done(() => resolve(list))\n    })\n  },\n\n  requestTenantCountsPerConnector(fromTime: string, toTime: string)\n    : Promise<TenantCountsPerConnector[]> {\n    const list: TenantCountsPerConnector[] = []\n\n    return new Promise((resolve, reject) => {\n      return window?.statsServerFuncs.requestTenantCounts({\n        type: RequestTenantCount.TenantCountsPerConnector,\n        fromTime: fromTime,\n        toTime: toTime,\n      })\n        .then((counts: TenantCountsPerConnector[]) => list.push(...counts))\n        .fail(reject)\n        .done(() => resolve(list))\n    })\n  },\n\n  requestTenantCountsPerCountry(fromTime: string, toTime: string)\n    : Promise<TenantCountsPerCountry[]> {\n    const list: TenantCountsPerCountry[] = []\n\n    return new Promise((resolve, reject) => {\n      return window?.statsServerFuncs.requestTenantCounts({\n        type: RequestTenantCount.TenantCountsPerCountry,\n        fromTime: fromTime,\n        toTime: toTime,\n      })\n        .then((counts: TenantCountsPerCountry[]) => list.push(...counts))\n        .fail(reject)\n        .done(() => resolve(list))\n    })\n  },\n\n  requestTenantCountsPerOption(fromTime: string, toTime: string)\n    : Promise<TenantCountsPerOption[]> {\n    const list: TenantCountsPerOption[] = []\n\n    return new Promise((resolve, reject) => {\n      return window?.statsServerFuncs.requestTenantCounts({\n        type: RequestTenantCount.TenantCountsPerOption,\n        fromTime: fromTime,\n        toTime: toTime,\n      })\n        .then((counts: TenantCountsPerOption[]) => list.push(...counts))\n        .fail(reject)\n        .done(() => resolve(list))\n    })\n  },\n}\n","import {\n  TenantTemplate,\n  SuccessResponse,\n  FailureResponse,\n} from \"@/types\"\n\nexport default {\n  listTenantTemplates(): Promise<TenantTemplate[]> {\n    const data: TenantTemplate[] = []\n\n    return new Promise((resolve, reject) => {\n      return window?.tenantServerFuncs.listTenantTemplates(\"\")\n        .then((result: any) => {\n          if (Array.isArray(result)) {\n            data.push(...result)\n          }\n        })\n        .catch((error: any) => reject(error))\n        .done(() => resolve(data))\n    })\n  },\n\n  getTenantTemplate(localId: string): Promise<TenantTemplate> {\n    return window?.tenantServerFuncs.getTenantTemplate(localId)\n  },\n\n  createTenantTemplate(template: TenantTemplate): Promise<SuccessResponse | FailureResponse> {\n    return new Promise((resolve, reject) => {\n      return window?.tenantServerFuncs.createTenantTemplate(template)\n        .then((response: any) => resolve(response))\n        .catch((error: any) => reject(error))\n    })\n  },\n\n  editTenantTemplate(template: TenantTemplate): Promise<SuccessResponse | FailureResponse> {\n    return new Promise((resolve, reject) => {\n      return window?.tenantServerFuncs.editTenantTemplate(template)\n        .then((response: any) => resolve(response))\n        .catch((error: any) => reject(error))\n    })\n  },\n\n  deleteTenantTemplate(localId: string): Promise<SuccessResponse | FailureResponse> {\n    return new Promise((resolve, reject) => {\n      return window?.tenantServerFuncs.deleteTenantTemplate(localId)\n        .then((response: any) => {\n          if (response.OK) {\n            return resolve(response)\n          }\n          else {\n            return reject(response)\n          }\n        })\n        .catch((error: any) => reject(error))\n    })\n  },\n}\n","import {\n  AssistantDefinition, Query,\n  Tenant as TenantType,\n} from \"@/types\"\n\nimport Util from \"@/modules/utils/util\"\n\nexport type ListTenantResponse = {\n  count?: number,\n  data: TenantType[],\n}\n\nexport type DeleteTenantResponse = {\n  success: boolean,\n}\n\nconst Tenant = {\n  availableAssistants(): Promise<AssistantDefinition[]> {\n    return window?.tenantServerFuncs.assistants(\"\")\n  },\n\n  getTenantByCodeName(codeName: string): Promise<TenantType> {\n    return new Promise((resolve, reject) => {\n      return window.tenantServerFuncs.getTenantByCodeName(codeName)\n        .then((response: any) => {\n          if (response.OK) {\n            return resolve(response.data)\n          }\n          else {\n            return reject(response)\n          }\n        })\n        .catch((err: any) => reject(err))\n    })\n  },\n\n  loginAsTenant(codeName: string, path?: string): void {\n    const url = \"/tenants/loginas/\" + codeName + (path ? path : \"\")\n    window.open(url, \"_blank\")\n  },\n\n  saveTenant(tenantData: TenantType): Promise<TenantType> {\n    return window.tenantServerFuncs.saveTenant(tenantData)\n  },\n\n  listTenants(query: Query): Promise<ListTenantResponse> {\n    return new Promise((resolve, reject) => {\n      let count: number | undefined = undefined\n      let tenants: TenantType[] = []\n\n      return window.tenantServerFuncs\n        .listTenants(query)\n        .then((res: any) => {\n          if (Array.isArray(res)) {\n            const tenantBatch = (res as TenantType[])\n            tenants.push(...tenantBatch)\n          }\n          else {\n            count = (res.count as number)\n          }\n        })\n        .catch(reject)\n        .done(() => resolve({\n          count: Util.isSet(count) ? count : tenants.length,\n          data: tenants,\n        }))\n    })\n  },\n\n  deleteTenant(codeName: string): Promise<DeleteTenantResponse> {\n    return new Promise((resolve, reject) => {\n      return window.tenantServerFuncs\n        .deleteTenant(codeName)\n        .then((response: any) => resolve(response))\n        .catch((error: any) => reject(error))\n    })\n  },\n}\n\nexport default Tenant","import Util from \"@/modules/utils/util\"\n\nimport {\n  AssistantDefinition,\n  isAllOf,\n  isAnyOf,\n  isConditionalIf,\n  isNoneOf,\n  isOpt,\n  Selectable,\n  TenantOptionRule,\n  TenantOptionRuleGroup,\n} from \"@/types\"\nimport Reseller from \"@/modules/injected-js-handlers/reseller\"\n\nconst ruleAccepts = (\n  rule: TenantOptionRule,\n  tenantOptions: string[]\n): boolean => {\n  if (isOpt(rule)) return tenantOptions.includes(rule.tenantOption)\n  if (isAllOf(rule)) {\n    return rule.children.every((c) => ruleAccepts(c, tenantOptions))\n  }\n  if (isAnyOf(rule)) {\n    return rule.children.some((c) => ruleAccepts(c, tenantOptions))\n  }\n  if (isNoneOf(rule)) {\n    return !rule.children.some((c) => ruleAccepts(c, tenantOptions))\n  }\n  if (isConditionalIf(rule)) {\n    if (ruleAccepts(rule.condition, tenantOptions)) {\n      return rule.body.every((c) => ruleAccepts(c, tenantOptions))\n    }\n    return true\n  }\n\n  return false\n}\n\nconst AssistantUtils = {\n\n  /**\n   * Function that checks that based on the inputed tenant option rule that\n   * the tenant has the proper tenant opts set.\n   */\n  accepts(\n    holder: TenantOptionRule | TenantOptionRule[]): boolean {\n    const opts = AssistantUtils.acceptsHelperFunc(holder)\n\n    return opts.length === 0\n  },\n\n  /**\n   * Returns all opts that aren't set based on the list that it was given and\n   * the requirements that was set.\n   */\n  acceptsHelperFunc(holder: TenantOptionRule | TenantOptionRule[]): string[] {\n    const opts: string[] = []\n\n    const all = (elements: TenantOptionRule[],\n      collect: boolean = false\n    ): boolean => {\n      if (elements.length === 0) return false\n      let result = true\n\n      for (let element of elements) {\n        const accepted = helperFunc(element, collect)\n\n        if (!accepted) {\n          result = false\n        }\n      }\n\n      return result\n    }\n\n    const any = (elements: TenantOptionRule[],\n      collect: boolean = false\n    ): boolean => {\n      if (elements.length === 0) return false\n      let result = false\n\n      for (let element of elements) {\n        const accepted = helperFunc(element, collect)\n\n        if (accepted) {\n          result = true\n        }\n      }\n\n      return result\n    }\n\n    const helperFunc = (\n      subHolder: TenantOptionRule | TenantOptionRule[],\n      collect: boolean = true\n    ): boolean => {\n      if (Array.isArray(subHolder)) {\n        const checkFn = (_collect: boolean): boolean => all(subHolder, _collect)\n\n        const firstCheck = checkFn(false)\n\n        if (firstCheck) return true\n        else return checkFn(true)\n      }\n      else {\n        if (isAllOf(subHolder)) {\n          const checkFn = (_collect: boolean): boolean => all(subHolder.children, _collect)\n\n          const firstCheck = checkFn(false)\n\n          if (firstCheck) return true\n          else return checkFn(true)\n        }\n        else if (isAnyOf(subHolder)) {\n          const checkFn = (_collect: boolean): boolean => any(subHolder.children, _collect)\n\n          const firstCheck = checkFn(false)\n\n          if (firstCheck) return true\n          else return checkFn(true)\n        }\n        else if (isNoneOf(subHolder)) {\n          const checkFn = (_collect: boolean): boolean => !any(subHolder.children, _collect)\n\n          const firstCheck = checkFn(false)\n\n          if (firstCheck) return true\n          else return checkFn(true)\n        }\n        else if (isConditionalIf(subHolder)) {\n          const checkCondFn = (_collect: boolean): boolean => helperFunc(subHolder.condition, _collect)\n          const checkBodyFn = (_collect: boolean): boolean => helperFunc(subHolder.body, _collect)\n\n          const firstCheck = checkCondFn(false)\n\n          if (firstCheck) {\n            const secondCheck = checkBodyFn(false)\n\n            if (secondCheck) return true\n            else {\n              return checkBodyFn(true)\n            }\n          }\n          else return false\n        }\n        else if (isOpt(subHolder)) {\n          const result = Reseller.hasAllowableTenantOption(subHolder.tenantOption)\n\n          if (collect) {\n            if (!result) {\n              opts.push(subHolder.tenantOption)\n            }\n          }\n          return result\n        }\n      }\n\n      throw new Error(\"Should not happen\")\n    }\n\n    helperFunc(holder)\n\n    return Array.of(...new Set(opts))\n  },\n\n  getGroups(\n    definition: AssistantDefinition,\n    availableTenantOptions: string[],\n    currentTenantOptions: string[]\n  ): TenantOptionRuleGroup[] {\n    const groups: Record<string, TenantOptionRuleGroup> = {}\n    const definedGroups = definition.requiredOptions.filter((r) =>\n      Util.isSet(r.ruleTag)\n    )\n\n    for (let group of definedGroups) {\n      const systems = AssistantUtils.getSystems(group)\n      const obj: TenantOptionRuleGroup = {\n        systems: systems.sort(),\n        ruleTag: group.ruleTag,\n        label: group.ruleTag,\n        children: {},\n        allowMultiple: false,\n        selectable: systems.map(system => {\n          const holder = AssistantUtils\n            .getGroupBySystem(group, system)\n\n          const checkMissingOpts = (): string[] => {\n            if (holder) {\n              return AssistantUtils.acceptsHelperFunc(holder)\n            }\n            else return []\n          }\n\n          const missing = checkMissingOpts()\n\n          return {\n            system: system,\n            available: missing.length === 0,\n            missingOpts: missing,\n          }\n        })\n          .reduce((a, b) => {\n            a[b.system] = b\n            return a\n          }, ({} as Record<string, Selectable>)),\n      }\n\n      if (isAnyOf(group)) {\n        obj.allowMultiple = group.allowMultiple\n      }\n      if (isConditionalIf(group)) {\n        if (group.body.length > 0 && isAnyOf(group.body[0])) {\n          obj.allowMultiple = group.body[0].allowMultiple\n        }\n      }\n\n      /* Group opts by system */\n      obj.children = obj.systems.reduce((origin, system) => {\n        origin[system] = AssistantUtils.getOptsInGroupBySystem(group, system,\n          availableTenantOptions, currentTenantOptions, true)\n        return origin\n      }, ({} as Record<string, string[]>))\n\n      groups[group.ruleTag] = obj\n    }\n\n    return Object.values(groups)\n  },\n\n  getGroupBySystem(\n    holder: TenantOptionRule | TenantOptionRule[],\n    system: string\n  ): TenantOptionRule | undefined {\n    if (Array.isArray(holder)) {\n      return holder\n        .find(el => AssistantUtils.getGroupBySystem(el, system))\n    }\n    else {\n      if (isAllOf(holder) && holder.system === system) {\n        return holder\n      }\n      else if (isAnyOf(holder)) {\n        return holder.children\n          .filter(c => isAllOf(c))\n          .find(\n            (c) => AssistantUtils\n              .getGroupBySystem(c, system) && c?.system === system\n          )\n      }\n      else if (isConditionalIf(holder)) {\n        const condHolder = AssistantUtils.getGroupBySystem(holder.condition, system)\n\n        if (condHolder) return condHolder\n\n        return holder.body\n          .find(el => AssistantUtils.getGroupBySystem(el, system))\n      }\n      return undefined\n    }\n  },\n\n  getSystems(holder: TenantOptionRule): string[] {\n    if (isAllOf(holder)) {\n      if (holder.system) return [ holder.system ]\n    }\n    else if (isAnyOf(holder)) {\n      return holder.children\n        .flatMap((c) => AssistantUtils.getSystems(c))\n    }\n    else if (isConditionalIf(holder)) {\n      return holder.body\n        .flatMap((c) => AssistantUtils.getSystems(c))\n    }\n\n    return []\n  },\n\n  getOptsInGroup(\n    holder: TenantOptionRule,\n    availableTenantOptions: string[],\n    currentTenantOptions: string[]\n  ): string[] {\n    if (isAllOf(holder))\n      return holder.children.flatMap((c) =>\n        AssistantUtils\n          .getOptsInGroup(c, availableTenantOptions, currentTenantOptions)\n      )\n    if (isConditionalIf(holder)) {\n      if (ruleAccepts(holder.condition, currentTenantOptions)) {\n        return holder.body.flatMap((c) =>\n          AssistantUtils.getOptsInGroup(c, availableTenantOptions, currentTenantOptions)\n        )\n      } else return []\n    }\n    if (isOpt(holder)) return [ holder.tenantOption ]\n\n    return []\n  },\n\n  getOptsInGroupBySystem(\n    holder: TenantOptionRule,\n    system: string,\n    availableTenantOptions: string[],\n    currentTenantOptions: string[],\n    allAvailable: boolean = false\n  ): string[] {\n    if (isAllOf(holder) && holder.system === system) {\n      return AssistantUtils\n        .getOptsInGroup(holder, availableTenantOptions, currentTenantOptions)\n    }\n    else if (isAnyOf(holder)) {\n      return holder.children.flatMap((c) => AssistantUtils\n        .getOptsInGroupBySystem(c, system, availableTenantOptions, currentTenantOptions))\n    }\n    else if (isConditionalIf(holder)) {\n      if (\n        allAvailable || ruleAccepts(holder.condition, currentTenantOptions)\n      ) {\n        return holder.body\n          .flatMap((c) => AssistantUtils\n            .getOptsInGroupBySystem(c, system, availableTenantOptions, currentTenantOptions))\n      } else return []\n    }\n\n    return []\n  },\n\n  getOpts(group: TenantOptionRuleGroup, system: string): string[] {\n    return group.children?.[system] || []\n  },\n}\n\nexport default AssistantUtils\n","import {\n  Assistant,\n  AssistantDefinition,\n  ConnectorObject,\n  TenantOptionRuleChildren,\n  isAllOf,\n  isOpt,\n} from \"@/types\"\n\nimport AssistantUtils from \"@/modules/tenant-edit-dialog/assistant-utils\"\nimport Reseller from \"@/modules/injected-js-handlers/reseller\"\nimport Util from \"@/modules/utils/util\"\nimport Locale from \"@/modules/utils/locales\"\n\ntype RequiredOptType = \"endsWith\" | \"equals\" | \"contains\" | \"startsWith\"\n\nexport interface SalesFlowTenant {\n  newOptions: string[],\n  assistants: Assistant[],\n}\n\ninterface RequiredOpt {\n  type: RequiredOptType,\n  value: string,\n}\n\nexport interface AssistantPlugDefinitionObj {\n  text: string,\n  requiredOpts: RequiredOpt[],\n  import?: boolean,\n  export?: boolean\n}\n\nexport interface SpecialPlugDefinitionObj {\n  plug: AssistantPlugDefinitionObj,\n  text: string,\n  connection: ConnectorObject,\n  import?: boolean,\n  export?: boolean\n}\n\nexport interface CompatibleWith {\n  assistantCode: string,\n}\n\nexport interface SourceType {\n  value: string,\n  text: string,\n  compatibleWith: Record<string, CompatibleWith>\n}\n\nexport interface DestinationType {\n  value: string,\n  text: string,\n  compatibleWith: Record<string, CompatibleWith>\n}\n\n/* eslint-disable no-unused-vars */\nexport enum Group {\n  ecommerce = \"ecommerce\",\n  erp = \"erp\",\n  marketplace = \"marketplace\",\n  payment = \"payment\",\n  pos = \"pos\",\n  logistics = \"logistics\",\n  misc = \"misc\",\n}\n/* eslint-enable no-unused-vars */\n\nexport const SalesFlowUtils = {\n\n  assistantPlugDefinition: (() => (({\n    \"order-transfer\": {\n      order: [\n        {\n          text: Locale.translate(\"Orders\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"import.orders\",\n            },\n          ],\n          import: true,\n        },\n        {\n          text: Locale.translate(\"Orders\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"export.orders\",\n            },\n            {\n              type: \"equals\",\n              value: \"api.partner.shiplink\",\n            },\n          ],\n          export: true,\n        },\n      ],\n      shipments: [\n        {\n          text: Locale.translate(\"Shipments\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"import.shipments\",\n            },\n          ],\n          import: true,\n        },\n        {\n          text: Locale.translate(\"Orders\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"orders_as_shipments\",\n            },\n          ],\n          export: true,\n        },\n      ],\n    },\n\n    \"order-auto-ledger-entry-settlement\": {\n      order: [\n        {\n          text: Locale.translate(\"Orders\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"import.orders\",\n            },\n          ],\n          import: true,\n        },\n      ],\n      ledgeraccounts: [\n        {\n          text: Locale.translate(\"Ledger_accounts\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"import.accounting.ledgeraccounts\",\n            },\n          ],\n          import: true,\n        },\n      ],\n      payouts: [\n        {\n          text: Locale.translate(\"Payouts\"),\n          requiredOpts: [\n            {\n              type: \"contains\",\n              value: \"as_settlementreport\",\n            },\n          ],\n          import: true,\n        },\n      ],\n      ledgerentries: [\n        {\n          text: Locale.translate(\"Ledger_entries\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"export.accounting.ledgerentries\",\n            },\n          ],\n          export: true,\n        },\n      ],\n    },\n\n    \"ledger-entry-transfer-settlement\": {\n      ledgerentries: [\n        {\n          text: Locale.translate(\"Ledger_entries\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"import.accounting.ledgerentries\",\n            },\n            {\n              type: \"endsWith\",\n              value: \"import.transactions_as_ledgerentry\",\n            },\n          ],\n          import: true,\n        },\n        {\n          text: Locale.translate(\"Ledger_entries\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"export.accounting.ledgerentries\",\n            },\n          ],\n          export: true,\n        },\n        {\n          text: Locale.translate(\"Ledger_entries_account_transaction\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"import.accounttransaction_as_ledgerentry\",\n            },\n          ],\n          import: true,\n        },\n        {\n          text: Locale.translate(\"Ledger_entries_purchase\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"import.purchase_as_ledgerentry\",\n            },\n          ],\n          import: true,\n        },\n      ],\n      transactions: [\n        {\n          text: Locale.translate(\"Transactions\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"import.transactions_as_ledgerentry\",\n            },\n          ],\n          import: true,\n        },\n      ],\n      ledgeraccounts: [\n        {\n          text: Locale.translate(\"Ledger_accounts\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"import.accounting.ledgeraccounts\",\n            },\n          ],\n          import: true,\n        },\n      ],\n      orders: [\n        {\n          text: Locale.translate(\"Orders\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"import.orders\",\n            },\n          ],\n          import: true,\n        },\n        {\n          text: Locale.translate(\"Orders\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"export.orders\",\n            },\n          ],\n          export: true,\n        },\n      ],\n\n      invoices: [\n        {\n          text: Locale.translate(\"Invoices\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"export.invoices\",\n            },\n          ],\n          export: true,\n        },\n      ],\n    },\n\n    \"zreport-settlement\": {\n      transactions: [\n        {\n          text: Locale.translate(\"Transactions\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"_as_zreport\",\n            },\n          ],\n          import: true,\n        },\n      ],\n      payouts: [\n        {\n          text: Locale.translate(\"Payouts\"),\n          requiredOpts: [\n            {\n              type: \"contains\",\n              value: \"as_settlementreport\",\n            },\n          ],\n          import: true,\n        },\n      ],\n      ledgeraccounts: [\n        {\n          text: Locale.translate(\"Ledger_accounts\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"import.accounting.ledgeraccounts\",\n            },\n          ],\n          import: true,\n        },\n      ],\n      ledgerentries: [\n        {\n          text: Locale.translate(\"Ledger_entries\"),\n          requiredOpts: [\n            {\n              type: \"endsWith\",\n              value: \"export.zreport.bookings\",\n            },\n            {\n              type: \"endsWith\",\n              value: \"export.settlementreport.bookings\",\n            },\n          ],\n          export: true,\n        },\n      ],\n    },\n  } as Record<string, Record<string, AssistantPlugDefinitionObj[]>>))),\n\n  sourceTypeOptions: (() => (([\n    {\n      value: \"orders\",\n      text: Locale.translate(\"Orders\"),\n      compatibleWith: {\n        orders: {\n          assistantCode: \"order-transfer\",\n        },\n        ledgerentries: {\n          assistantCode: \"order-auto-ledger-entry-settlement\",\n        },\n      },\n    },\n    {\n      value: \"ledgerentries\",\n      text: Locale.translate(\"Ledger_entries_sie_files\"),\n      compatibleWith: {\n        ledgerentries: {\n          assistantCode: \"ledger-entry-transfer-settlement\",\n        },\n      },\n    },\n    {\n      value: \"zreports\",\n      text: Locale.translate(\"Zreports_and_settlements\"),\n      compatibleWith: {\n        ledgerentries: {\n          assistantCode: \"zreport-settlement\",\n        },\n      },\n    },\n  ] as SourceType[]))),\n\n  destinationTypeOptions: (() => (([\n    {\n      value: \"orders\",\n      text: Locale.translate(\"Orders\"),\n      compatibleWith: {\n        orders: {\n          assistantCode: \"order-transfer\",\n        },\n      },\n    },\n    {\n      value: \"ledgerentries\",\n      text: Locale.translate(\"Ledger_entries\"),\n      compatibleWith: {\n        orders: {\n          assistantCode: \"order-auto-ledger-entry-settlement\",\n        },\n        ledgerentries: {\n          assistantCode: \"ledger-entry-transfer-settlement\",\n        },\n        zreports: {\n          assistantCode: \"zreport-settlement\",\n        },\n      },\n    },\n  ] as DestinationType[]))),\n\n  hasOption(options: string[] | undefined,\n    opt: string | undefined): boolean {\n    if (!options || !opt) return false\n\n    return options.includes(opt)\n  },\n\n  getSystemOpt(type: string): string {\n    if (type === \"api.partner.shiplink\") return type\n    return `${type}.connection`\n  },\n\n  getPlugOpt(options: string[] | undefined,\n    type: string,\n    opt: string): string | undefined {\n    return (options || []).find(\n      (o: string) => o.includes(type) && o.includes(opt)\n    )\n  },\n\n  getPlugs(systems: ConnectorObject[],\n    options: string[],\n    plugObjects: AssistantPlugDefinitionObj[]): SpecialPlugDefinitionObj[] {\n    return plugObjects\n      .filter((plug: AssistantPlugDefinitionObj) =>\n        (options || []).some((opt: string) => {\n          return plug.requiredOpts.some((o: RequiredOpt) => {\n            if (o.type === \"startsWith\") return opt.startsWith(o.value)\n            else if (o.type === \"endsWith\") return opt.endsWith(o.value)\n            else if (o.type === \"contains\") return opt.includes(o.value)\n            return o.value === opt\n          })\n        }))\n      .flatMap((plug: AssistantPlugDefinitionObj) => {\n        return systems\n          .filter((connObj: ConnectorObject) => {\n            const checks = [\n              SalesFlowUtils.hasOption(options, SalesFlowUtils.getSystemOpt(connObj.value)),\n              plug.requiredOpts.some((opt: RequiredOpt) =>\n                SalesFlowUtils.hasOption(options,\n                  SalesFlowUtils.getPlugOpt(options, connObj.value, opt.value))\n              ),\n            ]\n\n            return checks.every(c => c)\n          })\n          .map((c: ConnectorObject) => ({\n            import: plugObjects.every(p => p.import),\n            export: plugObjects.every(p => p.export),\n            text: plug.text,\n            connection: c,\n            plug,\n          }))\n      })\n  },\n\n  getRootOptions(assistantDefinition: AssistantDefinition): string[] {\n    const allRules = assistantDefinition.requiredOptions\n      .filter(rule => isAllOf(rule))\n\n    if (Util.isNonEmptyArray(allRules)) {\n      const requiredRule = allRules[0]\n\n      if (requiredRule) {\n        return requiredRule.children\n          .filter(c => isOpt(c))\n          .map(c => c.tenantOption)\n      }\n    }\n    return []\n  },\n\n  visibleAvailableAssistants(assistantDefinitions: AssistantDefinition[])\n  : AssistantDefinition[] {\n    return assistantDefinitions\n      .filter((assistant: AssistantDefinition) => {\n        const rootOptions = SalesFlowUtils.getRootOptions(assistant) || []\n        return rootOptions.every((opt: string) => Reseller.hasAllowableTenantOption(opt))\n      })\n  },\n\n  allowedSourceTypeOptions(assistantDefinitions: AssistantDefinition[]\n  ):\n    SourceType[] {\n    return SalesFlowUtils.sourceTypeOptions()\n      .filter((s: SourceType) => {\n        const compatibleAssistants = Object\n          .values(s.compatibleWith)\n          .map(v => v.assistantCode)\n          .filter(assCode => {\n            const assistantDef = assistantDefinitions\n              .find((ass: AssistantDefinition) => ass.code === assCode)\n\n            if (assistantDef) {\n              const head = assistantDef.requiredOptions?.[0] || []\n              const sources = (assistantDef.requiredOptions?.[1] as TenantOptionRuleChildren)?.children || []\n\n              return AssistantUtils.accepts(head) &&\n                sources.some(holder => AssistantUtils.accepts(holder))\n            }\n            return false\n          })\n\n        return SalesFlowUtils.visibleAvailableAssistants(assistantDefinitions)\n          .some((ass: AssistantDefinition) => compatibleAssistants.includes(ass.code))\n      })\n  },\n\n  allowedDestinationTypeOptions(assistantDefinitions: AssistantDefinition[]\n  ): DestinationType[] {\n    return SalesFlowUtils.destinationTypeOptions()\n      .filter((s: DestinationType) => {\n        const compatibleAssistants = Object\n          .values(s.compatibleWith)\n          .map(v => v.assistantCode)\n          .filter(assCode => {\n            const assistantDef = assistantDefinitions\n              .find((ass: AssistantDefinition) => ass.code === assCode)\n\n            if (assistantDef) {\n              return AssistantUtils.accepts(assistantDef.requiredOptions?.[0] || [])\n            }\n            return false\n          })\n\n        return SalesFlowUtils.visibleAvailableAssistants(assistantDefinitions)\n          .some((ass: AssistantDefinition) => compatibleAssistants.includes(ass.code))\n      })\n  },\n\n  visibleSourceTypeOptions(\n    sourceType: string | undefined,\n    destinationType: string | undefined\n  ): SourceType[] {\n    if (!sourceType || !destinationType)\n      return SalesFlowUtils.sourceTypeOptions()\n\n    return SalesFlowUtils.sourceTypeOptions()\n      .filter((s: SourceType) => Object.keys(s.compatibleWith)\n        .includes((destinationType as string)))\n  },\n\n  visibleDestinationTypeOptions(\n    sourceType: string | undefined,\n    destinationType: string | undefined,\n    assistantDefinitions: AssistantDefinition[]\n  ): DestinationType[] {\n    if (!sourceType) return []\n\n    if (!destinationType) {\n      return SalesFlowUtils.allowedDestinationTypeOptions(assistantDefinitions)\n        .filter((d: DestinationType) => {\n          return Object.keys(d.compatibleWith)\n            .includes((sourceType as string))\n        })\n    }\n\n    return SalesFlowUtils.allowedDestinationTypeOptions(assistantDefinitions)\n      .filter((d: DestinationType) => {\n        const isCompatibleWithSourceType = Object.keys(d.compatibleWith)\n          .includes((sourceType as string))\n\n        const isCompatibleWith = SalesFlowUtils.visibleSourceTypeOptions(sourceType, destinationType)\n          .some((s: SourceType) => {\n            return Object.keys(s.compatibleWith).includes((destinationType as string))\n          })\n\n        return isCompatibleWithSourceType && isCompatibleWith\n      })\n  },\n}","import Util from \"@/modules/utils/util\"\nimport AssistantUtils from \"@/modules/tenant-edit-dialog/assistant-utils\"\n\nimport {\n  AssistantDefinition,\n  TenantOptionRuleGroup,\n} from \"@/types\"\n\nexport const TenantEditDialogUtils = {\n  getSystemOptPrefixFromSystem(system: string): string {\n    switch (system) {\n      case \"shiplink\":\n        return \"api.partner.shiplink\"\n      default:\n        return `${system}`\n    }\n  },\n\n  getSystemOpt(system: string): string {\n    switch (system) {\n      case \"sie\":\n        return \"sie.connection\"\n      case \"shiplink\":\n        return \"api.partner.shiplink\"\n      default:\n        return `${system}.connection`\n    }\n  },\n\n  clearGroupSelection(group: TenantOptionRuleGroup,\n    system: string, options: string[]): string[] {\n    const tenantOptions: string[] = Util.deepClone(options || [])\n    let opts = AssistantUtils.getOpts(group, system)\n    const systemOptPrefix = TenantEditDialogUtils\n      .getSystemOptPrefixFromSystem(system)\n\n    // If other opts with that system exists\n    if (\n      tenantOptions\n        .filter((opt) => !opts.includes(opt))\n        .some((o) => o.includes(systemOptPrefix))\n    ) {\n      // Dont remove other opts\n      opts = opts.filter((o) => o !== TenantEditDialogUtils\n        .getSystemOpt(system))\n    }\n\n    return tenantOptions.filter((opt) => !opts.includes(opt))\n  },\n\n  hasOption(opt: string, options: string[] | undefined): boolean {\n    if (!options) return false\n    return options.includes(opt)\n  },\n\n  doChangeGroupSelection(group: TenantOptionRuleGroup,\n    system: string, options: string[]): string[] {\n    let tenantOptions = Util.deepClone(options || [])\n    const opts = AssistantUtils.getOpts(group, system)\n\n    if (opts.every((opt) => TenantEditDialogUtils.hasOption(opt, options))) {\n      return TenantEditDialogUtils.clearGroupSelection(group, system, options)\n    } else {\n      tenantOptions.push(...opts)\n      tenantOptions = Array.of(...new Set(tenantOptions))\n      return tenantOptions\n    }\n  },\n\n  changeGroupSelection(group: TenantOptionRuleGroup,\n    system: string,\n    options: string[]): string[] {\n    if (group.allowMultiple) {\n      return TenantEditDialogUtils.doChangeGroupSelection(group, system, options)\n    } else {\n      let newOptList = options\n      for (let otherSystem of group.systems.filter((s) => s !== system)) {\n        if (TenantEditDialogUtils.isGroupActive(group, otherSystem, newOptList)) {\n          newOptList = TenantEditDialogUtils.clearGroupSelection(group, otherSystem, newOptList)\n        }\n      }\n\n      return TenantEditDialogUtils.doChangeGroupSelection(group, system, newOptList)\n    }\n  },\n\n  addOptsOrRemove(opts: string[], options: string[]): string[] {\n    let tenantOptions = Util.deepClone(options || [])\n\n    if (opts.some(opt => tenantOptions.includes(opt))) {\n      for (let opt of opts) {\n        tenantOptions.splice(tenantOptions.indexOf(opt), 1)\n      }\n    }\n    else {\n      tenantOptions.push(...opts)\n    }\n\n    return tenantOptions\n  },\n\n  isGroupActive(group: TenantOptionRuleGroup, system: string,\n    options: string[]): boolean {\n    const opts = AssistantUtils.getOpts(group, system)\n\n    if (Util.isNonEmptyArray(opts)) {\n      return opts.every((opt) => TenantEditDialogUtils.hasOption(opt, options))\n    }\n\n    return false\n  },\n\n  getAssistantDefinition(code: string,\n    availableAssistants: AssistantDefinition[]):\n    AssistantDefinition | undefined {\n    return availableAssistants\n      .find((a) => a.code === code)\n  },\n}\n","import Util from \"@/modules/utils/util\"\nimport Locale from \"@/modules/utils/locales\"\nimport {\n  Country,\n} from \"@/types\"\n\nconst CountryHelper = {\n  /**\n   *\n   * @returns Country map with either code2 or code3 as key and\n   * country as value.\n   * @private\n   */\n  _createCountryMap(field: \"code3\" | \"code2\"): Record<string, Country> {\n    return Locale.allCountries()\n      .reduce((a: Record<string, Country>, b: Country) => {\n        a[b[field]] = b\n        return a\n      }, {})\n  },\n}\n\nlet allCountries: Country[] = []\nlet code2Map: Record<string, Country> = {}\nlet code3Map: Record<string, Country> = {}\n\nconst init = (): void => {\n  if (!Util.notEmptyObject(code3Map)) {\n    code3Map = CountryHelper._createCountryMap(\"code3\")\n  }\n\n  if (!Util.notEmptyObject(code2Map)) {\n    code2Map = CountryHelper._createCountryMap(\"code2\")\n  }\n\n  if (!Util.isNonEmptyArray(allCountries)) {\n    allCountries = Locale.allCountries()\n  }\n}\n\nconst _Country = {\n  /**\n   * Get country name by country code\n   * @param {Country.code3 | Country.code2} code\n   * @returns {Country.name | Country.code3 | Country.code2 | undefined}\n   */\n  getCountryNameByCode3(code: string): string | undefined {\n    if (!Util.isSet(code)) return code\n\n    init()\n\n    const country = _Country.getCountryFromCode(code)\n\n    return country ? country.name : code\n  },\n\n  /**\n   * Retrieves the code3 version from a code2 version of a country\n   * @param {Country.code2} code2\n   * @returns {Country.code3|undefined}\n   */\n  countryCode2ToCode3(code2: string): string | undefined {\n    init()\n\n    if (!(code2 in code2Map)) return undefined\n\n    return code2Map[code2]?.code3\n  },\n\n  /**\n   * Retrieves the code3 version from a code2 version of a country\n   */\n  countryCode3ToCode2(code3: string): string | undefined {\n    init()\n\n    if (!(code3 in code3Map)) return undefined\n\n    return code3Map[code3]?.code2\n  },\n\n  getCountryFromCode(code: string): Country | undefined {\n    init()\n\n    if (code in code3Map) return code3Map[code]\n    if (code in code2Map) return code2Map[code]\n\n    return undefined\n  },\n\n  /**\n   * Convert a code3 code to a unicode flag\n   * @param {Country.code3} country\n   * @returns {string|undefined} - unicode flag or undefined\n   */\n  convertCountryToUnicodeFlag(country: string): string | undefined {\n    if (!Util.isSet(country)) return undefined\n\n    init()\n\n    const code2 = _Country.countryCode3ToCode2(country)\n\n    if (Util.isSet(code2)) {\n      const magicUnicodeNr = 127397\n      const emojiCode = code2\n        .toString()\n        .toUpperCase()\n        .split(\"\")\n        .map((char) =>\n          String.fromCodePoint(char.charCodeAt(0) + magicUnicodeNr)\n        )\n        .join(\"\")\n\n      return emojiCode\n    }\n\n    return undefined\n  },\n}\n\nexport default _Country\n","export interface DebouncerType {\n  time: number\n  timeoutId: ReturnType<typeof setTimeout> | null\n  // eslint-disable-next-line\n  debounce(callback: () => void, newTime?: number): void\n}\n\nclass Debouncer implements DebouncerType {\n  time: number\n  timeoutId: ReturnType<typeof setTimeout> | null\n\n  constructor(time?: number) {\n    const DEFAULT_TIMEOUT: number = 750\n\n    if (time) this.time = time\n    else this.time = DEFAULT_TIMEOUT\n\n    this.timeoutId = null\n  }\n\n  debounce(callback: () => void, newTime?: number): void {\n    if (this.timeoutId) clearTimeout(this.timeoutId)\n    const time = newTime || this.time\n\n    this.timeoutId = setTimeout(() => callback(), time)\n  }\n}\n\nexport default Debouncer\n","import Util from \"@/modules/utils/util\"\nimport { useLocale } from \"@/plugins/store/localestore\"\n\nimport {\n  Language,\n} from \"@/types\"\n\nconst LangHelper = {\n  _createLanguageMap(field: \"code3\" | \"code2\"): Record<string, Language> {\n    return useLocale().languages\n      .reduce((a: Record<string, Language>, b: Language) => {\n        a[b[field]] = b\n        return a\n      }, {})\n  },\n\n  /**\n   * Since the locale store isn't populated from the beginning, create\n   * the map once we have it. Then return it.\n   * @param {\"code3\" | \"code2\"} field\n   */\n  initLanguageMap(field: \"code3\" | \"code2\"): Record<string, Language> {\n    const map = field === \"code3\" ? allLanguagesMap : allLanguagesCode2Map\n\n    if (Object.keys(map).length > 0) return map\n    else {\n      if (field === \"code3\") {\n        allLanguagesMap = LangHelper._createLanguageMap(field)\n        return allLanguagesMap\n      }\n      else {\n        allLanguagesCode2Map = LangHelper._createLanguageMap(field)\n        return allLanguagesCode2Map\n      }\n    }\n  },\n}\n\nlet allLanguagesMap: Record<string, Language> = {}\nlet allLanguagesCode2Map: Record<string, Language> = {}\n\nconst _Language = {\n  allLanguages: (): Language[] => useLocale().languages,\n  allLanguagesMap: (): Record<string, Language> => LangHelper.initLanguageMap(\"code3\"),\n  allLanguagesCode2Map: (): Record<string, Language> => LangHelper.initLanguageMap(\"code2\"),\n\n  getLanguageNameByCode(code: string): string | undefined {\n    return _Language.allLanguagesMap()?.[code]?.name\n  },\n\n  getLanguageNameByCode2(code2: string): string | undefined {\n    return _Language.allLanguagesCode2Map()?.[code2]?.name\n  },\n\n  code3ToCode2(code3: string): string | undefined {\n    return _Language.allLanguagesMap()?.[code3]?.code2\n  },\n\n  code2ToCode3(code2: string): string | undefined {\n    return _Language.allLanguages()\n      .find(obj => obj.code2 === code2)?.code3\n  },\n\n  isValidCode(code3: string): boolean {\n    return Util.isSet(_Language.allLanguagesMap()?.[code3])\n  },\n\n  customSort(a: Language, b: Language): number {\n    const ordering: string[] = [\n      \"swe\", \"eng\", \"nor\", \"dan\", \"fin\", \"nld\",\n    ]\n\n    const aIndex = ordering.indexOf(a.code3)\n    const bIndex = ordering.indexOf(b.code3)\n\n    if (aIndex !== -1 && bIndex !== -1) return aIndex - bIndex\n    if (aIndex !== -1) return -1\n    if (bIndex !== -1) return 1\n    return a.name.localeCompare(b.name)\n  },\n}\n\nexport default _Language","import Util from \"@/modules/utils/util\"\nimport Locale from \"@/modules/utils/locales\"\n\n/**\n * Tag translation function\n */\nexport const _ = (key: string): string => Locale.translate(key)\n\n/**\n * Function to translate with arguments\n * Example: __('Hello_world', [_('cool')])\n * If the text in _resources.html is:\n * <res name=\"Hello_world\">Hello this {} world!</res>\n * Becomes:\n * Hello this cool world!\n * @param textId {string} - the name in _resources.html\n * @param arr {String[]} - if the object has keys that matches the text inside the\n * brackets, then the brackets and the key will be replaced by the text.\n * @returns {string} - the text with the arguments\n */\nexport const __ = (textId: string, arr: string[]): string => {\n  let text = _(textId)\n\n  if (Util.isNonEmptyArray(arr)) {\n    arr.forEach((val) => {\n      if (Util.isString(text)) {\n        text = text.replace(\"{}\", val)\n      }\n    })\n  }\n  return text\n}\n","import moment from \"moment\"\n\nimport { useLocale } from \"@/plugins/store/localestore\"\n\nimport {\n  Language,\n  Country,\n  Currency,\n  TimeZone,\n} from \"@/types\"\n\nexport default {\n  allLanguages(): Language[] {\n    return useLocale().languages\n  },\n  allCountries(): Country[] {\n    return useLocale().countries\n  },\n  allCurrencies(): Currency[] {\n    return useLocale().currencies\n  },\n  allTimeZones(): TimeZone[] {\n    return useLocale().timezones\n  },\n  translate(msg: string): string {\n    return useLocale().texts[msg] ?? msg\n  },\n  formatToIsoDate(input: string): string {\n    return moment(input).format(\"YYYY-MM-DD\")\n  },\n  dateTimeFormat(inp: string): string {\n    return moment(inp).format(\"YYYY-MM-DD HH:mm:ss\")\n  },\n  capitalize(val: string): string {\n    if (val?.length > 0) {\n      const head: string | undefined = val[0]\n      const tail: string = val.slice(1)\n\n      return head?.toUpperCase() + tail\n    }\n    return \"\"\n  },\n}\n","import { GroupedOptionObject } from \"@/types\"\n\n/* eslint-disable */\nexport interface SortOptionsType {\n  options: string[]\n  optionObject: GroupedOptionObject\n\n  doGroupSort: () => void\n  sortOptions: () => GroupedOptionObject\n  checkOptions: (group: string[], dataGroup: string[],\n                 forceDeselect: boolean) => string[]\n}\n/* eslint-enable */\n\nclass SortOptions implements SortOptionsType {\n  options: string[]\n  optionObject: GroupedOptionObject\n\n  constructor(options: string[]) {\n    this.options = options\n    this.optionObject = {}\n\n    this.doGroupSort()\n  }\n\n  doGroupSort(): void {\n    const defaultObject: GroupedOptionObject = {}\n    this.optionObject = this.options.reduce((a, b) => {\n      const category: string | undefined = b.split(\".\")[0]\n\n      if (category) {\n        if (category in a && a && a[category]) {\n          a[category].push(b)\n        }\n        else {\n          a[category] = [ b ]\n        }\n      }\n\n      return a\n    }, defaultObject)\n  }\n\n  sortOptions(): GroupedOptionObject {\n    return this.optionObject\n  }\n\n  checkOptions(group: string[], dataGroup: string[],\n    forceDeselect: boolean = false): string[] {\n    const clone = Array.of(...dataGroup)\n    const isParentChecked = group.every((op) => clone.includes(op))\n\n    if (forceDeselect || isParentChecked) {\n      return clone.filter((op) => !group.includes(op))\n    } else {\n      return clone.concat(...group)\n    }\n  }\n}\n\nexport default SortOptions\n","import moment from \"moment\"\nimport $ from \"jquery\"\n\nimport ResellerUser from \"@/modules/injected-js-handlers/reseller-user\"\n\nimport {\n  Undefined,\n} from \"@/types\"\n\nconst Util = {\n  isSet<T>(val: T | Undefined): val is T {\n    return val !== undefined && val !== null\n  },\n\n  /**\n   * Create a clone of the object or array\n   * @param val - the object or array to which you want to clone\n   */\n  deepClone(val: any): any {\n    return JSON.parse(JSON.stringify(val))\n  },\n\n  isObject<T extends Object>(obj: T | undefined | null): obj is T {\n    return typeof obj === \"object\" && obj !== null && !Array.isArray(obj)\n  },\n\n  isString(val: any): val is string {\n    return typeof val === \"string\"\n  },\n\n  isNonEmptyArray(arr: any): boolean {\n    return arr && Array.isArray(arr) && arr.length > 0\n  },\n\n  isEmptyArray(arr: any): boolean {\n    return arr && Array.isArray(arr) && arr.length === 0\n  },\n\n  notEmptyObject(obj: any): boolean {\n    return (\n      obj !== undefined && $.isPlainObject(obj) && Object.keys(obj).length > 0\n    )\n  },\n\n  getLocalizedDate(date: string): string {\n    const currentDate = moment()\n    const fromDate = moment(date)\n    const resellerLanguage = ResellerUser.language()\n\n    let locale = \"en\"\n    let format = \"MMM Do\"\n\n    if (resellerLanguage === \"swe\") {\n      locale = \"sv\"\n      format = \"Do MMM\"\n    }\n\n    if (fromDate.year() !== currentDate.year()) {\n      return fromDate.locale(locale).format(format + \" YYYY\")\n    } else {\n      return fromDate.locale(locale).format(format)\n    }\n  },\n\n  isEmptyObject(obj: any): boolean {\n    return Util.isObject(obj) && !Util.notEmptyObject(obj)\n  },\n\n  isNonEmptyText(text: any): boolean {\n    return Util.isSet(text) && typeof text === \"string\" && text.length > 0\n  },\n\n  addThousandSeparator(num: number): string {\n    return num\n      .toString()\n      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \" \")\n  },\n\n  intersection(arr1: string[], arr2: string[]): string[] {\n    if (Util.isNonEmptyArray(arr1) && Util.isNonEmptyArray(arr2)) {\n      return arr1.filter((v) => arr2.includes(v))\n    }\n    return []\n  },\n\n  isSafari(): boolean {\n    return navigator.userAgent.includes(\"Safari/\") && !Util.isChrome()\n  },\n\n  isChrome(): boolean {\n    return (\n      navigator.userAgent.includes(\"Chrome/\") &&\n      !navigator.userAgent.includes(\"Chromium/\")\n    )\n  },\n\n  getUniqueId(): string {\n    try {\n      return crypto.randomUUID()\n    }\n    catch {\n      const randStrFn = () => {\n        return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1)\n      }\n\n      return Array.of(...new Array(5)).map(() => randStrFn()).join(\"-\")\n    }\n  },\n}\n\nexport default Util\n","import { _, __ } from \"@/modules/utils/localehelpers\"\nimport {\n  Rule,\n  RuleCallback,\n} from \"@/types\"\n\nexport class Validation {\n  ref: HTMLFormElement\n  errors: string[]\n\n  constructor(ref: HTMLFormElement) {\n    this.ref = ref\n    this.errors = []\n\n    this.checkForErrors()\n  }\n\n  checkForErrors(): void {\n    this.errors = []\n\n    for (let i in this.ref?.inputs || {}) {\n      let inp = this.ref.inputs[i]\n      inp.validate()\n\n      for (let j in inp.errorBucket) {\n        let err = inp.errorBucket[j]\n        const field = inp.$attrs[\"rule-label\"] || inp.label\n        this.errors.push(`Field: ${field}. Message: ${err}`)\n      }\n    }\n  }\n\n  hasErrors(): boolean {\n    return this.errors.length > 0\n  }\n\n  getErrors(): string[] {\n    return this.errors\n  }\n\n  getErrorString(): string {\n    return this.getErrors().join(\"\\n\")\n  }\n}\n\nexport interface DefaultValidatorsType {\n  /* eslint-disable */\n  isUnset(value: any): boolean\n  required(value: any): Rule\n  requiredOnCreate(isCreate: boolean): RuleCallback\n  minLength(len: number): RuleCallback\n  isEmail(value: any): Rule\n  isUri(value: any): Rule\n  passWordMatch(password: any, confirm: any): RuleCallback\n  correctLoginFormat(): RuleCallback\n  /* eslint-enable */\n}\n\nexport const DefaultValidators: DefaultValidatorsType = {\n  isUnset(value: any): boolean {\n    return value === undefined || value === null || value === \"\"\n  },\n\n  required(value: any): Rule {\n    if (DefaultValidators.isUnset(value)) return _(\"Cannot_be_empty\")\n    return true\n  },\n\n  requiredOnCreate(isCreate: boolean): RuleCallback {\n    return (value: any): Rule => {\n      if (isCreate && DefaultValidators.isUnset(value))\n        return _(\"Cannot_be_empty\")\n      return true\n    }\n  },\n\n  minLength(len: number): RuleCallback {\n    return (value: any): Rule => {\n      if (!value || value.length < len) return __(\"Must_be_at_least\", [ len + \"\" ])\n      else return true\n    }\n  },\n\n  isEmail(value: any): Rule {\n    let check = (): boolean => {\n      if (!value || value.length < 1) return true\n\n      let parts = value.split(\"@\")\n      if (parts.length !== 2) return false\n\n      let user = parts[0]\n      let domain = parts[1]\n\n      if (user.length < 1) return false\n      if (domain.length < 3) return false\n\n      return true\n    }\n\n    if (check()) return true\n    else return _(\"Not_an_email_address\")\n  },\n\n  isUri(value: any): Rule {\n    const regex = /^http(s|):\\/\\/.+$/\n    if (!value || value.length < 1) return true\n    if (!regex.test(value)) return _(\"Not_proper_uri\")\n    return true\n  },\n\n  passWordMatch(password: any, confirm: any): RuleCallback {\n    return (): Rule => {\n      if (password !== confirm) return _(\"Password_confirmation_must_match\")\n      else return true\n    }\n  },\n\n  correctLoginFormat(): RuleCallback {\n    const regex = /^[a-z0-9_@.-]+$/\n    return (value: any): Rule => {\n      if (regex.test(value)) return true\n      return _(\"Contains_unsupported_characters\")\n    }\n  },\n}\n","import Vue, { Component, Ref } from \"vue\"\n\nimport Util from \"@/modules/utils/util\"\n\nconst VueHelper = {\n  /**\n   * When we have a dialog that is mounted in runtime as compared to being mounted in the beginning\n   * of a page life cycle we need to make sure that the dialog is fully available. This special use\n   * case is for dialogs that are available yet rarely used. See example with connector dialogs.\n   *\n   * It would be memory consuming to load all Vue Components on page visit as a user may have\n   * many dialogs and be able to add many more. If we have the option to add these dialogs\n   * they will take a lot of memory. By using this waitForRender method we can reduce all the\n   * dialogs to a single dialog. By using the Vue dynamic component:\n   * https://vuejs.org/v2/guide/components-dynamic-async.html\n   *\n   * We can mount the component in runtime and if we do that we need to make sure it is ready before\n   * we call on certain methods in the component.\n   * @param _this - the vue instance object of the component\n   * @param refName - the name of the ref component\n   * @param functionName - the name of the method you want to access\n   * @returns the component that is rendered\n   */\n  waitForRender(_this: Vue, refName: string = \"dialog\",\n    functionName: string = \"open\"): Promise<Element | Vue> {\n    const checkFunction = (refObj: Ref<Component>): boolean => {\n      const checkFn = (obj: any): boolean => typeof(obj) === \"object\" && functionName in obj &&\n        obj[functionName] !== undefined &&\n        typeof(obj[functionName]) === \"function\"\n\n      if (Array.isArray(refObj) && Util.isNonEmptyArray(refObj)) {\n        return checkFn(refObj[0])\n      } else {\n        return checkFn(refObj)\n      }\n    }\n\n    const checkProperty = (refObj: Ref<Component>): boolean => {\n      // Check that the component is fully mounted\n      const doCheck = (obj: any): boolean => obj && obj._isVue && obj._isMounted || false\n\n      if (Array.isArray(refObj) && Util.isNonEmptyArray(refObj)) {\n        return doCheck(refObj[0])\n      } else {\n        return doCheck(refObj)\n      }\n    }\n\n    const getRefObj = (): any => {\n      // Check that the $refs object has been initialized\n      return _this?.$refs?.[refName]\n    }\n\n    /* Wait for dynamic dialog ref to render */\n    return new Promise((res) => {\n      const interval = setInterval(() => {\n        try {\n          const refObj = getRefObj()\n\n          // Is Vue Ref object initialized\n          if (!refObj) return\n\n          // Check if function is ready\n          let isReady\n          if (Util.isSet(functionName)) {\n            isReady = checkFunction(refObj) && checkProperty(refObj)\n          } else {\n            isReady = checkProperty(refObj)\n          }\n\n          if (isReady) {\n            res(refObj)\n            clearInterval(interval)\n          }\n        }\n        // eslint-disable-next-line no-unused-vars\n        catch (e) {\n          clearInterval(interval)\n        }\n        // Check every 100ms if the dialog is rendered\n      }, 50)\n    })\n  },\n}\n\nexport default VueHelper\n","import Vue from \"vue\"\nimport { createPinia, setActivePinia, PiniaVuePlugin } from \"pinia\"\nimport createPersistedState from \"pinia-plugin-persistedstate\"\n\nVue.use(PiniaVuePlugin)\n\nconst pinia = createPinia()\npinia.use(createPersistedState)\n\n/* Allows calling stores (e.g. useLocale()) from modules that get\n * evaluated before the root Vue instance is constructed. */\nsetActivePinia(pinia)\n\nexport default pinia","export enum StoreKeys {\n  // eslint-disable-next-line no-unused-vars\n  Dialog = \"dialog\",\n  // eslint-disable-next-line no-unused-vars\n  Locale = \"locale\",\n  // eslint-disable-next-line no-unused-vars\n  Sidebar = \"sidebar\",\n}","import { defineStore } from \"pinia\"\n\nimport { StoreKeys } from \"@/plugins/store\"\n\nimport type { Country, Currency, Language, TimeZone } from \"@/types\"\n\ninterface LocaleStoreState {\n  countries: Country[]\n  currencies: Currency[]\n  languages: Language[]\n  texts: Record<string, string>\n  timezones: TimeZone[]\n}\n\nconst state: LocaleStoreState = {\n  countries: [],\n  currencies: [],\n  languages: [],\n  texts: {},\n  timezones: [],\n}\n\nexport const useLocale = defineStore(StoreKeys.Locale, {\n  state: (): LocaleStoreState => state,\n\n  actions: {\n    setLocale(data: LocaleStoreState): void {\n      this.countries = data.countries\n      this.currencies = data.currencies\n      this.languages = data.languages\n      this.texts = data.texts\n      this.timezones = data.timezones\n    },\n  },\n})\n","import Locale from \"@/modules/utils/locales\"\nimport { _, __ } from \"@/modules/utils/localehelpers\"\nimport Language from \"@/modules/utils/language\"\nimport Country from \"@/modules/utils/country\"\nimport BuildInfo from \"@/modules/injected-js-handlers/buildInfo\"\nimport Debouncer from \"@/modules/utils/debounce\"\nimport HelpDesk from \"@/modules/managers/helpdesk\"\nimport Reseller from \"@/modules/injected-js-handlers/reseller\"\nimport ResellerUser from \"@/modules/injected-js-handlers/reseller-user\"\nimport SortOptions from \"@/modules/utils/sort-options\"\nimport Stats from \"@/modules/managers/stats\"\nimport Tenant from \"@/modules/managers/tenant\"\nimport TenantTemplate from \"@/modules/managers/tenant-template\"\nimport Util from \"@/modules/utils/util\"\nimport { DefaultValidators, Validation } from \"@/modules/utils/validators\"\nimport VueHelper from \"@/modules/utils/vuehelper\"\nimport { DataTableQuery } from \"@/modules/libs/datatablequery\"\nimport { QueryBuilder } from \"@/modules/libs/querybuilder\"\nimport AssistantUtils from \"@/modules/tenant-edit-dialog/assistant-utils\"\nimport { SalesFlowUtils } from \"@/modules/tenant-edit-dialog/sales-flow-utils\"\nimport { TenantEditDialogUtils } from \"@/modules/tenant-edit-dialog/tenant-edit-dialog-utils\"\nimport Session from \"@/modules/managers/session\"\n\nconst Modules = {\n  Locale,\n  _,\n  __,\n  Language,\n  Country,\n  BuildInfo,\n  Debouncer,\n  HelpDesk,\n  Reseller,\n  ResellerUser,\n  SortOptions,\n  Stats,\n  Tenant,\n  TenantTemplate,\n  Util,\n  DefaultValidators,\n  Validation,\n  VueHelper,\n  DataTableQuery,\n  QueryBuilder,\n  AssistantUtils,\n  SalesFlowUtils,\n  TenantEditDialogUtils,\n  Session,\n}\n\nexport default Modules","import \"@/plugins/pinia\"\n\nimport $ from \"jquery\"\nimport Locale from \"@/modules/utils/locales\"\nimport Modules from \"@/modules\"\n\nwindow.jQuery = $\nwindow._ = Locale.translate\nwindow.Modules = Modules","interface TypeCheckable {\n  type: string\n}\n\ninterface CoreRecord {\n  created?: string,\n  createdBy?: string,\n  lastModified?: string,\n  lastModifiedBy?: string,\n}\n\ninterface QueryTypeCheckable extends TypeCheckable {}\ninterface TenantOptionRuleCheckable extends TypeCheckable {}\n\nfunction is<T extends QueryTypeCheckable | TenantOptionRuleCheckable>(\n  ident: string, field: keyof T, variable: T): boolean {\n  return variable[field] === ident\n}\n\nexport function isAnd(variable: QueryTypeCheckable | And): variable is And {\n  return is(\"and\", \"type\", variable)\n}\n\nexport function isOr(variable: QueryTypeCheckable | Or): variable is Or {\n  return is(\"or\", \"type\", variable)\n}\n\nexport function isEQ(variable: QueryTypeCheckable | EQ): variable is EQ {\n  return is(\"eq\", \"type\", variable)\n}\n\nexport function isNE(variable: QueryTypeCheckable | NE): variable is NE {\n  return is(\"ne\", \"type\", variable)\n}\n\nexport function isGT(variable: QueryTypeCheckable | GT): variable is GT {\n  return is(\"gt\", \"type\", variable)\n}\n\nexport function isGE(variable: QueryTypeCheckable | GE): variable is GE {\n  return is(\"ge\", \"type\", variable)\n}\n\nexport function isLT(variable: QueryTypeCheckable | LT): variable is LT {\n  return is(\"lt\", \"type\", variable)\n}\n\nexport function isLE(variable: QueryTypeCheckable | LE): variable is LE {\n  return is(\"le\", \"type\", variable)\n}\n\nexport function isContains(variable: QueryTypeCheckable | Contains): variable is Contains {\n  return is(\"substring\", \"type\", variable)\n}\n\nexport function isCustomData(\n  variable: QueryTypeCheckable | FilterClauseWithCustomData):\n  variable is FilterClauseWithCustomData {\n  return is(\"customdata\", \"type\", variable)\n}\n\nexport function isFilterClauseWithFieldValue(variable: QueryTypeCheckable | FilterClauseWithFieldValue):\n  variable is FilterClauseWithFieldValue {\n  const identifiers = [\n    \"eq\",\n    \"ne\",\n    \"substring\",\n    \"lt\",\n    \"le\",\n    \"gt\",\n    \"ge\",\n    \"customdata\",\n  ]\n\n  return identifiers.some(ident => is(ident, \"type\", variable))\n}\n\nexport function isFilterClauseWithSubclauses(variable: QueryTypeCheckable | FilterClauseWithSubclauses):\n  variable is FilterClauseWithSubclauses {\n  const identifiers = [\n    \"or\",\n    \"and\",\n  ]\n\n  return identifiers.some(ident => is(ident, \"type\", variable))\n}\n\nexport interface TenantOptionRule extends TenantOptionRuleCheckable {\n  ruleTag: string\n}\n\nexport interface TenantOptionRuleOpt extends TenantOptionRule {\n  tenantOption: string\n  type: \"Opt\"\n}\n\nexport interface TenantOptionRuleChildren extends TenantOptionRule {\n  children: TenantOptionRule[]\n}\n\nexport interface TenantOptionRuleChildrenAll extends TenantOptionRuleChildren {\n  system: string\n  type: \"AllOf\"\n}\n\nexport interface TenantOptionRuleConditional extends TenantOptionRule {\n  condition: TenantOptionRule\n  body: TenantOptionRule[]\n}\n\nexport interface TenantOptionRuleChildrenAny extends TenantOptionRuleChildren {\n  allowMultiple: boolean\n  type: \"AnyOf\"\n}\n\nexport interface TenantOptionRuleChildrenNoneOf extends TenantOptionRuleChildren {\n  type: \"NoneOf\"\n}\n\nexport interface TenantOptionRuleIf extends TenantOptionRule {\n  condition: TenantOptionRule\n  body: TenantOptionRule[]\n  type: \"If\"\n}\n\nexport interface Selectable {\n  system: string,\n  available: boolean,\n  missingOpts: string[],\n}\n\nexport interface TenantOptionRuleGroup {\n  systems: string[]\n  ruleTag: string\n  label: string\n  allowMultiple: boolean\n  children: Record<string, string[]>,\n  selectable: Record<string, Selectable>,\n}\n\nexport function isAnyOf(\n  variable: TenantOptionRuleCheckable | TenantOptionRuleChildrenAny | undefined):\n  variable is TenantOptionRuleChildrenAny {\n  if (!variable) return false\n  return is(\"AnyOf\", \"type\", variable)\n}\n\nexport function isAllOf(\n  variable: TenantOptionRuleCheckable | TenantOptionRuleChildrenAll | undefined):\n  variable is TenantOptionRuleChildrenAll {\n  if (!variable) return false\n  return is(\"AllOf\", \"type\", variable)\n}\n\nexport function isNoneOf(\n  variable: TenantOptionRuleCheckable | TenantOptionRuleChildrenNoneOf | undefined):\n  variable is TenantOptionRuleChildrenNoneOf {\n  if (!variable) return false\n  return is(\"NoneOf\", \"type\", variable)\n}\n\nexport function isOpt(\n  variable: TenantOptionRuleCheckable | TenantOptionRuleOpt | undefined):\n  variable is TenantOptionRuleOpt {\n  if (!variable) return false\n  return is(\"Opt\", \"type\", variable)\n}\n\nexport function isConditionalIf(\n  variable: TenantOptionRuleCheckable | TenantOptionRuleIf | undefined):\n  variable is TenantOptionRuleIf {\n  if (!variable) return false\n  return is(\"If\", \"type\", variable)\n}\n\ninterface FilterValue {\n  value: any\n  type: any\n}\n\nexport interface FilterValueBoolean extends FilterValue {\n  value: boolean\n}\n\nexport interface FilterValueNumber extends FilterValue {\n  value: number\n}\n\nexport interface Filter {\n  subclauses: FilterClause[]\n  type: string\n}\n\nexport interface FilterClause extends QueryTypeCheckable {}\n\nexport interface FilterClauseWithSubclauses extends FilterClause {\n  subclauses: FilterClauseWithFieldValue[]\n}\n\ninterface FilterClauseWithField extends FilterClause {\n  field: string\n}\n\nexport interface FilterClauseWithFieldValue extends FilterClauseWithField {\n  value: FilterValue\n}\n\nexport interface FilterClauseWithCustomData extends FilterClauseWithFieldValue {\n  value: FilterValue\n  moduleId: string\n  key: string\n  connectionId: string | undefined\n  type: \"customdata\"\n}\n\nexport interface EQ extends FilterClauseWithFieldValue {\n  type: \"eq\"\n}\nexport interface NE extends FilterClauseWithFieldValue {\n  type: \"ne\"\n}\nexport interface GT extends FilterClauseWithFieldValue {\n  type: \"gt\"\n}\nexport interface GE extends FilterClauseWithFieldValue {\n  type: \"ge\"\n}\nexport interface LT extends FilterClauseWithFieldValue {\n  type: \"lt\"\n}\nexport interface LE extends FilterClauseWithFieldValue {\n  type: \"le\"\n}\nexport interface Contains extends FilterClauseWithFieldValue {\n  type: \"substring\"\n}\nexport interface And extends FilterClauseWithSubclauses {\n  type: \"and\"\n}\nexport interface Or extends FilterClauseWithSubclauses {\n  type: \"or\"\n}\n\n/* eslint-disable */\nexport enum FilterClauses {\n  EQ = \"eq\",\n  NE = \"ne\",\n  GT = \"gt\",\n  GE = \"ge\",\n  LT = \"lt\",\n  LE = \"le\",\n  Contains = \"substring\",\n  Or = \"or\",\n  And = \"and\",\n}\n/* eslint-enable */\n\nexport interface Query {\n  offset: number,\n  numRecords: number,\n  order: Ordering[],\n  deletedFlag: DeletedFlag,\n  filter?: Filter | undefined,\n}\n\n/* eslint-disable */\nexport enum QueryDirection {\n  ascending = \"ascending\",\n  descending = \"descending\"\n}\n/* eslint-enable */\n\n/* eslint-disable */\nexport enum DeletedFlag {\n  NotDeleted = \"not-deleted\",\n  Deleted = \"only-deleted\",\n  Both = \"both\",\n}\n/* eslint-enable */\n\nexport interface Ordering {\n  direction: QueryDirection,\n  field: string\n}\n\nexport interface DataTableOptions<Item> {\n  itemsPerPage: number,\n  page: number,\n  sortBy: Array<keyof Item>,\n  sortDesc: Array<boolean>\n}\n\nexport type HeaderType = \"datetime\"\nexport type SortableAndFilterableType = \"string\" | \"int\" | \"decimal\" | \"bool\" | \"datetime\"\n\nexport interface FilterableItem {\n  text: string\n  value: string\n}\n\nexport interface FilterableProps {\n  [key: string]: FilterableItem[]\n}\n\nexport interface Assistant {\n  id?: string,\n  code?: string,\n  comments?: string,\n  name?: string,\n  parameters?: Record<string, string>,\n}\n\nexport interface ConnectorObject {\n  opt: string,\n  name: string,\n  value: string,\n  group: string,\n  wizardEnabled?: boolean,\n  stepperWizard?: boolean,\n  byPartner?: boolean,\n  hasNoConfig?: boolean,\n  componentName?: string,\n}\n\nexport interface AssistantParameter {\n  fieldName?: string,\n  type?: string,\n  defaultValue?: string,\n  values?: string[],\n}\n\nexport interface AssistantDefinition {\n  code: string,\n  name: string,\n  description: string,\n  requiredOptions: TenantOptionRule[],\n  parameters: Record<string, AssistantParameter>,\n}\n\ninterface ConnectorOptionsPerConnector {\n  maxConnections?: number | undefined,\n}\n\nexport interface ConnectorOptions {\n  maxTotalConnections?: number | undefined,\n  defaultMaxConnections?: number | undefined,\n  perConnector?: Record<string, ConnectorOptionsPerConnector> | undefined,\n}\n\nexport interface TenantCommon extends CoreRecord {\n  localId?: string,\n  customData?: any\n\n  defaultLanguage?: string | undefined,\n  languages?: string[],\n\n  defaultCountry?: string | undefined,\n  countries?: string[],\n\n  defaultTimeZone?: string | undefined,\n\n  options?: string[],\n  whiteLabel?: string | undefined,\n\n  assistants?: Assistant[],\n  connectorOptions?: ConnectorOptions,\n  shardCost?: number | null,\n}\n\nexport interface Tenant extends TenantCommon {\n  codeName?: string,\n  resellerCodeName?: string,\n  active?: boolean,\n\n  fullName?: string,\n  email?: string,\n\n  customerReference?: string,\n  comments?: string,\n\n  shardId?: number,\n\n  fixedCost?: number,\n}\n\nexport interface TenantTemplate extends TenantCommon {\n  code: string | undefined\n  name?: string\n  description?: string\n\n  tenantComments?: string\n}\n\nexport interface TenantUser extends CoreRecord {\n  login?: string,\n  localId?: string,\n  userType?: string,\n  fullName?: string,\n  email?: string,\n\n  defaultLanguage?: string,\n\n  pwd?: string,\n\n  permissions?: string[],\n  antiPermissions?: string[],\n}\n\nexport interface Reseller extends CoreRecord {\n  codeName: string,\n  active: boolean,\n  language: string,\n\n  options: string[],\n  allowableTenantOptions: string[],\n\n  customerReference?: string,\n  tenantPrefix?: string,\n\n  webhookConfig?: any,\n  tenantStatsConfig?: any,\n\n  userAuthConfigType?: string,\n}\n\nexport interface ResellerUser extends CoreRecord {\n  login?: string,\n  localId?: string,\n  userType?: string,\n  fullName?: string,\n  email?: string,\n\n  pwd?: string,\n  language?: string,\n\n  permissions?: string[],\n}\n\nexport interface Header {\n  text: string,\n  value: string,\n  filterField?: string,\n  type?: HeaderType,\n  headerType?: HeaderType,\n  filterType?: SortableAndFilterableType,\n  multiple?: boolean,\n  filterable?: boolean,\n  searchable?: boolean,\n  sortable?: boolean,\n  selections?: keyof FilterableProps\n  attach?: boolean,\n  width?: number,\n}\n\ninterface Response {\n  OK: boolean\n}\n\nexport interface SuccessResponse extends Response {\n  OK: true\n}\n\nexport interface FailureResponse extends Response {\n  OK: false\n  err: string\n}\n\nexport type RecordType = \"customer\" | \"order\" | \"orderrow\" |\n  \"invoice\" | \"invoicerow\" | \"supplierinvoice\" | \"supplierinvoicerow\" |\n  \"shipment\" | \"product\" | \"pricelist\" | \"productcategory\" |\n  \"productvariantgroup\" | \"attribute\" | \"contengroup\" | \"paymentmethod\" |\n  \"paymenttransaction\" | \"paymenttransactionevent\" | \"cashregister\" |\n  \"zreport\" | \"settlementreport\" | \"ledgeraccount\" | \"ledgerentry\" |\n  \"ledgerentryrow\"\n\nexport type Direction = \"import\" | \"export\" | \"bidi\" | \"na\"\n\nexport interface TransferStatsSummmaryMeta {\n  tenant: string,\n  date: string,\n  recordType: RecordType,\n  direction: Direction\n}\n\nexport interface TransferStatsSummary {\n  meta: TransferStatsSummmaryMeta,\n  numberOfTransfers: number\n  numConsiderd: number\n  numFailed: number\n  numIgnored: number\n  numCreated: number\n  numUpdated: number\n  numUnchanged: number\n  numOther: number\n}\n\nexport interface TenantIssueSummary {\n  hour: string\n  tenantCodeName: string\n  numIssues: number\n  tenantName: string\n}\n\nexport interface TenantIssueSummaryWithChange extends TenantIssueSummary {\n  numIssuesChange: number\n}\n\nexport type Rule = true | string\n\n// eslint-disable-next-line\nexport type RuleCallback = (v?: any) => Rule\n\n// eslint-disable-next-line\nexport type Reject = (reason?: any) => void\n\nexport type GroupedOptionObject = Record<string, string[]>\n\n/* eslint-disable */\nexport enum RequestTenantCount {\n  TenantCounts = \"tenantCounts\",\n  TenantCountsPerAssistant = \"tenantCountsPerAssistant\",\n  TenantCountsPerConnector = \"tenantCountsPerConnector\",\n  TenantCountsPerCountry = \"tenantCountsPerCountry\",\n  TenantCountsPerOption = \"tenantCountsPerOption\",\n}\n/* eslint-enaable */\n\n/* eslint-disable */\nexport enum TenantCountTypes {\n  TenantCount = \"TenantCount\",\n  TenantCountPerAssistant = \"TenantCountPerAssistant\",\n  TenantCountPerConnector = \"TenantCountPerConnector\",\n  TenantCountPerCountry = \"TenantCountPerCountry\",\n  TenantCountPerOption = \"TenantCountPerOption\",\n}\n/* eslint-enaable */\n\nexport interface TenantCountsSuper {\n  hour: string,\n  type: string,\n}\n\nexport interface TenantCounts extends TenantCountsSuper {\n  activeCount: number,\n  inactiveCount: number,\n  totalCount: number,\n}\n\nexport interface TenantCountsPerAssistant extends TenantCountsSuper {\n  assistantCode: string,\n  count: number,\n}\n\nexport interface TenantCountsPerConnector extends TenantCountsSuper {\n  connectorCode: string,\n  count: number,\n}\n\nexport interface TenantCountsPerCountry extends TenantCountsSuper {\n  country: string,\n  count: number,\n}\n\nexport interface TenantCountsPerOption extends TenantCountsSuper {\n  option: string,\n  count: number,\n}\n\nexport type NormalValue = string | boolean | number | object\nexport type Undefined = undefined | null\nexport type Defined<T> = T extends Undefined ? never : T\n\nexport interface CredentialParameterDefinition {\n  type: string,\n  fieldName: string,\n  name: string,\n  mandatory: boolean,\n  secret: boolean,\n}\n\ninterface StringParameterDefinition\n  extends CredentialParameterDefinition {\n  secret: false,\n  value: string,\n  type: \"StringParam\",\n}\n\ninterface NumberParameterDefinition\n  extends CredentialParameterDefinition {\n  secret: false,\n  value: number,\n  type: \"IntegerParam\",\n}\n\ninterface SecretParameterDefinition\n  extends CredentialParameterDefinition {\n  secret: true,\n}\n\nexport interface SecretStringParameterDefinition {\n  secret: false,\n  value: string,\n  type: \"SecretParam\",\n}\n\nexport interface CredentialParameterSecretFileData\n  extends SecretParameterDefinition {\n  fileTypes?: string[],\n  maxFileSize?: number,\n  type: \"SecretFileDataParam\",\n}\n\nexport const isSecretFileDataParam = (param: CredentialParameterDefinition):\n  param is SecretParameterDefinition => {\n  return param.type === \"SecretFileDataParam\"\n}\n\nexport interface CredentialDefinition {\n  type: string,\n  name: string,\n  description: string,\n  allowAnyTag: string,\n  knownTags: string,\n  requiredAllowableTenantOptions: string,\n  parameterDefinitions: CredentialParameterDefinition[],\n  allowMultipleTagged: string,\n}\n\nexport interface Credential {\n  type?: string,\n  connectorType?: string,\n  tag?: string,\n  comments?: string,\n  lastModified?: string,\n  lastModifiedBy?: string,\n  parameters: Record<string, any>,\n  hasParams?: boolean,\n  hasSecrest?: boolean,\n}\n\nexport interface OAuth2ClientCredential\n  extends CredentialDefinition {\n  parameters: {\n    clientId: StringParameterDefinition,\n    clientSecret: SecretStringParameterDefinition,\n  },\n}\n\nexport interface TlsCertificateCredential\n  extends CredentialDefinition {\n  parameters: {\n    certificatePassword: SecretStringParameterDefinition,\n    certificateData: CredentialParameterSecretFileData,\n  },\n}\n\nexport type ConnectorSupportingCredential = {\n  typeCode: string,\n  creds: CredentialDefinition[],\n}\n\nexport type CountHour = {\n  hour: string,\n  count: number,\n}\n\nexport interface StatsGroup {\n  start: CountHour,\n  end: CountHour,\n\n  change: number,\n  changePercentage: number,\n  percentage: number | undefined,\n  timeline: Record<string, number>  | undefined,\n  color: string | undefined,\n  value: string | undefined,\n  title: string | undefined,\n}\n\nexport enum EditType {\n  Tenant = \"Tenant\",\n  User = \"User\",\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tif (!(moduleId in __webpack_modules__)) {\n\t\tdelete __webpack_module_cache__[moduleId];\n\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t423: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk\"] = self[\"webpackChunk\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [76], () => (__webpack_require__(2905)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","isTestMode","window","applicationInfo","testMode","siteName","versionNumber","buildNumber","backendName","ResellerUser","login","__resellerUser","fullName","email","language","permissions","expandedPermissions","hasPermission","perm","isNonEmptyArray","perms","Array","isArray","includes","isReseller","userType","isAdmin","Reseller","codeName","__reseller","name","defaultWhiteLabel","tenantWhiteLabel","allowableTenantOptions","options","hasAllowableTenantOption","opt","hasOption","country","timeZone","DataTableQuery","constructor","reloadCallback","queryBuilder","debouncer","this","setOptions","updateList","page","itemsPerPage","sortBy","sortDesc","sortByHead","sortDescHead","undefined","setOrder","setNumRecords","offset","setOffset","debounce","getQuery","setDeletedFlagFilter","flag","setDeletedFlag","QueryBuilder","filters","orderField","ascendingOrDescending","deletedFlag","numRecords","order","direction","descending","field","NotDeleted","filter","getFilter","ascending","length","type","subclauses","addFilter","push","removeFilter","index","findIndex","obj","filterA","filterB","key","moduleId","filterAFields","filterBFields","clauses","s","map","c","intersection","filterAreEq","splice","HelpDesk","async","categoryId","lang","Promise","resolve","reject","categoryUrl","getLocalizedUrl","contentType","url","then","response","sections","catch","error","responseJSON","getSectionArticles","sectionId","sectionUrl","articles","prefix","code","getLocaleCode","getUrl","reseller","password","sessionServerFuncs","logout","checkAuthTypeOrRedirect","dailySummarizedTransferStats","from","to","list","res","rej","statsServerFuncs","fromTime","toTime","done","tenantsWithIssues","fromDate","subtract","startOf","format","toDate","endOf","allTenantsWithIssues","tenantsIssues","tenant","numIssues","savedIssues","previousTenants","Map","requestTenantTransferIssuesCounts","issues","sortByLatest","sort","a","b","Date","hour","getTime","issue","has","tenantCodeName","existing","find","x","Math","max","set","processIssueData","requestTenantCounts","TenantCounts","counts","fail","requestTenantCountsPerAssistant","TenantCountsPerAssistant","requestTenantCountsPerConnector","TenantCountsPerConnector","requestTenantCountsPerCountry","TenantCountsPerCountry","requestTenantCountsPerOption","TenantCountsPerOption","listTenantTemplates","data","tenantServerFuncs","result","getTenantTemplate","localId","createTenantTemplate","template","editTenantTemplate","deleteTenantTemplate","OK","availableAssistants","assistants","getTenantByCodeName","err","loginAsTenant","path","open","saveTenant","tenantData","listTenants","query","count","tenants","tenantBatch","isSet","deleteTenant","ruleAccepts","rule","tenantOptions","tenantOption","children","every","some","condition","body","AssistantUtils","accepts","holder","acceptsHelperFunc","opts","all","elements","collect","element","helperFunc","any","subHolder","checkFn","_collect","checkBodyFn","checkCondFn","Error","of","Set","getGroups","definition","availableTenantOptions","currentTenantOptions","groups","definedGroups","requiredOptions","r","ruleTag","group","systems","getSystems","label","allowMultiple","selectable","system","getGroupBySystem","missing","available","missingOpts","reduce","origin","getOptsInGroupBySystem","Object","values","el","condHolder","flatMap","getOptsInGroup","allAvailable","getOpts","Group","SalesFlowUtils","assistantPlugDefinition","text","translate","requiredOpts","value","import","export","shipments","ledgeraccounts","payouts","ledgerentries","transactions","orders","invoices","sourceTypeOptions","compatibleWith","assistantCode","destinationTypeOptions","zreports","getSystemOpt","getPlugOpt","o","getPlugs","plugObjects","plug","startsWith","endsWith","connObj","p","connection","getRootOptions","assistantDefinition","allRules","requiredRule","visibleAvailableAssistants","assistantDefinitions","assistant","allowedSourceTypeOptions","compatibleAssistants","v","assCode","assistantDef","ass","head","sources","A","allowedDestinationTypeOptions","visibleSourceTypeOptions","sourceType","destinationType","keys","visibleDestinationTypeOptions","d","isCompatibleWithSourceType","isCompatibleWith","TenantEditDialogUtils","getSystemOptPrefixFromSystem","clearGroupSelection","deepClone","systemOptPrefix","doChangeGroupSelection","changeGroupSelection","newOptList","otherSystem","isGroupActive","addOptsOrRemove","indexOf","getAssistantDefinition","CountryHelper","_createCountryMap","allCountries","code2Map","code3Map","init","notEmptyObject","_Country","getCountryNameByCode3","getCountryFromCode","countryCode2ToCode3","code2","code3","countryCode3ToCode2","convertCountryToUnicodeFlag","magicUnicodeNr","toString","toUpperCase","split","char","String","fromCodePoint","charCodeAt","join","time","timeoutId","callback","newTime","clearTimeout","setTimeout","LangHelper","_createLanguageMap","languages","initLanguageMap","allLanguagesMap","allLanguagesCode2Map","_Language","allLanguages","getLanguageNameByCode","getLanguageNameByCode2","code3ToCode2","code2ToCode3","isValidCode","customSort","ordering","aIndex","bIndex","localeCompare","_","__","textId","arr","forEach","val","isString","replace","countries","allCurrencies","currencies","allTimeZones","timezones","msg","texts","formatToIsoDate","input","dateTimeFormat","inp","capitalize","tail","slice","optionObject","doGroupSort","category","sortOptions","checkOptions","dataGroup","forceDeselect","clone","isParentChecked","op","concat","Util","JSON","parse","stringify","isObject","isEmptyArray","getLocalizedDate","date","currentDate","locale","year","isEmptyObject","isNonEmptyText","addThousandSeparator","num","arr1","arr2","isSafari","navigator","userAgent","isChrome","getUniqueId","crypto","randomUUID","randStrFn","floor","random","substring","Validation","ref","errors","checkForErrors","i","inputs","validate","j","errorBucket","$attrs","hasErrors","getErrors","getErrorString","DefaultValidators","isUnset","required","requiredOnCreate","isCreate","minLength","len","isEmail","parts","user","domain","check","isUri","test","passWordMatch","confirm","correctLoginFormat","regex","waitForRender","_this","refName","functionName","checkProperty","refObj","doCheck","_isVue","_isMounted","interval","setInterval","$refs","isReady","checkFunction","clearInterval","e","use","pinia","StoreKeys","state","useLocale","Locale","actions","setLocale","Language","Country","BuildInfo","Debouncer","SortOptions","Stats","Tenant","TenantTemplate","VueHelper","Session","jQuery","Modules","is","ident","variable","isCustomData","isFilterClauseWithFieldValue","isFilterClauseWithSubclauses","isAnyOf","isAllOf","isNoneOf","isOpt","isConditionalIf","FilterClauses","QueryDirection","DeletedFlag","RequestTenantCount","TenantCountTypes","isSecretFileDataParam","param","EditType","__webpack_module_cache__","__webpack_require__","cachedModule","exports","module","id","loaded","__webpack_modules__","call","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","n","getter","__esModule","defineProperty","enumerable","get","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}