{"version":3,"sources":["../../../src/lib/edit-user-role-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n  Box,\n  Card,\n  Callout,\n  CheckboxGroup,\n  Flex,\n  ScrollArea,\n  Text,\n  VisuallyHidden,\n  Separator,\n} from \"@radix-ui/themes\";\nimport { type ReactNode, useState } from \"react\";\nimport { useUpdateUserRole } from \"./api/user.js\";\nimport { Dialog, Button, Select, Skeleton } from \"./elements.js\";\nimport { getBestName } from \"./utils.js\";\nimport {\n  Member,\n  MemberRole,\n  RolesAndConfig403,\n  RolesAndConfig404,\n  useRolesAndConfig,\n} from \"../api/endpoint.js\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\n\ninterface EditUserRoleDialogProps extends Dialog.RootProps {\n  open: boolean;\n  onOpenChange: (open: boolean) => void;\n  user: Member;\n  children?: ReactNode;\n}\n\nexport function EditUserRoleDialog({\n  children,\n  user,\n  ...props\n}: EditUserRoleDialogProps) {\n  const rolesAndConfigQuery = useRolesAndConfig({\n    query: {\n      initialData: { roles: [], multipleRolesEnabled: false },\n    },\n  });\n  const { data, ...restQueryState } = rolesAndConfigQuery;\n  const queryState = {\n    error: restQueryState.error,\n    isLoading: restQueryState.isLoading,\n    isSuccess: restQueryState.isSuccess,\n  };\n\n  return (\n    <Dialog.Root {...props}>\n      {children && <Dialog.Trigger>{children}</Dialog.Trigger>}\n      {data.multipleRolesEnabled ? (\n        <EditMultipleUserRolesDialogContent\n          user={user}\n          roles={data.roles}\n          queryState={queryState}\n          onFormSubmitSuccess={() => props.onOpenChange(false)}\n        />\n      ) : (\n        <EditSingleUserRoleDialogContent\n          user={user}\n          roles={data.roles}\n          queryState={queryState}\n          onFormSubmitSuccess={() => props.onOpenChange(false)}\n        />\n      )}\n    </Dialog.Root>\n  );\n}\n\ninterface EditSingleUserRoleDialogContentProps {\n  user: Member;\n  roles: MemberRole[];\n  queryState: {\n    error: RolesAndConfig403 | RolesAndConfig404 | null;\n    isLoading: boolean;\n    isSuccess: boolean;\n  };\n  onFormSubmitSuccess: () => void;\n}\n\nexport function EditSingleUserRoleDialogContent({\n  user,\n  roles,\n  queryState,\n  onFormSubmitSuccess,\n}: EditSingleUserRoleDialogContentProps) {\n  const translate = useTranslation();\n  const displayName = getBestName(user) || user.email;\n  const updateUser = useUpdateUserRole();\n  const [selectedRole, setSelectedRole] = useState(\n    user.roles?.at(0)?.slug || \"Unknown\",\n  );\n\n  const onSubmitForm = ({ id, roles }: { id: string; roles: string[] }) => {\n    updateUser.mutate(\n      { userId: id, data: { roles } },\n      {\n        onSuccess: () => {\n          onFormSubmitSuccess();\n        },\n      },\n    );\n  };\n\n  const rootId = React.useId();\n  const formId = `edit-user-form-${rootId}`;\n  const selectId = `role-select-${rootId}`;\n  const selectLabelId = `${selectId}-label`;\n  const infoId = `${selectId}-info`;\n  const errorId = `${selectId}-error`;\n  const showErrorMessage = !!queryState.error;\n  const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;\n\n  return (\n    <Dialog.Content maxWidth=\"480px\">\n      <Dialog.Title>\n        <Translation\n          defaultMessage=\"Edit role\"\n          id=\"Ue7G8Y\"\n          description=\"Dialog title for editing user role\"\n        />\n      </Dialog.Title>\n      <Dialog.Description>\n        <Translation\n          defaultMessage=\"Select the role to assign to {displayName}\"\n          id=\"jWl49/\"\n          description=\"Dialog description for role selection\"\n          values={{ displayName: <Text weight=\"bold\">{displayName}</Text> }}\n        />\n      </Dialog.Description>\n      <Flex mt=\"2\" direction=\"column\" gap=\"1\" asChild>\n        <form\n          id={formId}\n          onSubmit={async (event) => {\n            event.preventDefault();\n            onSubmitForm({ id: user.id, roles: [selectedRole] });\n          }}\n        >\n          <Select.Root\n            name=\"roles\"\n            value={selectedRole ?? \"Unknown\"}\n            onValueChange={setSelectedRole}\n            disabled={queryState.isLoading || showSingleRoleInfo}\n          >\n            <Skeleton loading={queryState.isLoading}>\n              <Select.Trigger\n                id={selectId}\n                placeholder={translate({\n                  defaultMessage: \"Assign a role\",\n                  id: \"0beebz\",\n                  description: \"Placeholder for role selection dropdown\",\n                })}\n                aria-labelledby={selectLabelId}\n                aria-invalid={showErrorMessage || undefined}\n                aria-describedby={\n                  [showErrorMessage && errorId, showSingleRoleInfo && infoId]\n                    .filter(Boolean)\n                    .join(\" \") || undefined\n                }\n              />\n            </Skeleton>\n\n            <Select.Content>\n              {roles.map((role) => (\n                <Select.Item key={role.slug} value={role.slug}>\n                  {role.name}\n                </Select.Item>\n              ))}\n            </Select.Content>\n          </Select.Root>\n\n          {showErrorMessage ? (\n            <Text color=\"red\" size=\"2\" id={errorId}>\n              {getRoleSelectErrorMessage(queryState.error)}\n            </Text>\n          ) : null}\n\n          {showSingleRoleInfo ? (\n            <Text color=\"gray\" size=\"2\" id={infoId} mt=\"1\">\n              <Translation\n                defaultMessage=\"You cannot update the role for this user as there is only one role available.\"\n                id=\"XLp48i\"\n                description=\"Info message when only one role is available\"\n              />\n            </Text>\n          ) : null}\n        </form>\n      </Flex>\n\n      {updateUser.error ? (\n        <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n          <Callout.Text>\n            {getMutationErrorMessage(updateUser.error)}\n          </Callout.Text>\n        </Callout.Root>\n      ) : null}\n\n      <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n        <Dialog.Close>\n          <Button variant=\"secondary\" disabled={updateUser.isPending}>\n            <Translation\n              defaultMessage=\"Cancel\"\n              id=\"hHNj31\"\n              description=\"Cancel button text\"\n            />\n          </Button>\n        </Dialog.Close>\n\n        <Button\n          form={formId}\n          loading={updateUser.isPending}\n          disabled={queryState.isLoading || showSingleRoleInfo || undefined}\n        >\n          <Translation\n            defaultMessage=\"Save\"\n            id=\"RT8KNi\"\n            description=\"Save button text\"\n          />\n        </Button>\n      </Flex>\n      {/* mirror errors in a live region */}\n      <VisuallyHidden asChild>\n        <section aria-live=\"polite\">\n          {getMutationErrorMessage(updateUser.error)}\n        </section>\n      </VisuallyHidden>\n    </Dialog.Content>\n  );\n}\n\ntype EditMultipleUserRolesDialogContentProps =\n  EditSingleUserRoleDialogContentProps;\n\nfunction EditMultipleUserRolesDialogContent({\n  user,\n  roles,\n  queryState,\n  onFormSubmitSuccess,\n}: EditMultipleUserRolesDialogContentProps) {\n  const displayName = getBestName(user) || user.email;\n  const updateUser = useUpdateUserRole();\n  const [error, setError] = useState<string | null>(null);\n\n  React.useEffect(() => {\n    if (queryState.error && !error) {\n      setError(\"There was an error fetching roles. Please try again.\");\n    }\n  }, [queryState.error, error]);\n\n  const onSubmitForm = ({ id, roles }: { id: string; roles: string[] }) => {\n    if (roles.length === 0) {\n      setError(\"Please select at least one role\");\n      return;\n    }\n    updateUser.mutate(\n      { userId: id, data: { roles } },\n      {\n        onSuccess: () => {\n          onFormSubmitSuccess();\n        },\n        onError: () => {\n          setError(\n            \"There was an error updating the user role. Please try again.\",\n          );\n        },\n      },\n    );\n  };\n\n  const rootId = React.useId();\n  const formId = `edit-user-form-${rootId}`;\n  const checkboxGroupId = `role-checkbox-group-${rootId}`;\n  const infoId = `${checkboxGroupId}-info`;\n  const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;\n  return (\n    <Dialog.Content maxWidth=\"480px\">\n      <Flex\n        direction=\"column\"\n        gap=\"1\"\n        maxHeight=\"calc(100vh - var(--dialog-content-padding) * 2 - var(--space-6) - max(var(--space-6), 6vh)\"\n        minHeight=\"200px\"\n      >\n        <Dialog.Title>\n          <Translation\n            defaultMessage=\"Edit roles\"\n            id=\"VQ1Avr\"\n            description=\"Dialog title for editing user roles (multiple)\"\n          />\n        </Dialog.Title>\n        <Dialog.Description>\n          <Translation\n            defaultMessage=\"Select the roles to assign to {displayName}\"\n            id=\"yyM/+B\"\n            description=\"Dialog description for selecting multiple roles\"\n            values={{ displayName: <Text weight=\"bold\">{displayName}</Text> }}\n          />\n        </Dialog.Description>\n        <Flex mt=\"4\" direction=\"column\" gap=\"1\" asChild minHeight=\"0\">\n          <Card\n            asChild\n            style={{ display: \"flex\", padding: \"2px 0\", flexGrow: 0 }}\n          >\n            <form\n              id={formId}\n              onSubmit={async (event) => {\n                event.preventDefault();\n                const formData = new FormData(event.currentTarget);\n                const selectedRoles = formData\n                  .getAll(\"roles\")\n                  .map((role) => role.toString());\n                onSubmitForm({ id: user.id, roles: selectedRoles });\n              }}\n            >\n              <ScrollArea>\n                <CheckboxGroup.Root\n                  defaultValue={user.roles?.map((role) => role.slug) || []}\n                  name=\"roles\"\n                  style={{ gap: \"0\" }}\n                  id={checkboxGroupId}\n                  onValueChange={(values) => {\n                    if (error && values.length > 0) {\n                      setError(\"\");\n                    }\n                  }}\n                >\n                  {roles.map((role, i) => (\n                    <Box key={role.slug}>\n                      <Flex px=\"4\" justify=\"center\" py=\"3\">\n                        <CheckboxGroup.Item\n                          value={role.slug}\n                          style={{\n                            width: \"100%\",\n                            gap: \"var(--space-3)\",\n                            alignItems: \"center\",\n                          }}\n                          disabled={showSingleRoleInfo}\n                        >\n                          <Flex direction=\"column\" width=\"100%\">\n                            <Text weight=\"bold\" size=\"2\">\n                              {role.name}\n                            </Text>\n                            <Text\n                              color=\"gray\"\n                              size=\"2\"\n                              style={{\n                                overflow: \"hidden\",\n                                textOverflow: \"ellipsis\",\n                                whiteSpace: \"nowrap\",\n                              }}\n                            >\n                              {role.description}\n                            </Text>\n                          </Flex>\n                        </CheckboxGroup.Item>\n                      </Flex>\n                      {i !== roles.length - 1 && (\n                        <Separator orientation=\"horizontal\" size=\"4\" />\n                      )}\n                    </Box>\n                  ))}\n                </CheckboxGroup.Root>\n              </ScrollArea>\n            </form>\n          </Card>\n        </Flex>\n\n        {showSingleRoleInfo ? (\n          <Text color=\"gray\" size=\"2\" id={infoId} mt=\"1\">\n            <Translation\n              defaultMessage=\"You cannot update the role for this user as there is only one role available.\"\n              id=\"XLp48i\"\n              description=\"Info message when only one role is available\"\n            />\n          </Text>\n        ) : null}\n\n        {error ? (\n          <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n            <Callout.Text>{error}</Callout.Text>\n          </Callout.Root>\n        ) : null}\n\n        <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n          <Dialog.Close>\n            <Button variant=\"secondary\" disabled={updateUser.isPending}>\n              <Translation\n                defaultMessage=\"Cancel\"\n                id=\"hHNj31\"\n                description=\"Cancel button text\"\n              />\n            </Button>\n          </Dialog.Close>\n\n          <Button\n            form={formId}\n            loading={updateUser.isPending}\n            disabled={queryState.isLoading || showSingleRoleInfo || undefined}\n          >\n            <Translation\n              defaultMessage=\"Save\"\n              id=\"RT8KNi\"\n              description=\"Save button text\"\n            />\n          </Button>\n        </Flex>\n      </Flex>\n      {/* mirror errors in a live region */}\n      <VisuallyHidden asChild>\n        <section aria-live=\"polite\">\n          {getMutationErrorMessage(updateUser.error)}\n        </section>\n      </VisuallyHidden>\n    </Dialog.Content>\n  );\n}\n\nfunction getRoleSelectErrorMessage(error: unknown) {\n  if (!error) {\n    return null;\n  }\n  // TODO Handle server errors\n  return \"There was an error fetching roles. Please try again.\";\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n  if (!error) {\n    return null;\n  }\n  // TODO Handle server errors\n  return \"There was an error updating the user role. Please try again.\";\n}\n\n// Note: Error messages in helper functions are kept as plain strings\n// since they are displayed dynamically\n"],"mappings":"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","names":["roles"]}