@clickview/lite 0.78.0-rc.1 → 0.78.0-rc.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 +2 -2
- package/dist/css/{lite-app-64e7796d07.css → lite-app-59edbde8e9.css} +1 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/147-32fa5e188f-lite.chunk.js +2 -0
- package/dist/scripts/147-32fa5e188f-lite.chunk.js.map +1 -0
- package/dist/scripts/8933-00251901c0-lite.chunk.js +3 -0
- package/dist/scripts/8933-00251901c0-lite.chunk.js.map +1 -0
- package/dist/scripts/9843-e38ac7ac57-lite.chunk.js +2 -0
- package/dist/scripts/9843-e38ac7ac57-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-b2b1bef7c8.min.js → bundle-3b8db11528.min.js} +3 -3
- package/dist/scripts/{bundle-b2b1bef7c8.min.js.map → bundle-3b8db11528.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/147-65ed8eb667-lite.chunk.js +0 -2
- package/dist/scripts/147-65ed8eb667-lite.chunk.js.map +0 -1
- package/dist/scripts/8933-3d366deae2-lite.chunk.js +0 -3
- package/dist/scripts/8933-3d366deae2-lite.chunk.js.map +0 -1
- package/dist/scripts/9843-e750603a26-lite.chunk.js +0 -2
- package/dist/scripts/9843-e750603a26-lite.chunk.js.map +0 -1
- /package/dist/scripts/{8933-3d366deae2-lite.chunk.js.LICENSE.txt → 8933-00251901c0-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-b2b1bef7c8.min.js.LICENSE.txt → bundle-3b8db11528.min.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/8933-3d366deae2-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/user-manager/components/user-details-form/email-error-messages/contact-support/UserEmailContactSupportMessage.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-details-form/email-error-messages/editing-user-exists/EditingUserExistsErrorMessage.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-details-form/email-error-messages/exists-in-school/UserExistsInSchoolErrorMessage.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-details-form/email-error-messages/user-type-mismatch/UserTypeMismatchErrorMessage.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-details-form/UserEmailExistsError.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-role/user-role-field.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/user-role/UserRoleField.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/user-details-form/UserDetailsForm.tsx","file:///app/packages/libs/shared/src/apps/user-manager/validation/UserValidationHelper.ts","file:///app/packages/libs/shared/src/apps/user-manager/validation/UserValidationSchema.ts","file:///app/packages/libs/shared/src/apps/user-manager/components/edit-user-details/EditUserDetails.tsx","file:///app/packages/libs/shared/src/components/forms/form-feedback/FormFeedback.tsx","file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/projects/lite/src/apps/settings/flight-requests/SecuritySettingsRequests.ts"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UserEmailExistsErrorProps } from 'libs/shared/apps/user-manager/components/user-details-form/UserEmailExistsError';\nimport { UserValidationCode } from 'libs/shared/apps/user-manager/enums/UserValidationCode';\nimport { ExternalLink } from 'libs/shared/components/external-link/ExternalLink';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nconst namespace = 'userManager.userEmailContactSupport';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function UserEmailContactSupportMessage(props: UserEmailExistsErrorProps): JSX.Element {\n const isRostered = props.error.validationCode === UserValidationCode.Rostered;\n\n return (\n <FormFeedback name={props.name}>\n <span>\n {getPhrase(isRostered ? 'rostering' : 'alreadyExists')} \n </span>\n\n\n {!props.isInBulkEditing ? (\n <ExternalLink className='info-link' href={ArticleHelper.getSupportRequestUrl()} newTab>\n {getPhrase('contactSupport')}\n </ExternalLink>\n ) : (\n <span>{getPhrase('contactSupport')}</span>\n )}\n\n <span>\n {getPhrase('forAssistance')}\n </span>\n </FormFeedback>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UserEmailExistsErrorProps } from 'libs/shared/apps/user-manager/components/user-details-form/UserEmailExistsError';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\n\nconst namespace = 'userManager.editingUserExists';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function EditingUserExistsErrorMessage(props: UserEmailExistsErrorProps): JSX.Element {\n return (\n <FormFeedback name={props.name}>\n <span>\n {getPhrase('alreadyExists')} \n </span>\n </FormFeedback>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { UserEmailExistsErrorProps } from 'libs/shared/apps/user-manager/components/user-details-form/UserEmailExistsError';\nimport { EditUserRequest } from 'libs/shared/apps/user-manager/interfaces';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nconst namespace = 'userManager.userExistsInSchool';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function UserExistsInSchoolErrorMessage(props: UserEmailExistsErrorProps): JSX.Element {\n const formikProps = useFormikContextWrapper<EditUserRequest>();\n\n const appLinkParams = (props.appLinks.studentManager.params || {}) as HashObject;\n\n /**\n * If the existing user is a student\n */\n if (props.error.user.userType === UserGroup.Learner) {\n return (\n <FormFeedback name={props.name}>\n <span>{getPhrase('emailExistsSameSchoolStudent')} </span>\n {!props.isInBulkEditing ? (\n <AppLink\n appLink={{\n ...props.appLinks.studentManager,\n params: {\n ...appLinkParams,\n query: formikProps.values.email\n }\n }}\n className={'info-link'}\n onClick={props.onClickCancel}\n >\n {getPhrase('studentManager')}\n </AppLink>\n ) : (\n <span>{getPhrase('studentManager')}</span>\n )}\n </FormFeedback>\n );\n }\n\n return (\n <FormFeedback name={props.name}>\n <span>{getPhrase('emailExistsSameSchoolStaff')} </span>\n {!props.isInBulkEditing ? (\n <AppLink\n appLink={{\n ...props.appLinks.staffManager,\n params: {\n ...appLinkParams,\n query: formikProps.values.email\n }\n }}\n className={'info-link'}\n onClick={props.onClickCancel}\n >\n {getPhrase('staffManager')}\n </AppLink>\n ) : (\n <span>{getPhrase('staffManager')}</span>\n )}\n </FormFeedback>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UserEmailExistsErrorProps } from 'libs/shared/apps/user-manager/components/user-details-form/UserEmailExistsError';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nconst namespace = 'userManager.userTypeMismatch';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function UserTypeMismatchErrorMessage(props: UserEmailExistsErrorProps): JSX.Element {\n if (props.error.user.userType === UserGroup.Learner) {\n return (\n <FormFeedback name={props.name}>\n <span>\n {getPhrase('alreadyExistsStudent')} \n </span>\n {!props.isInBulkEditing ? (\n <AppLink\n appLink={props.appLinks.studentManager}\n className='info-link'\n onClick={props.onClickCancel}\n >\n {getPhrase('studentManager')}\n </AppLink>\n ) : (\n <span>{getPhrase('studentManager')}</span>\n )}\n </FormFeedback>\n );\n }\n\n return (\n <FormFeedback name={props.name}>\n <span>\n {getPhrase('alreadyExistsStaff')} \n </span>\n {!props.isInBulkEditing ? (<AppLink\n appLink={props.appLinks.staffManager}\n className='info-link'\n onClick={props.onClickCancel}\n >\n {getPhrase('staffManager')}\n </AppLink>\n ) : (\n <span>{getPhrase('staffManager')}</span>\n )}\n </FormFeedback>\n );\n}","import React from 'react';\n\nimport { UserEmailContactSupportMessage } from 'libs/shared/apps/user-manager/components/user-details-form/email-error-messages/contact-support/UserEmailContactSupportMessage';\nimport { EditingUserExistsErrorMessage } from 'libs/shared/apps/user-manager/components/user-details-form/email-error-messages/editing-user-exists/EditingUserExistsErrorMessage';\nimport { UserExistsInSchoolErrorMessage } from 'libs/shared/apps/user-manager/components/user-details-form/email-error-messages/exists-in-school/UserExistsInSchoolErrorMessage';\nimport { UserTypeMismatchErrorMessage } from 'libs/shared/apps/user-manager/components/user-details-form/email-error-messages/user-type-mismatch/UserTypeMismatchErrorMessage';\nimport { UserValidationCode } from 'libs/shared/apps/user-manager/enums/UserValidationCode';\nimport { UserEmailCheckResponse, UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\n\nexport interface UserEmailExistsErrorProps {\n isNew: boolean;\n error: UserEmailCheckResponse;\n name: string;\n appLinks: UserManagerAppLinks;\n emailRequired: boolean;\n onClickCancel: () => void;\n isInBulkEditing?: boolean;\n}\n\nexport function UserEmailExistsError(props: UserEmailExistsErrorProps): JSX.Element {\n // When editing a user, if the email is already taken, we just display a generic error message\n if (!props.isNew) {\n return <EditingUserExistsErrorMessage {...props} />;\n }\n\n switch (props.error.validationCode) {\n // This means the user exists already in the current school\n case UserValidationCode.UserAlreadyExistsInCustomer:\n return <UserExistsInSchoolErrorMessage {...props} />;\n\n // This means the user exists in another school, but the user type is dfiferent\n case UserValidationCode.UserTypeMismatch:\n return <UserTypeMismatchErrorMessage {...props} />;\n \n // This means the user is in an Online school, and cannot be invited\n case UserValidationCode.UserInCustomerWithOnline:\n // This means the user is in multiple schools, and one of them has online, so they cannot be invited\n case UserValidationCode.CustomerFoundInOnline:\n // This means the user is disabled\n case UserValidationCode.InvalidUserStatus:\n // This means the user is crated by rostering\n case UserValidationCode.Rostered:\n return <UserEmailContactSupportMessage {...props}/>;\n }\n\n return <></>;\n}","// extracted by mini-css-extract-plugin\nexport default {\"checkWrapper\":\"OzB20\"};","import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EditUserRequest } from 'libs/shared/apps/user-manager/interfaces/EditUserRequest';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { User } from 'libs/shared/interfaces/models/User';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './user-role-field.scss';\n\nconst namespace = 'userManager.userRoleField';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface UserRoleProps {\n user: User;\n userType: UserGroup;\n isEditingCurrentUser: boolean;\n isDisabled: boolean;\n isValidatingEmail: boolean;\n editSsoFields: boolean;\n hasOrg: boolean;\n countryCode: string;\n canEditSuperAdmin: boolean;\n}\n\nexport function UserRoleField(props: UserRoleProps) {\n const ROLE_OPTIONS = [\n { value: UserRole.Admin, label: getPhrase('admin') },\n { value: UserRole.SuperAdmin, label: props.countryCode === 'US' ? getPhrase('superAdminUs') : getPhrase('superAdmin') }\n ];\n\n const formikProps = useFormikContext<EditUserRequest>();\n // for customer don't have org OR the current user cannot edit super admin role,\n const showAdminToggle = !props.hasOrg || !props.canEditSuperAdmin;\n\n if (props.userType === UserGroup.Learner || props.isEditingCurrentUser) {\n return null;\n }\n\n const isDisabled = props.isDisabled\n || props.isValidatingEmail\n || (UserHelper.hasNonLegacySso(props.user) && !props.editSsoFields);\n\n const showReadOnlySuperAdmin = formikProps.values.masterRole === UserRole.SuperAdmin\n && !props.canEditSuperAdmin;\n\n if (showReadOnlySuperAdmin) {\n return (\n <div className='mb-3'>\n <label>{getPhrase('role')}</label>\n <Tooltip title={getPhrase('superAdminTooltip')} spanHack>\n <div className='border rounded-pill border-dark'>{getPhrase('superAdmin')}</div>\n </Tooltip>\n </div>\n );\n }\n\n if (showAdminToggle) {\n return (\n <div className='d-flex justify-content-between align-items-center'>\n <FormField\n id='masterRole'\n name='masterRole'\n disabled={isDisabled}\n >\n {() => (\n <div className='d-flex align-items-center'>\n <ToggleSwitch\n onClick={() => formikProps.setFieldValue(\n 'masterRole',\n formikProps.values.masterRole === UserRole.User ? UserRole.Admin : UserRole.User\n )}\n on={formikProps.values.masterRole === UserRole.Admin}\n disabled={isDisabled}\n showStateWhenDisabled\n />\n <span className='fw-semibold ms-2'>{getPhrase('admin')}</span>\n </div>\n )}\n </FormField>\n </div>\n );\n }\n\n return (\n <div>\n <FormField\n id='masterRole'\n name='masterRole'\n disabled={isDisabled}\n label='Role'\n >\n {() => ROLE_OPTIONS.map(option => (\n <div className={`${styles.checkWrapper} mb-2`} key={option.value}>\n <Form.Check\n className='form-check'\n id={option.value}\n type='radio'\n name='masterRole'\n label={option.label}\n checked={formikProps.values.masterRole === option.value}\n onChange={e => {\n if (e.target.checked) {\n formikProps.setFieldValue('masterRole', option.value);\n }\n }}\n disabled={isDisabled}\n />\n </div>\n ))}\n </FormField>\n {(formikProps.values.masterRole === UserRole.Admin || formikProps.values.masterRole === UserRole.SuperAdmin) && (\n <DivButton\n className='text-info mb-2 mt-n2'\n onClick={() => formikProps.setFieldValue('masterRole', UserRole.User)}\n >\n {getPhrase('clear')}\n </DivButton>\n )}\n </div>\n );\n}","import React from 'react';\nimport { Form } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { UserEmailExistsError } from 'libs/shared/apps/user-manager/components/user-details-form/UserEmailExistsError';\nimport { UserItemActions } from 'libs/shared/apps/user-manager/components/user-list-items/components/UserItemActions';\nimport { UserRoleField } from 'libs/shared/apps/user-manager/components/user-role/UserRoleField';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { UserValidationCode } from 'libs/shared/apps/user-manager/enums/UserValidationCode';\nimport { BulkUserEmailCheckResponse, EditUserRequest, UserEmailCheckResponse, UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { FormField, FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { CurrentUser, User, YearGroup } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'userManager.userDetailsForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst EMAIL_ERROR_CODES = [\n UserValidationCode.UserAlreadyExistsInCustomer,\n UserValidationCode.CustomerFoundInOnline,\n UserValidationCode.UserInCustomerWithOnline,\n UserValidationCode.UserTypeMismatch,\n UserValidationCode.InvalidUserStatus,\n UserValidationCode.UserCanBeAddedInCustomer,\n UserValidationCode.Rostered\n];\n\nconst FIRST_NAME_FIELD_ID = 'firstName';\n\nfunction shouldShowActions(props: UserDetailsFormProps): boolean {\n return !props.isNew\n && !!props.showActions\n && !!props.appLinks\n && !!props.user\n && !!props.onClickResendActivationEmail;\n}\n\ninterface UserDetailsFormProps {\n user?: User;\n onClickCancel: () => void;\n userType: UserGroup;\n countryCode?: string;\n yearGroups: YearGroup[];\n products?: ProductId[];\n isNew?: boolean;\n submitText?: string;\n currentUser: CurrentUser;\n formSize?: FormSize;\n canEditEmail?: boolean;\n emailRequired: boolean;\n showPasswordField?: boolean;\n showDisplayNameField?: boolean;\n canEditSsoFields?: boolean;\n isInBulkEditing?: boolean;\n hasUserCredit?: boolean;\n hasOrg: boolean;\n canEditSuperAdmin: boolean;\n\n shouldGoToNext?: boolean;\n onToggleNextCheckbox?: () => void;\n goToNextText?: string;\n\n // All of the below props are required for the actions to be shown\n showActions?: boolean;\n appLinks?: UserManagerAppLinks;\n onClickResendActivationEmail?: (user: User) => void;\n onClickSendResetEmail?: (user: User) => void;\n onClickSendVerificationEmail?: (user: User) => void;\n validateEmail?: (email: string) => Promise<BulkUserEmailCheckResponse>;\n onDetectValidUser?: (detectedUser: UserEmailCheckResponse['user']) => void;\n}\n\nexport function UserDetailsForm(props: UserDetailsFormProps): React.ReactElement {\n const { onClickCancel, isNew, userType, yearGroups, submitText, currentUser } = props;\n\n const validYearGroups = UserHelper.getValidYearGroups(yearGroups);\n\n const [ emailError, setEmailError ] = React.useState<UserEmailCheckResponse>(null);\n const [ isValidatingEmail, setIsValidatingEmail ] = React.useState(false);\n\n const [ editSsoFields, setEditSsoFields ] = React.useState(false);\n\n const emailValidationCache = React.useRef<Record<string, UserEmailCheckResponse>>({});\n\n const client = React.useContext(UserManagerClientContext);\n const formikProps = useFormikContextWrapper<EditUserRequest>();\n\n React.useEffect(() => {\n if (formikProps.values.password && formikProps.values.email)\n formikProps.setFieldValue('password', '');\n }, [ formikProps.values.email, formikProps.values.password ]);\n\n function getEmailFieldInfoText(): string {\n /**\n * Return message to explain that the email address is either unverified (and hence can be edited)\n * or that it is verified and can't be edited.\n * \n * Only show this when:\n * 1. The user is being edited in Curator\n * 2. The user has an existing email address\n */\n if (client === UserManagerClient.Curator && !props.isNew && !!formikProps.initialValues.email)\n return getPhrase(props.canEditEmail ? 'emailNotVerified' : 'cannotEditVerifiedEmail');\n }\n\n async function onBlurEmail(e: React.FormEvent<HTMLInputElement>): Promise<void> {\n const email = e.currentTarget.value;\n\n /**\n * Email has not been changed. No need to validate it.\n */\n if (email === formikProps.initialValues.email)\n return;\n\n formikProps.setFieldTouched('email', true);\n\n if (client !== UserManagerClient.Primary || !props.validateEmail)\n return;\n\n const formErrors = await formikProps.validateForm();\n\n if (formErrors.email || !email) {\n if (emailError)\n setEmailError(null);\n\n return;\n }\n\n setIsValidatingEmail(true);\n\n try {\n let emailValidation = emailValidationCache.current[email];\n\n if (!emailValidation)\n emailValidation = ArrayHelper.first(await props.validateEmail(email));\n\n emailValidationCache.current[email] = emailValidation;\n\n if (props.isNew && emailValidation.validationCode === UserValidationCode.UserCanBeAddedInCustomer) {\n props.onDetectValidUser(emailValidation.user);\n return;\n }\n \n if (!EMAIL_ERROR_CODES.includes(emailValidation.validationCode)) {\n if (emailError)\n setEmailError(null);\n\n setIsValidatingEmail(false);\n \n return;\n }\n \n setEmailError(emailValidation);\n setIsValidatingEmail(false);\n } catch {\n setIsValidatingEmail(false);\n }\n }\n\n /**\n * This addresses a UX issue where if you enter an email, then\n * that email is validated, all inputs are unfocused as all fields are\n * set to \"disabled\". Once validation completed, the first name\n * input should be focused\n */\n React.useEffect(() => {\n if (!formikProps.touched.email || isValidatingEmail)\n return;\n\n const firstNameEl = document.getElementById(FIRST_NAME_FIELD_ID);\n\n if (!firstNameEl)\n return;\n\n firstNameEl.focus();\n }, [isValidatingEmail]);\n\n function onChangeEmail(e: React.FormEvent<HTMLInputElement>): void {\n const email = e.currentTarget.value;\n\n formikProps.setFieldValue('email', email);\n\n if (emailError)\n setEmailError(null);\n }\n\n const isDisabled = props.user?.status === ObjectStatus.Disabled;\n const isEditingCurrentUser = !props.isNew && (currentUser.id.toString() === formikProps.values.userId?.toString());\n\n return (\n <Form>\n <FormField\n label={getPhrase('emailAddress')}\n type='text'\n name='email'\n id='email'\n placeholder={getPhrase('emailAddressPlaceholder')}\n value={formikProps.values.email}\n showRequiredStar={props.emailRequired}\n disabled={!props.canEditEmail || isDisabled}\n formSize={props.formSize}\n infoText={getEmailFieldInfoText()}\n onBlur={onBlurEmail}\n onChange={onChangeEmail}\n showLoadingSpinner={isValidatingEmail}\n className={emailError ? 'is-invalid' : ''}\n autoFocus\n />\n {!!emailError && (\n <div className='mt-n2 mb-2'>\n <UserEmailExistsError\n name='email'\n isNew={props.isNew}\n error={emailError}\n appLinks={props.appLinks}\n emailRequired={props.emailRequired}\n onClickCancel={props.onClickCancel}\n isInBulkEditing={props.isInBulkEditing}\n />\n </div>\n )}\n\n <FormField\n label={getPhrase('firstName')}\n type='text'\n name='firstName'\n id={FIRST_NAME_FIELD_ID}\n placeholder={getPhrase('firstNamePlaceholder')}\n value={formikProps.values.firstName}\n showRequiredStar\n formSize={props.formSize}\n disabled={isDisabled || isValidatingEmail || (UserHelper.hasLegacySso(props.user) && !editSsoFields)}\n />\n\n <FormField\n label={getPhrase('lastName')}\n type='text'\n name='surname'\n id='surname'\n placeholder={getPhrase('lastNamePlaceholder')}\n value={formikProps.values.surname}\n showRequiredStar\n formSize={props.formSize}\n disabled={isDisabled || isValidatingEmail || (UserHelper.hasLegacySso(props.user) && !editSsoFields)}\n />\n\n {props.showDisplayNameField && (\n <FormField\n label={getPhrase('displayName')}\n type='text'\n name='displayName'\n id='displayName'\n placeholder={getPhrase('displayNamePlaceholder')}\n formSize={props.formSize}\n disabled={isDisabled || isValidatingEmail}\n infoText={getPhrase('displayNameInfo')}\n />\n )}\n\n <FormField\n label={getPhrase('username')}\n type='text'\n name='username'\n id='username'\n placeholder={getPhrase('usernamePlaceholder')}\n value={formikProps.values.username}\n infoTooltip={isNew ? getPhrase('usernameInfo') : null}\n formSize={props.formSize}\n disabled={!isNew || isDisabled || isValidatingEmail}\n />\n\n {/* Only primary students can have a custom password. Other users must set their own during activation */}\n {props.showPasswordField && (\n <FormField\n label={getPhrase('password')}\n type='password'\n name='password'\n id='password'\n placeholder={getPhrase('passwordPlaceholder')}\n value={formikProps.values.password}\n disabled={!!formikProps.values.email || isValidatingEmail}\n infoTooltip={formikProps.values.email ? getPhrase('passwordDisabledInfo') : getPhrase('passwordGenerateInfo')}\n formSize={props.formSize}\n />\n )}\n\n {userType === UserGroup.Learner && (\n <FormField\n as='select'\n label={getPhrase('yearGroup')}\n name='masterYearGroup'\n value={formikProps.values.masterYearGroup?.id ?? ''}\n className={!formikProps.values.masterYearGroup?.id ? 'text-secondary' : ''}\n showRequiredStar\n disabled={\n isDisabled ||\n isValidatingEmail ||\n // For SSO users, we only allow setting the year group if they have the \"Unknown\" year group. I.e. value is 0\n (UserHelper.hasSso(props.user) && !editSsoFields && formikProps.initialValues.masterYearGroup?.value !== 0)\n }\n onChange={(e: any) => {\n const yearGroupId = e.target.value;\n const yearGroup = yearGroups.find(y => y.id.toString() === yearGroupId?.toString());\n\n if (!yearGroup) {\n formikProps.setFieldValue('masterYearGroup', null);\n return;\n }\n\n formikProps.setFieldValue('masterYearGroup', {\n id: yearGroup.id,\n name: yearGroup.name,\n description: yearGroup.description,\n value: yearGroup.value\n });\n }}\n >\n <option className='text-secondary' value=''>{LanguageService.getPhrase(namespace, 'selectYearGroup')}</option>\n {validYearGroups.map(yearGroup =>\n <option key={yearGroup.id} value={yearGroup.id} className='text-dark'>{yearGroup.name}</option>)}\n </FormField>\n )}\n\n <div className='d-flex justify-content-between align-items-center'>\n <UserRoleField\n user={props.user}\n userType={userType}\n countryCode={props.countryCode}\n isEditingCurrentUser={isEditingCurrentUser}\n isDisabled={isDisabled}\n isValidatingEmail={isValidatingEmail}\n editSsoFields={editSsoFields}\n hasOrg={props.hasOrg}\n canEditSuperAdmin={props.canEditSuperAdmin}\n />\n\n {shouldShowActions(props) && (\n <UserItemActions\n user={props.user}\n userType={userType}\n appLinks={props.appLinks}\n onClickSendResetEmail={props.onClickSendResetEmail}\n onClickResendActivationEmail={props.onClickResendActivationEmail}\n onClickSendVerificationEmail={props.onClickSendVerificationEmail}\n currentUser={currentUser}\n products={props.products}\n isEditUserForm\n hasUserCredit={props.hasUserCredit}\n />\n )}\n </div>\n\n <PopupButtons>\n {!!props.onToggleNextCheckbox && (\n <PopupButtons.Checkbox\n id='edit-next-user'\n onToggle={props.onToggleNextCheckbox}\n label={props.goToNextText || getPhrase('goToNext')}\n checked={props.shouldGoToNext}\n />\n )}\n\n {!!props.canEditSsoFields && (\n <PopupButtons.Toggle\n on={editSsoFields}\n onClick={() => setEditSsoFields(v => !v)}\n label={getPhrase('editSsoFields')}\n disabled={!UserHelper.hasSso(props.user)}\n tooltip={!UserHelper.hasSso(props.user) ? 'This user doesn\\'t sign in with SSO' : ''}\n />\n )}\n\n <PopupButtons.Cancel onClick={onClickCancel} />\n <PopupButtons.Submit\n isNew={isNew}\n text={submitText}\n variant='dark'\n disabled={emailError ? true : undefined}\n />\n </PopupButtons>\n </Form>\n );\n}\n","import { object, string } from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nimport { EditUserRequest } from '../interfaces';\n\n/**\n * Regex's here are copied directly from User API. These are used to do the same validation on the backend.\n */\nconst USERNAME_REGEX = /^(?![._])(?!.*[._]$)(?!.*?\\.\\.)(?!.*?__)[a-zA-Z0-9_.]+$/;\nconst NAME_REGEX = /^[\\w0-9'\\-,.():;&][^_!¡?÷¿/\\\\+=@#$%ˆ*{}|~<>[\\]]{0,}$/;\n\nconst getPhrase = LanguageService.encloseNamespace('userManager.validation');\n\nexport const UserValidationHelper = {\n getFirstNameSchema: (existingUser?: EditUserRequest) => {\n return string()\n .max(255, () => getPhrase('nameExceeds'))\n .required(() => getPhrase('nameRequired'))\n .default('')\n .test({\n name: 'name-invalid',\n message: getPhrase('nameInvalid'),\n test: (val: string) => {\n if (existingUser?.userId && existingUser.firstName === val)\n return true;\n\n return NAME_REGEX.test(val);\n }\n });\n },\n\n getSurnameSchema: (existingUser?: EditUserRequest) => {\n return string()\n .max(255, () => getPhrase('surnameExceeds'))\n .required(() => getPhrase('surnameRequired'))\n .default('')\n .test({\n name: 'surname-invalid',\n message: getPhrase('surnameInvalid'),\n test: (val: string) => {\n if (existingUser?.userId && existingUser.surname === val)\n return true;\n\n return NAME_REGEX.test(val);\n }\n });\n },\n\n getEmailSchema: (userType: UserGroup, existingUser?: EditUserRequest) => {\n let schema = string()\n .max(255, () => getPhrase('emailExceeds'))\n .email(() => getPhrase('emailInvalidLong'))\n .default('');\n\n // New staff and old staff who have an email are required to have an email set.\n // Learners and old staff who don't have an email are not required.\n if (userType === UserGroup.Staff && (!existingUser?.userId || existingUser.email))\n schema = schema.required(() => getPhrase('emailRequired'));\n\n return schema;\n },\n\n getUsernameSchema: (existingUser?: EditUserRequest) => {\n const isNewUser = !existingUser?.userId;\n\n return string()\n .default('')\n .test({\n name: 'username-too-long',\n message: getPhrase('usernameExceeds'),\n test: (val: string) => {\n if (!isNewUser && existingUser.username === val)\n return true;\n \n return val.length <= 200;\n }\n })\n .test({\n name: 'username-too-short',\n message: getPhrase('usernameTooShort'),\n test: (val: string) => {\n if (!isNewUser && existingUser.username === val)\n return true;\n \n if (isNewUser && !val)\n return true;\n \n return val.length >= 5;\n }\n })\n .test({\n name: 'username-invalid',\n message: getPhrase('usernameInvalidLong'),\n test: (val: string) => {\n if (isNewUser && !val)\n return true;\n\n if (!isNewUser && existingUser.username === val)\n return true;\n\n return USERNAME_REGEX.test(val);\n }\n });\n },\n\n getPasswordSchema: (minPasswordLength: number, existingUser?: EditUserRequest) => {\n let schema = string().default('');\n\n if (!existingUser?.userId) {\n schema = schema.test({\n name: 'password-short',\n message: getPhrase('passwordTooShort', { minLength: minPasswordLength }),\n test: (val: string) => {\n if (!val)\n return true;\n \n return val.length >= minPasswordLength;\n }\n });\n }\n\n return schema;\n },\n\n getDisplayNameSchema: () => {\n return string()\n .max(70, () => getPhrase('displayNameExceeds'))\n .notRequired()\n .nullable()\n .default('')\n .test({\n name: 'display-name-short',\n message: getPhrase('displayNameTooShort'),\n test: (val: string) => {\n if (!val)\n return true;\n\n return val.length >= 2;\n }\n });\n },\n\n getYearGroupSchema: (userType: UserGroup) => {\n if (userType === UserGroup.Staff)\n return;\n\n return object()\n .required(() => getPhrase('yearGroupRequired'))\n .nullable();\n }\n};","import { object } from 'yup';\n\nimport { EditUserRequest } from 'libs/shared/apps/user-manager/interfaces';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nimport { UserValidationHelper } from './UserValidationHelper';\n\nexport const getUserValidationSchema = (\n userType: UserGroup,\n minPasswordLength: number,\n existingUser?: EditUserRequest\n) => {\n return object().shape({\n firstName: UserValidationHelper.getFirstNameSchema(existingUser),\n\n surname: UserValidationHelper.getSurnameSchema(existingUser),\n\n email: UserValidationHelper.getEmailSchema(userType, existingUser),\n\n username: UserValidationHelper.getUsernameSchema(existingUser),\n\n password: UserValidationHelper.getPasswordSchema(minPasswordLength, existingUser),\n\n displayName: UserValidationHelper.getDisplayNameSchema(),\n\n masterYearGroup: UserValidationHelper.getYearGroupSchema(userType)\n });\n};","import React from 'react';\nimport { FormikErrors, FormikTouched } from 'formik';\n\nimport { UserDetailsForm } from 'libs/shared/apps/user-manager/components/user-details-form/UserDetailsForm';\nimport { BulkUserEmailCheckResponse, EditUserRequest, UserEmailCheckResponse, UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { getUserValidationSchema } from 'libs/shared/apps/user-manager/validation/UserValidationSchema';\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { CurrentUser, User, YearGroup } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { SecuritySettingsResponse } from '../../interfaces/SecuritySettingsResponse';\n\nexport interface EditUserDetailsProps {\n user?: User;\n userType: UserGroup;\n yearGroups: YearGroup[];\n countryCode?: string;\n currentUser: CurrentUser;\n initialValues: EditUserRequest;\n initialErrors?: FormikErrors<EditUserRequest>;\n onSubmit: (data: EditUserRequest, callback?: () => void) => void;\n onClickCancel: () => void;\n passwordPolicy: SecuritySettingsResponse;\n products?: ProductId[];\n\n editSsoUserHelpArticle?: string;\n canEditSsoFields?: boolean;\n\n submitText?: string;\n formSize?: FormSize;\n showPasswordField?: boolean;\n showDisplayNameField?: boolean;\n emailRequired: boolean;\n\n shouldGoToNext?: boolean;\n onToggleNextCheckbox?: () => void;\n goToNextText?: string;\n isInBulkEditing?: boolean;\n hasUserCredit?: boolean;\n hasOrg?: boolean;\n canEditSuperAdmin?: boolean;\n\n // All of the below props are required for the actions to be shown\n showActions?: boolean;\n appLinks?: UserManagerAppLinks;\n onClickResendActivationEmail?: (user: User) => void;\n onClickSendResetEmail?: (user: User) => void;\n onClickSendVerificationEmail?: (user: User) => void;\n validateEmail?: (email: string) => Promise<BulkUserEmailCheckResponse>;\n onDetectValidUser?: (detectedUser: UserEmailCheckResponse['user']) => void;\n}\n\nexport function EditUserDetails(props: EditUserDetailsProps): React.ReactElement {\n const initialTouched: FormikTouched<EditUserRequest> = {};\n Object.keys(props.initialErrors || {}).forEach((err: keyof EditUserRequest) => {\n initialTouched[err] = true;\n });\n\n const isNew = !props.initialValues.userId;\n\n const canEditEmail = (() => {\n if (isNew)\n return true;\n\n /**\n * If a user's email address is not verified, allow it to be edited.\n */\n if (!props.user?.metadata?.isEmailVerified)\n return true;\n\n return false;\n })();\n\n const minPasswordLength = UserManagerHelper.getMinimumPasswordLength(\n props.passwordPolicy,\n props.userType,\n UserRole.User\n );\n\n const validYearGroups = UserHelper.getValidYearGroups(props.yearGroups);\n\n return (\n <div>\n <FormWrapper<EditUserRequest>\n initialValues={props.initialValues}\n initialErrors={props.initialErrors}\n initialTouched={initialTouched}\n onSubmit={props.onSubmit}\n validationSchema={getUserValidationSchema(props.userType, minPasswordLength, props.initialValues)}\n >\n <UserDetailsForm\n isNew={isNew}\n user={props.user}\n userType={props.userType}\n yearGroups={validYearGroups}\n onClickCancel={props.onClickCancel}\n submitText={props.submitText}\n shouldGoToNext={props.shouldGoToNext}\n onToggleNextCheckbox={props.onToggleNextCheckbox}\n goToNextText={props.goToNextText}\n currentUser={props.currentUser}\n formSize={props.formSize}\n showPasswordField={props.showPasswordField}\n canEditEmail={canEditEmail}\n showActions={props.showActions}\n appLinks={props.appLinks}\n onClickResendActivationEmail={props.onClickResendActivationEmail}\n onClickSendResetEmail={props.onClickSendResetEmail}\n onClickSendVerificationEmail={props.onClickSendVerificationEmail}\n emailRequired={props.emailRequired}\n showDisplayNameField={props.showDisplayNameField}\n canEditSsoFields={props.canEditSsoFields}\n validateEmail={props.validateEmail}\n onDetectValidUser={props.onDetectValidUser}\n isInBulkEditing={props.isInBulkEditing}\n products={props.products}\n hasUserCredit={props.hasUserCredit}\n hasOrg={props.hasOrg}\n countryCode={props.countryCode}\n canEditSuperAdmin={props.canEditSuperAdmin}\n />\n </FormWrapper>\n </div>\n );\n}","import React from 'react';\n\ninterface FormFeedbackProps extends React.PropsWithChildren {\n name: string;\n className?: string;\n}\n\nexport function FormFeedback(props: FormFeedbackProps) {\n return (\n <span id={`${props.name}Error`} className={`${props.className} invalid-feedback d-block`} role='status'>{props.children}</span>\n );\n}","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span> </span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = ObjectHelper.get(values, props.fieldName as string);\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n description?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n formGroupClassname?: string;\n labelClassName?: string;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n formGroupClassname,\n labelClassName: labelGlassName,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className={`form-group ${formGroupClassname}`}>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className={`d-flex align-items-center ${labelGlassName}`}>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'> <Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n {props.description &&\n <p>\n {props.description}\n </p>\n }\n\n <FieldWrapper {...fieldWrapperProps} aria-errormessage={`${fieldProps.name}Error`} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback id={`${fieldProps.name}Error`} type='invalid' role='status'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nimport { UpdateSecuritySettingsRequest } from 'apps/settings/interfaces/security/requests/UpdateSecuritySettingsRequest';\n\nexport const SecuritySettingsRequests = {\n getCustomerSecuritySettings(\n customerId: string,\n success?: () => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/settings/security`,\n key: `customers:security:settings`,\n normalize: false,\n success,\n error\n };\n },\n\n setCustomerSecuritySettings(\n customerId: string,\n data: UpdateSecuritySettingsRequest,\n success?: () => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/settings/security`,\n key: `update:security:settings`,\n invalidationKeys: `customers:security:settings`,\n type: HttpVerbs.PUT,\n normalize: false,\n data,\n success,\n error\n };\n }\n};"],"names":["getPhrase","LanguageService","UserEmailContactSupportMessage","props","isRostered","error","validationCode","UserValidationCode","FormFeedback","name","isInBulkEditing","ExternalLink","className","href","ArticleHelper","newTab","EditingUserExistsErrorMessage","UserExistsInSchoolErrorMessage","formikProps","appLinkParams","appLinks","studentManager","params","user","userType","UserGroup","AppLink","appLink","query","values","email","onClick","onClickCancel","staffManager","UserTypeMismatchErrorMessage","UserEmailExistsError","isNew","UserRoleField","ROLE_OPTIONS","value","UserRole","label","countryCode","showAdminToggle","hasOrg","canEditSuperAdmin","isEditingCurrentUser","isDisabled","isValidatingEmail","UserHelper","editSsoFields","masterRole","FormField","id","disabled","ToggleSwitch","setFieldValue","User","on","showStateWhenDisabled","map","option","key","Form","type","checked","onChange","e","target","DivButton","Tooltip","title","spanHack","EMAIL_ERROR_CODES","FIRST_NAME_FIELD_ID","UserDetailsForm","yearGroups","submitText","currentUser","validYearGroups","emailError","setEmailError","setIsValidatingEmail","setEditSsoFields","emailValidationCache","client","UserManagerClientContext","password","touched","firstNameEl","document","getElementById","focus","status","ObjectStatus","toString","userId","placeholder","showRequiredStar","emailRequired","canEditEmail","formSize","infoText","UserManagerClient","initialValues","getEmailFieldInfoText","onBlur","currentTarget","setFieldTouched","validateEmail","validateForm","emailValidation","current","ArrayHelper","first","onDetectValidUser","includes","showLoadingSpinner","autoFocus","firstName","surname","showDisplayNameField","username","infoTooltip","showPasswordField","as","masterYearGroup","yearGroupId","yearGroup","find","y","description","showActions","onClickResendActivationEmail","shouldShowActions","UserItemActions","onClickSendResetEmail","onClickSendVerificationEmail","products","isEditUserForm","hasUserCredit","PopupButtons","onToggleNextCheckbox","onToggle","goToNextText","shouldGoToNext","canEditSsoFields","v","tooltip","text","variant","undefined","USERNAME_REGEX","NAME_REGEX","UserValidationHelper","existingUser","max","required","test","message","val","schema","isNewUser","length","minPasswordLength","minLength","nullable","getUserValidationSchema","shape","displayName","notRequired","EditUserDetails","initialTouched","Object","keys","initialErrors","forEach","err","metadata","isEmailVerified","UserManagerHelper","passwordPolicy","FormWrapper","onSubmit","validationSchema","role","children","FormCheckbox","checkboxLabelClassName","checkboxLabelFontWeight","fieldProps","FieldWrapper","htmlFor","checkboxAppLink","checkboxAppLinkText","CharacterCounter","field","ObjectHelper","fieldName","limit","namespace","setType","resolvedChildren","FunctionHelper","f","Spinner","animation","size","containerClassName","SvgContainer","svgName","showCharacterCounter","infoTooltipPlacement","showOptionalLabel","formGroupClassname","labelGlassName","labelClassName","errors","disabledOnChange","_props","fieldWrapperProps","FormHelper","tooltipPlacement","tooltipSpanHack","Text","phrase","maxLength","errorMessage","defaultProps","autoComplete","castInitialValues","castValuesOnSubmit","formattedInitialValues","cast","omitChildValues","child","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","useFormikContextWrapper","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","SecuritySettingsRequests","getCustomerSecuritySettings","customerId","success","url","normalize","setCustomerSecuritySettings","data","invalidationKeys"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9843],{69843:(e,r,n)=>{n.d(r,{c:()=>N});var t=n(32735),a=n(23481),s=n(81886),i=n(2948),o=n(49985),l=n(65858),d=n(26055),c=n(43820),u=n(14604),p=n(83345),g="userManager.ssoPasswordResetEmailNotAllowedError";function m(e){return t.createElement(u.W,null,t.createElement("p",{className:"mb-1 fw-semibold"},t.createElement(p.x,{namespace:g,phrase:"warning"})),e.helpArticle&&t.createElement("a",{href:e.helpArticle,target:"_blank",className:"info-link"},t.createElement(p.x,{namespace:g,phrase:"findMore"})))}var b=n(83657),h=n(38143),f=n(40424),v=n(12754),R=n(76881),k=n(86613),y=n(42617);function C(e){return e&&e.groups?e.groups.map(function(e){return e.name}):[]}var O={isDev:function(e){return C(e).includes(y.j.Developer)},hasSubjectsAccess:function(e){return[y.j.Developer,y.j.Content,y.j.Curator,y.j.StreamableCurator].some(function(r){return C(e).includes(r)})}},w=n(89961),A=n(35223),E=n(64818);function L(e){return function(e){if(Array.isArray(e))return j(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||S(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function S(e,r){if(e){if("string"==typeof e)return j(e,r);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?j(e,r):void 0}}function j(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=Array(r);n<r;n++)t[n]=e[n];return t}var U=a.T.encloseNamespace("userManager.userList");function N(e){var r=function(e){var r,n,a,u,p,g,b,y,C,j,N,T=t.useContext(d.A),V=function(r){return r===e.user.status},x=V(f.w.Active),I=null===(r=e.user.metadata)||void 0===r?void 0:r.isEmailVerified,D=e.user.id==(null===(n=e.currentUser)||void 0===n?void 0:n.id),P=T!==c.a.Curator&&e.currentUser.role!==k.i.SuperAdmin&&(null===(a=e.user.userProfile)||void 0===a?void 0:a.role)===k.i.SuperAdmin,M=(j=(0,i.D)(h.g.BULK_REMOVE_USERS),N=2,function(e){if(Array.isArray(e))return e}(j)||function(e,r){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var t,a,s,i,o=[],l=!0,d=!1;try{if(s=(n=n.call(e)).next,0===r){if(Object(n)!==n)return;l=!1}else for(;!(l=(t=s.call(n)).done)&&(o.push(t.value),o.length!==r);l=!0);}catch(e){d=!0,a=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(d)throw a}}return o}}(j,N)||S(j,N)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[1];function _(r){o.k.logUserAction({id:e.user.id},o.k.mergeOptions({entity:l.py.User,workflowPhase:l.eu.Start,location:l.LZ[e.userType===R.Y.Learner?"StaffManagerListItem":"StudentManagerListItem"]},r))}var W=[];if(!e.isEditUserForm){var $=function(){return!(P||e.hasRostering||!x&&(!V(f.w.Inactive)||T!==c.a.Curator))};W.push({order:0,onClick:function(){var r;if($()){_({actionType:l.Vw.Edit});var n=Object.assign(Object.assign({},e.appLinks.editUser),{args:[].concat(L(null!==(r=e.appLinks.editUser.args)&&void 0!==r?r:[]),[e.user.id])});s.Q.C$.trigger(n)}},svgName:A.vn.Edit,className:"btn btn-link svg-container ".concat($()?"":"disabled"),tooltip:P?U("superAdminReadOnly"):e.hasRostering?U("editControlledByRostering"):V(f.w.Disabled)?U("editUserDisabled"):V(f.w.Inactive)&&T!==c.a.Curator?U("editUserPending"):U("editUser"),button:!0})}var Q=function(e){var r=e.hasRostering,n=e.isActive,t=e.superAdminReadOnly;return r?U("editControlledByRostering"):n?U("deleteDisabledTooltip"):t?U("superAdminReadOnly"):null};return e.user.email&&V(f.w.Inactive)&&e.onClickResendActivationEmail&&W.push({order:5,disabled:e.hasRostering||P,tooltip:Q({hasRostering:e.hasRostering,superAdminReadOnly:P}),label:U("resendActivationEmail"),onClick:function(){_({actionType:l.Vw.SendEmail,descriptor:l.on.ActivateUser}),e.onClickResendActivationEmail(e.user)},className:e.hasRostering||P?"cursor-default disabled":"btn btn-link"}),e.user.email&&x&&!I&&W.push({order:5,label:U("sendVerificationEmail"),disabled:e.hasRostering||P,tooltip:Q({hasRostering:e.hasRostering,superAdminReadOnly:P}),onClick:function(){_({actionType:l.Vw.SendEmail,descriptor:l.on.VerifyEmail}),e.onClickSendVerificationEmail(e.user)},className:e.hasRostering?"cursor-default disabled":"btn btn-link"}),D||(I&&x&&e.onClickSendResetEmail&&W.push({order:5,label:U("sendResetEmail"),disabled:e.hasRostering||P,tooltip:Q({hasRostering:e.hasRostering,superAdminReadOnly:P}),onClick:function(){E.l.hasSso(e.user)?w.M.render(t.createElement(m,{helpArticle:e.ssoHelpArticle}),{title:U("sendResetEmail"),cancelButtonProps:{text:U("close"),variant:"dark"}}):(_({actionType:l.Vw.SendEmail,descriptor:l.on.ResetPasswordEmail}),e.onClickSendResetEmail(e.user))},className:e.hasRostering||P?"cursor-default disabled":"btn btn-link"}),V(f.w.Inactive)||W.push({order:10,label:U(x?"deactivate":"activate"),disabled:e.hasRostering||P,tooltip:Q({hasRostering:e.hasRostering,superAdminReadOnly:P}),className:e.hasRostering||P?"cursor-default disabled":"",onClick:function(){var r;_({actionType:l.Vw.Activate,descriptor:x?l.DL.Off:l.DL.On});var n=Object.assign(Object.assign({},e.appLinks.toggleStatus),{args:[].concat(L(null!==(r=e.appLinks.toggleStatus.args)&&void 0!==r?r:[]),[e.user.id])});s.Q.C$.trigger(n)}}),(T!==c.a.Primary||(null===(u=e.products)||void 0===u?void 0:u.includes(v.x.Online)))&&W.push({order:25,disabled:e.hasRostering||P,onClick:function(){x||(_({actionType:l.Vw.Delete,descriptor:l.yh.Single}),M({users:[e.user],totalUsers:1}),s.Q.C$.trigger(e.appLinks.deleteUser))},label:U("delete"),className:"btn btn-link text-danger ".concat(x||e.hasRostering||P?"cursor-default disabled":""),button:!1,tooltip:Q({superAdminReadOnly:P,hasRostering:e.hasRostering,isActive:x})}),T!==c.a.Online&&!(null===(p=e.products)||void 0===p?void 0:p.includes(v.x.Online))&&W.push({order:25,disabled:e.hasRostering||P,onClick:function(){var r;if(!x){_({actionType:l.Vw.Remove,descriptor:l.yh.Single});var n=Object.assign(Object.assign({},e.appLinks.removeUser),{args:[].concat(L(null!==(r=e.appLinks.editUser.args)&&void 0!==r?r:[]),[e.user.id])});s.Q.C$.trigger(n)}},label:U("remove"),className:"btn btn-link text-danger ".concat(x||e.hasRostering||P?"cursor-default disabled":""),button:!1,tooltip:Q({hasRostering:e.hasRostering,superAdminReadOnly:P})})),T===c.a.Online&&e.userType===R.Y.Learner&&x&&W.push({order:15,label:U("viewWorkspace"),onClick:function(){return _({actionType:l.Vw.Click,descriptor:l._S.ViewStudentWorkspace})},appLink:Object.assign(Object.assign({},e.appLinks.viewStudentWorkspace),{params:{username:e.user.username}}),className:e.hasRostering||P?"cursor-default disabled":"btn btn-link",button:!1}),T!==c.a.Primary||e.userType!==R.Y.Learner||V(f.w.Inactive)||W.push({order:15,label:U("viewStudentsVideos"),onClick:function(){return _({actionType:l.Vw.Click,descriptor:l._S.ViewStudentWorkspace})},appLink:Object.assign(Object.assign({},e.appLinks.viewStudentWorkspace),{args:[e.user.id]}),className:"btn btn-link",button:!1}),x&&(e.userType===R.Y.Staff&&!I||e.userType===R.Y.Learner)&&W.push({order:20,disabled:e.hasRostering||P,label:U("changePassword"),className:e.hasRostering||P?"cursor-default disabled":"",onClick:function(){var r;_({actionType:l.Vw.ChangePassword});var n=Object.assign(Object.assign({},e.appLinks.changePassword),{args:[].concat(L(null!==(r=e.appLinks.changePassword.args)&&void 0!==r?r:[]),[e.user.id])});s.Q.C$.trigger(n)}}),T===c.a.Curator&&O.isDev(e.currentUser)&&W.push.apply(W,[{order:2,label:U("manageCuratorGroups"),disabled:e.hasRostering||P,tooltip:Q({hasRostering:e.hasRostering,superAdminReadOnly:P}),className:e.hasRostering||P?"cursor-default disabled":"",onClick:function(){_({actionType:l.Vw.ManageGroup}),s.Q.C$.trigger(Object.assign(Object.assign({},e.appLinks.manageUserCuratorGroups),{args:[e.user.id]}))}},{order:3,label:U("editUserOptions"),disabled:e.hasRostering||P,tooltip:Q({hasRostering:e.hasRostering,superAdminReadOnly:P}),className:e.hasRostering||P?"cursor-default disabled":"",appLink:Object.assign(Object.assign({},e.appLinks.editUserOptions),{args:[].concat(L(null!==(g=e.appLinks.editUserOptions.args)&&void 0!==g?g:[]),[e.user.id])})}]),T===c.a.Curator&&e.hasUserCredit&&W.push({order:4,label:U("editUserCredits"),appLink:Object.assign(Object.assign({},e.appLinks.userCredit),{args:[].concat(L(null!==(b=e.appLinks.userCredit.args)&&void 0!==b?b:[]),[e.user.id])})}),T===c.a.Curator&&(null===(y=e.user.metadata)||void 0===y?void 0:y.isEmailVerified)&&!V(f.w.Inactive)&&W.push({order:5,label:U("unverifyEmail"),disabled:e.hasRostering||P,tooltip:Q({hasRostering:e.hasRostering,superAdminReadOnly:P}),className:e.hasRostering||P?"cursor-default disabled":"",onClick:function(){var r;_({actionType:l.Vw.VerifyEmail,descriptor:l.hY.Remove}),s.Q.C$.trigger(Object.assign(Object.assign({},e.appLinks.deleteUserEmail),{args:[].concat(L(null!==(r=e.appLinks.deleteUserEmail.args)&&void 0!==r?r:[]),[e.user.id])}))}}),T===c.a.Curator&&e.isEditUserForm&&W.push({order:6,label:U("addToAnotherCustomer"),disabled:e.hasRostering||P,tooltip:Q({hasRostering:e.hasRostering,superAdminReadOnly:P}),className:e.hasRostering||P?"cursor-default disabled":"",appLink:Object.assign(Object.assign({},e.appLinks.addToAnotherCustomer),{args:[].concat(L(null!==(C=e.appLinks.addToAnotherCustomer.args)&&void 0!==C?C:[]),[e.user.id])})}),W}(e);return t.createElement(b.e,{actions:r,className:e.isEditUserForm?"mb-2":"pe-4",actionsDropdownClassName:e.isEditUserForm?"btn btn-outline-dark":"btn btn-link ms-1"})}},14604:(e,r,n)=>{n.d(r,{W:()=>o});var t=n(32735),a=n(83914),s=n(35223);const i={icon:"eCi4v"};function o(e){return t.createElement("div",{className:"alert alert-warning d-flex align-items-center px-2 mb-3 ".concat(e.className||"")},t.createElement(a.x,{svgName:s.vn.WarningOutline,className:"svg-container me-2 ".concat(i.icon)}),t.createElement("div",null,e.children))}},26055:(e,r,n)=>{n.d(r,{A:()=>t});var t=n(32735).createContext(null)}}]);
|
|
2
|
-
//# sourceMappingURL=9843-e750603a26-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/9843-e750603a26-lite.chunk.js","mappings":"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","sources":["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/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/context/UserManagerClientContext.ts"],"sourcesContent":["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 { UserRole } from 'libs/shared/enums/UserRole';\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 const isActive = hasStatus(ObjectStatus.Active);\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 // in Lite non-super admin cannot update super admin\n const superAdminReadOnly = client === UserManagerClient.Curator\n ? false\n : props.currentUser.role !== UserRole.SuperAdmin && props.user.userProfile?.role === UserRole.SuperAdmin;\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 getEditTooltip(): string {\n if (superAdminReadOnly)\n return getPhrase('superAdminReadOnly');\n\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 (superAdminReadOnly)\n return false;\n\n if (props.hasRostering)\n return false;\n\n if (isActive)\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: getEditTooltip(),\n button: true\n });\n }\n\n const getActionTooltip = ({\n hasRostering,\n isActive,\n superAdminReadOnly\n }: {\n hasRostering: boolean;\n isActive?: boolean;\n superAdminReadOnly: boolean;\n }): string | null => {\n if (hasRostering) {\n return getPhrase('editControlledByRostering');\n }\n if (isActive) {\n return getPhrase('deleteDisabledTooltip');\n }\n if (superAdminReadOnly) {\n return getPhrase('superAdminReadOnly');\n }\n return null;\n };\n\n if (props.user.email && hasStatus(ObjectStatus.Inactive) && props.onClickResendActivationEmail) {\n actions.push({\n order: 5,\n disabled: props.hasRostering || superAdminReadOnly,\n tooltip: getActionTooltip({ hasRostering: props.hasRostering, superAdminReadOnly }),\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 || superAdminReadOnly ? 'cursor-default disabled' : 'btn btn-link'\n });\n }\n\n if (\n props.user.email &&\n isActive &&\n !hasVerifiedEmail\n ) {\n actions.push({\n order: 5,\n label: getPhrase('sendVerificationEmail'),\n disabled: props.hasRostering || superAdminReadOnly,\n tooltip: getActionTooltip({ hasRostering: props.hasRostering, superAdminReadOnly }),\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 && isActive && props.onClickSendResetEmail) {\n actions.push({\n order: 5,\n label: getPhrase('sendResetEmail'),\n disabled: props.hasRostering || superAdminReadOnly,\n tooltip: getActionTooltip({ hasRostering: props.hasRostering, superAdminReadOnly }),\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 || superAdminReadOnly) ? 'cursor-default disabled' : 'btn btn-link'\n });\n }\n\n if (!hasStatus(ObjectStatus.Inactive)) {\n actions.push({\n order: 10,\n label: getPhrase(isActive ? 'deactivate' : 'activate'),\n disabled: props.hasRostering || superAdminReadOnly,\n tooltip: getActionTooltip({ hasRostering: props.hasRostering, superAdminReadOnly }),\n className: (props.hasRostering || superAdminReadOnly) ? 'cursor-default disabled' : '',\n onClick: () => {\n logAnalytics({\n actionType: UserAction.Activate,\n descriptor: isActive ? 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 || superAdminReadOnly,\n onClick: () => {\n if (isActive)\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 ${(isActive || props.hasRostering || superAdminReadOnly) ? 'cursor-default disabled' : ''}`,\n button: false,\n tooltip: getActionTooltip({\n superAdminReadOnly,\n hasRostering: props.hasRostering,\n isActive: isActive\n })\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 || superAdminReadOnly,\n onClick: () => {\n if (isActive)\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 ${(isActive || props.hasRostering || superAdminReadOnly) ? 'cursor-default disabled' : ''}`,\n button: false,\n tooltip: getActionTooltip({ hasRostering: props.hasRostering, superAdminReadOnly })\n });\n }\n }\n\n if (client === UserManagerClient.Online && props.userType === UserGroup.Learner && isActive) {\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 || superAdminReadOnly) ? '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 isActive &&\n (\n (props.userType === UserGroup.Staff && !hasVerifiedEmail) ||\n props.userType === UserGroup.Learner\n )\n ) {\n actions.push({\n order: 20,\n disabled: props.hasRostering || superAdminReadOnly,\n label: getPhrase('changePassword'),\n className: (props.hasRostering || superAdminReadOnly) ? '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 || superAdminReadOnly,\n tooltip: getActionTooltip({ hasRostering: props.hasRostering, superAdminReadOnly }),\n className: (props.hasRostering || superAdminReadOnly) ? '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 || superAdminReadOnly,\n tooltip: getActionTooltip({ hasRostering: props.hasRostering, superAdminReadOnly }),\n className: (props.hasRostering || superAdminReadOnly) ? '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 (client === UserManagerClient.Curator && props.hasUserCredit) {\n actions.push({\n order: 4,\n label: getPhrase('editUserCredits'),\n appLink: {\n ...props.appLinks.userCredit,\n args: [ ...(props.appLinks.userCredit.args ?? []), props.user.id ]\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 || superAdminReadOnly,\n tooltip: getActionTooltip({ hasRostering: props.hasRostering, superAdminReadOnly }),\n className: (props.hasRostering || superAdminReadOnly) ? '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 || superAdminReadOnly,\n tooltip: getActionTooltip({ hasRostering: props.hasRostering, superAdminReadOnly }),\n className: (props.hasRostering || superAdminReadOnly) ? '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 hasUserCredit?: 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 {\"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 React from 'react';\n\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\n\nexport const UserManagerClientContext = React.createContext<UserManagerClient>(null);"],"names":["namespace","SsoPasswordResetEmailNotAllowedError","props","WarningAlert","W","className","Text","phrase","helpArticle","href","target","getGroupNames","user","groups","map","g","name","CuratorPermissionsHelper","isDev","includes","CuratorGroup","hasSubjectsAccess","Curator","some","group","getPhrase","LanguageService","UserItemActions","actions","client","UserManagerClientContext","hasStatus","status","isActive","ObjectStatus","hasVerifiedEmail","metadata","isEmailVerified","isCurrentUser","id","currentUser","superAdminReadOnly","UserManagerClient","role","UserRole","userProfile","setBulkRemoveUsers","SharedViewModelKeys","logAnalytics","actionOptions","AnalyticsHelper","entity","workflowPhase","location","userType","UserGroup","isEditUserForm","canEdit","hasRostering","push","order","onClick","actionType","appLink","appLinks","editUser","args","svgName","tooltip","button","getActionTooltip","email","onClickResendActivationEmail","disabled","label","descriptor","onClickSendVerificationEmail","onClickSendResetEmail","UserHelper","DialogHelper","ssoHelpArticle","title","cancelButtonProps","text","variant","toggleStatus","products","ProductId","users","totalUsers","deleteUser","removeUser","viewStudentWorkspace","params","username","changePassword","manageUserCuratorGroups","editUserOptions","hasUserCredit","userCredit","deleteUserEmail","addToAnotherCustomer","useGetActions","Actions","actionsDropdownClassName","SvgContainer","children"],"sourceRoot":""}
|
|
File without changes
|
/package/dist/scripts/{bundle-b2b1bef7c8.min.js.LICENSE.txt → bundle-3b8db11528.min.js.LICENSE.txt}
RENAMED
|
File without changes
|