@strapi/content-type-builder 5.58.0 → 5.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/AIChat/FeedbackModal.js +13 -7
- package/dist/admin/components/AIChat/FeedbackModal.js.map +1 -1
- package/dist/admin/components/AIChat/FeedbackModal.mjs +14 -8
- package/dist/admin/components/AIChat/FeedbackModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/UploadCodeModal.js +12 -6
- package/dist/admin/components/AIChat/UploadCodeModal.js.map +1 -1
- package/dist/admin/components/AIChat/UploadCodeModal.mjs +13 -7
- package/dist/admin/components/AIChat/UploadCodeModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.js +12 -6
- package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -1
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs +13 -7
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js +6 -3
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js.map +1 -1
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs +7 -4
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Collapsible.js +9 -4
- package/dist/admin/components/AIChat/components/Collapsible.js.map +1 -1
- package/dist/admin/components/AIChat/components/Collapsible.mjs +10 -5
- package/dist/admin/components/AIChat/components/Collapsible.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Dropzone.js +13 -6
- package/dist/admin/components/AIChat/components/Dropzone.js.map +1 -1
- package/dist/admin/components/AIChat/components/Dropzone.mjs +14 -7
- package/dist/admin/components/AIChat/components/Dropzone.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/FloatingPanel.js +11 -4
- package/dist/admin/components/AIChat/components/FloatingPanel.js.map +1 -1
- package/dist/admin/components/AIChat/components/FloatingPanel.mjs +12 -5
- package/dist/admin/components/AIChat/components/FloatingPanel.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/FullScreenImage.js +16 -8
- package/dist/admin/components/AIChat/components/FullScreenImage.js.map +1 -1
- package/dist/admin/components/AIChat/components/FullScreenImage.mjs +17 -9
- package/dist/admin/components/AIChat/components/FullScreenImage.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Input.js +6 -3
- package/dist/admin/components/AIChat/components/Input.js.map +1 -1
- package/dist/admin/components/AIChat/components/Input.mjs +7 -4
- package/dist/admin/components/AIChat/components/Input.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/Messages/Message.js +88 -12
- package/dist/admin/components/AIChat/components/Messages/Message.js.map +1 -1
- package/dist/admin/components/AIChat/components/Messages/Message.mjs +87 -13
- package/dist/admin/components/AIChat/components/Messages/Message.mjs.map +1 -1
- package/dist/admin/components/AIChat/components/StepModal.js +44 -17
- package/dist/admin/components/AIChat/components/StepModal.js.map +1 -1
- package/dist/admin/components/AIChat/components/StepModal.mjs +45 -18
- package/dist/admin/components/AIChat/components/StepModal.mjs.map +1 -1
- package/dist/admin/components/AIChat/providers/ChatProvider.js +79 -27
- package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -1
- package/dist/admin/components/AIChat/providers/ChatProvider.mjs +80 -28
- package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.js +6 -3
- package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -1
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +7 -4
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeOption.js +2 -2
- package/dist/admin/components/AttributeOptions/AttributeOption.js.map +1 -1
- package/dist/admin/components/AttributeOptions/AttributeOption.mjs +2 -2
- package/dist/admin/components/AttributeOptions/AttributeOption.mjs.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.js.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/lib/buildFolderTree.mjs.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.js.map +1 -1
- package/dist/admin/components/ContentTypeBuilderNav/lib/dropProjection.mjs.map +1 -1
- package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js +2 -1
- package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.js.map +1 -1
- package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs +2 -1
- package/dist/admin/components/CustomRadioGroup/CustomRadioGroup.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.js +317 -275
- package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerProvider.mjs +319 -277
- package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
- package/dist/admin/components/DataManager/RenameMigrationModal.js.map +1 -1
- package/dist/admin/components/DataManager/RenameMigrationModal.mjs.map +1 -1
- package/dist/admin/components/DataManager/reducer.js +31 -4
- package/dist/admin/components/DataManager/reducer.js.map +1 -1
- package/dist/admin/components/DataManager/reducer.mjs +31 -4
- package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
- package/dist/admin/components/DynamicZoneList.js +2 -1
- package/dist/admin/components/DynamicZoneList.js.map +1 -1
- package/dist/admin/components/DynamicZoneList.mjs +2 -1
- package/dist/admin/components/DynamicZoneList.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/ConditionForm.js +2 -1
- package/dist/admin/components/FormModal/attributes/ConditionForm.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/ConditionForm.mjs +2 -1
- package/dist/admin/components/FormModal/attributes/ConditionForm.mjs.map +1 -1
- package/dist/admin/components/FormModal/attributes/types.js +2 -2
- package/dist/admin/components/FormModal/attributes/types.js.map +1 -1
- package/dist/admin/components/FormModal/attributes/types.mjs +2 -2
- package/dist/admin/components/FormModal/attributes/types.mjs.map +1 -1
- package/dist/admin/components/FormModal/forms/forms.js +1 -1
- package/dist/admin/components/FormModal/forms/forms.js.map +1 -1
- package/dist/admin/components/FormModal/forms/forms.mjs +1 -1
- package/dist/admin/components/FormModal/forms/forms.mjs.map +1 -1
- package/dist/admin/components/GenericInputs.js +2 -1
- package/dist/admin/components/GenericInputs.js.map +1 -1
- package/dist/admin/components/GenericInputs.mjs +2 -1
- package/dist/admin/components/GenericInputs.mjs.map +1 -1
- package/dist/admin/components/TabForm.js.map +1 -1
- package/dist/admin/components/TabForm.mjs.map +1 -1
- package/dist/admin/src/components/AIChat/components/FullScreenImage.d.ts +8 -0
- package/dist/admin/src/components/AIChat/components/Messages/Message.d.ts +20 -0
- package/dist/admin/utils/folderTelemetry.js.map +1 -1
- package/dist/admin/utils/folderTelemetry.mjs.map +1 -1
- package/dist/admin/utils/formAPI.js.map +1 -1
- package/dist/admin/utils/formAPI.mjs.map +1 -1
- package/dist/server/controllers/validation/common.js +1 -1
- package/dist/server/controllers/validation/common.js.map +1 -1
- package/dist/server/controllers/validation/common.mjs +1 -1
- package/dist/server/controllers/validation/common.mjs.map +1 -1
- package/dist/server/controllers/validation/schema.js +3 -2
- package/dist/server/controllers/validation/schema.js.map +1 -1
- package/dist/server/controllers/validation/schema.mjs +4 -3
- package/dist/server/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/services/migration-builder/index.js.map +1 -1
- package/dist/server/services/migration-builder/index.mjs.map +1 -1
- package/dist/server/services/schema.js +34 -1
- package/dist/server/services/schema.js.map +1 -1
- package/dist/server/services/schema.mjs +34 -1
- package/dist/server/services/schema.mjs.map +1 -1
- package/dist/server/src/controllers/validation/schema.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/services/migration-builder/index.d.ts.map +1 -1
- package/dist/server/src/services/schema-builder/types.d.ts.map +1 -1
- package/dist/server/src/services/schema.d.ts.map +1 -1
- package/dist/server/src/utils/uid-target.d.ts +18 -0
- package/dist/server/src/utils/uid-target.d.ts.map +1 -0
- package/dist/server/utils/uid-target.js +34 -0
- package/dist/server/utils/uid-target.js.map +1 -0
- package/dist/server/utils/uid-target.mjs +31 -0
- package/dist/server/utils/uid-target.mjs.map +1 -0
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericInputs.mjs","sources":["../../../admin/src/components/GenericInputs.tsx"],"sourcesContent":["/**\n * TODO: we should be using the FormRenderer from the admin to do this,\n * but the CTB has no tests or types, so we can't refactor it safely.\n * So we're just adding this to the tech debt.\n */\n\nimport * as React from 'react';\n\nimport {\n Checkbox,\n DatePicker,\n DateTimePicker,\n Field,\n JSONInput,\n NumberInput,\n SingleSelect,\n SingleSelectOption,\n Textarea,\n TextInput,\n TimePicker,\n Toggle,\n} from '@strapi/design-system';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport formatISO from 'date-fns/formatISO';\nimport isEqual from 'lodash/isEqual';\nimport { type MessageDescriptor, type PrimitiveType, useIntl } from 'react-intl';\n\nimport { parseDateValue } from '../utils/parseDateValue';\nimport { handleTimeChange, handleTimeChangeEvent } from '../utils/timeFormat';\n\nimport type { Schema } from '@strapi/types';\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\ninterface InputOption {\n metadatas: {\n intlLabel: TranslationMessage;\n disabled: boolean;\n hidden: boolean;\n };\n key: string;\n value: string;\n}\n\ntype ConditionField = {\n name: string;\n type: string;\n enum?: string[];\n};\n\ninterface CustomInputProps<\n TAttribute extends Schema.Attribute.AnyAttribute = Schema.Attribute.AnyAttribute,\n> {\n attribute?: TAttribute;\n autoComplete?: string;\n description?: TranslationMessage;\n disabled?: boolean;\n error?: string;\n hint?: string | React.JSX.Element | (string | React.JSX.Element)[];\n intlLabel: TranslationMessage;\n labelAction?: React.ReactNode;\n name: string;\n onChange: (\n payload: {\n target: {\n name: string;\n value?: unknown;\n type?: string;\n };\n },\n shouldSetInitialValue?: boolean\n ) => void;\n onDelete?: () => void;\n options?: InputOption[];\n placeholder?: TranslationMessage;\n required?: boolean;\n step?: number;\n type: string;\n value?: unknown;\n autoFocus?: boolean;\n attributeName?: string;\n conditionFields?: ConditionField[];\n}\n\ninterface GenericInputProps<\n TAttribute extends Schema.Attribute.AnyAttribute = Schema.Attribute.AnyAttribute,\n> {\n attribute?: TAttribute;\n autoComplete?: string;\n customInputs?: Record<string, React.ComponentType<CustomInputProps<TAttribute>>>;\n description?: TranslationMessage;\n disabled?: boolean;\n error?: string | TranslationMessage;\n intlLabel: TranslationMessage;\n labelAction?: React.ReactNode;\n name: string;\n onChange: (\n payload: {\n target: {\n name: string;\n value?: unknown;\n type?: string;\n };\n },\n shouldSetInitialValue?: boolean\n ) => void;\n onDelete?: () => void;\n options?: InputOption[];\n placeholder?: TranslationMessage;\n required?: boolean;\n step?: number;\n type: string;\n // TODO: The value depends on the input type, too complicated to handle all cases here\n value?: unknown;\n isNullable?: boolean;\n autoFocus?: boolean;\n attributeName?: string;\n conditionFields?: ConditionField[];\n}\n\nconst GenericInput = ({\n autoComplete,\n customInputs,\n description,\n disabled,\n intlLabel,\n labelAction,\n error,\n name,\n onChange,\n onDelete,\n options = [],\n placeholder,\n required,\n step,\n type,\n value: defaultValue,\n isNullable: _isNullable,\n autoFocus,\n attribute,\n attributeName,\n conditionFields,\n ...rest\n}: GenericInputProps) => {\n const { formatMessage } = useIntl();\n\n // TODO: Workaround to get the field hint values if they exist on the type\n const getFieldHintValue = (\n attribute?: Schema.Attribute.AnyAttribute,\n key?: keyof FieldSchema\n ) => {\n if (!attribute) return;\n\n if (key === 'minLength' && key in attribute) {\n return attribute[key];\n }\n\n if (key === 'maxLength' && key in attribute) {\n return attribute[key];\n }\n\n if (key === 'max' && key in attribute) {\n return attribute[key];\n }\n\n if (key === 'min' && key in attribute) {\n return attribute[key];\n }\n };\n\n const { hint } = useFieldHint({\n description,\n fieldSchema: {\n minLength: getFieldHintValue(attribute, 'minLength'),\n maxLength: getFieldHintValue(attribute, 'maxLength'),\n max: getFieldHintValue(attribute, 'max'),\n min: getFieldHintValue(attribute, 'min'),\n },\n type: attribute?.type || type,\n });\n\n const [showPassword, setShowPassword] = React.useState(false);\n\n const CustomInput = customInputs\n ? (customInputs[type] as React.ComponentType<CustomInputProps> | undefined)\n : null;\n\n // the API always returns null, which throws an error in React,\n // therefore we cast this case to undefined\n const value = defaultValue ?? undefined;\n const stringValue =\n typeof value === 'string' || typeof value === 'number' ? value.toString() : '';\n const numberValue = (() => {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n\n if (typeof value === 'string' && value.trim() !== '') {\n const parsedValue = Number(value);\n\n return Number.isFinite(parsedValue) ? parsedValue : undefined;\n }\n\n return undefined;\n })();\n const selectValue =\n typeof value === 'string' || typeof value === 'number' || value === null ? value : undefined;\n const jsonValue =\n value !== undefined &&\n (typeof value === 'object' || typeof value === 'boolean' || typeof value === 'number')\n ? JSON.stringify(value, null, 2)\n : typeof value === 'string'\n ? value\n : undefined;\n\n /*\n TODO: ideally we should pass in `defaultValue` and `value` for\n inputs, in order to make them controlled components. This variable\n acts as a fallback for now, to prevent React errors in devopment mode\n\n See: https://github.com/strapi/strapi/pull/12861\n */\n function getErrorMessage(error: string | TranslationMessage | undefined) {\n if (!error) {\n return null;\n }\n\n if (typeof error === 'string') {\n return formatMessage({ id: error, defaultMessage: error });\n }\n\n const values = {\n ...error.values,\n };\n\n return formatMessage(\n {\n id: error.id,\n defaultMessage: error?.defaultMessage ?? error.id,\n },\n values\n );\n }\n\n const errorMessage = getErrorMessage(error) ?? undefined;\n\n if (CustomInput) {\n return (\n <CustomInput\n {...rest}\n attribute={attribute}\n description={description}\n hint={hint}\n disabled={disabled}\n intlLabel={intlLabel}\n labelAction={labelAction}\n error={errorMessage || ''}\n name={name}\n onChange={onChange}\n onDelete={onDelete}\n options={options}\n required={required}\n placeholder={placeholder}\n type={type}\n value={value}\n autoFocus={autoFocus}\n attributeName={attributeName}\n conditionFields={conditionFields}\n />\n );\n }\n\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n const getComponent = () => {\n switch (type) {\n case 'json': {\n return (\n <JSONInput\n value={jsonValue}\n disabled={disabled}\n onChange={(json) => {\n // Default to null when the field is not required and there is no input value\n const value =\n attribute && 'required' in attribute && !attribute?.required && !json.length\n ? null\n : json;\n onChange({ target: { name, value } }, false);\n }}\n minHeight=\"25.2rem\"\n maxHeight=\"50.4rem\"\n />\n );\n }\n case 'bool': {\n return (\n <Toggle\n checked={defaultValue === null ? null : Boolean(defaultValue)}\n disabled={disabled}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'False',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'True',\n })}\n onChange={(e) => {\n onChange({ target: { name, value: e.target.checked } });\n }}\n />\n );\n }\n case 'checkbox': {\n return (\n <Checkbox\n disabled={disabled}\n onCheckedChange={(value) => {\n onChange({ target: { name, value } });\n }}\n checked={Boolean(value)}\n >\n {label}\n </Checkbox>\n );\n }\n case 'datetime': {\n const dateValue = parseDateValue(value);\n return (\n <DateTimePicker\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n disabled={disabled}\n onChange={(date) => {\n // check if date is not null or undefined\n const formattedDate = date ? date.toISOString() : null;\n\n onChange({ target: { name, value: formattedDate, type } });\n }}\n onClear={() => onChange({ target: { name, value: null, type } })}\n placeholder={formattedPlaceholder}\n value={dateValue}\n />\n );\n }\n case 'date': {\n const dateValue = parseDateValue(value);\n return (\n <DatePicker\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n disabled={disabled}\n onChange={(date) => {\n onChange({\n target: {\n name,\n value: date ? formatISO(date, { representation: 'date' }) : null,\n type,\n },\n });\n }}\n onClear={() => onChange({ target: { name, value: null, type } })}\n placeholder={formattedPlaceholder}\n value={dateValue}\n />\n );\n }\n case 'number': {\n return (\n <NumberInput\n disabled={disabled}\n onValueChange={(value) => {\n onChange({ target: { name, value, type } });\n }}\n placeholder={formattedPlaceholder}\n step={step}\n value={numberValue}\n autoFocus={autoFocus}\n />\n );\n }\n case 'email': {\n return (\n <TextInput\n autoComplete={autoComplete}\n disabled={disabled}\n onChange={(e) => {\n onChange({ target: { name, value: e.target.value, type } });\n }}\n placeholder={formattedPlaceholder}\n type=\"email\"\n value={stringValue}\n autoFocus={autoFocus}\n />\n );\n }\n case 'timestamp':\n case 'text':\n case 'string': {\n return (\n <TextInput\n autoComplete={autoComplete}\n disabled={disabled}\n onChange={(e) => {\n onChange({ target: { name, value: e.target.value, type } });\n }}\n placeholder={formattedPlaceholder}\n type=\"text\"\n value={stringValue}\n autoFocus={autoFocus}\n />\n );\n }\n case 'password': {\n return (\n <TextInput\n autoComplete={autoComplete}\n disabled={disabled}\n endAction={\n <button\n aria-label={formatMessage({\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n })}\n onClick={() => {\n setShowPassword((prev) => !prev);\n }}\n style={{\n border: 'none',\n padding: 0,\n background: 'transparent',\n }}\n type=\"button\"\n >\n {showPassword ? <Eye fill=\"neutral500\" /> : <EyeStriked fill=\"neutral500\" />}\n </button>\n }\n onChange={(e) => {\n onChange({ target: { name, value: e.target.value, type } });\n }}\n placeholder={formattedPlaceholder}\n type={showPassword ? 'text' : 'password'}\n value={stringValue}\n />\n );\n }\n case 'select': {\n return (\n <SingleSelect\n disabled={disabled}\n onChange={(value) => {\n onChange({ target: { name, value, type: 'select' } });\n }}\n placeholder={formattedPlaceholder}\n value={selectValue}\n >\n {options.map(({ metadatas: { intlLabel, disabled, hidden }, key, value }) => {\n return (\n <SingleSelectOption key={key} value={value} disabled={disabled} hidden={hidden}>\n {formatMessage(intlLabel)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n }\n case 'textarea': {\n return (\n <Textarea\n disabled={disabled}\n onChange={(event) => onChange({ target: { name, value: event.target.value, type } })}\n placeholder={formattedPlaceholder}\n value={stringValue}\n />\n );\n }\n case 'time': {\n const formattedValue = handleTimeChange({ value: stringValue, onChange, name, type });\n\n return (\n <TimePicker\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n disabled={disabled}\n onChange={(time) => handleTimeChangeEvent(onChange, name, type, time)}\n onClear={() => handleTimeChangeEvent(onChange, name, type, undefined)}\n value={formattedValue}\n />\n );\n }\n default: {\n /**\n * If there's no component for the given type, we return a disabled text input\n * showing a \"Not supported\" title to illustrate the issue.\n */\n return <TextInput disabled placeholder=\"Not supported\" type=\"text\" value=\"\" />;\n }\n }\n };\n\n return (\n <Field.Root error={errorMessage} name={name} hint={hint} required={required}>\n {type !== 'checkbox' ? <Field.Label action={labelAction}>{label}</Field.Label> : null}\n {getComponent()}\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n\ntype FieldSchema = {\n minLength?: number | string;\n maxLength?: number | string;\n max?: number | string;\n min?: number | string;\n};\ninterface UseFieldHintProps {\n description?: MessageDescriptor & { values?: Record<string, PrimitiveType> };\n fieldSchema?: FieldSchema;\n type?: string;\n}\n\n/**\n * @description\n * A hook for generating the hint for a field\n */\nconst useFieldHint = ({ description, fieldSchema, type }: UseFieldHintProps) => {\n const { formatMessage } = useIntl();\n\n const buildDescription = () =>\n description?.id\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n\n const buildHint = () => {\n const { maximum, minimum } = getMinMax(fieldSchema);\n const units = getFieldUnits({\n type,\n minimum,\n maximum,\n });\n\n const minIsNumber = typeof minimum === 'number';\n const maxIsNumber = typeof maximum === 'number';\n const hasMinAndMax = maxIsNumber && minIsNumber;\n const hasMinOrMax = maxIsNumber || minIsNumber;\n\n if (!description?.id && !hasMinOrMax) {\n return '';\n }\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: buildDescription(),\n unit: units?.message && hasMinOrMax ? formatMessage(units.message, units.values) : null,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: hasMinOrMax ? <br /> : null,\n }\n );\n };\n\n return { hint: buildHint() };\n};\n\nconst getFieldUnits = ({\n type,\n minimum,\n maximum,\n}: {\n type?: string;\n minimum?: number;\n maximum?: number;\n}) => {\n if (type && !['string', 'uid', 'richtext', 'email', 'password', 'text'].includes(type)) {\n return {};\n }\n const maxValue = Math.max(minimum || 0, maximum || 0);\n\n return {\n message: {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n values: {\n maxValue,\n },\n };\n};\n\nconst getMinMax = (fieldSchema?: FieldSchema) => {\n if (!fieldSchema) {\n return { maximum: undefined, minimum: undefined };\n }\n\n const { minLength, maxLength, max, min } = fieldSchema;\n\n let minimum;\n let maximum;\n\n const parsedMin = Number(min);\n const parsedMinLength = Number(minLength);\n\n if (!Number.isNaN(parsedMin)) {\n minimum = parsedMin;\n } else if (!Number.isNaN(parsedMinLength)) {\n minimum = parsedMinLength;\n }\n\n const parsedMax = Number(max);\n const parsedMaxLength = Number(maxLength);\n\n if (!Number.isNaN(parsedMax)) {\n maximum = parsedMax;\n } else if (!Number.isNaN(parsedMaxLength)) {\n maximum = parsedMaxLength;\n }\n\n return { maximum, minimum };\n};\n\n/**\n * we've memoized this component because we use a context to store all the data in our form in the content-manager.\n * This then causes _every_ component to re-render because there are no selects incurring performance issues\n * in content-types as the content-type gets more complicated.\n */\nconst MemoizedGenericInput = React.memo(GenericInput, isEqual);\n\nexport type { GenericInputProps, CustomInputProps };\nexport { MemoizedGenericInput as GenericInput };\n"],"names":["GenericInput","autoComplete","customInputs","description","disabled","intlLabel","labelAction","error","name","onChange","onDelete","options","placeholder","required","step","type","value","defaultValue","isNullable","_isNullable","autoFocus","attribute","attributeName","conditionFields","rest","formatMessage","useIntl","getFieldHintValue","key","hint","useFieldHint","fieldSchema","minLength","maxLength","max","min","showPassword","setShowPassword","React","useState","CustomInput","undefined","stringValue","toString","numberValue","Number","isFinite","trim","parsedValue","selectValue","jsonValue","JSON","stringify","getErrorMessage","id","defaultMessage","values","errorMessage","_jsx","label","formattedPlaceholder","getComponent","JSONInput","json","length","target","minHeight","maxHeight","Toggle","checked","Boolean","offLabel","onLabel","e","Checkbox","onCheckedChange","dateValue","parseDateValue","DateTimePicker","clearLabel","date","formattedDate","toISOString","onClear","DatePicker","formatISO","representation","NumberInput","onValueChange","TextInput","endAction","button","aria-label","onClick","prev","style","border","padding","background","Eye","fill","EyeStriked","SingleSelect","map","metadatas","hidden","SingleSelectOption","Textarea","event","formattedValue","handleTimeChange","TimePicker","time","handleTimeChangeEvent","_jsxs","Field","Root","Label","action","Error","Hint","buildDescription","buildHint","maximum","minimum","getMinMax","units","getFieldUnits","minIsNumber","maxIsNumber","hasMinAndMax","hasMinOrMax","unit","message","divider","br","includes","maxValue","Math","parsedMin","parsedMinLength","isNaN","parsedMax","parsedMaxLength","MemoizedGenericInput","memo","isEqual"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GenericInputs.mjs","sources":["../../../admin/src/components/GenericInputs.tsx"],"sourcesContent":["/**\n * TODO: we should be using the FormRenderer from the admin to do this,\n * but the CTB has no tests or types, so we can't refactor it safely.\n * So we're just adding this to the tech debt.\n */\n\nimport * as React from 'react';\n\nimport {\n Checkbox,\n DatePicker,\n DateTimePicker,\n Field,\n JSONInput,\n NumberInput,\n SingleSelect,\n SingleSelectOption,\n Textarea,\n TextInput,\n TimePicker,\n Toggle,\n} from '@strapi/design-system';\nimport { Eye, EyeStriked } from '@strapi/icons';\nimport formatISO from 'date-fns/formatISO';\nimport isEqual from 'lodash/isEqual';\nimport { type MessageDescriptor, type PrimitiveType, useIntl } from 'react-intl';\n\nimport { parseDateValue } from '../utils/parseDateValue';\nimport { handleTimeChange, handleTimeChangeEvent } from '../utils/timeFormat';\n\nimport type { Schema } from '@strapi/types';\n\nconst EMPTY_OPTIONS: NonNullable<GenericInputProps['options']> = [];\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\ninterface InputOption {\n metadatas: {\n intlLabel: TranslationMessage;\n disabled: boolean;\n hidden: boolean;\n };\n key: string;\n value: string;\n}\n\ntype ConditionField = {\n name: string;\n type: string;\n enum?: string[];\n};\n\ninterface CustomInputProps<\n TAttribute extends Schema.Attribute.AnyAttribute = Schema.Attribute.AnyAttribute,\n> {\n attribute?: TAttribute;\n autoComplete?: string;\n description?: TranslationMessage;\n disabled?: boolean;\n error?: string;\n hint?: string | React.JSX.Element | (string | React.JSX.Element)[];\n intlLabel: TranslationMessage;\n labelAction?: React.ReactNode;\n name: string;\n onChange: (\n payload: {\n target: {\n name: string;\n value?: unknown;\n type?: string;\n };\n },\n shouldSetInitialValue?: boolean\n ) => void;\n onDelete?: () => void;\n options?: InputOption[];\n placeholder?: TranslationMessage;\n required?: boolean;\n step?: number;\n type: string;\n value?: unknown;\n autoFocus?: boolean;\n attributeName?: string;\n conditionFields?: ConditionField[];\n}\n\ninterface GenericInputProps<\n TAttribute extends Schema.Attribute.AnyAttribute = Schema.Attribute.AnyAttribute,\n> {\n attribute?: TAttribute;\n autoComplete?: string;\n customInputs?: Record<string, React.ComponentType<CustomInputProps<TAttribute>>>;\n description?: TranslationMessage;\n disabled?: boolean;\n error?: string | TranslationMessage;\n intlLabel: TranslationMessage;\n labelAction?: React.ReactNode;\n name: string;\n onChange: (\n payload: {\n target: {\n name: string;\n value?: unknown;\n type?: string;\n };\n },\n shouldSetInitialValue?: boolean\n ) => void;\n onDelete?: () => void;\n options?: InputOption[];\n placeholder?: TranslationMessage;\n required?: boolean;\n step?: number;\n type: string;\n // TODO: The value depends on the input type, too complicated to handle all cases here\n value?: unknown;\n isNullable?: boolean;\n autoFocus?: boolean;\n attributeName?: string;\n conditionFields?: ConditionField[];\n}\n\nconst GenericInput = ({\n autoComplete,\n customInputs,\n description,\n disabled,\n intlLabel,\n labelAction,\n error,\n name,\n onChange,\n onDelete,\n options = EMPTY_OPTIONS,\n placeholder,\n required,\n step,\n type,\n value: defaultValue,\n isNullable: _isNullable,\n autoFocus,\n attribute,\n attributeName,\n conditionFields,\n ...rest\n}: GenericInputProps) => {\n const { formatMessage } = useIntl();\n\n // TODO: Workaround to get the field hint values if they exist on the type\n const getFieldHintValue = (\n attribute?: Schema.Attribute.AnyAttribute,\n key?: keyof FieldSchema\n ) => {\n if (!attribute) return;\n\n if (key === 'minLength' && key in attribute) {\n return attribute[key];\n }\n\n if (key === 'maxLength' && key in attribute) {\n return attribute[key];\n }\n\n if (key === 'max' && key in attribute) {\n return attribute[key];\n }\n\n if (key === 'min' && key in attribute) {\n return attribute[key];\n }\n };\n\n const { hint } = useFieldHint({\n description,\n fieldSchema: {\n minLength: getFieldHintValue(attribute, 'minLength'),\n maxLength: getFieldHintValue(attribute, 'maxLength'),\n max: getFieldHintValue(attribute, 'max'),\n min: getFieldHintValue(attribute, 'min'),\n },\n type: attribute?.type || type,\n });\n\n const [showPassword, setShowPassword] = React.useState(false);\n\n const CustomInput = customInputs\n ? (customInputs[type] as React.ComponentType<CustomInputProps> | undefined)\n : null;\n\n // the API always returns null, which throws an error in React,\n // therefore we cast this case to undefined\n const value = defaultValue ?? undefined;\n const stringValue =\n typeof value === 'string' || typeof value === 'number' ? value.toString() : '';\n const numberValue = (() => {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n\n if (typeof value === 'string' && value.trim() !== '') {\n const parsedValue = Number(value);\n\n return Number.isFinite(parsedValue) ? parsedValue : undefined;\n }\n\n return undefined;\n })();\n const selectValue =\n typeof value === 'string' || typeof value === 'number' || value === null ? value : undefined;\n const jsonValue =\n value !== undefined &&\n (typeof value === 'object' || typeof value === 'boolean' || typeof value === 'number')\n ? JSON.stringify(value, null, 2)\n : typeof value === 'string'\n ? value\n : undefined;\n\n /*\n TODO: ideally we should pass in `defaultValue` and `value` for\n inputs, in order to make them controlled components. This variable\n acts as a fallback for now, to prevent React errors in devopment mode\n\n See: https://github.com/strapi/strapi/pull/12861\n */\n function getErrorMessage(error: string | TranslationMessage | undefined) {\n if (!error) {\n return null;\n }\n\n if (typeof error === 'string') {\n return formatMessage({ id: error, defaultMessage: error });\n }\n\n const values = {\n ...error.values,\n };\n\n return formatMessage(\n {\n id: error.id,\n defaultMessage: error?.defaultMessage ?? error.id,\n },\n values\n );\n }\n\n const errorMessage = getErrorMessage(error) ?? undefined;\n\n if (CustomInput) {\n return (\n <CustomInput\n {...rest}\n attribute={attribute}\n description={description}\n hint={hint}\n disabled={disabled}\n intlLabel={intlLabel}\n labelAction={labelAction}\n error={errorMessage || ''}\n name={name}\n onChange={onChange}\n onDelete={onDelete}\n options={options}\n required={required}\n placeholder={placeholder}\n type={type}\n value={value}\n autoFocus={autoFocus}\n attributeName={attributeName}\n conditionFields={conditionFields}\n />\n );\n }\n\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n const getComponent = () => {\n switch (type) {\n case 'json': {\n return (\n <JSONInput\n value={jsonValue}\n disabled={disabled}\n onChange={(json) => {\n // Default to null when the field is not required and there is no input value\n const value =\n attribute && 'required' in attribute && !attribute?.required && !json.length\n ? null\n : json;\n onChange({ target: { name, value } }, false);\n }}\n minHeight=\"25.2rem\"\n maxHeight=\"50.4rem\"\n />\n );\n }\n case 'bool': {\n return (\n <Toggle\n checked={defaultValue === null ? null : Boolean(defaultValue)}\n disabled={disabled}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'False',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'True',\n })}\n onChange={(e) => {\n onChange({ target: { name, value: e.target.checked } });\n }}\n />\n );\n }\n case 'checkbox': {\n return (\n <Checkbox\n disabled={disabled}\n onCheckedChange={(value) => {\n onChange({ target: { name, value } });\n }}\n checked={Boolean(value)}\n >\n {label}\n </Checkbox>\n );\n }\n case 'datetime': {\n const dateValue = parseDateValue(value);\n return (\n <DateTimePicker\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n disabled={disabled}\n onChange={(date) => {\n // check if date is not null or undefined\n const formattedDate = date ? date.toISOString() : null;\n\n onChange({ target: { name, value: formattedDate, type } });\n }}\n onClear={() => onChange({ target: { name, value: null, type } })}\n placeholder={formattedPlaceholder}\n value={dateValue}\n />\n );\n }\n case 'date': {\n const dateValue = parseDateValue(value);\n return (\n <DatePicker\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n disabled={disabled}\n onChange={(date) => {\n onChange({\n target: {\n name,\n value: date ? formatISO(date, { representation: 'date' }) : null,\n type,\n },\n });\n }}\n onClear={() => onChange({ target: { name, value: null, type } })}\n placeholder={formattedPlaceholder}\n value={dateValue}\n />\n );\n }\n case 'number': {\n return (\n <NumberInput\n disabled={disabled}\n onValueChange={(value) => {\n onChange({ target: { name, value, type } });\n }}\n placeholder={formattedPlaceholder}\n step={step}\n value={numberValue}\n autoFocus={autoFocus}\n />\n );\n }\n case 'email': {\n return (\n <TextInput\n autoComplete={autoComplete}\n disabled={disabled}\n onChange={(e) => {\n onChange({ target: { name, value: e.target.value, type } });\n }}\n placeholder={formattedPlaceholder}\n type=\"email\"\n value={stringValue}\n autoFocus={autoFocus}\n />\n );\n }\n case 'timestamp':\n case 'text':\n case 'string': {\n return (\n <TextInput\n autoComplete={autoComplete}\n disabled={disabled}\n onChange={(e) => {\n onChange({ target: { name, value: e.target.value, type } });\n }}\n placeholder={formattedPlaceholder}\n type=\"text\"\n value={stringValue}\n autoFocus={autoFocus}\n />\n );\n }\n case 'password': {\n return (\n <TextInput\n autoComplete={autoComplete}\n disabled={disabled}\n endAction={\n <button\n aria-label={formatMessage({\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n })}\n onClick={() => {\n setShowPassword((prev) => !prev);\n }}\n style={{\n border: 'none',\n padding: 0,\n background: 'transparent',\n }}\n type=\"button\"\n >\n {showPassword ? <Eye fill=\"neutral500\" /> : <EyeStriked fill=\"neutral500\" />}\n </button>\n }\n onChange={(e) => {\n onChange({ target: { name, value: e.target.value, type } });\n }}\n placeholder={formattedPlaceholder}\n type={showPassword ? 'text' : 'password'}\n value={stringValue}\n />\n );\n }\n case 'select': {\n return (\n <SingleSelect\n disabled={disabled}\n onChange={(value) => {\n onChange({ target: { name, value, type: 'select' } });\n }}\n placeholder={formattedPlaceholder}\n value={selectValue}\n >\n {options.map(({ metadatas: { intlLabel, disabled, hidden }, key, value }) => {\n return (\n <SingleSelectOption key={key} value={value} disabled={disabled} hidden={hidden}>\n {formatMessage(intlLabel)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n );\n }\n case 'textarea': {\n return (\n <Textarea\n disabled={disabled}\n onChange={(event) => onChange({ target: { name, value: event.target.value, type } })}\n placeholder={formattedPlaceholder}\n value={stringValue}\n />\n );\n }\n case 'time': {\n const formattedValue = handleTimeChange({ value: stringValue, onChange, name, type });\n\n return (\n <TimePicker\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n disabled={disabled}\n onChange={(time) => handleTimeChangeEvent(onChange, name, type, time)}\n onClear={() => handleTimeChangeEvent(onChange, name, type, undefined)}\n value={formattedValue}\n />\n );\n }\n default: {\n /**\n * If there's no component for the given type, we return a disabled text input\n * showing a \"Not supported\" title to illustrate the issue.\n */\n return <TextInput disabled placeholder=\"Not supported\" type=\"text\" value=\"\" />;\n }\n }\n };\n\n return (\n <Field.Root error={errorMessage} name={name} hint={hint} required={required}>\n {type !== 'checkbox' ? <Field.Label action={labelAction}>{label}</Field.Label> : null}\n {getComponent()}\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n};\n\ntype FieldSchema = {\n minLength?: number | string;\n maxLength?: number | string;\n max?: number | string;\n min?: number | string;\n};\ninterface UseFieldHintProps {\n description?: MessageDescriptor & { values?: Record<string, PrimitiveType> };\n fieldSchema?: FieldSchema;\n type?: string;\n}\n\n/**\n * @description\n * A hook for generating the hint for a field\n */\nconst useFieldHint = ({ description, fieldSchema, type }: UseFieldHintProps) => {\n const { formatMessage } = useIntl();\n\n const buildDescription = () =>\n description?.id\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { ...description.values }\n )\n : '';\n\n const buildHint = () => {\n const { maximum, minimum } = getMinMax(fieldSchema);\n const units = getFieldUnits({\n type,\n minimum,\n maximum,\n });\n\n const minIsNumber = typeof minimum === 'number';\n const maxIsNumber = typeof maximum === 'number';\n const hasMinAndMax = maxIsNumber && minIsNumber;\n const hasMinOrMax = maxIsNumber || minIsNumber;\n\n if (!description?.id && !hasMinOrMax) {\n return '';\n }\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: buildDescription(),\n unit: units?.message && hasMinOrMax ? formatMessage(units.message, units.values) : null,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: hasMinOrMax ? <br /> : null,\n }\n );\n };\n\n return { hint: buildHint() };\n};\n\nconst getFieldUnits = ({\n type,\n minimum,\n maximum,\n}: {\n type?: string;\n minimum?: number;\n maximum?: number;\n}) => {\n if (type && !['string', 'uid', 'richtext', 'email', 'password', 'text'].includes(type)) {\n return {};\n }\n const maxValue = Math.max(minimum || 0, maximum || 0);\n\n return {\n message: {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n values: {\n maxValue,\n },\n };\n};\n\nconst getMinMax = (fieldSchema?: FieldSchema) => {\n if (!fieldSchema) {\n return { maximum: undefined, minimum: undefined };\n }\n\n const { minLength, maxLength, max, min } = fieldSchema;\n\n let minimum;\n let maximum;\n\n const parsedMin = Number(min);\n const parsedMinLength = Number(minLength);\n\n if (!Number.isNaN(parsedMin)) {\n minimum = parsedMin;\n } else if (!Number.isNaN(parsedMinLength)) {\n minimum = parsedMinLength;\n }\n\n const parsedMax = Number(max);\n const parsedMaxLength = Number(maxLength);\n\n if (!Number.isNaN(parsedMax)) {\n maximum = parsedMax;\n } else if (!Number.isNaN(parsedMaxLength)) {\n maximum = parsedMaxLength;\n }\n\n return { maximum, minimum };\n};\n\n/**\n * we've memoized this component because we use a context to store all the data in our form in the content-manager.\n * This then causes _every_ component to re-render because there are no selects incurring performance issues\n * in content-types as the content-type gets more complicated.\n */\nconst MemoizedGenericInput = React.memo(GenericInput, isEqual);\n\nexport type { GenericInputProps, CustomInputProps };\nexport { MemoizedGenericInput as GenericInput };\n"],"names":["EMPTY_OPTIONS","GenericInput","autoComplete","customInputs","description","disabled","intlLabel","labelAction","error","name","onChange","onDelete","options","placeholder","required","step","type","value","defaultValue","isNullable","_isNullable","autoFocus","attribute","attributeName","conditionFields","rest","formatMessage","useIntl","getFieldHintValue","key","hint","useFieldHint","fieldSchema","minLength","maxLength","max","min","showPassword","setShowPassword","React","useState","CustomInput","undefined","stringValue","toString","numberValue","Number","isFinite","trim","parsedValue","selectValue","jsonValue","JSON","stringify","getErrorMessage","id","defaultMessage","values","errorMessage","_jsx","label","formattedPlaceholder","getComponent","JSONInput","json","length","target","minHeight","maxHeight","Toggle","checked","Boolean","offLabel","onLabel","e","Checkbox","onCheckedChange","dateValue","parseDateValue","DateTimePicker","clearLabel","date","formattedDate","toISOString","onClear","DatePicker","formatISO","representation","NumberInput","onValueChange","TextInput","endAction","button","aria-label","onClick","prev","style","border","padding","background","Eye","fill","EyeStriked","SingleSelect","map","metadatas","hidden","SingleSelectOption","Textarea","event","formattedValue","handleTimeChange","TimePicker","time","handleTimeChangeEvent","_jsxs","Field","Root","Label","action","Error","Hint","buildDescription","buildHint","maximum","minimum","getMinMax","units","getFieldUnits","minIsNumber","maxIsNumber","hasMinAndMax","hasMinOrMax","unit","message","divider","br","includes","maxValue","Math","parsedMin","parsedMinLength","isNaN","parsedMax","parsedMaxLength","MemoizedGenericInput","memo","isEqual"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabForm.js","sources":["../../../admin/src/components/TabForm.tsx"],"sourcesContent":["import { Box, Grid, Typography, Button, Tooltip } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\n\nimport { getAvailableConditionFields } from '../utils/conditions';\n\nimport { GenericInput } from './GenericInputs';\n\nimport type { AnyAttribute, AttributeConditions, IntlLabel } from '../types';\n\ntype FormInput = Partial<React.ComponentProps<typeof GenericInput>> & {\n name: string;\n type: string;\n size?: number;\n};\n\ntype FormSection = {\n sectionTitle?: IntlLabel | null;\n intlLabel?: IntlLabel;\n items: FormInput[];\n};\n\ntype FormError = {\n id?: string;\n};\n\ntype GenericInputProps = Record<string, unknown> & {\n attributeName?: string;\n contentTypeSchema?: {\n attributes?: AnyAttribute[];\n };\n};\n\ntype ModifiedData = Record<string, unknown> & {\n name?: string;\n};\n\ntype TabFormChangeHandler = (value: {\n target: {\n name: string;\n value?: unknown;\n type?: string;\n };\n}) => void;\n\ntype TabFormProps = {\n form: FormSection[];\n formErrors: Record<string, FormError>;\n genericInputProps: GenericInputProps;\n modifiedData: ModifiedData;\n onChange: TabFormChangeHandler;\n};\n\n/* eslint-disable react/no-array-index-key */\nexport const TabForm = ({\n form,\n formErrors,\n genericInputProps,\n modifiedData,\n onChange,\n}: TabFormProps) => {\n const { formatMessage } = useIntl();\n const sharedInputProps = genericInputProps as Partial<React.ComponentProps<typeof GenericInput>> &\n GenericInputProps;\n\n return (\n <>\n {form.map((section, sectionIndex) => {\n // Don't display an empty section\n if (section.items.length === 0) {\n return null;\n }\n return (\n <Box key={sectionIndex}>\n {section.sectionTitle && (\n <Box paddingBottom={4}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage(section.sectionTitle)}\n </Typography>\n </Box>\n )}\n {section.intlLabel && (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(section.intlLabel)}\n </Typography>\n )}\n\n <Grid.Root gap={4}>\n {section.items.map((input, i) => {\n const key = `${sectionIndex}.${i}`;\n const intlLabel = input.intlLabel ?? {\n id: input.name,\n defaultMessage: input.name,\n };\n\n /**\n * Use undefined as the default value because not every input wants a string e.g. Date pickers\n */\n const value = get(modifiedData, input.name, undefined);\n\n // When extending the yup schema of an existing field (like in https://github.com/strapi/strapi/blob/293ff3b8f9559236609d123a2774e3be05ce8274/packages/strapi-plugin-i18n/admin/src/index.js#L52)\n // and triggering a yup validation error in the UI (missing a required field for example)\n // We got an object that looks like: formErrors = { \"pluginOptions.i18n.localized\": {...} }\n // In order to deal with this error, we can't rely on lodash.get to resolve this key\n // - lodash will try to access {pluginOptions: {i18n: {localized: true}}})\n // - and we just want to access { \"pluginOptions.i18n.localized\": {...} }\n // NOTE: this is a hack\n const pluginOptionError = Object.keys(formErrors).find((key) => key === input.name);\n\n // Retrieve the error for a specific input\n const errorId = pluginOptionError\n ? formErrors[pluginOptionError]?.id\n : get(\n formErrors,\n [\n ...input.name\n .split('.')\n // The filter here is used when creating a component\n // in the component step 1 modal\n // Since the component info is stored in the\n // componentToCreate object we can access the error\n // By removing the key\n .filter((key: string) => key !== 'componentToCreate'),\n 'id',\n ],\n null\n );\n\n if (input.type === 'pushRight') {\n return (\n <Grid.Item\n col={input.size ?? 6}\n xs={12}\n key={input.name ?? key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <div />\n </Grid.Item>\n );\n }\n\n // Special handling for 'condition-form'\n if (input.type === 'condition-form') {\n const currentCondition = get(modifiedData, input.name) as\n | AttributeConditions\n | null\n | undefined;\n\n // Get all attributes from the content type schema\n const contentTypeAttributes =\n sharedInputProps.contentTypeSchema?.attributes ?? [];\n\n if (!sharedInputProps.contentTypeSchema) {\n console.warn('contentTypeSchema is undefined, skipping condition form');\n return null;\n }\n\n // Filter for boolean and enumeration fields only, excluding the current field\n const availableFields = getAvailableConditionFields(\n contentTypeAttributes,\n modifiedData.name ?? ''\n );\n\n const noFieldsMessage = formatMessage({\n id: 'form.attribute.condition.no-fields',\n defaultMessage:\n 'No boolean or enumeration fields available to set conditions on.',\n });\n\n return (\n <Grid.Item\n col={input.size ?? 12}\n xs={12}\n key={input.name ?? key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {currentCondition === null ||\n currentCondition === undefined ||\n Object.keys(currentCondition).length === 0 ? (\n <Box>\n <Tooltip label={noFieldsMessage}>\n <Button\n marginTop={4}\n fullWidth={true}\n variant=\"secondary\"\n onClick={() => {\n onChange({\n target: {\n name: input.name,\n value: { visible: { '==': [{ var: '' }, ''] } },\n },\n });\n }}\n startIcon={<span aria-hidden>+</span>}\n disabled={availableFields.length === 0}\n >\n {formatMessage({\n id: 'form.attribute.condition.apply',\n defaultMessage: 'Apply condition',\n })}\n </Button>\n </Tooltip>\n </Box>\n ) : (\n <GenericInput\n {...input}\n {...sharedInputProps}\n error={errorId}\n intlLabel={intlLabel}\n onChange={onChange}\n value={value}\n autoFocus={i === 0}\n attributeName={modifiedData.name}\n conditionFields={availableFields}\n onDelete={() => {\n onChange({\n target: {\n name: input.name,\n },\n });\n }}\n />\n )}\n </Grid.Item>\n );\n }\n\n // Default rendering for all other input types\n return (\n <Grid.Item\n col={input.size ?? 6}\n xs={12}\n key={input.name ?? key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <GenericInput\n {...input}\n {...sharedInputProps}\n error={errorId}\n intlLabel={intlLabel}\n onChange={onChange}\n value={value}\n autoFocus={i === 0}\n />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n );\n })}\n </>\n );\n};\n"],"names":["TabForm","form","formErrors","genericInputProps","modifiedData","onChange","formatMessage","useIntl","sharedInputProps","_jsx","_Fragment","map","section","sectionIndex","items","length","_jsxs","Box","sectionTitle","paddingBottom","Typography","variant","tag","intlLabel","textColor","Grid","Root","gap","input","i","key","id","name","defaultMessage","value","get","undefined","pluginOptionError","Object","keys","find","errorId","split","filter","type","Item","col","size","xs","direction","alignItems","div","currentCondition","contentTypeAttributes","contentTypeSchema","attributes","console","warn","availableFields","getAvailableConditionFields","noFieldsMessage","Tooltip","label","Button","marginTop","fullWidth","onClick","target","visible","var","startIcon","span","aria-hidden","disabled","GenericInput","error","autoFocus","attributeName","conditionFields","onDelete"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TabForm.js","sources":["../../../admin/src/components/TabForm.tsx"],"sourcesContent":["import { Box, Grid, Typography, Button, Tooltip } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\n\nimport { getAvailableConditionFields } from '../utils/conditions';\n\nimport { GenericInput } from './GenericInputs';\n\nimport type { AnyAttribute, AttributeConditions, IntlLabel } from '../types';\n\ntype FormInput = Partial<React.ComponentProps<typeof GenericInput>> & {\n name: string;\n type: string;\n size?: number;\n};\n\ntype FormSection = {\n sectionTitle?: IntlLabel | null;\n intlLabel?: IntlLabel;\n items: FormInput[];\n};\n\ntype FormError = {\n id?: string;\n};\n\ntype GenericInputProps = Record<string, unknown> & {\n attributeName?: string;\n contentTypeSchema?: {\n attributes?: AnyAttribute[];\n };\n};\n\ntype ModifiedData = Record<string, unknown> & {\n name?: string;\n};\n\ntype TabFormChangeHandler = (value: {\n target: {\n name: string;\n value?: unknown;\n type?: string;\n };\n}) => void;\n\ntype TabFormProps = {\n form: FormSection[];\n formErrors: Record<string, FormError>;\n genericInputProps: GenericInputProps;\n modifiedData: ModifiedData;\n onChange: TabFormChangeHandler;\n};\n\n/* eslint-disable react/no-array-index-key */\nexport const TabForm = ({\n form,\n formErrors,\n genericInputProps,\n modifiedData,\n onChange,\n}: TabFormProps) => {\n const { formatMessage } = useIntl();\n const sharedInputProps = genericInputProps as Partial<React.ComponentProps<typeof GenericInput>> &\n GenericInputProps;\n\n return (\n <>\n {form.map((section, sectionIndex) => {\n // Don't display an empty section\n if (section.items.length === 0) {\n return null;\n }\n return (\n <Box key={sectionIndex}>\n {section.sectionTitle && (\n <Box paddingBottom={4}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage(section.sectionTitle)}\n </Typography>\n </Box>\n )}\n {section.intlLabel && (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(section.intlLabel)}\n </Typography>\n )}\n\n <Grid.Root gap={4}>\n {section.items.map((input, i) => {\n const key = `${sectionIndex}.${i}`;\n const intlLabel = input.intlLabel ?? {\n id: input.name,\n defaultMessage: input.name,\n };\n\n /**\n * Use undefined as the default value because not every input wants a string e.g. Date pickers\n */\n const value = get(modifiedData, input.name, undefined);\n\n // When extending the yup schema of an existing field (like in https://github.com/strapi/strapi/blob/293ff3b8f9559236609d123a2774e3be05ce8274/packages/strapi-plugin-i18n/admin/src/index.js#L52)\n // and triggering a yup validation error in the UI (missing a required field for example)\n // We got an object that looks like: formErrors = { \"pluginOptions.i18n.localized\": {...} }\n // In order to deal with this error, we can't rely on lodash.get to resolve this key\n // - lodash will try to access {pluginOptions: {i18n: {localized: true}}})\n // - and we just want to access { \"pluginOptions.i18n.localized\": {...} }\n // NOTE: this is a hack\n const pluginOptionError = Object.keys(formErrors).find((key) => key === input.name);\n\n // Retrieve the error for a specific input\n const errorId = pluginOptionError\n ? formErrors[pluginOptionError]?.id\n : get(\n formErrors,\n [\n ...input.name\n .split('.')\n // The filter here is used when creating a component\n // in the component step 1 modal\n // Since the component info is stored in the\n // componentToCreate object we can access the error\n // By removing the key\n .filter((key: string) => key !== 'componentToCreate'),\n 'id',\n ],\n null\n );\n\n if (input.type === 'pushRight') {\n return (\n <Grid.Item\n col={input.size ?? 6}\n xs={12}\n key={input.name ?? key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <div />\n </Grid.Item>\n );\n }\n\n // Special handling for 'condition-form'\n if (input.type === 'condition-form') {\n const currentCondition = get(modifiedData, input.name) as\n AttributeConditions | null | undefined;\n\n // Get all attributes from the content type schema\n const contentTypeAttributes =\n sharedInputProps.contentTypeSchema?.attributes ?? [];\n\n if (!sharedInputProps.contentTypeSchema) {\n console.warn('contentTypeSchema is undefined, skipping condition form');\n return null;\n }\n\n // Filter for boolean and enumeration fields only, excluding the current field\n const availableFields = getAvailableConditionFields(\n contentTypeAttributes,\n modifiedData.name ?? ''\n );\n\n const noFieldsMessage = formatMessage({\n id: 'form.attribute.condition.no-fields',\n defaultMessage:\n 'No boolean or enumeration fields available to set conditions on.',\n });\n\n return (\n <Grid.Item\n col={input.size ?? 12}\n xs={12}\n key={input.name ?? key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {currentCondition === null ||\n currentCondition === undefined ||\n Object.keys(currentCondition).length === 0 ? (\n <Box>\n <Tooltip label={noFieldsMessage}>\n <Button\n marginTop={4}\n fullWidth={true}\n variant=\"secondary\"\n onClick={() => {\n onChange({\n target: {\n name: input.name,\n value: { visible: { '==': [{ var: '' }, ''] } },\n },\n });\n }}\n startIcon={<span aria-hidden>+</span>}\n disabled={availableFields.length === 0}\n >\n {formatMessage({\n id: 'form.attribute.condition.apply',\n defaultMessage: 'Apply condition',\n })}\n </Button>\n </Tooltip>\n </Box>\n ) : (\n <GenericInput\n {...input}\n {...sharedInputProps}\n error={errorId}\n intlLabel={intlLabel}\n onChange={onChange}\n value={value}\n autoFocus={i === 0}\n attributeName={modifiedData.name}\n conditionFields={availableFields}\n onDelete={() => {\n onChange({\n target: {\n name: input.name,\n },\n });\n }}\n />\n )}\n </Grid.Item>\n );\n }\n\n // Default rendering for all other input types\n return (\n <Grid.Item\n col={input.size ?? 6}\n xs={12}\n key={input.name ?? key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <GenericInput\n {...input}\n {...sharedInputProps}\n error={errorId}\n intlLabel={intlLabel}\n onChange={onChange}\n value={value}\n autoFocus={i === 0}\n />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n );\n })}\n </>\n );\n};\n"],"names":["TabForm","form","formErrors","genericInputProps","modifiedData","onChange","formatMessage","useIntl","sharedInputProps","_jsx","_Fragment","map","section","sectionIndex","items","length","_jsxs","Box","sectionTitle","paddingBottom","Typography","variant","tag","intlLabel","textColor","Grid","Root","gap","input","i","key","id","name","defaultMessage","value","get","undefined","pluginOptionError","Object","keys","find","errorId","split","filter","type","Item","col","size","xs","direction","alignItems","div","currentCondition","contentTypeAttributes","contentTypeSchema","attributes","console","warn","availableFields","getAvailableConditionFields","noFieldsMessage","Tooltip","label","Button","marginTop","fullWidth","onClick","target","visible","var","startIcon","span","aria-hidden","disabled","GenericInput","error","autoFocus","attributeName","conditionFields","onDelete"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabForm.mjs","sources":["../../../admin/src/components/TabForm.tsx"],"sourcesContent":["import { Box, Grid, Typography, Button, Tooltip } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\n\nimport { getAvailableConditionFields } from '../utils/conditions';\n\nimport { GenericInput } from './GenericInputs';\n\nimport type { AnyAttribute, AttributeConditions, IntlLabel } from '../types';\n\ntype FormInput = Partial<React.ComponentProps<typeof GenericInput>> & {\n name: string;\n type: string;\n size?: number;\n};\n\ntype FormSection = {\n sectionTitle?: IntlLabel | null;\n intlLabel?: IntlLabel;\n items: FormInput[];\n};\n\ntype FormError = {\n id?: string;\n};\n\ntype GenericInputProps = Record<string, unknown> & {\n attributeName?: string;\n contentTypeSchema?: {\n attributes?: AnyAttribute[];\n };\n};\n\ntype ModifiedData = Record<string, unknown> & {\n name?: string;\n};\n\ntype TabFormChangeHandler = (value: {\n target: {\n name: string;\n value?: unknown;\n type?: string;\n };\n}) => void;\n\ntype TabFormProps = {\n form: FormSection[];\n formErrors: Record<string, FormError>;\n genericInputProps: GenericInputProps;\n modifiedData: ModifiedData;\n onChange: TabFormChangeHandler;\n};\n\n/* eslint-disable react/no-array-index-key */\nexport const TabForm = ({\n form,\n formErrors,\n genericInputProps,\n modifiedData,\n onChange,\n}: TabFormProps) => {\n const { formatMessage } = useIntl();\n const sharedInputProps = genericInputProps as Partial<React.ComponentProps<typeof GenericInput>> &\n GenericInputProps;\n\n return (\n <>\n {form.map((section, sectionIndex) => {\n // Don't display an empty section\n if (section.items.length === 0) {\n return null;\n }\n return (\n <Box key={sectionIndex}>\n {section.sectionTitle && (\n <Box paddingBottom={4}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage(section.sectionTitle)}\n </Typography>\n </Box>\n )}\n {section.intlLabel && (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(section.intlLabel)}\n </Typography>\n )}\n\n <Grid.Root gap={4}>\n {section.items.map((input, i) => {\n const key = `${sectionIndex}.${i}`;\n const intlLabel = input.intlLabel ?? {\n id: input.name,\n defaultMessage: input.name,\n };\n\n /**\n * Use undefined as the default value because not every input wants a string e.g. Date pickers\n */\n const value = get(modifiedData, input.name, undefined);\n\n // When extending the yup schema of an existing field (like in https://github.com/strapi/strapi/blob/293ff3b8f9559236609d123a2774e3be05ce8274/packages/strapi-plugin-i18n/admin/src/index.js#L52)\n // and triggering a yup validation error in the UI (missing a required field for example)\n // We got an object that looks like: formErrors = { \"pluginOptions.i18n.localized\": {...} }\n // In order to deal with this error, we can't rely on lodash.get to resolve this key\n // - lodash will try to access {pluginOptions: {i18n: {localized: true}}})\n // - and we just want to access { \"pluginOptions.i18n.localized\": {...} }\n // NOTE: this is a hack\n const pluginOptionError = Object.keys(formErrors).find((key) => key === input.name);\n\n // Retrieve the error for a specific input\n const errorId = pluginOptionError\n ? formErrors[pluginOptionError]?.id\n : get(\n formErrors,\n [\n ...input.name\n .split('.')\n // The filter here is used when creating a component\n // in the component step 1 modal\n // Since the component info is stored in the\n // componentToCreate object we can access the error\n // By removing the key\n .filter((key: string) => key !== 'componentToCreate'),\n 'id',\n ],\n null\n );\n\n if (input.type === 'pushRight') {\n return (\n <Grid.Item\n col={input.size ?? 6}\n xs={12}\n key={input.name ?? key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <div />\n </Grid.Item>\n );\n }\n\n // Special handling for 'condition-form'\n if (input.type === 'condition-form') {\n const currentCondition = get(modifiedData, input.name) as\n | AttributeConditions\n | null\n | undefined;\n\n // Get all attributes from the content type schema\n const contentTypeAttributes =\n sharedInputProps.contentTypeSchema?.attributes ?? [];\n\n if (!sharedInputProps.contentTypeSchema) {\n console.warn('contentTypeSchema is undefined, skipping condition form');\n return null;\n }\n\n // Filter for boolean and enumeration fields only, excluding the current field\n const availableFields = getAvailableConditionFields(\n contentTypeAttributes,\n modifiedData.name ?? ''\n );\n\n const noFieldsMessage = formatMessage({\n id: 'form.attribute.condition.no-fields',\n defaultMessage:\n 'No boolean or enumeration fields available to set conditions on.',\n });\n\n return (\n <Grid.Item\n col={input.size ?? 12}\n xs={12}\n key={input.name ?? key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {currentCondition === null ||\n currentCondition === undefined ||\n Object.keys(currentCondition).length === 0 ? (\n <Box>\n <Tooltip label={noFieldsMessage}>\n <Button\n marginTop={4}\n fullWidth={true}\n variant=\"secondary\"\n onClick={() => {\n onChange({\n target: {\n name: input.name,\n value: { visible: { '==': [{ var: '' }, ''] } },\n },\n });\n }}\n startIcon={<span aria-hidden>+</span>}\n disabled={availableFields.length === 0}\n >\n {formatMessage({\n id: 'form.attribute.condition.apply',\n defaultMessage: 'Apply condition',\n })}\n </Button>\n </Tooltip>\n </Box>\n ) : (\n <GenericInput\n {...input}\n {...sharedInputProps}\n error={errorId}\n intlLabel={intlLabel}\n onChange={onChange}\n value={value}\n autoFocus={i === 0}\n attributeName={modifiedData.name}\n conditionFields={availableFields}\n onDelete={() => {\n onChange({\n target: {\n name: input.name,\n },\n });\n }}\n />\n )}\n </Grid.Item>\n );\n }\n\n // Default rendering for all other input types\n return (\n <Grid.Item\n col={input.size ?? 6}\n xs={12}\n key={input.name ?? key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <GenericInput\n {...input}\n {...sharedInputProps}\n error={errorId}\n intlLabel={intlLabel}\n onChange={onChange}\n value={value}\n autoFocus={i === 0}\n />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n );\n })}\n </>\n );\n};\n"],"names":["TabForm","form","formErrors","genericInputProps","modifiedData","onChange","formatMessage","useIntl","sharedInputProps","_jsx","_Fragment","map","section","sectionIndex","items","length","_jsxs","Box","sectionTitle","paddingBottom","Typography","variant","tag","intlLabel","textColor","Grid","Root","gap","input","i","key","id","name","defaultMessage","value","get","undefined","pluginOptionError","Object","keys","find","errorId","split","filter","type","Item","col","size","xs","direction","alignItems","div","currentCondition","contentTypeAttributes","contentTypeSchema","attributes","console","warn","availableFields","getAvailableConditionFields","noFieldsMessage","Tooltip","label","Button","marginTop","fullWidth","onClick","target","visible","var","startIcon","span","aria-hidden","disabled","GenericInput","error","autoFocus","attributeName","conditionFields","onDelete"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TabForm.mjs","sources":["../../../admin/src/components/TabForm.tsx"],"sourcesContent":["import { Box, Grid, Typography, Button, Tooltip } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\n\nimport { getAvailableConditionFields } from '../utils/conditions';\n\nimport { GenericInput } from './GenericInputs';\n\nimport type { AnyAttribute, AttributeConditions, IntlLabel } from '../types';\n\ntype FormInput = Partial<React.ComponentProps<typeof GenericInput>> & {\n name: string;\n type: string;\n size?: number;\n};\n\ntype FormSection = {\n sectionTitle?: IntlLabel | null;\n intlLabel?: IntlLabel;\n items: FormInput[];\n};\n\ntype FormError = {\n id?: string;\n};\n\ntype GenericInputProps = Record<string, unknown> & {\n attributeName?: string;\n contentTypeSchema?: {\n attributes?: AnyAttribute[];\n };\n};\n\ntype ModifiedData = Record<string, unknown> & {\n name?: string;\n};\n\ntype TabFormChangeHandler = (value: {\n target: {\n name: string;\n value?: unknown;\n type?: string;\n };\n}) => void;\n\ntype TabFormProps = {\n form: FormSection[];\n formErrors: Record<string, FormError>;\n genericInputProps: GenericInputProps;\n modifiedData: ModifiedData;\n onChange: TabFormChangeHandler;\n};\n\n/* eslint-disable react/no-array-index-key */\nexport const TabForm = ({\n form,\n formErrors,\n genericInputProps,\n modifiedData,\n onChange,\n}: TabFormProps) => {\n const { formatMessage } = useIntl();\n const sharedInputProps = genericInputProps as Partial<React.ComponentProps<typeof GenericInput>> &\n GenericInputProps;\n\n return (\n <>\n {form.map((section, sectionIndex) => {\n // Don't display an empty section\n if (section.items.length === 0) {\n return null;\n }\n return (\n <Box key={sectionIndex}>\n {section.sectionTitle && (\n <Box paddingBottom={4}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage(section.sectionTitle)}\n </Typography>\n </Box>\n )}\n {section.intlLabel && (\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(section.intlLabel)}\n </Typography>\n )}\n\n <Grid.Root gap={4}>\n {section.items.map((input, i) => {\n const key = `${sectionIndex}.${i}`;\n const intlLabel = input.intlLabel ?? {\n id: input.name,\n defaultMessage: input.name,\n };\n\n /**\n * Use undefined as the default value because not every input wants a string e.g. Date pickers\n */\n const value = get(modifiedData, input.name, undefined);\n\n // When extending the yup schema of an existing field (like in https://github.com/strapi/strapi/blob/293ff3b8f9559236609d123a2774e3be05ce8274/packages/strapi-plugin-i18n/admin/src/index.js#L52)\n // and triggering a yup validation error in the UI (missing a required field for example)\n // We got an object that looks like: formErrors = { \"pluginOptions.i18n.localized\": {...} }\n // In order to deal with this error, we can't rely on lodash.get to resolve this key\n // - lodash will try to access {pluginOptions: {i18n: {localized: true}}})\n // - and we just want to access { \"pluginOptions.i18n.localized\": {...} }\n // NOTE: this is a hack\n const pluginOptionError = Object.keys(formErrors).find((key) => key === input.name);\n\n // Retrieve the error for a specific input\n const errorId = pluginOptionError\n ? formErrors[pluginOptionError]?.id\n : get(\n formErrors,\n [\n ...input.name\n .split('.')\n // The filter here is used when creating a component\n // in the component step 1 modal\n // Since the component info is stored in the\n // componentToCreate object we can access the error\n // By removing the key\n .filter((key: string) => key !== 'componentToCreate'),\n 'id',\n ],\n null\n );\n\n if (input.type === 'pushRight') {\n return (\n <Grid.Item\n col={input.size ?? 6}\n xs={12}\n key={input.name ?? key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <div />\n </Grid.Item>\n );\n }\n\n // Special handling for 'condition-form'\n if (input.type === 'condition-form') {\n const currentCondition = get(modifiedData, input.name) as\n AttributeConditions | null | undefined;\n\n // Get all attributes from the content type schema\n const contentTypeAttributes =\n sharedInputProps.contentTypeSchema?.attributes ?? [];\n\n if (!sharedInputProps.contentTypeSchema) {\n console.warn('contentTypeSchema is undefined, skipping condition form');\n return null;\n }\n\n // Filter for boolean and enumeration fields only, excluding the current field\n const availableFields = getAvailableConditionFields(\n contentTypeAttributes,\n modifiedData.name ?? ''\n );\n\n const noFieldsMessage = formatMessage({\n id: 'form.attribute.condition.no-fields',\n defaultMessage:\n 'No boolean or enumeration fields available to set conditions on.',\n });\n\n return (\n <Grid.Item\n col={input.size ?? 12}\n xs={12}\n key={input.name ?? key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {currentCondition === null ||\n currentCondition === undefined ||\n Object.keys(currentCondition).length === 0 ? (\n <Box>\n <Tooltip label={noFieldsMessage}>\n <Button\n marginTop={4}\n fullWidth={true}\n variant=\"secondary\"\n onClick={() => {\n onChange({\n target: {\n name: input.name,\n value: { visible: { '==': [{ var: '' }, ''] } },\n },\n });\n }}\n startIcon={<span aria-hidden>+</span>}\n disabled={availableFields.length === 0}\n >\n {formatMessage({\n id: 'form.attribute.condition.apply',\n defaultMessage: 'Apply condition',\n })}\n </Button>\n </Tooltip>\n </Box>\n ) : (\n <GenericInput\n {...input}\n {...sharedInputProps}\n error={errorId}\n intlLabel={intlLabel}\n onChange={onChange}\n value={value}\n autoFocus={i === 0}\n attributeName={modifiedData.name}\n conditionFields={availableFields}\n onDelete={() => {\n onChange({\n target: {\n name: input.name,\n },\n });\n }}\n />\n )}\n </Grid.Item>\n );\n }\n\n // Default rendering for all other input types\n return (\n <Grid.Item\n col={input.size ?? 6}\n xs={12}\n key={input.name ?? key}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <GenericInput\n {...input}\n {...sharedInputProps}\n error={errorId}\n intlLabel={intlLabel}\n onChange={onChange}\n value={value}\n autoFocus={i === 0}\n />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Box>\n );\n })}\n </>\n );\n};\n"],"names":["TabForm","form","formErrors","genericInputProps","modifiedData","onChange","formatMessage","useIntl","sharedInputProps","_jsx","_Fragment","map","section","sectionIndex","items","length","_jsxs","Box","sectionTitle","paddingBottom","Typography","variant","tag","intlLabel","textColor","Grid","Root","gap","input","i","key","id","name","defaultMessage","value","get","undefined","pluginOptionError","Object","keys","find","errorId","split","filter","type","Item","col","size","xs","direction","alignItems","div","currentCondition","contentTypeAttributes","contentTypeSchema","attributes","console","warn","availableFields","getAvailableConditionFields","noFieldsMessage","Tooltip","label","Button","marginTop","fullWidth","onClick","target","visible","var","startIcon","span","aria-hidden","disabled","GenericInput","error","autoFocus","attributeName","conditionFields","onDelete"],"mappings":"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"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
+
interface FullScreenImageContextType {
|
|
3
|
+
isOpen: boolean;
|
|
4
|
+
open: () => void;
|
|
5
|
+
close: () => void;
|
|
6
|
+
src: string;
|
|
7
|
+
alt: string;
|
|
8
|
+
}
|
|
2
9
|
interface FullScreenImageProps {
|
|
3
10
|
src: string;
|
|
4
11
|
alt: string;
|
|
@@ -16,5 +23,6 @@ export declare const setOpacity: (hex: string, alpha: number) => string;
|
|
|
16
23
|
export declare const FullScreenImage: {
|
|
17
24
|
Root: ({ children, src, alt, onClose, defaultOpen }: FullScreenImageRootProps) => import("react/jsx-runtime").JSX.Element;
|
|
18
25
|
Trigger: ({ children, asChild }: FullScreenImageTriggerProps) => import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
useFullScreenImage: () => FullScreenImageContextType;
|
|
19
27
|
};
|
|
20
28
|
export {};
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
import { AIMessage } from '../../lib/types/messages';
|
|
2
|
+
/**
|
|
3
|
+
* Exported for unit tests only. The AI chat needs a live AI backend, so no E2E
|
|
4
|
+
* run can reach this logic.
|
|
5
|
+
*/
|
|
6
|
+
export declare const getPartFingerprint: (part: AIMessage["parts"][number]) => string;
|
|
7
|
+
/**
|
|
8
|
+
* Gives each part a key that survives across renders. A key derived from the
|
|
9
|
+
* part content alone cannot work: a streaming text part changes on every chunk,
|
|
10
|
+
* so its fingerprint would change on every tick and remount the node mid
|
|
11
|
+
* stream. Hence the fallback chain below: exact fingerprint match first, then
|
|
12
|
+
* object identity, then same slot and same type for the streaming case.
|
|
13
|
+
*
|
|
14
|
+
* Exported for unit tests only. The AI chat needs a live AI backend, so no E2E
|
|
15
|
+
* run can reach this logic.
|
|
16
|
+
*/
|
|
17
|
+
export declare const usePartsWithKeys: (parts: AIMessage["parts"]) => {
|
|
18
|
+
fingerprint: string;
|
|
19
|
+
key: string;
|
|
20
|
+
part: import("ai").UIMessagePart<import("ai").UIDataTypes, import("ai").UITools>;
|
|
21
|
+
}[];
|
|
2
22
|
export declare const ChatMessage: ({ message }: {
|
|
3
23
|
message: AIMessage;
|
|
4
24
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folderTelemetry.js","sources":["../../../admin/src/utils/folderTelemetry.ts"],"sourcesContent":["export const DID_ACT_ON_FOLDERS = 'didActOnFolders';\n\nexport type FolderAction =\n
|
|
1
|
+
{"version":3,"file":"folderTelemetry.js","sources":["../../../admin/src/utils/folderTelemetry.ts"],"sourcesContent":["export const DID_ACT_ON_FOLDERS = 'didActOnFolders';\n\nexport type FolderAction =\n 'create' | 'rename' | 'move' | 'deleteOnly' | 'deleteSubtree' | 'assign' | 'reorder';\n\nexport type FolderTelemetryOperation = 'create' | 'update' | 'delete';\n\nconst OPERATION_BY_ACTION: Record<FolderAction, FolderTelemetryOperation> = {\n create: 'create',\n rename: 'update',\n move: 'update',\n assign: 'update',\n reorder: 'update',\n deleteOnly: 'delete',\n deleteSubtree: 'delete',\n};\n\n/** Map a fine-grained folder action to an operation value the telemetry API accepts. */\nexport const folderTelemetryOperation = (action: FolderAction): FolderTelemetryOperation => {\n return OPERATION_BY_ACTION[action];\n};\n"],"names":["DID_ACT_ON_FOLDERS","OPERATION_BY_ACTION","create","rename","move","assign","reorder","deleteOnly","deleteSubtree","folderTelemetryOperation","action"],"mappings":";;AAAO,MAAMA,qBAAqB;AAOlC,MAAMC,mBAAAA,GAAsE;IAC1EC,MAAAA,EAAQ,QAAA;IACRC,MAAAA,EAAQ,QAAA;IACRC,IAAAA,EAAM,QAAA;IACNC,MAAAA,EAAQ,QAAA;IACRC,OAAAA,EAAS,QAAA;IACTC,UAAAA,EAAY,QAAA;IACZC,aAAAA,EAAe;AACjB,CAAA;AAEA,yFACO,MAAMC,wBAAAA,GAA2B,CAACC,MAAAA,GAAAA;IACvC,OAAOT,mBAAmB,CAACS,MAAAA,CAAO;AACpC;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folderTelemetry.mjs","sources":["../../../admin/src/utils/folderTelemetry.ts"],"sourcesContent":["export const DID_ACT_ON_FOLDERS = 'didActOnFolders';\n\nexport type FolderAction =\n
|
|
1
|
+
{"version":3,"file":"folderTelemetry.mjs","sources":["../../../admin/src/utils/folderTelemetry.ts"],"sourcesContent":["export const DID_ACT_ON_FOLDERS = 'didActOnFolders';\n\nexport type FolderAction =\n 'create' | 'rename' | 'move' | 'deleteOnly' | 'deleteSubtree' | 'assign' | 'reorder';\n\nexport type FolderTelemetryOperation = 'create' | 'update' | 'delete';\n\nconst OPERATION_BY_ACTION: Record<FolderAction, FolderTelemetryOperation> = {\n create: 'create',\n rename: 'update',\n move: 'update',\n assign: 'update',\n reorder: 'update',\n deleteOnly: 'delete',\n deleteSubtree: 'delete',\n};\n\n/** Map a fine-grained folder action to an operation value the telemetry API accepts. */\nexport const folderTelemetryOperation = (action: FolderAction): FolderTelemetryOperation => {\n return OPERATION_BY_ACTION[action];\n};\n"],"names":["DID_ACT_ON_FOLDERS","OPERATION_BY_ACTION","create","rename","move","assign","reorder","deleteOnly","deleteSubtree","folderTelemetryOperation","action"],"mappings":"AAAO,MAAMA,qBAAqB;AAOlC,MAAMC,mBAAAA,GAAsE;IAC1EC,MAAAA,EAAQ,QAAA;IACRC,MAAAA,EAAQ,QAAA;IACRC,IAAAA,EAAM,QAAA;IACNC,MAAAA,EAAQ,QAAA;IACRC,OAAAA,EAAS,QAAA;IACTC,UAAAA,EAAY,QAAA;IACZC,aAAAA,EAAe;AACjB,CAAA;AAEA,yFACO,MAAMC,wBAAAA,GAA2B,CAACC,MAAAA,GAAAA;IACvC,OAAOT,mBAAmB,CAACS,MAAAA,CAAO;AACpC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formAPI.js","sources":["../../../admin/src/utils/formAPI.ts"],"sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport * as yup from 'yup';\n\ntype YupObjectShape = Parameters<ReturnType<typeof yup.object>['shape']>[0];\ntype YupObjectSchema = ReturnType<typeof yup.object>;\ntype FormSection = unknown;\ntype FormExtensionHandler = (props?: unknown) => FormSection[];\ntype FormValidator = (args: unknown[]) => YupObjectShape;\ntype ContentTypeSchemaMutation = (\n data: Record<string, unknown>,\n initialData: Record<string, unknown>\n) => Record<string, unknown>;\n\ntype ExtensionForm = {\n advanced: FormExtensionHandler[];\n base: FormExtensionHandler[];\n};\n\ntype ExtensionDefinition = {\n validators: FormValidator[];\n form: ExtensionForm;\n};\n\ntype ExtensionInput = {\n validator?: FormValidator;\n form: {\n advanced: FormExtensionHandler;\n base: FormExtensionHandler;\n };\n};\n\nexport type FormAPI = {\n components: {\n inputs: Record<string, unknown>;\n add: ({ id, component }: { id: string; component: unknown }) => void;\n };\n types: {\n attribute: {\n [key: string]: ExtensionDefinition;\n };\n contentType: ExtensionDefinition;\n component: ExtensionDefinition;\n };\n contentTypeSchemaMutations: ContentTypeSchemaMutation[];\n addContentTypeSchemaMutation: (cb: ContentTypeSchemaMutation) => void;\n extendContentType: (data: ExtensionInput) => void;\n extendFields: (fields: string[], data: ExtensionInput) => void;\n getAdvancedForm: (target: string[], props?: unknown) => FormSection[];\n makeCustomFieldValidator: (\n attributeShape: YupObjectSchema,\n validator: FormValidator | undefined,\n ...validatorArgs: unknown[]\n ) => YupObjectSchema;\n makeValidator: (\n target: string[],\n initShape: YupObjectSchema,\n ...args: unknown[]\n ) => YupObjectSchema;\n mutateContentTypeSchema: (\n data: Record<string, unknown>,\n initialData: Record<string, unknown>\n ) => Record<string, unknown>;\n};\n\nexport const formsAPI: FormAPI = {\n components: {\n inputs: {},\n add({ id, component }) {\n if (this.inputs[id] === undefined) {\n this.inputs[id] = component;\n }\n },\n },\n types: {\n attribute: {\n // test: {\n // validators: [],\n // form: {\n // advanced: [\n // /* cb */\n // ],\n // base: [\n // /* cb */\n // ],\n // },\n // },\n },\n contentType: {\n validators: [],\n form: {\n advanced: [],\n base: [],\n },\n },\n component: {\n validators: [],\n form: {\n advanced: [],\n base: [],\n },\n },\n },\n contentTypeSchemaMutations: [],\n addContentTypeSchemaMutation(cb) {\n this.contentTypeSchemaMutations.push(cb);\n },\n extendContentType({ validator, form: { advanced, base } }) {\n const { contentType } = this.types;\n\n if (validator !== undefined) {\n contentType.validators.push(validator);\n }\n contentType.form.advanced.push(advanced);\n contentType.form.base.push(base);\n },\n extendFields(fields, { validator, form: { advanced, base } }) {\n const formType = this.types.attribute;\n\n fields.forEach((field) => {\n if (!formType[field]) {\n formType[field] = {\n validators: [],\n form: {\n advanced: [
|
|
1
|
+
{"version":3,"file":"formAPI.js","sources":["../../../admin/src/utils/formAPI.ts"],"sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport * as yup from 'yup';\n\ntype YupObjectShape = Parameters<ReturnType<typeof yup.object>['shape']>[0];\ntype YupObjectSchema = ReturnType<typeof yup.object>;\ntype FormSection = unknown;\ntype FormExtensionHandler = (props?: unknown) => FormSection[];\ntype FormValidator = (args: unknown[]) => YupObjectShape;\ntype ContentTypeSchemaMutation = (\n data: Record<string, unknown>,\n initialData: Record<string, unknown>\n) => Record<string, unknown>;\n\ntype ExtensionForm = {\n advanced: FormExtensionHandler[];\n base: FormExtensionHandler[];\n};\n\ntype ExtensionDefinition = {\n validators: FormValidator[];\n form: ExtensionForm;\n};\n\ntype ExtensionInput = {\n validator?: FormValidator;\n form: {\n advanced: FormExtensionHandler;\n base: FormExtensionHandler;\n };\n};\n\nexport type FormAPI = {\n components: {\n inputs: Record<string, unknown>;\n add: ({ id, component }: { id: string; component: unknown }) => void;\n };\n types: {\n attribute: {\n [key: string]: ExtensionDefinition;\n };\n contentType: ExtensionDefinition;\n component: ExtensionDefinition;\n };\n contentTypeSchemaMutations: ContentTypeSchemaMutation[];\n addContentTypeSchemaMutation: (cb: ContentTypeSchemaMutation) => void;\n extendContentType: (data: ExtensionInput) => void;\n extendFields: (fields: string[], data: ExtensionInput) => void;\n getAdvancedForm: (target: string[], props?: unknown) => FormSection[];\n makeCustomFieldValidator: (\n attributeShape: YupObjectSchema,\n validator: FormValidator | undefined,\n ...validatorArgs: unknown[]\n ) => YupObjectSchema;\n makeValidator: (\n target: string[],\n initShape: YupObjectSchema,\n ...args: unknown[]\n ) => YupObjectSchema;\n mutateContentTypeSchema: (\n data: Record<string, unknown>,\n initialData: Record<string, unknown>\n ) => Record<string, unknown>;\n};\n\nexport const formsAPI: FormAPI = {\n components: {\n inputs: {},\n add({ id, component }) {\n if (this.inputs[id] === undefined) {\n this.inputs[id] = component;\n }\n },\n },\n types: {\n attribute: {\n // test: {\n // validators: [],\n // form: {\n // advanced: [\n // /* cb */\n // ],\n // base: [\n // /* cb */\n // ],\n // },\n // },\n },\n contentType: {\n validators: [],\n form: {\n advanced: [],\n base: [],\n },\n },\n component: {\n validators: [],\n form: {\n advanced: [],\n base: [],\n },\n },\n },\n contentTypeSchemaMutations: [],\n addContentTypeSchemaMutation(cb) {\n this.contentTypeSchemaMutations.push(cb);\n },\n extendContentType({ validator, form: { advanced, base } }) {\n const { contentType } = this.types;\n\n if (validator !== undefined) {\n contentType.validators.push(validator);\n }\n contentType.form.advanced.push(advanced);\n contentType.form.base.push(base);\n },\n extendFields(fields, { validator, form: { advanced, base } }) {\n const formType = this.types.attribute;\n\n fields.forEach((field) => {\n if (!formType[field]) {\n formType[field] = {\n validators: [],\n form: {\n advanced: [/* cb */],\n base: [/* cb */],\n },\n };\n }\n\n if (validator !== undefined) {\n formType[field].validators.push(validator);\n }\n formType[field].form.advanced.push(advanced);\n formType[field].form.base.push(base);\n });\n },\n\n getAdvancedForm(target, props = null) {\n const advancedForms = get(\n this.types,\n [...target, 'form', 'advanced'],\n []\n ) as FormExtensionHandler[];\n const sectionsToAdd = advancedForms.reduce<FormSection[]>((acc, current) => {\n const sections = current(props);\n\n return [...acc, ...sections];\n }, []);\n\n return sectionsToAdd;\n },\n\n makeCustomFieldValidator(attributeShape, validator, ...validatorArgs) {\n // When no validator, return the attribute shape\n if (validator === undefined) {\n return attributeShape;\n }\n\n // Otherwise extend the shape with the provided validator\n return attributeShape.shape({ options: yup.object().shape(validator(validatorArgs)) });\n },\n\n makeValidator(target, initShape, ...args) {\n const validators = get(this.types, [...target, 'validators'], []) as FormValidator[];\n\n const pluginOptionsShape = validators.reduce<YupObjectShape>((acc, current) => {\n const pluginOptionShape = current(args);\n\n return { ...acc, ...pluginOptionShape };\n }, {});\n\n return initShape.shape({ pluginOptions: yup.object().shape(pluginOptionsShape) });\n },\n mutateContentTypeSchema(data: Record<string, unknown>, initialData: Record<string, unknown>) {\n let enhancedData = cloneDeep(data);\n\n const refData = cloneDeep(initialData);\n\n this.contentTypeSchemaMutations.forEach((cb) => {\n enhancedData = cb(enhancedData, refData);\n });\n\n return enhancedData;\n },\n};\n"],"names":["formsAPI","components","inputs","add","id","component","undefined","types","attribute","contentType","validators","form","advanced","base","contentTypeSchemaMutations","addContentTypeSchemaMutation","cb","push","extendContentType","validator","extendFields","fields","formType","forEach","field","getAdvancedForm","target","props","advancedForms","get","sectionsToAdd","reduce","acc","current","sections","makeCustomFieldValidator","attributeShape","validatorArgs","shape","options","yup","object","makeValidator","initShape","args","pluginOptionsShape","pluginOptionShape","pluginOptions","mutateContentTypeSchema","data","initialData","enhancedData","cloneDeep","refData"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formAPI.mjs","sources":["../../../admin/src/utils/formAPI.ts"],"sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport * as yup from 'yup';\n\ntype YupObjectShape = Parameters<ReturnType<typeof yup.object>['shape']>[0];\ntype YupObjectSchema = ReturnType<typeof yup.object>;\ntype FormSection = unknown;\ntype FormExtensionHandler = (props?: unknown) => FormSection[];\ntype FormValidator = (args: unknown[]) => YupObjectShape;\ntype ContentTypeSchemaMutation = (\n data: Record<string, unknown>,\n initialData: Record<string, unknown>\n) => Record<string, unknown>;\n\ntype ExtensionForm = {\n advanced: FormExtensionHandler[];\n base: FormExtensionHandler[];\n};\n\ntype ExtensionDefinition = {\n validators: FormValidator[];\n form: ExtensionForm;\n};\n\ntype ExtensionInput = {\n validator?: FormValidator;\n form: {\n advanced: FormExtensionHandler;\n base: FormExtensionHandler;\n };\n};\n\nexport type FormAPI = {\n components: {\n inputs: Record<string, unknown>;\n add: ({ id, component }: { id: string; component: unknown }) => void;\n };\n types: {\n attribute: {\n [key: string]: ExtensionDefinition;\n };\n contentType: ExtensionDefinition;\n component: ExtensionDefinition;\n };\n contentTypeSchemaMutations: ContentTypeSchemaMutation[];\n addContentTypeSchemaMutation: (cb: ContentTypeSchemaMutation) => void;\n extendContentType: (data: ExtensionInput) => void;\n extendFields: (fields: string[], data: ExtensionInput) => void;\n getAdvancedForm: (target: string[], props?: unknown) => FormSection[];\n makeCustomFieldValidator: (\n attributeShape: YupObjectSchema,\n validator: FormValidator | undefined,\n ...validatorArgs: unknown[]\n ) => YupObjectSchema;\n makeValidator: (\n target: string[],\n initShape: YupObjectSchema,\n ...args: unknown[]\n ) => YupObjectSchema;\n mutateContentTypeSchema: (\n data: Record<string, unknown>,\n initialData: Record<string, unknown>\n ) => Record<string, unknown>;\n};\n\nexport const formsAPI: FormAPI = {\n components: {\n inputs: {},\n add({ id, component }) {\n if (this.inputs[id] === undefined) {\n this.inputs[id] = component;\n }\n },\n },\n types: {\n attribute: {\n // test: {\n // validators: [],\n // form: {\n // advanced: [\n // /* cb */\n // ],\n // base: [\n // /* cb */\n // ],\n // },\n // },\n },\n contentType: {\n validators: [],\n form: {\n advanced: [],\n base: [],\n },\n },\n component: {\n validators: [],\n form: {\n advanced: [],\n base: [],\n },\n },\n },\n contentTypeSchemaMutations: [],\n addContentTypeSchemaMutation(cb) {\n this.contentTypeSchemaMutations.push(cb);\n },\n extendContentType({ validator, form: { advanced, base } }) {\n const { contentType } = this.types;\n\n if (validator !== undefined) {\n contentType.validators.push(validator);\n }\n contentType.form.advanced.push(advanced);\n contentType.form.base.push(base);\n },\n extendFields(fields, { validator, form: { advanced, base } }) {\n const formType = this.types.attribute;\n\n fields.forEach((field) => {\n if (!formType[field]) {\n formType[field] = {\n validators: [],\n form: {\n advanced: [
|
|
1
|
+
{"version":3,"file":"formAPI.mjs","sources":["../../../admin/src/utils/formAPI.ts"],"sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport * as yup from 'yup';\n\ntype YupObjectShape = Parameters<ReturnType<typeof yup.object>['shape']>[0];\ntype YupObjectSchema = ReturnType<typeof yup.object>;\ntype FormSection = unknown;\ntype FormExtensionHandler = (props?: unknown) => FormSection[];\ntype FormValidator = (args: unknown[]) => YupObjectShape;\ntype ContentTypeSchemaMutation = (\n data: Record<string, unknown>,\n initialData: Record<string, unknown>\n) => Record<string, unknown>;\n\ntype ExtensionForm = {\n advanced: FormExtensionHandler[];\n base: FormExtensionHandler[];\n};\n\ntype ExtensionDefinition = {\n validators: FormValidator[];\n form: ExtensionForm;\n};\n\ntype ExtensionInput = {\n validator?: FormValidator;\n form: {\n advanced: FormExtensionHandler;\n base: FormExtensionHandler;\n };\n};\n\nexport type FormAPI = {\n components: {\n inputs: Record<string, unknown>;\n add: ({ id, component }: { id: string; component: unknown }) => void;\n };\n types: {\n attribute: {\n [key: string]: ExtensionDefinition;\n };\n contentType: ExtensionDefinition;\n component: ExtensionDefinition;\n };\n contentTypeSchemaMutations: ContentTypeSchemaMutation[];\n addContentTypeSchemaMutation: (cb: ContentTypeSchemaMutation) => void;\n extendContentType: (data: ExtensionInput) => void;\n extendFields: (fields: string[], data: ExtensionInput) => void;\n getAdvancedForm: (target: string[], props?: unknown) => FormSection[];\n makeCustomFieldValidator: (\n attributeShape: YupObjectSchema,\n validator: FormValidator | undefined,\n ...validatorArgs: unknown[]\n ) => YupObjectSchema;\n makeValidator: (\n target: string[],\n initShape: YupObjectSchema,\n ...args: unknown[]\n ) => YupObjectSchema;\n mutateContentTypeSchema: (\n data: Record<string, unknown>,\n initialData: Record<string, unknown>\n ) => Record<string, unknown>;\n};\n\nexport const formsAPI: FormAPI = {\n components: {\n inputs: {},\n add({ id, component }) {\n if (this.inputs[id] === undefined) {\n this.inputs[id] = component;\n }\n },\n },\n types: {\n attribute: {\n // test: {\n // validators: [],\n // form: {\n // advanced: [\n // /* cb */\n // ],\n // base: [\n // /* cb */\n // ],\n // },\n // },\n },\n contentType: {\n validators: [],\n form: {\n advanced: [],\n base: [],\n },\n },\n component: {\n validators: [],\n form: {\n advanced: [],\n base: [],\n },\n },\n },\n contentTypeSchemaMutations: [],\n addContentTypeSchemaMutation(cb) {\n this.contentTypeSchemaMutations.push(cb);\n },\n extendContentType({ validator, form: { advanced, base } }) {\n const { contentType } = this.types;\n\n if (validator !== undefined) {\n contentType.validators.push(validator);\n }\n contentType.form.advanced.push(advanced);\n contentType.form.base.push(base);\n },\n extendFields(fields, { validator, form: { advanced, base } }) {\n const formType = this.types.attribute;\n\n fields.forEach((field) => {\n if (!formType[field]) {\n formType[field] = {\n validators: [],\n form: {\n advanced: [/* cb */],\n base: [/* cb */],\n },\n };\n }\n\n if (validator !== undefined) {\n formType[field].validators.push(validator);\n }\n formType[field].form.advanced.push(advanced);\n formType[field].form.base.push(base);\n });\n },\n\n getAdvancedForm(target, props = null) {\n const advancedForms = get(\n this.types,\n [...target, 'form', 'advanced'],\n []\n ) as FormExtensionHandler[];\n const sectionsToAdd = advancedForms.reduce<FormSection[]>((acc, current) => {\n const sections = current(props);\n\n return [...acc, ...sections];\n }, []);\n\n return sectionsToAdd;\n },\n\n makeCustomFieldValidator(attributeShape, validator, ...validatorArgs) {\n // When no validator, return the attribute shape\n if (validator === undefined) {\n return attributeShape;\n }\n\n // Otherwise extend the shape with the provided validator\n return attributeShape.shape({ options: yup.object().shape(validator(validatorArgs)) });\n },\n\n makeValidator(target, initShape, ...args) {\n const validators = get(this.types, [...target, 'validators'], []) as FormValidator[];\n\n const pluginOptionsShape = validators.reduce<YupObjectShape>((acc, current) => {\n const pluginOptionShape = current(args);\n\n return { ...acc, ...pluginOptionShape };\n }, {});\n\n return initShape.shape({ pluginOptions: yup.object().shape(pluginOptionsShape) });\n },\n mutateContentTypeSchema(data: Record<string, unknown>, initialData: Record<string, unknown>) {\n let enhancedData = cloneDeep(data);\n\n const refData = cloneDeep(initialData);\n\n this.contentTypeSchemaMutations.forEach((cb) => {\n enhancedData = cb(enhancedData, refData);\n });\n\n return enhancedData;\n },\n};\n"],"names":["formsAPI","components","inputs","add","id","component","undefined","types","attribute","contentType","validators","form","advanced","base","contentTypeSchemaMutations","addContentTypeSchemaMutation","cb","push","extendContentType","validator","extendFields","fields","formType","forEach","field","getAdvancedForm","target","props","advancedForms","get","sectionsToAdd","reduce","acc","current","sections","makeCustomFieldValidator","attributeShape","validatorArgs","shape","options","yup","object","makeValidator","initShape","args","pluginOptionsShape","pluginOptionShape","pluginOptions","mutateContentTypeSchema","data","initialData","enhancedData","cloneDeep","refData"],"mappings":"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"}
|
|
@@ -73,7 +73,7 @@ const isValidDefaultJSON = {
|
|
|
73
73
|
if (val === undefined) {
|
|
74
74
|
return true;
|
|
75
75
|
}
|
|
76
|
-
if (___default.default.isNumber(val) || ___default.default.isNull(val) || ___default.default.isObject(val) ||
|
|
76
|
+
if (___default.default.isNumber(val) || ___default.default.isNull(val) || ___default.default.isObject(val) || Array.isArray(val)) {
|
|
77
77
|
return true;
|
|
78
78
|
}
|
|
79
79
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sources":["../../../../server/src/controllers/validation/common.ts"],"sourcesContent":["/* eslint-disable no-template-curly-in-string */\nimport { yup, strings } from '@strapi/utils';\nimport _ from 'lodash';\nimport { TestConfig } from 'yup';\n\nexport const validators = {\n required: yup.boolean(),\n unique: yup.boolean(),\n minLength: yup.number().integer().positive(),\n maxLength: yup.number().integer().positive(),\n};\n\nexport const NAME_REGEX = /^[A-Za-z][_0-9A-Za-z]*$/;\nexport const COLLECTION_NAME_REGEX = /^[A-Za-z][-_0-9A-Za-z]*$/;\nexport const CATEGORY_NAME_REGEX = /^[A-Za-z][-_0-9A-Za-z]*$/;\nexport const ICON_REGEX = /^[A-Za-z0-9][-A-Za-z0-9]*$/;\nexport const UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\nexport const KEBAB_BASE_REGEX = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n// Fully-qualified content-type uid: `api::a.a` / `plugin::p.p` / `strapi::x` / `admin::x`.\nexport const CONTENT_TYPE_UID_REGEX = /^((strapi|admin)::[\\w-]+|(api|plugin)::[\\w-]+\\.[\\w-]+)$/;\n\nexport type CommonTestConfig = TestConfig<unknown | undefined, Record<string, unknown>>;\n\nexport const isValidName: CommonTestConfig = {\n name: 'isValidName',\n message: `\\${path} must match the following regex: ${NAME_REGEX}`,\n test: (val: unknown) => val === '' || NAME_REGEX.test(val as string),\n};\n\nexport const isValidIcon: CommonTestConfig = {\n name: 'isValidIcon',\n message: `\\${path} is not a valid icon name. Make sure your icon name starts with an alphanumeric character and only includes alphanumeric characters or dashes.`,\n test: (val) => val === '' || ICON_REGEX.test(val as string),\n};\n\nexport const isValidUID: CommonTestConfig = {\n name: 'isValidUID',\n message: `\\${path} must match the following regex: ${UID_REGEX}`,\n test: (val) => val === '' || UID_REGEX.test(val as string),\n};\n\nexport const isValidCategoryName: CommonTestConfig = {\n name: 'isValidCategoryName',\n message: `\\${path} must start with a letter and only contain letters, numbers, dashes and underscores`,\n test: (val) => val === '' || CATEGORY_NAME_REGEX.test(val as string),\n};\n\nexport const isValidCollectionName: CommonTestConfig = {\n name: 'isValidCollectionName',\n message: `\\${path} must match the following regex: ${COLLECTION_NAME_REGEX}`,\n test: (val) => val === '' || COLLECTION_NAME_REGEX.test(val as string),\n};\n\nexport const isValidKey = (key: string): CommonTestConfig => ({\n name: 'isValidKey',\n message: `Attribute name '${key}' must match the following regex: ${NAME_REGEX}`,\n test: () => NAME_REGEX.test(key),\n});\n\nexport const isValidEnum: CommonTestConfig = {\n name: 'isValidEnum',\n message: '${path} should not start with number',\n test: (val) => val === '' || !strings.startsWithANumber(val as string),\n};\n\nexport const areEnumValuesUnique: CommonTestConfig = {\n name: 'areEnumValuesUnique',\n message: '${path} cannot contain duplicate values',\n test(values) {\n const filtered = [...new Set(values as string[])];\n\n return filtered.length === (values as string[]).length;\n },\n};\n\nexport const isValidRegExpPattern: CommonTestConfig = {\n name: 'isValidRegExpPattern',\n message: '${path} must be a valid RexExp pattern string',\n test: (val) => val === '' || !!new RegExp(val as string),\n};\n\nexport const isValidDefaultJSON: CommonTestConfig = {\n name: 'isValidDefaultJSON',\n message: '${path} is not a valid JSON',\n test(val) {\n if (val === undefined) {\n return true;\n }\n\n if (_.isNumber(val) || _.isNull(val) || _.isObject(val) ||
|
|
1
|
+
{"version":3,"file":"common.js","sources":["../../../../server/src/controllers/validation/common.ts"],"sourcesContent":["/* eslint-disable no-template-curly-in-string */\nimport { yup, strings } from '@strapi/utils';\nimport _ from 'lodash';\nimport { TestConfig } from 'yup';\n\nexport const validators = {\n required: yup.boolean(),\n unique: yup.boolean(),\n minLength: yup.number().integer().positive(),\n maxLength: yup.number().integer().positive(),\n};\n\nexport const NAME_REGEX = /^[A-Za-z][_0-9A-Za-z]*$/;\nexport const COLLECTION_NAME_REGEX = /^[A-Za-z][-_0-9A-Za-z]*$/;\nexport const CATEGORY_NAME_REGEX = /^[A-Za-z][-_0-9A-Za-z]*$/;\nexport const ICON_REGEX = /^[A-Za-z0-9][-A-Za-z0-9]*$/;\nexport const UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\nexport const KEBAB_BASE_REGEX = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n// Fully-qualified content-type uid: `api::a.a` / `plugin::p.p` / `strapi::x` / `admin::x`.\nexport const CONTENT_TYPE_UID_REGEX = /^((strapi|admin)::[\\w-]+|(api|plugin)::[\\w-]+\\.[\\w-]+)$/;\n\nexport type CommonTestConfig = TestConfig<unknown | undefined, Record<string, unknown>>;\n\nexport const isValidName: CommonTestConfig = {\n name: 'isValidName',\n message: `\\${path} must match the following regex: ${NAME_REGEX}`,\n test: (val: unknown) => val === '' || NAME_REGEX.test(val as string),\n};\n\nexport const isValidIcon: CommonTestConfig = {\n name: 'isValidIcon',\n message: `\\${path} is not a valid icon name. Make sure your icon name starts with an alphanumeric character and only includes alphanumeric characters or dashes.`,\n test: (val) => val === '' || ICON_REGEX.test(val as string),\n};\n\nexport const isValidUID: CommonTestConfig = {\n name: 'isValidUID',\n message: `\\${path} must match the following regex: ${UID_REGEX}`,\n test: (val) => val === '' || UID_REGEX.test(val as string),\n};\n\nexport const isValidCategoryName: CommonTestConfig = {\n name: 'isValidCategoryName',\n message: `\\${path} must start with a letter and only contain letters, numbers, dashes and underscores`,\n test: (val) => val === '' || CATEGORY_NAME_REGEX.test(val as string),\n};\n\nexport const isValidCollectionName: CommonTestConfig = {\n name: 'isValidCollectionName',\n message: `\\${path} must match the following regex: ${COLLECTION_NAME_REGEX}`,\n test: (val) => val === '' || COLLECTION_NAME_REGEX.test(val as string),\n};\n\nexport const isValidKey = (key: string): CommonTestConfig => ({\n name: 'isValidKey',\n message: `Attribute name '${key}' must match the following regex: ${NAME_REGEX}`,\n test: () => NAME_REGEX.test(key),\n});\n\nexport const isValidEnum: CommonTestConfig = {\n name: 'isValidEnum',\n message: '${path} should not start with number',\n test: (val) => val === '' || !strings.startsWithANumber(val as string),\n};\n\nexport const areEnumValuesUnique: CommonTestConfig = {\n name: 'areEnumValuesUnique',\n message: '${path} cannot contain duplicate values',\n test(values) {\n const filtered = [...new Set(values as string[])];\n\n return filtered.length === (values as string[]).length;\n },\n};\n\nexport const isValidRegExpPattern: CommonTestConfig = {\n name: 'isValidRegExpPattern',\n message: '${path} must be a valid RexExp pattern string',\n test: (val) => val === '' || !!new RegExp(val as string),\n};\n\nexport const isValidDefaultJSON: CommonTestConfig = {\n name: 'isValidDefaultJSON',\n message: '${path} is not a valid JSON',\n test(val) {\n if (val === undefined) {\n return true;\n }\n\n if (_.isNumber(val) || _.isNull(val) || _.isObject(val) || Array.isArray(val)) {\n return true;\n }\n\n try {\n JSON.parse(val as string);\n\n return true;\n } catch {\n return false;\n }\n },\n};\n"],"names":["validators","required","yup","boolean","unique","minLength","number","integer","positive","maxLength","NAME_REGEX","COLLECTION_NAME_REGEX","CATEGORY_NAME_REGEX","ICON_REGEX","UID_REGEX","KEBAB_BASE_REGEX","CONTENT_TYPE_UID_REGEX","isValidName","name","message","test","val","isValidIcon","isValidCategoryName","isValidCollectionName","isValidKey","key","isValidEnum","strings","startsWithANumber","areEnumValuesUnique","values","filtered","Set","length","isValidRegExpPattern","RegExp","isValidDefaultJSON","undefined","_","isNumber","isNull","isObject","Array","isArray","JSON","parse"],"mappings":"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"}
|
|
@@ -67,7 +67,7 @@ const isValidDefaultJSON = {
|
|
|
67
67
|
if (val === undefined) {
|
|
68
68
|
return true;
|
|
69
69
|
}
|
|
70
|
-
if (_.isNumber(val) || _.isNull(val) || _.isObject(val) ||
|
|
70
|
+
if (_.isNumber(val) || _.isNull(val) || _.isObject(val) || Array.isArray(val)) {
|
|
71
71
|
return true;
|
|
72
72
|
}
|
|
73
73
|
try {
|