@clickview/lite 0.70.1-dev.1 → 0.70.1-dev.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/3596-7f32e7d4c0-lite.chunk.js +3 -0
- package/dist/scripts/3596-7f32e7d4c0-lite.chunk.js.map +1 -0
- package/dist/scripts/4050-cd4d18058a-lite.chunk.js +3 -0
- package/dist/scripts/4050-cd4d18058a-lite.chunk.js.map +1 -0
- package/dist/scripts/4377-001a8ee263-lite.chunk.js +2 -0
- package/dist/scripts/4377-001a8ee263-lite.chunk.js.map +1 -0
- package/dist/scripts/549-2d591052e3-lite.chunk.js +2 -0
- package/dist/scripts/549-2d591052e3-lite.chunk.js.map +1 -0
- package/dist/scripts/5721-2141ed4fb6-lite.chunk.js +2 -0
- package/dist/scripts/5721-2141ed4fb6-lite.chunk.js.map +1 -0
- package/dist/scripts/5797-f84ce545b9-lite.chunk.js +2 -0
- package/dist/scripts/5797-f84ce545b9-lite.chunk.js.map +1 -0
- package/dist/scripts/5829-689f5be5d1-lite.chunk.js +3 -0
- package/dist/scripts/5829-689f5be5d1-lite.chunk.js.map +1 -0
- package/dist/scripts/6046-5652117548-lite.chunk.js +2 -0
- package/dist/scripts/6046-5652117548-lite.chunk.js.map +1 -0
- package/dist/scripts/{6629-3ea157aef8-lite.chunk.js → 6629-910e316a83-lite.chunk.js} +3 -3
- package/dist/scripts/6629-910e316a83-lite.chunk.js.map +1 -0
- package/dist/scripts/7042-65a932d16b-lite.chunk.js +2 -0
- package/dist/scripts/{7042-aaaf6e286f-lite.chunk.js.map → 7042-65a932d16b-lite.chunk.js.map} +1 -1
- package/dist/scripts/7428-6dd787bc07-lite.chunk.js +2 -0
- package/dist/scripts/7428-6dd787bc07-lite.chunk.js.map +1 -0
- package/dist/scripts/7757-9b72774917-lite.chunk.js +2 -0
- package/dist/scripts/{7757-e4d91d7fac-lite.chunk.js.map → 7757-9b72774917-lite.chunk.js.map} +1 -1
- package/dist/scripts/8191-ff27deee6c-lite.chunk.js +2 -0
- package/dist/scripts/8191-ff27deee6c-lite.chunk.js.map +1 -0
- package/dist/scripts/{8280-287760fb57-lite.chunk.js → 8280-8bb89d0a89-lite.chunk.js} +2 -2
- package/dist/scripts/8280-8bb89d0a89-lite.chunk.js.map +1 -0
- package/dist/scripts/8832-73ffd39e2a-lite.chunk.js +2 -0
- package/dist/scripts/{8832-aa3df17f66-lite.chunk.js.map → 8832-73ffd39e2a-lite.chunk.js.map} +1 -1
- package/dist/scripts/9973-648be9b72a-lite.chunk.js +2 -0
- package/dist/scripts/9973-648be9b72a-lite.chunk.js.map +1 -0
- package/dist/scripts/bundle-5276379bf8.min.js +3 -0
- package/dist/scripts/{bundle-4735d8d159.min.js.map → bundle-5276379bf8.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/3596-191624e307-lite.chunk.js +0 -3
- package/dist/scripts/3596-191624e307-lite.chunk.js.map +0 -1
- package/dist/scripts/4050-74aa5394f6-lite.chunk.js +0 -3
- package/dist/scripts/4050-74aa5394f6-lite.chunk.js.map +0 -1
- package/dist/scripts/4377-f6e641f39a-lite.chunk.js +0 -2
- package/dist/scripts/4377-f6e641f39a-lite.chunk.js.map +0 -1
- package/dist/scripts/52-d91751eafb-lite.chunk.js +0 -2
- package/dist/scripts/52-d91751eafb-lite.chunk.js.map +0 -1
- package/dist/scripts/549-f06f2dab2b-lite.chunk.js +0 -2
- package/dist/scripts/549-f06f2dab2b-lite.chunk.js.map +0 -1
- package/dist/scripts/5721-bfd734f968-lite.chunk.js +0 -2
- package/dist/scripts/5721-bfd734f968-lite.chunk.js.map +0 -1
- package/dist/scripts/5797-04d8a61b80-lite.chunk.js +0 -2
- package/dist/scripts/5797-04d8a61b80-lite.chunk.js.map +0 -1
- package/dist/scripts/5829-1c696c8446-lite.chunk.js +0 -3
- package/dist/scripts/5829-1c696c8446-lite.chunk.js.map +0 -1
- package/dist/scripts/6046-339bc1b2e1-lite.chunk.js +0 -2
- package/dist/scripts/6046-339bc1b2e1-lite.chunk.js.map +0 -1
- package/dist/scripts/6629-3ea157aef8-lite.chunk.js.map +0 -1
- package/dist/scripts/7042-aaaf6e286f-lite.chunk.js +0 -2
- package/dist/scripts/741-98a532e970-lite.chunk.js +0 -2
- package/dist/scripts/741-98a532e970-lite.chunk.js.map +0 -1
- package/dist/scripts/7757-e4d91d7fac-lite.chunk.js +0 -2
- package/dist/scripts/8191-d5f68d2463-lite.chunk.js +0 -2
- package/dist/scripts/8191-d5f68d2463-lite.chunk.js.map +0 -1
- package/dist/scripts/8280-287760fb57-lite.chunk.js.map +0 -1
- package/dist/scripts/8832-aa3df17f66-lite.chunk.js +0 -2
- package/dist/scripts/bundle-4735d8d159.min.js +0 -3
- /package/dist/css/{52-lite-e2d7497beb.chunk.css → 7428-lite-e2d7497beb.chunk.css} +0 -0
- /package/dist/scripts/{3596-191624e307-lite.chunk.js.LICENSE.txt → 3596-7f32e7d4c0-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4050-74aa5394f6-lite.chunk.js.LICENSE.txt → 4050-cd4d18058a-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5829-1c696c8446-lite.chunk.js.LICENSE.txt → 5829-689f5be5d1-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6629-3ea157aef8-lite.chunk.js.LICENSE.txt → 6629-910e316a83-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-4735d8d159.min.js.LICENSE.txt → bundle-5276379bf8.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/9973-648be9b72a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/search/components/search-filters/PartialSearchFilters.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-list/empty-state/UserManagerSearchEmptyState.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-list/partial-loading/partial-user-list.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/user-list/partial-loading/PartialUserList.tsx","file:///app/packages/libs/shared/src/components/bulk-selection-summary/bulk-selection-summary.scss","file:///app/packages/libs/shared/src/components/bulk-selection-summary/BulkSelectionSummary.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-list-items/components/JobTitle.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-list-items/components/LastActive.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-list-items/components/UserAuthenticationMethods.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/manage-users-table/ManageUsersTable.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/manage-users-table/ManageUsersTableUtils.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/select-with-spreadsheet/select-with-spreadsheet.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/select-with-spreadsheet/SelectWithSpreadsheet.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/manage-users/components/select-with-spreadsheet/select-with-spreadsheet-popup.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/manage-users/components/select-with-spreadsheet/SelectWithSpreadsheetPopup.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/manage-users/useManageUsersCheckboxHelper.ts","file:///app/packages/libs/shared/src/apps/user-manager/components/manage-users/ManageUsers.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/manage-users/useGetActions.tsx","file:///app/packages/libs/shared/src/apps/user-manager/errors/sso-password-reset-email-not-allowed/SsoPasswordResetEmailNotAllowedError.tsx","file:///app/packages/libs/shared/src/utils/CuratorPermissionsHelper.ts","file:///app/packages/libs/shared/src/apps/user-manager/components/user-list-items/components/UserItemActions.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-manager-entries/user-manager-entries.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/user-manager-entries/UserManagerEntries.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-manager-header/UserManagerHeader.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/warning-alert/warning-alert.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/warning-alert/WarningAlert.tsx","file:///app/packages/libs/shared/src/apps/user-manager/errors/cannot-year-group-rollover/CannotYearGroupRolloverError.ts","file:///app/packages/libs/shared/src/apps/user-manager/hooks/useFetchUserCount.ts","file:///app/packages/libs/shared/src/apps/user-manager/interfaces/viewmodels/BulkUserActionsViewModel.ts","file:///app/packages/libs/shared/src/apps/user-manager/utils/BulkUserActionsAnalyticsHelper.ts","file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/projects/lite/src/apps/user-manager/constants/SelectWithSpreadsheetTemplate.ts","file:///app/packages/projects/lite/src/apps/user-manager/hooks/useFetchUsers.ts"],"sourcesContent":["import * as React from 'react';\n\nimport styles from './search-filters.scss';\n\ninterface PartialSearchFiltersProps {\n count?: number;\n}\n\nexport function PartialSearchFilters({ count = 6 }: PartialSearchFiltersProps): JSX.Element {\n return (\n <div className='d-flex'>\n <div className='d-flex ps-1'>\n {Array(count).fill(null).map((item, index) => (\n <div key={index} className={`${styles.partialButton} partial-loading-background mx-1`} />\n ))}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'userManager.userManagerSearchEmptyState';\n\ninterface UserManagerSearchEmptyStateProps {\n imageUrl: string;\n}\n\nexport function UserManagerSearchEmptyState(props: UserManagerSearchEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} />\n <EmptyState.Heading><Text namespace={namespace} phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text namespace={namespace} phrase='info' /></EmptyState.Info>\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialEntries\":\"TOmcn\",\"partialCreateUser\":\"Yf4Wx\",\"partialBulkUpload\":\"sp3ux\",\"partialCheckbox\":\"REK11\",\"partialYearGroup\":\"d2NEw\",\"partialName\":\"qmSU8\",\"partialEmail\":\"uHYQO\",\"partialAvatar\":\"Y796I\",\"lastActiveLabel\":\"aItB8\",\"lastActiveDate\":\"RMdcx\",\"partialAction\":\"jn0FO\"};","import React from 'react';\n\nimport styles from './partial-user-list.scss';\n\nfunction PartialUserItem(): JSX.Element {\n return (\n <li className='d-flex align-items-center py-2'>\n <div className={`ms-4 me-3 partial-loading-background ${styles.partialCheckbox}`} />\n\n <div className={`me-2 ms-n1 rounded-circle partial-loading-background ${styles.partialAvatar}`} />\n\n <div className='d-flex flex-column justify-content-center me-auto'>\n <div className='pb-1 d-flex align-items-center'>\n <div>\n <div className={`partial-loading-background align-middle d-inline-block ${styles.partialName}`} />\n </div>\n </div>\n\n <div className={`partial-loading-background me-1 align-middle d-inline-block ${styles.partialEmail}`} />\n </div>\n\n <div className='d-flex ps-1 me-3 d-flex justify-content-end'>\n <div className={`partial-loading-background ${styles.partialYearGroup}`} />\n </div>\n\n <span className='d-flex flex-column me-3'>\n <div className={`partial-loading-background mb-1 ${styles.lastActiveLabel}`} />\n <div className={`partial-loading-background ${styles.lastActiveDate}`} />\n </span>\n\n <div className='d-flex align-items-center'>\n <div className={`partial-loading-background ${styles.partialAction}`} />\n <div className={`partial-loading-background ${styles.partialAction}`} />\n </div>\n </li>\n );\n}\n\nexport function PartialUserList(): JSX.Element {\n return (\n <ul className='m-0 list-unstyled striped-list'>\n {Array(20).fill(null).map((item, index) => <PartialUserItem key={index} />)}\n </ul>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"iconContainer\":\"lUFJg\",\"loadingContainer\":\"b0Mz5\"};","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UserManagerConstants } from 'libs/shared/apps/user-manager/constants/UserManagerConstants';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './bulk-selection-summary.scss';\n\nconst namespace = 'shared.bulkSelectionSummary';\n\ninterface BulkSelectionSummaryProps {\n selectedCount: number;\n onClickDeselectAll: () => void;\n onClickSelectBulk: () => void;\n getTypeText: (count: number) => string;\n \n selectAllCount?: number;\n allSelected?: boolean;\n showSelectingSpinner?: boolean;\n onClickSelectAll?: (success: () => void) => void;\n\n hasRostering?: boolean;\n}\n\nexport function BulkSelectionSummary(props: BulkSelectionSummaryProps): JSX.Element {\n const [ selectAllSpinner, setSelectAllSpinner ] = React.useState(false);\n\n function onClickSelectAll(): void {\n setSelectAllSpinner(true);\n props.onClickSelectAll(() => {\n setSelectAllSpinner(false);\n });\n }\n\n if (!props.selectedCount && !props.showSelectingSpinner)\n return <></>;\n\n const showSelectAll = (\n !!props.onClickSelectAll &&\n !props.allSelected &&\n props.selectAllCount !== 0 &&\n props.selectAllCount > UserManagerConstants.USER_PAGE_LIMIT\n );\n\n return (\n <div className='border border-dark rounded-3 d-flex justify-content-between align-items-center p-2 mb-3'>\n {props.showSelectingSpinner ? (\n <div className={`px-2 d-flex align-items-center ${styles.loadingContainer}`}>\n <Spinner as='div' size='sm' animation='border' role='status' />\n </div>\n ) : (\n <>\n <div className='d-flex align-items-center'>\n <div className={`${styles.iconContainer} text-white rounded-circle bg-dark me-3 ms-2 d-flex justify-content-center align-items-center`}>\n <SvgContainer svgName={cvSvgLibrary.Group} />\n </div>\n\n <Text\n namespace={namespace}\n phrase='selectedCount'\n options={{ smartCount: props.selectedCount, type: props.getTypeText(props.selectedCount) }}\n />\n\n {(() => {\n if (!showSelectAll)\n return <></>;\n\n if (selectAllSpinner || props.selectAllCount === undefined)\n return (\n <div className='px-2 py-1'>\n <Spinner as='div' size='sm' animation='border' role='status' />\n </div>\n );\n\n return (\n <DivButton className='info-link px-2' onClick={onClickSelectAll}>\n <Text\n namespace={namespace}\n phrase='selectAll'\n options={{ smartCount: props.selectAllCount, type: props.getTypeText(props.selectAllCount) }}\n />\n </DivButton>\n );\n })()}\n </div>\n <div className='d-flex'>\n <button className='btn btn-link me-2' onClick={props.onClickDeselectAll}>\n <Text namespace={namespace} phrase='deselectAll' />\n </button>\n <Tooltip\n spanHack\n title={props.hasRostering ? LanguageService.getPhrase(namespace, 'disabled') : ''}\n >\n <button\n className={props.hasRostering ? 'btn btn-outline-dark cursor-default disabled' : 'btn btn-outline-dark'}\n onClick={props.onClickSelectBulk}\n disabled={props.hasRostering}\n >\n <Text namespace={namespace} phrase='selectBulkAction' />\n </button>\n </Tooltip>\n </div>\n </>\n )}\n \n </div>\n );\n}","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { User } from 'libs/shared/interfaces';\n\nconst namespace = 'userManager.userList';\n\ninterface JobTitleProps {\n user: Partial<User>;\n}\n\nexport function JobTitle(props: JobTitleProps): JSX.Element {\n const jobTitle = props.user.userProfile?.metadata?.jobTitle || '-';\n\n return (\n <span className='d-flex flex-column'>\n <small>\n <Text namespace={namespace} phrase='jobTitle' />\n </small>\n <span className={jobTitle === '-' ? 'ms-3' : ''}>\n {jobTitle}\n </span>\n </span>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { CurrentUser, User } from 'libs/shared/interfaces';\n\nimport styles from './user-item-components.scss';\n\nconst namespace = 'userManager.userList';\n\nfunction isDateValid(date: string, status: ObjectStatus): boolean {\n return !!date && status === ObjectStatus.Active && DateHelper.get(date, 'year') >= 2000;\n}\n\nfunction getLastActiveDate(date: string, status: ObjectStatus): string {\n if (!isDateValid(date, status))\n return '-';\n\n const lastSignedIn = DateHelper.fromNow(date);\n\n if (lastSignedIn === 'a day ago')\n return LanguageService.getPhrase(namespace, 'yesterday');\n\n if (lastSignedIn.includes('hour'))\n return LanguageService.getPhrase(namespace, 'today');\n\n // If the string starts with a char that's not a number, convert it to uppercase. E.g. \"a year ago\"\n if (Number.isNaN(+lastSignedIn.substr(0, 1)))\n return lastSignedIn.substr(0, 1).toUpperCase() + lastSignedIn.substr(1);\n\n return lastSignedIn;\n}\n\ninterface LastActiveProps {\n user: User;\n currentUser?: CurrentUser;\n}\n\nexport function LastActive(props: LastActiveProps): JSX.Element {\n const date = getLastActiveDate(props.user.metadata?.lastSignInTime, props.user.status);\n\n const isCurrentUser = props.user.id.toString() === props.currentUser?.id.toString();\n\n return (\n <span className={`${styles.lastActiveContainer} ${isCurrentUser ? styles.isCurrentUser : ''}`}>\n <span className='d-flex flex-column'>\n <small>\n <Text namespace={namespace} phrase='lastActive' />\n </small>\n <span className={date === '-' ? 'ms-3' : ''}>\n {date}\n </span>\n </span>\n </span>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { User } from 'libs/shared/interfaces';\n\nimport styles from './user-item-components.scss';\n\nconst namespace = 'userManager.userList';\n\ninterface UserAuthenticationMethodsProps {\n user: User;\n}\n\nexport function UserAuthenticationMethods(props: UserAuthenticationMethodsProps): JSX.Element {\n /**\n * Sort the authentication methods so that SSO always appear on top of ClickView\n */\n const sortedAuthMethods = React.useMemo(() => {\n return props.user.authenticationMethods?.sort(method => {\n return method.local ? 1 : -1;\n });\n }, [props.user.authenticationMethods]);\n \n if (!props.user.authenticationMethods?.length)\n return <></>;\n\n const hasSSO = props.user.authenticationMethods?.find(am => !am.local);\n\n return (\n <div className={`${styles.authMethodContainer} d-flex flex-row-reverse justify-content-center ms-n3`}>\n <Tooltip\n title={LanguageService.getPhrase(namespace, hasSSO ? 'ssoTooltip' : 'noSsoTooltip')}\n spanHack\n >\n {sortedAuthMethods.map((authMethod, i) => {\n const backgroundColor = authMethod.backgroundColour ? `#${authMethod.backgroundColour}` : '#fff';\n\n return (\n <div\n key={authMethod.displayName}\n className={`${styles.authMethodLogo} rounded-circle border`}\n style={{\n zIndex: props.user.authenticationMethods.length - i,\n backgroundImage: `url(${authMethod.logoUrl})`,\n backgroundColor\n }}\n />\n );\n })}\n </Tooltip>\n </div>\n );\n}","import React from 'react';\n\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { getColumns, useGetData } from './ManageUsersTableUtils';\n\nconst TABLE_THEME: TableTheme = {\n table: 'striped-list no-full-width pb-3',\n row: 'striped-row rounded',\n cell: 'd-flex align-items-center py-2'\n};\n\ninterface ManageUsersTableProps {\n users: User[];\n currentUser: CurrentUser;\n isChecked: (id: string) => boolean;\n onToggleCheckbox: (id: string) => void;\n imageCdnUrl: string;\n appLinks: UserManagerAppLinks;\n products?: ProductId[];\n onClickResendActivationEmail?: (user: User) => void;\n onClickSendResetEmail?: (user: User) => void;\n onClickSendVerificationEmail?: (user: User) => void;\n shouldDisplayAuthenticationMethods: boolean;\n ssoHelpArticle?: string;\n hasRostering?: boolean;\n}\n\nexport const ManageUsersTable = React.memo(function (props: ManageUsersTableProps): JSX.Element {\n const client = React.useContext<UserManagerClient>(UserManagerClientContext);\n const data = useGetData(props.users, props.isChecked);\n\n const columns = getColumns(\n props.onToggleCheckbox,\n props.imageCdnUrl,\n props.currentUser,\n props.appLinks,\n props.products,\n props.onClickResendActivationEmail,\n props.onClickSendResetEmail,\n props.onClickSendVerificationEmail,\n props.shouldDisplayAuthenticationMethods,\n props.ssoHelpArticle,\n props.hasRostering,\n client\n );\n\n return (\n <Table\n columns={columns}\n data={data}\n theme={TABLE_THEME}\n />\n );\n});","import React from 'react';\nimport { CellProps, Column } from 'react-table';\n\nimport { JobTitle } from 'libs/shared/apps/user-manager/components/user-list-items/components/JobTitle';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { UserManagerAppLinks } from '../../interfaces';\nimport { BasicUserDetails } from '../user-list-items/components/BasicUserDetails';\nimport { LastActive } from '../user-list-items/components/LastActive';\nimport { RoleOrYearGroup } from '../user-list-items/components/RoleOrYearGroup';\nimport { UserAuthenticationMethods } from '../user-list-items/components/UserAuthenticationMethods';\nimport { UserItemActions } from '../user-list-items/components/UserItemActions';\nimport { UserItemAvatar } from '../user-list-items/components/UserItemAvatar';\n\ninterface ManageUsersTableData {\n user: User;\n checked: boolean;\n}\n\nexport function getColumns(\n onToggleCheckbox: (id: string) => void,\n imageCdnUrl: string,\n currentUser: CurrentUser,\n appLinks: UserManagerAppLinks,\n products: ProductId[],\n onClickResendActivationEmail?: (user: User) => void,\n onClickSendResetEmail?: (user: User) => void,\n onClickSendVerificationEmail?: (user: User) => void,\n shouldDisplayAuthenticationMethods?: boolean,\n ssoHelpArticle?: string,\n hasRostering?: boolean,\n client?: UserManagerClient\n): Column<ManageUsersTableData>[] {\n const columns: Column<ManageUsersTableData>[] = [\n {\n id: 'checkboxes',\n accessor: (data: ManageUsersTableData) => ({ id: data.user.id, checked: data.checked }),\n Cell: (cell: CellProps<ManageUsersTableData, { id: string; checked: boolean; }>) => React.useMemo(() => (\n <div className='w-100 text-center ms-3 ps-2'>\n <Checkbox\n id={cell.value.id}\n checked={cell.value.checked}\n onChange={() => onToggleCheckbox(cell.value.id)}\n />\n </div>\n ), []),\n width: 5\n },\n {\n accessor: 'user',\n id: 'avatar',\n Cell: ({ value }) => React.useMemo(\n () => (\n <div className='w-100'>\n <UserItemAvatar user={value} imageCdnUrl={imageCdnUrl} />\n </div>\n )\n , []\n ),\n width: 5\n },\n {\n accessor: 'user',\n id: 'basicDetails',\n Cell: ({ value }) => React.useMemo(() => {\n return (\n <div className='w-100'>\n <BasicUserDetails user={value} currentUser={currentUser} />\n </div>\n );\n }, []),\n width: 50\n },\n {\n accessor: 'user',\n id: 'roleOrYearGroup',\n Cell: ({ value }) => React.useMemo(() => (\n <div className='w-100 text-end'>\n <RoleOrYearGroup userType={value.userType} user={value} />\n </div>\n ), []),\n width: 11\n }\n ];\n\n if (client === UserManagerClient.Curator) {\n columns.push({\n accessor: 'user',\n id: 'jobTitle',\n Cell: ({ value }) => React.useMemo(() => (\n <div className='w-100'>\n <JobTitle user={value} />\n </div>\n ), []),\n width: 8\n });\n }\n\n columns.push({\n accessor: 'user',\n id: 'lastActive',\n Cell: ({ value }) => React.useMemo(() => (\n <div className='w-100'>\n <LastActive user={value} currentUser={currentUser} />\n </div>\n ), []),\n width: 8\n });\n \n if (shouldDisplayAuthenticationMethods) {\n columns.push({\n accessor: 'user',\n id: 'authMethods',\n Cell: ({ value }) => React.useMemo(() => (\n <div className='w-100 d-flex justify-content-center'>\n <UserAuthenticationMethods user={value} />\n </div>\n ), []),\n width: 6\n });\n }\n\n columns.push({\n accessor: 'user',\n id: 'actions',\n Cell: ({ value }) => React.useMemo(() => (\n <div className='w-100'>\n <UserItemActions\n user={value}\n userType={value.userType}\n appLinks={appLinks}\n onClickSendResetEmail={onClickSendResetEmail}\n onClickResendActivationEmail={onClickResendActivationEmail}\n onClickSendVerificationEmail={onClickSendVerificationEmail}\n currentUser={currentUser}\n ssoHelpArticle={ssoHelpArticle}\n products={products}\n hasRostering={hasRostering}\n />\n </div>\n ), []),\n width: 8\n });\n\n return columns;\n}\n\nexport function useGetData(users: User[], isChecked: (id: string) => boolean): ManageUsersTableData[] {\n return users.map(user => {\n return {\n user,\n checked: isChecked(user.id),\n isCurrentUser: false\n };\n });\n}","// extracted by mini-css-extract-plugin\nexport default {\"cell\":\"Vsgxg\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { BulkUploadFileSelect } from 'libs/shared/apps/user-manager/components/bulk-upload/bulk-upload-file-select/BulkUploadFileSelect';\nimport { InvalidSpreadsheetError } from 'libs/shared/apps/user-manager/errors/invalid-spreadsheet/InvalidSpreadsheetError';\nimport { BulkUserUploadHelper } from 'libs/shared/apps/user-manager/utils/BulkUserUploadHelper';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './select-with-spreadsheet.scss';\n\nconst namespaces = {\n [UserGroup.Learner]: 'userManager.selectStudentWithSpreadsheet',\n [UserGroup.Staff]: 'userManager.selectStaffWithSpreadsheet',\n [UserGroup.Unknown]: ''\n};\n\ninterface SelectWithSpreadsheetProps {\n onSelectSpreadsheet: (userQuery: string[], spreadsheetRowCount: number) => void;\n onClickCancel: () => void;\n userType: UserGroup;\n templateLink: string;\n}\n\nexport function SelectWithSpreadsheet(props: SelectWithSpreadsheetProps): JSX.Element {\n const namespace = namespaces[props.userType];\n\n function onSelectSpreadsheet(data: string[][]): void {\n const isEmpty = BulkUserUploadHelper.validateEmptySpreadsheetData(data);\n if (isEmpty) {\n props.onClickCancel();\n return;\n }\n\n const clone = [...data];\n const headings = clone.shift();\n\n const { isValid, errorMessage } = BulkUserUploadHelper.validateSelectWithSpreadsheet(\n headings,\n [ 'Email', 'Username' ]\n );\n\n if (!isValid) {\n Core.ErrorHelper.throw(new InvalidSpreadsheetError(errorMessage));\n props.onClickCancel();\n return;\n }\n\n const requests = BulkUserUploadHelper.buildUserQueryFromSpreadsheet(headings, clone, props.userType);\n\n props.onSelectSpreadsheet(requests, data.length);\n }\n\n const ExampleSpreadSheet = () => {\n return (\n <LanguageNamespaceContext.Provider value={namespaces[props.userType]}>\n <table cellPadding={5}>\n <tbody>\n\n <tr className='text-center bg-light'>\n <td className={`text-nowrap border border-dark ${styles.cell}`}><Text phrase='a' /></td>\n <td className={`text-nowrap border border-dark ${styles.cell}`}><Text phrase='b' /></td>\n </tr>\n\n <tr className='fw-semibold'>\n <td className={`text-nowrap border border-dark ${styles.cell}`}><Text phrase='email' /></td>\n <td className={`text-nowrap border border-dark ${styles.cell}`}><Text phrase='username' /></td>\n </tr>\n\n <tr>\n <td className={`text-nowrap border border-dark ${styles.cell}`}><Text phrase='exampleEmail' /></td>\n <td className={`text-nowrap border border-dark ${styles.cell}`}></td>\n </tr>\n <tr>\n <td className={`text-nowrap border border-dark ${styles.cell}`}></td>\n <td className={`text-nowrap border border-dark ${styles.cell}`}><Text phrase='exampleUsername' /></td>\n </tr>\n </tbody>\n </table>\n </LanguageNamespaceContext.Provider>\n );\n };\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n {/* Step 1 */}\n <div className='pb-3'>\n <div className='h6'><Text phrase='downloadTemplateHeading' /></div>\n <p className='ms-n1 ps-3'><Text phrase='downloadTemplateInfo' /></p>\n <div className='ms-n1 ps-3'>\n <a className='btn btn-outline-dark mx-auto' download href={props.templateLink}>\n <SvgContainer svgName={cvSvgLibrary.Download} className='svg-container std me-1 ms-n1 align-middle' />\n <div className='align-middle d-inline-block'><Text phrase='downloadBtn' /></div>\n </a>\n </div>\n </div>\n\n {/* Step 2 */}\n <div className='pb-3'>\n <div className='h6'><Text phrase='addUsersHeading' /></div>\n <p className='ms-n1 ps-3'><Text phrase='addUsersInfo' /></p>\n <div className='mx-n1 px-3'>\n <ExampleSpreadSheet/>\n </div>\n </div>\n\n {/* Step 3 */}\n <div className='pb-3'>\n <div className='h6'><Text phrase='uploadHeading' /></div>\n <div className='d-inline-block ms-n1 ps-3 mt-1'>\n <div className='d-inline-block'>\n <BulkUploadFileSelect onSelectSpreadsheet={onSelectSpreadsheet} />\n </div>\n </div>\n </div>\n\n {/* Step 4 */}\n <div>\n <div className='h6'><Text phrase='matchesHeading' /></div>\n <p className='ms-n1 ps-3'><Text phrase='matchesInfo' /></p>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"modalWidth\":\"KYu7Y\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, OperationDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { useManageUsersCheckboxHelper } from 'libs/shared/apps/user-manager/components/manage-users/useManageUsersCheckboxHelper';\nimport { SelectWithSpreadsheet } from 'libs/shared/apps/user-manager/components/select-with-spreadsheet/SelectWithSpreadsheet';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { User } from 'libs/shared/interfaces';\n\nimport styles from './select-with-spreadsheet-popup.scss';\n\nconst namespaces = 'userManager.selectWithSpreadsheetPopup';\n\ntype ICheckboxHelper = ReturnType<typeof useManageUsersCheckboxHelper>\n\ntype SelectWithSpreadsheetPopupProps = {\n userType: UserGroup;\n users: User[];\n template: string;\n closePopup: () => void;\n checkboxHelper: ICheckboxHelper;\n setShowSelectingSpinner: (arg: boolean) => void;\n userRequest: (query: string) => Flight.Request;\n};\n\nexport function SelectWithSpreadsheetPopup(props: SelectWithSpreadsheetPopupProps): JSX.Element {\n const CheckboxHelper = props.checkboxHelper;\n const fetchAsync = Flight.useGetFetchAsync();\n let ids: string[] = [];\n\n function onSelectSpreadsheet(queries: string[], spreadsheetRowCount: number) {\n props.setShowSelectingSpinner(true);\n\n const requests = queries.map(q => {\n return fetchAsync<string[]>(props.userRequest(q));\n });\n\n Promise.all(requests).then(res => {\n res.forEach(r => {\n ids = ids.concat(r);\n });\n\n CheckboxHelper.selectAll(ids.map(id => id.toString()));\n\n AnalyticsHelper.logUserAction({\n userType: props.userType,\n spreadsheetRowCount: spreadsheetRowCount,\n totalUsersFound: ids.length\n }, {\n workflowPhase: WorkflowPhase.Complete,\n actionType: UserAction.Select,\n entity: EntityType.User,\n descriptor: OperationDescriptor.Bulk,\n location: LocationContext.Popup\n });\n\n props.setShowSelectingSpinner(false);\n });\n\n props.closePopup();\n }\n\n const dataLoaded = props.users.length;\n\n return (\n <Popup\n closePopup={props.closePopup}\n title={LanguageService.getPhrase(namespaces, 'heading')}\n showLoadingSpinner={!dataLoaded}\n dialogClassName={styles.modalWidth}\n >\n {dataLoaded && (\n <SelectWithSpreadsheet\n userType={props.userType}\n onSelectSpreadsheet={onSelectSpreadsheet}\n onClickCancel={props.closePopup}\n templateLink={props.template}\n />\n )}\n </Popup>\n );\n}","import React from 'react';\n\nimport { UserManagerQueryParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserManagerQueryParams';\nimport { BulkCheckboxManagerOptions, useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { User } from 'libs/shared/interfaces';\n\ntype UsedParamNames = keyof Omit<UserManagerQueryParams, 'cursor' | 'sort'>;\n\ninterface ManagerUsersCheckboxHelper extends BulkCheckboxManagerOptions {\n queryParams: UserManagerQueryParams;\n}\n\n/**\n * Used by ManageUsers to determine if we should show the \"Select all X users\"\n * button or not, based on which filters we've previously selected all on\n */\nexport const useManageUsersCheckboxHelper = (\n users: User[],\n options: ManagerUsersCheckboxHelper\n) => {\n const CheckboxHelper = useBulkCheckboxManager(users, options);\n\n const [ bulkSelections, setBulkSelections ] = React.useState<any>({});\n\n function getSelectionKey(): string {\n // Need to disable linting complaining about our params\n // eslint-disable-next-line\n const { cursor, sort, ...queryParams } = options.queryParams;\n return Object.keys(queryParams)\n .sort()\n .map((key: UsedParamNames) => {\n const param = queryParams[key];\n return Array.isArray(param) ?\n param.sort().join(',') :\n param;\n })\n .join(':');\n }\n\n function selectAll(userIds: string[]): void {\n CheckboxHelper.setSelected(userIds);\n\n setBulkSelections({\n ...bulkSelections,\n [getSelectionKey()]: true\n });\n }\n\n function onToggleItem(id: string): void {\n if (CheckboxHelper.isChecked(id))\n setBulkSelections({});\n\n CheckboxHelper.onToggleItem(id);\n }\n\n function onToggleBulk(): void {\n if (CheckboxHelper.bulkChecked)\n setBulkSelections({});\n\n if (!users?.length)\n return;\n\n CheckboxHelper.onToggleBulk();\n }\n\n function reset(): void {\n setBulkSelections({});\n CheckboxHelper.reset();\n }\n\n function allSelected(): boolean {\n if (!Object.keys(bulkSelections).length)\n return false;\n\n /**\n * This will be our selection key if they click select all\n * with no filters or queries\n */\n if (bulkSelections[''])\n return true;\n\n return bulkSelections[getSelectionKey()];\n }\n\n return {\n ...CheckboxHelper,\n selectAll,\n onToggleItem,\n onToggleBulk,\n reset,\n allSelected: allSelected()\n };\n};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { ClickDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ScopedSearchBar } from 'libs/shared/apps/search/components/scoped-search-bar/ScopedSearchBar';\nimport { PartialSearchFilters } from 'libs/shared/apps/search/components/search-filters/PartialSearchFilters';\nimport { SearchFilters } from 'libs/shared/apps/search/components/search-filters/SearchFilters';\nimport { UserManagerSearchEmptyState } from 'libs/shared/apps/user-manager/components/user-list/empty-state/UserManagerSearchEmptyState';\nimport { PartialUserList } from 'libs/shared/apps/user-manager/components/user-list/partial-loading/PartialUserList';\nimport { UserManagerQueryParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserManagerQueryParams';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces/UserManagerAppLinks';\nimport { BulkUserActionsViewModel } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkUserActionsViewModel';\nimport { YearGroupRolloverStatus } from 'libs/shared/apps/user-manager/interfaces/YearGroupRolloverStatus';\nimport { BulkUserActionsHelper } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { BulkSelectionSummary } from 'libs/shared/components/bulk-selection-summary/BulkSelectionSummary';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { RosteringAlert } from 'libs/shared/components/rostering/rostering-alert/RosteringAlert';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { Config, CurrentUser, User, YearGroup } from 'libs/shared/interfaces';\n\nimport { ManageUsersTable } from '../manage-users-table/ManageUsersTable';\n\nimport { SelectWithSpreadsheetPopup } from './components/select-with-spreadsheet/SelectWithSpreadsheetPopup';\nimport { useGetActions } from './useGetActions';\nimport { useManageUsersCheckboxHelper } from './useManageUsersCheckboxHelper';\n\nconst namespace = 'userManager.manageUsers';\n\nconst subNamespaces = {\n [UserGroup.Learner]: 'userManager.manageStudents',\n [UserGroup.Staff]: 'userManager.manageStaff',\n [UserGroup.Unknown]: ''\n};\n\ninterface ManageUsersListProps {\n users: User[];\n userType: UserGroup;\n config: Config;\n currentUser: CurrentUser;\n searchEmptyState: string;\n appLinks: UserManagerAppLinks;\n totalUsers: number;\n queryParams: UserManagerQueryParams;\n hasSso: boolean;\n hasRostering?: boolean;\n searchInputSize?: FormSize;\n onClickResendActivationEmail?: (user: User) => void;\n fetchUserIds: (success: (userIds: string[]) => void) => void;\n onClickSendResetEmail?: (user: User) => void;\n onClickSendVerificationEmail?: (user: User) => void;\n ssoHelpArticle?: string;\n selectWithSpreadsheetTemplate: string;\n userRequest: (query: string, success?: (ids: string[]) => void) => Flight.Request;\n products?: ProductId[];\n}\n\ntype StudentProps = ManageUsersListProps & {\n userType: UserGroup.Learner;\n yearGroups: YearGroup[];\n yearGroupRolloverStatus?: YearGroupRolloverStatus;\n}\n\ntype StaffProps = ManageUsersListProps & {\n userType: UserGroup.Staff;\n yearGroups?: never;\n};\n\nexport function ManageUsers(props: StudentProps | StaffProps): JSX.Element {\n const analyticsLocation = LocationContext[props.userType === UserGroup.Learner ? 'StudentManager' : 'StaffManager'];\n const subNamespace = subNamespaces[props.userType];\n\n const locationContext = props.userType === UserGroup.Learner\n ? LocationContext.StudentManager\n : LocationContext.StaffManager;\n\n const [ viewModel, setBulkActionViewModel ] = useViewModel<BulkUserActionsViewModel>(\n SharedViewModelKeys.BULK_USER_ACTIONS\n );\n\n const [ isSelectingWithSpreadsheet, setIsSelectingWithSpreadsheet ] = React.useState<boolean>(false);\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const CheckboxHelper = useManageUsersCheckboxHelper(props.users, {\n persistNamespace: `manage:users:${props.userType}`,\n initialState: viewModel?.userIdMap,\n queryParams: props.queryParams\n });\n\n const extraActions = useGetActions({\n ...props,\n onSelectWithSpreadsheetSelect: () => setIsSelectingWithSpreadsheet(true),\n namespace: subNamespace,\n yearGroups: props.userType === UserGroup.Learner ? props.yearGroups : []\n });\n\n /**\n * We use this to unset our userIdMap when the user is leaving user manager.\n * When the user is going to bulk actions, we set clearOnExit to false\n * so that this hook cleanup doesn't unset our userIdMap.\n */\n const clearOnExit = React.useRef(true);\n React.useEffect(() => {\n return () => {\n if (clearOnExit.current)\n setBulkActionViewModel('userIdMap', undefined);\n };\n }, []);\n\n React.useEffect(() => {\n if (!CheckboxHelper.bulkChecked)\n return;\n\n if (props.totalUsers !== CheckboxHelper.getSelectedCount())\n return;\n\n setBulkActionViewModel('allUsersSelected', true);\n setBulkActionViewModel('allUsersCount', props.totalUsers);\n }, [CheckboxHelper.bulkChecked]);\n\n function onClickSelectBulkAction(): void {\n if (!CheckboxHelper.getSelectedCount())\n return;\n\n AnalyticsHelper.logUserAction({\n userCount: CheckboxHelper.getSelectedCount()\n }, {\n location: locationContext,\n entity: EntityType.User,\n actionType: UserAction.BulkAction,\n workflowPhase: WorkflowPhase.Start\n });\n\n clearOnExit.current = false;\n setBulkActionViewModel('userIdMap', CheckboxHelper.getMap());\n Core.AppLinkHelper.trigger(props.appLinks.bulkActionsReviewAccounts);\n }\n \n function onToggleSelectAll(success: () => void): void {\n AnalyticsHelper.logUserAction({\n userCount: CheckboxHelper.getSelectedCount()\n }, {\n location: locationContext,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.SelectAllUsers,\n entity: EntityType.User\n });\n\n props.fetchUserIds(userIds => {\n CheckboxHelper.selectAll(userIds);\n\n /**\n * Used for determining if the user can use year level rollover\n */\n const allUsersSelected = !BulkUserActionsHelper.hasFilterOrQuery(props.queryParams);\n setBulkActionViewModel('allUsersSelected', allUsersSelected);\n\n if (allUsersSelected)\n setBulkActionViewModel('allUsersCount', userIds.length);\n\n success();\n });\n }\n\n function unsetAllUsersSelected(): void {\n setBulkActionViewModel('allUsersSelected', false);\n setBulkActionViewModel('allUsersCount', undefined);\n }\n\n function onToggleBulk(): void {\n if (CheckboxHelper.bulkChecked)\n unsetAllUsersSelected();\n CheckboxHelper.onToggleBulk();\n }\n\n function onToggleItem(id: string): void {\n if (CheckboxHelper.isChecked(id))\n unsetAllUsersSelected();\n CheckboxHelper.onToggleItem(id);\n }\n\n function onClickDeselectAll(): void {\n unsetAllUsersSelected();\n CheckboxHelper.reset();\n }\n\n const mainFilters = React.useMemo(() => {\n return UserManagerHelper.getFilters(\n props.userType,\n props.userType === UserGroup.Learner ? props.yearGroups : []\n );\n }, [props.yearGroups?.length]);\n\n const showFiltersPartialLoading = (\n !props.currentUser?.id ||\n (props.userType === UserGroup.Learner && !props.yearGroups?.length)\n );\n\n return (\n <>\n {props.hasRostering && (\n <RosteringAlert />\n )}\n <div className='d-flex align-items-center pb-3'>\n <div className='ps-4 pe-1'>\n <Checkbox\n id='user-manager'\n name='user-manager'\n checked={CheckboxHelper.bulkChecked}\n onChange={onToggleBulk}\n indeterminate={CheckboxHelper.hasSomeSelections()}\n />\n </div>\n <div className='me-auto'>\n {!showFiltersPartialLoading ? (\n <SearchFilters\n queryParams={props.queryParams}\n mainFilters={mainFilters}\n appLink={props.appLinks.userManager}\n analyticsOptions={{\n entity: EntityType.User,\n location: analyticsLocation\n }}\n hideHeading\n hideDivider\n constantIndices={['user']}\n />\n ) : (\n <PartialSearchFilters count={3} />\n )}\n </div>\n\n <div className='w-25'>\n <ScopedSearchBar\n id={`user-manager-search-${props.userType}`}\n name={`user-manager-search-${props.userType}`}\n placeholder={LanguageService.getPhrase(namespace, 'searchBarPlaceholder')}\n searchAppLink={props.appLinks.search}\n size={props.searchInputSize}\n searchIndices={['user']}\n analyticsOptions={{ entity: EntityType.User, location: analyticsLocation }}\n />\n </div>\n <ActionsDropdown\n actions={extraActions}\n dropdownToggleClassName='btn btn-outline-dark ms-2'\n />\n </div>\n\n <BulkSelectionSummary\n getTypeText={count => LanguageService.getPhrase(subNamespace, 'bulkSelectLabel', { smartCount: count })}\n selectedCount={CheckboxHelper.getSelectedCount()}\n onClickSelectAll={onToggleSelectAll}\n selectAllCount={props.totalUsers}\n onClickDeselectAll={onClickDeselectAll}\n onClickSelectBulk={onClickSelectBulkAction}\n allSelected={CheckboxHelper.allSelected}\n showSelectingSpinner={showSpinner}\n hasRostering={props.hasRostering}\n />\n\n {(() => {\n if (!props.users)\n return <PartialUserList />;\n \n if (!props.users.length)\n return <UserManagerSearchEmptyState imageUrl={props.searchEmptyState} />;\n\n return (\n <ManageUsersTable\n users={props.users}\n currentUser={props.currentUser}\n imageCdnUrl={props.config.imageCdnUrl}\n appLinks={props.appLinks}\n onClickResendActivationEmail={props.onClickResendActivationEmail}\n onClickSendResetEmail={props.onClickSendResetEmail}\n onClickSendVerificationEmail={props.onClickSendVerificationEmail}\n isChecked={CheckboxHelper.isChecked}\n onToggleCheckbox={onToggleItem}\n ssoHelpArticle={props.ssoHelpArticle}\n shouldDisplayAuthenticationMethods={props.hasSso}\n products={props.products}\n hasRostering={props.hasRostering}\n />\n );\n })()}\n\n {isSelectingWithSpreadsheet && (\n <SelectWithSpreadsheetPopup\n users={props.users}\n template={props.selectWithSpreadsheetTemplate}\n userType={props.userType}\n checkboxHelper={CheckboxHelper}\n closePopup={() => {\n setIsSelectingWithSpreadsheet(false);\n }}\n setShowSelectingSpinner={setShowSpinner}\n userRequest={props.userRequest}\n />\n )}\n </>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { EntityType, LocationContext, OperationDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { CannotYearGroupRolloverError } from 'libs/shared/apps/user-manager/errors/cannot-year-group-rollover/CannotYearGroupRolloverError';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { BulkUserActionsViewModel } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkUserActionsViewModel';\nimport { YearGroupRolloverStatus } from 'libs/shared/apps/user-manager/interfaces/YearGroupRolloverStatus';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { UserManagerConstants } from '../../constants/UserManagerConstants';\nimport { BulkUserActionsAnalyticsHelper } from '../../utils/BulkUserActionsAnalyticsHelper';\n\ntype UserGetActionProps = {\n userType: UserGroup;\n namespace: string;\n appLinks: UserManagerAppLinks;\n yearGroupRolloverStatus?: YearGroupRolloverStatus;\n onSelectWithSpreadsheetSelect: () => void;\n hasRostering?: boolean;\n yearGroups: YearGroup[];\n};\n\nexport function useGetActions(props: UserGetActionProps): ActionOptions[] {\n const [ , setWizardViewModel ] = useViewModel<BulkUserActionsViewModel>(\n SharedViewModelKeys.BULK_USER_ACTIONS\n );\n\n const analyticsLocation = LocationContext[props.userType === UserGroup.Learner ? 'StudentManager' : 'StaffManager'];\n\n const actions: ActionOptions[] = [{\n label: LanguageService.getPhrase(props.namespace, 'export'),\n appLink: props.appLinks.exportUserList,\n analyticsOptions: {\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Export,\n entity: EntityType.User,\n location: analyticsLocation\n },\n analyticsData: {\n userType: props.userType\n }\n }];\n\n actions.push({\n label: LanguageService.getPhrase(props.namespace, 'auditLog'),\n appLink: props.appLinks.auditLog,\n onClick: () => {\n LocalStorageHelper.set(UserManagerConstants.AUDIT_LOG_REFERRER_KEY, props.userType);\n }\n });\n\n actions.push({\n label: LanguageService.getPhrase(props.namespace, 'selectWithSpreadsheet'),\n onClick: props.onSelectWithSpreadsheetSelect,\n analyticsOptions: {\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Select,\n entity: EntityType.User,\n descriptor: OperationDescriptor.Bulk,\n location: analyticsLocation\n },\n analyticsData: {\n userType: props.userType\n }\n });\n\n if (props.userType === UserGroup.Learner && props.yearGroupRolloverStatus && props.yearGroups?.length > 1) {\n const canRollover = !!props.yearGroupRolloverStatus?.canRollover && !props.hasRostering;\n\n actions.push({\n label: LanguageService.getPhrase(props.namespace, 'rollover'),\n appLink: canRollover && !props.hasRostering && props.appLinks.bulkActionsActionDetails.yearGroupRollover,\n disabled: !!props.hasRostering,\n className: props.hasRostering ? 'cursor-default disabled' : '',\n tooltip: props.hasRostering ? LanguageService.getPhrase(props.namespace, 'editControlledByRostering') : '',\n onClick: () => {\n if (canRollover) {\n setWizardViewModel({\n action: 'yearGroupRollover',\n subAction: 'yearGroupRollover'\n });\n\n const locationContext = props.userType === UserGroup.Learner\n ? LocationContext.StudentManager\n : LocationContext.StaffManager;\n\n BulkUserActionsAnalyticsHelper.logYearGroupRolloverEntry(locationContext);\n return;\n }\n\n const error = new CannotYearGroupRolloverError(\n props.yearGroupRolloverStatus?.previousRolloverDate\n );\n\n Core.ErrorHelper.throw(error);\n }\n });\n }\n\n return actions;\n}\n","import React from 'react';\n\nimport { WarningAlert } from 'libs/shared/apps/user-manager/components/warning-alert/WarningAlert';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'userManager.ssoPasswordResetEmailNotAllowedError';\n\ninterface SsoPasswordResetEmailNotAllowedErrorProps {\n helpArticle: string;\n}\n\nexport function SsoPasswordResetEmailNotAllowedError(props: SsoPasswordResetEmailNotAllowedErrorProps): JSX.Element {\n return (\n <WarningAlert>\n <p className='mb-1 fw-semibold'>\n <Text namespace={namespace} phrase='warning' />\n </p>\n {props.helpArticle && (\n <a href={props.helpArticle} target='_blank' className='info-link'>\n <Text namespace={namespace} phrase='findMore' />\n </a>\n )}\n </WarningAlert>\n );\n}","import { CuratorGroup } from 'libs/shared/enums/CuratorGroup';\nimport { CuratorUser } from 'libs/shared/interfaces';\n\nfunction getGroupNames(user: CuratorUser): string[] {\n return (user && user.groups) ? user.groups.map(g => g.name) : [];\n}\n \nexport const CuratorPermissionsHelper = {\n isDev(user: CuratorUser): boolean {\n return getGroupNames(user).includes(CuratorGroup.Developer);\n },\n\n hasSubjectsAccess(user: CuratorUser): boolean {\n const allowedGroups = [\n CuratorGroup.Developer,\n CuratorGroup.Content,\n CuratorGroup.Curator,\n CuratorGroup.StreamableCurator\n ];\n\n return allowedGroups.some(group => getGroupNames(user).includes(group));\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, ClickDescriptor, EmailDescriptor, EntityType, LocationContext, OperationDescriptor, ToggleDescriptor, UserAction, VerifyEmailDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { SsoPasswordResetEmailNotAllowedError } from 'libs/shared/apps/user-manager/errors/sso-password-reset-email-not-allowed/SsoPasswordResetEmailNotAllowedError';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { BulkRemoveUsersViewModel } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkRemoveUsersViewModel';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { CuratorUser, CurrentUser, User } from 'libs/shared/interfaces';\nimport { CuratorPermissionsHelper } from 'libs/shared/utils/CuratorPermissionsHelper';\nimport { DialogHelper } from 'libs/shared/utils/DialogHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst getPhrase = LanguageService.encloseNamespace('userManager.userList');\n\nfunction useGetActions(props: UserItemActionsProps): ActionOptions[] {\n const client = React.useContext(UserManagerClientContext);\n\n const hasStatus = (status: ObjectStatus) => status === props.user.status;\n\n const hasVerifiedEmail = props.user.metadata?.isEmailVerified;\n\n // eslint-disable-next-line\n const isCurrentUser = props.user.id == props.currentUser?.id;\n\n const [ , setBulkRemoveUsers ] = useViewModel<BulkRemoveUsersViewModel>(SharedViewModelKeys.BULK_REMOVE_USERS);\n\n function logAnalytics(actionOptions: AnalyticsOptions): void {\n AnalyticsHelper.logUserAction({ id: props.user.id }, AnalyticsHelper.mergeOptions({\n entity: EntityType.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext[props.userType === UserGroup.Learner ? 'StaffManagerListItem' : 'StudentManagerListItem']\n }, actionOptions));\n }\n\n const actions: ActionOptions[] = [];\n \n if (!props.isEditUserForm) {\n function getTooltip(): string {\n if (props.hasRostering)\n return getPhrase('editControlledByRostering');\n\n if (hasStatus(ObjectStatus.Disabled))\n return getPhrase('editUserDisabled');\n\n if (hasStatus(ObjectStatus.Inactive) && client !== UserManagerClient.Curator)\n return getPhrase('editUserPending');\n\n return getPhrase('editUser');\n }\n\n function canEdit(): boolean {\n if (props.hasRostering)\n return false;\n\n if (hasStatus(ObjectStatus.Active))\n return true;\n\n if (hasStatus(ObjectStatus.Inactive) && client === UserManagerClient.Curator)\n return true;\n\n return false;\n }\n\n actions.push({\n order: 0,\n onClick: () => {\n if (!canEdit())\n return;\n \n logAnalytics({ actionType: UserAction.Edit });\n \n const appLink = {\n ...props.appLinks.editUser,\n args: [ ...(props.appLinks.editUser.args ?? []), props.user.id ]\n };\n \n Core.AppLinkHelper.trigger(appLink);\n },\n svgName: cvSvgLibrary.Edit,\n className: `btn btn-link svg-container ${!canEdit() ? 'disabled' : ''}`,\n tooltip: getTooltip(),\n button: true\n });\n }\n\n if (props.user.email && hasStatus(ObjectStatus.Inactive) && props.onClickResendActivationEmail) {\n actions.push({\n order: 5,\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n label: getPhrase('resendActivationEmail'),\n onClick: () => {\n logAnalytics({\n actionType: UserAction.SendEmail,\n descriptor: EmailDescriptor.ActivateUser\n });\n props.onClickResendActivationEmail(props.user);\n },\n className: props.hasRostering ? 'cursor-default disabled' : 'btn btn-link'\n });\n }\n\n if (\n props.user.email &&\n hasStatus(ObjectStatus.Active) &&\n !hasVerifiedEmail\n ) {\n actions.push({\n order: 5,\n label: getPhrase('sendVerificationEmail'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n onClick: () => {\n logAnalytics({\n actionType: UserAction.SendEmail,\n descriptor: EmailDescriptor.VerifyEmail\n });\n props.onClickSendVerificationEmail(props.user);\n },\n className: props.hasRostering ? 'cursor-default disabled' : 'btn btn-link'\n });\n }\n\n if (!isCurrentUser) {\n if (hasVerifiedEmail && hasStatus(ObjectStatus.Active) && props.onClickSendResetEmail) {\n actions.push({\n order: 5,\n label: getPhrase('sendResetEmail'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n onClick: () => {\n if (UserHelper.hasSso(props.user)) {\n DialogHelper.render(\n <SsoPasswordResetEmailNotAllowedError helpArticle={props.ssoHelpArticle} />,\n {\n title: getPhrase('sendResetEmail'),\n cancelButtonProps: {\n text: getPhrase('close'),\n variant: 'dark'\n }\n }\n );\n return;\n }\n\n logAnalytics({\n actionType: UserAction.SendEmail,\n descriptor: EmailDescriptor.ResetPasswordEmail\n });\n props.onClickSendResetEmail(props.user);\n },\n className: props.hasRostering ? 'cursor-default disabled' : 'btn btn-link'\n });\n }\n\n if (!hasStatus(ObjectStatus.Inactive)) {\n actions.push({\n order: 10,\n label: getPhrase(hasStatus(ObjectStatus.Active) ? 'deactivate' : 'activate'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n className: props.hasRostering ? 'cursor-default disabled' : '',\n onClick: () => {\n logAnalytics({\n actionType: UserAction.Activate,\n descriptor: hasStatus(ObjectStatus.Active) ? ToggleDescriptor.Off : ToggleDescriptor.On\n });\n \n const appLink = {\n ...props.appLinks.toggleStatus,\n args: [ ...(props.appLinks.toggleStatus.args ?? []), props.user.id ]\n };\n \n Core.AppLinkHelper.trigger(appLink);\n }\n });\n }\n\n const showDelete = client !== UserManagerClient.Primary || props.products?.includes(ProductId.Online);\n if (showDelete) {\n actions.push({\n order: 25,\n disabled: props.hasRostering,\n onClick: () => {\n if (hasStatus(ObjectStatus.Active))\n return;\n \n logAnalytics({ actionType: UserAction.Delete, descriptor: OperationDescriptor.Single });\n \n setBulkRemoveUsers({ users: [props.user], totalUsers: 1 });\n \n Core.AppLinkHelper.trigger(props.appLinks.deleteUser);\n },\n label: getPhrase('delete'),\n className: `btn btn-link text-danger ${hasStatus(ObjectStatus.Active) || props.hasRostering ? 'cursor-default disabled' : ''}`,\n button: false,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : hasStatus(ObjectStatus.Active) ? getPhrase('deleteDisabledTooltip') : null\n });\n }\n\n const showRemove = client !== UserManagerClient.Online && !props.products?.includes(ProductId.Online);\n if (showRemove) {\n actions.push({\n order: 25,\n disabled: props.hasRostering,\n onClick: () => {\n if (hasStatus(ObjectStatus.Active))\n return;\n \n logAnalytics({ actionType: UserAction.Remove, descriptor: OperationDescriptor.Single });\n \n const appLink = {\n ...props.appLinks.removeUser,\n args: [ ...(props.appLinks.editUser.args ?? []), props.user.id ]\n };\n \n Core.AppLinkHelper.trigger(appLink);\n },\n label: getPhrase('remove'),\n className: `btn btn-link text-danger ${hasStatus(ObjectStatus.Active) || props.hasRostering ? 'cursor-default disabled' : ''}`,\n button: false,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : hasStatus(ObjectStatus.Active) ? getPhrase('removeDisabledTooltip') : null\n });\n }\n }\n\n if (client === UserManagerClient.Online && props.userType === UserGroup.Learner && hasStatus(ObjectStatus.Active)) {\n actions.push({\n order: 15,\n label: getPhrase('viewWorkspace'),\n onClick: () => logAnalytics({ actionType: UserAction.Click, descriptor: ClickDescriptor.ViewStudentWorkspace }),\n appLink: {\n ...props.appLinks.viewStudentWorkspace,\n params: { username: props.user.username }\n },\n className: props.hasRostering ? 'cursor-default disabled' : 'btn btn-link',\n button: false\n });\n }\n\n if (\n client === UserManagerClient.Primary &&\n props.userType === UserGroup.Learner &&\n !hasStatus(ObjectStatus.Inactive)\n ) {\n actions.push({\n order: 15,\n label: getPhrase('viewStudentsVideos'),\n onClick: () => logAnalytics({ actionType: UserAction.Click, descriptor: ClickDescriptor.ViewStudentWorkspace }),\n appLink: {\n ...props.appLinks.viewStudentWorkspace,\n args: [props.user.id]\n },\n className: 'btn btn-link',\n button: false\n });\n }\n\n if (\n hasStatus(ObjectStatus.Active) &&\n (\n (props.userType === UserGroup.Staff && !hasVerifiedEmail) ||\n props.userType === UserGroup.Learner\n )\n ) {\n actions.push({\n order: 20,\n disabled: props.hasRostering,\n label: getPhrase('changePassword'),\n className: props.hasRostering ? 'cursor-default disabled' : '',\n onClick: () => {\n logAnalytics({ actionType: UserAction.ChangePassword });\n\n const appLink = {\n ...props.appLinks.changePassword,\n args: [ ...(props.appLinks.changePassword.args ?? []), props.user.id ]\n };\n \n Core.AppLinkHelper.trigger(appLink);\n }\n });\n }\n\n if (client === UserManagerClient.Curator\n && CuratorPermissionsHelper.isDev(props.currentUser as unknown as CuratorUser)) {\n actions.push(...[\n {\n order: 2,\n label: getPhrase('manageCuratorGroups'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n className: props.hasRostering ? 'cursor-default disabled' : '',\n onClick: () => {\n logAnalytics({ actionType: UserAction.ManageGroup });\n\n Core.AppLinkHelper.trigger({\n ...props.appLinks.manageUserCuratorGroups,\n args: [props.user.id]\n });\n }\n },\n {\n order: 3,\n label: getPhrase('editUserOptions'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n className: props.hasRostering ? 'cursor-default disabled' : '',\n appLink: {\n ...props.appLinks.editUserOptions,\n args: [ ...(props.appLinks.editUserOptions.args ?? []), props.user.id ]\n }\n }\n ]);\n }\n\n if (\n client === UserManagerClient.Curator &&\n props.user.metadata?.isEmailVerified &&\n !hasStatus(ObjectStatus.Inactive)\n ) {\n actions.push({\n order: 5,\n label: getPhrase('unverifyEmail'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n className: props.hasRostering ? 'cursor-default disabled' : '',\n onClick: () => {\n logAnalytics({ actionType: UserAction.VerifyEmail, descriptor: VerifyEmailDescriptor.Remove });\n\n Core.AppLinkHelper.trigger({\n ...props.appLinks.deleteUserEmail,\n args: [ ...(props.appLinks.deleteUserEmail.args ?? []), props.user.id ]\n });\n }\n });\n }\n\n if (client === UserManagerClient.Curator && props.isEditUserForm) {\n actions.push({\n order: 6,\n label: getPhrase('addToAnotherCustomer'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n className: props.hasRostering ? 'cursor-default disabled' : '',\n appLink: {\n ...props.appLinks.addToAnotherCustomer,\n args: [ ...(props.appLinks.addToAnotherCustomer.args ?? []), props.user.id ]\n }\n });\n }\n\n return actions;\n}\n\ninterface UserItemActionsProps {\n user: User;\n userType: UserGroup;\n appLinks: UserManagerAppLinks;\n currentUser: CurrentUser;\n products?: ProductId[];\n onClickResendActivationEmail?: (user: User) => void;\n onClickSendResetEmail?: (user: User) => void;\n onClickSendVerificationEmail?: (user: User) => void;\n isEditUserForm?: boolean;\n ssoHelpArticle?: string;\n hasRostering?: boolean;\n}\n\nexport function UserItemActions(props: UserItemActionsProps): JSX.Element {\n const actions = useGetActions(props);\n\n return (\n <Actions\n actions={actions}\n className={props.isEditUserForm ? 'mb-2' : 'pe-4'}\n actionsDropdownClassName={props.isEditUserForm ? 'btn btn-outline-dark' : 'btn btn-link ms-1'}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialLoading\":\"mXgLg\"};","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './user-manager-entries.scss';\n\nconst namespace = 'userManager.userManagerEntries';\n\ninterface UserManagerEntriesProps {\n totalShowing: number;\n totalUsers: number;\n}\n\nexport function UserManagerEntries(props: UserManagerEntriesProps): JSX.Element {\n return (\n <p className='mb-0 fw-semibold'>\n <Text\n namespace={namespace}\n phrase='users'\n options={{\n totalShowing: props.totalShowing ?? 0,\n totalUsers: props.totalUsers ?? 0,\n smartCount: props.totalUsers ?? 0\n }}\n />\n </p>\n );\n}\n\nexport function PartialUserManagerEntries(): JSX.Element {\n return <div className={`partial-loading-background ${styles.partialLoading} d-inline-block`} />;\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PartialUserManagerEntries, UserManagerEntries } from 'libs/shared/apps/user-manager/components/user-manager-entries/UserManagerEntries';\nimport { GetUserCountResponse } from 'libs/shared/apps/user-manager/interfaces/GetUserCountResponse';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces/UserManagerAppLinks';\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'userManager.userManagerHeader';\nconst subNamespaces = {\n [UserGroup.Learner]: 'userManager.studentManagerHeader',\n [UserGroup.Staff]: 'userManager.staffManagerHeader',\n [UserGroup.Unknown]: ''\n};\n\ninterface UserManagerHeaderProps {\n userType: UserGroup;\n appLinks: UserManagerAppLinks;\n users: User[];\n userCount: GetUserCountResponse;\n hasSso?: boolean;\n hasRostering?: boolean;\n /**\n * Allows curator to specify a different heading component\n */\n headingComponent?: JSX.Element\n}\n\nexport function UserManagerHeader(props: UserManagerHeaderProps): JSX.Element {\n const subNamespace = subNamespaces[props.userType];\n\n const hasNumbers = props.users && typeof (props.userCount?.count) === 'number';\n const totalShowing = hasNumbers && props.users.length;\n\n return (\n <>\n <div className='d-flex justify-content-between'>\n {props.headingComponent ?\n <>{props.headingComponent}</> :\n <span>\n <h1 className='h2'><Text namespace={subNamespace} phrase='heading' /></h1>\n\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n { name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'), appLink: props.appLinks.settings },\n { name: LanguageService.getPhrase(subNamespace, 'managerBreadcrumb'), active: true }\n ]}\n />\n </div>\n </span>\n }\n <span>\n <Tooltip\n spanHack\n title={props.hasRostering ? LanguageService.getPhrase(namespace, 'disabled') : ''}\n placement='left'\n >\n <IconButton\n className='btn btn-outline-dark'\n svgName={cvSvgLibrary.Plus}\n appLink={!props.hasSso ? props.appLinks.addNewUsers : props.appLinks.ssoAddUserConfirm}\n disabled={props.hasRostering}\n >\n <Text namespace={subNamespace} phrase='addNew' />\n </IconButton>\n </Tooltip>\n <div className='text-end mt-1'>\n {hasNumbers ? (\n <UserManagerEntries\n totalShowing={totalShowing}\n totalUsers={props.userCount.count}\n />\n ) : <PartialUserManagerEntries />}\n </div>\n </span>\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"eCi4v\"};","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './warning-alert.scss';\n\ninterface Props extends HashObject {\n className?: string;\n}\n\ntype WarningAlertProps = React.PropsWithChildren<Props>;\n\nexport function WarningAlert(props: WarningAlertProps): JSX.Element {\n return (\n <div className={`alert alert-warning d-flex align-items-center px-2 mb-3 ${props.className || ''}`}>\n <SvgContainer\n svgName={cvSvgLibrary.WarningOutline}\n className={`svg-container me-2 ${styles.icon}`}\n />\n <div>\n {props.children}\n </div>\n </div>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\nimport { DialogOptions } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nconst lang = 'userManager.cannotYearGroupRolloverError';\n\nexport class CannotYearGroupRolloverError extends DialogError {\n private previousRolloverDate: string;\n\n constructor(previousRolloverDate: string) {\n super('CannotYearGroupRolloverError');\n\n const localDate = DateHelper.convertUTCToLocal(previousRolloverDate);\n this.previousRolloverDate = DateHelper.format(localDate, 'MMMM Do YYYY');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'CannotYearGroupRolloverError';\n }\n\n // @ts-ignore\n public get dialogOptions(): DialogOptions {\n return {\n title: LanguageService.getPhrase(lang, 'heading'),\n text: LanguageService.getPhrase(lang, 'text', {\n previousRolloverDate: this.previousRolloverDate,\n supportUrl: ArticleHelper.getSupportRequestUrl(),\n linkClass: 'info-link'\n }),\n buttons: [{\n text: LanguageService.getPhrase(lang, 'okay'),\n className: 'btn btn-dark',\n success: true\n }]\n };\n }\n}","import { Flight } from 'libs/common/flight';\n\nimport { GetUserCountResponse } from 'libs/shared/apps/user-manager/interfaces/GetUserCountResponse';\nimport { UserManagerQueryParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserManagerQueryParams';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\ninterface Options {\n userType: UserGroup,\n queryParams: UserManagerQueryParams,\n getUserCountRequest: (\n customerId: string,\n userId: string,\n userType: UserGroup,\n queryParams: UserManagerQueryParams,\n ) => Flight.Request\n}\n\nexport const useFetchUserCount = (options: Options) => {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const userCount = Flight.useBasicFetch<GetUserCountResponse>(\n currentUser.data &&\n options.getUserCountRequest(currentUser.data.customerId, currentUser.data.id, options.userType, options.queryParams)\n );\n\n return userCount;\n};","import { Classroom, YearGroup } from 'libs/shared/interfaces';\n\nimport { BulkUserActionOptions, BulkUserSubAction } from '../../components/bulk-actions-wizard/layout/BulkUserActionsWizardLayout';\nimport { UserManagerQueryParams } from '../query-params/UserManagerQueryParams';\n\n// Please keep this array up to date with the interface below, so that the data we log to analytics remains accurate\nexport const BaseBulkUserActionsViewModelKeys: Array<keyof BulkUserActionsViewModel> = [\n 'userIdMap', 'params', 'action', 'subAction', 'allUsersSelected', 'allUsersCount', 'scrollContainer'\n];\n\nexport interface BulkUserActionsViewModel {\n userIdMap?: Map<string, boolean>;\n params?: UserManagerQueryParams;\n\n action?: BulkUserActionOptions; // TODO: Rename this to \"actionCategory\"\n subAction?: BulkUserSubAction; // TODO: Rename this to \"action\"\n\n // Used to determine if we can show year level rollover\n allUsersSelected?: boolean;\n allUsersCount?: number;\n scrollContainer?: HTMLElement;\n}\n\nexport interface BulkUserActionsYearGroupRolloverViewModel extends BulkUserActionsViewModel {\n yearGroup: YearGroup;\n}\n\nexport interface BulkUserActionsAddToClassroomViewModel extends BulkUserActionsViewModel {\n classroom: Classroom;\n}\n\nexport interface BulkUserActionsResetPasswordViewModel extends BulkUserActionsViewModel {\n password: string;\n changeOnNextLogin: boolean;\n}","import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\n\nimport { BulkUserActionStepId } from '../components/bulk-actions-wizard/layout/BulkUserActionsWizardLayout';\nimport { BaseBulkUserActionsViewModelKeys, BulkUserActionsViewModel } from '../interfaces/viewmodels/BulkUserActionsViewModel';\n\nexport const BulkUserActionsAnalyticsHelper = {\n getAnalyticsActionName(viewModel: BulkUserActionsViewModel): string | null {\n if (!viewModel?.action)\n return null;\n\n switch (viewModel.action) {\n case 'activation': {\n if (!viewModel?.subAction)\n return 'Deactivate / reactivate';\n\n if (viewModel.subAction === 'deactivate')\n return 'Deactivate';\n\n return 'Reactivate';\n }\n case 'addToClassroom':\n return 'Add to classroom';\n case 'changeYearGroup':\n return 'Change year level';\n case 'delete':\n return 'Delete user';\n case 'resetEmail':\n return 'Send password reset email';\n case 'activationEmail':\n return 'Send account activation email';\n case 'resetPassword':\n return 'Reset password';\n case 'yearGroupRollover':\n return 'Annual year level rollover';\n case 'removeFromSchool':\n return 'Remove user';\n default:\n return null;\n }\n },\n\n onClickNext(viewModel: BulkUserActionsViewModel, currentStep: BulkUserActionStepId): void {\n if (!viewModel)\n return;\n\n const analyticsData: HashObject = {\n userCount: viewModel.userIdMap.size,\n step: currentStep\n };\n\n const actionName = BulkUserActionsAnalyticsHelper.getAnalyticsActionName(viewModel);\n\n if (actionName)\n analyticsData.action = actionName;\n\n const actionData = ObjectHelper.omit(viewModel, BaseBulkUserActionsViewModelKeys);\n\n // Adds extra items like the `yearGroup` on year level actions or `password` on the reset pw action\n if (Object.keys(actionData).length)\n analyticsData.actionData = actionData;\n\n AnalyticsHelper.logUserAction(analyticsData, {\n location: LocationContext.BulkUserActionsWizard,\n workflowPhase: WorkflowPhase.Next,\n actionType: UserAction.BulkAction,\n entity: EntityType.User\n });\n },\n\n logYearGroupRolloverEntry(location: LocationContext): void {\n AnalyticsHelper.logUserAction({\n action: BulkUserActionsAnalyticsHelper.getAnalyticsActionName({ action: 'yearGroupRollover' })\n }, {\n entity: EntityType.User,\n actionType: UserAction.BulkAction,\n workflowPhase: WorkflowPhase.Start,\n location\n });\n },\n\n getJobStatus(status: BatchJobStatus): string | null {\n switch (status) {\n case BatchJobStatus.Completed:\n return 'Success';\n case BatchJobStatus.CompletedWithError:\n return 'Completed with some errors';\n case BatchJobStatus.Failed:\n return 'Failed';\n default:\n return null;\n }\n }\n};","// Article name mapped to article ID on support site. Used by `ArticleHelper`\n\nexport enum OnlineSupportArticle {\n AddToPlaylist = '115005679748',\n EditSsoAccounts = '8202508040345',\n\n // LE\n LibraryEditor = '360001974533',\n VideoAccess = '360000153947',\n AddFromOnline = '360011718234',\n UploadToLibraryEditor = '360012069334',\n PBTErrorCodes = '360012421153',\n ManuelReview = '360020004534',\n LibraryReview = '360000163788',\n}\n\nexport enum LiteSupportArticle {\n Integrations = '4407268725529',\n Classrooms = '4405362551833',\n MakeInteractive = '4405370510873',\n EditSsoAccounts = '8202605666073',\n UploadToLibraryEditor = '10672936659865',\n AddFromLite = '10671345281561',\n ManageSsoYearGroups = '14691130889241',\n ContentReview = '18525199576601',\n ContentPermissions = '14692125209497',\n AccessSettings = '27927466562201',\n ContentGuidelines = '24133696186009',\n FoxtelFaq = '24133519542169',\n ViviIntegration = '23826297956377',\n AppleTvIntegration = '25832373739929',\n RssFeed = '32567445635097',\n ManageGroupPermissions = '35407217335705'\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","export const SelectWithSpreadsheetTemplates = '/templates/Template_Select_With_Spreadsheet.csv';\n","import { Flight } from 'libs/common/flight';\n\nimport { SearchResults } from 'libs/shared/apps/search/interfaces';\nimport { UserManagerQueryParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserManagerQueryParams';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { CurrentUser, User, UserCollection } from 'libs/shared/interfaces';\n\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\n\ntype Response = UserCollection | SearchResults<User>;\n\nexport function useFetchUsers(\n currentUser: CurrentUser,\n queryParams: UserManagerQueryParams,\n userType: UserGroup\n): Flight.Response<Response> {\n function getFetchRequest(): Flight.Request {\n if (!currentUser)\n return null;\n const queryParamsKeys = Object.keys(queryParams);\n\n const onlyPagination = queryParamsKeys.length === 1 && !!queryParams.cursor\n || queryParamsKeys.length === 2 && queryParamsKeys.includes('cursor') && queryParamsKeys.includes('previous');\n\n const onlyHasSort = queryParamsKeys.length === 1 && !!queryParams.sort;\n\n // If we have a search query or filter, we want to use it to limit our search. If not, we want to search all students.\n if (Object.keys(queryParams).length && !onlyPagination && !onlyHasSort)\n return UserManagerRequests.searchUsers(\n currentUser.customerId,\n currentUser.id,\n userType,\n queryParams,\n queryParams?.cursor\n );\n\n return UserManagerRequests.getUsers(currentUser.customerId, userType, queryParams, queryParams?.cursor);\n }\n\n return Flight.useBasicFetch<Response>(getFetchRequest());\n}"],"names":["PartialSearchFilters","count","className","Array","fill","map","item","index","key","namespace","UserManagerSearchEmptyState","props","EmptyState","src","imageUrl","Text","phrase","PartialUserItem","PartialUserList","BulkSelectionSummary","selectAllSpinner","setSelectAllSpinner","selectedCount","showSelectingSpinner","showSelectAll","onClickSelectAll","allSelected","selectAllCount","UserManagerConstants","Spinner","as","size","animation","role","SvgContainer","svgName","options","smartCount","type","getTypeText","undefined","DivButton","onClick","onClickDeselectAll","Tooltip","spanHack","title","hasRostering","LanguageService","onClickSelectBulk","disabled","JobTitle","jobTitle","user","userProfile","metadata","LastActive","date","status","ObjectStatus","DateHelper","isDateValid","lastSignedIn","includes","Number","isNaN","substr","toUpperCase","getLastActiveDate","lastSignInTime","isCurrentUser","id","toString","currentUser","UserAuthenticationMethods","sortedAuthMethods","authenticationMethods","sort","method","local","length","hasSSO","find","am","authMethod","i","backgroundColor","backgroundColour","displayName","style","zIndex","backgroundImage","logoUrl","TABLE_THEME","table","row","cell","ManageUsersTable","users","isChecked","client","UserManagerClientContext","data","checked","columns","onToggleCheckbox","imageCdnUrl","appLinks","products","onClickResendActivationEmail","onClickSendResetEmail","onClickSendVerificationEmail","shouldDisplayAuthenticationMethods","ssoHelpArticle","accessor","Cell","Checkbox","value","onChange","width","UserItemAvatar","BasicUserDetails","RoleOrYearGroup","userType","UserManagerClient","push","UserItemActions","getColumns","Table","theme","namespaces","UserGroup","SelectWithSpreadsheet","download","href","templateLink","cellPadding","BulkUploadFileSelect","onSelectSpreadsheet","BulkUserUploadHelper","onClickCancel","clone","headings","shift","isValid","errorMessage","InvalidSpreadsheetError","requests","SelectWithSpreadsheetPopup","CheckboxHelper","checkboxHelper","fetchAsync","ids","dataLoaded","Popup","closePopup","showLoadingSpinner","dialogClassName","queries","spreadsheetRowCount","setShowSelectingSpinner","q","userRequest","Promise","all","then","res","forEach","r","concat","selectAll","AnalyticsHelper","totalUsersFound","workflowPhase","actionType","entity","descriptor","location","template","useManageUsersCheckboxHelper","useBulkCheckboxManager","bulkSelections","setBulkSelections","getSelectionKey","queryParams","cursor","Object","keys","param","isArray","join","userIds","setSelected","onToggleItem","onToggleBulk","bulkChecked","reset","subNamespaces","ManageUsers","analyticsLocation","subNamespace","locationContext","SharedViewModelKeys","viewModel","setBulkActionViewModel","isSelectingWithSpreadsheet","setIsSelectingWithSpreadsheet","showSpinner","setShowSpinner","persistNamespace","initialState","userIdMap","extraActions","setWizardViewModel","actions","label","appLink","exportUserList","analyticsOptions","analyticsData","auditLog","LocalStorageHelper","onSelectWithSpreadsheetSelect","yearGroupRolloverStatus","yearGroups","canRollover","bulkActionsActionDetails","yearGroupRollover","tooltip","action","subAction","BulkUserActionsAnalyticsHelper","error","CannotYearGroupRolloverError","previousRolloverDate","useGetActions","clearOnExit","unsetAllUsersSelected","current","totalUsers","getSelectedCount","mainFilters","UserManagerHelper","showFiltersPartialLoading","RosteringAlert","name","indeterminate","hasSomeSelections","SearchFilters","userManager","hideHeading","hideDivider","constantIndices","ScopedSearchBar","placeholder","searchAppLink","search","searchInputSize","searchIndices","ActionsDropdown","dropdownToggleClassName","success","userCount","fetchUserIds","allUsersSelected","BulkUserActionsHelper","getMap","bulkActionsReviewAccounts","config","hasSso","searchEmptyState","selectWithSpreadsheetTemplate","SsoPasswordResetEmailNotAllowedError","WarningAlert","W","helpArticle","target","getGroupNames","groups","g","CuratorPermissionsHelper","isDev","CuratorGroup","hasSubjectsAccess","Curator","some","group","getPhrase","hasStatus","hasVerifiedEmail","isEmailVerified","setBulkRemoveUsers","logAnalytics","actionOptions","isEditUserForm","canEdit","order","editUser","args","button","email","UserHelper","DialogHelper","cancelButtonProps","text","variant","toggleStatus","ProductId","deleteUser","removeUser","viewStudentWorkspace","params","username","changePassword","manageUserCuratorGroups","editUserOptions","deleteUserEmail","addToAnotherCustomer","Actions","actionsDropdownClassName","UserManagerEntries","totalShowing","PartialUserManagerEntries","UserManagerHeader","hasNumbers","headingComponent","Breadcrumbs","breadcrumbs","settings","active","placement","IconButton","ssoAddUserConfirm","addNewUsers","children","lang","localDate","this","supportUrl","linkClass","buttons","useFetchUserCount","getUserCountRequest","customerId","BaseBulkUserActionsViewModelKeys","getAnalyticsActionName","onClickNext","currentStep","step","actionName","actionData","ObjectHelper","logYearGroupRolloverEntry","getJobStatus","BatchJobStatus","OnlineSupportArticle","LiteSupportArticle","collection","idField","initial","Map","items","forceUpdate","prevCollection","prevNamespace","clear","get","isBulkChecked","every","set","preselectedIds","setValue","nextItemState","getSelected","from","deselectAll","SelectWithSpreadsheetTemplates","useFetchUsers","queryParamsKeys","onlyPagination","onlyHasSort","getFetchRequest"],"sourceRoot":""}
|