{"version":3,"file":"EditPage-Ine-urvd.mjs","sources":["../../admin/src/pages/Settings/pages/Users/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n  Box,\n  Button,\n  ContentLayout,\n  Flex,\n  Grid,\n  GridItem,\n  HeaderLayout,\n  Main,\n  Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n  Form,\n  GenericInput,\n  LoadingIndicatorPage,\n  SettingsPageTitle,\n  translatedErrors,\n  useAPIErrorHandler,\n  useFocusWhenNavigate,\n  useNotification,\n  useOverlayBlocker,\n  useRBAC,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport { useIntl } from 'react-intl';\nimport { NavLink, Redirect, useHistory, useLocation, useRouteMatch } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Update } from '../../../../../../shared/contracts/user';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { selectAdminPermissions } from '../../../../selectors';\nimport { useAdminUsers, useUpdateUserMutation } from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { getFullName } from '../../../../utils/getFullName';\n\nimport { MagicLinkCE } from './components/MagicLinkCE';\nimport { SelectRoles } from './components/SelectRoles';\nimport { COMMON_USER_SCHEMA } from './utils/validation';\n\nimport type { FormLayout } from '../../../../types/form';\n\nconst EDIT_VALIDATION_SCHEMA = yup.object().shape({\n  ...COMMON_USER_SCHEMA,\n  isActive: yup.bool(),\n  roles: yup.array().min(1, translatedErrors.required).required(translatedErrors.required),\n});\n\nconst fieldsToPick = ['email', 'firstname', 'lastname', 'username', 'isActive', 'roles'] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * EditPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditPage = () => {\n  const { formatMessage } = useIntl();\n  const match = useRouteMatch<{ id: string }>('/settings/users/:id');\n  const id = match?.params?.id ?? '';\n  const { push } = useHistory();\n  const toggleNotification = useNotification();\n  const { lockApp, unlockApp } = useOverlayBlocker();\n  const MagicLink = useEnterprise(\n    MagicLinkCE,\n    async () =>\n      (\n        await import(\n          '../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE'\n        )\n      ).MagicLinkEE\n  );\n  const {\n    _unstableFormatAPIError: formatAPIError,\n    _unstableFormatValidationErrors: formatValidationErrors,\n  } = useAPIErrorHandler();\n\n  const permissions = useTypedSelector(selectAdminPermissions);\n\n  const {\n    isLoading: isLoadingRBAC,\n    allowedActions: { canUpdate },\n  } = useRBAC({\n    read: permissions.settings?.users.read ?? [],\n    update: permissions.settings?.users.update ?? [],\n  });\n\n  const [updateUser] = useUpdateUserMutation();\n\n  useFocusWhenNavigate();\n\n  const {\n    data,\n    error,\n    isLoading: isLoadingAdminUsers,\n  } = useAdminUsers(\n    { id },\n    {\n      refetchOnMountOrArgChange: true,\n    }\n  );\n\n  const [user] = data?.users ?? [];\n\n  React.useEffect(() => {\n    if (error) {\n      // Redirect the use to the homepage if is not allowed to read\n      if (error.name === 'UnauthorizedError') {\n        toggleNotification({\n          type: 'info',\n          message: {\n            id: 'notification.permission.not-allowed-read',\n            defaultMessage: 'You are not allowed to see this document',\n          },\n        });\n\n        push('/');\n      } else {\n        toggleNotification({\n          type: 'warning',\n          message: { id: 'notification.error', defaultMessage: formatAPIError(error) },\n        });\n      }\n    }\n  }, [error, formatAPIError, push, toggleNotification]);\n\n  const isLoading = isLoadingAdminUsers || !MagicLink || isLoadingRBAC;\n\n  if (isLoading) {\n    return (\n      <Main aria-busy=\"true\">\n        <SettingsPageTitle name=\"Users\" />\n        <HeaderLayout\n          primaryAction={\n            <Button disabled startIcon={<Check />} type=\"button\" size=\"L\">\n              {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n            </Button>\n          }\n          title={formatMessage({\n            id: 'app.containers.Users.EditPage.header.label-loading',\n            defaultMessage: 'Edit user',\n          })}\n          navigationAction={\n            <Link\n              as={NavLink}\n              startIcon={<ArrowLeft />}\n              // @ts-expect-error – as component props are not inferred correctly.\n              to=\"/settings/users?pageSize=10&page=1&sort=firstname\"\n            >\n              {formatMessage({\n                id: 'global.back',\n                defaultMessage: 'Back',\n              })}\n            </Link>\n          }\n        />\n        <ContentLayout>\n          <LoadingIndicatorPage />\n        </ContentLayout>\n      </Main>\n    );\n  }\n\n  type InitialData = Pick<Update.Request['body'], (typeof fieldsToPick)[number]> & {\n    confirmPassword: string;\n    password: string;\n  };\n\n  const initialData = {\n    ...pick(user, fieldsToPick),\n    roles: user.roles.map(({ id }) => id),\n    password: '',\n    confirmPassword: '',\n  } satisfies InitialData;\n\n  /**\n   * TODO: Convert this to react-query.\n   */\n  const handleSubmit = async (body: InitialData, actions: FormikHelpers<InitialData>) => {\n    lockApp?.();\n\n    const { confirmPassword, password, ...bodyRest } = body;\n\n    const res = await updateUser({\n      id,\n      ...bodyRest,\n      // The password should not be sent if it wasn't changed,\n      // it leads to a validation error if the string is empty\n      password: password === '' ? undefined : password,\n    });\n\n    if ('error' in res && isBaseQueryError(res.error)) {\n      if (res.error.name === 'ValidationError') {\n        actions.setErrors(formatValidationErrors(res.error));\n      }\n\n      toggleNotification({\n        type: 'warning',\n        message: formatAPIError(res.error),\n      });\n    } else {\n      toggleNotification({\n        type: 'success',\n        message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n      });\n\n      actions.setValues({\n        ...pick(body, fieldsToPick),\n        password: '',\n        confirmPassword: '',\n      });\n    }\n\n    unlockApp?.();\n  };\n\n  return (\n    <Main>\n      <SettingsPageTitle name=\"Users\" />\n      <Formik\n        onSubmit={handleSubmit}\n        initialValues={initialData}\n        validateOnChange={false}\n        validationSchema={EDIT_VALIDATION_SCHEMA}\n      >\n        {({ errors, values, handleChange, isSubmitting, dirty }) => {\n          return (\n            <Form>\n              <HeaderLayout\n                primaryAction={\n                  <Button\n                    disabled={isSubmitting || !canUpdate ? true : !dirty}\n                    startIcon={<Check />}\n                    loading={isSubmitting}\n                    type=\"submit\"\n                    size=\"L\"\n                  >\n                    {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n                  </Button>\n                }\n                title={formatMessage(\n                  {\n                    id: 'app.containers.Users.EditPage.header.label',\n                    defaultMessage: 'Edit {name}',\n                  },\n                  {\n                    name:\n                      initialData.username ||\n                      getFullName(initialData?.firstname ?? '', initialData.lastname),\n                  }\n                )}\n                navigationAction={\n                  <Link\n                    as={NavLink}\n                    startIcon={<ArrowLeft />}\n                    // @ts-expect-error – as component props are not inferred correctly.\n                    to=\"/settings/users?pageSize=10&page=1&sort=firstname\"\n                  >\n                    {formatMessage({\n                      id: 'global.back',\n                      defaultMessage: 'Back',\n                    })}\n                  </Link>\n                }\n              />\n              <ContentLayout>\n                {user?.registrationToken && (\n                  <Box paddingBottom={6}>\n                    <MagicLink registrationToken={user.registrationToken} />\n                  </Box>\n                )}\n                <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n                  <Box\n                    background=\"neutral0\"\n                    hasRadius\n                    shadow=\"filterShadow\"\n                    paddingTop={6}\n                    paddingBottom={6}\n                    paddingLeft={7}\n                    paddingRight={7}\n                  >\n                    <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n                      <Typography variant=\"delta\" as=\"h2\">\n                        {formatMessage({\n                          id: 'app.components.Users.ModalCreateBody.block-title.details',\n                          defaultMessage: 'Details',\n                        })}\n                      </Typography>\n                      <Grid gap={5}>\n                        {LAYOUT.map((row) =>\n                          row.map((input) => {\n                            return (\n                              <GridItem key={input.name} {...input.size}>\n                                <GenericInput\n                                  {...input}\n                                  disabled={!canUpdate}\n                                  // TODO: remove this coercion.\n                                  error={errors[input.name as keyof typeof errors] as string}\n                                  onChange={handleChange}\n                                  value={values[input.name as keyof typeof values]}\n                                />\n                              </GridItem>\n                            );\n                          })\n                        )}\n                      </Grid>\n                    </Flex>\n                  </Box>\n                  <Box\n                    background=\"neutral0\"\n                    hasRadius\n                    shadow=\"filterShadow\"\n                    paddingTop={6}\n                    paddingBottom={6}\n                    paddingLeft={7}\n                    paddingRight={7}\n                  >\n                    <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n                      <Typography variant=\"delta\" as=\"h2\">\n                        {formatMessage({\n                          id: 'global.roles',\n                          defaultMessage: \"User's role\",\n                        })}\n                      </Typography>\n                      <Grid gap={5}>\n                        <GridItem col={6} xs={12}>\n                          <SelectRoles\n                            disabled={!canUpdate}\n                            error={errors.roles as string}\n                            onChange={handleChange}\n                            value={values.roles}\n                          />\n                        </GridItem>\n                      </Grid>\n                    </Flex>\n                  </Box>\n                </Flex>\n              </ContentLayout>\n            </Form>\n          );\n        }}\n      </Formik>\n    </Main>\n  );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EditPage LAYOUT\n * -----------------------------------------------------------------------------------------------*/\n\nconst LAYOUT = [\n  [\n    {\n      intlLabel: {\n        id: 'Auth.form.firstname.label',\n        defaultMessage: 'First name',\n      },\n      name: 'firstname',\n      placeholder: {\n        id: 'Auth.form.firstname.placeholder',\n        defaultMessage: 'e.g. Kai',\n      },\n      type: 'text',\n      size: {\n        col: 6,\n        xs: 12,\n      },\n      required: true,\n    },\n    {\n      intlLabel: {\n        id: 'Auth.form.lastname.label',\n        defaultMessage: 'Last name',\n      },\n      name: 'lastname',\n      placeholder: {\n        id: 'Auth.form.lastname.placeholder',\n        defaultMessage: 'e.g. Doe',\n      },\n      type: 'text',\n      size: {\n        col: 6,\n        xs: 12,\n      },\n    },\n  ],\n  [\n    {\n      intlLabel: {\n        id: 'Auth.form.email.label',\n        defaultMessage: 'Email',\n      },\n      name: 'email',\n      placeholder: {\n        id: 'Auth.form.email.placeholder',\n        defaultMessage: 'e.g. kai.doe@strapi.io',\n      },\n      type: 'email',\n      size: {\n        col: 6,\n        xs: 12,\n      },\n      required: true,\n    },\n    {\n      intlLabel: {\n        id: 'Auth.form.username.label',\n        defaultMessage: 'Username',\n      },\n      name: 'username',\n      placeholder: {\n        id: 'Auth.form.username.placeholder',\n        defaultMessage: 'e.g. Kai_Doe',\n      },\n      type: 'text',\n      size: {\n        col: 6,\n        xs: 12,\n      },\n    },\n  ],\n  [\n    {\n      intlLabel: {\n        id: 'global.password',\n        defaultMessage: 'Password',\n      },\n      name: 'password',\n      type: 'password',\n      size: {\n        col: 6,\n        xs: 12,\n      },\n      autoComplete: 'new-password',\n    },\n    {\n      intlLabel: {\n        id: 'Auth.form.confirmPassword.label',\n        defaultMessage: 'Password confirmation',\n      },\n      name: 'confirmPassword',\n      type: 'password',\n      size: {\n        col: 6,\n        xs: 12,\n      },\n      autoComplete: 'new-password',\n    },\n  ],\n  [\n    {\n      intlLabel: {\n        id: 'Auth.form.active.label',\n        defaultMessage: 'Active',\n      },\n      name: 'isActive',\n      type: 'bool',\n      size: {\n        col: 6,\n        xs: 12,\n      },\n    },\n  ],\n] satisfies FormLayout[][];\n\nconst ProtectedEditPage = () => {\n  const toggleNotification = useNotification();\n  const permissions = useTypedSelector(selectAdminPermissions);\n\n  const {\n    isLoading,\n    allowedActions: { canRead, canUpdate },\n  } = useRBAC({\n    read: permissions.settings?.users.read ?? [],\n    update: permissions.settings?.users.update ?? [],\n  });\n  const { state } = useLocation<{ from: string }>();\n  const from = state?.from ?? '/';\n\n  React.useEffect(() => {\n    if (!isLoading) {\n      if (!canRead && !canUpdate) {\n        toggleNotification({\n          type: 'info',\n          message: {\n            id: 'notification.permission.not-allowed-read',\n            defaultMessage: 'You are not allowed to see this document',\n          },\n        });\n      }\n    }\n  }, [isLoading, canRead, canUpdate, toggleNotification]);\n\n  if (isLoading) {\n    return <LoadingIndicatorPage />;\n  }\n\n  if (!canRead && !canUpdate) {\n    return <Redirect to={from} />;\n  }\n\n  return <EditPage />;\n};\n\nexport { EditPage, ProtectedEditPage };\n"],"names":["id"],"mappings":"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"}