{"version":3,"file":"assets/chunk.f257c9eb382701d78970.js","mappings":"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","sources":["./components/access-control/access-plans/item/access-control-pointcentral-plan-list/index.hbs","./components/access-control/access-plans/item/access-control-pointcentral-plan-list/index.ts","./components/access-control/access-plans/row/access-plan-compact/index.hbs","./components/access-control/access-plans/row/access-plan-compact/index.ts","./components/access-control/access-plans/item/plan-list/index.hbs","./components/access-control/access-plans/item/plan-list/index.ts","./components/access-control/users/item/credentials/assign-pin/index.hbs","./components/access-control/users/item/credentials/assign-pin/index.ts","./components/access-control/users/item/credentials/index.hbs","./components/access-control/users/item/credentials/index.ts","./components/access-control/users/item/active-access-plan-row/index.hbs","./components/access-control/users/item/active-access-plan-row/index.ts","./components/access-control/users/item/active-access-plans/index.hbs","./components/access-control/users/item/active-access-plans/index.ts","./components/access-control/users/item/access-control-edit-user/index.hbs","./components/access-control/users/item/access-control-edit-user/index.ts","./components/access-control/users/item/credentials/assign-access-card/index.hbs","./components/access-control/users/item/credentials/assign-access-card/index.ts","./components/access-control/users/item/credentials/assign-mobile/index.hbs","./components/access-control/users/item/credentials/assign-mobile/index.ts","./components/beta/feature-under-construction/index.hbs","./components/beta/feature-under-construction/index.ts","./components/enterprise/users/user-edit/index.hbs","./components/enterprise/users/user-edit/index.ts","./helpers/is-route-active.ts","./components/people/container/card-style/index.hbs","./components/people/container/card-style/index.ts","./components/ui/stacked-icon-label/index.hbs","./components/ui/stacked-icon-label/index.ts","./components/users/edit-info-route/index.hbs","./components/users/edit-info-route/index.ts","./components/users/item/add-contact/index.hbs","./components/users/item/add-contact/index.ts","./components/users/item/contact-information/index.hbs","./components/users/item/contact-information/index.ts","./components/users/item/device-access/access-type-bulk-actions/index.hbs","./components/users/item/device-access/access-type-bulk-actions/index.js","./components/users/item/device-access/access-type-parent-group-bulk-actions/index.hbs","./components/users/item/device-access/access-type-parent-group-bulk-actions/index.ts","./components/users/item/device-access/access-type/index.hbs","./components/users/item/device-access/access-type/index.js","./components/users/item/device-access/child-group-bulk-action-row/index.hbs","./components/users/item/device-access/child-group-bulk-action-row/index.ts","./components/users/item/device-access/enterprise-access-information/index.hbs","./components/users/item/device-access/enterprise-access-information/index.js","./components/users/item/device-access/item-group/index.hbs","./components/users/item/device-access/item-group/index.ts","./components/users/item/device-access/item-groups/index.hbs","./components/users/item/device-access/item-groups/index.js","./components/users/item/device-access/user-code-warnings/index.hbs","./components/users/item/device-access/user-code-warnings/index.js","./components/users/item/language/index.hbs","./components/users/item/language/index.ts","./components/users/item/pin-badge/index.hbs","./components/users/item/pin-badge/index.ts","./components/users/item/user-type-relocation-tour/tour.ts","./components/users/item/credentials/index.hbs","./components/users/item/credentials/index.ts","./components/ui/stacked-icon-button/index.hbs","./components/ui/stacked-icon-button/index.ts","./components/users/item/device-access/summary/index.hbs","./components/users/item/device-access/summary/index.js","./components/users/item/smrf/status-item/index.hbs","./components/users/item/smrf/status-item/index.ts","./components/users/item/login-information/index.hbs","./components/users/item/login-information/index.ts","./components/users/item/link-login/index.hbs","./components/users/item/link-login/index.ts","./components/users/item/user-overview/index.hbs","./components/users/item/user-overview/index.js","./components/users/item/user-profile-banner/index.hbs","./components/users/item/user-profile-banner/index.ts","./components/users/link-login-edit-route/index.hbs","./components/users/link-login-edit-route/index.ts","./components/users/merge-users-list-item-credentials/index.hbs","./components/users/merge-users-list-item-credentials/index.ts","./components/users/merge-users-list-component/index.hbs","./components/users/merge-users-list-component/index.ts","./components/users/merge-users-preview-component/index.hbs","./components/users/merge-users-preview-component/index.ts","./components/users/user-attributes/user-attribute-edit-page/index.hbs","./components/users/user-attributes/user-attribute-edit-page/index.js","./components/users/user-attributes/user-attribute-list-page/index.hbs","./components/users/user-attributes/user-attribute-list-page/index.js","./components/users/user-attributes/user-attribute-list/index.hbs","./components/users/user-attributes/user-attribute-list/index.ts","./components/people/item/access-card/index.hbs","./components/people/item/access-card/index.ts","./components/people/item/access-info-card/index.hbs","./components/people/item/access-info-card/index.ts","./components/users/user-edit/index.hbs","./components/users/user-edit/index.ts","./components/users/username-route/index.hbs","./components/users/username-route/index.ts","./helpers/can-view-people-ui.ts","./users/edit/device-access/route.ts","./users/index/controller.ts","src/lib/system/inflections.js","src/lib/system/inflector.js","src/lib/system/string.js"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#unless this.accessControlDataIsLoaded}}\\n \\n {{else}}\\n {{#if (eq this.availableAccessPlans.length 0)}}\\n

{{tc this \\'noAccessPlans\\'}}

\\n {{else}}\\n \\n {{/if}}\\n {{/unless}}\\n
\\n\",{ moduleName: \"customer-site/components/access-control/access-plans/item/access-control-pointcentral-plan-list/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed, action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { getPlanDetailTotals } from 'customer-site/models/access-control/access-control-access-plan';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type Store from '@ember-data/store';\nimport type { PlanDetailsTotalKey } from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlAccessPlan from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport type AjaxService from 'customer-site/services/ajax';\n\ninterface AccessControlPointCentralPlanListComponentArgs {\n user: AccessControlUser;\n availableAccessPlans: AccessControlAccessPlan[];\n systemGroupId: number;\n selectAccessPlans: (\n user: AccessControlUser,\n accessPlans: AccessControlAccessPlan[],\n systemGroupId?: number\n ) => void;\n includeParentScope: boolean;\n includeChildScopes: boolean;\n}\n\n/**\n * @classdesc\n *\n * Displays the access plans list for an access user for the Access Control-PointCentral integration.\n */\n@intlPath({ path: 'access-control/access-plans/item/access-control-pointcentral-plan-list' })\nexport default class AccessControlPointCentralPlanListComponent extends Component {\n @service declare ajax: AjaxService;\n @service declare store: Store;\n\n /**\n * The method to call when we select or deselect access plans within this component.\n */\n @alias('args.selectAccessPlans')\n declare selectAccessPlans: (\n user: AccessControlUser,\n accessPlans: AccessControlAccessPlan[],\n systemGroupId?: number\n ) => void;\n\n /**\n * Determines if we get accessPlans for the parent scope\n */\n @alias('args.includeParentScope')\n includeParentScope = false;\n\n /**\n * Determines if we get accessPlans for the child scopes\n */\n @alias('args.includeChildScopes')\n includeChildScopes = false;\n\n /**\n * The access control system group we are getting the access plans from\n */\n @alias('args.systemGroupId')\n declare systemGroupId: number;\n\n /**\n * The access control user to use within this component\n */\n @alias('args.user')\n declare user: AccessControlUser;\n\n /**\n * The access plans to load into the plan-list component if an Access Control group is selected from the group dropdown.\n */\n @alias('args.availableAccessPlans')\n declare availableAccessPlans: AccessControlAccessPlan[];\n\n /**\n * The access plans assigned to this user.\n */\n @computed('availableAccessPlans', 'user.accessPlans.[]')\n get selectedAccessPlans(): AccessControlAccessPlan[] {\n if (!this.user || !this.availableAccessPlans) {\n return [];\n }\n\n const selectedAccesPlanIds = this.user.get('accessPlans').map((ap) => ap.id);\n return this.availableAccessPlans.filter((ap) => selectedAccesPlanIds.includes(ap.id.toString()));\n }\n\n /**\n * Whether all the access control data has been loaded or not. This property controls the 'loading' spinner.\n */\n @computed('user.accessPlans')\n get accessControlDataIsLoaded(): boolean {\n const { user } = this;\n return !!user && !!user.accessPlans;\n }\n\n /**\n * The details associated with each selectable access plan (the number of users assigned to the plan, number\n * of access points, etc.).\n */\n @computed('availableAccessPlans', 'includeChildScopes', 'includeParentScope')\n get planDetailTotals(): Promise> {\n return getPlanDetailTotals(\n this.ajax,\n this.includeChildScopes,\n this.includeParentScope,\n this.includeParentScope\n );\n }\n\n /**\n * Select or deselect access plans for the user.\n */\n @action selectDeselectAccessPlans(accessPlans: AccessControlAccessPlan[]): void {\n const { user, systemGroupId } = this;\n\n // Only call method if the user has fully been loaded.\n if (user) {\n if (!systemGroupId) {\n this.selectAccessPlans(user, accessPlans);\n } else {\n this.selectAccessPlans(user, accessPlans, systemGroupId);\n }\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::Item::AccessControlPointcentralPlanList': typeof AccessControlPointCentralPlanListComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n
\\n

\\n
\\n {{@accessPlan.name}}\\n\\n {{#if this.editOptions.length}}\\n \\n \\n \\n {{/if}}\\n
\\n\\n {{#if @showScopeName}}\\n {{@accessPlan.scopeName}}\\n {{/if}}\\n\\n {{yield}}\\n

\\n\\n\\n \\n
\\n
\",{ moduleName: \"customer-site/components/access-control/access-plans/row/access-plan-compact/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { computed } from '@ember/object';\nimport BaseAccessPlanRow from '../base-access-plan/index';\n\nimport type DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\nimport './_style.scss';\n\n/**\n * Displays a single Access Plan in a compact format.\n *\n */\nexport default class AccessPlanCompact extends BaseAccessPlanRow {\n /**\n * Edit options to display in dropdown button.\n */\n @computed('args.{accessPlan,canBeDeleted,showEditButton}', 'toolsDropdownItems')\n get editOptions(): Array | null {\n const { showEditButton = false } = this.args;\n\n if (!showEditButton) {\n return null;\n }\n\n return this.toolsDropdownItems;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::Row::AccessPlanCompact': typeof AccessPlanCompact;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n \\n\\n {{#if this.isSecuritySystemMaster}}\\n
\\n \\n
\\n {{/if}}\\n\\n

\\n {{this.xOfYAccessPlans}}\\n

\\n\\n
\\n {{!-- @glint-expect-error Please switch to VerticalCollection --}}\\n \\n {{#unless item.model.isDeleted}}\\n \\n \\n {{#if (media \\'isMobile\\')}}\\n \\n
{{item.name}}
\\n {{else}}\\n \\n {{/if}}\\n {{#if item.model.hasPartitionsPreventingChange}}\\n \\n {{/if}}\\n \\n \\n {{/unless}}\\n \\n
\\n
\\n\\n \\n {{#if this.isScheduleGridVisible}}\\n
\\n {{!-- @glint-expect-error scheduleObjects types do not match, please fix. --}}\\n \\n
\\n {{/if}}\\n
\\n
\",{ moduleName: \"customer-site/components/access-control/access-plans/item/plan-list/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport EmberObject, { computed, action, set, setProperties, getProperties } from '@ember/object';\nimport { and } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { ALL_TIMES_PROPERTIES } from '@adc/ui-components/components/views/base-schedule';\nimport { deleteAccessPlanWithWarningModal } from '../card/header/index';\n\nimport type ArrayProxy from '@ember/array/proxy';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type { PlanDetailsTotalKey } from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlAccessPlanModel from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlTimetable from 'customer-site/models/access-control/access-control-timetable';\nimport type AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport './_style.scss';\n\n/**\n * Create a fake plan for the Security System Master.\n */\nfunction getSecuritySystemMasterPlan(name: string): Partial {\n return Object.create({\n id: '0',\n name,\n iconName: 'favorite',\n colorName: 'blue',\n timetables: [\n EmberObject.create({\n // Do not copy this deprecated usage. If you see this, please fix it\n // @ts-expect-error TypeScript doesn't understand EmberObject, please refactor to not use EmberObject.\n scheduleDictionary: [EmberObject.create(ALL_TIMES_PROPERTIES)]\n })\n ]\n });\n}\n\ninterface AccessPlanModelOptionType {\n id: string;\n name: string;\n iconName: string;\n colorName: string;\n isSelected: boolean;\n model: AccessControlAccessPlanModel;\n}\n\nexport interface AccessControlAccessPlansPlanListSignature {\n Element: HTMLDivElement;\n Args: {\n source: AccessControlUser;\n selectedAccessPlans: Array>;\n allAccessPlans?: Array;\n planDetailTotals: Record;\n isSecurityPanelPresentOnSystem?: boolean;\n showPersonalPlanEditButton: boolean;\n disableCheckboxAllAccessAccessPlans: boolean;\n setAccessPlans: (\n accessPlan:\n | AccessControlAccessPlanModel\n | Array>\n ) => void;\n deleteAccessPlan?: (accessPlan: AccessControlAccessPlanModel) => void;\n disableAll?: boolean;\n };\n}\n\n/**\n * @classdesc\n * A component for showing a searchable list of access plans.\n */\n@intlPath({ path: 'access-control/access-plans/item/plan-list' })\nexport default class AccessControlAccessPlansPlanList extends Component {\n @service declare store: ServiceRegistry['store'];\n @service declare modals: ServiceRegistry['modals'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare media: ServiceRegistry['media'];\n @service declare intl: ServiceRegistry['adc-intl'];\n\n /**\n * String used to search for access plans}\n */\n searchString = '';\n\n /**\n * Whether or not this system has a security panel.\n */\n isSecurityPanelPresentOnSystem = false;\n\n /**\n * Array of access plans\n */\n\n accessPlans?: Array | ArrayProxy;\n\n /**\n * Flag to reset access plans\n */\n @tracked\n resetAccessPlans = false;\n\n /**\n * Is the source a security system master? There must be a security panel on the system and the user must be the primary user.\n */\n @and('args.isSecurityPanelPresentOnSystem', 'args.source.isPrimary')\n declare isSecuritySystemMaster: boolean;\n\n /**\n * Should the schedule grid be visible?\n */\n @computed('media.{isMobile,isTabletPortrait}')\n get isScheduleGridVisible(): boolean {\n const { isMobile, isTabletPortrait } = this.media;\n return !(isMobile || isTabletPortrait);\n }\n\n /**\n * Gets promise of all user access plan timetables in order to resolve before passing to component\n */\n @computed('args.selectedAccessPlans.@each.timetables')\n get resolvedSelectedTimetables(): Promise[]> {\n // Exclude null or undefined values\n const timetablePromises = (this.args.selectedAccessPlans ?? [])\n .map((plan) => plan.timetables ?? [])\n .flat()\n .filter(Boolean);\n\n return Promise.all(timetablePromises);\n }\n\n /**\n * Schedule objects to render in the schedule grid.\n */\n @computed('isSecuritySystemMaster', 'args.selectedAccessPlans.@each.{name,timetables}')\n get scheduleObjects(): Array> {\n const selectedAccessPlans = (this.args.selectedAccessPlans ?? []).slice();\n\n // If the user is the Security system master, we add a new (fake) access plan\n // so that it shows a new badge for them.\n if (this.isSecuritySystemMaster) {\n selectedAccessPlans.unshift(getSecuritySystemMasterPlan(this.intl.tc(this, 'securitySystemMaster')));\n }\n\n return selectedAccessPlans.map((plan) =>\n getProperties(plan, 'id', 'name', 'iconName', 'colorName', 'timetables')\n );\n }\n\n /**\n * Label to display above the list of access plans based on current search results. Displays: {selectedAccessPoints} of {total} Access Points\n *\n * @returns {String}\n */\n @computed('accessPlans', 'args.selectedAccessPlans.[]')\n get xOfYAccessPlans(): string | undefined {\n const selectedAccessPlans = this.args.selectedAccessPlans;\n\n if (!selectedAccessPlans) {\n return undefined;\n }\n\n const activePlanIds = selectedAccessPlans.mapBy('id'),\n accessPlans = (this.accessPlans || []) as AccessControlAccessPlanModel[];\n\n return this.intl.t('access-control.users.xOfYAccessPlans', {\n x: accessPlans.filter((plan) => activePlanIds.includes(plan.id)).length,\n y: accessPlans.length\n });\n }\n\n /**\n * Called when the selected access plans change\n */\n @action\n accessPlanItemClicked(item: AccessPlanModelOptionType): void {\n const sourcePlans = this.args.selectedAccessPlans;\n\n set(item, 'isSelected', !item.isSelected);\n if (item.isSelected) {\n sourcePlans['addObject'](item.model);\n } else {\n sourcePlans['removeObject'](item.model);\n }\n\n this.args.setAccessPlans(sourcePlans);\n }\n\n /**\n * Filters Access Plans by search string.\n */\n @action\n filterAccessPlans(searchString: string): void {\n // Set flag to reset the access plans list when filtering\n setProperties(this, {\n searchString,\n resetAccessPlans: true\n });\n }\n\n /**\n * Deletes the specified access plan.\n */\n @action\n fnDeleteAccessPlan(accessPlan: AccessControlAccessPlanModel): void {\n deleteAccessPlanWithWarningModal(accessPlan, this.intl, this.modals, this.notificationManager, () => {\n set(this, 'resetAccessPlans', true);\n this.args.selectedAccessPlans.removeObject(accessPlan);\n this.args.deleteAccessPlan?.(accessPlan);\n });\n }\n\n /**\n * Load the access plans that match the searchString query.\n */\n @action\n async loadAccessPlans(): Promise {\n // Make a copy of the currently active access plans so they don't get overridden when we load the access plans\n const activeAccessPlanIds = (this.args.selectedAccessPlans || []).mapBy('id');\n\n // If we've passed in all of the access plans to show, use those plans. Otherwise, query for the plans we want to show in this component.\n const accessPlans = (\n this.args.allAccessPlans\n ? this.args.allAccessPlans.filter((ap) =>\n ap.name.toLowerCase().includes(this.searchString.toLowerCase())\n )\n : await this.store.query('access-control/access-control-access-plan', {\n searchString: this.searchString,\n userId: this.args.source.id,\n includePlansForUserOnNestedScopes: true\n })\n ) as AccessControlAccessPlanModel[];\n\n const accessPlanItems = accessPlans.map((accessPlan) => {\n const { name, id, iconName, colorName } = accessPlan;\n\n return {\n id,\n name,\n iconName,\n colorName,\n isSelected: activeAccessPlanIds.includes(id),\n model: accessPlan\n };\n });\n\n set(this, 'accessPlans', accessPlans);\n return accessPlanItems;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::AccessPlans::Item::PlanList': typeof AccessControlAccessPlansPlanList;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! @glint-nocheck: Need to look into action sheet button function type, as it looks too narrow. }}\\n\\n

{{tc this \\'description\\'}}

\\n\\n \\n\\n {{#if this.showPinCodeTruncationMessage}}\\n

{{tc this \\'pinCodeTruncation\\'}}

\\n {{/if}}\\n\\n\",{ moduleName: \"customer-site/components/access-control/users/item/credentials/assign-pin/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { computed, action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type AccessControlPermissionsCollection from 'customer-site/models/access-control/access-control-permissions-collection';\nimport type PinCodeCredential from 'customer-site/models/access-control/credentials/pin-code-credential';\nimport type AjaxService from 'customer-site/services/ajax';\n\nexport interface AccessControlUsersItemCredentialsAssignPinSignature {\n Args: {\n isActive: boolean;\n pinCode?: PinCodeCredential;\n permissions: AccessControlPermissionsCollection;\n addCredential: (pinCodeToEdit: PinCodeCredential) => Promise;\n editCredential: (pinCodeToEdit: PinCodeCredential, newPinCode: PinCodeCredential) => Promise;\n close: VoidFunction;\n };\n}\n\n@intlPath({ path: 'access-control/users/item/credentials/assign-pin' })\nexport default class AccessControlUsersItemCredentialsAssignPin extends Component {\n @service declare store: Store;\n @service declare notificationManager: NotificationManager;\n @service declare ajax: AjaxService;\n @service declare intl: ADCIntlService;\n\n @tracked pinCode?: string;\n\n @computed('pinCode', 'args.pinCode.pinCode')\n get currentPinCode(): string {\n return this.pinCode ?? this.args.pinCode?.pinCode ?? '';\n }\n\n /**\n * Should the pin code truncation message be shown?\n */\n @computed('currentPinCode.[]', 'args.permissions.minimumOfMaxCodeLengths')\n get showPinCodeTruncationMessage(): boolean {\n return this.currentPinCode.length > this.args.permissions.minimumOfMaxCodeLengths ?? false;\n }\n\n /**\n * Assign the PIN to the user, and close the modal.\n */\n @action async assignPin(buttonAnimation: Promise): Promise {\n // Get the PIN code that we just created, and the one that we're editing (if any).\n const { pinCode: pinCodeCredential, editCredential, addCredential } = this.args,\n newPinCodeCredential = this.store.createRecord('access-control/credentials/pin-code-credential', {\n pinCode: this.currentPinCode\n }),\n result = await (pinCodeCredential\n ? editCredential(pinCodeCredential, newPinCodeCredential)\n : addCredential(newPinCodeCredential));\n\n if (result) {\n buttonAnimation.then(this.args.close);\n return;\n }\n\n return Promise.reject();\n }\n\n @action async generateRandomPin(): Promise {\n try {\n return await this.ajax.apiRequestForValue(\n 'accessControl/credentials/accessCardCredentials/generateUniquePinCredential'\n );\n } catch (error) {\n this.notificationManager.addError(error.errors[0].detail);\n return this.currentPinCode;\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::Users::Item::Credentials::AssignPin': typeof AccessControlUsersItemCredentialsAssignPin;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if (and @user.isMissingCredentialForAccessPlan (not @isReadOnly))}}\\n \\n {{/if}}\\n\\n
\\n {{#each this.credentials as |credential|}}\\n \\n \\n \\n {{/each}}\\n\\n {{#if this.addCredentialOptions.length}}\\n \\n \\n \\n {{/if}}\\n
\\n \\n\\n \\n\\n \\n\\n
\\n\",{ moduleName: \"customer-site/components/access-control/users/item/credentials/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { computed, action } from '@ember/object';\nimport { empty, and } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport BaseUserCredentialManager from 'customer-site/classes/credentials/base-user-credential-manager';\nimport PinCodeCredential from 'customer-site/models/access-control/credentials/pin-code-credential';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type { Credential } from 'customer-site/classes/credentials/base-user-credential-manager';\nimport type AccessControlPermissionsCollection from 'customer-site/models/access-control/access-control-permissions-collection';\nimport type AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport type AccessCardCredential from 'customer-site/models/access-control/credentials/access-card-credential';\nimport type BaseCredential from 'customer-site/models/access-control/credentials/base-credential';\nimport './_style.scss';\n\ntype EditCredentialFn = (credential?: BaseCredential) => Promise;\n\n/**\n * @classdesc\n * A component for displaying the credentials and providing the ability to\n * add trigger adding a new credential to an access control user.\n */\n@intlPath({ path: 'access-control/users/item/credentials' })\nexport default class AccessControlUsersItemCredentialsComponent extends BaseUserCredentialManager<\n AccessControlUser,\n AccessControlPermissionsCollection\n> {\n @service declare modals: ModalService;\n @service declare notificationManager: NotificationManager;\n @service declare store: Store;\n @service declare intl: ADCIntlService;\n\n /**\n * Does this user have no PIN codes?\n */\n @empty('args.user.pinCodes')\n declare hasNoPinCodes: boolean;\n\n /**\n * Does this user have no Access Cards?\n */\n @empty('args.user.accessCards')\n declare hasNoAccessCards: boolean;\n\n /**\n * Does this user have no credentials at all?\n */\n @and('hasNoPinCodes', 'hasNoAccessCards')\n declare hasNoCredentials: boolean;\n\n /**\n * Get the possible edit options for a PIN code credential.\n */\n private getEditOptionsForCredential(credential: BaseCredential): DropdownActionItem[] {\n const dropdownOptions: [string, string, (baseCredential?: BaseCredential) => void][] = [\n ['edit', 'edit', this.addEditPinCode]\n ];\n\n // If this isn't a stand alone access control system then we do not\n // want to show the 'DELETE' option for pin codes if the user is Primary.\n // We also don't allow a pin credential to be deleted on its own if it's PointCentral.\n if (\n (this.args.permissions.isStandAloneAccessControl || !this.args.user.isPrimary) &&\n (!(credential instanceof PinCodeCredential) || !credential.isPointCentral)\n ) {\n dropdownOptions.push(['delete', 'trash', this.deleteCredential]);\n }\n\n return this.mapCredentialDropdownOptions(dropdownOptions, credential);\n }\n\n /**\n * All the credentials that belong to this user formatted so they can be easily rendered in the template.\n */\n @computed(\n 'addEditAccessCard',\n 'deleteCredential',\n 'args.user.{accessCards.[],pinCodes.[],mobileCredentials.[]}',\n 'args.permissions.{hasInternalBeta,canViewUserCodes,viewMobileCredentials}'\n )\n override get credentials(): Credential[] {\n const { user, permissions } = this.args;\n\n if (!user || !permissions) {\n return [];\n }\n\n const { pinCodes, mobileCredentials } = user,\n credentials = [],\n accessCards = user.accessCards.rejectBy('isMobileCredential');\n\n credentials.push(\n ...pinCodes.map((pin) => ({\n icon: 'guest-code',\n code: permissions.canViewUserCodes ? pin.pinCode : '****',\n options: this.getEditOptionsForCredential(pin)\n }))\n );\n\n credentials.push(\n ...accessCards.map((accessCard) => ({\n icon: 'access-card',\n code: accessCard.cardSerial,\n options: this.mapCredentialDropdownOptions(\n [\n ['edit', 'edit', this.addEditAccessCard],\n ['delete', 'trash', this.deleteCredential]\n ],\n accessCard\n )\n }))\n );\n\n if (permissions.viewMobileCredential) {\n credentials.push(\n ...mobileCredentials.map((mobileCredential) => ({\n icon: 'mobile-credential',\n code: this.intl.t('access-control.users.edit.mobileCredential'),\n options: this.mapCredentialDropdownOptions(\n [['delete', 'trash', this.deleteCredential]],\n mobileCredential\n )\n }))\n );\n }\n\n return credentials;\n }\n\n /**\n * The items to put inside the add credential type dropdown menu.\n */\n @computed(\n 'addEditAccessCard',\n 'addEditPinCode',\n 'addPointCentralPinCode',\n 'addResendMobileCredential',\n 'args.permissions.{systemSupportsAccessCards,systemSupportsPinCodes,addMobileCredential}',\n 'args.user.{canChangeUserCode,pinCodes.[],mobileCredentials.[]}'\n )\n override get addCredentialOptions(): DropdownActionItem[] {\n const { user, permissions, isReadOnly } = this.args;\n if (!user || !permissions || !user.canChangeUserCode || isReadOnly) {\n return [];\n }\n\n return [\n [permissions.systemSupportsAccessCards, 'accessCard', 'access-card', this.addEditAccessCard],\n // You can only add a Pin code if there aren't any already, you have permission to change codes, and the system supports it.\n [\n !user.pinCodes.length && permissions.systemSupportsPinCodes,\n 'pin',\n 'guest-code',\n permissions.isPointCentralAccessControl ? this.addPointCentralPinCode : this.addEditPinCode\n ],\n // Only internal beta users can see mobile credentials\n [\n !user.mobileCredentials.length && permissions.addMobileCredential,\n 'mobileCredential',\n 'mobile-credential',\n this.addResendMobileCredential\n ]\n ]\n .filter(([test]) => !!test)\n .map(([, name, icon, action]: [boolean, string, string, EditCredentialFn]) =>\n DropdownActionItem.create({\n name: this.intl.t(`access-control.users.edit.${name}`),\n icon,\n action\n })\n );\n }\n\n /**\n * Indicates whether the passed credential can be modified.\n */\n protected override canCredentialBeModified(credential?: BaseCredential): boolean {\n const canBeModified = !(credential?.activeDirectoryFlag ?? false);\n if (!canBeModified) {\n this.notificationManager.addError(this.intl.t('access-control.users.edit.index.adNoCredentialChanges'));\n }\n\n return canBeModified;\n }\n\n @tracked isEditAccessCardActive = false;\n @tracked accessCardToEdit?: AccessCardCredential;\n\n /**\n * Opens the assign access card modal, passing the supplied access card if there is one.\n */\n @action private addEditAccessCard(accessCard?: AccessCardCredential): void {\n if (this.canCredentialBeModified(accessCard)) {\n Object.assign(this, {\n accessCardToEdit: accessCard,\n isEditAccessCardActive: true\n });\n }\n }\n\n @tracked isEditPinCodeActive = false;\n @tracked pinCodeToEdit?: PinCodeCredential;\n\n /**\n * Show a modal that allows the user to add/edit a PIN.\n */\n @action private addEditPinCode(pinCode?: PinCodeCredential): void {\n if (this.canCredentialBeModified(pinCode)) {\n Object.assign(this, {\n pinCodeToEdit: pinCode,\n isEditPinCodeActive: true\n });\n }\n }\n\n /**\n * We don't allow users to choose pin codes for PointCentral, so there's no need to show the assign\n * pin modal. Instead, just create a new pin code with a placeholder pin that we'll update after\n * generating a PC pin when it gets saved.\n */\n @action private addPointCentralPinCode(): void {\n this.args.addCredential(\n this.store.createRecord('access-control/credentials/pin-code-credential', {\n isPointCentral: true\n })\n );\n }\n\n @action validateCredentialOptionsOpen(): boolean {\n return this.args.user.canChangeUserCode && this.validateAddCredentialOpen();\n }\n\n @action validateAddCredentialOpen(): boolean {\n return !this.args.isReadOnly;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::Users::Item::Credentials': typeof AccessControlUsersItemCredentialsComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n\\n
\\n
\\n {{@accessPlan.name}}\\n
\\n {{#if @showScopeName}}\\n {{@accessPlan.scopeName}}\\n {{/if}}\\n
\\n\\n
\\n \\n
\\n
\\n\",{ moduleName: \"customer-site/components/access-control/users/item/active-access-plan-row/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type { PlanDetailsTotalKey } from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlAccessPlan from 'customer-site/models/access-control/access-control-access-plan';\n\nexport interface ActiveAccessPlanRowSignature {\n Element: HTMLDivElement;\n Args: {\n planDetailTotals: Record;\n accessPlan: AccessControlAccessPlan;\n showScopeName: boolean;\n };\n}\n\nconst ActiveAccessPlanRow = templateOnlyComponent();\nexport default ActiveAccessPlanRow;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::Users::Item::ActiveAccessPlanRow': typeof ActiveAccessPlanRow;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#unless @isReadOnly}}\\n \\n {{/unless}}\\n\\n\\n
\\n {{#each @accessPlans as |accessPlan|}}\\n \\n {{else}}\\n \\n {{/each}}\\n
\",{ moduleName: \"customer-site/components/access-control/users/item/active-access-plans/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type { ActiveAccessPlanRowSignature } from 'customer-site/components/access-control/users/item/active-access-plan-row/index';\n\ninterface AccessControlUsersItemActiveAccessPlansSignature {\n Args: Pick & {\n isReadOnly?: boolean;\n editUserAccessPlans: VoidFunction;\n accessPlans: ActiveAccessPlanRowSignature['Args']['accessPlan'][];\n };\n}\n\nconst AccessControlUsersItemActiveAccessPlans =\n templateOnlyComponent();\nexport default AccessControlUsersItemActiveAccessPlans;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::Users::Item::ActiveAccessPlans': typeof AccessControlUsersItemActiveAccessPlans;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! @glint-nocheck: @model.user is async, so we need to use get to access it `deviceAccess=(get @model.user \\'deviceAccess\\')` }}\\n\\n \\n {{#unless @isReadOnly}}\\n \\n {{#if (and data.permissions.accessControlPausedContacts this.banner.shouldShow)}}\\n \\n {{/if}}\\n \\n {{/unless}}\\n\\n \\n \\n \\n\\n \\n\\n
\\n {{!-- Only show these options if the user has credentials. These options are directly tied\\n to the credentials so they won\\'t actually be saved unless the user has credentials. --}}\\n {{#if (or data.user.pinCodes.length data.user.accessCards.length)}}\\n {{#if this.supportsAccessPeriod}}\\n \\n {{/if}}\\n\\n \\n\\n {{/if}}\\n\\n {{#if data.user.canViewLocaleControl}}\\n \\n {{/if}}\\n\\n {{#if (or data.user.pinCodes.length data.user.accessCards.length)}}\\n
\\n
\\n

\\n {{t \\'access-control.users.edit.index.adaUser\\'}}\\n

\\n

\\n {{t \\'access-control.users.edit.index.adaDescription\\'}}\\n

\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n\\n {{#if (and data.permissions.showReaderBasedAntiPassback (or data.user.pinCodes.length data.user.accessCards.length))}}\\n
\\n
\\n

\\n {{t \\'access-control.users.edit.index.antiPassbackException\\'}}\\n

\\n

\\n {{t \\'access-control.users.edit.index.antiPassbackExceptionDescription\\'}}\\n

\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n {{#if data.user.activeDirectoryFlag}}\\n
\\n
\\n

\\n {{t \\'access-control.users.edit.index.activeDirectoryUser\\'}}\\n

\\n

\\n {{t \\'access-control.users.edit.index.activeDirectoryDescription\\'}}\\n

\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n\\n \\n
\\n \\n
\\n
\\n \\n {{#if (and (not @isReadOnly) this.user.canBeMerged this.permissions.canMergeUser)}}\\n \\n {{/if}}\\n\\n {{#if @showMergeUsersButton}}\\n \\n {{/if}}\\n
\\n\\n\\n{{!-- The people section is for testing only and will be removed once the people specific routes are ready to be created. --}}\\n{{#if (can-view-people-ui)}}\\n \\n {{#if (await data)}}\\n
\\n \\n \\n
\\n {{/if}}\\n \\n{{/if}}\",{ moduleName: \"customer-site/components/access-control/users/item/access-control-edit-user/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { isDestroyed } from '@adc/ember-utils/utils/ember-helpers';\nimport { computed, action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { saveUserModel } from 'customer-site/classes/users/edit/index/controller';\nimport {\n EmberAccessControlMergeUsersList,\n EmberEnterpriseAccessControlMergeUsersList\n} from 'customer-site/enums/CustomerPageUrl';\nimport { InvitationSent, InvitationExpired } from 'customer-site/enums/MobileCredentialInvitationStatus';\nimport AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport { ISSUE } from '@adc/ui-components/components/adc-banner';\nimport { deleteUser } from '../../../../users/list/base-user-item/index';\n\nimport type LocaleModel from '@adc/app-infrastructure/models/locale';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AdcBannerSignature } from '@adc/ui-components/components/adc-banner';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { getAccessControlPermissions } from 'customer-site/classes/access-control/access-plans/base-index-route';\nimport type { UserAttributeListSignature } from 'customer-site/components/users/user-attributes/user-attribute-list/index';\nimport type { hasLinkedADInstance } from 'customer-site/enterprise/settings/active-directory-setup/index/controller';\nimport type AccessControlAccessGroup from 'customer-site/models/access-control/access-control-access-group';\nimport type { getPlanDetailTotals } from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlAccessPlanModel from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlAccessPoint from 'customer-site/models/access-control/access-control-access-point';\nimport type AccessControlTimetable from 'customer-site/models/access-control/access-control-timetable';\nimport type AccessControlUserTypeModel from 'customer-site/models/access-control/access-control-user-type';\nimport type AccessControlCredentialConflict from 'customer-site/models/access-control/credentials/access-control-credential-conflict';\nimport type ContactAddress from 'customer-site/models/users/contact-address';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ResolvedObject } from 'customer-site/utils/type-utils';\n\ntype AdcBannerArgs = AdcBannerSignature['Args'];\n\nexport interface AccessControlEditUserComponentSignature {\n Args: {\n model: Pick & {\n planDetailTotals: ReturnType;\n timetables: ADCAsyncStoreFindAll;\n permissions: ReturnType;\n accessPoints: ADCAsyncStoreFindAll;\n accessGroups: ADCAsyncStoreFindAll;\n accessPlans: ADCAsyncStoreQuery;\n userTypes: ADCAsyncStoreFindAll;\n conflicts: ADCAsyncStoreFindAll;\n hasLinkedADInstance: ReturnType;\n user: ADCAsyncStoreFindRecord;\n };\n mobileCredentialModalOnLoad: boolean;\n setMobileModalOnLoadPropertyTrue: VoidFunction;\n toggleConfirmTransition: VoidFunction;\n routeMap: {\n userInformation: number;\n languagePreference: number;\n userGroup: number;\n accessPlans: number;\n expiringCredentials: number;\n addNewUserAttribute: number;\n editUserAttribute: number;\n userAddContactAddressRoute: number;\n userEditContactInformationRoute: number;\n userLinkLoginRoute: number;\n };\n isViewingOwnProfile?: boolean;\n addCredential: VoidFunction;\n editCredential: VoidFunction;\n deleteCredential: VoidFunction;\n showMergeUsersButton?: boolean;\n isReadOnly?: boolean;\n mergeContacts?: VoidFunction;\n };\n}\n\ntype Model = AccessControlEditUserComponentSignature['Args']['model'];\n\n/**\n * Component containing actions for the Edit User page in Access Control and EAC\n */\nexport default class AccessControlEditUserComponent extends Component {\n @service declare modals: ModalService;\n @service declare intl: ADCIntlService;\n @service declare ajax: AjaxService;\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n @service declare notificationManager: NotificationManager;\n @service declare navigation: NavigationService;\n\n @tracked resolvedModel?: ResolvedObject<\n Pick\n >;\n\n @alias('resolvedModel.user')\n user?: Awaited;\n\n @alias('resolvedModel.permissions')\n permissions?: Awaited;\n\n /**\n * Determines if this user can be deleted from the system.\n */\n @computed('user.canBeDeleted')\n get canBeDeleted(): boolean {\n return !!this.user && !isDestroyed(this.user) && this.user.canBeDeleted;\n }\n\n /**\n * Is temporary access supported on the current user?\n */\n @computed('user.{hasPanel,isPrimary}')\n get supportsAccessPeriod(): boolean {\n const { user } = this;\n return !!user && user instanceof AccessControlUser && !(user.hasPanel && user.isPrimary);\n }\n\n /**\n * Display name the for locale of the user's current language preference.\n */\n @computed('contextManager.identityModel.profile.availableLocales', 'user.localeId')\n get currentLocaleDisplayName(): string {\n const availableLocales = this.contextManager?.identityModel?.profile?.availableLocales,\n currentLocale = availableLocales?.findBy('id', String(this.user?.localeId)) || ({} as LocaleModel);\n\n return currentLocale.displayName;\n }\n\n /**\n * Text description of the users access group.\n */\n @computed('args.model.{user.accessGroupId,accessGroups.[]}')\n get currentAccessGroupDisplayName(): Promise {\n return (async () => {\n const { model } = this.args,\n user = await model.user,\n accessGroups = await model.accessGroups,\n currentAccessGroup = accessGroups.findBy('id', String(user.accessGroupId ?? -1));\n\n // No id match means user group is not set.\n if (!currentAccessGroup?.id) {\n return this.intl.t('access-control.users.edit.index.noUserGroup');\n }\n\n return currentAccessGroup?.name ?? '';\n })();\n }\n\n /**\n * Text description of the users credentials access period.\n */\n @computed('intl.timeZone', 'user.{endDate,hasEndDate,hasStartDate,startDate}')\n get credentialExpirationText(): string {\n if (!this.user) {\n return '';\n }\n\n const { hasStartDate, hasEndDate, startDate, endDate } = this.user,\n { timeZone } = this.intl,\n [fmtStartDate, fmtEndDate] = [startDate, endDate].map(\n (d) =>\n d &&\n this.intl.formatDateTz(d, {\n month: 'numeric',\n year: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit'\n })\n );\n\n // set the start & end date description\n if (hasStartDate && hasEndDate) {\n return `${fmtStartDate} - ${fmtEndDate} (${timeZone})`;\n }\n\n let key = 'neverExpire',\n props = undefined;\n\n // set the start date description\n if (hasStartDate) {\n key = 'accessBeginsWithTimeZone';\n props = {\n start: fmtStartDate,\n timeZone: timeZone\n };\n }\n\n // set the end date description\n if (hasEndDate) {\n key = 'accessEndsWithTimeZone';\n props = {\n end: fmtEndDate,\n timeZone: timeZone\n };\n }\n\n return this.intl.t(`access-control.users.edit.index.${key}`, props);\n }\n\n /**\n * based on the paused status of the user\n */\n @computed('user.{isPaused,lastPauseDate}')\n get banner():\n | { shouldShow: false; type?: AdcBannerArgs['type']; message?: string }\n | { shouldShow: true; type: AdcBannerArgs['type']; message: string }\n | undefined {\n const { user } = this;\n if (!user) {\n return;\n }\n\n if (!user.isPaused) {\n return {\n shouldShow: false\n };\n }\n\n return {\n shouldShow: true,\n type: ISSUE,\n message: this.intl.t('access-control.users.edit.index.pauseWarningText', {\n lastPauseDate: this.intl.formatDateTz(user.lastPauseDate, {\n month: 'long',\n year: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit'\n })\n })\n };\n }\n\n /**\n * Shows a banner based off the mobile credential invite status\n * @returns {{showBanner: boolean}|string|{showBanner: boolean, type, message: *}}\n */\n @computed('user.{mobileCredentialInviteStatus,mobileCredentials.length}')\n get mobileCredentialBanner():\n | { showBanner: boolean; type?: string; message?: string; isResend?: boolean; isCancel?: boolean }\n | undefined {\n const { user } = this;\n if (!user) {\n return;\n }\n\n if (user.mobileCredentials.length) {\n return {\n showBanner: false\n };\n }\n\n const inviteStatus = user.mobileCredentialInviteStatus;\n\n if (inviteStatus === InvitationExpired) {\n return {\n showBanner: true,\n type: ISSUE,\n message: this.intl.t('access-control.users.edit.index.bannerInvitationExpired'),\n isResend: true,\n isCancel: false\n };\n }\n\n if (inviteStatus === InvitationSent) {\n return {\n showBanner: true,\n type: ISSUE,\n message: this.intl.t('access-control.users.edit.index.bannerInvitationSent'),\n isResend: false,\n isCancel: true\n };\n }\n\n return {\n showBanner: false\n };\n }\n\n /**\n * Send a mobile credential invite to the user, with preference for text\n */\n @action\n async sendMobileCredentialInvite(): Promise {\n // Send either email or sms invite, with preference for email\n const { user, notificationManager } = this;\n if (!user) {\n return;\n }\n\n const [, endpoint] =\n [\n [user.emailAddresses, 'sendEmailMobileCredentialInvite'],\n [user.mobileAddresses, 'sendSmsMobileCredentialInvite']\n ].find(([{ length }]) => length > 0) ?? [];\n\n if (endpoint) {\n try {\n await this.ajax.apiRequest(`accessControl/accessControlUsers/${endpoint}`, undefined, user.id, 'POST');\n } catch (error) {\n notificationManager.addError(error.errors[0].detail);\n return;\n }\n\n notificationManager.addSuccess(this.intl.t('access-control.users.edit.index.inviteResent'));\n user.reload();\n } else {\n notificationManager.addError(this.intl.t('access-control.users.edit.index.noContactAddresses'));\n }\n }\n\n /**\n * Mark a user's mobile credential invite as invalid\n */\n @action\n async markMobileCredentialInviteInvalid(): Promise {\n const { user, notificationManager } = this;\n if (user) {\n try {\n await this.ajax.apiRequest(\n 'accessControl/accessControlUsers/markMobileCredentialInviteInvalid',\n undefined,\n user.id,\n 'POST'\n );\n\n notificationManager.addSuccess(this.intl.t('access-control.users.edit.index.inviteCancelled'));\n user.reload();\n } catch (error) {\n notificationManager.addError(error.errors[0].detail);\n }\n }\n }\n\n @action\n async unpauseUser(): Promise {\n try {\n const { user } = this;\n if (!user) {\n return;\n }\n\n if (user.activeDirectoryFlag) {\n this.notificationManager.addError(this.intl.t('access-control.users.edit.index.adUnpauseFailure'));\n return;\n }\n\n const userName = user.displayName;\n\n await user.pauseUnpauseUser(false);\n this.notificationManager.addSuccess(\n this.intl.t('access-control.users.edit.index.unpauseSuccess', { userName })\n );\n user.reload();\n } catch (exception) {\n // The backend controller will return an error if this was not successful.\n console.log(exception);\n }\n }\n\n /**\n * Save the user.\n */\n @action\n async saveUser(): Promise {\n const { user } = this;\n if (user) {\n await saveUserModel(user, this.modals);\n }\n }\n\n /**\n * Updates the ADA flag for the user\n */\n @action\n async updateAdaFlag({ target: { checked: newValue } }: Event & { target: HTMLInputElement }): Promise {\n const { user } = this;\n if (user) {\n user.set('adaFlag', newValue);\n await saveUserModel(user, this.modals);\n\n this.notificationManager.addSuccess(this.intl.t('access-control.users.edit.index.adaSavedMessage'));\n }\n return true;\n }\n\n /**\n * Updates the VIP status for the user.\n */\n @action\n async updateApbExemptFlag({\n target: { checked: newValue }\n }: Event & { target: HTMLInputElement }): Promise {\n const { user } = this;\n if (user) {\n user.set('apbExemptFlag', newValue);\n await saveUserModel(user, this.modals);\n\n this.notificationManager.addSuccess(\n this.intl.t('access-control.users.edit.index.antiPassbackExceptionMsg')\n );\n }\n return true;\n }\n\n /**\n * helper function that handles transitioning to the appropriate edit page\n */\n @action\n transitionToEditRoute(routeId: number): void {\n const { user, permissions } = this;\n if (user?.activeDirectoryFlag && permissions?.mapADUsersToAccessPlans) {\n this.notificationManager.addError(this.intl.t('components.users.item.user-overview.ADEditFailure'));\n } else {\n this.navigation.transitionToRouteId(routeId);\n }\n }\n\n /**\n * Edit a contact address on this user.\n */\n @action\n editAddress(address: ContactAddress): void {\n if (address.activeDirectoryFlag) {\n this.notificationManager.addError(this.intl.t('access-control.users.edit.index.adNoEmailChanges'));\n return;\n }\n\n this.navigation.transitionToRouteId(\n this.args.routeMap.userEditContactInformationRoute,\n this.user?.id ?? '',\n address.id\n );\n }\n\n /**\n * Updates the permissions record by reloading it from the server.\n */\n @action\n async syncUserPermissions(): Promise {\n (await this.permissions)?.reload();\n }\n\n /**\n * Prompts for confirmation and then deletes the user.\n */\n @action\n deleteUser(): void {\n // Do not copy this incorrect usage, please fix it.\n // @ts-expect-error This user can apparently be undefined, but the code we are passing it to doesn't allow that. We need to not call this code if the user is undefined.\n deleteUser(this.user, this.intl, this.modals, this.notificationManager, this.permissions, async () => {\n this.args.toggleConfirmTransition();\n\n // Sync the users permissions because information about the duress users may have changed.\n await this.syncUserPermissions();\n this.contextManager.transitionToPreviousRoute();\n });\n }\n\n @action\n transitionToMergeUsersList(userId: string): void {\n if (this.identityManager.isEnterprise) {\n this.navigation.transitionToRouteId(EmberEnterpriseAccessControlMergeUsersList, userId);\n return;\n }\n\n this.navigation.transitionToRouteId(EmberAccessControlMergeUsersList, userId);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::Users::Item::AccessControlEditUser': typeof AccessControlEditUserComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#let (concat (guid-for this) \\'_label\\') as |id|}}\\n {{#if this.showIcon}}\\n
\\n \\n \\n
\\n {{/if}}\\n\\n {{#if this.instructions}}\\n

\\n {{this.instructions}}\\n

\\n {{/if}}\\n\\n {{#if this.isEnterCardNumber}}\\n
\\n
\\n \\n
\\n
\\n\\n {{else if this.isSelectReader}}\\n \\n\\n {{else if this.isCardFound}}\\n

\\n \\n {{this.scannedCard.cardSerial}}\\n

\\n {{/if}}\\n {{/let}}\\n\\n\",{ moduleName: \"customer-site/components/access-control/users/item/credentials/assign-access-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { task } from 'ember-concurrency';\nimport AccessCardCredential from 'customer-site/models/access-control/credentials/access-card-credential';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { ActionSheetButton } from '@adc/ui-components/components/action-sheet';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type AccessControlAccessPoint from 'customer-site/models/access-control/access-control-access-point';\nimport type AjaxService from 'customer-site/services/ajax';\nimport './_style.scss';\n\nenum ViewState {\n Start,\n EnterCardNumber,\n SelectCardReader,\n ScanCard,\n CardFound,\n CardNotFound,\n CardScanError\n}\n\ninterface AccessControlUsersItemCredentialsAssignAccessCardArgs {\n isActive: boolean;\n close: VoidFunction;\n accessCard?: AccessCardCredential;\n addCredential: (credential: AccessCardCredential) => Promise;\n editCredential?: (oldAccessCard: AccessCardCredential, newAccessCard: AccessCardCredential) => Promise;\n}\n\n@intlPath({ path: 'access-control/users/item/credentials/assign-access-card' })\nexport default class AccessControlUsersItemCredentialsAssignAccessCard extends Component {\n @service declare store: Store;\n @service declare intl: ADCIntlService;\n @service declare ajax: AjaxService;\n @service declare notificationManager: NotificationManager;\n\n // #region Component state\n\n @tracked currentState = ViewState.Start;\n @tracked selectedCardReaderId?: string;\n @tracked inputCardSerial?: string;\n @tracked scannedCard?: AccessCardCredential;\n\n /**\n * Clear all state and restart.\n */\n @action restart(): void {\n this.waitForScannedCard.cancelAll();\n\n Object.assign(this, {\n currentState: ViewState.Start,\n selectedCardReaderId: undefined,\n inputCardSerial: undefined,\n scannedCard: undefined\n });\n }\n\n // #endregion\n\n // #region View state\n\n @equal('currentState', ViewState.EnterCardNumber)\n declare isEnterCardNumber: boolean;\n\n @equal('currentState', ViewState.SelectCardReader)\n declare isSelectReader: boolean;\n\n @equal('currentState', ViewState.CardFound)\n declare isCardFound: boolean;\n\n private updateViewState(state: ViewState): void {\n this.currentState = state;\n }\n\n // #endregion\n\n // #region Computed state\n\n get cardReaders(): Promise {\n return (async () => {\n const accessPoints = await this.store.findAll('access-control/access-control-access-point');\n return accessPoints.filterBy('isAccessControlDoor');\n })();\n }\n\n /**\n * The current state instructions.\n */\n get instructions(): string {\n const { currentState } = this;\n\n if (currentState === ViewState.CardScanError) {\n return this.scannedCard?.errorMessage ?? '';\n }\n\n const item = (\n [\n [ViewState.Start, 'chooseHow'],\n [ViewState.EnterCardNumber, 'accessCard.description'],\n [ViewState.SelectCardReader, 'selectReader.description'],\n [ViewState.ScanCard, 'scanning.description'],\n [ViewState.CardFound, 'cardFound'],\n [ViewState.CardNotFound, 'cardNotFound']\n ] as [ViewState, string][]\n ).find(([state]) => state === currentState);\n\n return item ? this.intl.tc(this, item[1]) : '';\n }\n\n /**\n * The card serial number to display.\n */\n get displayCardSerial(): string {\n return this.inputCardSerial ?? this.args.accessCard?.cardSerial ?? '';\n }\n\n /**\n * Indicates whether the instructions should be centered within the action sheet.\n */\n get isTextCentered(): boolean {\n return [\n ViewState.EnterCardNumber,\n ViewState.CardFound,\n ViewState.CardNotFound,\n ViewState.CardScanError\n ].includes(this.currentState);\n }\n\n /**\n * Indicates whether to show the stacked access card icon.\n */\n get showIcon(): boolean {\n const { currentState } = this;\n return currentState === ViewState.CardNotFound || currentState === ViewState.CardScanError;\n }\n\n /**\n * The buttons to render for the current state.\n */\n @computed(\n 'currentState',\n 'cardReaders.[]',\n 'selectedCardReaderId',\n 'assignManualCard',\n 'restart',\n 'scannedCard',\n 'waitForScannedCard'\n )\n get buttons(): Promise {\n return (async () => {\n const { intl, currentState } = this,\n tc = (key: string) => intl.tc(this, key),\n fnGetBtn = (\n text: string,\n fn: VoidFunction,\n props: { disabled?: boolean; isPrimary?: boolean } = {}\n ): ActionSheetButton => ({\n text,\n fn,\n disabled: props.disabled ?? false,\n color: props.isPrimary ? 'primary' : undefined\n }),\n txtBack = intl.t('generic.back'),\n btnRestart = fnGetBtn(txtBack, this.restart),\n btnBackToSelectReader = fnGetBtn(txtBack, () => this.updateViewState(ViewState.SelectCardReader)),\n cardReaders = await this.cardReaders;\n\n if (currentState === ViewState.Start) {\n return [\n fnGetBtn(tc('enterCardNumber'), () => this.updateViewState(ViewState.EnterCardNumber)),\n fnGetBtn(tc('scanCard'), () => this.updateViewState(ViewState.SelectCardReader), {\n disabled: cardReaders.length === 0\n })\n ];\n }\n\n if (currentState === ViewState.EnterCardNumber) {\n return [\n btnRestart,\n fnGetBtn(tc('assignCard'), this.assignManualCard, {\n isPrimary: true\n })\n ];\n }\n\n if (currentState === ViewState.SelectCardReader) {\n return [\n btnRestart,\n fnGetBtn(\n intl.t('generic.next'),\n () => {\n this.updateViewState(ViewState.ScanCard);\n this.waitForScannedCard.perform();\n },\n {\n disabled: isEmpty(this.selectedCardReaderId),\n isPrimary: true\n }\n )\n ];\n }\n\n if (currentState === ViewState.ScanCard) {\n return [\n fnGetBtn(intl.t('generic.cancel'), () => {\n this.waitForScannedCard.cancelAll();\n this.updateViewState(ViewState.SelectCardReader);\n })\n ];\n }\n\n if (currentState === ViewState.CardFound) {\n return [\n btnBackToSelectReader,\n fnGetBtn(intl.tc(this, 'assignCard'), () => this.assignCard(this.scannedCard!), {\n isPrimary: true\n })\n ];\n }\n\n if (currentState === ViewState.CardNotFound || currentState === ViewState.CardScanError) {\n return [\n btnBackToSelectReader,\n fnGetBtn(intl.t('generic.tryAgain'), () => this.updateViewState(ViewState.ScanCard), {\n isPrimary: true\n })\n ];\n }\n\n return [];\n })();\n }\n\n // #endregion\n\n // #region Actions\n\n /**\n * Attempt to assign a manual card.\n */\n @action assignManualCard(): Promise {\n return this.assignCard(\n this.store.createRecord('access-control/credentials/access-card-credential', {\n cardSerial: this.displayCardSerial\n })\n );\n }\n\n /**\n * Assign the passed card to the currently selected user.\n */\n @action async assignCard(card: AccessCardCredential): Promise {\n const { args } = this,\n { accessCard } = args;\n\n try {\n const result = await (accessCard ? args.editCredential?.(accessCard, card) : args.addCredential(card));\n if (result) {\n args.close();\n return;\n }\n } catch (ex) {\n // swallow since the actions will notify the user.\n }\n\n return Promise.reject();\n }\n\n /**\n * Task to wait for user to scan card.\n */\n waitForScannedCard = task({ restartable: true }, async () => {\n try {\n const card = await this.ajax.apiRequestForValue(\n `accessControl/credentials/accessCardCredentials/${this.selectedCardReaderId}/getScannedCard/`,\n undefined,\n null,\n 'GET',\n false\n );\n\n if (!card) {\n this.updateViewState(ViewState.CardNotFound);\n return;\n }\n\n // Extract only attribute data from the returned model.\n const data = {} as Record;\n AccessCardCredential.eachAttribute((k) => (data[k] = card[k]));\n\n this.scannedCard = this.store.createRecord('access-control/credentials/access-card-credential', data);\n\n this.updateViewState(card.errorMessage ? ViewState.CardScanError : ViewState.CardFound);\n } catch (error) {\n this.notificationManager.addError(error.errors[0].detail);\n this.updateViewState(ViewState.SelectCardReader);\n throw error;\n }\n });\n\n // #endregion\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::Users::Item::Credentials::AssignAccessCard': typeof AccessControlUsersItemCredentialsAssignAccessCard;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n

{{this.bodyText}}

\\n\\n\",{ moduleName: \"customer-site/components/access-control/users/item/credentials/assign-mobile/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { capitalize } from '@ember/string';\nimport {\n EmberAccessControlUserEditContactInformation,\n EmberEnterpriseAccessControlUserEditContactInformation,\n EmberEnterpriseEditUserContactInformation,\n EmberEditUserContactInformation\n} from 'customer-site/enums/CustomerPageUrl';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { ActionSheetButton } from '@adc/ui-components/components/action-sheet';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type AccessCardCredential from 'customer-site/models/access-control/credentials/access-card-credential';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\nenum ViewState {\n Start,\n SendInvitation,\n NoMobileNumber,\n NoEmailAddress\n}\ninterface AccessControlUsersItemCredentialsAssignMobileArgs {\n isActive: boolean;\n close: VoidFunction;\n mobileCredential?: AccessCardCredential;\n user: BaseUser;\n setMobileModalOnLoadPropertyTrue?: VoidFunction;\n}\n\n@intlPath({ path: 'access-control/users/item/credentials/assign-mobile' })\nexport default class AccessControlUsersItemCredentialsAssignMobile extends Component {\n @service declare intl: ADCIntlService;\n @service declare ajax: AjaxService;\n @service declare notificationManager: NotificationManager;\n @service declare contextManager: ContextManager;\n @service declare navigation: NavigationService;\n @service declare store: Store;\n\n @tracked currentState = ViewState.Start;\n\n @reads('contextManager.identityModel.isPointCentral')\n declare isPointCentral: boolean;\n\n get titleKey(): string {\n return {\n [ViewState.Start]: 'createMobileCredential',\n [ViewState.SendInvitation]: 'sendMobileCredentialInvitation',\n [ViewState.NoMobileNumber]: 'noMobileNumber',\n [ViewState.NoEmailAddress]: 'noEmailAddress'\n }[this.currentState];\n }\n\n @computed('args.user.displayName', 'currentState')\n get bodyText() {\n const { intl } = this,\n { displayName: userName } = this.args.user;\n\n return {\n [ViewState.Start]: intl.tc(this, 'mobileDescription', {\n userName\n }),\n [ViewState.SendInvitation]: intl.tc(this, 'invitationDescription', { userName }),\n [ViewState.NoMobileNumber]: intl.tc(this, 'noMobileDescription'),\n [ViewState.NoEmailAddress]: intl.tc(this, 'noEmailDescription')\n }[this.currentState];\n }\n\n get buttons(): ActionSheetButton[] {\n const { intl, currentState } = this,\n tc = (key: string) => intl.tc(this, key),\n fnGetBtn = (\n text: string,\n fn: VoidFunction,\n isPrimary = true\n ): { text: string; fn: VoidFunction; color?: 'primary' } => ({\n text,\n fn,\n color: isPrimary ? 'primary' : undefined\n }),\n cfgBack = fnGetBtn(intl.t('generic.back'), this.goToInvitation, false),\n cfgCancel = fnGetBtn(intl.t('generic.cancel'), () => this.args.close(), false);\n\n if (currentState === ViewState.SendInvitation) {\n return [\n fnGetBtn(tc('smsTextInvite'), () => this.sendMobileCredentialInvite('sms'), false),\n fnGetBtn(tc('emailInvite'), () => this.sendMobileCredentialInvite('email'), false),\n cfgCancel\n ];\n }\n\n if (currentState === ViewState.NoMobileNumber) {\n return [cfgBack, fnGetBtn(tc('addPhoneNumber'), () => this.addContact('mobile'))];\n }\n\n if (currentState === ViewState.NoEmailAddress) {\n return [cfgBack, fnGetBtn(tc('addEmailAddress'), () => this.addContact('email'))];\n }\n\n return [cfgCancel, fnGetBtn(intl.t('generic.continue'), this.goToInvitation)];\n }\n\n @action\n goToInvitation() {\n this.currentState = ViewState.SendInvitation;\n }\n\n /**\n * Sends an email or sms mobile credential invite.\n */\n @action\n async sendMobileCredentialInvite(type: 'sms' | 'email'): Promise {\n const { user } = this.args;\n\n if (type === 'sms' && !user.mobileAddresses.length) {\n this.currentState = ViewState.NoMobileNumber;\n return;\n }\n\n if (type === 'email' && !user.emailAddresses.length) {\n this.currentState = ViewState.NoEmailAddress;\n return;\n }\n\n try {\n await this.ajax.apiRequest(\n `accessControl/accessControlUsers/send${capitalize(type)}MobileCredentialInvite`,\n undefined,\n user.id,\n 'POST'\n );\n this.notificationManager.addSuccess(this.intl.tc(this, 'invitationSent'));\n } catch (error) {\n this.notificationManager.addError(error.errors[0].detail);\n }\n\n user.reload();\n this.args.close();\n }\n\n /**\n * Adds a contact to the user.\n */\n @action addContact(type: 'mobile' | 'email'): void {\n this.args.setMobileModalOnLoadPropertyTrue?.();\n\n const { user } = this.args;\n\n this.navigation.transitionToRouteId(\n user.isEnterprise ? this.getEnterpriseEditContactInfoRoute() : this.getSingleSystemEditContactInfoRoute(),\n user.id,\n 'new',\n {\n queryParams: {\n contact_address: 'new',\n contactType: type\n }\n }\n );\n }\n\n @action setup(): void {\n if (this.args.isActive && !this.args.setMobileModalOnLoadPropertyTrue) {\n // This is already in progress.\n this.currentState = ViewState.SendInvitation;\n }\n }\n\n @action reset(): void {\n this.currentState = ViewState.Start;\n }\n\n /**\n * Grabs the enterprise edit contact info route.\n */\n private getEnterpriseEditContactInfoRoute() {\n return this.isPointCentral\n ? EmberEnterpriseEditUserContactInformation\n : EmberEnterpriseAccessControlUserEditContactInformation;\n }\n\n /**\n * Grabs the single system edit contact info route.\n */\n private getSingleSystemEditContactInfoRoute() {\n return this.isPointCentral ? EmberEditUserContactInformation : EmberAccessControlUserEditContactInformation;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'AccessControl::Users::Item::Credentials::AssignMobile': typeof AccessControlUsersItemCredentialsAssignMobile;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n

{{tc this \\'featureUnderConstruction\\'}}

\\n
\",{ moduleName: \"customer-site/components/beta/feature-under-construction/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\n\ninterface BetaWarningSignature {\n Element: HTMLDivElement;\n}\n\n/**\n * @classdesc\n * Internal message for features under development to minimize bug reports.\n */\n@intlPath({ path: 'beta/feature-under-construction' })\nexport default class BetaWarning extends Component {}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Beta::FeatureUnderConstruction': typeof BetaWarning;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n {{#if (and this.hasPointCentralMobileCredentialsFeatureToggle (not @isReadOnly))}}\\n \\n {{/if}}\\n\\n {{!-- @glint-expect-error Please convert this component to TS --}}\\n \\n {{#if data.user.deviceAccess}}\\n \\n {{/if}}\\n\\n {{#if @isSmrfVisible}}\\n \\n {{/if}}\\n\\n {{#if @showUserTypeDrillThrough}}\\n \\n
\\n \\n
\\n
\\n {{/if}}\\n\\n \\n
\\n {{#if this.showUserTypeDropdown}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if this.user.canViewLocaleControl}}\\n \\n \\n \\n {{/if}}\\n
\\n\\n {{#if this.userTypeSupportsDeviceAccess}}\\n
\\n {{!-- @glint-expect-error Please convert this component to TS --}}\\n \\n
\\n {{else if this.isPointCentral}}\\n \\n

{{this.noDeviceAccessSupportText}}

\\n
\\n {{/if}}\\n\\n {{#if this.deviceAccess.temporarySchedule.isExpired}}\\n \\n

{{t \\'users.edit.index.expiredUserWarning\\'}}

\\n
\\n {{/if}}\\n\\n \\n
\\n \\n
\\n\\n {{#if (and (not @isReadOnly) this.user.canBeMerged this.permissions.canMergeUser)}}\\n \\n {{/if}}\\n\\n {{#if @showMergeUsersButton}}\\n \\n {{/if}}\\n\\n\\n{{!-- The people section is for testing only and will be removed once the people specific routes are ready to be created. --}}\\n{{#if (can-view-people-ui)}}\\n \\n {{#if (await data)}}\\n
\\n \\n {{!-- @glint-expect-error Please convert this component to TS --}}\\n \\n
\\n {{/if}}\\n \\n{{/if}}\",{ moduleName: \"customer-site/components/enterprise/users/user-edit/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed, get } from '@ember/object';\nimport { alias, bool } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { userTypeSupportsDeviceAccess } from 'customer-site/classes/users/edit/base-user-edit-controller';\nimport { MasterCodeUser } from 'customer-site/enums/AccessPointUserType';\nimport { MasterCodeUser as PointCentralMasterCodeUser } from 'customer-site/enums/PointCentralUserType';\nimport DropdownSelectItem, { SELECTED, UNSELECTED } from '@adc/ui-components/utils/dropdown-select-item';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type { UserAttributeListSignature } from 'customer-site/components/users/user-attributes/user-attribute-list/index';\nimport type {\n EmberEnterpriseEditUserInformation,\n EmberEnterpriseUserEditLanguage,\n EmberEnterpriseEditUserAccessPeriod,\n EmberEnterpriseEditUserDeviceAccess,\n EmberEnterpriseEditUserContactInformation,\n EmberEnterpriseEditUserType,\n EmberEnterpriseEditUserDeviceAccessUserCode,\n EmberEnterpriseEditUserAttributes,\n EmberEnterpriseEditUserAttributesEdit,\n EmberEnterpriseUsersUsername,\n EmberEnterpriseUsers,\n EmberEnterpriseAccessControlUserEditAddContact\n} from 'customer-site/enums/CustomerPageUrl';\nimport type Configuration from 'customer-site/models/systems/configuration';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type ContactAddress from 'customer-site/models/users/contact-address';\nimport type UsersPermissionsCollectionModel from 'customer-site/models/users/permissions-collection';\nimport type User from 'customer-site/models/users/user';\nimport type { ResolvedObject } from 'customer-site/utils/type-utils';\n\nexport interface EnterpriseUsersEditComponentSignature {\n Args: {\n model: Pick & {\n permissions: ADCAsyncStoreFindRecord;\n systemConfig?: ADCAsyncStoreFindRecord;\n user: ADCAsyncStoreFindRecord;\n deviceAccess: ADCAsyncStoreFindRecord;\n };\n mobileCredentialModalOnLoad: boolean;\n setMobileModalOnLoadPropertyTrue: VoidFunction;\n routeMap: {\n accessPeriod: typeof EmberEnterpriseEditUserAccessPeriod;\n deviceAccess: typeof EmberEnterpriseEditUserDeviceAccess;\n userInformation: typeof EmberEnterpriseEditUserInformation;\n userAddContactAddressRoute: typeof EmberEnterpriseAccessControlUserEditAddContact;\n languagePreference: typeof EmberEnterpriseUserEditLanguage;\n userType: typeof EmberEnterpriseEditUserType;\n addNewUserAttribute: typeof EmberEnterpriseEditUserAttributes;\n editUserAttribute: typeof EmberEnterpriseEditUserAttributesEdit;\n username: typeof EmberEnterpriseUsersUsername;\n usernameRedirect: typeof EmberEnterpriseUsers;\n userEditContactInformationRoute: typeof EmberEnterpriseEditUserContactInformation;\n userCode: typeof EmberEnterpriseEditUserDeviceAccessUserCode;\n };\n isViewingOwnProfile?: boolean;\n deleteUser: VoidFunction;\n addAddress: VoidFunction;\n canBeDeleted: boolean;\n addCredential: VoidFunction;\n editCredential: VoidFunction;\n deleteCredential: VoidFunction;\n linkLogin: VoidFunction;\n showUserTypeDrillThrough: boolean;\n currentUserType: string;\n isSmrfVisible: boolean;\n showMergeUsersButton?: boolean;\n isReadOnly?: boolean;\n mergeContacts?: VoidFunction;\n };\n}\n\ntype Model = EnterpriseUsersEditComponentSignature['Args']['model'];\n\nexport default class EnterpriseUsersEditComponent extends Component {\n @service declare nativeBridge: ServiceRegistry['native-bridge'];\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare modals: ServiceRegistry['modals'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare intl: ServiceRegistry['adc-intl'];\n\n @tracked resolvedModel?: ResolvedObject<\n Pick\n >;\n\n @bool('identityManager.pointCentralIdentity.hasPointCentralMobileCredentialsFeatureToggle')\n declare hasPointCentralMobileCredentialsFeatureToggle: boolean;\n\n /**\n * An alias to the {@link models.users.User} model.\n */\n @alias('resolvedModel.user')\n user?: ResolvedObject['user'];\n\n /**\n * An alias to the {@link models.permissions} model.\n */\n @alias('resolvedModel.permissions')\n permissions?: ResolvedObject['permissions'];\n\n @alias('resolvedModel.deviceAccess')\n deviceAccess?: DeviceAccessModel;\n\n get noDeviceAccessSupportText(): string {\n if (this.isLockMasterCodeUser) {\n return this.intl.t('enterprise.users.edit.index.lockMasterCodeUserText');\n }\n\n if (this.identityManager.isPointCentral) {\n return this.intl.t('enterprise.users.edit.index.notificationsOnlyUserTextPointCentralUserTypeRevampBeta');\n }\n\n return this.intl.t('enterprise.users.edit.index.notificationsOnlyUserText');\n }\n\n /**\n * Are we editing a lock master code user?\n */\n @computed('resolvedModel.deviceAccess.{userType,pointCentralUserType}')\n get isLockMasterCodeUser(): boolean {\n const { deviceAccess } = this;\n\n return !!(\n deviceAccess &&\n (deviceAccess.pointCentralUserType === PointCentralMasterCodeUser ||\n deviceAccess.userType === MasterCodeUser)\n );\n }\n\n /**\n * Whether or not the customer is logged in to a PointCentral context.\n */\n @alias('identityManager.isPointCentral')\n declare isPointCentral: boolean;\n\n /**\n * Notifications Only users are not allowed device access for PointCentral.\n */\n @computed('deviceAccess.resolvedUserType', 'isPointCentral')\n get userTypeSupportsDeviceAccess(): boolean {\n const { deviceAccess } = this;\n return !!deviceAccess && userTypeSupportsDeviceAccess(deviceAccess, this.isPointCentral);\n }\n\n /**\n * Array of user types for users.\n */\n @computed('deviceAccess.{userType,availableUserTypesForUser.[]}')\n get availableUserTypesForDropdown(): DropdownSelectItem[] {\n const { deviceAccess } = this;\n if (!deviceAccess) {\n return [];\n }\n\n return deviceAccess.availableUserTypesForUser.map((userType) => {\n return DropdownSelectItem.create({\n name: userType.name,\n value: String(userType.id),\n state: userType.id === deviceAccess.userType ? SELECTED : UNSELECTED\n });\n });\n }\n\n /**\n * Array of language options as drop down items.\n */\n @computed('contextManager.identityModel.profile.availableLocales', 'user.localeId')\n get availableLocaleOptions(): DropdownSelectItem[] {\n const availableLocales = get(this.contextManager.identityModel.profile, 'availableLocales');\n\n return availableLocales.map(({ displayName, id }) =>\n DropdownSelectItem.create({\n name: displayName,\n value: id,\n state: this.user?.localeId === parseInt(id, 10) ? SELECTED : UNSELECTED\n })\n );\n }\n\n /**\n * Should the user type option be shown?\n */\n @computed('deviceAccess.{availableUserTypesForUser.length}', 'user.isEnterprise', 'isPointCentral')\n get showUserTypeDropdown(): boolean {\n const { deviceAccess } = this;\n if (!deviceAccess || this.isPointCentral) {\n return false;\n }\n\n const { length } = deviceAccess.availableUserTypesForUser ?? [];\n return length > 1;\n }\n\n /**\n * Saves device access point user type upon changing dropdown.\n */\n @action async userTypeChanged(userType: number): Promise {\n const { deviceAccess } = this;\n if (deviceAccess) {\n deviceAccess.set('userType', userType);\n\n await deviceAccess.save();\n this.notificationManager.addSuccess(this.intl.t('classes.users.edit.updatesHaveBeenSaved'));\n }\n }\n\n /**\n * Sets the user's localeID to the newly selected language.\n */\n @action async languageChanged(localeId: number): Promise {\n const { user } = this;\n if (user) {\n user.set('localeId', localeId);\n\n await user.save();\n this.notificationManager.addSuccess(this.intl.t('classes.users.edit.updatesHaveBeenSaved'));\n }\n }\n\n /**\n * Edit a contact address on this user.\n */\n @action\n editAddress(address: ContactAddress) {\n this.navigation.transitionToRouteId(\n this.args.routeMap.userEditContactInformationRoute,\n this.user?.id ?? '',\n address.id\n );\n }\n\n /**\n * Updates the permissions record by reloading it from the server.\n */\n @action\n async syncUserPermissions(): Promise {\n (await this.permissions)?.reload();\n }\n\n /**\n * Transitions to the appropriate route for editing a portion of a user.\n */\n @action\n transitionToEditRoute(routeId: number) {\n this.navigation.transitionToRouteId(routeId);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Enterprise::Users::UserEdit': typeof EnterpriseUsersEditComponent;\n }\n}\n","import Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport * as CustomerPageUrl from 'customer-site/enums/CustomerPageUrl';\n\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface IsRouteActiveSignature {\n Args: {\n Positional: [keyof typeof CustomerPageUrl];\n };\n Return: boolean;\n}\n\n/**\n * Indicates if one of the passed in routes is currently active.\n */\nexport default class IsRouteActive extends Helper {\n @service declare contextManager: ContextManager;\n\n compute(routes: IsRouteActiveSignature['Args']['Positional']): IsRouteActiveSignature['Return'] {\n const currentRouteId = this.contextManager.currentRouteData?.routeItem?.routeId;\n return !currentRouteId ? false : routes.some((routeName) => CustomerPageUrl[routeName] === currentRouteId);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'is-route-active': typeof IsRouteActive;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! @glint-nocheck: Needs to investigate InsetGroup signature, it doesn\\'t seem to be working correct. }}\\n{{#if (if this.shouldUseForceCardArg @showCardDesign (is-route-active this.route)) }}\\n \\n {{yield}}\\n \\n{{else}}\\n {{yield}}\\n{{/if}}\",{ moduleName: \"customer-site/components/people/container/card-style/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\n\nimport type * as CustomerPageUrl from 'customer-site/enums/CustomerPageUrl';\nimport './_style.scss';\nimport type { InsetGroupSignature } from '@adc/ui-components/components/inset-group';\n\ntype InsetGroupArgs = InsetGroupSignature['Args'];\n\nexport interface PeopleCardStyleSignature {\n Element: InsetGroupSignature['Element'];\n Args: Pick & {\n /** The route in which the card design should appear. The default route is EmberPersonEdit */\n route?: keyof typeof CustomerPageUrl;\n /** If the card design should be forced to appear. */\n showCardDesign?: boolean;\n };\n Blocks: {\n default: [];\n };\n}\n\n/**\n * Conditionally adds the People UI card style that can be used on new or\n * existing components.\n */\nexport default class PeopleCardStyle extends Component {\n /**\n * The route that should be used to checks if the People UI styling should applied.\n */\n get route(): keyof typeof CustomerPageUrl {\n return this.args.route ?? 'EmberPersonEdit';\n }\n\n /**\n * If the 'showCardDesign' argument should take priorty over the 'route' argument.\n */\n get shouldUseForceCardArg(): boolean {\n return this.args.showCardDesign !== undefined;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'People::Container::CardStyle': typeof PeopleCardStyle;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n \\n
\\n\\n

{{@title}}

\\n\\n {{#if @firstDescription}}\\n

{{@firstDescription}}

\\n {{/if}}\\n\\n {{#if @secondDescription}}\\n

{{@secondDescription}}

\\n {{/if}}\\n\\n {{yield}}\\n
\\n\",{ moduleName: \"customer-site/components/ui/stacked-icon-label/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type { SvgSymbolSignature } from '@adc/svg-system/components/svg-symbol';\n\nexport interface UiStackedIconLabelSignature {\n Element: HTMLDivElement;\n Args: Pick & {\n title: string;\n firstDescription?: string;\n secondDescription?: string;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst UiStackedIconLabel = templateOnlyComponent();\nexport default UiStackedIconLabel;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Ui::StackedIconLabel': typeof UiStackedIconLabel;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n
\\n \\n
\\n
\\n
\\n {{#unless data.user.useOnlyOneName}}\\n \\n \\n \\n {{/unless}}\\n\\n {{!-- Not always a last name and first name, Company might have just one, or also a Duress --}}\\n \\n \\n \\n\\n {{#if this.showUserType}}\\n \\n \\n \\n {{/if}}\\n
\\n
\\n
\\n\\n\",{ moduleName: \"customer-site/components/users/edit-info-route/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { computed, get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { camelize } from '@ember/string';\nimport { isPresent } from '@ember/utils';\nimport { Guest } from 'customer-site/enums/AccessPointUserType';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownSelectItem, { SELECTED, UNSELECTED } from '@adc/ui-components/utils/dropdown-select-item';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type { ResolvedObject } from 'customer-site/utils/type-utils';\n\ntype UserType = { id: string; name: string; description: string };\n\ninterface UsersEditInfoRouteSignature {\n Args: {\n user: Promise;\n userTypes: Promise;\n saveUserWithUserCode: (user: BaseUser, selectedUserCodeType?: string) => Promise;\n };\n}\n\n@intlPath({ path: 'users/edit/user-information' })\nexport default class UsersEditInfoRouteComponent extends Component {\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n\n resolvedModel?: ResolvedObject>;\n\n @tracked _selectedUserCodeType?: string;\n get selectedUserCodeType(): string | undefined {\n const userTypes = this.resolvedModel?.userTypes;\n if (!userTypes || userTypes.length === 0) {\n return undefined;\n }\n\n const { _selectedUserCodeType } = this;\n if (isPresent(_selectedUserCodeType)) {\n return _selectedUserCodeType;\n }\n\n return this.contextManager.isPointCentral && !!userTypes.findBy('id', String(Guest))\n ? String(Guest)\n : userTypes[0].id;\n }\n set selectedUserCodeType(value: string | undefined) {\n this._selectedUserCodeType = value;\n }\n\n get userTypeItems(): DropdownSelectItem[] {\n return (this.resolvedModel?.userTypes ?? []).map(({ id, name }) =>\n DropdownSelectItem.create({\n name,\n value: id,\n state: this.selectedUserCodeType === id ? SELECTED : UNSELECTED\n })\n );\n }\n\n private getTranslationKeyForLastName(): string {\n const { user } = this.resolvedModel ?? {};\n\n if (user?.isDuress) {\n return 'duress';\n }\n\n if (user?.useOnlyOneName) {\n return 'companyName';\n }\n\n return '';\n }\n\n /**\n * Label for the last name input box.\n */\n @computed('resolvedModel.user.{isDuress,useOnlyOneName}')\n get lastNameLabel(): string {\n return this.intl.t(\n `users.edit.user-information.${camelize(`${this.getTranslationKeyForLastName()}-LastNameLabel`)}`\n );\n }\n\n /**\n * Placeholder to display inside the last name input box.\n */\n @computed('resolvedModel.user.{isDuress,useOnlyOneName}')\n get lastNamePlaceholder(): string {\n return this.intl.t(\n `users.edit.user-information.${camelize(`${this.getTranslationKeyForLastName()}-LastNamePlaceholder`)}`\n );\n }\n\n @computed('resolvedModel.user.isDuress', 'userTypeItems.[]', 'contextManager.{isEnterprise,isPointCentral}')\n get showUserType(): boolean {\n const { contextManager } = this,\n user = this.resolvedModel?.user;\n\n if (!user || !get(user, 'isNew')) {\n return false;\n }\n\n const { length } = this.userTypeItems;\n return (\n (length > 1 && contextManager.isEnterprise) ||\n (contextManager.isPointCentral && !user.isDuress && length > 0)\n );\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::EditInfoRoute': typeof UsersEditInfoRouteComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n
\\n \\n\\n {{#each this.addressTypes as |type|}}\\n {{!-- @glint-expect-error disabled doesn\\'t seem to exist, please fix this. --}}\\n {{#unless type.disabled}}\\n \\n {{/unless}}\\n {{/each}}\\n
\\n
\\n\\n\",{ moduleName: \"customer-site/components/users/item/add-contact/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed, action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { camelize } from '@ember/string';\nimport { PROPS_TO_OBSERVE, getPossibleAddressTypes } from '../contact-information/index';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type { AddContactModel } from 'customer-site/classes/users/edit/add-contact/route';\nimport type NavigationService from 'customer-site/services/navigation';\n\ninterface AddContactSignature {\n Args: {\n model: AddContactModel;\n };\n}\n\n/**\n * @classDesc\n * Component for selecting what type of contact to add.\n */\nexport default class UsersAddContactComponent extends Component {\n @service declare intl: ADCIntlService;\n @service declare store: Store;\n @service declare navigation: NavigationService;\n\n resolvedModel?: {\n user: Awaited;\n permissions: Awaited;\n };\n\n /**\n * The address types that can potentially be added to the user. If disabled=true, then the user has reached the maximum number allowed.\n */\n @computed(...PROPS_TO_OBSERVE, 'permissions', 'user')\n get addressTypes(): ReturnType[] {\n if (!this.user || !this.permissions) {\n return [];\n }\n return getPossibleAddressTypes(this.user, this.permissions).map((i) => ({\n ...i,\n ...this.getMediaForAddressType(i.type)\n }));\n }\n\n @alias('resolvedModel.user')\n user?: Awaited;\n\n @alias('resolvedModel.permissions')\n permissions?: Awaited;\n\n /**\n * Returns the icon name for the specified address type.\n */\n private getMediaForAddressType(type: string): { icon: string; description: string; type: string } {\n type = type.toLowerCase();\n\n return {\n icon: type === 'voice' ? 'phone' : type,\n description: this.intl.t(`users.edit.add-contact.${camelize(`add-${type}`)}`),\n type\n };\n }\n\n /**\n * Moves to contact creation.\n */\n @action startNewContact(type: string): void {\n const { user } = this;\n if (user) {\n this.navigation.replaceWithRouteId(this.args.model.editUserContactInformationRouteId, user.id, 'new', {\n queryParams: {\n contactType: type\n }\n });\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::AddContact': typeof UsersAddContactComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n {{#unless @showCardDesign}}\\n \\n {{/unless}}\\n\\n {{!-- @glint-expect-error: According to glint this will never return false because it\\'s an async relationship, please fix this. --}}\\n {{#if @user.contactAddresses}}\\n {{#each (await this.contactAddresses) as |address|}}\\n {{#let (or @isReadOnly (and (not @isViewingOwnProfile) @permissions.canViewLinkLoginsAndUsersUI address.addressRoles.length)) as |shouldBlockEditingAddress|}}\\n \\n {{/let}}\\n {{/each}}\\n {{/if}}\\n\\n {{#if (and this.canAddAddress (not @isReadOnly))}}\\n {{#if @showCardDesign}}\\n \\n {{else}}\\n \\n {{/if}}\\n\\n {{/if}}\\n
\\n\",{ moduleName: \"customer-site/components/users/item/contact-information/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed, get } from '@ember/object';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type BasePermissionsCollection from 'customer-site/models/users/base-permissions-collection';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type ContactAddress from 'customer-site/models/users/contact-address';\n\n/**\n * Types of contact addresses\n */\nexport const ADDRESS_TYPES = ['Voice', 'Mobile', 'Email'] as const;\nconst ADDRESS_RELATIONSHIPS = {\n Voice: 'voiceAddresses',\n Mobile: 'mobileAddresses',\n Email: 'emailAddresses'\n} as const;\n\n/**\n * The properties to observe to properly recalculate if address types can be added.\n */\nexport const PROPS_TO_OBSERVE = [\n 'user.{voiceAddresses.length,mobileAddresses.length,emailAddresses.length}',\n 'permissions.{maxVoiceAddresses,maxMobileAddresses,maxEmailAddresses}'\n];\n\n/**\n * Returns a list of all address types the user supports and whether or not they can currently add more of the type.\n */\nexport function getPossibleAddressTypes(\n user: BaseUser,\n permissions: BasePermissionsCollection\n): { type: string; disabled: boolean }[] {\n return ADDRESS_TYPES.filter((type) => getMaxForAddressType(permissions, type)).map((type) => {\n return {\n type,\n // It should be disabled if the current number of addresses is >= the max allowed.\n disabled: user.hasMany(ADDRESS_RELATIONSHIPS[type]).ids().length >= getMaxForAddressType(permissions, type)\n };\n });\n}\n\n/**\n * Returns the max to check for the specified address type\n */\nfunction getMaxForAddressType(permissions: BasePermissionsCollection, type: (typeof ADDRESS_TYPES)[number]): number {\n return get(permissions, `max${type}Addresses`);\n}\n\ninterface ContactInformationItemComponentSignature {\n Element: HTMLElement;\n Args: {\n user: BaseUser;\n permissions: BasePermissionsCollection;\n /** If the People card design UI should be shown. */\n showCardDesign?: boolean;\n isViewingOwnProfile?: boolean;\n addAddress: () => void;\n editAddress: (address: ContactAddress) => void;\n isReadOnly?: boolean;\n };\n}\n\n@intlPath({ path: 'users/item/contact-information' })\nexport default class ContactInformation extends Component {\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n\n /** User */\n @alias('args.user')\n declare user: BaseUser;\n\n @alias('args.permissions')\n declare permissions: BasePermissionsCollection;\n\n /**\n * Displays an error message if attempting to edit a contact address which\n * is not associated with the user linked to the current login.\n */\n @action displayErrorForSpecialContactAddress(): void {\n this.notificationManager.addError(\n this.intl.tc(this, 'cannotUpdateContactMessage', { loginName: this.user.loginName })\n );\n }\n\n /**\n * Should the 'Add Address' button be shown?\n */\n @computed(...PROPS_TO_OBSERVE, 'permissions', 'user')\n get canAddAddress(): boolean {\n return getPossibleAddressTypes(this.user, this.permissions).any((type) => !type.disabled);\n }\n\n /**\n * Returns the contact addresses array that should be. The sorted one is\n * only being used if the card design should be shown.\n */\n @computed('args.showCardDesign', 'user.contactAddresses')\n get contactAddresses(): Promise {\n const { contactAddresses } = this.user;\n\n if (!this.args.showCardDesign) {\n return contactAddresses;\n }\n\n return (async () => (await contactAddresses).sortBy('addressRoles').reverse())();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::ContactInformation': typeof ContactInformation;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n
\\n
\\n {{#if this.showGroupSelectionDropdown}}\\n
\\n \\n {{tc this \\'groupSelection\\'}}\\n \\n
\\n {{/if}}\\n\\n {{#unless this.isAccessControlOrNested}}\\n
\\n \\n {{this.locationsCount}}\\n\\n \\n
\\n {{/unless}}\\n\\n {{#if this.showViewMoreButton}}\\n
\\n {{this.viewingLimitedLocationsText}}\\n
\\n {{/if}}\\n
\\n\\n {{#unless this.isAccessControlOrNested}}\\n \\n {{/unless}}\\n
\\n\\n
\\n {{#if this.isAccessControl}}\\n \\n {{else}}\\n {{#if this.noLocations}}\\n

{{t \\'components.users.item.device-access.locations.noLocations\\'}}

\\n {{else}}\\n {{#each this.deviceAccessLocations as |location|}}\\n \\n
\\n
\\n \\n \\n
\\n\\n
\\n
\\n {{#unless (and (await location.canAllAccessBeGranted) (await location.canAllAccessBeRevoked))}}\\n \\n {{/unless}}\\n \\n \\n \\n
\\n
\\n
\\n\\n {{#if location.byDevice}}\\n
\\n \\n
\\n {{/if}}\\n \\n {{/each}}\\n {{/if}}\\n {{/if}}\\n
\\n
\\n {{#if this.showViewMoreButton}}\\n
\\n \\n
\\n {{/if}}\\n
\\n\",{ moduleName: \"customer-site/components/users/item/device-access/access-type-bulk-actions/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport EmberObject, { computed, action } from '@ember/object';\nimport { equal, alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { dropTask } from 'ember-concurrency';\nimport {\n getSystemGroupDropdownSelectItems,\n isAccessControlSystemGroup\n} from 'customer-site/classes/helpers/pointcentral';\nimport { intlPath } from '@adc/i18n/path';\nimport { loadAccessInformation } from '../child-group-bulk-action-row/index';\nimport { accessPointItemCanBeModified } from '../item-groups/index';\n\nimport './_style.scss';\n\n/**\n * The amount of locations that we will display at a time. If an end-user clicks the 'View More' button, we will display 25 more locations.\n *\n * @type {number}\n */\nexport const ACCESS_TYPE_BULK_ACTIONS_BATCH_SIZE = 25;\n\n/**\n * Determines whether the passed in location's description includes the search string.\n *\n * @param {{system: models.systems.System, accessItems: models.users.access.AccessPointItem[], allAccess: boolean, noAccess: boolean, byDevice: boolean}} location\n * @returns {boolean}\n */\nexport function locationPassesSearchString(location) {\n if (this.isNested) {\n // If the system group above this doesn't match the search string, check this location to see if the parent group search string\n // matches the location's description. Otherwise, we want to show all locations under a group that has a matching description.\n this.searchString = !this.currentSystemGroupDescription\n .toLowerCase()\n .includes(this.parentSearchString.toLowerCase())\n ? this.parentSearchString\n : '';\n }\n\n return location.system.get('description').toLowerCase().includes(this.searchString.toLowerCase());\n}\n\n/**\n * Creates the location row items that we display on the page. This includes being able to display information about\n * access point items within that location and whether each access point item can be modified.\n *\n * @param {number} startIndex What is the index of the first location row item to create?\n * @returns {{system: models.systems.System, accessItems: models.users.access.AccessPointItem[], allAccess: boolean, noAccess: boolean, canAllAccessBeGranted:Promise, canAllAccessBeRevoked:Promise, byDevice: boolean}[]}\n */\nfunction getDeviceAccessLocations(startIndex) {\n return this.systemAccessPointItemsForGroup\n .slice(startIndex, this.numLocationsToDisplay)\n .map(({ system, accessItems }) => {\n const numberWithAccess = accessItems.filterBy('hasAccess').length,\n allAccess = numberWithAccess === accessItems.length,\n noAccess = numberWithAccess === 0,\n accessPointsWithAccessCanBeChangedPromises = Promise.all(\n accessItems\n .filterBy('hasAccess')\n .map((item) => accessPointItemCanBeModified(item, this.deviceAccess))\n ),\n accessPointsWithoutAccessCanBeChangedPromises = Promise.all(\n accessItems\n .filterBy('hasAccess', false)\n .map((item) => accessPointItemCanBeModified(item, this.deviceAccess))\n ),\n canAllAccessBeGranted = accessPointsWithoutAccessCanBeChangedPromises.then((results) =>\n results.every((canBeChanged) => canBeChanged)\n ),\n canAllAccessBeRevoked = accessPointsWithAccessCanBeChangedPromises.then((results) =>\n results.every((canBeChanged) => canBeChanged)\n );\n\n return EmberObject.create({\n system,\n accessItems,\n allAccess,\n noAccess,\n canAllAccessBeGranted,\n canAllAccessBeRevoked,\n byDevice: !allAccess && !noAccess\n });\n });\n}\n\n/**\n * The current access summary of the user. This component shows the access of each location in the currently selected system\n * group. The user may give this user all, no, or by-device access to those locations. The login also may give or revoke\n * all access of all devices within the group.\n *\n * @param {models.users.access.DeviceAccess} deviceAccess The device and access information to show within the component.\n * @param {models.systems.SystemGroup[]} systemGroups The system groups that the login has access to.\n * @param {string} currentSystemGroupDescription\n * @param {string} currentSystemGroupId\n * @param {string} parentSearchString\n */\n@intlPath({ path: 'users/item/device-access/access-type-bulk-actions' })\nexport default class AccessTypeBulkActionsComponent extends Component {\n @service intl;\n @service contextManager;\n @service store;\n\n constructor() {\n super(...arguments);\n\n // Update the screen width when it is resized\n window.addEventListener('resize', this.updateScreenWidth);\n }\n\n /**\n * The access the current user has.\n *\n * @type { models.users.access.DeviceAccess }\n */\n @alias('args.deviceAccess')\n deviceAccess;\n\n /**\n * The available system groups to toggle access on.\n *\n * @type { models.systems.SystemGroup[] }\n */\n @alias('args.systemGroups')\n systemGroups;\n\n /**\n * The selected group's description.\n */\n @alias('args.currentSystemGroupDescription')\n currentSystemGroupDescription;\n\n /**\n * The selected group's id.\n *\n * @type { number }\n */\n @alias('args.currentSystemGroupId')\n currentSystemGroupId;\n\n /**\n * The search string on a higher level group, if applicable.\n *\n * @type { String }\n */\n @alias('args.parentSearchString')\n parentSearchString;\n\n // #region Access Control Properties and Task\n\n /**\n * If this is an access control group, this is the access control user model that tells us about the\n * access plans this user has on this group.\n *\n * @type { AccessControlUser }\n */\n @tracked\n accessControlUser;\n\n /**\n * If this is an access control group, these are the access plans that this user has on this group.\n *\n * @type { AccessPlan[] }\n */\n @tracked\n accessPlans;\n\n /**\n * Since this component describes lower level group access, we won't have child groups underneath this one.\n *\n * @type { boolean }\n */\n includeChildScopes = false;\n\n /**\n * We want to include information about access plans on sibling and parent groups.\n *\n * @type { boolean }\n */\n includeParentScope = true;\n\n /**\n * Fetch access control information.\n *\n * @type { TaskGenerator }\n */\n @dropTask()\n *loadAccessInformation() {\n yield loadAccessInformation.call(\n this,\n this.deviceAccess.id,\n this.selectedSystemGroup,\n this.store,\n this.includeParentScope,\n this.includeChildScopes\n );\n }\n\n // #endregion\n\n /**\n * The search string to filter the locations that appear on the page.\n *\n * @type {String}\n */\n @tracked\n searchString = '';\n\n /**\n * Whether or not the component is nested within a parent group bulk actions component.\n *\n * @type {boolean}\n */\n isNested = this.contextManager.identityModel.selectedSystemGroup.get('isParentGroup');\n\n /**\n * The amount of locations to display.\n *\n * @type {number}\n */\n @tracked\n numLocationsToDisplay = ACCESS_TYPE_BULK_ACTIONS_BATCH_SIZE;\n\n /**\n * The current width of the screen\n *\n * @type {number}\n */\n @tracked\n screenWidth = window.innerWidth;\n\n // region Computed Properties\n\n /**\n * Whether there are any locations to select from in the locations section for device access selection.\n *\n * @returns {boolean}\n */\n @equal('deviceAccessLocations.length', 0)\n noLocations;\n\n /**\n * Whether or not we should show the dropdown that allows you to select a different group.\n *\n * @returns {boolean}\n */\n @computed('systemGroups.length', 'contextManager.identityModel.isPointCentral')\n get showGroupSelectionDropdown() {\n return this.contextManager.identityModel.isPointCentral && this.systemGroups.length > 1;\n }\n\n /**\n * If there are more locations than the amount of locations to display, we show a button for them to\n * 'View More'.\n *\n * @returns {boolean}\n */\n @computed('numLocationsToDisplay', 'systemAccessPointItemsForGroup.length')\n get showViewMoreButton() {\n return this.systemAccessPointItemsForGroup.length > this.numLocationsToDisplay;\n }\n\n /**\n * The locations count of the currently selected group.\n *\n * @returns {String}\n */\n @computed('systemAccessPointItemsForGroup.length', 'showViewMoreButton')\n get locationsCount() {\n return (\n this.intl.tc(this, 'locationsCount', { count: this.systemAccessPointItemsForGroup.length }) +\n (this.showViewMoreButton ? '*' : '')\n );\n }\n\n @computed('contextManager.identityModel.{hasMLEGUserAccess,selectedSystemGroup}')\n get isParentAndMLEG() {\n return (\n this.contextManager.identityModel.hasMLEGUserAccess &&\n this.contextManager.identityModel.selectedSystemGroup.get('isParentGroup')\n );\n }\n\n /**\n * The access point items within this selected group, sorted alphabetically and filtered based on the search string.\n *\n * @returns {models.users.access.AccessPointItem[]}\n */\n @computed(\n 'contextManager.identityModel.profile.locale.language',\n 'currentSystemGroupId',\n 'deviceAccess.accessPointCollectionsSummary.systemsAccessPointItems',\n 'isAccessControl',\n 'isNested',\n 'isParentAndMLEG',\n 'parentSearchString',\n 'searchString',\n 'selectedSystemGroup.isParentGroup'\n )\n get systemAccessPointItemsForGroup() {\n return (this.deviceAccess.get('accessPointCollectionsSummary.systemsAccessPointItems') ?? [])\n .filter(\n (item) =>\n (this.isParentAndMLEG\n ? this.isNested\n ? item.systemGroupId === this.currentSystemGroupId\n : true\n : item.systemGroupId === this.selectedSystemGroup) &&\n locationPassesSearchString.call(this, item)\n )\n .sort((a, b) => {\n const locale = this.contextManager.identityModel.profile.locale.language;\n return a.system\n .get('description')\n .localeCompare(b.system.get('description'), locale, { numeric: true });\n });\n }\n\n /**\n * If we are not displaying all of the locations, we will describe how many locations the end-user is viewing.\n *\n * @returns {String}\n */\n @computed('numLocationsToDisplay', 'systemAccessPointItemsForGroup.length')\n get viewingLimitedLocationsText() {\n return this.intl.tc(this, 'viewingLimitedLocationsText', {\n x: this.numLocationsToDisplay,\n y: this.systemAccessPointItemsForGroup.length\n });\n }\n\n /**\n * The group to select from the system groups dropdown.\n *\n * @type {number}\n */\n @computed('deviceAccess.groupToSelect', 'contextManager.identityModel.selectedSystemGroup')\n get selectedSystemGroup() {\n return this.deviceAccess.groupToSelect || this.contextManager.identityModel.selectedSystemGroup.get('id');\n }\n\n /**\n * The objects to use when listing locations and devices in the currently selected group.\n *\n * @returns {{system: models.systems.System, accessItems: models.users.access.AccessPointItem[], allAccess: boolean, noAccess: boolean, canAllAccessBeGranted:Promise, canAllAccessBeRevoked:Promise, byDevice: boolean}[]}\n */\n @computed(\n 'deviceAccess.accessPointCollectionsSummary.allAccessPointItems.@each.hasAccess',\n 'selectedSystemGroup',\n 'systemAccessPointItemsForGroup'\n )\n get deviceAccessLocations() {\n return getDeviceAccessLocations.call(this, 0);\n }\n\n /**\n * Is the currently selected group an access control group? If so, show access plans for this user.\n *\n * @returns {boolean}\n */\n @computed('selectedSystemGroup', 'systemGroups')\n get isAccessControl() {\n return isAccessControlSystemGroup(this.systemGroups, this.selectedSystemGroup);\n }\n\n @computed('selectedSystemGroup', 'systemGroups', 'isNested')\n get isAccessControlOrNested() {\n return isAccessControlSystemGroup(this.systemGroups, this.selectedSystemGroup) || this.isNested;\n }\n\n /**\n * The groups to show in the group dropdown.\n *\n * @returns {DropdownSelectItem[]}\n */\n @computed('selectedSystemGroup', 'systemGroups')\n get groupsForDropdown() {\n const { systemGroups } = this;\n if (!systemGroups) {\n return [];\n }\n\n return getSystemGroupDropdownSelectItems(this.systemGroups, this.selectedSystemGroup);\n }\n\n @computed('deviceAccessLocations')\n get iconForLocations() {\n return this.deviceAccessLocations.find((location) => location.get('system.icon') == 'enterprise-open')\n ? 'enterprise-open'\n : 'property-single';\n }\n\n /**\n * Determine if the Binary Control Radio Buttons should have the reversed property\n *\n * @return {boolean}\n */\n @computed('screenWidth')\n get areLocationRadioButtonsReversed() {\n // If the screen width <= 1200px, we want to then reverse the radio buttons\n if (window.innerWidth <= 1200) {\n return true;\n }\n return false;\n }\n\n // endregion\n\n // region Actions\n\n /**\n * The action called when you select 'All Access', 'No Access', or 'By location' for a location.\n *\n * @param {{system: models.systems.System, accessItems: models.users.access.AccessPointItem[], allAccess: boolean, noAccess: boolean, byDevice: boolean}} location\n * @param {boolean} hasAccess Determines the level of access to give to the user.\n */\n @action\n async toggleAccessToLocation(location, hasAccess) {\n location.setProperties({\n allAccess: hasAccess === true,\n noAccess: hasAccess === false,\n byDevice: hasAccess === undefined\n });\n\n if (!isEmpty(hasAccess)) {\n // Update the access on any devices that can be updated.\n for (let item of location.accessItems.filterBy('canAccessBeChanged')) {\n if (await accessPointItemCanBeModified(item, this.deviceAccess)) {\n item.hasAccess = hasAccess;\n }\n }\n\n if (!hasAccess && this.currentSystemGroupId) {\n this.deviceAccess\n .get('accessPointCollectionsSummary.systemGroupIdsWithExistingPlusFutureAccess')\n ?.removeObject(Number(this.currentSystemGroupId));\n }\n }\n }\n\n /**\n * Toggle all the devices of the locations of the currently selected group to either have all or no access.\n * We may only be seeing a subset of the locations based on the search string.\n *\n * @param {boolean} hasAccess Whether or not the user should get access to all devices within selected group.\n */\n @action\n async toggleAllDeviceAccessLocations(hasAccess) {\n this.systemAccessPointItemsForGroup.forEach((location) => {\n if (locationPassesSearchString.call(this, location)) {\n location.accessItems.forEach(async (item) => {\n const accessCanBeChanged = await accessPointItemCanBeModified(item, this.deviceAccess);\n if (accessCanBeChanged) {\n item.hasAccess = hasAccess;\n }\n });\n }\n });\n }\n\n /**\n * The action when a new group is selected from the group dropdown.\n *\n * @param {String} groupId\n */\n @action selectSystemGroup(groupId) {\n this.deviceAccess.set('groupToSelect', groupId);\n\n // If we've selected an AC group, load access control user info.\n if (this.isAccessControl) {\n this.loadAccessInformation.perform();\n }\n }\n\n /**\n * Set the access user property on the device access model to signal that we will need to save the access user when we\n * save device access.\n *\n * @param {models.access-control.AccessControlUser} accessUser\n * @param {models.access-control.AccessControlAccessPlan[]} accessPlans\n * @param {number} systemGroupId\n * @returns {Promise}\n */\n @action async selectAccessPlans(accessUser, accessPlans, systemGroupId = this.selectedSystemGroup) {\n const deviceAccessModel = await this.deviceAccess;\n\n accessUser.set('accessPlans', accessPlans);\n deviceAccessModel.setProperties({\n accessControlUser: accessUser,\n accessControlGroupId: systemGroupId\n });\n }\n\n /**\n * If someone clicks the 'View More' button, we want to display the next ACCESS_TYPE_BULK_ACTIONS_BATCH_SIZE\n * amount of locations. Create the location row objects for the next ACCESS_TYPE_BULK_ACTIONS_BATCH_SIZE amount\n * of locations and append it onto the current rows.\n */\n @action\n viewMore() {\n const startIndex = this.numLocationsToDisplay;\n this.numLocationsToDisplay += ACCESS_TYPE_BULK_ACTIONS_BATCH_SIZE;\n const additionalLocationItems = getDeviceAccessLocations.call(this, startIndex);\n this.deviceAccessLocations.addObjects(additionalLocationItems);\n }\n\n /**\n * When someone resizes the screen width, this action will update the local screen width variable\n */\n @action\n updateScreenWidth() {\n this.screenWidth = window.innerWidth;\n }\n\n /** @override */\n willDestroy() {\n // If we're going to a new route, we need to clear the new user status.\n this.deviceAccess.set('groupToSelect', undefined);\n // Remove the event listener we added\n window.removeEventListener('resize', this.updateScreenWidth);\n super.willDestroy();\n }\n\n // endregion\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n
\\n
\\n
\\n \\n {{tc this \\'groupsCount\\' count=this.childGroupsForDisplay.length}}\\n\\n \\n
\\n
\\n\\n \\n
\\n\\n
\\n {{#each this.sortedChildGroups as |group|}}\\n \\n {{else}}\\n

{{tc this \\'noGroups\\'}}

\\n {{/each}}\\n
\\n
\\n
\\n\",{ moduleName: \"customer-site/components/users/item/device-access/access-type-parent-group-bulk-actions/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action, computed, get, getProperties } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { accessPointItemCanBeModified } from '../item-groups/index';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport type SystemGroup from 'customer-site/models/systems/system-group';\nimport type AccessPointCollectionsSummary from 'customer-site/models/users/access/access-point-collections-summary';\nimport type AccessPointItem from 'customer-site/models/users/access/access-point-item';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * Small extension for the device access model, so that it can store two properties\n * for an Access Control API call.\n */\nexport interface DeviceAccessControlModel extends DeviceAccessModel {\n accessControlUser: AccessControlUser;\n accessControlGroupId: number;\n}\n\ninterface AccessTypeParentGroupBulkActionsArgs {\n deviceAccess: DeviceAccessControlModel;\n}\n\n/**\n * Updates the access of locations within the selected group.\n */\nexport function toggleAccess(\n deviceAccess: DeviceAccessModel,\n accessPointItems: AccessPointItem[],\n currentGroupId: string,\n hasAccess: boolean\n): void {\n accessPointItems.forEach((location) => {\n if (location.systemGroup.get('id') == currentGroupId) {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error accessPointCollection is async, so we should await it before querying it's properties.\n get(location.accessPointCollection, 'accessPointItems').forEach(async (item) => {\n const accessCanBeChanged = await accessPointItemCanBeModified(item, deviceAccess);\n if (accessCanBeChanged) {\n item.hasAccess = hasAccess;\n }\n });\n }\n });\n}\n\nexport function systemGroupPassesSearchString(systemGroup: SystemGroup, searchString: string): boolean {\n return (\n systemGroup.description.toLowerCase().includes(searchString.toLowerCase()) ||\n systemGroup.systems.any((system) => system.description.toLowerCase().includes(searchString.toLowerCase()))\n );\n}\n\n/**\n * @classdesc\n *\n * Handles displaying child groups for a user's access type at the parent group level.\n */\n@intlPath({ path: 'users/item/device-access/access-type-parent-group-bulk-actions' })\nexport default class AccessTypeParentGroupBulkActions extends Component {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n\n /**\n * The search string to filter the locations that appear on the page.\n */\n searchString = '';\n\n /**\n * The access point collections summary model associated with the passed-in device access model.\n */\n @alias('args.deviceAccess.accessPointCollectionsSummary')\n declare accessPointCollectionsSummary: AccessPointCollectionsSummary;\n\n /**\n * If at least one of the child groups is commercial business (i.e. has the icon 'enterprise-group')\n * then display the commercial business icon by the search bar.\n */\n @computed('contextManager.identityModel.selectedSystemGroup.childGroups')\n get iconForGroups(): string {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error Both selectedSystemGroup and childGroups are async, so we should await them before we query their properties.\n return (get(this.contextManager.identityModel.selectedSystemGroup, 'childGroups') ?? []).findBy(\n 'icon',\n 'enterprise-group'\n )\n ? 'enterprise-group'\n : 'property-group';\n }\n\n /**\n * Toggle all currently visible groups to either have all or no access.\n * Groups that are filtered out by the search string will not be affected.\n */\n @action\n async toggleAllDeviceAccessLocations(hasAccess: boolean): Promise {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error accessPointCollectionsSummary is async, so we should await it before querying it's properties.\n const { systemsAccessPointItems, systemGroupIdsWithExistingPlusFutureAccess } =\n getProperties(\n this.args.deviceAccess.accessPointCollectionsSummary,\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error accessPointCollectionsSummary is async, so we should await it before querying it's properties.\n 'systemsAccessPointItems',\n 'systemGroupIdsWithExistingPlusFutureAccess'\n ) ?? [];\n\n this.childGroupsForDisplay.forEach((group) => {\n // If we select to toggle access for all groups listed, we know that the end-user doesn't have E+F access on the group, so remove it\n // from the APCS model's property.\n systemGroupIdsWithExistingPlusFutureAccess?.removeObject(Number(group.id));\n\n const childGroupAccessPointItems = systemsAccessPointItems\n .filterBy('systemGroupId', group.id)\n .mapBy('accessItems')\n .flat();\n toggleAccess(this.args.deviceAccess, childGroupAccessPointItems, group.id, hasAccess);\n });\n }\n\n /**\n * The child groups displayed on the Parent Group Access Type page, given a search string.\n */\n @computed('sortedChildGroups.[]', 'searchString')\n get childGroupsForDisplay() {\n return this.sortedChildGroups.filter((sg) => systemGroupPassesSearchString(sg, this.searchString));\n }\n\n /**\n * Sorts the child groups to display in the component.\n */\n @computed('contextManager.identityModel.{profile.locale.language,selectedSystemGroup.childGroups}')\n get sortedChildGroups(): SystemGroup[] {\n const childGroups = get(this.contextManager.identityModel.selectedSystemGroup, 'childGroups') ?? [];\n\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error Both selectedSystemGroup and childGroups are async, so we should await them before we query their properties.\n return childGroups.toArray().sort((a, b) => {\n const locale = this.contextManager.identityModel.profile.locale.language;\n return a.description.localeCompare(b.description, locale, { numeric: true });\n });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::DeviceAccess::AccessTypeParentGroupBulkActions': typeof AccessTypeParentGroupBulkActions;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n {{#if (is-fulfilled @deviceAccess.accessPointCollectionsSummary)}}\\n {{#unless @userTypeSupportsDeviceAccess}}\\n \\n

{{t \\'components.users.item.device-access.notificationsOnlyUser\\'}}

\\n
\\n {{/unless}}\\n
\\n \\n
\\n \\n {{item.label}}\\n {{#if item.props.displayWarning}}\\n \\n {{/if}} \\n \\n
\\n
\\n
\\n \\n \\n
\\n {{selectedInfo.description}}\\n
\\n
\\n {{#if (and this.shouldShowAccessTypeBulkActions @userTypeSupportsDeviceAccess)}}\\n {{#if this.isAccessTypeSetByLocation}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{/if}}\\n
\\n \\n {{else}}\\n \\n {{/if}}\\n\\n\",{ moduleName: \"customer-site/components/users/item/device-access/access-type/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action, computed, set, get } from '@ember/object';\nimport { alias, reads, equal, or, and } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { shouldOverrideAndSelectAllExistingAccessPointCentral } from 'customer-site/classes/helpers/pointcentral';\nimport { intlPath } from '@adc/i18n/path';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport { ACCESS_TYPE } from '../../../../../models/users/access/device-access';\nimport { accessPointItemCanBeModified } from '../item-groups/index';\n\nimport './_style.scss';\n\nexport const ACCESS_TYPE_TEXT_MAP = {\n [ACCESS_TYPE.ALL_EXISTING_FUTURE_ID]: 'existingAndFuture',\n [ACCESS_TYPE.ALL_EXISTING_ID]: 'allExisting',\n [ACCESS_TYPE.BY_LOCATION_ID]: 'byLocations',\n [ACCESS_TYPE.BY_GROUP_ID]: 'byGroups',\n [ACCESS_TYPE.NO_ACCESS_ID]: 'noAccess'\n};\n\n/**\n * Updates the access point and user models.\n *\n * @param {boolean} hasAccess - should we add or remove access?\n * @param {boolean} [isAllAccessUser=false]\n * @param {function} additionalAccessPointItemFilterFunction - If you have customized logic to affect which access points should be modified, pass it in as a funciton here\n *\n * @private\n * @instance\n * @memberof components.users.item.DeviceAccess\n */\nfunction updateModels(hasAccess, isAllAccessUser = false, additionalAccessPointItemFilterFunction = null) {\n const accessPointCollectionsSummary = this.deviceAccess.get('accessPointCollectionsSummary');\n accessPointCollectionsSummary.set(\n 'systemGroupIdsWithExistingPlusFutureAccess',\n isAllAccessUser ? [this.selectedSystemGroupId] : []\n );\n accessPointCollectionsSummary.set('isAllAccessUser', isAllAccessUser);\n accessPointCollectionsSummary\n .get('allAccessPointItems')\n .forEach(\n async (item) =>\n (await accessPointItemCanBeModified(\n item,\n this.deviceAccess,\n additionalAccessPointItemFilterFunction\n )) && item.set('hasAccess', hasAccess)\n );\n}\n\n/**\n * @classdesc\n *\n * Displays a list of access type options for users.\n *\n * @param {models.users.access.DeviceAccess} deviceAccess\n */\n@intlPath({ path: 'users/item/device-access/access-type' })\nexport default class AccessTypeComponent extends Component {\n // region Services\n\n @service intl;\n @service contextManager;\n\n // endregion\n\n /**\n * The device access model passed-into this component.\n */\n @alias('args.deviceAccess')\n deviceAccess;\n\n /**\n * The id of the selected system group.\n */\n @reads('contextManager.identityModel.selectedSystemGroup.id')\n selectedSystemGroupId;\n\n /**\n * The initial access type button to select.\n *\n * @type {String}\n */\n @computed(\n 'contextManager.identityModel.{selectedSystemGroup,isPointCentral}',\n 'deviceAccess.accessPointCollectionsSummary.{hasAllDeviceAccess,isAllAccessUser,isFulfilled,systemGroupIdsWithExistingPlusFutureAccess,allAccessPointItems.[]}',\n 'deviceAccess.accessTypeId'\n )\n get initialSelectedAccessTypeId() {\n const { deviceAccess, selectedSystemGroupId } = this,\n accessPointCollectionsSummary = deviceAccess.get('accessPointCollectionsSummary') || {},\n { isAllAccessUser, systemGroupIdsWithExistingPlusFutureAccess, hasAllDeviceAccess } =\n accessPointCollectionsSummary.getProperties(\n 'isAllAccessUser',\n 'systemGroupIdsWithExistingPlusFutureAccess',\n 'hasAllDeviceAccess'\n ),\n { identityModel } = this.contextManager,\n { isPointCentral, isEnterprise } = identityModel,\n selectedSystemGroup = isEnterprise ? identityModel.selectedSystemGroup : null;\n\n if (isAllAccessUser || deviceAccess.isAllAccessUser || deviceAccess.hasExistingPlusFutureAccess) {\n return ACCESS_TYPE.ALL_EXISTING_FUTURE_ID;\n } else if (\n (hasAllDeviceAccess ||\n shouldOverrideAndSelectAllExistingAccessPointCentral.call(\n this,\n isPointCentral,\n selectedSystemGroup,\n accessPointCollectionsSummary\n )) &&\n systemGroupIdsWithExistingPlusFutureAccess?.length === 0\n ) {\n return ACCESS_TYPE.ALL_EXISTING_ID;\n } else if (\n // If the selected group isn't Existing + Future, but there's a subgroup on which this user is Existing + Future, select\n // By Group so that the end-user can view the differences in access on the subgroups.\n !systemGroupIdsWithExistingPlusFutureAccess?.includes(selectedSystemGroupId) &&\n systemGroupIdsWithExistingPlusFutureAccess?.length > 0\n ) {\n return ACCESS_TYPE.BY_GROUP_ID;\n }\n\n return deviceAccess.accessTypeId;\n }\n\n /**\n * The access type button currently selected.\n * @note We put the selected access type Id on the device model object so that it persists on component rerender.\n * The value is cleared in the rollbackModelOnTransition() method.\n *\n * @type {String}\n */\n @alias('deviceAccess.selectedAccessTypeId')\n selectedAccessTypeId;\n\n /**\n * A property that tells us whether we can successfully assign access to all devices in\n * this group.\n *\n * For example, it's possible the device is no longer accepting user code changes, and this\n * property should be set to false.\n *\n * @type {boolean}\n */\n @reads('deviceAccess.accessPointCollectionsSummary.canAssignAccessToAllAccessPoints')\n canAssignAccessToAllAccessPoints;\n\n /**\n * A property that tells us whether we can successfully remove access from all devices that this\n * user already has access to. If we can't, we'll show a warning.\n */\n @reads('deviceAccess.accessPointCollectionsSummary.canRemoveAccessFromAllAccessPoints')\n canRemoveAccessFromAllAccessPoints;\n\n /**\n * Determines if the access type bulk actions panel should be displayed in order to customize at\n * the individual location or device level.\n */\n @or('isAccessTypeSetByLocation', 'isAccessTypeSetByGroup')\n shouldShowAccessTypeBulkActions;\n\n /**\n * Used to display the access type bulk actions panel at the location level. This happens if the user\n * being modified is not at the parent group level.\n */\n @equal('selectedAccessTypeId', ACCESS_TYPE.BY_LOCATION_ID)\n isAccessTypeSetByLocation;\n\n /**\n * Used to display the access type bulk actions panel at the group level. This happens if the user\n * being modified is at the parent group level.\n */\n @equal('selectedAccessTypeId', ACCESS_TYPE.BY_GROUP_ID)\n isAccessTypeSetByGroup;\n\n /**\n * Are we viewing a parent group and do we have MLEG user access?\n */\n @and('contextManager.identityModel.hasMLEGUserAccess', 'contextManager.identityModel.viewingParentGroup')\n isParentGroupAndMleg;\n\n // region Computed Properties\n\n /**\n * The options (i.e. {@link BinaryInputItemType} objects) to display for how access should be granted\n *\n * @type {Array}\n */\n @computed(\n 'deviceAccess.showScheduledUserCodesWarning',\n 'selectedAccessTypeId',\n 'isParentGroupAndMleg',\n 'canAssignAccessToAllAccessPoints',\n 'canRemoveAccessFromAllAccessPoints'\n )\n get accessTypeOptions() {\n const { isParentGroupAndMleg } = this;\n\n return [\n ACCESS_TYPE.ALL_EXISTING_FUTURE_ID,\n ACCESS_TYPE.ALL_EXISTING_ID,\n ACCESS_TYPE.BY_LOCATION_ID,\n ACCESS_TYPE.BY_GROUP_ID,\n ACCESS_TYPE.NO_ACCESS_ID\n ]\n .filter(\n (key) =>\n !(\n (key === ACCESS_TYPE.BY_LOCATION_ID && isParentGroupAndMleg) ||\n (key == ACCESS_TYPE.BY_GROUP_ID && !isParentGroupAndMleg)\n )\n )\n .map((key) => {\n const assigningAccessToAllDevices =\n key === ACCESS_TYPE.ALL_EXISTING_FUTURE_ID || key === ACCESS_TYPE.ALL_EXISTING_ID,\n disabled = this.deviceAccess.showScheduledUserCodesWarning && assigningAccessToAllDevices;\n return new BinaryListItem({\n label: this.intl.t(`components.users.item.device-access.${ACCESS_TYPE_TEXT_MAP[key]}`),\n state: this.selectedAccessTypeId === key,\n disabled,\n props: {\n id: key,\n displayWarning:\n (assigningAccessToAllDevices && !this.canAssignAccessToAllAccessPoints) ||\n (key === ACCESS_TYPE.NO_ACCESS_ID && !this.canRemoveAccessFromAllAccessPoints)\n }\n });\n })\n .compact();\n }\n\n /**\n * Are there any access control subgroups under the selected group?\n * @type {boolean}\n */\n @computed('contextManager.identityModel.selectedSystemGroup.childGroups.@each.isAccessControl')\n get hasAnyAccessControlSubgroups() {\n return (async () => {\n const subgroups = await this.contextManager.identityModel.selectedSystemGroup.get('childGroups');\n return subgroups.length > 0 && subgroups.isAny('isAccessControl');\n })();\n }\n\n /**\n * The info the information displayed when the selected button is changed.\n *\n * @type Object{title: {String}, description: {String}}\n */\n @computed('selectedAccessTypeId', 'hasAnyAccessControlSubgroups')\n get selectedInfo() {\n return (async () => {\n const title = ACCESS_TYPE_TEXT_MAP[this.selectedAccessTypeId],\n { contextManager, intl } = this,\n {\n identityModel: { selectedSystemGroup }\n } = contextManager,\n hasAnyAccessControlSubgroups = await this.hasAnyAccessControlSubgroups;\n\n let description = intl.tc(this, `${title}Description`);\n\n // For the E+F we are adding some additional text to the description for 'all existing'\n // and 'existing + future'.\n if ([ACCESS_TYPE.ALL_EXISTING_ID, ACCESS_TYPE.ALL_EXISTING_FUTURE_ID].includes(this.selectedAccessTypeId)) {\n description = intl.tc(this, `${title}Description${'EF'}${hasAnyAccessControlSubgroups ? 'AC' : ''}`, {\n groupName: (await selectedSystemGroup).description\n });\n }\n\n return {\n title: this.intl.t(`components.users.item.device-access.${title}`),\n description: htmlSafe(description)\n };\n })();\n }\n\n // region Actions\n /**\n * Callback for when a access type option has changed.\n *\n * @param {Array} items\n */\n @action async typeSelectionChanged(items) {\n const previousSelectedAccessType = this.selectedAccessTypeId,\n args = [],\n accessPointCollectionsSummary = await this.deviceAccess.get('accessPointCollectionsSummary'),\n {\n identityModel: { selectedSystemGroup }\n } = this.contextManager;\n\n let loadedSystemGroup = undefined;\n if (selectedSystemGroup) {\n loadedSystemGroup = await selectedSystemGroup;\n }\n\n // Currently, at the subgroup level, it's possible for PointCentral end-users to modify access\n // to more than just the subgroup. With the E+F we want only the access points in\n // the selected system group to be affected when we select ALL_EXISTING or ALL_EXISTING_FUTURE.\n let additionalAccessPointItemFilterFunction = null;\n if (loadedSystemGroup && !loadedSystemGroup.isParentGroup) {\n additionalAccessPointItemFilterFunction = (accessPointItem) => {\n return get(accessPointItem.systemGroup, 'id') === loadedSystemGroup.id;\n };\n }\n\n set(this, 'selectedAccessTypeId', items.findBy('state').props.id);\n\n if (this.selectedAccessTypeId === ACCESS_TYPE.ALL_EXISTING_ID) {\n // Give access to all existing devices for this user.\n args.push(true, false, additionalAccessPointItemFilterFunction);\n }\n\n if (this.selectedAccessTypeId === ACCESS_TYPE.ALL_EXISTING_FUTURE_ID) {\n // Change userType to All Access and give access to all existing devices.\n args.push(true, true, additionalAccessPointItemFilterFunction);\n }\n\n if (this.selectedAccessTypeId === ACCESS_TYPE.NO_ACCESS_ID) {\n // Remove any access plans that we have selected for the user on this page.\n this.deviceAccess.accessControlUser?.set('accessPlans', []);\n\n // Remove all Existing + Future access from previously selected groups.\n accessPointCollectionsSummary.set('systemGroupIdsWithExistingPlusFutureAccess', []);\n\n // Remove access from all devices.\n args.push(false);\n }\n\n if (args.length) {\n updateModels.call(this, ...args);\n return;\n }\n\n // If By Locations / By Groups is selected, rollback content in case any changes were made and set isAllAccessUser to false.\n accessPointCollectionsSummary.rollback();\n\n // If we had 'Existing + Future' access on the higher level group, and then selected 'By Locations' / 'By Group',\n // give the user 'Existing + Future' access on the lower level groups, except for AC groups..\n if (\n previousSelectedAccessType === ACCESS_TYPE.ALL_EXISTING_FUTURE_ID &&\n this.selectedAccessTypeId !== ACCESS_TYPE.NO_ACCESS_ID\n ) {\n // Make sure that we note that we have access to all access points on these groups.\n updateModels.call(this, true, true, additionalAccessPointItemFilterFunction);\n\n const childGroupIds =\n this.contextManager.identityModel\n .get('selectedSystemGroup.childGroups')\n ?.map((cg) => (cg.isAccessControl ? undefined : Number(cg.id)))\n ?.toArray()\n .compact() ?? [];\n accessPointCollectionsSummary.set('systemGroupIdsWithExistingPlusFutureAccess', childGroupIds);\n }\n\n accessPointCollectionsSummary.set('isAllAccessUser', false);\n }\n\n /**\n * Upon rendering the component, do some set-up.\n */\n @action\n async componentRendered() {\n const { deviceAccess, initialSelectedAccessTypeId } = this,\n accessPointCollectionsSummary = await deviceAccess.accessPointCollectionsSummary,\n { systemGroupIdsWithExistingPlusFutureAccess } = accessPointCollectionsSummary;\n\n // Upon rendering the component, set the originalSystemGroupIdsWithExistingPlusFutureAccess property on the APCS.\n accessPointCollectionsSummary.set(\n 'originalSystemGroupIdsWithExistingPlusFutureAccess',\n systemGroupIdsWithExistingPlusFutureAccess?.slice() || []\n );\n\n if (!this.selectedAccessTypeId) {\n set(this, 'selectedAccessTypeId', initialSelectedAccessTypeId);\n }\n\n if (\n (initialSelectedAccessTypeId === ACCESS_TYPE.BY_LOCATION_ID ||\n initialSelectedAccessTypeId === ACCESS_TYPE.BY_GROUP_ID) &&\n !deviceAccess.get('accessPointCollectionsSummary.cachedAccessPointCollectionsSummaryInfo') &&\n !this.contextManager.identityModel.isPointCentral\n ) {\n // If the current access type is By Location or By Group, we want to save the configuration of the access point items\n // across the system group in case they accidentally make a change.\n this.cacheDeviceAccessState();\n }\n\n // If we are at the parent group level, the selected access type id should be 'by group', instead of 'by location'.\n // We can get in the scenario where if an end-user refreshes the page, the type swiches to 'by location', so reset to 'by group' here if needed.\n if (this.isParentGroupAndMleg && this.selectedAccessTypeId == ACCESS_TYPE.BY_LOCATION_ID) {\n set(this, 'selectedAccessTypeId', ACCESS_TYPE.BY_GROUP_ID);\n }\n }\n\n // endregion\n\n /**\n * Saves the current device access state for a potential undo down the line.\n *\n * @function\n */\n cacheDeviceAccessState() {\n let systemMap = {},\n { deviceAccess } = this,\n accessPointCollectionsSummary = deviceAccess.get('accessPointCollectionsSummary');\n\n accessPointCollectionsSummary.get('systemsAccessPointItems').forEach((item) => {\n const systemId = item.system.get('id');\n let accessItemMap = {};\n item.accessItems.forEach(\n (accessItem) => (accessItemMap[accessItem.deviceId] = { hasAccess: accessItem.hasAccess })\n );\n systemMap[systemId] = { accessItemMap };\n });\n\n accessPointCollectionsSummary.set('cachedAccessPointCollectionsSummaryInfo', {\n isAllAccessUser: accessPointCollectionsSummary.get('isAllAccessUser'),\n systemsAccessPointsMap: systemMap\n });\n }\n\n /** @override */\n willDestroy() {\n const { deviceAccess } = this,\n accessPointCollectionsSummary = deviceAccess.get('accessPointCollectionsSummary');\n\n if (deviceAccess) {\n // Clear selected access type id\n deviceAccess.set('selectedAccessTypeId', undefined);\n }\n\n if (deviceAccess.accessTypeId === ACCESS_TYPE.BY_LOCATION_ID) {\n // If the access type is by location we don't need the cache.\n accessPointCollectionsSummary.set('cachedAccessPointCollectionsSummaryInfo', undefined);\n }\n\n super.willDestroy();\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if this.isVisible}}\\n
\\n \\n
\\n \\n\\n
\\n \\n \\n
\\n\\n
\\n
\\n {{#if (await this.displayAccessPointWarning)}}\\n \\n {{/if}}\\n \\n
\\n
\\n
\\n\\n {{#if this.isOpen}}\\n {{#if @systemGroup.isAccessControl}}\\n \\n {{else}}\\n {{!-- @glint-expect-error: Please convert this component to TS. --}}\\n \\n {{/if}}\\n {{/if}}\\n \\n
\\n{{/if}}\",{ moduleName: \"customer-site/components/users/item/device-access/child-group-bulk-action-row/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed, get, getProperties, setProperties, set } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport { getAccessPlans } from 'customer-site/classes/access-control/access-plans/filter-results-controller';\nimport { getUsersQuery } from 'customer-site/classes/access-control/users/base-index-controller';\nimport { DefaultOperatingMode } from 'customer-site/enums/MercuryControllerOperatingMode';\nimport { ACCESS_TYPE } from 'customer-site/models/users/access/device-access';\nimport { intlPath } from '@adc/i18n/path';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport { systemGroupPassesSearchString, toggleAccess } from '../access-type-parent-group-bulk-actions/index';\nimport { ACCESS_TYPE_TEXT_MAP } from '../access-type/index';\nimport { accessPointItemCanBeModified } from '../item-groups/index';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type AccessPlan from 'customer-site/models/access-control/access-control-access-plan';\nimport type AccessControlUser from 'customer-site/models/access-control/access-control-user';\nimport type SystemGroup from 'customer-site/models/systems/system-group';\nimport type AccessPointCollectionsSummary from 'customer-site/models/users/access/access-point-collections-summary';\nimport type AccessPointItem from 'customer-site/models/users/access/access-point-item';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n/**\n * Small extension for the device access model, so that it can store two properties\n * for an Access Control API call.\n */\nexport interface DeviceAccessControlModel extends DeviceAccessModel {\n accessControlUser: AccessControlUser;\n accessControlGroupId: number;\n}\n\ninterface ChildGroupBulkActionRowArgs {\n systemGroup: SystemGroup;\n deviceAccess: DeviceAccessControlModel;\n searchString: string;\n}\n\n/**\n * Task to load all the necessary Access Plan information from the backend.\n * Task is performed at initialization and loads the access control version of the user,\n * the user's access plans, and all the system's access points and timetables.\n *\n * After this is finished, there will be accessPlans and accessControlUser properties\n * set on `this`.\n */\nexport async function loadAccessInformation(\n this: any,\n userId: number,\n systemGroupId: number,\n store: Store,\n includeParentScope: boolean,\n includeChildScopes: boolean\n) {\n // If we have already loaded access information, no need to do it again.\n if (this.accessPlans && this.accessControlUser) {\n return;\n }\n\n const users = await getUsersQuery(store, 0, '', 1, includeChildScopes, [String(userId)]);\n\n await store.query('access-control/access-control-access-point', {\n includeParentScope: includeParentScope\n });\n\n await store.query('access-control/access-control-timetable', {\n includeParentScope: includeParentScope,\n includeChildScopes: includeChildScopes\n });\n\n // Get all the access plans defined on the selected group.\n const accessPlans = (\n await getAccessPlans(store, '', userId, includeParentScope, DefaultOperatingMode, [], includeChildScopes)\n ).filter((ap) => ap.holderId == systemGroupId),\n accessControlUser = users.objectAt(0)!,\n accessControlUserOriginalAccessPlans = await accessControlUser.accessPlans;\n\n // Set a temporary property of the accessControlUser, originalAccessPlans, to track any potential changes.\n set(accessControlUser, 'originalAccessPlans', accessControlUserOriginalAccessPlans.slice());\n\n // Set all of the access plans available for this group on the component, and the returned user.\n setProperties(this, {\n accessPlans,\n accessControlUser\n });\n\n // Set these extra properties on the DA model, so we know any changes we made on this user's access plans.\n setProperties(this.args.deviceAccess, {\n accessControlUser: accessControlUser,\n accessControlGroupId: systemGroupId\n });\n}\n\n/**\n * Displays a child group access type bulk actions row. With this component you can assign access\n * to the passed-in system group units via device access or access plans.\n */\n@intlPath({ path: 'users/item/device-access/child-group-bulk-action-row' })\nexport default class ChildGroupBulkActionRow extends Component {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare store: Store;\n\n /** @override */\n constructor(owner: unknown, args: ChildGroupBulkActionRowArgs) {\n super(owner, args);\n\n // If we are viewing an Access Control group, load access control user information.\n if (this.args.systemGroup.isAccessControl) {\n this.loadAccessInformation.perform();\n }\n\n // If we are not PointCentral, the CML PMs asked for 'By Location' access rows to not be collapsed by default.\n if (!this.contextManager.identityModel.isPointCentral && this.byLocationAccess) {\n this.isOpen = true;\n }\n }\n\n // #region Access Control Properties and Task\n\n /**\n * If this is an access control group, this is the access control user model that tells us about the\n * access plans this user has on this group.\n */\n @tracked\n declare accessControlUser: AccessControlUser;\n\n /**\n * If this is an access control group, these are the access plans that this user has on this group.\n */\n @tracked\n declare accessPlans: AccessPlan[];\n\n /**\n * We want to include information about the access plans this user has on child groups.\n */\n includeChildScopes = true;\n\n /**\n * We don't want to include information about the access plans the user has on higher level groups.\n */\n includeParentScope = false;\n\n /**\n * Fetch access control information.\n */\n loadAccessInformation = task({ drop: true }, async () => {\n const { deviceAccess, systemGroup } = this.args;\n await loadAccessInformation.call(\n this,\n Number(deviceAccess.id),\n Number(systemGroup.id),\n this.store,\n this.includeParentScope,\n this.includeChildScopes\n );\n });\n\n // #endregion\n\n /**\n * The access point collections summary model associated with the passed-in device access model.\n */\n @alias('args.deviceAccess.accessPointCollectionsSummary')\n declare accessPointCollectionsSummary: AccessPointCollectionsSummary;\n\n /**\n * Should we view the detailed view of access on the locations or access plans underneath of this group?\n */\n @tracked\n isOpen = false;\n\n /**\n * The access plans that we have selected to grant the user on this group.\n */\n @computed('accessControlUser.accessPlans.[]', 'args.systemGroup.id')\n get selectedAccessPlans(): AccessPlan[] {\n return (\n this.accessControlUser?.accessPlans?.filter(\n (ap: AccessPlan) => ap.holderId === Number(this.args.systemGroup.id)\n ) ?? []\n );\n }\n\n /**\n * The AccessTypeBulkActions component requires a list of system groups. However, since this is viewing\n * the detailed access the user has on this system group and lower level units, we will just pass-in\n * this group.\n */\n systemGroups = [this.args.systemGroup];\n\n /**\n * Given a search string, does this group's description or the description of any lower locations\n * match the search string? If not, don't display this component.\n */\n @computed('args.searchString')\n get isVisible(): boolean {\n const { systemGroup, searchString } = this.args;\n return systemGroupPassesSearchString(systemGroup, searchString);\n }\n\n /**\n * The access point items associated with the devices under this group.\n */\n @computed('accessPointCollectionsSummary.systemAccessPointItems', 'args.systemGroup.id')\n get accessPointItems(): AccessPointItem[] {\n return (get(this.accessPointCollectionsSummary, 'systemsAccessPointItems') ?? [])\n .filterBy('systemGroupId', this.args.systemGroup.id)\n .mapBy('accessItems')\n .flat();\n }\n\n /**\n * The number of devices the user has on this system group.\n */\n @computed('accessPointItems.@each.hasAccess')\n get numberOfDevicesWithAccess(): number {\n return this.accessPointItems.filterBy('hasAccess').length;\n }\n\n /**\n * Does the user have existing + future access on this group?\n */\n @computed('accessPointCollectionsSummary.systemGroupIdsWithExistingPlusFutureAccess.[]', 'args.systemGroup.id')\n get hasExistingPlusFutureAccess(): boolean {\n return (\n this.accessPointCollectionsSummary\n ?.get('systemGroupIdsWithExistingPlusFutureAccess')\n ?.includes(Number(this.args.systemGroup.id)) || false\n );\n }\n\n /**\n * Does the user have access to all devices underneath this group?\n *\n * Only relevant for non-Access Control groups.\n */\n @computed(\n 'accessPointItems.length',\n 'args.systemGroup.isAccessControl',\n 'hasExistingPlusFutureAccess',\n 'isOpen',\n 'numberOfDevicesWithAccess'\n )\n get hasAllAccess(): boolean {\n return (\n !this.hasExistingPlusFutureAccess &&\n this.numberOfDevicesWithAccess !== 0 &&\n this.numberOfDevicesWithAccess === this.accessPointItems.length &&\n !this.args.systemGroup.isAccessControl\n );\n }\n\n /**\n * Does the user have no access to any of the devices (or access plans) underneath this group?\n */\n @computed(\n 'args.systemGroup.isAccessControl',\n 'hasExistingPlusFutureAccess',\n 'isOpen',\n 'numberOfDevicesWithAccess',\n 'selectedAccessPlans.length'\n )\n get hasNoAccess(): boolean {\n if (this.args.systemGroup.isAccessControl) {\n return (this.selectedAccessPlans?.length || 0) === 0;\n }\n\n return !this.hasExistingPlusFutureAccess && this.numberOfDevicesWithAccess === 0;\n }\n\n /**\n * Does this user have access to some of the devices (or access plans) underneath this group?\n */\n @computed('hasNoAccess', 'hasAllAccess', 'hasExistingPlusFutureAccess', 'selectedAccessPlans.length')\n get byLocationAccess(): boolean {\n return !this.hasNoAccess && !this.hasAllAccess && !this.hasExistingPlusFutureAccess;\n }\n\n /**\n * Are we able to assign access to all of the devices the user currently does not have access to\n * underneath this group?\n */\n @computed('accessPointItems.[]', 'args.deviceAccess')\n get canAllAccessBeGranted(): Promise {\n return Promise.all(\n this.accessPointItems\n .filterBy('hasAccess', false)\n .map((item) => accessPointItemCanBeModified(item, this.args.deviceAccess))\n ).then((results) => results.every((canBeChanged) => canBeChanged));\n }\n\n /**\n * Are we able to remove access from all of the devices the user currently has access to\n * underneath this group?\n */\n @computed('accessPointItems.[]', 'args.deviceAccess')\n get canAllAccessBeRevoked(): Promise {\n return Promise.all(\n this.accessPointItems\n .filterBy('hasAccess')\n .map((item) => accessPointItemCanBeModified(item, this.args.deviceAccess))\n ).then((results) => results.every((canBeChanged) => canBeChanged));\n }\n\n /**\n * The radio button associated with assigning Existing + Future access to the user on this group.\n */\n @computed('args.systemGroup.isAccessControl', 'hasExistingPlusFutureAccess', 'isOpen')\n get existingPlusFutureBinaryListItem() {\n const { intl } = this;\n return new BinaryListItem({\n label: intl.t(\n `components.users.item.device-access.${ACCESS_TYPE_TEXT_MAP[ACCESS_TYPE.ALL_EXISTING_FUTURE_ID]}`\n ),\n state: this.hasExistingPlusFutureAccess,\n props: { accessTypeId: ACCESS_TYPE.ALL_EXISTING_FUTURE_ID },\n disabled: this.args.systemGroup.isAccessControl\n });\n }\n\n /**\n * The radio button associated with assigning access to all of the devices underneath this group\n * (not including access control groups).\n */\n @computed('args', 'hasAllAccess')\n get accessToAllDevicesInGroupBinaryListItem() {\n const { systemGroup } = this.args;\n return new BinaryListItem({\n label: this.intl.t('access-control.access-plans.allAccess'),\n state: this.hasAllAccess,\n props: { accessTypeId: ACCESS_TYPE.ALL_EXISTING_ID },\n disabled: systemGroup.isAccessControl\n });\n }\n\n /**\n * The radio button associated with revoking access to all of the devices (and access plans)\n * underneath this group.\n */\n @computed('args.systemGroup.id', 'hasNoAccess')\n get accessToNoDevicesInGroupBinaryListItem() {\n return new BinaryListItem({\n label: this.intl.t('generic.noAccess'),\n state: this.hasNoAccess,\n props: { accessTypeId: ACCESS_TYPE.NO_ACCESS_ID }\n });\n }\n\n /**\n * The radio button associated with the user having some access (or assigned to any access plan)\n * underneath this group.\n */\n @computed('args.systemGroup.id', 'byLocationAccess', 'hasNoAccess')\n get byLocationAccessInGroupBinaryListItem() {\n const {\n args: { systemGroup },\n intl\n } = this;\n return new BinaryListItem({\n label: systemGroup.isAccessControl ? intl.tc(this, 'byAccessPlan') : intl.tc(this, 'byLocation'),\n state: this.byLocationAccess,\n props: { accessTypeId: ACCESS_TYPE.BY_LOCATION_ID }\n });\n }\n\n /**\n * Should we display a warning symbol on this group to let the end-user know that we will\n * not be able to grant or revoke access from at least one access point in this group?\n */\n @computed('args.systemGroup.isAccessControl', 'canAllAccessBeGranted', 'canAllAccessBeRevoked')\n get displayAccessPointWarning(): Promise {\n return (async () => {\n if (this.args.systemGroup.isAccessControl) {\n return false;\n }\n\n const canGrantAccessWithoutWarning = await this.canAllAccessBeGranted,\n canRevokeAccessWithoutWarning = await this.canAllAccessBeRevoked;\n\n return !(canGrantAccessWithoutWarning && canRevokeAccessWithoutWarning);\n })();\n }\n\n /**\n * The radio button items to determine access for this user.\n */\n @computed(\n 'existingPlusFutureBinaryListItem',\n 'accessToAllDevicesInGroupBinaryListItem',\n 'accessToNoDevicesInGroupBinaryListItem',\n 'byLocationAccessInGroupBinaryListItem'\n )\n get binaryItemsList(): BinaryListItem[] {\n return [\n this.existingPlusFutureBinaryListItem,\n this.accessToAllDevicesInGroupBinaryListItem,\n this.accessToNoDevicesInGroupBinaryListItem,\n this.byLocationAccessInGroupBinaryListItem\n ].compact();\n }\n\n /**\n * The action called when you select 'All Access', 'No Access', 'By Location', or 'Existing + Future' for a group.\n */\n @action\n async toggleAccessToLocationsInGroup(\n radioButtonItems: (BinaryListItem & { props: { groupId: string; accessTypeId: string } })[]\n ): Promise {\n const currentSelectedRadioItemIndex = radioButtonItems.findIndex((item) => item.state === true);\n\n if (currentSelectedRadioItemIndex == -1) {\n return;\n }\n\n const {\n accessPointItems,\n args: { systemGroup, deviceAccess }\n } = this,\n groupId = systemGroup.id,\n { accessTypeId } = radioButtonItems[currentSelectedRadioItemIndex].props,\n { systemGroupIdsWithExistingPlusFutureAccess } = getProperties(\n this.accessPointCollectionsSummary,\n 'systemsAccessPointItems',\n 'systemGroupIdsWithExistingPlusFutureAccess'\n ),\n accessPlansOnAccessControlUser = (await get(\n this.args.deviceAccess,\n 'accessControlUser.accessPlans'\n )) as AccessPlan[];\n\n switch (accessTypeId) {\n // 'All Access' radio button has been selected\n case ACCESS_TYPE.ALL_EXISTING_ID:\n systemGroupIdsWithExistingPlusFutureAccess?.removeObject(Number(groupId));\n toggleAccess(deviceAccess, accessPointItems, groupId, true);\n\n // Hide the detailed access to access points that the user has under this group\n this.isOpen = false;\n break;\n // 'No Access' radio button has been selected\n case ACCESS_TYPE.NO_ACCESS_ID:\n systemGroupIdsWithExistingPlusFutureAccess?.removeObject(Number(groupId));\n\n // Remove any access plan selections.\n this.selectedAccessPlans.forEach((ap) => accessPlansOnAccessControlUser.removeObject(ap));\n toggleAccess(deviceAccess, accessPointItems, groupId, false);\n\n // Hide the detailed access to access points that the user has under this group\n this.isOpen = false;\n break;\n // 'By Location' radio button has been selected\n case ACCESS_TYPE.BY_LOCATION_ID:\n // Display the detailed access to access points that the user has under this group.\n this.isOpen = true;\n break;\n // 'Existing + Future' radio button has been selected\n case ACCESS_TYPE.ALL_EXISTING_FUTURE_ID:\n systemGroupIdsWithExistingPlusFutureAccess?.addObject(Number(groupId));\n toggleAccess(deviceAccess, accessPointItems, groupId, true);\n break;\n default:\n break;\n }\n\n // Ensure the binary list item the user selected is visually selected by updating the list item's state\n this.binaryItemsList.forEach((item, idx) => {\n if (idx === currentSelectedRadioItemIndex) {\n item.state = true;\n } else {\n item.state = false;\n }\n });\n }\n\n /**\n * Set the access user property on the device access model to signal that we will need to save the access user when we\n * save device access.\n */\n @action async selectAccessPlans(\n accessUser: AccessControlUser,\n accessPlans: AccessPlan[],\n systemGroupId: number\n ): Promise {\n const deviceAccessModel = this.args.deviceAccess;\n\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error This should be replaced with `accessUser.accessPlans.setObjects(accessPlans);`.\n set(accessUser, 'accessPlans', accessPlans);\n deviceAccessModel.setProperties({\n accessControlUser: accessUser,\n accessControlGroupId: systemGroupId\n });\n }\n\n /**\n * Open or close the detailed view of this\n */\n @action\n toggleIsOpen() {\n this.isOpen = !this.isOpen;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::DeviceAccess::ChildGroupBulkActionRow': typeof ChildGroupBulkActionRow;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#unless @hideHeader}}\\n \\n {{/unless}}\\n\\n \\n\\n {{#unless this.hideAccessPeriodDrillThrough}}\\n \\n {{/unless}}\\n\\n {{#unless @isPointCentralAccessControl}}\\n \\n <:content>\\n \\n\\n
\\n
{{t \\'components.users.item.device-access.accessType\\'}}
\\n
\\n {{#unless (media \\'isMobile\\')}}\\n
\\n \\n
\\n {{/unless}}\\n\\n {{#unless (is-fulfilled this.accessPointCollectionsSummary)}}\\n \\n {{/unless}}\\n\\n

{{this.accessTypeDescription}}

\\n \\n \\n\\n {{#if this.accessPointCollectionsSummary.cachedAccessPointCollectionsSummaryInfo}}\\n \\n {{/if}}\\n {{/unless}}\\n
\\n\",{ moduleName: \"customer-site/components/users/item/device-access/enterprise-access-information/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed, action } from '@ember/object';\nimport { or } from '@ember/object/computed';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { shouldOverrideAndSelectAllExistingAccessPointCentral } from 'customer-site/classes/helpers/pointcentral';\nimport { ACCESS_TYPE_TEXT_MAP } from 'customer-site/components/users/item/device-access/access-type/index';\nimport {\n EmberEnterpriseEditUserAccessPeriod,\n EmberEnterpriseEditUserDeviceAccessAccessType,\n EmberEnterpriseEditUserDeviceAccessUserCode\n} from 'customer-site/enums/CustomerPageUrl';\nimport { ACCESS_TYPE } from 'customer-site/models/users/access/device-access';\nimport { intlPath } from '@adc/i18n/path';\nimport { resolve } from 'rsvp';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n *\n * List of drill through items to navigate device access pages.\n *\n * @class components.users.item.device-access.AccessInformation\n *\n * @param {models.users.access.DeviceAccess} deviceAccess\n * @param {models.users.PermissionsCollection} permissions\n * @param {boolean} userTypeSupportsDeviceAccess\n * @param {boolean} isPointCentralAccessControl\n * @param {boolean} hideHeader\n */\n@intlPath({ path: 'users/item/device-access/enterprise-access-information' })\nexport default class EnterpriseAccessInformation extends Component {\n @service intl;\n @service contextManager;\n @service notificationManager;\n\n /**\n * Device access model\n *\n * @type {models.users.access.DeviceAccess}\n */\n @alias('args.deviceAccess')\n deviceAccess;\n\n /**\n * Access point collections summary model.\n *\n * @type {models.users.access.AccessPointCollectionsSummary}\n */\n @alias('deviceAccess.accessPointCollectionsSummary')\n accessPointCollectionsSummary;\n\n /**\n * Checks if the selected system group isCommercialBusiness and returns the appropriate icon\n *\n * @type {models.systems.SystemGroup.icon}\n */\n @alias('contextManager.identityModel.selectedSystemGroup.icon')\n icon;\n\n /**\n * Should we hide the access period drill-through?\n *\n * @type {boolean}\n */\n @or('deviceAccess.accessPointCollectionsSummary.cannotUseSchedules', 'args.isPointCentralAccessControl')\n hideAccessPeriodDrillThrough;\n\n /**\n * The access code for this user.\n *\n * @type {String}\n */\n @computed('deviceAccess.userCode', 'args.permissions.canViewUserCodes')\n get accessCodeDescription() {\n const {\n deviceAccess,\n args: { permissions },\n intl\n } = this,\n { userCode } = deviceAccess;\n\n if (!permissions.canViewUserCodes) {\n return '****';\n }\n\n if (!userCode) {\n return intl.tc(this, 'noAccessCode');\n }\n\n return userCode;\n }\n\n /**\n * Short description of the currently saved access period.\n *\n * @type {String}\n */\n @computed('deviceAccess.{isWeeklyScheduleSelected,isTemporaryScheduleSelected}')\n get accessPeriodDescription() {\n const { deviceAccess } = this,\n { isWeeklyScheduleSelected, isTemporaryScheduleSelected, temporarySchedule, weeklySchedule } = deviceAccess;\n\n if (isWeeklyScheduleSelected) {\n return `${weeklySchedule.dateText}, ${weeklySchedule.timeText}`;\n }\n\n if (isTemporaryScheduleSelected) {\n return temporarySchedule.dateText;\n }\n\n return this.intl.t('components.users.item.access-period.atAllTimes');\n }\n\n /**\n * The access type description for this user.\n *\n * @type {String}\n */\n @computed('accessPointCollectionsSummary.isFulfilled', 'accessTypeId')\n get accessTypeDescription() {\n return this.accessPointCollectionsSummary?.isFulfilled\n ? this.intl.t(`components.users.item.device-access.${ACCESS_TYPE_TEXT_MAP[this.accessTypeId]}`)\n : this.intl.tc(this, 'calculating');\n }\n\n /**\n * Gets the access type associated with this user.\n */\n @computed(\n 'accessPointCollectionsSummary.isFulfilled',\n 'contextManager.identityModel.{hasExistingPlusFutureBeta,selectedSystemGroup}',\n 'deviceAccess.accessTypeId'\n )\n get accessTypeId() {\n const { accessTypeId } = this.deviceAccess;\n if (!this.accessPointCollectionsSummary?.isFulfilled) {\n return accessTypeId;\n }\n\n const { isPointCentral, selectedSystemGroup } = this.contextManager.identityModel;\n if (\n accessTypeId !== ACCESS_TYPE.BY_LOCATION_ID ||\n !shouldOverrideAndSelectAllExistingAccessPointCentral.call(\n this,\n isPointCentral,\n selectedSystemGroup,\n this.accessPointCollectionsSummary\n )\n ) {\n return accessTypeId;\n }\n\n return ACCESS_TYPE.ALL_EXISTING_ID;\n }\n\n /**\n * Transitions to route for editing user code\n */\n @action\n editUserCode() {\n this.contextManager.transitionToNativeRoute(EmberEnterpriseEditUserDeviceAccessUserCode);\n }\n\n /**\n * Transitions to route for editing user code\n */\n @action editAccessPeriod() {\n this.contextManager.transitionToNativeRoute(EmberEnterpriseEditUserAccessPeriod);\n }\n\n /**\n * Transitions to route for editing the access type.\n */\n @action editAccessType() {\n this.contextManager.transitionToNativeRoute(EmberEnterpriseEditUserDeviceAccessAccessType);\n }\n\n /**\n * Sets all the access point collections summary properties changed in the access type route to their previous values\n * and saves them.\n */\n @action undoAccessPointCollectionsSummaryChanges() {\n return this.rollBackModelsFromCache();\n }\n\n /**\n * Undo changes that were from access type selection.\n *\n * @function\n */\n async rollBackModelsFromCache() {\n const { deviceAccess } = this,\n accessPointCollectionsSummaryLoaded = await this.accessPointCollectionsSummary;\n\n if (!accessPointCollectionsSummaryLoaded.cachedAccessPointCollectionsSummaryInfo) {\n return resolve();\n }\n\n // Make a copy of the device access cache in case save action fails.\n const accessPointCollectionsSummaryCache = JSON.parse(\n JSON.stringify(accessPointCollectionsSummaryLoaded.cachedAccessPointCollectionsSummaryInfo)\n );\n\n accessPointCollectionsSummaryLoaded.set('isAllAccessUser', accessPointCollectionsSummaryCache.isAllAccessUser);\n accessPointCollectionsSummaryLoaded.get('systemsAccessPointItems').forEach((item) => {\n const cachedSystemItem = accessPointCollectionsSummaryCache.systemsAccessPointsMap[item.system.get('id')];\n if (cachedSystemItem) {\n item.accessItems.forEach((accessItem) => {\n const cachedAccessItem = cachedSystemItem.accessItemMap[accessItem.get('deviceId')];\n cachedAccessItem && accessItem.set('hasAccess', cachedAccessItem.hasAccess);\n });\n }\n });\n\n return accessPointCollectionsSummaryLoaded\n .save()\n .then((accessPointCollectionsSummarySaved) => {\n accessPointCollectionsSummarySaved.set('cachedAccessPointCollectionsSummaryInfo', undefined);\n deviceAccess.reload();\n this.notificationManager.addSuccess(this.intl.tc(this, 'changesRolledBackText'));\n })\n .catch(() => {\n // Do nothing with error since error message should already show if it fails. We want to persist the cache so the user can try again.\n deviceAccess.rollback();\n this.accessPointCollectionsSummary.set(\n 'cachedAccessPointCollectionsSummaryInfo',\n accessPointCollectionsSummaryCache\n );\n });\n }\n\n /** override */\n willDestroy() {\n const { accessPointCollectionsSummary } = this;\n if (accessPointCollectionsSummary && accessPointCollectionsSummary.content !== null) {\n // Clear cached device access info when leaving whatever route the component is on.\n accessPointCollectionsSummary.set('cachedAccessPointCollectionsSummaryInfo', undefined);\n }\n\n super.willDestroy();\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#each @group.items as |item|}}\\n
\\n \\n \\n {{#if item.props.isOffline}}\\n
\\n

{{item.label}}

\\n
\\n \\n {{t \\'generic.offline\\'}}\\n
\\n
\\n {{else}}\\n
{{item.label}}
\\n {{/if}}\\n {{#if item.props.model.noSlotsLeftForUserType}}\\n \\n

{{t \\'components.users.item.device-access.item-group.systemFull\\'}}

\\n {{/if}}\\n \\n
\\n {{/each}}\\n
\\n\",{ moduleName: \"customer-site/components/users/item/device-access/item-group/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action, set, get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type EmberObject from '@ember/object';\nimport './_style.scss';\nimport type { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport type AccessPointItem from 'customer-site/models/users/access/access-point-item';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type ContextManager from 'customer-site/services/context-manager';\n\ninterface BinaryListItemForItemGroup extends BinaryListItem {\n label: string;\n state: boolean;\n icon: string;\n disabled: boolean;\n props: {\n model: AccessPointItem;\n id: string;\n deviceId: string;\n type: string;\n iconTitle: string;\n isOffline: boolean;\n };\n}\n\ninterface DeviceItemGroup extends EmberObject {\n id: string;\n name: string;\n canHaveAccessToMultipleItems: boolean;\n items: BinaryListItemForItemGroup[];\n isOneItemGroup: boolean;\n disabledMessage: string;\n}\n\ninterface UsersItemDeviceAccessItemGroupSignature {\n Element: HTMLDivElement;\n Args: {\n group: DeviceItemGroup;\n deviceAccess: DeviceAccessModel;\n };\n}\n\n@intlPath({ path: 'users/item/device-access/item-group' })\nexport default class UsersItemDeviceAccessItemGroup extends Component {\n @service declare contextManager: ContextManager;\n\n /**\n * Modify the access that the user has on the passed-in item (device).\n *\n * In enterprise use-cases, if we are revoking access and the user has access to all\n * existing and future devices (aka. existing + future access) on the group that\n * this unit is in, we'll want to now say that the user no longer has existing + future access.\n *\n * @param item\n */\n @action\n toggleAccess(item: BinaryListItemForItemGroup) {\n const accessPointItem = item?.props?.model;\n if (item?.props?.model) {\n const updatedAccess = !accessPointItem.hasAccess;\n set(item.props.model, 'hasAccess', updatedAccess);\n\n if (this.contextManager?.identityModel?.isEnterprise) {\n // If we are revoking access and are updating access on a device in a group.\n const deviceOnSystemGroupId = accessPointItem.systemGroup?.get('id');\n if (!updatedAccess && !!deviceOnSystemGroupId) {\n // If this is the case, there's a potential that we have E+F access on the group. Remove that type of access since we no longer have\n // access to all devices.\n const systemGroupIdsWithExistingPlusFutureAccess = get(\n this.args.deviceAccess,\n 'accessPointCollectionsSummary.systemGroupIdsWithExistingPlusFutureAccess'\n );\n (systemGroupIdsWithExistingPlusFutureAccess as number[] | undefined)?.removeObject(\n Number(deviceOnSystemGroupId)\n );\n }\n }\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::DeviceAccess::ItemGroup': typeof UsersItemDeviceAccessItemGroup;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#each (await this.deviceAccessItemGroups) as |group|}}\\n {{#if this.includeDeviceHeader}}\\n \\n {{#if group.disabledMessage}}\\n \\n {{/if}}\\n \\n {{/if}}\\n\\n {{#if (or group.isOneItemGroup group.canHaveAccessToMultipleItems)}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{/each}}\\n
\\n\",{ moduleName: \"customer-site/components/users/item/device-access/item-groups/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport EmberObject, { computed, action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { scheduleOnce } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { singularize } from 'ember-inflector';\nimport { intlPath } from '@adc/i18n/path';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport { Locks } from '../../../../../enums/AccessPointCollectionType';\nimport { Duress, OneTimeUser } from '../../../../../enums/AccessPointUserType';\n\nimport './_style.scss';\n\n/**\n * The values for each type of access point.\n *\n * @ignore\n * @type {String}\n */\nconst PARTITIONS = 'partitions',\n LOCKS = 'locks',\n VOICE = 'voice',\n COMMUNITY = 'accessPlans';\n\n/**\n * Types of access point collections\n *\n * Note: These are prefixes for the properties on user\n *\n * @private\n *\n * @type {string[]}\n */\nconst ACCESS_TYPES = {\n [PARTITIONS]: {\n icon: 'panel',\n iconTitleLabel: 'securityPanel',\n groupNameLabel: 'securityPanels'\n },\n [LOCKS]: {\n icon: 'feature-locks',\n iconTitleLabel: 'lock',\n groupNameLabel: 'locks'\n },\n [VOICE]: {\n icon: 'phone',\n iconTitleLabel: 'phone',\n groupNameLabel: 'voiceNotification',\n doesNotSupportSchedules: true\n },\n [COMMUNITY]: {\n icon: 'user-control-closed',\n iconTitleLabel: 'community',\n groupNameLabel: 'community',\n hideForEnterprise: true\n }\n};\n\n/**\n * Returns an access point collection for the specific access type.\n *\n * @private\n * @instance\n *\n * @param {String} type - Which access point type to get the collection for?\n *\n * @returns {models.users.access.AccessPointCollection | undefined}\n */\nfunction getAccessPointsCollectionOfType(type) {\n return (this.deviceAccess.get(`accessPointCollectionsSummary.${type}AccessPointCollections`) ?? []).findBy(\n 'system.id',\n this.systemId\n );\n}\n\n/**\n * Helper to set hasAccess to true on an access point item.\n *\n * @param {AccessPointItem} item\n */\nfunction enableItemAccess(item) {\n item.set('hasAccess', true);\n}\n\n/**\n * Returns an array of access point item objects by extracting and formating the acess point models from the passed-in collection.\n *\n * @private\n * @instance\n *\n * @param {Object} collection - The collection of access points.\n * @param {String} accessType - The access type of the access points in the collection.\n * @param {Boolean} isDisabled\n *\n * @returns {BinaryListItem[]}\n */\nfunction getAccessPointItemsFromCollection(collection, accessType, isDisabled) {\n // Skip if there are no access points in the collection.\n if (!collection?.hasMany('accessPointItems').ids().length) {\n return [];\n }\n\n return collection.accessPointItems.map(async (item, index) => {\n const { deviceAccess } = this;\n if (deviceAccess.isCreationFlow && deviceAccess.userType === Duress) {\n item.hasAccess = true;\n }\n\n const { icon, iconTitleLabel } = ACCESS_TYPES[accessType];\n let hasAccess = item.hasAccess;\n\n // If a device id from an unassigned user code is provided, automatically set\n // the hasAccess of the corresponding AccessPointItem.\n if (this.userCodeDeviceId && item.deviceId.toString() === this.userCodeDeviceId) {\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', this, enableItemAccess, item);\n hasAccess = true;\n }\n\n return new BinaryListItem({\n label: item.deviceName,\n state: !!hasAccess,\n icon,\n disabled: isDisabled || this.readOnly || !(await accessPointItemCanBeModified(item, this.deviceAccess)),\n props: {\n model: item,\n id: `${singularize(accessType)}-${index}`,\n deviceId: item.deviceId,\n type: accessType,\n iconTitle: this.intl.t(`generic.devices.${iconTitleLabel}`),\n isOffline: item.isOffline && accessType != PARTITIONS\n }\n });\n });\n}\n\n/**\n * @classdesc\n * Component that displays all the access point and their toggles in groups for a given location\n */\n@intlPath({ path: 'users.item.device-access.item-groups' })\nexport default class DeviceAccessItemGroupsComponent extends Component {\n /** @override */\n tagName = '';\n\n // region Services\n\n @service contextManager;\n @service intl;\n @service navigation;\n\n // endregion\n\n /**\n * Do all the devices have access?\n * @note This is only used for the enterprise context when selecting a toggle for all devices.\n *\n * @type {boolean}\n */\n allItemsHaveAccess;\n\n // region Computed Properties\n\n /**\n * System id of the location for this list of devices.\n *\n * @type {Number}\n */\n @alias('system.id')\n systemId;\n\n /**\n * Is this component read only?\n *\n * @type {boolean}\n */\n readOnly = false;\n\n /**\n * By default include the device header.\n *\n * @type {boolean}\n */\n includeDeviceHeader = true;\n\n /**\n * Extracts device access items from the device-access model, and groups them by access type.\n * The groups are intended to be rendered in the device-access template.\n *\n * @type {Array}\n */\n @computed(\n 'deviceAccess.{accessPointCollectionsSummary.allAccessPointItems.[],isAllAccessUser,hasWeeklySchedule,hasTemporarySchedule,userType}',\n 'allItemsHaveAccess',\n 'contextManager.identityModel.isEnterprise'\n )\n get deviceAccessItemGroups() {\n const { deviceAccess, intl } = this;\n return (async () => {\n const items = await Promise.all(\n Object.keys(ACCESS_TYPES).map(async (type) => {\n const accessType = ACCESS_TYPES[type];\n\n if (!this.contextManager.identityModel.isEnterprise || !accessType.hideForEnterprise) {\n const collection = getAccessPointsCollectionOfType.call(this, type);\n if (collection) {\n const blockedBySchedules =\n accessType.doesNotSupportSchedules &&\n (deviceAccess.hasWeeklySchedule || deviceAccess.hasTemporarySchedule),\n accessPointItems = await Promise.all(\n getAccessPointItemsFromCollection.call(this, collection, type, blockedBySchedules)\n );\n\n if (accessPointItems.length) {\n return EmberObject.create({\n id: type,\n name: intl.t(`generic.devices.${accessType.groupNameLabel}`),\n canHaveAccessToMultipleItems: collection.get('canHaveAccessToMultipleItems'),\n items: accessPointItems,\n isOneItemGroup: accessPointItems.length === 1,\n disabledMessage: blockedBySchedules\n ? intl.tc(this, 'schedulesNotSupported')\n : undefined\n });\n }\n }\n }\n })\n );\n\n return items.compact();\n })();\n }\n\n /**\n * Triggered when a selection is changed on an access point collection type\n *\n * @param {BinaryListItem[]} items - The access point items array containing the correct \"states\" for all the device accesses of a type.\n */\n @action deviceSelectionsChanged(items) {\n const collection = getAccessPointsCollectionOfType.call(this, items.firstObject.props.type),\n accessPointModels = collection?.get('accessPointItems') ?? [];\n\n items.forEach((item) => accessPointModels.findBy('deviceId', item.props.deviceId).set('hasAccess', item.state));\n }\n}\n\n/**\n * Can the access point item be modified?\n *\n * @public\n *\n * @param {models.users.access.AccessPointItem} accessPointItem - Access point item model.\n * @param {models.users.access.DeviceAccess} deviceAccess - Device access model.\n * @param {function} customizedCanBeModifiedCheck - A customized function passed-in for any additional verification needed.\n *\n * @returns {Promise}\n */\nexport async function accessPointItemCanBeModified(accessPointItem, deviceAccess, customizedCanBeModifiedCheck = null) {\n const { hasWeeklySchedule, hasTemporarySchedule, userType } = deviceAccess.getProperties(\n 'hasWeeklySchedule',\n 'hasTemporarySchedule',\n 'userType'\n ),\n collectionType = await accessPointItem.get('accessPointCollection.collectionType');\n\n if (hasTemporarySchedule && !accessPointItem.supportsTemporarySchedule) {\n return false;\n }\n\n if (hasWeeklySchedule && !accessPointItem.supportsWeeklySchedule) {\n return false;\n }\n\n if (collectionType === Locks && userType === OneTimeUser) {\n return false;\n }\n\n // Access control groups give access from access plans, so don't allow access control group's access points to be modifiable.\n if (deviceAccess.get('contextManager.isEnterprise') && accessPointItem.systemGroup.get('isAccessControl')) {\n return false;\n }\n\n // If we passed in any additional logic, check that.\n if (customizedCanBeModifiedCheck && !customizedCanBeModifiedCheck(accessPointItem)) {\n return false;\n }\n\n /**\n * There's a small chance that we are working with stale data from the model,\n * since the item's access could have been changed by another login. The server\n * will send down a processing error if access cannot be added.\n */\n return (\n accessPointItem.canAccessBeChanged &&\n !accessPointItem.noSlotsLeftForUserType &&\n !accessPointItem.restrictForResidentVisitorContact\n );\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#each (await this.warnings) as |warning|}}\\n \\n{{/each}}\\n\",{ moduleName: \"customer-site/components/users/item/device-access/user-code-warnings/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { intlPath } from '@adc/i18n/path';\nimport { resolve } from 'rsvp';\nimport { OneTimeUser } from '../../../../../enums/AccessPointUserType';\n\n/**\n *\n *\n * @param {PromiseArray} accessPoints\n * @param {string} translationKey\n * @param {string} deviceListKey\n * @returns {Promise}\n * @constructor\n */\nasync function GetUnitAndDeviceNames(accessPoints, translationKey, deviceListKey) {\n // In some cases (single-system context or a system-specific enterprise page), we want to filter the access points by system.\n const selectedSystem = this.contextManager.isEnterprise\n ? this.system\n : await this.contextManager.identityModel.selectedSystem;\n\n let systemDescLists;\n\n if (!selectedSystem) {\n // For enterprise, list devices by the system they are in.\n systemDescLists = (\n await accessPoints.reduce(async (promiseAccumulator, device) => {\n const system = await device.system,\n accumulator = await promiseAccumulator,\n systemDeviceListObject = accumulator.findBy('system.id', system.id);\n\n if (systemDeviceListObject) {\n systemDeviceListObject.deviceNameList.push(device.deviceName);\n } else {\n accumulator.push({\n system,\n deviceNameList: [device.deviceName]\n });\n }\n\n return accumulator;\n }, resolve([]))\n ).map((descList) => `{${descList.system.description}: ${descList.deviceNameList.join(', ')}}`);\n } else {\n // For single-system, simply list the devices on the system.\n accessPoints = accessPoints.filterBy('system.id', selectedSystem.id);\n\n if (!accessPoints.length) {\n return undefined;\n }\n\n systemDescLists = accessPoints.mapBy('deviceName');\n translationKey += 'System';\n }\n\n const replacementTokens = {};\n replacementTokens[deviceListKey] = systemDescLists.join(', ');\n\n return this.intl.tc(this, translationKey, replacementTokens);\n}\n\n/**\n * @classdesc\n *\n * Component that displays warnings from user code editing.\n *\n * @param {models.users.access.DeviceAccess} deviceAccess\n * @param {models.systems.System} [system]\n */\n@intlPath({ path: 'users.item.device-access.user-code-warnings' })\nexport default class DeviceAccessUserCodeWarningsComponent extends Component {\n /** @override */\n tagName = '';\n\n // region Services\n\n @service intl;\n @service contextManager;\n\n // endregion\n\n // region Computed Properties\n /**\n * A list of warnings needed to be displayed.\n *\n * @type {Promise>}\n */\n @computed(\n 'oneTimeUserWarning',\n 'scheduledUserCodesWarning',\n 'truncatedDevicePinsWarning',\n 'unchangeablePartitionAccessPoints'\n )\n get warnings() {\n return (async () => {\n const warnings = [\n 'oneTimeUserWarning',\n 'truncatedDevicePinsWarning',\n 'scheduledUserCodesWarning',\n 'unchangeablePartitionAccessPoints'\n // Do not copy this deprecated usage. If you see this, please fix it\n // eslint-disable-next-line ember/classic-decorator-no-classic-methods\n ].map(async (warningProperty) => await this.get(warningProperty));\n\n return (await Promise.all(warnings)).compact();\n })();\n }\n\n /**\n * Is \"One-Time User\" selected as the user type?\n *\n * @type {String|undefined}\n */\n @computed('deviceAccess.{userType,accessPointCollectionsSummary.hasLocks}')\n get oneTimeUserWarning() {\n const { deviceAccess } = this;\n if (!deviceAccess.hasLocks) {\n return undefined;\n }\n\n return deviceAccess.userType === OneTimeUser ? this.intl.tc(this, 'noLockAccessOneTimeUser') : undefined;\n }\n\n /**\n * A warning message of device names whose pins will be truncated\n * because they don't support as long of a pin as the one currently entered.\n * Access plans are not included in these devices.\n *\n * @type {String|Promise|undefined}\n */\n @computed(\n 'contextManager.isEnterprise',\n 'deviceAccess.accessPointCollectionsSummary.locksAndPartitions.@each.{hasAccess,maximumPinLength}',\n 'deviceAccess.userCode'\n )\n get truncatedDevicePinsWarning() {\n const { deviceAccess } = this;\n const currentPinCodeLength = (deviceAccess.userCode || '').length;\n\n if (!currentPinCodeLength) {\n return undefined;\n }\n\n const devicesWithTruncatedPins = deviceAccess\n .get('accessPointCollectionsSummary.locksAndPartitions')\n ?.filter((item) => item.hasAccess && item.maximumPinLength < currentPinCodeLength);\n if (isEmpty(devicesWithTruncatedPins)) {\n return undefined;\n }\n\n // For enterprise, list devices by the system they are in.\n return GetUnitAndDeviceNames.call(\n this,\n devicesWithTruncatedPins,\n 'pinTruncationWarning',\n 'truncatedDevicePinsList'\n );\n }\n\n /**\n * Warning message saying certain devices don't support schedules.\n *\n * @returns {String|Promise|undefined}\n */\n @computed(\n 'contextManager.isEnterprise',\n 'deviceAccess.{accessPointCollectionsSummary,showScheduledUserCodesWarning}'\n )\n get scheduledUserCodesWarning() {\n if (!this.deviceAccess.showScheduledUserCodesWarning) {\n return undefined;\n }\n\n const accessPoints = this.deviceAccess.accessPointCollectionsSummary.get('devicesWithoutScheduleSupport');\n\n // For enterprise, list devices by the system they are in.\n return GetUnitAndDeviceNames.call(\n this,\n accessPoints,\n 'noScheduledUserCodesOnPanel',\n 'devicesWithoutScheduleSupportList'\n );\n }\n\n /**\n * Warning message saying that certain devices are in a state that does not allow user code changes.\n *\n * @returns {String|Promise|undefined}\n */\n @computed(\n 'contextManager.isEnterprise',\n 'deviceAccess.accessPointCollectionsSummary.unchangeablePartitionAccessPoints.@each.accessPointItems'\n )\n get unchangeablePartitionAccessPoints() {\n const accessPoints = this.deviceAccess\n .get('accessPointCollectionsSummary.unchangeablePartitionAccessPoints')\n ?.reduce((items, collection) => [...items, ...(collection.get('accessPointItems') || []).toArray()], []);\n\n if (!accessPoints?.length) {\n return undefined;\n }\n\n // For enterprise, show a text that implies the changes will go through when the panel disarms.\n const translationKey = this.contextManager.isEnterprise\n ? 'unchangeablePartitionAccessPoints'\n : 'unchangeablePartitionAccessPointsNoRetry';\n\n return GetUnitAndDeviceNames.call(this, accessPoints, translationKey, 'unchangeablePartitionAccessPoints');\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n \\n\",{ moduleName: \"customer-site/components/users/item/language/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\n\nimport type { LanguageModel } from 'customer-site/classes/users/edit/language/route';\nimport type User from 'customer-site/models/users/user';\nimport type ContextManager from 'customer-site/services/context-manager';\n\ninterface LanguageSignature {\n Args: {\n model: LanguageModel;\n saveUser: (user: User) => Promise;\n };\n}\n\n/**\n * @classdesc\n * The controller for editing the Language Preference section of a {@link models.users.User} model.\n */\nexport default class LanguageComponent extends Component {\n @service declare contextManager: ContextManager;\n\n @tracked user?: User;\n @tracked availableLocaleOptions?: BinaryListItem[];\n\n /**\n * Sets the user's localeID to the newly selected language.\n *\n */\n @action\n changeLanguage(languageOptions: BinaryListItem<{ id: number }>[]): void {\n if (this.user) {\n this.user.localeId = languageOptions.findBy('state')?.props?.id as number;\n }\n }\n\n @action\n initUser(user: User): void {\n const availableLocales = this.contextManager.identityModel.profile.availableLocales;\n\n Object.assign(this, {\n user,\n availableLocaleOptions: availableLocales.map((locale) => {\n const id = Number(locale.id);\n\n return new BinaryListItem({\n label: locale.displayName,\n state: user.localeId === id,\n props: { id }\n });\n })\n });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::Language': typeof LanguageComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n
\\n\",{ moduleName: \"customer-site/components/users/item/pin-badge/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { Failed, Pending, Duplicated } from '../../../../enums/AccessPointUserCodeStatus';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\n\ninterface PinBadgeArgs {\n deviceAccess: DeviceAccessModel | undefined;\n isReadOnly?: boolean;\n 'on-click'?: VoidFunction;\n}\n\n@intlPath({ path: 'users/item/pin-badge' })\nexport default class PinBadge extends Component {\n @service declare intl: ADCIntlService;\n\n /**\n * The users device access model.\n */\n @alias('args.deviceAccess')\n declare deviceAccess: DeviceAccessModel | undefined;\n\n /**\n * An optional component click handler.\n */\n @alias('args.on-click')\n declare 'on-click'?: VoidFunction;\n\n /**\n * Readonly version of the component\n */\n @alias('args.isReadOnly')\n declare isReadOnly?: boolean;\n\n /**\n * Returns a string representing the css class names for this component.\n */\n @computed('on-click', 'isReadOnly')\n get classNames(): string {\n const classes = ['user-pin-badge'];\n\n if (this['on-click'] && !this.isReadOnly) {\n classes.push('is-interactive');\n }\n\n return classes.join(' ');\n }\n\n /**\n * Specifies which icon we should show.\n */\n @computed('deviceAccess.userCodeStatus', 'isReadOnly')\n get icon(): { name: string; title: string } {\n const status = this.deviceAccess?.userCodeStatus;\n\n if (this.isReadOnly) {\n return { name: 'backup-codes', title: this.intl.t('generic.userCode') };\n }\n\n switch (status) {\n case Failed:\n case Duplicated:\n return { name: 'issue', title: this.intl.t('generic.issue') };\n case Pending:\n return { name: 'sync', title: this.intl.t('generic.synchronization') };\n default:\n return { name: 'backup-codes', title: this.intl.t('generic.userCode') };\n }\n }\n\n /**\n * The collection of user code \"pill\" CSS classes, based on user code state.\n */\n @computed('deviceAccess.{userCodeStatus,hasNoDeviceAccess,isLoading}', 'isReadOnly')\n get cssCodeStatus(): string {\n const { deviceAccess } = this;\n if (!deviceAccess || deviceAccess.isLoading || this.isReadOnly) {\n return '';\n }\n\n // Does the user NOT have any device access?\n if (deviceAccess.hasNoDeviceAccess) {\n const failedClass = { [Failed]: 'failed' }[deviceAccess.userCodeStatus];\n return `no-access ${failedClass ? failedClass : ''}`;\n }\n\n // Calculate status based CSS class.\n return (\n {\n [Failed]: 'failed',\n [Duplicated]: 'failed',\n [Pending]: 'pending'\n }[deviceAccess.userCodeStatus] || ''\n );\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::PinBadge': typeof PinBadge;\n }\n}\n","import Step, { StepDisplayType } from 'customer-site/components/help-tour/step';\nimport StepContent, { getAnchorSelector } from 'customer-site/components/help-tour/step-content';\nimport Tour from 'customer-site/components/help-tour/tour';\nimport { UserTypeRelocationTour } from 'customer-site/enums/HelpTourType';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type HelpTourService from 'customer-site/services/help-tour';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\n/**\n * Starts the tour\n */\nexport function startUserTypeRelocationTour(this: {\n helpTour: HelpTourService;\n identityManager: IdentityManager;\n intl: ADCIntlService;\n}): Promise {\n const { identityManager, intl } = this,\n { identityModel } = identityManager;\n\n const tour = Tour.create({\n name: 'UserTypeRelocationTour',\n steps: [\n Step.create({\n type: StepDisplayType.Modal,\n model: StepContent.create({\n title: intl.t('components.users.item.user-overview.userTypeRelocatedStep1Title'),\n content: intl.t('components.users.item.user-overview.userTypeRelocatedStep1Content'),\n buttons: {\n next: {\n text: intl.t('components.users.item.user-overview.userTypeRelocatedStep1NextButton')\n }\n }\n }),\n isStepAvailable: () => {\n return Promise.resolve(\n document.querySelector(getAnchorSelector('user-type-relocation-anchor')) != undefined\n );\n }\n }),\n Step.create({\n type: StepDisplayType.Popover,\n model: StepContent.create({\n attachTo: getAnchorSelector('user-type-relocation-anchor'),\n placement: 'top',\n scrollAlignToTop: true,\n title: intl.t('components.users.item.user-overview.userTypeRelocatedStep2Title'),\n content: intl.t('components.users.item.user-overview.userTypeRelocatedStep2Content'),\n buttons: {\n previous: {\n show: false\n },\n next: {\n text: intl.t('generic.done')\n }\n }\n }),\n isStepAvailable: () => {\n return Promise.resolve(\n document.querySelector(getAnchorSelector('user-type-relocation-anchor')) != undefined\n );\n }\n })\n ],\n beforeStart() {\n return Promise.resolve();\n },\n afterEnd() {\n identityModel?.markHelpTourAsCompleted(UserTypeRelocationTour);\n return Promise.resolve();\n }\n });\n\n return this.helpTour.start(tour);\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n {{#each this.credentials as |credential|}}\\n \\n \\n \\n {{/each}}\\n\\n {{#if this.addCredentialOptions.length}}\\n \\n \\n \\n {{/if}}\\n
\\n\\n \\n\\n
\\n\",{ moduleName: \"customer-site/components/users/item/credentials/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseUserCredentialManager from 'customer-site/classes/credentials/base-user-credential-manager';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { Credential } from 'customer-site/classes/credentials/base-user-credential-manager';\nimport type BaseCredential from 'customer-site/models/access-control/credentials/base-credential';\nimport type PermissionsCollection from 'customer-site/models/users/permissions-collection';\nimport type User from 'customer-site/models/users/user';\n\ntype EditCredentialFn = (credential?: BaseCredential) => Promise;\n\n/**\n * @classdesc\n * A component for displaying the PointCentral Mobile Credential and providing the ability to\n * add a new Mobile Credential.\n */\n@intlPath({ path: 'users/item/credentials' })\nexport default class PointCentralMobileCredentialsComponent extends BaseUserCredentialManager<\n User,\n PermissionsCollection\n> {\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n\n /**\n * All the credentials that belong to this user formatted so they can be easily rendered in the template.\n */\n @computed('deleteCredential', 'args.{user.mobileCredentials.[],permissions.viewMobileCredential}')\n override get credentials(): Credential[] {\n const { user, permissions } = this.args;\n\n if (!user || !permissions) {\n return [];\n }\n\n const { mobileCredentials } = user,\n credentials = [];\n\n if (permissions.viewMobileCredential && mobileCredentials.length) {\n credentials.push({\n icon: 'mobile-credential',\n code: this.intl.tc(this, 'mobileBadge'),\n options: this.mapCredentialDropdownOptions(\n [['delete', 'trash', this.deleteCredential]],\n mobileCredentials.firstObject\n )\n });\n }\n\n return credentials;\n }\n\n /**\n * The items to put inside the add credential type dropdown menu.\n */\n @computed(\n 'addResendMobileCredential',\n 'args.permissions.addMobileCredential',\n 'args.user.{canChangeUserCode,canAddMobileCredential,mobileCredentials.[]}'\n )\n override get addCredentialOptions(): DropdownActionItem[] {\n const { user, permissions } = this.args;\n if (!user || !permissions || !user.canChangeUserCode) {\n return [];\n }\n\n return [\n // Only internal beta users can see mobile credentials\n [\n !user.mobileCredentials.length && permissions.addMobileCredential && user.canAddMobileCredential,\n 'mobileBadge',\n 'mobile-credential',\n this.addResendMobileCredential\n ]\n ]\n .filter(([test]) => !!test)\n .map(([, name, icon, action]: [boolean, string, string, EditCredentialFn]) =>\n DropdownActionItem.create({\n name: this.intl.tc(this, name),\n icon,\n action\n })\n );\n }\n\n /**\n * Indicates whether the passed credential can be modified.\n */\n protected override canCredentialBeModified(credential?: BaseCredential): boolean {\n const canBeModified = !(credential?.activeDirectoryFlag ?? false) && this.args.user.canRemoveMobileCredential;\n if (!canBeModified) {\n this.notificationManager.addError(this.intl.tc(this, 'cantEditMobileBadge'));\n }\n\n return canBeModified;\n }\n\n validateActionOpen = () => this.args.user.canChangeUserCode;\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n {{yield}}\\n \\n\\n\",{ moduleName: \"customer-site/components/ui/stacked-icon-button/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type { UiStackedIconLabelSignature } from '../stacked-icon-label/index';\n\nexport interface StackedIconButtonSignature {\n Element: HTMLButtonElement;\n Args: Pick & {\n 'on-click': VoidFunction;\n };\n Blocks: {\n default: [];\n };\n}\n\nconst StackedIconButton = templateOnlyComponent();\nexport default StackedIconButton;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Ui::StackedIconButton': typeof StackedIconButton;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n {{#if this.showPinBadgeComponent}}\\n
\\n
\\n \\n
\\n {{#if this.canAddMobileCredentials}}\\n \\n {{/if}}\\n
\\n {{/if}}\\n\\n {{#if this.banner.shouldShow}}\\n \\n {{/if}}\\n\\n {{#if (and (await this.unSyncedUserCodeOptions) (not @isReadOnly))}}\\n {{#unless this.userCodeIsObscured}}\\n \\n {{else}}\\n
\\n {{/unless}}\\n {{#each (await this.unSyncedUserCodeOptions) as |codeOption|}}\\n \\n {{/each}}\\n {{/if}}\\n\\n {{#if (and (await this.isPointCentralResidentViewingSelf) (not @isReadOnly))}}\\n {{#if this.deviceAccess.canChangeUserCode}}\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n
\\n\\n {{#unless this.hideAccessItemsSection}}\\n
\\n {{#unless (is-fulfilled @deviceAccess.accessPointCollectionsSummary)}}\\n \\n {{else}}\\n {{#each (await this.accessItemGroups) as |group|}}\\n
\\n {{#each group.items as |button|}}\\n {{#unless (is-fulfilled @deviceAccess.accessPointCollectionsSummary)}}\\n \\n {{else}}\\n \\n {{/unless}}\\n {{/each}}\\n
\\n {{/each}}\\n {{/unless}}\\n
\\n {{/unless}}\\n
\",{ moduleName: \"customer-site/components/users/item/device-access/summary/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { getObjProperties } from '@adc/ember-utils/utils/ember-helpers';\nimport { computed, action } from '@ember/object';\nimport { alias, and, reads } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { isEmpty } from '@ember/utils';\nimport { intlPath } from '@adc/i18n/path';\nimport { ISSUE, INFORMATIVE } from '@adc/ui-components/components/adc-banner';\nimport { resolve, reject } from 'rsvp';\nimport { Failed, Pending, Duplicated } from '../../../../../enums/AccessPointUserCodeStatus';\nimport { BackupCode, MasterCodeUser, None } from '../../../../../enums/AccessPointUserType';\nimport {\n EmberEditUserAccessPeriod,\n EmberEditUserDeviceAccess,\n EmberEnterpriseEditUserAccessPeriod,\n EmberEnterpriseEditUserDeviceAccess,\n EmberEnterpriseEditUserDeviceAccessAccessType\n} from '../../../../../enums/CustomerPageUrl';\nimport {\n BackupCode as PCBackupCode,\n MasterCodeUser as PCMasterCodeUser,\n NotificationsOnly\n} from '../../../../../enums/PointCentralUserType';\n\nimport './_style.scss';\n\n/**\n * Decides which type of banner to be used for showing the given negative user code status.\n *\n * @param {string} status - The user code status.\n *\n * @returns {string}\n */\nfunction getBannerType(status) {\n return {\n [Duplicated]: ISSUE,\n [Failed]: ISSUE,\n [Pending]: INFORMATIVE\n }[status];\n}\n\n/**\n * Decides which text to show on the banner option button.\n *\n * @param {string} status\n * @returns {string | undefined}\n */\nfunction getBannerOptionText(status) {\n return {\n [Failed]: 'generic.retry',\n [Duplicated]: 'generic.resolve'\n }[status];\n}\n\n/**\n * Group id for the access items.\n *\n * @type {number}\n *\n * @static\n * @memberof components.users.item.DeviceAccessSummary\n */\nconst DEVICE_ACCESS_GROUP_ID = 1,\n ACCESS_PERIOD_GROUP_ID = 2,\n LOCATIONS_GROUP_ID = 3;\n\n/**\n * Creates collection of access buttons (locks, panels, time, etc).\n *\n * @private\n * @instance\n * @memberof components.users.item.DeviceAccessSummary\n *\n * @return {Array}\n */\nfunction generateAccessButtons() {\n const { deviceAccess, isEnterprise } = this,\n userType = deviceAccess.get('userType'),\n pointCentralUserType = deviceAccess.get('pointCentralUserType');\n\n if (!deviceAccess) {\n // Nothing to show.\n return [];\n }\n\n if (deviceAccess.get('isLoading')) {\n return [];\n }\n\n const fnAddItem = (icon, title, css, route, groupId, description, secondaryDescription) => ({\n icon,\n title,\n css,\n route,\n groupId,\n description,\n secondaryDescription\n }),\n cssActive = 'on';\n\n const items = [];\n\n // If this user is notifications only (None), they should not have access to any devices, and therefore, should not be able to view the device access\n // or access period page.\n if (this.isNotificationsOnlyUser) {\n return items;\n }\n\n if (isEnterprise) {\n // Add locations item.\n items.push(generateLocationsButton.call(this, deviceAccess, cssActive, fnAddItem, this.isPointCentral));\n } else {\n items.push(...generateAccessPointButtons.call(this, deviceAccess, cssActive, fnAddItem));\n }\n\n if (\n !isEnterprise &&\n !deviceAccess.get('accessPointCollectionsSummary.cannotUseSchedules') &&\n pointCentralUserType !== PCBackupCode &&\n userType !== BackupCode\n ) {\n // Add access period item.\n items.push(generateScheduleButton.call(this, deviceAccess, cssActive, fnAddItem));\n }\n\n return items.compact();\n}\n\n/**\n * Returns parameters required for the Locations Button.\n *\n * @private\n * @instance\n *\n * @param {model.users.access.deviceAccess} deviceAccess - device Access object.\n * @param {string} cssActive - css value\n * @param {function} fnAddItem - function to enforce needed parameters for button.\n * @param {boolean} isPointCentral - whether the current context is PointCentral\n *\n * @return {Object<{icon: String, title: string, css: String, route: number, groupId: number, description: string, secondaryDescription: string }>}\n */\nfunction generateLocationsButton(deviceAccess, cssActive, fnAddItem, isPointCentral) {\n const { systemsWithAccessCount, totalUnitsAvailableCount } = deviceAccess.getProperties(\n 'systemsWithAccessCount',\n 'totalUnitsAvailableCount'\n );\n\n let key = 'all',\n css = systemsWithAccessCount > 0 ? cssActive : '',\n tokens = undefined,\n showMultiSystemGroupDescription = false;\n\n if (systemsWithAccessCount !== totalUnitsAvailableCount) {\n key = 'noAccess';\n\n if (systemsWithAccessCount !== 0) {\n showMultiSystemGroupDescription =\n deviceAccess.get('accessPointCollectionsSummary.hasMultiGroupAccess') && isPointCentral;\n key = 'xOfY';\n tokens = {\n x: systemsWithAccessCount,\n y: totalUnitsAvailableCount\n };\n css = `location-some ${css}`;\n }\n }\n\n const locationAccessDescription = showMultiSystemGroupDescription\n ? this.intl.tc(this, 'variesByGroup')\n : this.intl.t(`generic.${key}`, tokens);\n\n // The route to go to if the locations button is pressed. If we are viewing a lock master code user, don't go to any route when locations is pressed (locations card will be disabled).\n const goToRoute =\n deviceAccess.get('userType') !== MasterCodeUser &&\n (!this.contextManager.isPointCentral || deviceAccess.get('pointCentralUserType') !== PCMasterCodeUser)\n ? EmberEnterpriseEditUserDeviceAccessAccessType\n : undefined;\n\n return fnAddItem(\n 'property-manage',\n this.intl.t('enterprise.locations.locations'),\n css,\n goToRoute,\n LOCATIONS_GROUP_ID,\n locationAccessDescription,\n ''\n );\n}\n\n/**\n * Returns an array of objects containing parameters required for the Access Point Access Buttons.\n *\n * @private\n * @instance\n *\n * @param {model.users.access.deviceAccess} deviceAccess - device Access object.\n * @param {string} cssActive - css value\n * @param {function} fnAddItem - function to enforce needed parameters for button.\n *\n * @return {Array<{icon: String, title: string, css: String, route: number, groupId: number, description: string, secondaryDescription: string }>}\n */\nfunction generateAccessPointButtons(deviceAccess, cssActive, fnAddItem) {\n // Generate buttons for access points ('Locks', 'Panels' and 'Community').\n return [\n ['partitions', 'panel', 'panels'],\n ['locks', 'lock', 'locks'],\n ['accessPlans', 'user-control-closed', 'community']\n ].map(([type, icon, key]) => {\n // Are there no devices of this type?\n const collection = deviceAccess.get(`accessPointCollectionsSummary.${type}AccessPointCollections.firstObject`);\n if (!collection) {\n return undefined;\n }\n\n // Get description and no access flag.\n const hasNoAccess = collection.hasNoAccess,\n description = hasNoAccess ? this.intl.t('generic.noAccess') : collection.description,\n css = hasNoAccess ? '' : cssActive;\n\n return description\n ? fnAddItem(\n icon,\n this.intl.t(`generic.devices.${key}`),\n css,\n this.editUserDeviceAccessRoute,\n DEVICE_ACCESS_GROUP_ID,\n description\n )\n : undefined;\n });\n}\n\n/**\n * Returns parameters required for the 'Time' Button.\n *\n * @private\n * @instance\n *\n * @param {model.users.access.deviceAccess} deviceAccess - device Access object.\n * @param {string} cssActive - css value\n * @param {function} fnAddItem - function to enforce needed parameters for button.\n *\n * @return {Object<{icon: String, title: string, css: String, route: number, groupId: number, description: string, secondaryDescription: string}>}\n */\nfunction generateScheduleButton(deviceAccess, cssActive, fnAddItem) {\n const schedule = getObjProperties(deviceAccess, 'temporarySchedule', 'weeklySchedule').compact().findBy('isValid');\n\n // We don't allow schedules to be set when there is no device-access selected and the account only has lock devices (e.g. no partitions).\n // The reasoning here is that when a user is created on an account with a partition, we always have a paused slot in lu_access_point_slot\n // regardless of whether they have access to the panel (we store the user \"type\" here), so we are able to store the schedule as well.\n // If only a lock is present on the account, we cannot save the schedule if the user has never been given access to a lock. This logic\n // ensures that lock access has been provided at some point and we can save the schedule to the database as a result.\n if (\n deviceAccess.get('hasNoDeviceAccess') &&\n isEmpty(deviceAccess.get('accessPointCollectionsSummary.partitionsAccessPointCollections')) &&\n !schedule\n ) {\n return fnAddItem(\n 'clock',\n this.intl.t('generic.time'),\n '',\n undefined,\n ACCESS_PERIOD_GROUP_ID,\n this.intl.t('generic.noAccess'),\n ''\n );\n }\n\n let description = this.intl.t('generic.all'),\n secondaryDescription = '';\n\n if (schedule) {\n description = schedule.dateText;\n secondaryDescription = schedule.timeText;\n }\n\n return fnAddItem(\n 'clock',\n this.intl.t('generic.time'),\n `time ${schedule ? '' : cssActive}`,\n this.editUserAccessPeriodRoute,\n ACCESS_PERIOD_GROUP_ID,\n description,\n secondaryDescription\n );\n}\n\n/**\n * @param {BasePermissionsCollection} permissions\n * @param {Object|undefined} routeMap\n * @param {models.users.access.DeviceAccess} deviceAccess\n */\n@intlPath({ path: 'users/item/device-access/summary' })\nexport default class DeviceAccessSummary extends Component {\n @service ajax;\n @service contextManager;\n @service notificationManager;\n @service intl;\n @service modals;\n @service identityManager;\n\n // region Computed Properties\n\n /**\n * Whether we are in enterprise context.\n *\n * @function\n * @returns {boolean}\n */\n @alias('contextManager.identityModel.isEnterprise')\n isEnterprise;\n\n /**\n * Shortcut to the permissions for the user in question.\n *\n * @type {BasePermissionsCollection}\n */\n @alias('args.permissions')\n permissions;\n\n /**\n * The map of route Ids for user editing.\n *\n * @type {Object|undefined}\n */\n @alias('args.routeMap')\n routeMap;\n\n /**\n * Shortcut to the device access model for the user in question.\n *\n * @type {models.users.access.DeviceAccess}\n */\n @alias('args.deviceAccess')\n deviceAccess;\n\n /**\n * Whether we are in a PointCentral context.\n *\n * @type {boolean}\n */\n @alias('contextManager.isPointCentral')\n isPointCentral;\n\n /**\n * The access point information for this user.\n */\n @alias('deviceAccess.accessPointCollectionsSummary')\n accessPointCollectionsSummary;\n\n /**\n * Readonly version of the component\n */\n @alias('args.isReadOnly')\n isReadOnly;\n\n /**\n * Is this user a PC resident login viewing their associated resident user?\n */\n @reads('deviceAccess.user.isPointCentralResidentViewingSelf')\n isPointCentralResidentViewingSelf;\n\n @computed('isReadOnly')\n get isNotReadOnly() {\n return !this.isReadOnly;\n }\n\n @and(\n 'identityManager.pointCentralIdentity.hasPointCentralMobileCredentialsFeatureToggle',\n 'permissions.addMobileCredential',\n 'isNotReadOnly'\n )\n canAddMobileCredentials;\n\n /**\n * Whether we're editing a notifications only user, excluding the primary user.\n *\n * @function\n * @returns {boolean}\n */\n @computed('deviceAccess.{userType,pointCentralUserType,user.isPrimary}', 'contextManager.isPointCentral')\n get isNotificationsOnlyUser() {\n const { deviceAccess } = this;\n if (deviceAccess.get('user.isPrimary')) {\n return false;\n }\n\n return this.contextManager.isPointCentral\n ? deviceAccess.get('pointCentralUserType') === NotificationsOnly\n : deviceAccess.get('userType') === None;\n }\n\n /**\n * Determines correct device access route.\n *\n * @type {number | undefined}\n */\n @computed('isEnterprise', 'isPointCentralResidentViewingSelf')\n get editUserDeviceAccessRoute() {\n if (this.isPointCentralResidentViewingSelf) {\n return undefined;\n }\n\n return this.isEnterprise ? EmberEnterpriseEditUserDeviceAccess : EmberEditUserDeviceAccess;\n }\n\n /**\n * Whether or not the user code will be obscured.\n *\n * @returns {boolean}\n */\n @computed('deviceAccess.userCode')\n get userCodeIsObscured() {\n return [...this.deviceAccess.get('userCode')].every((char) => char === '*');\n }\n\n /**\n * Generates option list of user codes to sync all devices to.\n *\n * @function\n * @returns {Promise>}\n */\n @computed(\n 'deviceAccess.{userCodeSystemsMap,accessPointCollectionsSummary.accessPointCollections,userCode}',\n 'permissions',\n 'userCodeIsObscured'\n )\n get unSyncedUserCodeOptions() {\n return (async () => {\n const userCodeSystemsMap = this.deviceAccess.get('userCodeSystemsMap'),\n userCodes = userCodeSystemsMap ? Object.keys(userCodeSystemsMap) : [];\n\n if (userCodes.length <= 1 || !this.permissions.get('canViewUserCodes')) {\n return undefined;\n }\n\n // If we are obscuring the code, return only the obscured access code.\n if (this.userCodeIsObscured) {\n return [\n {\n userCode: this.deviceAccess.get('userCode'),\n type: ISSUE,\n message: this.intl.tc(this, 'codeNotInSyncAcrossAllLocations'),\n sytemNames: '',\n buttonText: this.intl.tc(this, 'syncAssignedUserCodeToAllLocations')\n }\n ];\n }\n\n let allSystemNames = {},\n accessPointCollections = await this.deviceAccess.get(\n 'accessPointCollectionsSummary.accessPointCollections'\n );\n for (const collection of accessPointCollections) {\n const system = await collection.get('system');\n allSystemNames[system.get('id')] = system.get('description');\n }\n\n return userCodes\n .filter((userCode) => userCode.length > 0)\n .map((userCode) => {\n const systemsForCode = userCodeSystemsMap[userCode],\n locationCount = systemsForCode.length,\n systemNames = '- ' + systemsForCode.map((system) => allSystemNames[system]).join('\\n- '),\n message = this.intl.tc(this, 'userCodeSystemOptionDesc', {\n userCode,\n locationCount,\n systemNames\n });\n\n return {\n userCode,\n type: ISSUE,\n message: htmlSafe(message),\n systemNames,\n buttonText: this.intl.tc(this, 'syncToAllLocations')\n };\n });\n })();\n }\n\n /**\n * Determines correct user access period route.\n *\n * @type {number}\n */\n @computed('isEnterprise', 'isPointCentralResidentViewingSelf')\n get editUserAccessPeriodRoute() {\n if (this.isPointCentralResidentViewingSelf) {\n return undefined;\n }\n\n return this.isEnterprise ? EmberEnterpriseEditUserAccessPeriod : EmberEditUserAccessPeriod;\n }\n\n /**\n * The access buttons (locks, panels, time, etc) grouped into arrays.\n *\n * @returns {Promise>}\n */\n @computed(\n 'deviceAccess.{userType,weeklySchedule.isValid}',\n 'accessPointCollectionsSummary',\n 'accessPointCollectionsSummary.{isFulfilled,partitionsAccessPointCollections.@each.hasNoAccess,locksAccessPointCollections.@each.hasNoAccess,temporarySchedule.isValid,cannotUseSchedules,allAccessPointItems.[],accessPointCollections.[]}'\n )\n get accessItemGroups() {\n const accessItems = generateAccessButtons.call(this) || [];\n\n return [LOCATIONS_GROUP_ID, DEVICE_ACCESS_GROUP_ID, ACCESS_PERIOD_GROUP_ID]\n .map((groupId) => accessItems.filter((item) => item.groupId === groupId))\n .map((items) => ({\n items: items,\n cssClass: `stacked-icon-group ${items.length > 1 ? 'wide' : ''}`\n }))\n .filterBy('items.length');\n }\n\n /**\n * We should hide the access items section if we are not showing any of the access items groups.\n *\n * @function\n * @returns {boolean}\n */\n @computed('accessItemGroups.[]')\n get hideAccessItemsSection() {\n const { accessItemGroups } = this;\n return accessItemGroups && accessItemGroups.length === 0;\n }\n\n /**\n * Should we show the pin badge component?\n *\n * @function\n * @returns {boolean}\n */\n @computed('isPointCentralResidentViewingSelf', 'isNotificationsOnlyUser', 'permissions.canViewUserCodes')\n get showPinBadgeComponent() {\n return (\n (this.permissions.get('canViewUserCodes') || this.isPointCentralResidentViewingSelf) &&\n !this.isNotificationsOnlyUser\n );\n }\n\n /**\n * Based on the userCodeStatus and description from deviceAccess, generates the properties necessary to show a banner\n * describing the negative status, if exists.\n *\n * @function\n * @returns {object<{shouldShow: boolean, type: string|undefined, message: string|undefined}>|undefined}\n */\n @computed(\n 'deviceAccess.{userCodeStatus,userCodeStatusDesc}',\n 'resyncUserCodes',\n 'transitionToUserCodeRoute',\n 'isReadOnly'\n )\n get banner() {\n if (!this.deviceAccess || this.isReadOnly) {\n return undefined;\n }\n\n let { userCodeStatus: status, userCodeStatusDesc } = this.deviceAccess.getProperties(\n 'userCodeStatus',\n 'userCodeStatusDesc'\n ),\n bannerType = getBannerType(status),\n bannerOptionText = getBannerOptionText(status);\n\n return {\n shouldShow: !!bannerType,\n type: bannerType,\n message: userCodeStatusDesc,\n optionText: bannerOptionText ? this.intl.t(bannerOptionText) : undefined\n };\n }\n\n /**\n * Save the selected user code to all systems.\n */\n @action\n async reSyncUserCodes(userCode) {\n const deviceAccess = await this.deviceAccess;\n deviceAccess.set('userCode', userCode);\n\n try {\n await deviceAccess.save();\n deviceAccess.set('userCodeSystemsMap', {});\n this.notificationManager.addSuccess(this.intl.t('classes.users.edit.updatesHaveBeenSaved'));\n return resolve();\n } catch (error) {\n deviceAccess.rollback();\n this.notificationManager.addError(error.errors[0].detail);\n return reject();\n }\n }\n\n /**\n * Asks the server with a POST request to resend the user code to the devices.\n */\n @action\n async resyncDevices() {\n const requestBody = this.isEnterprise ? {} : { unitId: this.contextManager.getSelectedSystemId() },\n deviceAccess = await this.deviceAccess,\n accessPointCollectionsSummary = await deviceAccess.accessPointCollectionsSummary;\n\n try {\n await this.ajax.apiRequest(\n `users/access/deviceAccesses/resendUserCodes/${deviceAccess.id}`,\n null,\n requestBody,\n 'POST'\n );\n // Reload the access point collections summary and device access to the updated userCodeStatus.\n await accessPointCollectionsSummary.reload();\n await deviceAccess.reload();\n } catch (error) {\n this.notificationManager.addError(error.errors[0].detail);\n }\n }\n\n /**\n * Redirects the user to the appropriate route to edit their user code.\n */\n @action\n transitionToUserCodeRoute() {\n if (!this.args.transitionToEditRoute || this.isPointCentralResidentViewingSelf || this.isReadOnly) {\n return undefined;\n }\n\n const targetRoute = this.contextManager.isEnterprise ? this.routeMap.userCode : this.routeMap.deviceAccess;\n\n this.contextManager.transitionToNativeRoute(targetRoute);\n }\n\n /**\n * Calls the appropriate method associated with the banner button.\n */\n @action\n bannerButtonPressed() {\n const status = this.deviceAccess.get('userCodeStatus'),\n actionsByStatus = {\n [Failed]: this.resyncDevices,\n [Duplicated]: this.transitionToUserCodeRoute\n };\n\n actionsByStatus[status]();\n }\n\n /**\n * Updates the pin code for the resident user.\n */\n @action\n async generateNewCodeAndSave() {\n const { intl, notificationManager } = this,\n deviceAccess = await this.deviceAccess;\n this.modals.showConfirmationDialog(\n intl.tc(this, 'changePinCode'),\n intl.tc(this, 'changePinCodeConfirmationModal'),\n {\n text: intl.t('generic.confirm'),\n css: 'btn-color-primary',\n action: () => {\n try {\n deviceAccess.generateNewCodeAndSave();\n this.deviceAccess.reload();\n\n // Log this action to Wavefront.\n this.ajax.apiRequest('users/users/logResidentUpdatedOwnPinCode', null, null, 'POST');\n\n notificationManager.addSuccess(intl.tc(this, 'pinUpdateSuccess'));\n } catch (e) {\n notificationManager.addError(intl.tc(this, 'pinUpdateFailure'));\n }\n }\n },\n {\n text: intl.t('generic.cancel')\n }\n );\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n \\n\\n \\n <:footer>\\n {{#let (await @user.smrfStatus) as |status|}}\\n \\n\\n {{#if status.unknownImages.length}}\\n

\\n {{tc this \\\"newImageCount\\\" count=status.unknownImages.length}}\\n

\\n {{/if}}\\n {{/let}}\\n \\n \\n
\\n\",{ moduleName: \"customer-site/components/users/item/smrf/status-item/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed, action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\nimport { EmberUserEditFaceRecognitionReview } from '../../../../../enums/CustomerPageUrl';\nimport { Minimum, Best } from '../../../../../enums/SmrfImageCountThresholds';\nimport { NOT_CALIBRATED, PARTIALLY_CALIBRATED, FULLY_CALIBRATED } from '../../../../../models/users/smrf-status';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type User from 'customer-site/models/users/user';\nimport type NavigationService from 'customer-site/services/navigation';\n\ninterface SmrfStatusItemArgs {\n user: User;\n}\n\n/**\n * Returns a value based on the {@link models.users.SmrfStatus.calibrationState}.\n *\n * @param state The user.smrfStatus.calibrationState.\n * @param badValue The value to return for a \"bad\" calibration state.\n * @param goodValue The value to return for a \"good\" calibration state.\n * @param bestValue The value to return for a \"best\" calibration state.\n */\nfunction getStateValue(state: number, badValue: string, goodValue: string, bestValue: string): string {\n return {\n [NOT_CALIBRATED]: badValue,\n [PARTIALLY_CALIBRATED]: goodValue,\n [FULLY_CALIBRATED]: bestValue\n }[state] as string;\n}\n\n/**\n * @classdesc\n * Component for rendering the users facial recognition SMRF configuration visual status.\n */\n@intlPath({ path: 'users/item/smrf/status-item' })\nexport default class SmrfStatusItem extends Component {\n @service declare navigation: NavigationService;\n @service declare intl: ADCIntlService;\n\n tagName = '';\n\n @alias('args.user')\n declare user: User;\n\n /**\n * The good and best thresholds for SMRF.\n */\n thresholds = {\n good: Minimum,\n best: Best\n };\n\n /**\n * The state based CSS class to apply to this component.\n */\n @computed('user.smrfStatus.calibrationState')\n get statusCss(): Promise {\n return (async () => {\n const status = await this.user.smrfStatus,\n state = status.calibrationState;\n return getStateValue(state, 'incomplete', 'okay', 'complete');\n })();\n }\n\n /**\n * The state based icon to display.\n */\n @computed('user.smrfStatus.calibrationState')\n get statusIcon(): Promise {\n return (async () => {\n const status = await this.user.smrfStatus,\n state = status.calibrationState;\n return getStateValue(state, 'access-none', 'access-partial', 'circle-o-check');\n })();\n }\n\n /**\n * The state based status text to display.\n */\n @computed('user.smrfStatus.calibrationState')\n get statusText(): Promise {\n return (async () => {\n const status = await this.user.smrfStatus,\n state = status.calibrationState,\n value = getStateValue(state, 'incomplete', 'complete', 'complete');\n return this.intl.tc(this, value);\n })();\n }\n\n /**\n * Transitions to the review route.\n */\n @action transitionToReviewRoute(): void {\n this.navigation.transitionToRouteId(EmberUserEditFaceRecognitionReview);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::Smrf::StatusItem': typeof SmrfStatusItem;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @permissions.canManageLoginInformationForUsersWithLogins}}\\n \\n
\\n {{#each (await this.items) as |item|}}\\n \\n {{/each}}\\n
\\n \\n{{/if}}\",{ moduleName: \"customer-site/components/users/item/login-information/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { service } from '@ember/service';\nimport {\n EmberAddEnterpriseAccessControlLoginsOptions,\n EmberAddEnterpriseLoginsOptions,\n EmberEditMultiGroupAccessControlLogin,\n EmberEditMultiGroupLogin,\n EmberEditScheduledDeviceLogin,\n EmberEditScheduledDeviceLoginAccessControl,\n EmberSingleSystemManageLoginsEdit,\n ManageLoginAddLogin,\n ManageLoginPermissions\n} from 'customer-site/enums/CustomerPageUrl';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { DrillThroughItemSignature } from '@adc/ui-components/components/drill-through-item';\nimport type Store from '@ember-data/store';\nimport type CustomerLogin from 'customer-site/models/logins/customer-login';\nimport type LoginPermissionsCollection from 'customer-site/models/logins/login-permissions-collection';\nimport type BasePermissionsCollection from 'customer-site/models/users/base-permissions-collection';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type IdentityManager from 'customer-site/services/identity-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\ntype LoginInformationDrillThroughItem = DrillThroughItemSignature['Args'] & {\n disabled?: boolean;\n styles?: string;\n};\n\ninterface UsersItemLoginInformationArgs {\n Args: {\n user: BaseUser;\n permissions: BasePermissionsCollection;\n showCardDesign?: boolean;\n routeMap: {\n username: number;\n usernameRedirect: number;\n };\n isReadOnly: boolean;\n };\n}\n\n@intlPath({ path: 'users/item/login-information' })\nexport default class UsersItemLoginInformation extends Component {\n @service declare ajax: AjaxService;\n @service declare intl: ADCIntlService;\n @service declare navigation: NavigationService;\n @service declare store: Store;\n @service declare identityManager: IdentityManager;\n\n /**\n * The DrillThroughItems that are displayed in the component.\n */\n @computed('args.{permissions,isReadOnly}')\n get items(): Promise {\n return (async () => {\n const { permissions, isReadOnly } = this.args;\n\n if (!permissions.canManageLoginInformationForUsersWithLogins) {\n return [];\n }\n return [await this.buildAppAccessDrillThroughItem(isReadOnly), this.buildUsernameDrillThroughItem()].filter(\n (obj) => Object.entries(obj).length !== 0\n );\n })();\n }\n\n /**\n * The login associated with the user.\n */\n @computed('args.{user,permissions}')\n get login(): Promise | undefined {\n const { user, permissions } = this.args;\n if (!permissions.canManageLoginInformationForUsersWithLogins || !user.loginId) {\n return undefined;\n }\n return this.store.findRecord('logins/customer-login', user.loginId);\n }\n\n /**\n * The login permissions collection associated with the user's selected system group.\n */\n @computed('identityManager.identityModel')\n get loginPermissionsCollection(): Promise {\n return this.store.findRecord(\n 'logins/login-permissions-collection',\n this.identityManager.identityModel?.belongsTo('selectedSystemGroup').id() ?? ''\n );\n }\n\n /**\n * Constructs the main drill through item for the app access section.\n */\n private async buildAppAccessDrillThroughItem(isReadOnly: boolean): Promise {\n const { user } = this.args;\n let item: LoginInformationDrillThroughItem = {};\n\n // Create Login\n if (!user.loginId && !isReadOnly) {\n item = await this.buildCreateLoginItem();\n } else {\n // Manage Login\n item = await this.buildManageLoginItem();\n }\n\n return item;\n }\n\n /**\n * Constructs the drill through item for the username section.\n */\n private buildUsernameDrillThroughItem(): LoginInformationDrillThroughItem {\n const { user } = this.args;\n let item: LoginInformationDrillThroughItem = {};\n\n if (user.loginName) {\n const { username } = this.args.routeMap;\n\n item = this.populateDrillThroughItem(\n {\n icon: 'login',\n title: this.intl.t('generic.username'),\n descriptionRight: user.loginName\n },\n username,\n [\n {\n redirectRoute: this.args.routeMap.usernameRedirect,\n user: this.args.user,\n id_user: this.args.user.id,\n permissions: this.args.permissions\n }\n ]\n );\n }\n return item;\n }\n\n /**\n * Helper function to build the manage login functionality of the app access drill through item.\n */\n private async buildManageLoginItem(): Promise {\n // Manage/View Login\n const login = await this.login;\n const { user } = this.args;\n let routeId: number | undefined = undefined;\n let args: any[] = [];\n\n // Resi Single System\n if (this.navigation.userHasAccess(ManageLoginPermissions)) {\n routeId = ManageLoginPermissions;\n args = [{ queryParams: { loginid: user.loginId } }];\n }\n\n // Enterprise\n else if (this.identityManager.isEnterprise) {\n const isNonGroupLogin = login?.getModelName() === 'logins/non-group-login';\n const usesAccessControlUI = (await this.identityManager.identityModel?.selectedSystemGroup)\n ?.usesAccessControlUI;\n\n if (login?.isScheduledDeviceLogin) {\n routeId = usesAccessControlUI\n ? EmberEditScheduledDeviceLoginAccessControl\n : EmberEditScheduledDeviceLogin;\n }\n\n const queryParams = { cl: isNonGroupLogin };\n routeId = usesAccessControlUI ? EmberEditMultiGroupAccessControlLogin : EmberEditMultiGroupLogin;\n args = [login?.id, { queryParams }];\n }\n return this.populateDrillThroughItem(\n {\n icon: 'mobile',\n title: this.intl.tc(this, 'appAccess'),\n descriptionRight: login?.roleDescription,\n disabled: !login?.canBeEdited || user.isPrimary\n },\n routeId,\n args\n );\n }\n\n /**\n * Helper function to build the create login functionality of the app access drill through item.\n */\n private async buildCreateLoginItem(): Promise {\n let routeId: number | undefined = undefined;\n const { user } = this.args;\n const { intl } = this;\n\n // Mobile App\n if (\n this.identityManager.isMobileApp &&\n (await this.loginPermissionsCollection).hasSingleSystemManageLoginsWriteAccess\n ) {\n routeId = EmberSingleSystemManageLoginsEdit;\n }\n // Enterprise\n else if (this.identityManager.isEnterprise) {\n // set route id and description right for enterprise\n const usesAccessControlUI = (await this.identityManager.identityModel?.selectedSystemGroup)\n ?.usesAccessControlUI;\n\n routeId = usesAccessControlUI\n ? EmberAddEnterpriseAccessControlLoginsOptions\n : EmberAddEnterpriseLoginsOptions;\n }\n // Resi Single System\n else if (this.navigation.userHasAccess(ManageLoginAddLogin)) {\n routeId = ManageLoginAddLogin;\n }\n\n return this.populateDrillThroughItem(\n {\n icon: 'mobile',\n title: intl.tc(this, 'appAccess'),\n descriptionRight: intl.tc(this, 'addLogin'),\n drillIcon: 'add',\n styles: 'create-login'\n },\n routeId,\n [{ queryParams: { contactId: user.id } }]\n );\n }\n\n /**\n * Helper function to populate the drill through item with the appropriate click handler.\n */\n private populateDrillThroughItem(\n itemProps: LoginInformationDrillThroughItem,\n routeId?: number,\n args: any[] = []\n ): LoginInformationDrillThroughItem {\n let item: LoginInformationDrillThroughItem = { ...itemProps };\n if (routeId && this.navigation.userHasAccess(routeId)) {\n item['on-click'] = () => this.navigation.transitionToRouteId(routeId, ...args);\n } else {\n // Make sure the item doesn't show if there's no click handler.\n item = {};\n }\n return item;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::LoginInformation': typeof UsersItemLoginInformation;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n {{#unless @showCardDesign}}\\n \\n {{/unless}}\\n \\n
\\n\",{ moduleName: \"customer-site/components/users/item/link-login/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type BasePermissionsCollection from 'customer-site/models/users/base-permissions-collection';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type ContextManager from 'customer-site/services/context-manager';\n\n// region Component\n\ninterface LinkLoginItemComponentSignature {\n Element: HTMLElement;\n Args: {\n user: BaseUser;\n permissions: BasePermissionsCollection;\n linkLogin: () => void;\n showCardDesign?: boolean;\n isReadOnly?: boolean;\n };\n}\n\n@intlPath({ path: 'users/item/link-login' })\nexport default class LinkLogin extends Component {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n\n /** User */\n @alias('args.user')\n declare user: BaseUser;\n\n /** Permissions for this context */\n @alias('args.permissions')\n declare permissions: BasePermissionsCollection;\n\n // endregion\n // region Actions\n\n /**\n * Transitions the user to the selection of which new address they want to create.\n */\n @action\n addLinkedLogin(): void {\n this.args.linkLogin();\n }\n\n // endregion\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::LinkLogin': typeof LinkLogin;\n }\n}\n\n// endregion\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if (and (not @isReadOnly) @user.isPointCentralUnknown)}}\\n \\n{{/if}}\\n\\n{{#if (and (not @isReadOnly) @user.isDuress)}}\\n \\n{{/if}}\\n\\n\\n
\\n \\n <:content>\\n \\n

\\n {{@user.displayName}}\\n {{#unless this.isUserInformationReadOnly}}\\n \\n {{/unless}}\\n

\\n {{#if (and this.contextManager.identityModel.canViewPeopleUi (not @isReadOnly))}}\\n
\\n {{this.contactUserTypeIndicator}}\\n
\\n {{/if}}\\n \\n \\n
\\n
\\n\\n{{yield\\n (hash\\n deviceAccessSummary=(component \\'users/item/device-access/summary\\'\\n deviceAccess=@user.deviceAccess\\n permissions=@permissions\\n routeMap=@routeMap\\n transitionToEditRoute=this.transitionToEdit\\n deleteCredential=@deleteCredential\\n addCredential=@addCredential\\n editCredential=@editCredential\\n setMobileModalOnLoadPropertyTrue=@setMobileModalOnLoadPropertyTrue\\n isReadOnly=@isReadOnly\\n )\\n smrf=(component \\'users/item/smrf/status-item\\' user=@user)\\n )\\n}}\\n\\n{{yield (hash upperContent=(component \\'empty-container\\'))}}\\n\\n{{#if @permissions.canManageLoginInformationForUsersWithLogins}}\\n \\n{{/if}}\\n\\n{{#if this.isContactInfoVisible}}\\n \\n{{/if}}\\n\\n{{#if (and @permissions.canViewLinkLoginsAndUsersUI this.doesUserTypeSupportLinkedLogin this.canShowRemoteAccess) }}\\n \\n{{/if}}\\n\\n{{yield (hash lowerContent=(component \\'empty-container\\'))}}\\n\\n{{#if this.showUserAttributes}}\\n
\\n \\n
\\n{{/if}}\\n\\n{{#if (and this.showPauseUserButton (not @isReadOnly))}}\\n
\\n
\\n {{#if @user.isPaused}}\\n \\n {{else}}\\n \\n {{/if}}\\n
\\n{{/if}}\\n\\n{{#if (and this.showShareUserCodeButton (not @isReadOnly))}}\\n
\\n {{#if (or this.isPointCentral this.isPointCentralAccessControl)}}\\n \\n \\n \\n {{else}}\\n \\n {{/if}}\\n
\\n{{/if}}\\n\\n{{#if (and (not @isReadOnly) this.showAssignBackupCodeUserButton)}}\\n \\n{{/if}}\",{ moduleName: \"customer-site/components/users/item/user-overview/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\n// Do not copy this deprecated usage. If you see this, please fix it\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport { computed, action, get } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { getAnchorSelector } from 'customer-site/components/help-tour/step-content';\nimport { startUserTypeRelocationTour } from 'customer-site/components/users/item/user-type-relocation-tour/tour';\nimport {\n BackupCode,\n MasterCodeUser,\n RequestedCode,\n PreloadedCodeInactive\n} from 'customer-site/enums/AccessPointUserType';\nimport { PointCentralUserType } from 'customer-site/enums/ContactAttribute';\nimport * as ContactUserType from 'customer-site/enums/ContactUserType';\nimport { UserTypeRelocationTour } from 'customer-site/enums/HelpTourType';\nimport { intlPath } from '@adc/i18n/path';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\n\nimport './_style.scss';\n\n/**\n * Gets the locations that the user has access to and returns the non-common area locations.\n *\n * @returns {models.enterprise.locations.Location[]}\n *\n * @private\n * @instance\n */\nasync function getNonCommonAreaLocations() {\n const systemsWithAccess = get(this.deviceAccess, 'accessPointCollectionsSummary.systemsWithAccess'),\n resolvedSystemsWithAccess = await Promise.all(systemsWithAccess),\n locations = [];\n for (const system of resolvedSystemsWithAccess) {\n const location = await this.store.findRecord('enterprise/locations/location', system.get('unitId'));\n\n // Do not include common areas in the list of locations to which the user has access.\n if (!location.get('isCommonArea')) {\n locations.push(location);\n }\n }\n\n return locations;\n}\n\n/**\n * User types that are read only.\n *\n * @type {(number)[]}\n */\nconst LinkedLoginsSupportedUserTypes = [\n ContactUserType.MasterCodeUser,\n ContactUserType.General,\n ContactUserType.AllAccessUser,\n ContactUserType.ShellContact\n];\n\n/**\n * User types that are read only.\n *\n * @type {(number)[]}\n */\nconst isUserInformationReadOnlyUserTypes = [MasterCodeUser, BackupCode, RequestedCode, PreloadedCodeInactive];\n\n/**\n * @classdesc Component that shows a summary of a user.\n *\n * @class components.users.item.UserOverview\n * @extends Ember.Component\n */\n@intlPath({ path: 'users.item.user-overview' })\nexport default class UserOverview extends Component {\n @service helpTour;\n @service identityManager;\n @service intl;\n @service contextManager;\n @service notificationManager;\n @service modals;\n @service store;\n @service navigation;\n @service('users.share-user') shareUser;\n @service('users.pointcentral-share-user') pointCentralShareUser;\n\n tagName = '';\n\n deviceAccess;\n\n /**\n * Should the notification info be visible to the user?\n *\n * @type {boolean}\n */\n @alias('user.canViewContactAddressControl')\n isContactInfoVisible;\n\n /**\n * Are we in a PointCentral context?\n *\n * @type {boolean}\n */\n @alias('contextManager.identityModel.isPointCentral')\n isPointCentral;\n\n /**\n * Are we in a PointCentralAccessControl context?\n *\n * @type {boolean}\n */\n @alias('contextManager.identityModel.isPointCentralAccessControl')\n isPointCentralAccessControl;\n\n /**\n * Can the user type link a login?\n *\n * @type {boolean}\n */\n @computed('user.userType')\n get doesUserTypeSupportLinkedLogin() {\n const user = this.user || {},\n userType = user.get('userType');\n return LinkedLoginsSupportedUserTypes.includes(userType);\n }\n\n /**\n * Should we show the remote access UI based on readonly flag\n *\n * @type {boolean}\n */\n @computed('isReadOnly', 'user.loginName')\n get canShowRemoteAccess() {\n return this.isReadOnly ? this.user.loginName : true;\n }\n\n /**\n * Should the user information card be read only?\n *\n * @type {boolean}\n */\n @computed('user.{isPrimary,isPointCentralResidentViewingSelf}', 'deviceAccess.{userType,pointCentralUserType}')\n get isUserInformationReadOnly() {\n const { user, deviceAccess, isReadOnly } = this;\n\n return (\n !user ||\n isReadOnly ||\n user.isPrimary ||\n user.isPointCentralResidentViewingSelf ||\n (deviceAccess &&\n (isUserInformationReadOnlyUserTypes.includes(get(deviceAccess, 'userType')) ||\n isUserInformationReadOnlyUserTypes.includes(get(deviceAccess, 'pointCentralUserType'))))\n );\n }\n\n /**\n * Should the user attributes be visible?\n *\n * @type {boolean}\n */\n @computed(\n 'user.{isDuress,isResidentVisitor}',\n 'contextManager.identityModel.loginIsEnterprise',\n 'isContactInfoVisible',\n 'availableUserAttributeFields'\n )\n get showUserAttributes() {\n const {\n user: { isDuress, isResidentVisitor },\n isContactInfoVisible,\n availableUserAttributeFields,\n contextManager,\n isReadOnly,\n userAttributeCollection\n } = this;\n\n const hideForReadOnly = isReadOnly\n ? userAttributeCollection?.attributeValues &&\n Object.keys(userAttributeCollection.attributeValues)?.length === 0\n : false;\n\n return (\n !isEmpty(availableUserAttributeFields) &&\n !isDuress &&\n (isContactInfoVisible || (isResidentVisitor && contextManager.identityModel.loginIsEnterprise)) &&\n !hideForReadOnly\n );\n }\n\n /**\n * Adjust the user attribute fields we show based on the user displayed\n */\n @computed('isContactInfoVisible', 'availableUserAttributeFields')\n get filteredUserAttributeFields() {\n /* If the user's contact information is not visible\n then this must be a resident visitor being viewed by an enterprise login.\n In this case we show the PointCentral User Type and only the user type\n */\n if (!this.isContactInfoVisible) {\n return this.availableUserAttributeFields.filter(\n (attributeField) => attributeField.id == PointCentralUserType\n );\n }\n\n return this.availableUserAttributeFields;\n }\n\n /**\n * The user service to use for this component.\n *\n * @type {services.users.ShareUser}\n */\n shareUserService =\n this.isPointCentral || this.isPointCentralAccessControl ? this.pointCentralShareUser : this.shareUser;\n\n /**\n * Should we show the \"Share User Code\" button?\n *\n * @type {boolean}\n */\n @computed('deviceAccess.canShareUserCode', 'shareUserService', 'user', 'isReadOnly')\n get showShareUserCodeButton() {\n return this.user && this.shareUserService.shouldShowShareUserCodeButton(this.user) && !this.isReadOnly;\n }\n\n /**\n * Should we show the \"Pause User\" button?\n *\n */\n @computed('permissions.accessControlPausedContacts', 'user.{isPrimary,pinCodes.[],accessCards.[]}', 'isReadOnly')\n get showPauseUserButton() {\n // We only show the button if the user is not Primary, has credentials to pause, and if the context has permission to pause users\n\n return (\n this.user &&\n !this.isReadOnly &&\n this.permissions.get('accessControlPausedContacts') &&\n !this.user.isPrimary &&\n (this.user.pinCodes.length || this.user.accessCards.length)\n );\n }\n\n /**\n * Whether or not we want to show the options to share code via text, email, or contact list.\n *\n * @type {boolean}\n */\n @computed('user', 'shareUserService')\n get showAllSharingOptions() {\n return this.shareUserService.showAllSharingOptions(this.user);\n }\n\n /**\n * Should we show the 'Assign Backup Code' button?\n *\n * @type {boolean}\n */\n @computed('user.canAssignBackupCodeUser', 'isReadOnly')\n get showAssignBackupCodeUserButton() {\n return this.user.canAssignBackupCodeUser && !this.isReadOnly;\n }\n\n /**\n * Transitions to the appropriate route for editing a portion of a user.\n *\n * @param {String} routeId - The ID of the route to transition to.\n */\n @action\n transitionToEdit(routeId) {\n const { user, isReadOnly } = this;\n if (isReadOnly) {\n return undefined;\n } else if (user.activeDirectoryFlag) {\n this.notificationManager.addError(this.intl.t('components.users.item.user-overview.ADEditFailure'));\n } else {\n this.navigation.transitionToRouteId(routeId);\n }\n }\n\n /**\n * Creates the three options (email, text, native \"share dialog\") for sharing user codes.\n *\n * @type {DropdownActionItem[]} An array of options to share the user code, displayed in the dropdown\n */\n @computed('shouldShowShareWithContactButton', 'shouldShowShareSmsButton')\n get shareResidentVisitorUserCodeOptions() {\n const { intl } = this;\n const sharingOptions = [\n {\n name: intl.t('services.users.pointcentral-share-user.shareNatively'),\n icon: 'upload',\n action: () => this.shareUserCode(),\n visible: this.shouldShowShareWithContactButton\n },\n {\n name: intl.t('services.users.pointcentral-share-user.sendSms'),\n icon: 'sms',\n action: () => this.shareUserCodeSms(),\n visible: this.shouldShowShareSmsButton\n },\n {\n name: intl.t('services.users.pointcentral-share-user.sendEmail'),\n icon: 'email',\n action: () => this.shareUserCodeEmail(),\n visible: true\n }\n ];\n\n return sharingOptions.filterBy('visible').map((sharingOption) =>\n DropdownActionItem.create({\n name: sharingOption.name,\n icon: sharingOption.icon,\n action: sharingOption.action\n })\n );\n }\n\n /**\n * Should the share user code options include the 'share with contact' option?\n * This option should only be available for resident visitors.\n */\n @computed(\n 'contextManager.identityModel.{isPointCentral,loginIsEnterprise}',\n 'user.{isResidentVisitor,isEnterprise}'\n )\n get shouldShowShareWithContactButton() {\n const { identityModel } = this.contextManager;\n const { user } = this;\n\n if (identityModel === undefined || user === undefined) {\n return false;\n }\n\n return identityModel.isPointCentral && this.shareUser.isSingleSystemLoginWithResidentVisitor(user);\n }\n\n /**\n * Should we show the share by SMS button?\n */\n @computed(\n 'contextManager.identityModel.{isPointCentral,loginIsEnterprise}',\n 'user.{isResidentVisitor,isEnterprise}'\n )\n get shouldShowShareSmsButton() {\n const { identityModel } = this.contextManager;\n const { user } = this;\n\n if (identityModel === undefined || user === undefined) {\n return false;\n }\n\n // Should be a PC login.\n return identityModel.isPointCentral;\n }\n\n /**\n * Generate the user contact type indicator.\n */\n @computed('user.userType')\n get contactUserTypeIndicator() {\n return (\n this.intl.t('components.users.item.user-overview.userType') +\n ': ' +\n Object.keys(ContactUserType)[Object.values(ContactUserType).indexOf(this.user.userType)]\n );\n }\n\n /**\n * Launches a native \"share dialog\" based on the user to share, and the element to anchor the popover (iPad).\n */\n @action\n async shareUserCode() {\n return this.shareUserService.shareUserCode(this.user, '.share-user-code .simple-btn');\n }\n\n /**\n * Sends a welcome text to all mobile addresses on the contact.\n */\n @action\n async shareUserCodeSms() {\n return this.user.isResidentVisitor\n ? this.shareUserService.shareUserCodeSms(this.user, '.share-user-code .simple-btn')\n : this.shareUserService.sendPointCentralWelcomeText(this.user, '.share-user-code .simple-btn');\n }\n\n /**\n * Sends a welcome email to email addresses on the contact.\n */\n @action\n async shareUserCodeEmail() {\n return this.shareUserService.shareUserCodeEmail(this.user, '.share-user-code .simple-btn');\n }\n\n /**\n *\n * @returns {Promise}\n */\n @action\n async unpauseUser() {\n try {\n const user = await this.user;\n if (user.activeDirectoryFlag) {\n this.notificationManager.addError(this.intl.t('access-control.users.edit.index.adUnpauseFailure'));\n return;\n }\n\n let userName = user.displayName;\n\n await user.pauseUnpauseUser(false);\n this.notificationManager.addSuccess(\n this.intl.t('access-control.users.edit.index.unpauseSuccess', { userName })\n );\n this.user.reload();\n } catch (exception) {\n // The backend controller will return an error if this was not successful.\n console.log(exception);\n }\n }\n\n /**\n *\n * @returns {Promise}\n */\n @action\n async pauseUser() {\n try {\n const user = await this.user;\n if (user.activeDirectoryFlag) {\n this.notificationManager.addError(this.intl.t('access-control.users.edit.index.adPauseFailure'));\n return;\n }\n\n let userName = user.displayName;\n\n await user.pauseUnpauseUser(true);\n this.notificationManager.addSuccess(\n this.intl.t('access-control.users.edit.index.pauseSuccess', { userName })\n );\n this.user.reload();\n } catch (exception) {\n // The backend controller will return an error if this was not successful.\n console.log(exception);\n }\n }\n\n /**\n * Load the User Type Relocation tour if the login hasn't viewed it yet and needs to.\n */\n @action\n loadUserTypeRelocationTourIfNeeded() {\n if (\n this.contextManager.identityModel.helpTours.includes(UserTypeRelocationTour) &&\n document.querySelector(getAnchorSelector('user-type-relocation-anchor'))\n ) {\n startUserTypeRelocationTour.call(this);\n }\n }\n\n /**\n * Attempts to assign the passed-in user a backup code user.\n *\n * @param {models.users.User} user The user to which we'd like to assign the backup code.\n */\n @action\n async assignBackupCode(user) {\n const { intl, notificationManager } = this,\n userFullName = user.firstName + ' ' + user.lastName + ' #2';\n\n (async () => {\n const locationsWithAccess = await getNonCommonAreaLocations.call(this);\n\n // If we have no or more than one location to which the user has access, do not allow\n // the login to assign the backup code user.\n if (locationsWithAccess?.length !== 1) {\n notificationManager.addError(intl.tc(this, 'backupCodeUserFailure'));\n return;\n }\n\n const unitDescription = locationsWithAccess.firstObject.description;\n this.modals.showConfirmationDialog(\n intl.tc(this, 'assignBackupCode'),\n intl.tc(this, 'assignBackupCodeConfirmation', {\n userFullName,\n unitDescription\n }),\n {\n text: intl.t('generic.confirm'),\n css: 'btn-color-danger',\n action: async () => {\n const userCode = await user.assignBackupCodeUser();\n notificationManager.addSuccess(\n intl.tc(this, 'backupCodeUserSuccess', {\n userFullName,\n unitDescription,\n userCode: userCode.value\n }),\n 0\n );\n }\n }\n );\n })();\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{yield}}\\n\\n {{#each this.userProfileBannerItems as |bannerItem|}}\\n \\n {{/each}}\\n
\",{ moduleName: \"customer-site/components/users/item/user-profile-banner/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed, action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { InvitationExpired, InvitationSent } from 'customer-site/enums/MobileCredentialInvitationStatus';\nimport { ISSUE } from '@adc/ui-components/components/adc-banner';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { AdcBannerSignature } from '@adc/ui-components/components/adc-banner';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type BasePermissionsCollection from 'customer-site/models/users/base-permissions-collection';\nimport type BaseUser from 'customer-site/models/users/base-user';\nimport type AjaxService from 'customer-site/services/ajax';\n\ntype AdcBannerSignatureArgs = AdcBannerSignature['Args'];\n\ninterface UserProfileBannerSignature {\n Args: {\n user: BaseUser;\n permissions: BasePermissionsCollection;\n };\n Blocks: {\n default: [];\n };\n}\n\ntype BannerItem = Pick & {\n showItem: boolean;\n action: () => Promise;\n class: string;\n};\n\n/**\n * Class for the Banner displayed at the top of the User Profile.\n * Shows information like the Mobile Credential invite status.\n */\nexport default class UserProfileBanner extends Component {\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n @service declare ajax: AjaxService;\n\n /**\n * Shows a banner based off the mobile credential invite status\n */\n @computed(\n 'markMobileCredentialInviteInvalid',\n 'args.permissions.viewMobileCredential',\n 'sendMobileCredentialInvite',\n 'args.user.{mobileCredentialInviteStatus,mobileCredentials.length}'\n )\n get userProfileBannerItems(): BannerItem[] {\n const { user, permissions } = this.args;\n\n if (!user || !permissions || user.mobileCredentials.length) {\n return [];\n }\n\n const inviteStatus = user.mobileCredentialInviteStatus;\n\n return [\n {\n showItem: permissions.viewMobileCredential && inviteStatus === InvitationExpired,\n type: 'ISSUE',\n message: this.intl.t('access-control.users.edit.index.bannerInvitationExpired'),\n optionText: this.intl.t('generic.resend'),\n action: this.sendMobileCredentialInvite,\n class: 'user-profile-banner-item mobile-credential-resend-banner'\n },\n {\n showItem: permissions.viewMobileCredential && inviteStatus === InvitationSent,\n type: ISSUE,\n message: this.intl.t('access-control.users.edit.index.bannerInvitationSent'),\n optionText: this.intl.t('access-control.users.edit.index.cancelInvitation'),\n action: this.markMobileCredentialInviteInvalid,\n class: 'user-profile-banner-item informative-colors mobile-credential-cancel-banner'\n }\n ].filterBy('showItem') as BannerItem[];\n }\n\n /**\n * Mark a user's mobile credential invite as invalid.\n */\n @action\n async markMobileCredentialInviteInvalid(): Promise {\n const { notificationManager } = this,\n { user } = this.args;\n\n try {\n await this.ajax.apiRequest(\n 'accessControl/accessControlUsers/markMobileCredentialInviteInvalid',\n undefined,\n user.id,\n 'POST'\n );\n } catch (error) {\n notificationManager.addError(error.errors[0].detail);\n return;\n }\n\n notificationManager.addSuccess(this.intl.t('access-control.users.edit.index.inviteCancelled'));\n user.reload();\n }\n\n /**\n * Send a mobile credential invite to the user, with preference for text.\n */\n @action\n async sendMobileCredentialInvite(): Promise {\n // Send either email or sms invite, with preference for email.\n const { notificationManager } = this,\n { user } = this.args,\n [, endpoint] =\n [\n [user.emailAddresses, 'sendEmailMobileCredentialInvite'],\n [user.mobileAddresses, 'sendSmsMobileCredentialInvite']\n ].find(([{ length }]) => length > 0) ?? [];\n\n if (endpoint) {\n try {\n await this.ajax.apiRequest(`accessControl/accessControlUsers/${endpoint}`, undefined, user.id, 'POST');\n } catch (error) {\n notificationManager.addError(error.errors[0].detail);\n return;\n }\n\n notificationManager.addSuccess(this.intl.t('access-control.users.edit.index.inviteResent'));\n user.reload();\n } else {\n notificationManager.addError(this.intl.t('access-control.users.edit.index.noContactAddresses'));\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::UserProfileBanner': typeof UserProfileBanner;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:default as |data|>\\n \\n \\n\",{ moduleName: \"customer-site/components/users/link-login-edit-route/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getErrorText } from 'customer-site/utils/ember';\nimport { ShellContact } from 'customer-site/enums/ContactUserType';\nimport DropdownSelectItem from '@adc/ui-components/utils/dropdown-select-item';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type { AvailableLoginsToLinkApiResponse } from 'customer-site/classes/users/edit/link-login/route';\nimport type UsersPermissionsCollectionModel from 'customer-site/models/users/permissions-collection';\nimport type User from 'customer-site/models/users/user';\nimport type ContextManager from 'customer-site/services/context-manager';\n\ninterface LinkLoginEditRouteComponentSignature {\n Args: {\n model: {\n user: Promise;\n permissions: Promise;\n availableLoginsToLink: Promise;\n };\n };\n}\n\ntype AwaitedObject = {\n [K in keyof T]: Awaited;\n};\n\n/**\n * @classDesc\n * Edit page component for managing the login linked to a user.\n */\nexport default class LinkLoginEditRouteComponent extends Component {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n @service declare modals: ModalService;\n\n resolvedModel?: AwaitedObject;\n\n /**\n * Creates the dropdown items of logins that can be linked to the contact.\n */\n @computed('resolvedModel.{availableLoginsToLink.availableLogins,user.loginId}')\n get availableLoginIdsDropdownItems(): Array {\n return (this.resolvedModel?.availableLoginsToLink.availableLogins ?? []).map(({ loginName, loginId }) =>\n DropdownSelectItem.create({\n name: loginName,\n value: String(loginId),\n state: this.resolvedModel?.user.loginId === loginId ? 2 : 0 // Preselect the login currently linked to the contact.\n })\n );\n }\n\n /**\n * If the login id linked to a contact is allowed to be unlinked.\n */\n @computed('resolvedModel.user')\n get shouldDeleteBtnBeVisible(): boolean {\n const user = this.resolvedModel?.user;\n return !user?.isPrimary && !!user?.loginId && user?.userType !== ShellContact;\n }\n\n /**\n * Attempt to link the login Id entered.\n */\n @action\n linkLoginId(): Promise {\n const user = this.resolvedModel?.user;\n return (\n user\n ?.save()\n .then(() => {\n this.notificationManager.addSuccess(this.intl.t('users.edit.link-login.Success'));\n // Reload model to make sure the existing email addresses are updated post-linkage.\n user.hasMany('emailAddresses').reload();\n })\n .catch((error) => {\n const errorText = getErrorText(error);\n if (errorText) {\n this.notificationManager.addError(errorText);\n }\n user.rollback();\n return Promise.reject();\n }) ?? Promise.resolve()\n );\n }\n\n /**\n * Attempt to unlink the current login Id.\n */\n @action\n unlinkLoginId(): void {\n this.modals.showDeleteModal({\n title: 'Unlink Login',\n message: 'Are you sure you want to unlink this login?',\n delete: () => {\n const user = this.resolvedModel?.user;\n if (user) {\n user.loginId = null;\n this.linkLoginId().then(() => this.contextManager.transitionToPreviousRoute());\n }\n }\n });\n }\n\n /**\n * Resets the user attributes when leaving the page with any unsaved changes.\n */\n @action\n back(): void {\n const user = this.resolvedModel?.user;\n if (user) {\n user.rollbackAttributes();\n }\n this.contextManager.transitionToPreviousRoute();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::LinkLoginEditRoute': typeof LinkLoginEditRouteComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n {{@user.displayName}}\\n
\\n\\n
\\n \\n
\\n
\",{ moduleName: \"customer-site/components/users/merge-users-list-item-credentials/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { NotificationsOnly } from 'customer-site/enums/PointCentralUserType';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type User from 'customer-site/models/users/user';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\nconst MAX_GROUP_SIZE_FOR_ALL_ACCESS_MESSAGE = 50;\n\ninterface MergeUsersListArgs {\n user: User;\n}\n\nexport default class MergeUsersListItemCredentials extends Component {\n @service declare intl: ADCIntlService;\n @service declare identityManager: IdentityManager;\n\n /**\n * Are we in an enterprise context?\n */\n @alias('identityManager.isEnterprise')\n declare isEnterprise: boolean;\n\n /**\n * Are we in a PointCentral context?\n */\n @alias('identityManager.isPointCentral')\n declare isPointCentral: boolean;\n\n /**\n * Whether we should show \"All Access\" and \"Partial Access\" or just \"Access\".\n * This can dramatically improve page load times for large groups.\n */\n @computed(\n 'args.user.deviceAccess.totalUnitsAvailableCount',\n 'deviceAccess.totalAvailableUnitsCount',\n 'isEnterprise',\n 'isPointCentral'\n )\n get shouldLoadAccessPointInformation(): boolean {\n const { user } = this.args;\n\n // Always allow the all-access text on single-system.\n if (this.isEnterprise === false) {\n return true;\n }\n\n // Never show the all-access text for PointCentral.\n if (this.isPointCentral === true) {\n return false;\n }\n\n // For non-PC enterprise users, only allow the all-access text on small groups.\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error deviceAccess is async, so we should await it before querying it's properties.\n return (user.deviceAccess?.totalUnitsAvailableCount || 0) <= MAX_GROUP_SIZE_FOR_ALL_ACCESS_MESSAGE;\n }\n\n /**\n * Gets the access badge information for the user item.\n */\n @computed(\n 'args',\n 'deviceAccess.accessPointCollectionsSummary.{hasAllDeviceAccess,isFulfilled}',\n 'deviceAccess.{isAllAccessUser,pointCentralUserType,userType,hasNoDeviceAccess}',\n 'isEnterprise',\n 'shouldLoadAccessPointInformation'\n )\n get accessSummaryText(): Promise | undefined {\n const { intl } = this,\n { user } = this.args;\n if (!user) {\n return undefined;\n }\n\n return (async () => {\n const deviceAccess = await user.deviceAccess;\n let accessPointCollectionsSummary;\n\n if (this.shouldLoadAccessPointInformation) {\n accessPointCollectionsSummary = await deviceAccess.accessPointCollectionsSummary;\n }\n\n if (deviceAccess.pointCentralUserType === NotificationsOnly || deviceAccess.hasNoDeviceAccess) {\n return intl.t('generic.noAccess');\n }\n // Loading the accessPointCollectionsSummary is very expensive for large enterprise groups, so don't load it in those cases.\n else if (this.shouldLoadAccessPointInformation && accessPointCollectionsSummary?.hasAllDeviceAccess) {\n return intl.t('generic.fullAccess');\n }\n\n return intl.t('generic.partialAccess');\n })();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::MergeUsersListItemCredentials': typeof MergeUsersListItemCredentials;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n <:toolbar>\\n \\n \\n\\n <:default>\\n \\n \\n <:icon>\\n \\n \\n <:detail>\\n \\n \\n <:value>\\n \\n \\n \\n \\n\\n \\n\\n \\n\\n \\n\",{ moduleName: \"customer-site/components/users/merge-users-list-component/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { sort } from '@ember/object/computed';\nimport { service } from '@ember/service';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type RouterService from '@ember/routing/router-service';\nimport type User from 'customer-site/models/users/user';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\ninterface MergeUsersListComponentSignature {\n Args: {\n model: {\n currentUserId: number;\n users: Array;\n totalCount: number;\n qp: { searchString: string; page: number; pageSize: number };\n };\n };\n}\n\nexport default class MergeUsersListComponent extends Component {\n @service declare intl: ADCIntlService;\n @service declare router: RouterService;\n @service declare store: Store;\n @service declare identityManager: IdentityManager;\n\n /**\n * Specifies how to sort reports.\n *\n */\n get sortName(): string[] {\n return ['firstName'];\n }\n\n /**\n * This array keeps track of all the users in the list.\n */\n @sort('args.model.users', 'sortName')\n declare users: Array;\n\n @tracked\n selectedPage = 1;\n\n pageSize = 25;\n\n searchString = this.args.model.qp.searchString;\n\n @action\n searchUsers(searchString: string): void {\n this.searchString = searchString;\n this.router.transitionTo({\n queryParams: { page: this.selectedPage, pageSize: this.pageSize, searchString }\n });\n }\n\n /**\n * Update the selected page.\n */\n @action\n changePage(page: number): void {\n this.selectedPage = page;\n this.router.transitionTo({\n queryParams: { page, pageSize: this.pageSize, searchString: this.searchString }\n });\n }\n\n @action\n transitionToMergePreview(user: User): void {\n const isAccessControl = this.identityManager.identityModel?.isAccessControl;\n const source_id = this.args.model.currentUserId;\n\n if (this.identityManager.isEnterprise) {\n if (isAccessControl) {\n this.router.transitionTo('enterprise.access-control.users.merge-users-preview', source_id, user.id);\n return;\n }\n\n this.router.transitionTo('enterprise.users.merge-users-preview', source_id, user.id);\n return;\n }\n\n if (isAccessControl) {\n this.router.transitionTo('access-control.users.merge-users-preview', source_id, user.id);\n return;\n }\n\n this.router.transitionTo('users.merge-users-preview', source_id, user.id);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::MergeUsersListComponent': typeof MergeUsersListComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n{{#if this.isAccessControl}}\\n \\n{{else if (is-enterprise)}}\\n \\n{{/if}}\\n{{#unless (or this.isAccessControl (is-enterprise))}}\\n \\n{{/unless}}\\n\",{ moduleName: \"customer-site/components/users/merge-users-preview-component/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type RouterService from '@ember/routing/router-service';\nimport type { BaseMergeUsersPreviewRouteModel } from 'customer-site/classes/users/base-merge-users-preview-route';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\ninterface MergeUsersPreviewComponentSignature {\n Args: {\n model: BaseMergeUsersPreviewRouteModel;\n };\n}\n\n@intlPath({ path: 'users.merge-users-preview-component' })\nexport default class MergeUsersPreviewComponent extends Component {\n @service declare identityManager: IdentityManager;\n @service declare ajax: AjaxService;\n @service declare router: RouterService;\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n\n get mobileCredentialModalOnLoad(): boolean {\n return false;\n }\n\n @action\n deleteUser(): void {\n return;\n }\n\n @action\n async mergeContacts(): Promise {\n const { ajax, notificationManager, intl } = this;\n const { ssuId, stuId } = this.args.model;\n\n const enterpriseRoute = this.identityManager.identityModel?.isEnterprise ? 'enterprise.' : '';\n const accessControlRoute = this.isAccessControl ? 'access-control.' : '';\n const redirectRoute = `${enterpriseRoute}${accessControlRoute}users`;\n\n try {\n await ajax.apiRequest(`users/mergeUsers/${ssuId}/${stuId}`, undefined, undefined, 'POST');\n notificationManager.addSuccess(intl.tc(this, 'mergeUsersSuccess'));\n this.router.transitionTo(redirectRoute);\n } catch (e) {\n notificationManager.addError(intl.tc(this, 'mergeUsersFail'));\n }\n }\n\n @computed('identityManager.identityModel.isAccessControl')\n get isAccessControl(): boolean {\n return this.identityManager.identityModel?.isAccessControl ?? false;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::MergeUsersPreviewComponent': typeof MergeUsersPreviewComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n {{#each this.displayedFields as |field|}}\\n \\n {{#if (not data.canViewUserAttributeValues)}}\\n \\n {{else if field.isDate}}\\n \\n {{else if field.isOptionSelect}}\\n \\n

\\n {{item.label}}\\n

\\n \\n {{else}}\\n \\n {{/if}}\\n
\\n {{/each}}\\n
\\n\\n\\n\",{ moduleName: \"customer-site/components/users/user-attributes/user-attribute-edit-page/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed, get } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { PointCentralUserType } from 'customer-site/enums/ContactAttribute';\nimport * as GenericInputType from 'customer-site/enums/GenericInputType';\nimport { Guest, NotificationsOnly, Other } from 'customer-site/enums/PointCentralUserType';\nimport { updateAccessPlanCollections } from 'customer-site/users/edit/device-access/route';\nimport { intlPath } from '@adc/i18n/path';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport { parse, format } from 'date-fns';\nimport { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz';\n\nimport './_style.scss';\n\n/**\n * @classdesc\n *\n * Edit page for individual contact attributes.\n *\n * @param {Object} model - the model passed in to the edit view page.\n */\n@intlPath({ path: 'users/user-attributes/user-attribute-edit-page' })\nexport default class UserAttributeEditPage extends Component {\n @service intl;\n @service notificationManager;\n @service contextManager;\n @service store;\n @service modals;\n\n /**\n * Resolved model from the route\n *\n * @type {Object}\n */\n @tracked\n resolvedModel;\n\n /**\n * Attribute collection model\n *\n * @type {UserAttributeCollection}\n */\n @alias('resolvedModel.userAttributeCollection')\n userAttributeCollection;\n\n /**\n * List of fields that this scope can use.\n *\n * @type {Array}\n */\n @alias('resolvedModel.availableUserAttributeFields')\n availableUserAttributeFields;\n\n /**\n * The specific user attribute id we're editing.\n *\n * @type {String}\n */\n @alias('args.model.userAttributeFieldId')\n userAttributeFieldId;\n\n /**\n * Can the logged in user see the user attribute values?\n *\n * @type {Boolean}\n */\n @alias('resolvedModel.canViewUserAttributeValues')\n canViewUserAttributeValues;\n\n /**\n * Attribute field we're currently editing.\n *\n * @type {UserAttributeField}\n */\n @computed('availableUserAttributeFields', 'userAttributeFieldId')\n get userAttributeFieldSelected() {\n return this.availableUserAttributeFields.findBy('id', this.userAttributeFieldId);\n }\n\n /**\n * List of fields to display.\n *\n * @type {Array}\n */\n @computed(\n 'availableUserAttributeFields',\n 'canViewUserAttributeValues',\n 'intl.timeZone',\n 'userAttributeCollection',\n 'userAttributeFieldSelected'\n )\n get displayedFields() {\n const {\n userAttributeFieldSelected,\n availableUserAttributeFields,\n userAttributeCollection,\n intl,\n canViewUserAttributeValues\n } = this;\n\n if (!userAttributeFieldSelected) {\n return [];\n }\n\n let attributeFieldsToDisplay = [];\n\n if (userAttributeFieldSelected.childAttributeFields.length) {\n userAttributeFieldSelected.childAttributeFields.forEach((attributeField) =>\n attributeFieldsToDisplay.push(attributeField)\n );\n } else {\n attributeFieldsToDisplay.push(userAttributeFieldSelected);\n }\n\n if (!userAttributeCollection || !availableUserAttributeFields) {\n return [];\n }\n\n return attributeFieldsToDisplay.map((attributeField) => {\n let displayObject = {\n attributeId: attributeField.id,\n name: attributeField.name,\n value: userAttributeCollection.attributeValues[attributeField.id]\n },\n dateValue = new Date(),\n isDate = attributeField.inputType === GenericInputType.Date;\n\n if (displayObject.value && !canViewUserAttributeValues) {\n displayObject.value = '*****';\n\n return {\n maxInputLength: attributeField.maxInputLength,\n ...displayObject\n };\n }\n\n if (displayObject.value && isDate) {\n dateValue = this.dateStringToObject(displayObject.value);\n }\n\n return {\n isText: attributeField.inputType === GenericInputType.Text,\n isNumber: attributeField.inputType === GenericInputType.Number,\n isOptionSelect: attributeField.inputType === GenericInputType.OptionSelect,\n isDate,\n maxInputLength: attributeField.maxInputLength,\n selectedDateValue: zonedTimeToUtc(dateValue, intl.timeZone),\n fieldOptions:\n attributeField.options !== null\n ? this.getOptionsAsListItems(attributeField.options, displayObject.value)\n : null,\n ...displayObject\n };\n });\n }\n\n /**\n * Takes an OptionsAttribute's options field and return them as BinaryListItems\n * @param {Record} options\n * @param {Number} selected\n * @returns {BinaryListItem} optionsAsListItems\n */\n getOptionsAsListItems(options, selected) {\n let optionsAsListItems = [];\n for (const key in options) {\n optionsAsListItems.addObject(\n new BinaryListItem({\n label: this.intl.tc(\n `components.users.user-attributes.user-attribute-list.pointCentralUserTypeDescription-${key}`\n ),\n state: key === selected,\n disabled: false,\n props: {\n value: key\n }\n })\n );\n }\n\n //Make sure that the options for the PointCentralUserType are in the right order\n if (this.userAttributeFieldId == PointCentralUserType) {\n const notificationsOnlyOption = optionsAsListItems.find(\n (option) => option.props.value == NotificationsOnly\n );\n const otherOption = optionsAsListItems.find((option) => option.props.value == Other);\n\n //Sort the user types alphabetically\n optionsAsListItems = optionsAsListItems.sortBy('label');\n\n //Add \"Other\" and \"Notifcations Only\" to the bottom of the list\n optionsAsListItems.push(optionsAsListItems.splice(optionsAsListItems.indexOf(otherOption), 1)[0]);\n optionsAsListItems.push(\n optionsAsListItems.splice(optionsAsListItems.indexOf(notificationsOnlyOption), 1)[0]\n );\n }\n\n return optionsAsListItems;\n }\n\n /**\n * When data is loaded, save current state of attribute values.\n *\n * @param {Object} resolvedModel - resolved model from the route.\n */\n @action\n dataLoaded(resolvedModel) {\n this.resolvedModel = resolvedModel;\n this.resolvedModel.userAttributeCollection.cacheAttributeValues();\n }\n\n /**\n * Updates appropriate field when changed.\n *\n * @param {UserAttributeField} field - Attribute field for value being edited.\n * @param {String | Number} value - value being updated.\n */\n @action\n inputValueChanged(field, value) {\n this.userAttributeCollection.attributeValues[field.attributeId] = String(value);\n }\n\n /**\n * Updates date field when changed.\n *\n * @param {UserAttributeField} field - Attribute field for value being edited.\n * @param {Date} value - Date value being updated.\n */\n @action\n inputDateValueChanged(field, value) {\n this.userAttributeCollection.attributeValues[field.attributeId] = this.dateObjectToString(\n utcToZonedTime(value, this.intl.timeZone)\n );\n }\n\n /**\n * Updates appropriate Options field when changed.\n *\n * @param {UserAttributeField} field - Attribute field for value being edited.\n * @param {Array} value - value being updated.\n */\n @action\n inputOptionsValueChanged(field, value) {\n this.userAttributeCollection.attributeValues[field.attributeId] = value.findBy('state', true).props.value;\n }\n\n /**\n * Save the user attribute values and navigate to previous page.\n *\n * @param {UserAttributeCollection} userAttributeCollection - User attributes to save\n * @returns {Promise}\n */\n @action\n async save(userAttributeCollection) {\n if (\n this.userAttributeFieldSelected.inputType === GenericInputType.Date &&\n !userAttributeCollection.attributeValues[this.userAttributeFieldId]\n ) {\n // If we don't have any date selected, save the current date instead.\n userAttributeCollection.attributeValues[this.userAttributeFieldId] = this.dateObjectToString(new Date());\n }\n\n if (this.userAttributeFieldId == PointCentralUserType) {\n return this.savePointCentralUserTypeHelper(userAttributeCollection);\n }\n\n return this.saveUserAttributes(userAttributeCollection, 'userAttributeSaved');\n }\n\n /**\n * Performs preprocessing of the contact before saving its new user type\n * Depending on the user type, it may handle the actual saving of the new user type and any other attribute changes\n * @param {UserAttributeCollection} userAttributeCollection - User attributes to save\n * @returns\n */\n async savePointCentralUserTypeHelper(userAttributeCollection) {\n const deviceAccess = await get(this.resolvedModel.user, 'deviceAccess');\n if (!deviceAccess) {\n return this.saveUserAttributes(userAttributeCollection, 'userAttributeSaved');\n }\n\n const accessPointCollectionsSummary = await get(deviceAccess, 'accessPointCollectionsSummary');\n\n //Show the notifications only confirmation modal\n if (Number(userAttributeCollection.attributeValues[PointCentralUserType]) === NotificationsOnly) {\n this.modals.showConfirmationDialog(\n this.intl.t('users.edit.user-type.confirmNotificationsOnlyTitle'),\n this.intl.t('users.edit.user-type.confirmNotificationsOnlyDescription'),\n {\n text: this.intl.t('generic.save'),\n action: async () => {\n // Save device Access and access point collections summary since changing the user type to notifications only will cause a user to lose all access.\n deviceAccess.set(\n 'pointCentralUserType',\n Number(userAttributeCollection.attributeValues[PointCentralUserType])\n );\n\n if (accessPointCollectionsSummary) {\n accessPointCollectionsSummary.save().then(async () => {\n await deviceAccess.reload();\n });\n }\n return this.saveUserAttributes(userAttributeCollection, 'userAttributeSaved');\n }\n }\n );\n return;\n }\n\n if (\n Number(userAttributeCollection.attributeValues[PointCentralUserType]) === Guest ||\n Number(userAttributeCollection.attributeValuesCache[PointCentralUserType]) === Guest\n ) {\n this.modals.showConfirmationDialog(\n this.intl.t('users.edit.user-type.confirmGuestTitle'),\n this.intl.t('users.edit.user-type.confirmGuestDescription'),\n {\n text: this.intl.t('generic.save'),\n action: () =>\n this._saveUserTypeAndAttributes(\n deviceAccess,\n accessPointCollectionsSummary,\n userAttributeCollection\n )\n }\n );\n return;\n }\n\n return this._saveUserTypeAndAttributes(deviceAccess, accessPointCollectionsSummary, userAttributeCollection);\n }\n\n /**\n * Helper method to save user type and attributes.\n *\n * @param {DeviceAccess} deviceAccess - Device access object.\n * @param {AccessPointCollectionsSummary} accessPointCollectionsSummary - Access point collections summary object.\n * @param {UserAttributeCollection} userAttributeCollection - User attribute collection object.\n * @returns {Promise}\n */\n async _saveUserTypeAndAttributes(deviceAccess, accessPointCollectionsSummary, userAttributeCollection) {\n deviceAccess.set('pointCentralUserType', Number(userAttributeCollection.attributeValues[PointCentralUserType]));\n deviceAccess.save();\n\n if (accessPointCollectionsSummary) {\n // Update the access plans that this user is associated with from its user type\n await updateAccessPlanCollections(\n this.store,\n accessPointCollectionsSummary,\n deviceAccess.pointCentralUserType\n );\n }\n\n return this.saveUserAttributes(userAttributeCollection, 'userAttributeSaved');\n }\n\n /**\n * Delete the user attribute values and navigate to previous page.\n */\n @action\n delete() {\n const { userAttributeFieldSelected, userAttributeCollection } = this;\n\n if (userAttributeFieldSelected.childAttributeFields.length) {\n userAttributeFieldSelected.childAttributeFields.forEach((childAttribute) => {\n userAttributeCollection.attributeValues[childAttribute.id] = '';\n });\n } else {\n userAttributeCollection.attributeValues[userAttributeFieldSelected.id] = '';\n }\n\n return this.saveUserAttributes(userAttributeCollection, 'userAttributeDeleted');\n }\n\n /**\n * Method for saving user attribute collection.\n *\n * @param {UserAttributeCollection} userAttributeCollection - user attribute collection to save\n * @param {String} successMessageKey - translation key for save action.\n * @returns {Promise}\n */\n saveUserAttributes(userAttributeCollection, successMessageKey) {\n const { userAttributeFieldSelected, notificationManager, contextManager, intl } = this;\n return userAttributeCollection.saveModel().then(() => {\n notificationManager.addSuccess(intl.tc(this, successMessageKey, { name: userAttributeFieldSelected.name }));\n contextManager.transitionToPreviousRoute();\n });\n }\n\n /**\n * Convert a date object to a string for DB storage.\n *\n * @param {Date} date - Date to convert.\n * @returns {String}\n */\n dateObjectToString(date) {\n return format(date, 'yyyy-MM-dd');\n }\n\n /**\n * Convert a stored date string to a date object\n *\n * @param {String} dateString - string to convert.\n * @returns {Date}\n */\n dateStringToObject(dateString) {\n return parse(dateString, 'yyyy-MM-dd', new Date(0, 0, 0, 12));\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n \\n \\n \\n\",{ moduleName: \"customer-site/components/users/user-attributes/user-attribute-list-page/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnly from '@ember/component/template-only';\n\nconst UserAttributeListPage = templateOnly();\n\n/**\n * @classdesc\n *\n * Page for adding or editing user attributes.\n *\n */\nexport default UserAttributeListPage;\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n {{#if @availableUserAttributeFields}}\\n {{#unless @showCardDesign}}\\n \\n {{/unless}}\\n\\n {{#if this.displaySearchBar}}\\n \\n {{/if}}\\n\\n {{#each this.displayedUserAttributes as |userAttribute|}}\\n \\n {{/each}}\\n {{#if this.showAddUserAttributesOption}}\\n {{#if @showCardDesign}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n
\\n\",{ moduleName: \"customer-site/components/users/user-attributes/user-attribute-list/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { computed, action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { PointCentralUserType } from 'customer-site/enums/ContactAttribute';\nimport { Date as GenericInputTypeDate } from 'customer-site/enums/GenericInputType';\nimport { intlPath } from '@adc/i18n/path';\nimport { parse } from 'date-fns';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { PeopleCardStyleSignature } from 'customer-site/components/people/container/card-style/index';\nimport type UserAttributeCollection from 'customer-site/models/users/user-attributes/user-attribute-collection';\nimport type UserAttributeField from 'customer-site/models/users/user-attributes/user-attribute-field';\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface UserAttributeListSignature {\n Element: HTMLDivElement;\n Args: Pick & {\n /** Model that contains a contact's attributes. */\n userAttributeCollection: UserAttributeCollection;\n /** List of attributes available to the user. */\n availableUserAttributeFields: Array;\n /** Are we on the main user attributes page? */\n isOnUserAttributesPage: boolean;\n /** Edit user attribute route. */\n editUserAttributeRouteId: number;\n /** Route for list of new user attributes to choose from. */\n newUserAttributeRouteId: number;\n /** Can the values for individual attributes be seen? */\n canViewUserAttributeValues: boolean;\n /** Is the component in Read-only mode? */\n isReadOnly: boolean;\n };\n}\n\ntype DisplayField = {\n attributeId: number;\n name: string;\n value: string;\n readOnly: boolean;\n isPersonallyIdentifiableInformation: boolean;\n childrenHaveValues: boolean;\n dataTourAnchor: string;\n};\n\n/**\n * @classdesc\n *\n * Component that displays a list of available user attributes and displays the ones that\n * a user has.\n */\n@intlPath({ path: 'users/user-attributes/user-attribute-list' })\nexport default class UserAttributeList extends Component {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n\n /**\n * String for determining what attributes to display\n * */\n @tracked\n searchString = '';\n\n /**\n * Are we in an enterprise context?\n * */\n @alias('contextManager.isEnterprise')\n isEnterprise?: boolean;\n\n /**\n * Do we display the search bar for 'User Information'?\n * Yes, if we have more than one attribute field and isReadOnly is falsy\n */\n @computed('args.{availableUserAttributeFields.length,isReadOnly}')\n get displaySearchBar(): boolean {\n return this.args.availableUserAttributeFields.length > 1 && !this.args.isReadOnly;\n }\n\n /**\n * Displays a list of user attributes depending on passed in user attributes collection and available attributes.\n * */\n @computed(\n 'args.{userAttributeCollection,availableUserAttributeFields,isOnUserAttributesPage,canViewUserAttributeValues}',\n 'searchString',\n 'intl'\n )\n get displayedUserAttributes(): Array {\n const {\n userAttributeCollection,\n availableUserAttributeFields,\n isOnUserAttributesPage,\n canViewUserAttributeValues\n } = this.args,\n { searchString, intl } = this;\n\n if (!userAttributeCollection || !availableUserAttributeFields) {\n return [];\n }\n\n return availableUserAttributeFields\n .map((attributeField) => {\n const attributeId = Number(attributeField.id);\n\n const displayObject: DisplayField = {\n attributeId,\n name: attributeField.name,\n value: userAttributeCollection.attributeValues[attributeId] ?? '',\n readOnly: userAttributeCollection.readOnlyAttributes.includes(attributeId),\n isPersonallyIdentifiableInformation: attributeField.isPersonallyIdentifiableInformation,\n childrenHaveValues: false,\n dataTourAnchor: attributeId === PointCentralUserType ? 'user-type-relocation-anchor' : ''\n },\n childValues: Array> = [];\n\n if (!displayObject.name.toLowerCase().includes(searchString.toLowerCase())) {\n return undefined;\n }\n\n attributeField.childAttributeFields.toArray().forEach((childAttribute) => {\n const value = userAttributeCollection.attributeValues[Number(childAttribute.id)];\n if (value) {\n childValues.push(value);\n }\n });\n\n if (childValues.length) {\n displayObject.childrenHaveValues = true;\n displayObject.value = childValues.join(', ');\n }\n\n if (!isOnUserAttributesPage && !displayObject.value) {\n // If we're not on the main user attributes page then we should only show attributes\n // that the user has values for.\n return undefined;\n }\n\n if (\n displayObject.value &&\n !canViewUserAttributeValues &&\n displayObject.isPersonallyIdentifiableInformation\n ) {\n // If we aren't showing user attribute values then the values themselves will always be a string, so\n // no need to convert values depending on type.\n displayObject.value = '*****';\n displayObject.readOnly = true;\n return displayObject;\n }\n\n if (displayObject.value && attributeField.inputType === GenericInputTypeDate) {\n const dateValue = parse(displayObject.value, 'yyyy-MM-dd', new Date(0, 0, 0, 12));\n\n displayObject.value = intl.formatDateTz(dateValue, {\n format: 'shortDateFormat'\n });\n }\n\n // Make sure PointCentralUserType attributes use their string representation\n if (displayObject.value && displayObject.attributeId === PointCentralUserType) {\n displayObject.value = intl.tc(this, `pointCentralUserTypeDescription-${displayObject.value}`);\n }\n\n return displayObject;\n })\n .compact();\n }\n\n /**\n * Should we show the option for adding user attributes?\n *\n * */\n @computed(\n 'args.{userAttributeCollection,displayedUserAttributes,isOnUserAttributesPage,canViewUserAttributeValues,isReadOnly}'\n )\n get showAddUserAttributesOption(): boolean {\n const {\n userAttributeCollection,\n availableUserAttributeFields,\n isOnUserAttributesPage,\n canViewUserAttributeValues,\n isReadOnly\n } = this.args;\n\n if (isOnUserAttributesPage || !canViewUserAttributeValues || isReadOnly) {\n // We only want the 'Add other' option to show up when not on the main user attribute list page since the button\n // transitions to it.\n return false;\n }\n\n // The button should not show up if every available attribute has a value already.\n return !availableUserAttributeFields.every((attributeField) => {\n if (userAttributeCollection.attributeValues[Number(attributeField.id)]) {\n return true;\n }\n\n return attributeField.childAttributeFields\n .toArray()\n .some((childAttribute) => !!userAttributeCollection.attributeValues[Number(childAttribute.id)]);\n });\n }\n\n /**\n * Routes to the appropriate edit attribute page.\n *\n * @param userAttributeFieldId - attribute id of value being edited.\n * */\n @action\n editUserAttribute(userAttributeFieldId: number): void {\n this.contextManager.transitionToNativeRoute(this.args.editUserAttributeRouteId, [userAttributeFieldId]);\n }\n\n /**\n * Routes to the page that gives a list of attributes to use.\n * */\n @action\n addNewUserAttribute(): void {\n this.contextManager.transitionToNativeRoute(this.args.newUserAttributeRouteId);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::UserAttributes::UserAttributeList': typeof UserAttributeList;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#unless (eq this.availableRoutes 0)}}\\n \\n
\\n {{#each this.drillThroughItems as |item|}}\\n \\n\\n {{/each}}\\n
\\n \\n{{/unless}}\",{ moduleName: \"customer-site/components/people/item/access-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport {\n EmberEditUserAccessPeriod,\n EmberEditUserDeviceAccess,\n ManageLoginPermissions\n} from 'customer-site/enums/CustomerPageUrl';\nimport { intlPath } from '@adc/i18n/path';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type User from 'customer-site/models/users/user';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\ninterface AccessCardComponentArgs {\n id: User['id'];\n isPrimary: User['isPrimary'];\n remoteLoginId?: User['loginId'];\n}\n\ninterface AccessCardDrillThroughItem {\n icon: string;\n title: string;\n borderBottom?: boolean;\n action: () => any;\n}\n\n// Bitmask values repersenting the routes a user has access to.\nenum Routes {\n None = 0,\n LocalAccess = 1,\n LocalSchedule = 2,\n RemoteAccess = 4\n}\n\n@intlPath({ path: 'people/item/access-card' })\nexport default class AccessCard extends Component {\n @service declare contextManager: ContextManager;\n @service declare navigation: NavigationService;\n @service declare intl: ADCIntlService;\n\n /**\n * Is the page being viewed in the mobile app.\n */\n @alias('contextManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * The list of available routes repersented as a bitmask.\n */\n get availableRoutes(): Routes {\n let routes = Routes.None;\n\n if (this.navigation.userHasAccess(EmberEditUserDeviceAccess)) {\n routes += Routes.LocalAccess;\n }\n\n if (!this.args.isPrimary && this.navigation.userHasAccess(EmberEditUserAccessPeriod)) {\n routes += Routes.LocalSchedule;\n }\n\n // Don't show for the primary login or mobile. THe ManageLoginPermissions\n // page isn't available on mobile yet.\n if (\n !this.args.isPrimary &&\n !this.isMobileApp &&\n this.args.remoteLoginId &&\n this.navigation.userHasAccess(ManageLoginPermissions)\n ) {\n routes += Routes.RemoteAccess;\n }\n\n return routes;\n }\n\n /**\n * The list of items that should be displayed in the component.\n */\n get drillThroughItems(): Array {\n const items: Array = [];\n\n if (this.isRouteAvailable(Routes.LocalAccess)) {\n items.push({\n icon: 'scenes-home',\n title: this.intl.tc(this, 'localAccess'),\n action: () => this.navigation.transitionToRouteId(EmberEditUserDeviceAccess, this.args.id)\n });\n }\n\n if (this.isRouteAvailable(Routes.LocalSchedule)) {\n items.push({\n icon: 'clock',\n title: this.intl.tc(this, 'localSchedule'),\n action: () => this.navigation.transitionToRouteId(EmberEditUserAccessPeriod, this.args.id)\n });\n }\n\n if (this.isRouteAvailable(Routes.RemoteAccess)) {\n items.push({\n icon: 'mobile',\n title: this.intl.tc(this, 'remoteAccess'),\n action: () =>\n this.navigation.transitionToRouteId(ManageLoginPermissions, {\n queryParams: {\n loginId: this.args.remoteLoginId\n }\n })\n });\n }\n\n return items;\n }\n\n /**\n * Checks if the given route value is available.\n *\n * @param route The route value to be checked.\n */\n private isRouteAvailable(route: Routes): boolean {\n return Boolean(this.availableRoutes & route);\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'People::Item::AccessCard': typeof AccessCard;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n \\n {{#if item.isButton}}\\n {{!-- @glint-expect-error LinkTo says it requires a query parameter? --}}\\n \\n \\n <:value>\\n

{{item.value}}

\\n \\n \\n
\\n
\\n {{else}}\\n \\n <:icon>\\n \\n \\n \\n {{/if}}\\n
\\n
\\n\",{ moduleName: \"customer-site/components/people/item/access-info-card/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type User from 'customer-site/models/users/user';\nimport type NavigationService from 'customer-site/services/navigation';\n\ninterface AccessInfoCardComponentArgs {\n userId: User['id'];\n loginName: User['loginName'];\n isPrimary: User['isPrimary'];\n deviceAccess: DeviceAccessModel | undefined;\n isSmrfSupported: User['isSmrfSupported'];\n isSmrfVisible: Promise | boolean;\n}\n\ninterface AccessInfoCardItem {\n isButton: boolean;\n icon: string;\n description: string;\n value?: string;\n route?: string;\n}\n\n@intlPath({ path: 'people/item/access-info-card' })\nexport default class AccessInfoCard extends Component {\n @service declare navigation: NavigationService;\n @service declare intl: ADCIntlService;\n\n get cardItems(): Array {\n const items: Array = [];\n\n if (this.args.isPrimary) {\n items.push({\n isButton: false,\n icon: 'favorite',\n description: this.intl.tc(this, 'primary')\n });\n }\n\n items.push({\n isButton: true,\n icon: 'scenes-home',\n description: this.intl.tc(this, 'localAccess'),\n value: this.args.deviceAccess?.get('userCode') != '' ? '****' : '',\n route: 'users.edit.device-access'\n });\n\n items.push({\n isButton: true,\n icon: 'login',\n description: this.intl.tc(this, 'username'),\n value: this.args.loginName,\n route: 'users.edit.user-information'\n });\n\n if (this.args.isSmrfSupported) {\n items.push({\n isButton: true,\n icon: 'facial-recognition',\n description: this.intl.tc(this, 'facialRecognition'),\n route: 'users.edit.face-recognition'\n });\n }\n\n return items;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'People::Item::AccessInfoCard': typeof AccessInfoCard;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{!-- @glint-nocheck:\\n Convert to PageView::Details\\n model.user is a promise, so we need to use get to access deviceAccess\\n Convert users/item/user-overview to TS\\n--}}\\n\\n \\n\\n {{#if data.user.deviceAccess.warningMessage}}\\n \\n {{/if}}\\n\\n {{#if (and this.hasPointCentralMobileCredentialsFeatureToggle (not @isReadOnly))}}\\n \\n {{/if}}\\n\\n \\n {{#if data.user.deviceAccess}}\\n \\n {{/if}}\\n\\n {{#if @isSmrfVisible}}\\n \\n {{/if}}\\n\\n \\n {{#if @showUserTypeDrillThrough}}\\n
\\n \\n
\\n {{/if}}\\n
\\n\\n \\n {{#if this.user.canViewLocaleControl}}\\n
\\n \\n
\\n {{/if}}\\n\\n {{#if this.deviceAccess.temporarySchedule.isExpired}}\\n \\n

{{t \\'users.edit.index.expiredUserWarning\\'}}

\\n
\\n {{/if}}\\n
\\n\\n \\n\\n \\n
\\n\\n {{#if (and (not @isReadOnly) this.user.canBeMerged this.resolvedModel.permissions.canMergeUser)}}\\n \\n {{/if}}\\n\\n {{#if @showMergeUsersButton}}\\n \\n {{/if}}\\n\\n\\n{{!-- The people section is for testing only and will be removed once the people specific routes are ready to be created. --}}\\n{{#if (can-view-people-ui)}}\\n \\n {{#if (await data)}}\\n
\\n \\n \\n \\n \\n\\n \\n \\n\\n \\n\\n {{#if @canBeDeleted}}\\n \\n {{/if}}\\n
\\n {{/if}}\\n \\n{{/if}}\",{ moduleName: \"customer-site/components/users/user-edit/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { alias, bool } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport {\n EmberEditUserContactInformation,\n EmberUsersAddContactAddress,\n EmberUsersLinkLogin\n} from '../../../enums/CustomerPageUrl';\n\nimport type LocaleModel from '@adc/app-infrastructure/models/locale';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type Configuration from 'customer-site/models/systems/configuration';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type ContactAddress from 'customer-site/models/users/contact-address';\nimport type UsersPermissionsCollectionModel from 'customer-site/models/users/permissions-collection';\nimport type User from 'customer-site/models/users/user';\nimport type { ResolvedObject } from 'customer-site/utils/type-utils';\nimport type {\n EmberEditUserInformation,\n EmberUserEditLanguage,\n EmberEditUserAccessPeriod,\n EmberEditUserDeviceAccess,\n EmberEditUserType,\n EmberEditUserAttributes,\n EmberEditUserAttributesEdit,\n EmberUsersUsername,\n EmberUsers\n} from '../../../enums/CustomerPageUrl';\nimport type { UserAttributeListSignature } from '../user-attributes/user-attribute-list/index';\n\nexport interface UsersEditIndexComponentSignature {\n Args: {\n model: Pick & {\n permissions: ADCAsyncStoreFindRecord;\n systemConfig?: ADCAsyncStoreFindRecord;\n user: ADCAsyncStoreFindRecord;\n };\n mobileCredentialModalOnLoad: boolean;\n setMobileModalOnLoadPropertyTrue: VoidFunction;\n routeMap: {\n accessPeriod: typeof EmberEditUserAccessPeriod;\n deviceAccess: typeof EmberEditUserDeviceAccess;\n userInformation: typeof EmberEditUserInformation;\n languagePreference: typeof EmberUserEditLanguage;\n userType: typeof EmberEditUserType;\n addNewUserAttribute: typeof EmberEditUserAttributes;\n editUserAttribute: typeof EmberEditUserAttributesEdit;\n username: typeof EmberUsersUsername;\n usernameRedirect: typeof EmberUsers;\n userEditContactInformationRoute: typeof EmberEditUserContactInformation;\n };\n isViewingOwnProfile?: boolean;\n deleteUser: VoidFunction;\n addAddress: VoidFunction;\n canBeDeleted: boolean;\n addCredential: VoidFunction;\n editCredential: VoidFunction;\n deleteCredential: VoidFunction;\n linkLogin: VoidFunction;\n showUserTypeDrillThrough: boolean;\n currentUserType: string;\n isSmrfVisible: boolean;\n showMergeUsersButton?: boolean;\n isReadOnly?: boolean;\n mergeContacts: VoidFunction;\n };\n}\n\ntype Model = UsersEditIndexComponentSignature['Args']['model'];\n\nexport default class UsersEditIndexComponent extends Component {\n @service declare nativeBridge: ServiceRegistry['native-bridge'];\n @service declare navigation: ServiceRegistry['navigation'];\n @service declare contextManager: ServiceRegistry['context-manager'];\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare modals: ServiceRegistry['modals'];\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare intl: ServiceRegistry['adc-intl'];\n\n @tracked resolvedModel?: ResolvedObject<\n Pick\n >;\n\n /**\n * An alias to the {@link models.users.User} model.\n */\n @alias('resolvedModel.user')\n user?: ResolvedObject['user'];\n\n /**\n * An alias to the {@link models.permissions} model.\n */\n @alias('resolvedModel.permissions')\n permissions?: ResolvedObject['permissions'];\n\n /**\n * An alias to the {@link models.users.access.DeviceAccess} model.\n */\n @alias('resolvedModel.user.deviceAccess')\n deviceAccess?: DeviceAccessModel;\n\n @bool('identityManager.pointCentralIdentity.hasPointCentralMobileCredentialsFeatureToggle')\n declare hasPointCentralMobileCredentialsFeatureToggle: boolean;\n\n /**\n * Updates the permissions record by reloading it from the server.\n */\n @action\n async syncUserPermissions(): Promise {\n (await this.permissions)?.reload();\n }\n\n userEditContactInformationRoute = EmberEditUserContactInformation;\n\n userAddContactAddressRoute = EmberUsersAddContactAddress;\n\n userLinkLoginRoute = EmberUsersLinkLogin;\n\n @alias('resolvedModel.systemConfig')\n systemConfig?: ResolvedObject['systemConfig'];\n\n /**\n * Display name the for locale of the user's current language preference.\n *\n * @function\n * @returns {Promise}\n */\n @computed('identityManager.identityModel.profile.availableLocales', 'user.localeId')\n get currentLocaleDisplayName(): string {\n const user = this.user;\n const availableLocales = this.identityManager.identityModel?.profile.availableLocales,\n currentLocale: LocaleModel | Record =\n availableLocales?.find((item) => item.id === String(user?.localeId)) || {};\n\n return currentLocale.displayName;\n }\n\n // endregion\n\n // region Actions\n\n @action\n editAddress(address: ContactAddress): void {\n this.navigation.transitionToRouteId(\n this.args.routeMap.userEditContactInformationRoute,\n this.user?.id ?? '',\n address.id\n );\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::UserEdit': typeof UsersEditIndexComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{!-- @glint-expect-error the PageView::Edit component expects a button configuration. If we don\\'t need that we probably don\\'t need to use this component. --}}\\n\\n <:default as |data|>\\n \\n\\n
\\n \\n \\n
\\n \\n\",{ moduleName: \"customer-site/components/users/username-route/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getErrorText } from 'customer-site/utils/ember';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type ModalService from '@adc/ui-components/services/modals';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type UsersPermissionsCollectionModel from 'customer-site/models/users/permissions-collection';\nimport type User from 'customer-site/models/users/user';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type NavigationService from 'customer-site/services/navigation';\n\ninterface UsernameEditRouteComponentSignature {\n Args: {\n model: {\n user: Promise;\n user_id: string;\n permissions: Promise;\n redirectRoute: number;\n };\n };\n}\n\n/**\n * @classDesc\n * Edit page component for managing the login linked to a user.\n */\nexport default class UsernameEditRouteComponent extends Component {\n @service declare contextManager: ContextManager;\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n @service declare modals: ModalService;\n @service declare ajax: AjaxService;\n @service declare navigation: NavigationService;\n\n resolvedModel?: {\n user: Awaited;\n permissions: Awaited;\n };\n\n /**\n * Runs a save operation on the user model and transitions back to Edit User page\n */\n saveUser(): Promise {\n const user = this.resolvedModel?.user;\n return (\n user\n ?.save()\n .then(() => {\n this.notificationManager.addSuccess(this.intl.t('users.edit.link-login.Success'));\n // Reload model to make sure the existing email addresses are updated post-linkage.\n user.hasMany('emailAddresses').reload();\n })\n .catch((error) => {\n const errorText = getErrorText(error);\n if (errorText) {\n this.notificationManager.addError(errorText);\n }\n user.rollback();\n return Promise.reject();\n }) ?? Promise.resolve()\n );\n }\n\n /**\n * Unlinks the Login from the current contact\n */\n @action\n unlinkLogin(): void {\n this.modals.showConfirmationDialog(\n this.intl.t('users.edit.username.unlinkLogin'),\n this.intl.t('users.edit.username.unlinkLoginDesc'),\n {\n text: this.intl.t('users.edit.username.unlink'),\n css: 'btn-color-danger',\n action: async () => {\n const user = this.resolvedModel?.user;\n if (user) {\n user.loginId = null;\n this.saveUser().then(() => this.contextManager.transitionToPreviousRoute());\n }\n }\n }\n );\n }\n\n /**\n * Hits endpoint to delete CustomerLogin object (and associated Contact) from the account\n */\n @action\n async deleteLogin(): Promise {\n // get the login from the User\n const loginId = this.resolvedModel?.user.loginId;\n\n this.modals.showConfirmationDialog(\n this.intl.t('users.edit.username.deleteLogin'),\n this.intl.t('users.edit.username.deleteLoginDesc'),\n {\n text: this.intl.t('generic.delete'),\n css: 'btn-color-danger',\n action: async () => {\n try {\n await this.ajax.apiRequest(\n `logins/customerLogins/deleteAssociatedLogin/${loginId}`,\n undefined,\n undefined,\n 'DELETE'\n );\n\n this.notificationManager.addSuccess(this.intl.t('users.edit.username.deleteLoginSuccess'));\n\n // navigate back to the correct Users page\n this.navigation.transitionToRouteId(this.args.model.redirectRoute);\n } catch (error) {\n // Handle the error and show an error notification\n this.notificationManager.addError(this.intl.t('users.edit.username.deleteLoginError'));\n }\n }\n }\n );\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::UsernameRoute': typeof UsernameEditRouteComponent;\n }\n}\n","import Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\n\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface CanViewPeopleUiSignature {\n Return: boolean;\n}\n\n/**\n * Indicates if the current context has the PeopleUI feature toggle enabled.\n */\nexport default class CanViewPeopleUi extends Helper {\n @service declare contextManager: ContextManager;\n\n compute(): CanViewPeopleUiSignature['Return'] {\n return this.contextManager.identityModel.canViewPeopleUi;\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'can-view-people-ui': typeof CanViewPeopleUi;\n }\n}\n","import { get } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport BaseDeviceAccessRoute from 'customer-site/classes/users/edit/device-access/base-device-access-route';\nimport { StandardUser } from 'customer-site/enums/AccessPointUserType';\nimport { EmberEditUserDeviceAccess, EmberUsersUserAccessReview } from 'customer-site/enums/CustomerPageUrl';\n\nimport type Store from '@ember-data/store';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\nimport type AccessPointCollectionsSummaryModel from 'customer-site/models/users/access/access-point-collections-summary';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type NavigationService from 'customer-site/services/navigation';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type ParentRoute from '../route';\n\n/**\n * Calls the updateAccessPlansAccessPointCollections method on accessPointCollectionsSummary\n * and then updates the accessPointCollectionsSummary, so that the ember stays synced with the backend\n */\nexport async function updateAccessPlanCollections(\n store: Store,\n accessPointCollectionsSummary: AccessPointCollectionsSummaryModel,\n userType: number\n): Promise {\n accessPointCollectionsSummary.set(\n 'accessPlansAccessPointCollections',\n store.push(await accessPointCollectionsSummary.updateAccessPlansAccessPointCollections(userType))\n );\n}\n\ntype ParentModel = ModelFrom;\n\ntype Model = {\n deviceAccess: Promise;\n permissions: ParentModel['permissions'];\n alreadySaved: boolean;\n userCode: string | null;\n deviceId: string | null;\n showOfflineDeviceWarning: boolean | Promise;\n};\n\ntype RouteModel = T & Model;\n\n/**\n * The route for editing a users device access.\n */\nexport default class UserEditDeviceAccessRoute extends BaseDeviceAccessRoute> {\n @service declare store: Store;\n @service declare navigation: NavigationService;\n @service declare router: RouterService;\n\n routeId = EmberEditUserDeviceAccess;\n\n queryParams = {\n userCode: {\n refreshModel: false\n },\n deviceId: {\n refreshModel: false\n }\n };\n\n parentRoute = 'users.edit';\n\n model({ userCode, deviceId }: { userCode: string; deviceId: string }, transition: Transition): RouteModel {\n const { user, permissions } = this.modelFor(this.parentRoute) as ModelFrom,\n hasUserAccessReviewAccess = !!this.navigation.getRouteItem(EmberUsersUserAccessReview);\n\n return {\n deviceAccess: (async () => get(await user, 'deviceAccess') as DeviceAccessModel)(),\n permissions,\n alreadySaved: !!transition.data.alreadySaved,\n // if a user code / device id are provided in the query parameters, and it corresponds to a user code in the store,\n userCode: hasUserAccessReviewAccess ? userCode : null,\n deviceId: hasUserAccessReviewAccess ? deviceId : null,\n showOfflineDeviceWarning:\n !!user &&\n (async () => {\n const deviceAccess = await get(await user, 'deviceAccess'),\n collectionsSummary = await deviceAccess.accessPointCollectionsSummary;\n\n return !!collectionsSummary.areAnyOffline;\n })()\n } as RouteModel;\n }\n\n async afterModel(model: RouteModel): Promise {\n // TODO: Push-device users can technically get to the user-profile page because of the redirect here.\n // We don't want this to be possible because they can add contact addresses to the push device user.\n const deviceAccess = await model.deviceAccess;\n\n if (!deviceAccess) {\n this.router.replaceWith(this.parentRoute);\n return;\n }\n\n if (deviceAccess.isCreationFlow && this.contextManager.isPointCentral) {\n updateAccessPlanCollections(\n this.store,\n await deviceAccess.accessPointCollectionsSummary,\n deviceAccess.userType === StandardUser ? deviceAccess.pointCentralUserType : deviceAccess.userType\n );\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { computed, action } from '@ember/object';\nimport { or, not, and } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport BaseController, { USERS_BATCH_SIZE } from 'customer-site/classes/users/index/base-controller';\nimport DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\nimport { Duress } from '../../enums/ContactUserType';\nimport { EmberEditUserInformation, EmberUserEdit, EmberUserEditNotSupported, Users } from '../../enums/CustomerPageUrl';\n\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type { UserQuery } from 'customer-site/classes/users/index/base-controller';\nimport type BasePermissionsCollection from 'customer-site/models/users/base-permissions-collection';\nimport type User from 'customer-site/models/users/user';\nimport type CustomerSiteIntlService from 'customer-site/services/intl';\nimport type { ModelFrom, ResolvedModelFrom } from 'customer-site/utils/type-utils';\nimport type Route from './route';\n\n/**\n * Returns a promise for the users query, given query arguments\n */\nexport function getUsersQuery(\n store: ServiceRegistry['store'],\n startIndex = 0,\n searchString = '',\n batchSize = USERS_BATCH_SIZE,\n includeChildScope = false,\n sortByAccess = false\n): Promise {\n return store.query('users/user', {\n searchString,\n batchSize,\n startIndex,\n includeChildScope,\n sortByAccess\n }) as unknown as Promise;\n}\n\n/**\n * Get the dropdown menu item for creating/editing a duress user based off the passed in permissionsCollection.\n *\n * @parm intl\n * @param permissions\n * @param canCreateDuressUsers\n * @param fnNew - Function to be called to transition to creating new duress user.\n * @param fnEdit - Function to be called to transition to editing duress user.\n */\nexport function getDuressActionItem(\n intl: CustomerSiteIntlService,\n permissions: BasePermissionsCollection,\n canCreateDuressUsers: boolean,\n fnNew: VoidFunction,\n fnEdit: (duressUserId: string) => void\n): DropdownActionItem | undefined {\n // The user must have permissions to create/modify duress users.\n if (!permissions.canEditDuressUsers) {\n return undefined;\n }\n\n const { canSupportAdditionalDuressUser, supportsMultipleDuressUsers, duressUserIds } = permissions,\n fnGetItem = (key: string) => ({\n icon: 'panic-silent',\n name: intl.t(`users.index.${key}DuressUser`)\n });\n\n // If there are available slots or the panel supports multiple duress codes, we show the 'add' option.\n // It will be disabled if there are no available slots left, or the panel is handling duress user creation automatically.\n if (canCreateDuressUsers && (canSupportAdditionalDuressUser || supportsMultipleDuressUsers)) {\n return DropdownActionItem.create({\n action: fnNew,\n ...fnGetItem('add'),\n disabled: !canSupportAdditionalDuressUser\n });\n }\n\n // If the panel doesn't support multiple duress codes and the panel already has a duress user, show an 'edit' option.\n if (!supportsMultipleDuressUsers && duressUserIds.length) {\n return DropdownActionItem.create({\n action: fnEdit,\n ...fnGetItem('edit'),\n actionArguments: [duressUserIds[0]]\n });\n }\n\n return undefined;\n}\n\n/**\n * Transitions the user to the legacy page and logs any PointCentral redirects to wavefront.\n */\nfunction transitionToLegacyPage(this: UsersIndexController): void {\n if (this.identityManager.isPointCentral) {\n this.ajax.apiRequest(\n 'users/users/logPointCentralSingleSystemLegacyRedirectToWavefront',\n undefined,\n null,\n 'POST'\n );\n }\n\n this.navigation.transitionToRouteId(Users);\n}\n\n/**\n *\n */\nexport default class UsersIndexController extends BaseController> {\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n @service declare modals: ServiceRegistry['modals'];\n @service declare intl: CustomerSiteIntlService;\n @service declare store: ServiceRegistry['store'];\n @service declare media: ADCResponsiveMediaService;\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare navigation: ServiceRegistry['navigation'];\n\n @tracked resolvedModel?: Pick<\n ResolvedModelFrom,\n 'systemConfig' | 'permissions' | 'hasUserAccessReviewAccess'\n >;\n\n queryParams = ['search'];\n\n @tracked search = '';\n\n routeMap = {\n userEdit: EmberUserEdit,\n userEditNotSupported: EmberUserEditNotSupported,\n editUserInformation: EmberEditUserInformation\n };\n\n /**\n * Observes changes to variables that determine whether the count of users should be shown\n */\n @computed('usersCount', 'residentUser')\n get showUsersCount(): boolean {\n return (this.usersCount ?? 0) > 0 && !this.residentUser;\n }\n\n /**\n * If we are a PointCentral resident / tenant login, we will store their associated user for them to view and manage.\n */\n @tracked\n residentUser?: User;\n\n /**\n * If the user is in mobile view,\n * The unassigned user code banner should be in the view body\n */\n @or('media.isMobile', 'media.isTabletPortrait')\n declare userCodeBannerInViewBody: boolean;\n\n /**\n * If the user is not in mobile view,\n * the unassigned user code should be outside the view body\n */\n @not('userCodeBannerInViewBody')\n declare userCodeBannerOutsideViewBody: boolean;\n\n @and('userCodeBannerInViewBody', 'resolvedModel.hasUserAccessReviewAccess')\n declare showUserCodeInViewBody: boolean;\n\n @and('userCodeBannerOutsideViewBody', 'resolvedModel.hasUserAccessReviewAccess')\n declare showUserCodeOutsideViewBody: boolean;\n\n /**\n * Should we attempt to render the resident user section?\n */\n @computed('identityManager.{isPointCentral,isEnterprise}')\n get displayResidentUser() {\n const { identityManager } = this;\n return identityManager.isPointCentral && !identityManager.isEnterprise;\n }\n\n /**\n * Available global user actions.\n */\n @computed(\n 'hideUserCodes',\n 'hidePanelSlotNumbers',\n 'hasUsersPageBulkActionsBeta',\n 'resolvedModel.permissions.{canViewUserCodes,duressUserIds.[],hideAllPinsGroupSettingEnabled,canViewPanelSlotNumbers}',\n 'routeMap.{editUserInformation,userEdit}',\n 'identityManager.isPointCentral'\n )\n get toolsDropdownButtons(): DropdownActionItem[] {\n const permissions = this.resolvedModel?.permissions;\n if (!permissions) {\n return [];\n }\n\n const { navigation, routeMap, intl } = this,\n links: DropdownActionItem[] = [],\n fnAddItem = (\n action: DropdownActionItem['action'],\n icon: DropdownActionItem['icon'],\n name = icon,\n actionArguments?: DropdownActionItem['actionArguments']\n ) =>\n links.push(\n DropdownActionItem.create({\n action,\n icon,\n name,\n actionArguments\n })\n );\n\n if (this.hasUsersPageBulkActionsBeta) {\n fnAddItem(() => this.toggleBulkEditMode(), 'edit', intl.t('users.index.usersPageBulkActions'));\n }\n\n const duressItem = getDuressActionItem(\n this.intl,\n permissions,\n permissions.canCreateDuressUsers,\n () =>\n navigation.transitionToRouteId(routeMap.editUserInformation, 'new', {\n queryParams: {\n userType: Duress\n }\n }),\n (duressUserId: string) => {\n navigation.transitionToRouteId(routeMap.userEdit, duressUserId);\n }\n );\n if (duressItem) {\n // Add the bulk actions button to the more dropdown menu\n links.push(duressItem);\n }\n\n // Add items to toggle user codes and panel slot numbers.\n if (\n permissions.canViewUserCodes &&\n !permissions.hideAllPinsGroupSettingEnabled &&\n permissions.maxUserCodeLength != null\n ) {\n fnAddItem(\n () => this.toggleUsersProperty('hideUserCodes'),\n 'backup-codes',\n intl.tc(this, this.hideUserCodes ? 'showUserCodes' : 'hideUserCodes')\n );\n }\n\n if (permissions.canViewPanelSlotNumbers) {\n fnAddItem(\n () => this.toggleUsersProperty('hidePanelSlotNumbers'),\n 'panel',\n intl.tc(this, this.hidePanelSlotNumbers ? 'showPanelSlotNumbers' : 'hidePanelSlotNumbers')\n );\n }\n\n // Adds legacy page link if it is PointCentral.\n if (this.identityManager.isPointCentral && !!this.navigation.getRouteItem(Users)) {\n fnAddItem(\n () => transitionToLegacyPage.call(this),\n 'feature-users',\n intl.t('enterprise.users.index.visitOldUsersPage')\n );\n }\n\n return links;\n }\n\n /**\n * Loads the next batch of users.\n */\n loadMoreUsers = task({ enqueue: true }, async () => {\n const users = await getUsersQuery(this.store, this.users.length, this.search, undefined, undefined, true);\n this.addLoadedUsers(users);\n });\n\n /**\n * Loads all users.\n */\n @action async ensureAllUsersLoaded(): Promise {\n const { usersCount = 0 } = this,\n { length } = this.users;\n\n // Are all users NOT loaded?\n if (length < usersCount) {\n const users = await getUsersQuery(this.store, length, this.search, usersCount - length, undefined, true);\n this.addLoadedUsers(users);\n }\n }\n\n /**\n * Gets the resident user from the backend, if applicable.\n */\n @action\n async loadResidentUserAction() {\n const { residentUser } = this;\n\n if (!residentUser) {\n const residentUserResponse = await this.ajax.apiRequest<{ data: any }>(\n 'users/users/getLoggedInResidentUser'\n );\n\n // Make sure that we retrieved a resident user from the backend.\n if (!residentUserResponse.data) {\n return undefined;\n }\n\n return (this.residentUser = this.store.push(residentUserResponse) as User);\n }\n\n return residentUser;\n }\n\n private applySearch(search: string) {\n // Unselect all users when we search.\n this.clearUserSelections();\n this.search = search;\n this.clearUserData();\n }\n\n /**\n * Filters users.\n */\n @action\n filterUsers(search: string) {\n this.applySearch(search);\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'users/index': UsersIndexController;\n }\n}\n","export default {\n plurals: [\n [/$/, 's'],\n [/s$/i, 's'],\n [/^(ax|test)is$/i, '$1es'],\n [/(octop|vir)us$/i, '$1i'],\n [/(octop|vir)i$/i, '$1i'],\n [/(alias|status|bonus)$/i, '$1es'],\n [/(bu)s$/i, '$1ses'],\n [/(buffal|tomat)o$/i, '$1oes'],\n [/([ti])um$/i, '$1a'],\n [/([ti])a$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:([^f])fe|([lr])f)$/i, '$1$2ves'],\n [/(hive)$/i, '$1s'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/(x|ch|ss|sh)$/i, '$1es'],\n [/(matr|vert|ind)(?:ix|ex)$/i, '$1ices'],\n [/^(m|l)ouse$/i, '$1ice'],\n [/^(m|l)ice$/i, '$1ice'],\n [/^(ox)$/i, '$1en'],\n [/^(oxen)$/i, '$1'],\n [/(quiz)$/i, '$1zes'],\n ],\n\n singular: [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [\n /((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i,\n '$1sis',\n ],\n [/(^analy)(sis|ses)$/i, '$1sis'],\n [/([^f])ves$/i, '$1fe'],\n [/(hive)s$/i, '$1'],\n [/(tive)s$/i, '$1'],\n [/([lr])ves$/i, '$1f'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/(x|ch|ss|sh)es$/i, '$1'],\n [/^(m|l)ice$/i, '$1ouse'],\n [/(bus)(es)?$/i, '$1'],\n [/(o)es$/i, '$1'],\n [/(shoe)s$/i, '$1'],\n [/(cris|test)(is|es)$/i, '$1is'],\n [/^(a)x[ie]s$/i, '$1xis'],\n [/(octop|vir)(us|i)$/i, '$1us'],\n [/(alias|status|bonus)(es)?$/i, '$1'],\n [/^(ox)en/i, '$1'],\n [/(vert|ind)ices$/i, '$1ex'],\n [/(matr)ices$/i, '$1ix'],\n [/(quiz)zes$/i, '$1'],\n [/(database)s$/i, '$1'],\n ],\n\n irregularPairs: [\n ['person', 'people'],\n ['man', 'men'],\n ['child', 'children'],\n ['sex', 'sexes'],\n ['move', 'moves'],\n ['cow', 'kine'],\n ['zombie', 'zombies'],\n ],\n\n uncountable: [\n 'equipment',\n 'information',\n 'rice',\n 'money',\n 'species',\n 'series',\n 'fish',\n 'sheep',\n 'jeans',\n 'police',\n ],\n};\n","/* eslint-disable import/extensions, prettier/prettier */\nimport defaultRules from './inflections';\n\nconst BLANK_REGEX = /^\\s*$/;\nconst LAST_WORD_DASHED_REGEX = /([\\w/-]+[_/\\s-])([a-z\\d]+$)/;\nconst LAST_WORD_CAMELIZED_REGEX = /([\\w/\\s-]+)([A-Z][a-z\\d]*$)/;\nconst CAMELIZED_REGEX = /[A-Z][a-z\\d]*$/;\nconst CAPITALIZE_REGEX = /(^|\\/)([a-z\\u00C0-\\u024F])/g;\n\nfunction capitalize(str) {\n return str.replace(CAPITALIZE_REGEX, (match) => match.toUpperCase());\n}\n\nfunction loadUncountable(rules, uncountable) {\n for (let i = 0, length = uncountable.length; i < length; i++) {\n rules.uncountable[uncountable[i].toLowerCase()] = true;\n }\n}\n\nfunction loadIrregular(rules, irregularPairs) {\n let pair;\n\n for (let i = 0, length = irregularPairs.length; i < length; i++) {\n pair = irregularPairs[i];\n\n //pluralizing\n rules.irregular[pair[0].toLowerCase()] = pair[1];\n rules.irregular[pair[1].toLowerCase()] = pair[1];\n\n //singularizing\n rules.irregularInverse[pair[1].toLowerCase()] = pair[0];\n rules.irregularInverse[pair[0].toLowerCase()] = pair[0];\n }\n}\n\n/**\n Inflector.Ember provides a mechanism for supplying inflection rules for your\n application. Ember includes a default set of inflection rules, and provides an\n API for providing additional rules.\n\n Examples:\n\n Creating an inflector with no rules.\n\n ```js\n var inflector = new Ember.Inflector();\n ```\n\n Creating an inflector with the default ember ruleset.\n\n ```js\n var inflector = new Ember.Inflector(Ember.Inflector.defaultRules);\n\n inflector.pluralize('cow'); //=> 'kine'\n inflector.singularize('kine'); //=> 'cow'\n ```\n\n Creating an inflector and adding rules later.\n\n ```javascript\n var inflector = Ember.Inflector.inflector;\n\n inflector.pluralize('advice'); // => 'advices'\n inflector.uncountable('advice');\n inflector.pluralize('advice'); // => 'advice'\n\n inflector.pluralize('formula'); // => 'formulas'\n inflector.irregular('formula', 'formulae');\n inflector.pluralize('formula'); // => 'formulae'\n\n // you would not need to add these as they are the default rules\n inflector.plural(/$/, 's');\n inflector.singular(/s$/i, '');\n ```\n\n Creating an inflector with a nondefault ruleset.\n\n ```javascript\n var rules = {\n plurals: [\n [ /$/, 's' ]\n ],\n singular: [\n [ /\\s$/, '' ]\n ],\n irregularPairs: [\n [ 'cow', 'kine' ]\n ],\n uncountable: [ 'fish' ]\n };\n\n var inflector = new Ember.Inflector(rules);\n ```\n\n @class Inflector\n @namespace Ember\n*/\nfunction Inflector(ruleSet) {\n ruleSet = ruleSet || {};\n ruleSet.uncountable = ruleSet.uncountable || makeDictionary();\n ruleSet.irregularPairs = ruleSet.irregularPairs || makeDictionary();\n\n const rules = (this.rules = {\n plurals: ruleSet.plurals || [],\n singular: ruleSet.singular || [],\n irregular: makeDictionary(),\n irregularInverse: makeDictionary(),\n uncountable: makeDictionary(),\n });\n\n loadUncountable(rules, ruleSet.uncountable);\n loadIrregular(rules, ruleSet.irregularPairs);\n\n this.enableCache();\n}\n\nif (!Object.create && !Object.create(null).hasOwnProperty) {\n throw new Error(\n 'This browser does not support Object.create(null), please polyfil with es5-sham: http://git.io/yBU2rg'\n );\n}\n\nfunction makeDictionary() {\n var cache = Object.create(null);\n cache['_dict'] = null;\n delete cache['_dict'];\n return cache;\n}\n\nInflector.prototype = {\n /**\n @public\n\n As inflections can be costly, and commonly the same subset of words are repeatedly\n inflected an optional cache is provided.\n\n @method enableCache\n */\n enableCache() {\n this.purgeCache();\n\n this.singularize = function (word) {\n this._cacheUsed = true;\n return (\n this._sCache[word] || (this._sCache[word] = this._singularize(word))\n );\n };\n\n this.pluralize = function (numberOrWord, word, options = {}) {\n this._cacheUsed = true;\n var cacheKey = [numberOrWord, word, options.withoutCount];\n return (\n this._pCache[cacheKey] ||\n (this._pCache[cacheKey] = this._pluralize(numberOrWord, word, options))\n );\n };\n },\n\n /**\n @public\n\n @method purgeCache\n */\n purgeCache() {\n this._cacheUsed = false;\n this._sCache = makeDictionary();\n this._pCache = makeDictionary();\n },\n\n /**\n @public\n disable caching\n\n @method disableCache;\n */\n disableCache() {\n this._sCache = null;\n this._pCache = null;\n this.singularize = function (word) {\n return this._singularize(word);\n };\n\n this.pluralize = function () {\n return this._pluralize(...arguments);\n };\n },\n\n /**\n @method plural\n @param {RegExp} regex\n @param {String} string\n */\n plural(regex, string) {\n if (this._cacheUsed) {\n this.purgeCache();\n }\n this.rules.plurals.push([regex, string.toLowerCase()]);\n },\n\n /**\n @method singular\n @param {RegExp} regex\n @param {String} string\n */\n singular(regex, string) {\n if (this._cacheUsed) {\n this.purgeCache();\n }\n this.rules.singular.push([regex, string.toLowerCase()]);\n },\n\n /**\n @method uncountable\n @param {String} regex\n */\n uncountable(string) {\n if (this._cacheUsed) {\n this.purgeCache();\n }\n loadUncountable(this.rules, [string.toLowerCase()]);\n },\n\n /**\n @method irregular\n @param {String} singular\n @param {String} plural\n */\n irregular(singular, plural) {\n if (this._cacheUsed) {\n this.purgeCache();\n }\n loadIrregular(this.rules, [[singular, plural]]);\n },\n\n /**\n @method pluralize\n @param {String} word\n */\n pluralize() {\n return this._pluralize(...arguments);\n },\n\n _pluralize(wordOrCount, word, options = {}) {\n if (word === undefined) {\n return this.inflect(\n wordOrCount,\n this.rules.plurals,\n this.rules.irregular\n );\n }\n\n if (parseFloat(wordOrCount) !== 1) {\n word = this.inflect(word, this.rules.plurals, this.rules.irregular);\n }\n\n return options.withoutCount ? word : `${wordOrCount} ${word}`;\n },\n\n /**\n @method singularize\n @param {String} word\n */\n singularize(word) {\n return this._singularize(word);\n },\n\n _singularize(word) {\n return this.inflect(word, this.rules.singular, this.rules.irregularInverse);\n },\n\n /**\n @protected\n\n @method inflect\n @param {String} word\n @param {Object} typeRules\n @param {Object} irregular\n */\n inflect(word, typeRules, irregular) {\n let inflection,\n substitution,\n result,\n lowercase,\n wordSplit,\n lastWord,\n isBlank,\n isCamelized,\n rule,\n isUncountable;\n\n isBlank = !word || BLANK_REGEX.test(word);\n isCamelized = CAMELIZED_REGEX.test(word);\n\n if (isBlank) {\n return word;\n }\n\n lowercase = word.toLowerCase();\n wordSplit =\n LAST_WORD_DASHED_REGEX.exec(word) || LAST_WORD_CAMELIZED_REGEX.exec(word);\n\n if (wordSplit) {\n lastWord = wordSplit[2].toLowerCase();\n }\n\n isUncountable =\n this.rules.uncountable[lowercase] || this.rules.uncountable[lastWord];\n\n if (isUncountable) {\n return word;\n }\n\n for (rule in irregular) {\n if (lowercase.match(rule + '$')) {\n substitution = irregular[rule];\n\n if (isCamelized && irregular[lastWord]) {\n substitution = capitalize(substitution);\n rule = capitalize(rule);\n }\n\n return word.replace(new RegExp(rule, 'i'), substitution);\n }\n }\n\n for (var i = typeRules.length, min = 0; i > min; i--) {\n inflection = typeRules[i - 1];\n rule = inflection[0];\n\n if (rule.test(word)) {\n break;\n }\n }\n\n inflection = inflection || [];\n\n rule = inflection[0];\n substitution = inflection[1];\n\n result = word.replace(rule, substitution);\n\n return result;\n },\n};\n\nInflector.defaultRules = defaultRules;\nInflector.inflector = new Inflector(defaultRules);\n\nexport default Inflector;\n","/* eslint-disable import/extensions */\nimport Inflector from './inflector';\n\nfunction pluralize() {\n return Inflector.inflector.pluralize(...arguments);\n}\n\nfunction singularize(word) {\n return Inflector.inflector.singularize(word);\n}\n\nexport { pluralize, singularize };\n"],"names":["createTemplateFactory","scope","spinnerSvg_","eq_","tc_","accessControlAccessPlansItemPlanList_","await_","AccessControlPointCentralPlanListComponent","_dec","intlPath","path","_dec2","alias","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","computed","_dec9","_dec10","_class2","Component","constructor","arguments","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","selectedAccessPlans","this","user","availableAccessPlans","selectedAccesPlanIds","get","map","ap","id","filter","includes","toString","accessControlDataIsLoaded","accessPlans","planDetailTotals","getPlanDetailTotals","ajax","includeChildScopes","includeParentScope","selectDeselectAccessPlans","systemGroupId","selectAccessPlans","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Object","getOwnPropertyDescriptor","action","_class","setComponentTemplate","TEMPLATE","uiColoredIcon_","dropdownActions_","t_","buttonSimple_","accessControlAccessPlansItemAccessPlanDetailsCompact_","AccessPlanCompact","BaseAccessPlanRow","editOptions","showEditButton","args","toolsDropdownItems","searchToolbar_","uiBadgeLabel_","listView_","listRowItem_","not_","simpleBinary_","or_","and_","on","fn","media_","accessControlAccessPlansRowAccessPlanCompact_","svgSymbol_","asyncLoader_","multiScheduleView_","AccessControlAccessPlansPlanList","and","_defineProperty","isScheduleGridVisible","isMobile","isTabletPortrait","media","resolvedSelectedTimetables","_this$args$selectedAc","timetablePromises","plan","_plan$timetables","timetables","flat","Boolean","Promise","all","scheduleObjects","_this$args$selectedAc2","slice","name","isSecuritySystemMaster","unshift","intl","tc","create","iconName","colorName","EmberObject","scheduleDictionary","ALL_TIMES_PROPERTIES","getProperties","xOfYAccessPlans","activePlanIds","mapBy","t","x","length","y","accessPlanItemClicked","item","sourcePlans","set","isSelected","model","setAccessPlans","filterAccessPlans","searchString","setProperties","resetAccessPlans","fnDeleteAccessPlan","accessPlan","deleteAccessPlanWithWarningModal","modals","notificationManager","_this$args$deleteAcce","_this$args","removeObject","deleteAccessPlan","call","loadAccessPlans","activeAccessPlanIds","allAccessPlans","toLowerCase","store","query","userId","source","includePlansForUserOnNestedScopes","accessPlanItems","tracked","actionSheet_","array","hash","willDestroy_","tc_0","pinInput_","AccessControlUsersItemCredentialsAssignPin","currentPinCode","_ref","_this$pinCode","_this$args$pinCode","pinCode","showPinCodeTruncationMessage","_ref2","permissions","minimumOfMaxCodeLengths","assignPin","buttonAnimation","pinCodeCredential","editCredential","addCredential","newPinCodeCredential","createRecord","reject","then","close","generateRandomPin","apiRequestForValue","error","addError","errors","detail","inlineAlert_","coalesce_","accessControlUsersItemCredentialsAssignPin_","accessControlUsersItemCredentialsAssignAccessCard_","accessControlUsersItemCredentialsAssignMobile_","AccessControlUsersItemCredentialsComponent","empty","BaseUserCredentialManager","_descriptor9","_descriptor10","_descriptor11","getEditOptionsForCredential","credential","dropdownOptions","addEditPinCode","isStandAloneAccessControl","isPrimary","PinCodeCredential","isPointCentral","push","deleteCredential","mapCredentialDropdownOptions","credentials","pinCodes","mobileCredentials","accessCards","rejectBy","pin","icon","code","canViewUserCodes","options","accessCard","cardSerial","addEditAccessCard","viewMobileCredential","mobileCredential","addCredentialOptions","isReadOnly","canChangeUserCode","systemSupportsAccessCards","systemSupportsPinCodes","isPointCentralAccessControl","addPointCentralPinCode","addMobileCredential","addResendMobileCredential","test","DropdownActionItem","concat","canCredentialBeModified","_credential$activeDir","canBeModified","activeDirectoryFlag","assign","accessCardToEdit","isEditAccessCardActive","pinCodeToEdit","isEditPinCodeActive","validateCredentialOptionsOpen","validateAddCredentialOpen","ActiveAccessPlanRow","templateOnlyComponent","fieldsetHeader_","accessControlUsersItemActiveAccessPlanRow_","fieldsetDescription_","AccessControlUsersItemActiveAccessPlans","routeViewDetailsView_","promiseHashTracked_","usersItemUserProfileBanner_","adcBanner_","usersItemUserOverview_","navigateToRouteId_","accessControlUsersItemCredentials_","drillThroughItem_","t_0","accessControlUsersItemActiveAccessPlans_","canViewPeopleUi_","betaFeatureUnderConstruction_","AccessControlEditUserComponent","canBeDeleted","isDestroyed","supportsAccessPeriod","AccessControlUser","hasPanel","currentLocaleDisplayName","_this$contextManager","_this$user","availableLocales","contextManager","identityModel","profile","findBy","String","localeId","displayName","currentAccessGroupDisplayName","_user$accessGroupId","_currentAccessGroup$n","currentAccessGroup","accessGroups","accessGroupId","credentialExpirationText","hasStartDate","hasEndDate","startDate","endDate","timeZone","fmtStartDate","fmtEndDate","d","formatDateTz","month","year","day","hour","minute","props","key","start","end","banner","isPaused","shouldShow","type","ISSUE","message","lastPauseDate","mobileCredentialBanner","showBanner","inviteStatus","mobileCredentialInviteStatus","InvitationExpired","isResend","isCancel","InvitationSent","sendMobileCredentialInvite","_find","endpoint","emailAddresses","mobileAddresses","find","apiRequest","undefined","addSuccess","reload","markMobileCredentialInviteInvalid","unpauseUser","userName","pauseUnpauseUser","exception","console","log","saveUser","saveUserModel","updateAdaFlag","target","checked","newValue","updateApbExemptFlag","_ref3","transitionToEditRoute","routeId","mapADUsersToAccessPlans","navigation","transitionToRouteId","editAddress","address","_this$user$id","_this$user2","routeMap","userEditContactInformationRoute","syncUserPermissions","_await$this$permissio","deleteUser","async","toggleConfirmTransition","transitionToPreviousRoute","transitionToMergeUsersList","identityManager","isEnterprise","EmberEnterpriseAccessControlMergeUsersList","EmberAccessControlMergeUsersList","guidFor_","textInput_","validationError_","dropdownSelectSingleSelect_","createDropdownItems_","ViewState","AccessControlUsersItemCredentialsAssignAccessCard","equal","EnterCardNumber","SelectCardReader","CardFound","_buildTask","context","generator","card","selectedCardReaderId","updateViewState","CardNotFound","data","AccessCardCredential","eachAttribute","k","scannedCard","errorMessage","CardScanError","restartable","restart","waitForScannedCard","cancelAll","currentState","Start","inputCardSerial","state","cardReaders","findAll","filterBy","instructions","_this$scannedCard$err","_this$scannedCard","ScanCard","displayCardSerial","_this$inputCardSerial","_this$args$accessCard","isTextCentered","showIcon","buttons","fnGetBtn","text","_props$disabled","disabled","color","txtBack","btnRestart","btnBackToSelectReader","assignManualCard","perform","isEmpty","assignCard","_args$editCredential","ex","didInsert_","AccessControlUsersItemCredentialsAssignMobile","reads","titleKey","SendInvitation","NoMobileNumber","NoEmailAddress","bodyText","cfgBack","goToInvitation","cfgCancel","addContact","capitalize","_this$args$setMobileM","setMobileModalOnLoadPropertyTrue","getEnterpriseEditContactInfoRoute","getSingleSystemEditContactInfoRoute","queryParams","contact_address","contactType","setup","isActive","reset","EmberEnterpriseEditUserContactInformation","EmberEnterpriseAccessControlUserEditContactInformation","EmberEditUserContactInformation","EmberAccessControlUserEditContactInformation","BetaWarning","formGroup_","toString_","usersItemDeviceAccessEnterpriseAccessInformation_","navigateToRouteName_","EnterpriseUsersEditComponent","bool","_descriptor12","_descriptor13","noDeviceAccessSupportText","isLockMasterCodeUser","deviceAccess","pointCentralUserType","PointCentralMasterCodeUser","userType","MasterCodeUser","userTypeSupportsDeviceAccess","availableUserTypesForDropdown","availableUserTypesForUser","DropdownSelectItem","value","SELECTED","UNSELECTED","availableLocaleOptions","parseInt","showUserTypeDropdown","_deviceAccess$availab","userTypeChanged","save","languageChanged","IsRouteActive","Helper","compute","routes","_this$contextManager$","currentRouteId","currentRouteData","routeItem","some","routeName","CustomerPageUrl","isRouteActive_","insetGroup_","PeopleCardStyle","route","_this$args$route","shouldUseForceCardArg","showCardDesign","UiStackedIconLabel","routeViewEditView_","usersItemUserAvatar_","UsersEditInfoRouteComponent","selectedUserCodeType","_this$resolvedModel","userTypes","resolvedModel","_selectedUserCodeType","isPresent","Guest","userTypeItems","_this$resolvedModel$u","_this$resolvedModel2","getTranslationKeyForLastName","_this$resolvedModel3","isDuress","useOnlyOneName","lastNameLabel","camelize","lastNamePlaceholder","showUserType","_this$resolvedModel4","UsersAddContactComponent","PROPS_TO_OBSERVE","addressTypes","getPossibleAddressTypes","i","_objectSpread","getMediaForAddressType","description","startNewContact","replaceWithRouteId","editUserContactInformationRouteId","peopleContainerCardStyle_","ADDRESS_TYPES","ADDRESS_RELATIONSHIPS","Voice","Mobile","Email","getMaxForAddressType","hasMany","ids","ContactInformation","displayErrorForSpecialContactAddress","loginName","canAddAddress","any","contactAddresses","sortBy","reverse","accessControlAccessPlansItemAccessControlPointcentralPlanList_","usersItemDeviceAccessItemGroups_","ACCESS_TYPE_BULK_ACTIONS_BATCH_SIZE","locationPassesSearchString","location","isNested","currentSystemGroupDescription","parentSearchString","system","getDeviceAccessLocations","startIndex","systemAccessPointItemsForGroup","numLocationsToDisplay","accessItems","numberWithAccess","allAccess","noAccess","accessPointsWithAccessCanBeChangedPromises","accessPointItemCanBeModified","canAllAccessBeGranted","results","every","canBeChanged","canAllAccessBeRevoked","byDevice","AccessTypeBulkActionsComponent","dropTask","_dec11","_dec12","_dec13","_dec14","_dec15","_dec16","_dec17","_dec18","_dec19","_dec20","_dec21","super","selectedSystemGroup","_descriptor14","window","addEventListener","updateScreenWidth","loadAccessInformation","showGroupSelectionDropdown","systemGroups","showViewMoreButton","locationsCount","count","isParentAndMLEG","hasMLEGUserAccess","_this$deviceAccess$ge","currentSystemGroupId","sort","a","b","locale","language","localeCompare","numeric","viewingLimitedLocationsText","groupToSelect","deviceAccessLocations","isAccessControl","isAccessControlSystemGroup","isAccessControlOrNested","groupsForDropdown","getSystemGroupDropdownSelectItems","iconForLocations","areLocationRadioButtonsReversed","innerWidth","toggleAccessToLocation","hasAccess","_this$deviceAccess$ge2","Number","toggleAllDeviceAccessLocations","forEach","selectSystemGroup","groupId","accessUser","deviceAccessModel","accessControlUser","accessControlGroupId","viewMore","additionalLocationItems","addObjects","screenWidth","willDestroy","removeEventListener","usersItemDeviceAccessChildGroupBulkActionRow_","toggleAccess","accessPointItems","currentGroupId","systemGroup","accessPointCollection","systemGroupPassesSearchString","systems","AccessTypeParentGroupBulkActions","iconForGroups","_get","_getProperties","systemsAccessPointItems","systemGroupIdsWithExistingPlusFutureAccess","accessPointCollectionsSummary","childGroupsForDisplay","group","childGroupAccessPointItems","sortedChildGroups","sg","_get2","toArray","isFulfilled_","simpleBinaryButtonList_","usersItemDeviceAccessAccessTypeBulkActions_","usersItemDeviceAccessAccessTypeParentGroupBulkActions_","usersItemDeviceAccessUserCodeWarnings_","ACCESS_TYPE_TEXT_MAP","ACCESS_TYPE","ALL_EXISTING_FUTURE_ID","ALL_EXISTING_ID","BY_LOCATION_ID","BY_GROUP_ID","NO_ACCESS_ID","updateModels","isAllAccessUser","additionalAccessPointItemFilterFunction","selectedSystemGroupId","AccessTypeComponent","or","initialSelectedAccessTypeId","hasAllDeviceAccess","hasExistingPlusFutureAccess","shouldOverrideAndSelectAllExistingAccessPointCentral","accessTypeId","accessTypeOptions","isParentGroupAndMleg","assigningAccessToAllDevices","showScheduledUserCodesWarning","BinaryListItem","label","selectedAccessTypeId","displayWarning","canAssignAccessToAllAccessPoints","canRemoveAccessFromAllAccessPoints","compact","hasAnyAccessControlSubgroups","subgroups","isAny","selectedInfo","title","groupName","htmlSafe","typeSelectionChanged","items","previousSelectedAccessType","loadedSystemGroup","_this$deviceAccess$ac","isParentGroup","accessPointItem","rollback","_this$contextManager$2","childGroupIds","cg","componentRendered","cacheDeviceAccessState","systemMap","systemId","accessItemMap","accessItem","deviceId","systemsAccessPointsMap","simpleBinaryList_","users","getUsersQuery","getAccessPlans","DefaultOperatingMode","holderId","objectAt","accessControlUserOriginalAccessPlans","ChildGroupBulkActionRow","owner","drop","byLocationAccess","isOpen","_this$accessControlUs","_this$accessControlUs2","isVisible","numberOfDevicesWithAccess","_this$accessPointColl","hasAllAccess","hasNoAccess","_this$selectedAccessP","existingPlusFutureBinaryListItem","accessToAllDevicesInGroupBinaryListItem","accessToNoDevicesInGroupBinaryListItem","byLocationAccessInGroupBinaryListItem","displayAccessPointWarning","canGrantAccessWithoutWarning","canRevokeAccessWithoutWarning","binaryItemsList","toggleAccessToLocationsInGroup","radioButtonItems","currentSelectedRadioItemIndex","findIndex","accessPlansOnAccessControlUser","addObject","idx","toggleIsOpen","EnterpriseAccessInformation","accessCodeDescription","userCode","accessPeriodDescription","isWeeklyScheduleSelected","isTemporaryScheduleSelected","temporarySchedule","weeklySchedule","dateText","timeText","accessTypeDescription","isFulfilled","_this$accessPointColl2","editUserCode","transitionToNativeRoute","EmberEnterpriseEditUserDeviceAccessUserCode","editAccessPeriod","EmberEnterpriseEditUserAccessPeriod","editAccessType","EmberEnterpriseEditUserDeviceAccessAccessType","undoAccessPointCollectionsSummaryChanges","rollBackModelsFromCache","accessPointCollectionsSummaryLoaded","cachedAccessPointCollectionsSummaryInfo","resolve","accessPointCollectionsSummaryCache","JSON","parse","stringify","cachedSystemItem","cachedAccessItem","accessPointCollectionsSummarySaved","catch","content","UsersItemDeviceAccessItemGroup","_item$props","_item$props2","updatedAccess","_accessPointItem$syst","deviceOnSystemGroupId","usersItemDeviceAccessItemGroup_","PARTITIONS","LOCKS","VOICE","COMMUNITY","ACCESS_TYPES","iconTitleLabel","groupNameLabel","doesNotSupportSchedules","hideForEnterprise","getAccessPointsCollectionOfType","enableItemAccess","getAccessPointItemsFromCollection","collection","accessType","isDisabled","index","isCreationFlow","Duress","userCodeDeviceId","scheduleOnce","deviceName","readOnly","singularize","iconTitle","isOffline","DeviceAccessItemGroupsComponent","deviceAccessItemGroups","keys","blockedBySchedules","hasWeeklySchedule","hasTemporarySchedule","canHaveAccessToMultipleItems","isOneItemGroup","disabledMessage","deviceSelectionsChanged","_collection$get","firstObject","accessPointModels","customizedCanBeModifiedCheck","collectionType","supportsTemporarySchedule","supportsWeeklySchedule","Locks","OneTimeUser","canAccessBeChanged","noSlotsLeftForUserType","restrictForResidentVisitorContact","GetUnitAndDeviceNames","accessPoints","translationKey","deviceListKey","selectedSystem","systemDescLists","reduce","promiseAccumulator","device","accumulator","systemDeviceListObject","deviceNameList","descList","join","replacementTokens","DeviceAccessUserCodeWarningsComponent","warnings","warningProperty","oneTimeUserWarning","hasLocks","truncatedDevicePinsWarning","_deviceAccess$get","currentPinCodeLength","devicesWithTruncatedPins","maximumPinLength","scheduledUserCodesWarning","unchangeablePartitionAccessPoints","LanguageComponent","changeLanguage","languageOptions","_languageOptions$find","initUser","noop_","PinBadge","classNames","classes","_this$deviceAccess","status","userCodeStatus","Failed","Duplicated","Pending","cssCodeStatus","isLoading","hasNoDeviceAccess","failedClass","startUserTypeRelocationTour","tour","Tour","steps","Step","StepDisplayType","Modal","StepContent","next","isStepAvailable","document","querySelector","getAnchorSelector","Popover","attachTo","placement","scrollAlignToTop","previous","show","beforeStart","afterEnd","markHelpTourAsCompleted","UserTypeRelocationTour","helpTour","PointCentralMobileCredentialsComponent","canAddMobileCredential","canRemoveMobileCredential","uiStackedIconLabel_","StackedIconButton","usersItemPinBadge_","usersItemCredentials_","buttonAsync_","uiStackedIconButton_","DEVICE_ACCESS_GROUP_ID","ACCESS_PERIOD_GROUP_ID","LOCATIONS_GROUP_ID","generateAccessButtons","fnAddItem","css","secondaryDescription","cssActive","isNotificationsOnlyUser","generateLocationsButton","generateAccessPointButtons","PCBackupCode","BackupCode","generateScheduleButton","systemsWithAccessCount","totalUnitsAvailableCount","tokens","showMultiSystemGroupDescription","locationAccessDescription","goToRoute","PCMasterCodeUser","editUserDeviceAccessRoute","schedule","getObjProperties","editUserAccessPeriodRoute","DeviceAccessSummary","_descriptor15","isNotReadOnly","NotificationsOnly","None","isPointCentralResidentViewingSelf","EmberEnterpriseEditUserDeviceAccess","EmberEditUserDeviceAccess","userCodeIsObscured","char","unSyncedUserCodeOptions","userCodeSystemsMap","userCodes","sytemNames","buttonText","allSystemNames","accessPointCollections","systemsForCode","locationCount","systemNames","EmberEditUserAccessPeriod","accessItemGroups","cssClass","hideAccessItemsSection","showPinBadgeComponent","userCodeStatusDesc","bannerType","INFORMATIVE","getBannerType","bannerOptionText","getBannerOptionText","optionText","reSyncUserCodes","resyncDevices","requestBody","unitId","getSelectedSystemId","transitionToUserCodeRoute","targetRoute","bannerButtonPressed","generateNewCodeAndSave","showConfirmationDialog","e","await_0","uiProgressBar_","getStateValue","badValue","goodValue","bestValue","NOT_CALIBRATED","PARTIALLY_CALIBRATED","FULLY_CALIBRATED","SmrfStatusItem","good","Minimum","best","Best","statusCss","smrfStatus","calibrationState","statusIcon","statusText","transitionToReviewRoute","EmberUserEditFaceRecognitionReview","UsersItemLoginInformation","canManageLoginInformationForUsersWithLogins","buildAppAccessDrillThroughItem","buildUsernameDrillThroughItem","obj","entries","login","loginId","findRecord","loginPermissionsCollection","_this$identityManager","_this$identityManager2","belongsTo","buildManageLoginItem","buildCreateLoginItem","username","populateDrillThroughItem","descriptionRight","redirectRoute","usernameRedirect","id_user","userHasAccess","ManageLoginPermissions","loginid","_await$this$identityM","_this$identityManager3","isNonGroupLogin","getModelName","usesAccessControlUI","isScheduledDeviceLogin","EmberEditScheduledDeviceLoginAccessControl","EmberEditScheduledDeviceLogin","cl","EmberEditMultiGroupAccessControlLogin","EmberEditMultiGroupLogin","roleDescription","canBeEdited","isMobileApp","hasSingleSystemManageLoginsWriteAccess","EmberSingleSystemManageLoginsEdit","_await$this$identityM2","_this$identityManager4","EmberAddEnterpriseAccessControlLoginsOptions","EmberAddEnterpriseLoginsOptions","ManageLoginAddLogin","drillIcon","styles","contactId","itemProps","LinkLogin","addLinkedLogin","linkLogin","usersItemDeviceAccessSummary_","usersItemSmrfStatusItem_","emptyContainer_","usersItemLoginInformation_","usersItemContactInformation_","usersItemLinkLogin_","usersUserAttributesUserAttributeList_","getNonCommonAreaLocations","systemsWithAccess","resolvedSystemsWithAccess","locations","LinkedLoginsSupportedUserTypes","ContactUserType","General","AllAccessUser","ShellContact","isUserInformationReadOnlyUserTypes","RequestedCode","PreloadedCodeInactive","UserOverview","pointCentralShareUser","shareUser","doesUserTypeSupportLinkedLogin","canShowRemoteAccess","isUserInformationReadOnly","showUserAttributes","_Object$keys","isResidentVisitor","isContactInfoVisible","availableUserAttributeFields","userAttributeCollection","hideForReadOnly","attributeValues","loginIsEnterprise","filteredUserAttributeFields","attributeField","PointCentralUserType","showShareUserCodeButton","shareUserService","shouldShowShareUserCodeButton","showPauseUserButton","showAllSharingOptions","showAssignBackupCodeUserButton","canAssignBackupCodeUser","transitionToEdit","shareResidentVisitorUserCodeOptions","shareUserCode","visible","shouldShowShareWithContactButton","shareUserCodeSms","shouldShowShareSmsButton","shareUserCodeEmail","sharingOption","isSingleSystemLoginWithResidentVisitor","contactUserTypeIndicator","values","indexOf","sendPointCentralWelcomeText","pauseUser","loadUserTypeRelocationTourIfNeeded","helpTours","assignBackupCode","userFullName","firstName","lastName","locationsWithAccess","unitDescription","assignBackupCodeUser","UserProfileBanner","userProfileBannerItems","showItem","class","pageViewEdit_","LinkLoginEditRouteComponent","availableLoginIdsDropdownItems","_this$resolvedModel$a","availableLoginsToLink","availableLogins","shouldDeleteBtnBeVisible","linkLoginId","_user$save$then$catch","errorText","getErrorText","unlinkLoginId","showDeleteModal","delete","_this$resolvedModel5","back","_this$resolvedModel6","rollbackAttributes","MergeUsersListItemCredentials","shouldLoadAccessPointInformation","_user$deviceAccess","accessSummaryText","_accessPointCollectio","pageViewList_","simpleList_","simpleListItem_","usersMergeUsersListItemCredentials_","routeViewViewContainerNoResultsContent_","paginationBar_","MergeUsersListComponent","qp","sortName","searchUsers","router","transitionTo","page","selectedPage","pageSize","changePage","transitionToMergePreview","source_id","currentUserId","accessControlUsersItemAccessControlEditUser_","isEnterprise_","enterpriseUsersUserEdit_","usersUserEdit_","MergeUsersPreviewComponent","mobileCredentialModalOnLoad","mergeContacts","ssuId","stuId","enterpriseRoute","accessControlRoute","smartDate_","UserAttributeEditPage","userAttributeFieldSelected","userAttributeFieldId","displayedFields","canViewUserAttributeValues","attributeFieldsToDisplay","childAttributeFields","displayObject","attributeId","dateValue","Date","isDate","inputType","GenericInputType","maxInputLength","dateStringToObject","isText","Text","isNumber","isOptionSelect","OptionSelect","selectedDateValue","zonedTimeToUtc","fieldOptions","getOptionsAsListItems","selected","optionsAsListItems","notificationsOnlyOption","option","otherOption","Other","splice","dataLoaded","cacheAttributeValues","inputValueChanged","field","inputDateValueChanged","dateObjectToString","utcToZonedTime","inputOptionsValueChanged","savePointCentralUserTypeHelper","saveUserAttributes","attributeValuesCache","_saveUserTypeAndAttributes","updateAccessPlanCollections","childAttribute","successMessageKey","saveModel","date","format","dateString","UserAttributeListPage","templateOnly","UserAttributeList","displaySearchBar","displayedUserAttributes","isOnUserAttributesPage","_userAttributeCollect","readOnlyAttributes","isPersonallyIdentifiableInformation","childrenHaveValues","dataTourAnchor","childValues","GenericInputTypeDate","showAddUserAttributesOption","editUserAttribute","editUserAttributeRouteId","addNewUserAttribute","newUserAttributeRouteId","Routes","AccessCard","availableRoutes","LocalAccess","LocalSchedule","remoteLoginId","RemoteAccess","drillThroughItems","isRouteAvailable","LinkTo","AccessInfoCard","cardItems","_this$args$deviceAcce","isButton","isSmrfSupported","peopleItemAccessCard_","peopleItemAccessInfoCard_","UsersEditIndexComponent","EmberUsersAddContactAddress","EmberUsersLinkLogin","currentLocale","getSimpleListItem_","UsernameEditRouteComponent","unlinkLogin","deleteLogin","CanViewPeopleUi","canViewPeopleUi","updateAccessPlansAccessPointCollections","UserEditDeviceAccessRoute","BaseDeviceAccessRoute","refreshModel","transition","modelFor","parentRoute","hasUserAccessReviewAccess","getRouteItem","EmberUsersUserAccessReview","alreadySaved","showOfflineDeviceWarning","areAnyOffline","afterModel","StandardUser","replaceWith","batchSize","USERS_BATCH_SIZE","includeChildScope","sortByAccess","getDuressActionItem","canCreateDuressUsers","fnNew","fnEdit","canEditDuressUsers","canSupportAdditionalDuressUser","supportsMultipleDuressUsers","duressUserIds","fnGetItem","actionArguments","transitionToLegacyPage","Users","UsersIndexController","not","BaseController","userEdit","EmberUserEdit","userEditNotSupported","EmberUserEditNotSupported","editUserInformation","EmberEditUserInformation","search","addLoadedUsers","enqueue","showUsersCount","_this$usersCount","usersCount","residentUser","displayResidentUser","toolsDropdownButtons","links","hasUsersPageBulkActionsBeta","toggleBulkEditMode","duressItem","duressUserId","hideAllPinsGroupSettingEnabled","maxUserCodeLength","toggleUsersProperty","hideUserCodes","canViewPanelSlotNumbers","hidePanelSlotNumbers","ensureAllUsersLoaded","loadResidentUserAction","residentUserResponse","applySearch","clearUserSelections","clearUserData","filterUsers","defaultRules","plurals","singular","irregularPairs","uncountable","BLANK_REGEX","LAST_WORD_DASHED_REGEX","LAST_WORD_CAMELIZED_REGEX","CAMELIZED_REGEX","CAPITALIZE_REGEX","str","replace","match","toUpperCase","loadUncountable","rules","loadIrregular","pair","irregular","irregularInverse","Inflector","ruleSet","makeDictionary","enableCache","hasOwnProperty","Error","cache","pluralize","inflector","word","purgeCache","_cacheUsed","_sCache","_singularize","numberOrWord","cacheKey","withoutCount","_pCache","_pluralize","disableCache","plural","regex","string","wordOrCount","inflect","parseFloat","typeRules","inflection","substitution","result","lowercase","wordSplit","lastWord","isBlank","isCamelized","rule","isUncountable","exec","RegExp"],"sourceRoot":""}