{"version":3,"file":"UID.mjs","sources":["../../../../../../admin/src/pages/EditView/components/FormInputs/UID.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n  type InputProps,\n  useField,\n  useForm,\n  useNotification,\n  useAPIErrorHandler,\n  useQueryParams,\n  useFocusInputField,\n} from '@strapi/admin/strapi-admin';\nimport {\n  Field,\n  Flex,\n  FlexComponent,\n  TextInput,\n  Typography,\n  useComposedRefs,\n} from '@strapi/design-system';\nimport { CheckCircle, WarningCircle, Loader, ArrowClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch } from 'react-router-dom';\nimport { styled, keyframes } from 'styled-components';\n\nimport { useDebounce } from '../../../../hooks/useDebounce';\nimport { useDocumentContext } from '../../../../hooks/useDocumentContext';\nimport { CLONE_PATH } from '../../../../router';\nimport {\n  useGenerateUIDMutation,\n  useGetAvailabilityQuery,\n  useGetDefaultUIDQuery,\n} from '../../../../services/uid';\nimport { buildValidParams } from '../../../../utils/api';\n\nimport type { CheckUIDAvailability } from '../../../../../../shared/contracts/uid';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * InputUID\n * -----------------------------------------------------------------------------------------------*/\n\nconst UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\ninterface UIDInputProps extends Omit<InputProps, 'type'> {\n  attribute?: Pick<Schema.Attribute.UIDProperties, 'regex'>;\n  type: Schema.Attribute.TypeOf<Schema.Attribute.UID>;\n}\n\nconst UIDInput = React.forwardRef<any, UIDInputProps>(\n  ({ hint, label, labelAction, name, required, attribute = {}, ...props }, ref) => {\n    const { currentDocumentMeta } = useDocumentContext('UIDInput');\n    const allFormValues = useForm('InputUID', (form) => form.values);\n    const [availability, setAvailability] = React.useState<CheckUIDAvailability.Response>();\n    const [showRegenerate, setShowRegenerate] = React.useState(false);\n    const isCloning = useMatch(CLONE_PATH) !== null;\n    const field = useField(name);\n    const debouncedValue = useDebounce(field.value, 300);\n    const hasChanged = debouncedValue !== field.initialValue;\n    const { toggleNotification } = useNotification();\n    const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n    const { formatMessage } = useIntl();\n    const [{ query }] = useQueryParams();\n    const params = React.useMemo(() => buildValidParams(query), [query]);\n\n    const { regex } = attribute;\n    const validationRegExp = regex ? new RegExp(regex) : UID_REGEX;\n\n    const {\n      data: defaultGeneratedUID,\n      isLoading: isGeneratingDefaultUID,\n      error: apiError,\n    } = useGetDefaultUIDQuery(\n      {\n        contentTypeUID: currentDocumentMeta.model,\n        field: name,\n        data: {\n          id: currentDocumentMeta.documentId ?? '',\n          ...allFormValues,\n        },\n        params,\n      },\n      {\n        skip: field.value || !required,\n      }\n    );\n\n    React.useEffect(() => {\n      if (apiError) {\n        toggleNotification({\n          type: 'warning',\n          message: formatAPIError(apiError),\n        });\n      }\n    }, [apiError, formatAPIError, toggleNotification]);\n\n    /**\n     * If the defaultGeneratedUID is available, then we set it as the value,\n     * but we also want to set it as the initialValue too.\n     */\n    React.useEffect(() => {\n      if (defaultGeneratedUID && field.value === undefined) {\n        field.onChange(name, defaultGeneratedUID);\n      }\n    }, [defaultGeneratedUID, field, name]);\n\n    const [generateUID, { isLoading: isGeneratingUID }] = useGenerateUIDMutation();\n\n    const handleRegenerateClick = async () => {\n      try {\n        const res = await generateUID({\n          contentTypeUID: currentDocumentMeta.model,\n          field: name,\n          data: { id: currentDocumentMeta.documentId ?? '', ...allFormValues },\n          params,\n        });\n\n        if ('data' in res) {\n          field.onChange(name, res.data);\n        } else {\n          toggleNotification({\n            type: 'danger',\n            message: formatAPIError(res.error),\n          });\n        }\n      } catch (err) {\n        toggleNotification({\n          type: 'danger',\n          message: formatMessage({\n            id: 'notification.error',\n            defaultMessage: 'An error occurred.',\n          }),\n        });\n      }\n    };\n\n    const {\n      data: availabilityData,\n      isLoading: isCheckingAvailability,\n      error: availabilityError,\n    } = useGetAvailabilityQuery(\n      {\n        contentTypeUID: currentDocumentMeta.model,\n        field: name,\n        value: debouncedValue ? debouncedValue.trim() : '',\n        params,\n      },\n      {\n        // Don't check availability if the value is empty or wasn't changed\n        skip: !Boolean(\n          (hasChanged || isCloning) &&\n            debouncedValue &&\n            validationRegExp.test(debouncedValue.trim())\n        ),\n      }\n    );\n\n    React.useEffect(() => {\n      if (availabilityError) {\n        toggleNotification({\n          type: 'warning',\n          message: formatAPIError(availabilityError),\n        });\n      }\n    }, [availabilityError, formatAPIError, toggleNotification]);\n\n    React.useEffect(() => {\n      /**\n       * always store the data in state because that way as seen below\n       * we can then remove the data to stop showing the label.\n       */\n      setAvailability(availabilityData);\n\n      let timer: number;\n\n      if (availabilityData?.isAvailable) {\n        timer = window.setTimeout(() => {\n          setAvailability(undefined);\n        }, 4000);\n      }\n\n      return () => {\n        if (timer) {\n          clearTimeout(timer);\n        }\n      };\n    }, [availabilityData]);\n\n    const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;\n\n    const fieldRef = useFocusInputField(name);\n    const composedRefs = useComposedRefs(ref, fieldRef);\n\n    const shouldShowAvailability =\n      (hasChanged || isCloning) && debouncedValue != null && availability && !showRegenerate;\n\n    return (\n      <Field.Root hint={hint} name={name} error={field.error} required={required}>\n        <Field.Label action={labelAction}>{label}</Field.Label>\n        <TextInput\n          ref={composedRefs}\n          disabled={props.disabled}\n          endAction={\n            <Flex position=\"relative\" gap={1}>\n              {shouldShowAvailability && (\n                <TextValidation\n                  alignItems=\"center\"\n                  gap={1}\n                  justifyContent=\"flex-end\"\n                  $available={!!availability?.isAvailable}\n                  data-not-here-outer\n                  position=\"absolute\"\n                  pointerEvents=\"none\"\n                  right={6}\n                  width=\"100px\"\n                >\n                  {availability?.isAvailable ? <CheckCircle /> : <WarningCircle />}\n\n                  <Typography\n                    textColor={availability.isAvailable ? 'success600' : 'danger600'}\n                    variant=\"pi\"\n                  >\n                    {formatMessage(\n                      availability.isAvailable\n                        ? {\n                            id: 'content-manager.components.uid.available',\n                            defaultMessage: 'Available',\n                          }\n                        : {\n                            id: 'content-manager.components.uid.unavailable',\n                            defaultMessage: 'Unavailable',\n                          }\n                    )}\n                  </Typography>\n                </TextValidation>\n              )}\n\n              {!props.disabled && (\n                <>\n                  {showRegenerate && (\n                    <TextValidation alignItems=\"center\" justifyContent=\"flex-end\" gap={1}>\n                      <Typography textColor=\"primary600\" variant=\"pi\">\n                        {formatMessage({\n                          id: 'content-manager.components.uid.regenerate',\n                          defaultMessage: 'Regenerate',\n                        })}\n                      </Typography>\n                    </TextValidation>\n                  )}\n\n                  <FieldActionWrapper\n                    onClick={handleRegenerateClick}\n                    label={formatMessage({\n                      id: 'content-manager.components.uid.regenerate',\n                      defaultMessage: 'Regenerate',\n                    })}\n                    onMouseEnter={() => setShowRegenerate(true)}\n                    onMouseLeave={() => setShowRegenerate(false)}\n                  >\n                    {isLoading ? (\n                      <LoadingWrapper data-testid=\"loading-wrapper\">\n                        <Loader />\n                      </LoadingWrapper>\n                    ) : (\n                      <ArrowClockwise />\n                    )}\n                  </FieldActionWrapper>\n                </>\n              )}\n            </Flex>\n          }\n          onChange={field.onChange}\n          value={field.value ?? ''}\n          {...props}\n          type=\"text\"\n        />\n        <Field.Error />\n        <Field.Hint />\n      </Field.Root>\n    );\n  }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * FieldActionWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst FieldActionWrapper = styled(Field.Action)`\n  width: 1.6rem;\n\n  svg {\n    height: 1.6rem;\n    width: 1.6rem;\n    path {\n      fill: ${({ theme }) => theme.colors.neutral400};\n    }\n  }\n\n  svg:hover {\n    path {\n      fill: ${({ theme }) => theme.colors.primary600};\n    }\n  }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TextValidation\n * -----------------------------------------------------------------------------------------------*/\n\nconst TextValidation = styled<FlexComponent>(Flex)<{ $available?: boolean }>`\n  svg {\n    height: 1.2rem;\n    width: 1.2rem;\n\n    path {\n      fill: ${({ theme, $available }) =>\n        $available ? theme.colors.success600 : theme.colors.danger600};\n    }\n  }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst rotation = keyframes`\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(359deg);\n  }\n`;\n\nconst LoadingWrapper = styled<FlexComponent>(Flex)`\n  animation: ${rotation} 2s infinite linear;\n`;\n\nconst MemoizedUIDInput = React.memo(UIDInput);\n\nexport { MemoizedUIDInput as UIDInput };\nexport type { UIDInputProps };\n"],"names":["UID_REGEX","UIDInput","React","forwardRef","hint","label","labelAction","name","required","attribute","props","ref","currentDocumentMeta","useDocumentContext","allFormValues","useForm","form","values","availability","setAvailability","useState","showRegenerate","setShowRegenerate","isCloning","useMatch","CLONE_PATH","field","useField","debouncedValue","useDebounce","value","hasChanged","initialValue","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","query","useQueryParams","params","useMemo","buildValidParams","regex","validationRegExp","RegExp","data","defaultGeneratedUID","isLoading","isGeneratingDefaultUID","error","apiError","useGetDefaultUIDQuery","contentTypeUID","model","id","documentId","skip","useEffect","type","message","undefined","onChange","generateUID","isGeneratingUID","useGenerateUIDMutation","handleRegenerateClick","res","err","defaultMessage","availabilityData","isCheckingAvailability","availabilityError","useGetAvailabilityQuery","trim","Boolean","test","timer","isAvailable","window","setTimeout","clearTimeout","fieldRef","useFocusInputField","composedRefs","useComposedRefs","shouldShowAvailability","_jsxs","Field","Root","_jsx","Label","action","TextInput","disabled","endAction","Flex","position","gap","TextValidation","alignItems","justifyContent","$available","data-not-here-outer","pointerEvents","right","width","CheckCircle","WarningCircle","Typography","textColor","variant","_Fragment","FieldActionWrapper","onClick","onMouseEnter","onMouseLeave","LoadingWrapper","data-testid","Loader","ArrowClockwise","Error","Hint","styled","Action","theme","colors","neutral400","primary600","success600","danger600","rotation","keyframes","MemoizedUIDInput","memo"],"mappings":"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"}