{"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<HTMLInputElement, 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<string>(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    const trimmedDebouncedValue = debouncedValue?.trim() ?? '';\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 !== undefined && 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: trimmedDebouncedValue,\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            trimmedDebouncedValue !== '' &&\n            validationRegExp.test(trimmedDebouncedValue)\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<HTMLInputElement>(name);\n    const composedRefs = useComposedRefs(ref, fieldRef);\n\n    const shouldShowAvailability =\n      (hasChanged || isCloning) && trimmedDebouncedValue !== '' && 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","trimmedDebouncedValue","trim","data","defaultGeneratedUID","isLoading","isGeneratingDefaultUID","error","apiError","useGetDefaultUIDQuery","contentTypeUID","model","id","documentId","skip","undefined","useEffect","type","message","onChange","generateUID","isGeneratingUID","useGenerateUIDMutation","handleRegenerateClick","res","err","defaultMessage","availabilityData","isCheckingAvailability","availabilityError","useGetAvailabilityQuery","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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"}