{"version":3,"file":"index.mjs","sources":["../../../../admin/src/pages/Providers/index.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking, Layouts } from '@strapi/admin/strapi-admin';\nimport {\n  IconButton,\n  Table,\n  Tbody,\n  Td,\n  Th,\n  Thead,\n  Tr,\n  Typography,\n  VisuallyHidden,\n  useCollator,\n} from '@strapi/design-system';\nimport { Pencil } from '@strapi/icons';\nimport {\n  Page,\n  useAPIErrorHandler,\n  useNotification,\n  useFetchClient,\n  useRBAC,\n} from '@strapi/strapi/admin';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery, useQueryClient } from 'react-query';\n\nimport FormModal from '../../components/FormModal';\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport forms from './utils/forms';\n\nexport const ProvidersPage = () => {\n  const { formatMessage, locale } = useIntl();\n  const queryClient = useQueryClient();\n  const { trackUsage } = useTracking();\n  const [isOpen, setIsOpen] = React.useState(false);\n  const [providerToEditName, setProviderToEditName] = React.useState(null);\n  const { toggleNotification } = useNotification();\n  const { get, put } = useFetchClient();\n  const { formatAPIError } = useAPIErrorHandler();\n  const formatter = useCollator(locale, {\n    sensitivity: 'base',\n  });\n\n  const {\n    isLoading: isLoadingPermissions,\n    allowedActions: { canUpdate },\n  } = useRBAC({ update: PERMISSIONS.updateProviders });\n\n  const { isLoading: isLoadingData, data } = useQuery(\n    ['users-permissions', 'get-providers'],\n    async () => {\n      const { data } = await get('/users-permissions/providers');\n\n      return data;\n    },\n    {\n      initialData: {},\n    }\n  );\n\n  const submitMutation = useMutation((body) => put('/users-permissions/providers', body), {\n    async onSuccess() {\n      await queryClient.invalidateQueries(['users-permissions', 'get-providers']);\n\n      toggleNotification({\n        type: 'success',\n        message: formatMessage({ id: getTrad('notification.success.submit') }),\n      });\n\n      trackUsage('didEditAuthenticationProvider');\n\n      handleToggleModal();\n    },\n    onError(error) {\n      toggleNotification({\n        type: 'danger',\n        message: formatAPIError(error),\n      });\n    },\n    refetchActive: false,\n  });\n\n  const providers = Object.entries(data)\n    .reduce((acc, [name, provider]) => {\n      const { icon, enabled, subdomain } = provider;\n\n      acc.push({\n        name,\n        icon: icon === 'envelope' ? ['fas', 'envelope'] : ['fab', icon],\n        enabled,\n        subdomain,\n      });\n\n      return acc;\n    }, [])\n    .sort((a, b) => formatter.compare(a.name, b.name));\n\n  const isLoading = isLoadingData || isLoadingPermissions;\n\n  const isProviderWithSubdomain = React.useMemo(() => {\n    if (!providerToEditName) {\n      return false;\n    }\n\n    const providerToEdit = providers.find((obj) => obj.name === providerToEditName);\n\n    return !!providerToEdit?.subdomain;\n  }, [providers, providerToEditName]);\n\n  const layoutToRender = React.useMemo(() => {\n    if (providerToEditName === 'email') {\n      return forms.email;\n    }\n\n    if (isProviderWithSubdomain) {\n      return forms.providersWithSubdomain;\n    }\n\n    return forms.providers;\n  }, [providerToEditName, isProviderWithSubdomain]);\n\n  const handleToggleModal = () => {\n    setIsOpen((prev) => !prev);\n  };\n\n  const handleClickEdit = (provider) => {\n    if (canUpdate) {\n      setProviderToEditName(provider.name);\n      handleToggleModal();\n    }\n  };\n\n  const handleSubmit = async (values) => {\n    trackUsage('willEditAuthenticationProvider');\n\n    submitMutation.mutate({ providers: { ...data, [providerToEditName]: values } });\n  };\n\n  if (isLoading) {\n    return <Page.Loading />;\n  }\n\n  return (\n    <Page.Main>\n      <Page.Title>\n        {formatMessage(\n          { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n          {\n            name: formatMessage({\n              id: getTrad('HeaderNav.link.providers'),\n              defaultMessage: 'Providers',\n            }),\n          }\n        )}\n      </Page.Title>\n      <Layouts.Header\n        title={formatMessage({\n          id: getTrad('HeaderNav.link.providers'),\n          defaultMessage: 'Providers',\n        })}\n      />\n      <Layouts.Content>\n        <Table colCount={3} rowCount={providers.length + 1}>\n          <Thead>\n            <Tr>\n              <Th>\n                <Typography variant=\"sigma\" textColor=\"neutral600\">\n                  {formatMessage({ id: 'global.name', defaultMessage: 'Name' })}\n                </Typography>\n              </Th>\n              <Th>\n                <Typography variant=\"sigma\" textColor=\"neutral600\">\n                  {formatMessage({ id: getTrad('Providers.status'), defaultMessage: 'Status' })}\n                </Typography>\n              </Th>\n              <Th>\n                <Typography variant=\"sigma\">\n                  <VisuallyHidden>\n                    {formatMessage({\n                      id: 'global.settings',\n                      defaultMessage: 'Settings',\n                    })}\n                  </VisuallyHidden>\n                </Typography>\n              </Th>\n            </Tr>\n          </Thead>\n          <Tbody>\n            {providers.map((provider) => (\n              <Tr\n                key={provider.name}\n                onClick={() => (canUpdate ? handleClickEdit(provider) : undefined)}\n              >\n                <Td width=\"45%\">\n                  <Typography fontWeight=\"semiBold\" textColor=\"neutral800\">\n                    {provider.name}\n                  </Typography>\n                </Td>\n                <Td width=\"65%\">\n                  <Typography\n                    textColor={provider.enabled ? 'success600' : 'danger600'}\n                    data-testid={`enable-${provider.name}`}\n                  >\n                    {provider.enabled\n                      ? formatMessage({\n                          id: 'global.enabled',\n                          defaultMessage: 'Enabled',\n                        })\n                      : formatMessage({\n                          id: 'global.disabled',\n                          defaultMessage: 'Disabled',\n                        })}\n                  </Typography>\n                </Td>\n                <Td onClick={(e) => e.stopPropagation()}>\n                  {canUpdate && (\n                    <IconButton\n                      onClick={() => handleClickEdit(provider)}\n                      variant=\"ghost\"\n                      label=\"Edit\"\n                    >\n                      <Pencil />\n                    </IconButton>\n                  )}\n                </Td>\n              </Tr>\n            ))}\n          </Tbody>\n        </Table>\n      </Layouts.Content>\n      <FormModal\n        initialData={data[providerToEditName]}\n        isOpen={isOpen}\n        isSubmiting={submitMutation.isLoading}\n        layout={layoutToRender}\n        headerBreadcrumbs={[\n          formatMessage({\n            id: getTrad('PopUpForm.header.edit.providers'),\n            defaultMessage: 'Edit Provider',\n          }),\n          upperFirst(providerToEditName),\n        ]}\n        onToggle={handleToggleModal}\n        onSubmit={handleSubmit}\n        providerToEditName={providerToEditName}\n      />\n    </Page.Main>\n  );\n};\n\nconst ProtectedProvidersPage = () => (\n  <Page.Protect permissions={PERMISSIONS.readProviders}>\n    <ProvidersPage />\n  </Page.Protect>\n);\n\nexport default ProtectedProvidersPage;\n"],"names":["ProvidersPage","formatMessage","locale","useIntl","queryClient","useQueryClient","trackUsage","useTracking","isOpen","setIsOpen","React","useState","providerToEditName","setProviderToEditName","toggleNotification","useNotification","get","put","useFetchClient","formatAPIError","useAPIErrorHandler","formatter","useCollator","sensitivity","isLoading","isLoadingPermissions","allowedActions","canUpdate","useRBAC","update","PERMISSIONS","updateProviders","isLoadingData","data","useQuery","initialData","submitMutation","useMutation","body","onSuccess","invalidateQueries","type","message","id","getTrad","handleToggleModal","onError","error","refetchActive","providers","Object","entries","reduce","acc","name","provider","icon","enabled","subdomain","push","sort","a","b","compare","isProviderWithSubdomain","useMemo","providerToEdit","find","obj","layoutToRender","forms","email","providersWithSubdomain","prev","handleClickEdit","handleSubmit","values","mutate","_jsx","Page","Loading","_jsxs","Main","Title","defaultMessage","Layouts","Header","title","Content","Table","colCount","rowCount","length","Thead","Tr","Th","Typography","variant","textColor","VisuallyHidden","Tbody","map","onClick","undefined","Td","width","fontWeight","data-testid","e","stopPropagation","IconButton","label","Pencil","FormModal","isSubmiting","layout","headerBreadcrumbs","upperFirst","onToggle","onSubmit","ProtectedProvidersPage","Protect","permissions","readProviders"],"mappings":"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"}