{"version":3,"file":"UserFormSideSheet.mjs","names":["React","useCallback","useState","SideSheet","UserForm","useSnackbar","apiMutate","useTenant","useHandleAxiosSnackbar","cloneDeep","useTranslation","ConfigService","UserFormSideSheet","open","onClose","loading","setLoading","tenant","t","handleErrorSnackbar","handleSuccessSnackbar","getUserByEmail","email","securityV1ApiUrl","method","createUser","data","activeTenant","tenantId","inviteUser","addUserToTenant","tenantV1ApiUrl","updateExistingUser","id","fillInValues","oldValues","newValues","invalidFields","field","includes","handleSubmit","values","toLowerCase","trim","userExistsResponse","userExists","existingUser","updatedValues","defaultValue","isInvite","error","message"],"sources":["../../../../src/shell/ui/user/UserFormSideSheet.jsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { SideSheet } from '../../../UI/surfaces/SideSheet';\nimport { UserForm } from './form/UserForm';\nimport { useSnackbar } from 'notistack';\nimport { apiMutate } from '../../../utilities/useAxiosMutate';\nimport { useTenant } from '../../../utilities/tenant/useTenant';\nimport { useHandleAxiosSnackbar } from '../../../utilities/apiHelpers';\nimport { cloneDeep } from 'lodash-es';\nimport { useTranslation } from 'react-i18next';\nimport { ConfigService } from '../../../configService';\n\n\nconst UserFormSideSheet = ({\n  open,\n  onClose,\n}) => {\n  const [loading, setLoading] = useState(false);\n  const tenant = useTenant();\n  const { t } = useTranslation();\n  const { handleErrorSnackbar, handleSuccessSnackbar } = useHandleAxiosSnackbar();\n\n  // Helper functions\n  const getUserByEmail = useCallback(\n    async email => {\n      return await apiMutate(\n        ConfigService.securityV1ApiUrl,\n        `users/email/${email}`,\n        { method: 'get' }\n      );\n    },\n    []\n  );\n\n  const createUser = useCallback(\n    async data => {\n      return await apiMutate(\n        ConfigService.securityV1ApiUrl,\n        `users/${tenant?.activeTenant?.tenantId ?? ''}`,\n        { method: 'post' },\n        data\n      );\n    },\n    [tenant]\n  );\n\n  const inviteUser = useCallback(\n    async data => {\n      return await apiMutate(\n        ConfigService.securityV1ApiUrl,\n        `users/${tenant?.activeTenant?.tenantId ?? ''}/invite`,\n        { method: 'post' },\n        data\n      );\n    },\n    [tenant]\n  );\n\n  const addUserToTenant = useCallback(\n    async email => {\n      return await apiMutate(\n        ConfigService.tenantV1ApiUrl,\n        `tenants/${tenant?.activeTenant?.tenantId ?? ''}/${email}`,\n        { method: 'post' }\n      );\n    },\n    [tenant]\n  );\n\n  const updateExistingUser = useCallback(\n    async data => {\n      return await apiMutate(\n        ConfigService.securityV1ApiUrl,\n        `users/aad/${data.id}`,\n        { method: 'patch' },\n        data\n      );\n    },\n    []\n  );\n\n  const fillInValues = (oldValues, newValues) => {\n    const invalidFields = [\n      'id', 'displayName', 'mail', 'userType', 'email',\n      'accountEnabled', 'mailNickname', 'identities',\n      'password', 'passwordProfile', 'unityId',\n      'unityDefaultTenantId'\n    ];\n    for (let field in oldValues) {\n      if (!invalidFields.includes(field)) {\n        if (!oldValues[field]) {\n          oldValues[field] = newValues[field];\n        }\n      }\n    }\n    return oldValues;\n  };\n\n  const handleSubmit = useCallback(\n    async values => {\n      setLoading(true);\n      try {\n        if (values.email) {\n          values.email = values.email.toLowerCase().trim();\n        }\n\n        const userExistsResponse = await getUserByEmail(values.email);\n        const userExists = userExistsResponse.data;\n\n        if (userExists) {\n          const existingUser = cloneDeep(userExists);\n          const updatedValues = fillInValues(existingUser, values);\n\n          // Update existing user and add to tenant\n          await updateExistingUser({ data: updatedValues });\n          await addUserToTenant(values.email);\n          handleSuccessSnackbar(\n            t('shell.user.messages.updatedAndAdded', {\n              defaultValue: 'User has been updated and added to the tenant'\n            })\n          )\n        } else {\n          // Check if this is an invite flow or standard create\n          if (values.isInvite) {\n            await inviteUser({ data: values });\n            handleSuccessSnackbar(\n              t('shell.user.messages.inviteSent', {\n                defaultValue: 'User invitation sent successfully'\n              })\n            );\n          } else {\n            // Create a new user\n            await createUser({ data: values });\n            handleSuccessSnackbar(\n              t('shell.user.messages.created', {\n                defaultValue: 'User has been created successfully'\n              })\n            );\n          }\n        }\n\n        onClose(); // Close the SideSheet after successful submission\n      } catch (error) {\n        handleErrorSnackbar(\n          error.message ||\n            t('shell.user.messages.createError', {\n              defaultValue:\n                'An error occurred, please ensure you are creating a new user'\n            })\n        )\n      } finally {\n        setLoading(false);\n      }\n    },\n    [\n      getUserByEmail,\n      createUser,\n      inviteUser,\n      addUserToTenant,\n      updateExistingUser,\n      handleErrorSnackbar,\n      handleSuccessSnackbar,\n      onClose,\n      t\n    ]\n  );\n\n  return (\n    <SideSheet\n      open={open}\n      onClose={onClose}\n      title={t('shell.user.addUser', { defaultValue: 'Add User' })}\n      width={600} // Adjust the width as needed\n    >\n      <UserForm\n        submitUser={handleSubmit}\n        creatingUser={loading}\n        tenant={tenant?.activeTenant}\n      />\n    </SideSheet>\n  );\n};\n\nexport default UserFormSideSheet;\n"],"mappings":"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"}