@payloadcms/ui 3.0.0-alpha.49 → 3.0.0-alpha.50
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/elements/Autosave/index.d.ts.map +1 -1
- package/dist/elements/Autosave/index.js +2 -43
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/ColumnSelector/index.d.ts.map +1 -1
- package/dist/elements/ColumnSelector/index.js +2 -5
- package/dist/elements/ColumnSelector/index.js.map +1 -1
- package/dist/elements/DeleteDocument/index.js +2 -2
- package/dist/elements/DeleteDocument/index.js.map +1 -1
- package/dist/elements/DocumentControls/index.d.ts.map +1 -1
- package/dist/elements/DocumentControls/index.js +13 -4
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.js +31 -112
- package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/DocumentDrawer/types.d.ts +0 -2
- package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/types.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.d.ts +1 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +8 -2
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js +1 -0
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/index.js +4 -0
- package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
- package/dist/elements/EditMany/index.d.ts.map +1 -1
- package/dist/elements/EditMany/index.js +3 -25
- package/dist/elements/EditMany/index.js.map +1 -1
- package/dist/elements/FieldSelect/index.d.ts.map +1 -1
- package/dist/elements/FieldSelect/index.js +39 -12
- package/dist/elements/FieldSelect/index.js.map +1 -1
- package/dist/elements/FileDetails/index.d.ts.map +1 -1
- package/dist/elements/FileDetails/index.js +2 -1
- package/dist/elements/FileDetails/index.js.map +1 -1
- package/dist/elements/ListControls/index.d.ts +0 -1
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +7 -6
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.js +5 -9
- package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/Nav/index.client.d.ts +3 -0
- package/dist/elements/Nav/index.client.d.ts.map +1 -0
- package/dist/elements/Nav/index.client.js +77 -0
- package/dist/elements/Nav/index.client.js.map +1 -0
- package/dist/elements/Nav/index.d.ts +3 -7
- package/dist/elements/Nav/index.d.ts.map +1 -1
- package/dist/elements/Nav/index.js +4 -66
- package/dist/elements/Nav/index.js.map +1 -1
- package/dist/elements/PerPage/index.d.ts +1 -0
- package/dist/elements/PerPage/index.d.ts.map +1 -1
- package/dist/elements/PerPage/index.js +6 -4
- package/dist/elements/PerPage/index.js.map +1 -1
- package/dist/elements/PreviewButton/index.d.ts +4 -6
- package/dist/elements/PreviewButton/index.d.ts.map +1 -1
- package/dist/elements/PreviewButton/index.js +11 -65
- package/dist/elements/PreviewButton/index.js.map +1 -1
- package/dist/elements/PreviewButton/usePreviewURL.d.ts +9 -0
- package/dist/elements/PreviewButton/usePreviewURL.d.ts.map +1 -0
- package/dist/elements/PreviewButton/usePreviewURL.js +57 -0
- package/dist/elements/PreviewButton/usePreviewURL.js.map +1 -0
- package/dist/elements/Publish/index.d.ts +4 -2
- package/dist/elements/Publish/index.d.ts.map +1 -1
- package/dist/elements/Publish/index.js +15 -25
- package/dist/elements/Publish/index.js.map +1 -1
- package/dist/elements/ReactSelect/MultiValue/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/MultiValue/index.js +2 -1
- package/dist/elements/ReactSelect/MultiValue/index.js.map +1 -1
- package/dist/elements/ReactSelect/ValueContainer/index.scss +4 -0
- package/dist/elements/ReactSelect/index.d.ts.map +1 -1
- package/dist/elements/ReactSelect/index.js +4 -1
- package/dist/elements/ReactSelect/index.js.map +1 -1
- package/dist/elements/ReactSelect/types.d.ts +2 -0
- package/dist/elements/ReactSelect/types.d.ts.map +1 -1
- package/dist/elements/ReactSelect/types.js.map +1 -1
- package/dist/elements/Save/index.d.ts +4 -2
- package/dist/elements/Save/index.d.ts.map +1 -1
- package/dist/elements/Save/index.js +7 -14
- package/dist/elements/Save/index.js.map +1 -1
- package/dist/elements/SaveDraft/index.d.ts +1 -2
- package/dist/elements/SaveDraft/index.d.ts.map +1 -1
- package/dist/elements/SaveDraft/index.js +33 -42
- package/dist/elements/SaveDraft/index.js.map +1 -1
- package/dist/elements/SortColumn/index.d.ts +3 -1
- package/dist/elements/SortColumn/index.d.ts.map +1 -1
- package/dist/elements/SortColumn/index.js +5 -6
- package/dist/elements/SortColumn/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Array/index.d.ts +3 -3
- package/dist/elements/Table/DefaultCell/fields/Array/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Array/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Blocks/index.d.ts +4 -4
- package/dist/elements/Table/DefaultCell/fields/Blocks/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Blocks/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Checkbox/index.d.ts +2 -2
- package/dist/elements/Table/DefaultCell/fields/Checkbox/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Checkbox/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Code/index.d.ts +2 -2
- package/dist/elements/Table/DefaultCell/fields/Code/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Code/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Date/index.d.ts +2 -5
- package/dist/elements/Table/DefaultCell/fields/Date/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Date/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/File/index.d.ts +2 -2
- package/dist/elements/Table/DefaultCell/fields/File/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/File/index.js +4 -3
- package/dist/elements/Table/DefaultCell/fields/File/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/JSON/index.d.ts +2 -2
- package/dist/elements/Table/DefaultCell/fields/JSON/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/JSON/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.d.ts +4 -4
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Relationship/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Select/index.d.ts +3 -3
- package/dist/elements/Table/DefaultCell/fields/Select/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Select/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Textarea/index.d.ts +2 -2
- package/dist/elements/Table/DefaultCell/fields/Textarea/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Textarea/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/index.d.ts +4 -4
- package/dist/elements/Table/DefaultCell/index.d.ts +2 -2
- package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +4 -2
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/Table/TableCellProvider/index.d.ts +11 -11
- package/dist/elements/Table/TableCellProvider/index.d.ts.map +1 -1
- package/dist/elements/Table/TableCellProvider/index.js.map +1 -1
- package/dist/elements/Table/index.d.ts +8 -4
- package/dist/elements/Table/index.d.ts.map +1 -1
- package/dist/elements/Table/index.js +1 -0
- package/dist/elements/Table/index.js.map +1 -1
- package/dist/elements/TableColumns/{buildColumns.d.ts → buildColumnState.d.ts} +8 -6
- package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -0
- package/dist/elements/TableColumns/{buildColumns.js → buildColumnState.js} +37 -13
- package/dist/elements/TableColumns/buildColumnState.js.map +1 -0
- package/dist/elements/TableColumns/filterFields.d.ts +3 -0
- package/dist/elements/TableColumns/filterFields.d.ts.map +1 -0
- package/dist/elements/TableColumns/filterFields.js +27 -0
- package/dist/elements/TableColumns/filterFields.js.map +1 -0
- package/dist/elements/TableColumns/getInitialColumns.d.ts +5 -0
- package/dist/elements/TableColumns/getInitialColumns.d.ts.map +1 -0
- package/dist/elements/TableColumns/getInitialColumns.js +48 -0
- package/dist/elements/TableColumns/getInitialColumns.js.map +1 -0
- package/dist/elements/TableColumns/index.d.ts +2 -2
- package/dist/elements/TableColumns/index.d.ts.map +1 -1
- package/dist/elements/TableColumns/index.js +11 -7
- package/dist/elements/TableColumns/index.js.map +1 -1
- package/dist/elements/Thumbnail/index.d.ts +6 -0
- package/dist/elements/Thumbnail/index.d.ts.map +1 -1
- package/dist/elements/Thumbnail/index.js +32 -16
- package/dist/elements/Thumbnail/index.js.map +1 -1
- package/dist/elements/ThumbnailCard/index.d.ts +1 -1
- package/dist/elements/ThumbnailCard/index.d.ts.map +1 -1
- package/dist/elements/ThumbnailCard/index.js +2 -6
- package/dist/elements/ThumbnailCard/index.js.map +1 -1
- package/dist/elements/Tooltip/index.scss +4 -4
- package/dist/elements/Translation/index.d.ts.map +1 -1
- package/dist/elements/Translation/index.js +12 -9
- package/dist/elements/Translation/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js +11 -7
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/index.d.ts +21 -4
- package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/Condition/index.js +45 -61
- package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/index.scss +6 -0
- package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/index.js +134 -55
- package/dist/elements/WhereBuilder/index.js.map +1 -1
- package/dist/elements/WhereBuilder/reduceFieldMap.d.ts +3 -0
- package/dist/elements/WhereBuilder/reduceFieldMap.d.ts.map +1 -0
- package/dist/elements/WhereBuilder/reduceFieldMap.js +36 -0
- package/dist/elements/WhereBuilder/reduceFieldMap.js.map +1 -0
- package/dist/elements/withMergedProps/index.js +1 -1
- package/dist/elements/withMergedProps/index.js.map +1 -1
- package/dist/fields/Array/ArrayRow.d.ts +2 -0
- package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
- package/dist/fields/Array/ArrayRow.js +3 -3
- package/dist/fields/Array/ArrayRow.js.map +1 -1
- package/dist/fields/Array/index.d.ts +1 -1
- package/dist/fields/Array/index.d.ts.map +1 -1
- package/dist/fields/Array/index.js +23 -8
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Blocks/BlockRow.d.ts +1 -0
- package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
- package/dist/fields/Blocks/BlockRow.js +2 -3
- package/dist/fields/Blocks/BlockRow.js.map +1 -1
- package/dist/fields/Blocks/index.d.ts +0 -1
- package/dist/fields/Blocks/index.d.ts.map +1 -1
- package/dist/fields/Blocks/index.js +17 -5
- package/dist/fields/Blocks/index.js.map +1 -1
- package/dist/fields/Checkbox/Input.d.ts +2 -1
- package/dist/fields/Checkbox/Input.d.ts.map +1 -1
- package/dist/fields/Checkbox/Input.js +3 -1
- package/dist/fields/Checkbox/Input.js.map +1 -1
- package/dist/fields/Checkbox/index.d.ts.map +1 -1
- package/dist/fields/Checkbox/index.js +6 -2
- package/dist/fields/Checkbox/index.js.map +1 -1
- package/dist/fields/Code/index.d.ts.map +1 -1
- package/dist/fields/Code/index.js +8 -3
- package/dist/fields/Code/index.js.map +1 -1
- package/dist/fields/Collapsible/index.d.ts +2 -1
- package/dist/fields/Collapsible/index.d.ts.map +1 -1
- package/dist/fields/Collapsible/index.js +4 -3
- package/dist/fields/Collapsible/index.js.map +1 -1
- package/dist/fields/DateTime/index.d.ts.map +1 -1
- package/dist/fields/DateTime/index.js +7 -2
- package/dist/fields/DateTime/index.js.map +1 -1
- package/dist/fields/Email/index.d.ts.map +1 -1
- package/dist/fields/Email/index.js +7 -2
- package/dist/fields/Email/index.js.map +1 -1
- package/dist/fields/Group/index.d.ts +0 -1
- package/dist/fields/Group/index.d.ts.map +1 -1
- package/dist/fields/Group/index.js +9 -8
- package/dist/fields/Group/index.js.map +1 -1
- package/dist/fields/HiddenInput/index.d.ts +1 -0
- package/dist/fields/HiddenInput/index.d.ts.map +1 -1
- package/dist/fields/HiddenInput/index.js +4 -2
- package/dist/fields/HiddenInput/index.js.map +1 -1
- package/dist/fields/JSON/index.d.ts.map +1 -1
- package/dist/fields/JSON/index.js +8 -4
- package/dist/fields/JSON/index.js.map +1 -1
- package/dist/fields/Number/index.d.ts.map +1 -1
- package/dist/fields/Number/index.js +7 -2
- package/dist/fields/Number/index.js.map +1 -1
- package/dist/fields/Password/index.d.ts +0 -1
- package/dist/fields/Password/index.d.ts.map +1 -1
- package/dist/fields/Password/index.js +5 -2
- package/dist/fields/Password/index.js.map +1 -1
- package/dist/fields/Point/index.d.ts.map +1 -1
- package/dist/fields/Point/index.js +15 -10
- package/dist/fields/Point/index.js.map +1 -1
- package/dist/fields/RadioGroup/index.d.ts.map +1 -1
- package/dist/fields/RadioGroup/index.js +7 -2
- package/dist/fields/RadioGroup/index.js.map +1 -1
- package/dist/fields/Relationship/index.d.ts.map +1 -1
- package/dist/fields/Relationship/index.js +45 -14
- package/dist/fields/Relationship/index.js.map +1 -1
- package/dist/fields/Relationship/types.d.ts +3 -1
- package/dist/fields/Relationship/types.d.ts.map +1 -1
- package/dist/fields/Relationship/types.js.map +1 -1
- package/dist/fields/RichText/index.d.ts +2 -0
- package/dist/fields/RichText/index.d.ts.map +1 -1
- package/dist/fields/RichText/index.js.map +1 -1
- package/dist/fields/Row/index.d.ts.map +1 -1
- package/dist/fields/Row/index.js +2 -1
- package/dist/fields/Row/index.js.map +1 -1
- package/dist/fields/Select/index.d.ts +0 -1
- package/dist/fields/Select/index.d.ts.map +1 -1
- package/dist/fields/Select/index.js +8 -3
- package/dist/fields/Select/index.js.map +1 -1
- package/dist/fields/Tabs/index.d.ts +0 -1
- package/dist/fields/Tabs/index.d.ts.map +1 -1
- package/dist/fields/Tabs/index.js +2 -2
- package/dist/fields/Tabs/index.js.map +1 -1
- package/dist/fields/Text/Input.d.ts.map +1 -1
- package/dist/fields/Text/Input.js +4 -1
- package/dist/fields/Text/Input.js.map +1 -1
- package/dist/fields/Text/index.d.ts.map +1 -1
- package/dist/fields/Text/index.js +3 -1
- package/dist/fields/Text/index.js.map +1 -1
- package/dist/fields/Textarea/Input.d.ts.map +1 -1
- package/dist/fields/Textarea/Input.js +4 -1
- package/dist/fields/Textarea/Input.js.map +1 -1
- package/dist/fields/Textarea/index.d.ts.map +1 -1
- package/dist/fields/Textarea/index.js +3 -1
- package/dist/fields/Textarea/index.js.map +1 -1
- package/dist/fields/Upload/Input.d.ts.map +1 -1
- package/dist/fields/Upload/Input.js +10 -8
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/fields/Upload/index.d.ts.map +1 -1
- package/dist/fields/Upload/index.js +6 -2
- package/dist/fields/Upload/index.js.map +1 -1
- package/dist/fields/shared/index.d.ts +1 -2
- package/dist/fields/shared/index.d.ts.map +1 -1
- package/dist/fields/shared/index.js.map +1 -1
- package/dist/forms/FieldDescription/index.d.ts +1 -2
- package/dist/forms/FieldDescription/index.d.ts.map +1 -1
- package/dist/forms/FieldDescription/index.js.map +1 -1
- package/dist/forms/FieldError/index.js +1 -1
- package/dist/forms/FieldError/index.js.map +1 -1
- package/dist/forms/FieldLabel/index.d.ts.map +1 -1
- package/dist/forms/FieldLabel/index.js +4 -4
- package/dist/forms/FieldLabel/index.js.map +1 -1
- package/dist/forms/FieldLabel/index.scss +1 -1
- package/dist/forms/FieldPropsProvider/index.d.ts +5 -0
- package/dist/forms/FieldPropsProvider/index.d.ts.map +1 -1
- package/dist/forms/FieldPropsProvider/index.js +5 -1
- package/dist/forms/FieldPropsProvider/index.js.map +1 -1
- package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
- package/dist/forms/Form/fieldReducer.js +6 -8
- package/dist/forms/Form/fieldReducer.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +37 -20
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/initContextState.d.ts.map +1 -1
- package/dist/forms/Form/initContextState.js +1 -0
- package/dist/forms/Form/initContextState.js.map +1 -1
- package/dist/forms/Form/mergeErrorPaths.d.ts +5 -0
- package/dist/forms/Form/mergeErrorPaths.d.ts.map +1 -0
- package/dist/forms/Form/mergeErrorPaths.js +29 -0
- package/dist/forms/Form/mergeErrorPaths.js.map +1 -0
- package/dist/forms/Form/mergeServerFormState.d.ts +1 -1
- package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
- package/dist/forms/Form/mergeServerFormState.js +36 -19
- package/dist/forms/Form/mergeServerFormState.js.map +1 -1
- package/dist/forms/Form/types.d.ts +8 -2
- package/dist/forms/Form/types.d.ts.map +1 -1
- package/dist/forms/Form/types.js.map +1 -1
- package/dist/forms/RenderFields/RenderField.d.ts +1 -0
- package/dist/forms/RenderFields/RenderField.d.ts.map +1 -1
- package/dist/forms/RenderFields/RenderField.js +12 -4
- package/dist/forms/RenderFields/RenderField.js.map +1 -1
- package/dist/forms/RenderFields/index.d.ts.map +1 -1
- package/dist/forms/RenderFields/index.js +3 -3
- package/dist/forms/RenderFields/index.js.map +1 -1
- package/dist/forms/RenderFields/types.d.ts +1 -0
- package/dist/forms/RenderFields/types.d.ts.map +1 -1
- package/dist/forms/RenderFields/types.js.map +1 -1
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.d.ts +4 -3
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.js +67 -42
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.js.map +1 -1
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.d.ts +11 -0
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.d.ts.map +1 -0
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.js +13 -0
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.js.map +1 -0
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.d.ts +11 -0
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.d.ts.map +1 -0
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.js +16 -0
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.js.map +1 -0
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.d.ts +12 -0
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.d.ts.map +1 -0
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.js +122 -0
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.js.map +1 -0
- package/dist/forms/buildStateFromSchema/index.d.ts +1 -0
- package/dist/forms/buildStateFromSchema/index.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/index.js +10 -2
- package/dist/forms/buildStateFromSchema/index.js.map +1 -1
- package/dist/forms/buildStateFromSchema/iterateFields.d.ts +2 -2
- package/dist/forms/buildStateFromSchema/iterateFields.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/iterateFields.js +4 -3
- package/dist/forms/buildStateFromSchema/iterateFields.js.map +1 -1
- package/dist/forms/useField/index.d.ts.map +1 -1
- package/dist/forms/useField/index.js +32 -12
- package/dist/forms/useField/index.js.map +1 -1
- package/dist/forms/useField/types.d.ts +1 -0
- package/dist/forms/useField/types.d.ts.map +1 -1
- package/dist/forms/useField/types.js.map +1 -1
- package/dist/forms/withCondition/WatchCondition.d.ts +3 -0
- package/dist/forms/withCondition/WatchCondition.d.ts.map +1 -1
- package/dist/forms/withCondition/WatchCondition.js +10 -2
- package/dist/forms/withCondition/WatchCondition.js.map +1 -1
- package/dist/forms/withCondition/index.js +4 -2
- package/dist/forms/withCondition/index.js.map +1 -1
- package/dist/hooks/usePayloadAPI.js +1 -1
- package/dist/hooks/usePayloadAPI.js.map +1 -1
- package/dist/hooks/useUseAsTitle.d.ts +3 -2
- package/dist/hooks/useUseAsTitle.d.ts.map +1 -1
- package/dist/hooks/useUseAsTitle.js +5 -6
- package/dist/hooks/useUseAsTitle.js.map +1 -1
- package/dist/providers/ClientFunction/index.d.ts.map +1 -1
- package/dist/providers/ClientFunction/index.js +27 -5
- package/dist/providers/ClientFunction/index.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/{mapActions.d.ts → actions.d.ts} +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/actions.d.ts.map +1 -0
- package/dist/providers/ComponentMap/buildComponentMap/{mapActions.js → actions.js} +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/actions.js.map +1 -0
- package/dist/providers/ComponentMap/buildComponentMap/collections.d.ts +13 -0
- package/dist/providers/ComponentMap/buildComponentMap/collections.d.ts.map +1 -0
- package/dist/providers/ComponentMap/buildComponentMap/collections.js +74 -0
- package/dist/providers/ComponentMap/buildComponentMap/collections.js.map +1 -0
- package/dist/providers/ComponentMap/buildComponentMap/{mapFields.d.ts → fields.d.ts} +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/fields.d.ts.map +1 -0
- package/dist/providers/ComponentMap/buildComponentMap/{mapFields.js → fields.js} +43 -23
- package/dist/providers/ComponentMap/buildComponentMap/fields.js.map +1 -0
- package/dist/providers/ComponentMap/buildComponentMap/globals.d.ts +12 -0
- package/dist/providers/ComponentMap/buildComponentMap/globals.d.ts.map +1 -0
- package/dist/providers/ComponentMap/buildComponentMap/globals.js +49 -0
- package/dist/providers/ComponentMap/buildComponentMap/globals.js.map +1 -0
- package/dist/providers/ComponentMap/buildComponentMap/index.d.ts +2 -2
- package/dist/providers/ComponentMap/buildComponentMap/index.d.ts.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/index.js +16 -83
- package/dist/providers/ComponentMap/buildComponentMap/index.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/types.d.ts +8 -3
- package/dist/providers/ComponentMap/buildComponentMap/types.d.ts.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/types.js.map +1 -1
- package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/index.js +120 -96
- package/dist/providers/DocumentInfo/index.js.map +1 -1
- package/dist/providers/DocumentInfo/types.d.ts +12 -13
- package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/types.js.map +1 -1
- package/dist/providers/EntityVisibility/index.d.ts +16 -0
- package/dist/providers/EntityVisibility/index.d.ts.map +1 -0
- package/dist/providers/EntityVisibility/index.js +25 -0
- package/dist/providers/EntityVisibility/index.js.map +1 -0
- package/dist/providers/ListInfo/index.d.ts +0 -1
- package/dist/providers/ListInfo/index.d.ts.map +1 -1
- package/dist/providers/ListInfo/index.js +2 -7
- package/dist/providers/ListInfo/index.js.map +1 -1
- package/dist/templates/Default/index.d.ts +2 -7
- package/dist/templates/Default/index.d.ts.map +1 -1
- package/dist/templates/Default/index.js +10 -12
- package/dist/templates/Default/index.js.map +1 -1
- package/dist/utilities/buildComponentMap.d.ts +1 -1
- package/dist/utilities/buildComponentMap.d.ts.map +1 -1
- package/dist/utilities/buildComponentMap.js +1 -1
- package/dist/utilities/buildComponentMap.js.map +1 -1
- package/dist/utilities/flattenFieldMap.d.ts +10 -0
- package/dist/utilities/flattenFieldMap.d.ts.map +1 -0
- package/dist/utilities/flattenFieldMap.js +33 -0
- package/dist/utilities/flattenFieldMap.js.map +1 -0
- package/dist/utilities/getFormState.d.ts +2 -0
- package/dist/utilities/getFormState.d.ts.map +1 -1
- package/dist/utilities/getFormState.js +8 -3
- package/dist/utilities/getFormState.js.map +1 -1
- package/package.json +10 -4
- package/dist/elements/TableColumns/buildColumns.d.ts.map +0 -1
- package/dist/elements/TableColumns/buildColumns.js.map +0 -1
- package/dist/elements/WhereBuilder/reducer.d.ts +0 -5
- package/dist/elements/WhereBuilder/reducer.d.ts.map +0 -1
- package/dist/elements/WhereBuilder/reducer.js +0 -78
- package/dist/elements/WhereBuilder/reducer.js.map +0 -1
- package/dist/forms/FieldDescription/types.d.ts +0 -8
- package/dist/forms/FieldDescription/types.d.ts.map +0 -1
- package/dist/forms/FieldDescription/types.js +0 -3
- package/dist/forms/FieldDescription/types.js.map +0 -1
- package/dist/hooks/useAdminThumbnail.d.ts +0 -3
- package/dist/hooks/useAdminThumbnail.d.ts.map +0 -1
- package/dist/hooks/useAdminThumbnail.js +0 -8
- package/dist/hooks/useAdminThumbnail.js.map +0 -1
- package/dist/hooks/useThumbnail.d.ts +0 -3
- package/dist/hooks/useThumbnail.d.ts.map +0 -1
- package/dist/hooks/useThumbnail.js +0 -45
- package/dist/hooks/useThumbnail.js.map +0 -1
- package/dist/providers/ComponentMap/buildComponentMap/mapActions.d.ts.map +0 -1
- package/dist/providers/ComponentMap/buildComponentMap/mapActions.js.map +0 -1
- package/dist/providers/ComponentMap/buildComponentMap/mapFields.d.ts.map +0 -1
- package/dist/providers/ComponentMap/buildComponentMap/mapFields.js.map +0 -1
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { FieldDescription } from '@payloadcms/ui/forms/FieldDescription';
|
|
3
3
|
import { FieldError } from '@payloadcms/ui/forms/FieldError';
|
|
4
4
|
import { FieldLabel } from '@payloadcms/ui/forms/FieldLabel';
|
|
5
|
+
import { useFieldProps } from '@payloadcms/ui/forms/FieldPropsProvider';
|
|
5
6
|
import { wordBoundariesRegex } from 'payload/utilities';
|
|
6
7
|
import qs from 'qs';
|
|
7
8
|
import React, { useCallback, useEffect, useReducer, useRef, useState } from 'react';
|
|
@@ -24,7 +25,7 @@ import { SingleValue } from './select-components/SingleValue/index.js';
|
|
|
24
25
|
const maxResultsPerRequest = 10;
|
|
25
26
|
const baseClass = 'relationship';
|
|
26
27
|
const RelationshipField = (props)=>{
|
|
27
|
-
const { name, CustomDescription, CustomError, CustomLabel, allowCreate = true, className, descriptionProps, errorProps, hasMany, isSortable = true, labelProps, path: pathFromProps, readOnly, relationTo, required, sortOptions, style, validate, width } = props;
|
|
28
|
+
const { name, CustomDescription, CustomError, CustomLabel, allowCreate = true, className, descriptionProps, errorProps, hasMany, isSortable = true, label, labelProps, path: pathFromProps, readOnly, relationTo, required, sortOptions, style, validate, width } = props;
|
|
28
29
|
const config = useConfig();
|
|
29
30
|
const { collections, routes: { api }, serverURL } = config;
|
|
30
31
|
const { i18n, t } = useTranslation();
|
|
@@ -38,9 +39,9 @@ const RelationshipField = (props)=>{
|
|
|
38
39
|
const [errorLoading, setErrorLoading] = useState('');
|
|
39
40
|
const [search, setSearch] = useState('');
|
|
40
41
|
const [isLoading, setIsLoading] = useState(false);
|
|
41
|
-
const [hasLoadedFirstPage, setHasLoadedFirstPage] = useState(false);
|
|
42
42
|
const [enableWordBoundarySearch, setEnableWordBoundarySearch] = useState(false);
|
|
43
|
-
const
|
|
43
|
+
const menuIsOpen = useRef(false);
|
|
44
|
+
const hasLoadedFirstPageRef = useRef(false);
|
|
44
45
|
const memoizedValidate = useCallback((value, validationOptions)=>{
|
|
45
46
|
if (typeof validate === 'function') {
|
|
46
47
|
return validate(value, {
|
|
@@ -52,12 +53,15 @@ const RelationshipField = (props)=>{
|
|
|
52
53
|
validate,
|
|
53
54
|
required
|
|
54
55
|
]);
|
|
56
|
+
const { path: pathFromContext } = useFieldProps();
|
|
55
57
|
const { filterOptions, initialValue, path, setValue, showError, value } = useField({
|
|
56
|
-
path: pathFromProps || name,
|
|
58
|
+
path: pathFromContext || pathFromProps || name,
|
|
57
59
|
validate: memoizedValidate
|
|
58
60
|
});
|
|
61
|
+
const valueRef = useRef(value);
|
|
62
|
+
valueRef.current = value;
|
|
59
63
|
const [drawerIsOpen, setDrawerIsOpen] = useState(false);
|
|
60
|
-
const getResults = useCallback(async ({ lastFullyLoadedRelation: lastFullyLoadedRelationArg, onSuccess, search: searchArg, sort, value: valueArg })=>{
|
|
64
|
+
const getResults = useCallback(async ({ lastFullyLoadedRelation: lastFullyLoadedRelationArg, lastLoadedPage: lastLoadedPageArg, onSuccess, search: searchArg, sort, value: valueArg })=>{
|
|
61
65
|
if (!permissions) {
|
|
62
66
|
return;
|
|
63
67
|
}
|
|
@@ -79,7 +83,7 @@ const RelationshipField = (props)=>{
|
|
|
79
83
|
if (search !== searchArg) {
|
|
80
84
|
lastLoadedPageToUse = 1;
|
|
81
85
|
} else {
|
|
82
|
-
lastLoadedPageToUse =
|
|
86
|
+
lastLoadedPageToUse = lastLoadedPageArg[relation] + 1;
|
|
83
87
|
}
|
|
84
88
|
await priorRelation;
|
|
85
89
|
if (relationFilterOption === false) {
|
|
@@ -179,7 +183,6 @@ const RelationshipField = (props)=>{
|
|
|
179
183
|
hasMany,
|
|
180
184
|
errorLoading,
|
|
181
185
|
search,
|
|
182
|
-
lastLoadedPage,
|
|
183
186
|
collections,
|
|
184
187
|
locale,
|
|
185
188
|
filterOptions,
|
|
@@ -192,6 +195,7 @@ const RelationshipField = (props)=>{
|
|
|
192
195
|
]);
|
|
193
196
|
const updateSearch = useDebouncedCallback((searchArg, valueArg)=>{
|
|
194
197
|
void getResults({
|
|
198
|
+
lastLoadedPage: {},
|
|
195
199
|
search: searchArg,
|
|
196
200
|
sort: true,
|
|
197
201
|
value: valueArg
|
|
@@ -292,20 +296,38 @@ const RelationshipField = (props)=>{
|
|
|
292
296
|
// When (`relationTo` || `filterOptions` || `locale`) changes, reset component
|
|
293
297
|
// Note - effect should not run on first run
|
|
294
298
|
useEffect(()=>{
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
299
|
+
// If the menu is open while filterOptions changes
|
|
300
|
+
// due to latency of getFormState and fast clicking into this field,
|
|
301
|
+
// re-fetch options
|
|
302
|
+
if (hasLoadedFirstPageRef.current && menuIsOpen.current) {
|
|
303
|
+
setIsLoading(true);
|
|
304
|
+
void getResults({
|
|
305
|
+
lastLoadedPage: {},
|
|
306
|
+
onSuccess: ()=>{
|
|
307
|
+
hasLoadedFirstPageRef.current = true;
|
|
308
|
+
setIsLoading(false);
|
|
309
|
+
},
|
|
310
|
+
value: valueRef.current
|
|
311
|
+
});
|
|
298
312
|
}
|
|
313
|
+
// If the menu is not open, still reset the field state
|
|
314
|
+
// because we need to get new options next time the menu
|
|
315
|
+
// opens by the user
|
|
299
316
|
dispatchOptions({
|
|
300
317
|
type: 'CLEAR'
|
|
301
318
|
});
|
|
302
319
|
setLastFullyLoadedRelation(-1);
|
|
303
320
|
setLastLoadedPage({});
|
|
304
|
-
|
|
321
|
+
hasLoadedFirstPageRef.current = false;
|
|
305
322
|
}, [
|
|
306
323
|
relationTo,
|
|
307
324
|
filterOptions,
|
|
308
|
-
locale
|
|
325
|
+
locale,
|
|
326
|
+
menuIsOpen,
|
|
327
|
+
getResults,
|
|
328
|
+
valueRef,
|
|
329
|
+
hasLoadedFirstPageRef,
|
|
330
|
+
path
|
|
309
331
|
]);
|
|
310
332
|
const onSave = useCallback((args)=>{
|
|
311
333
|
dispatchOptions({
|
|
@@ -361,9 +383,12 @@ const RelationshipField = (props)=>{
|
|
|
361
383
|
}
|
|
362
384
|
}, /*#__PURE__*/ React.createElement(FieldError, {
|
|
363
385
|
CustomError: CustomError,
|
|
386
|
+
path: path,
|
|
364
387
|
...errorProps || {}
|
|
365
388
|
}), /*#__PURE__*/ React.createElement(FieldLabel, {
|
|
366
389
|
CustomLabel: CustomLabel,
|
|
390
|
+
label: label,
|
|
391
|
+
required: required,
|
|
367
392
|
...labelProps || {}
|
|
368
393
|
}), !errorLoading && /*#__PURE__*/ React.createElement("div", {
|
|
369
394
|
className: `${baseClass}__wrap`
|
|
@@ -407,12 +432,17 @@ const RelationshipField = (props)=>{
|
|
|
407
432
|
}
|
|
408
433
|
} : undefined,
|
|
409
434
|
onInputChange: (newSearch)=>handleInputChange(newSearch, value),
|
|
435
|
+
onMenuClose: ()=>{
|
|
436
|
+
menuIsOpen.current = false;
|
|
437
|
+
},
|
|
410
438
|
onMenuOpen: ()=>{
|
|
411
|
-
|
|
439
|
+
menuIsOpen.current = true;
|
|
440
|
+
if (!hasLoadedFirstPageRef.current) {
|
|
412
441
|
setIsLoading(true);
|
|
413
442
|
void getResults({
|
|
443
|
+
lastLoadedPage: {},
|
|
414
444
|
onSuccess: ()=>{
|
|
415
|
-
|
|
445
|
+
hasLoadedFirstPageRef.current = true;
|
|
416
446
|
setIsLoading(false);
|
|
417
447
|
},
|
|
418
448
|
value: initialValue
|
|
@@ -422,6 +452,7 @@ const RelationshipField = (props)=>{
|
|
|
422
452
|
onMenuScrollToBottom: ()=>{
|
|
423
453
|
void getResults({
|
|
424
454
|
lastFullyLoadedRelation,
|
|
455
|
+
lastLoadedPage,
|
|
425
456
|
search,
|
|
426
457
|
sort: false,
|
|
427
458
|
value: initialValue
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs } from 'payload/database'\nimport type { Where } from 'payload/types'\n\nimport { FieldDescription } from '@payloadcms/ui/forms/FieldDescription'\nimport { FieldError } from '@payloadcms/ui/forms/FieldError'\nimport { FieldLabel } from '@payloadcms/ui/forms/FieldLabel'\nimport { wordBoundariesRegex } from 'payload/utilities'\nimport qs from 'qs'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\n\nimport type { DocumentDrawerProps } from '../../elements/DocumentDrawer/types.js'\nimport type { GetResults, Option, RelationshipFieldProps, Value } from './types.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { useFormProcessing } from '../../forms/Form/context.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDebouncedCallback } from '../../hooks/useDebouncedCallback.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { AddNewRelation } from './AddNew/index.js'\nimport { createRelationMap } from './createRelationMap.js'\nimport { findOptionsByValue } from './findOptionsByValue.js'\nimport './index.scss'\nimport { optionsReducer } from './optionsReducer.js'\nimport { MultiValueLabel } from './select-components/MultiValueLabel/index.js'\nimport { SingleValue } from './select-components/SingleValue/index.js'\n\nconst maxResultsPerRequest = 10\n\nconst baseClass = 'relationship'\n\nexport { RelationshipFieldProps }\n\nconst RelationshipField: React.FC<RelationshipFieldProps> = (props) => {\n const {\n name,\n CustomDescription,\n CustomError,\n CustomLabel,\n allowCreate = true,\n className,\n descriptionProps,\n errorProps,\n hasMany,\n isSortable = true,\n labelProps,\n path: pathFromProps,\n readOnly,\n relationTo,\n required,\n sortOptions,\n style,\n validate,\n width,\n } = props\n\n const config = useConfig()\n\n const {\n collections,\n routes: { api },\n serverURL,\n } = config\n\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n const { code: locale } = useLocale()\n const formProcessing = useFormProcessing()\n const hasMultipleRelations = Array.isArray(relationTo)\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n const [lastFullyLoadedRelation, setLastFullyLoadedRelation] = useState(-1)\n const [lastLoadedPage, setLastLoadedPage] = useState<Record<string, number>>({})\n const [errorLoading, setErrorLoading] = useState('')\n const [search, setSearch] = useState('')\n const [isLoading, setIsLoading] = useState(false)\n const [hasLoadedFirstPage, setHasLoadedFirstPage] = useState(false)\n const [enableWordBoundarySearch, setEnableWordBoundarySearch] = useState(false)\n const firstRun = useRef(true)\n\n const memoizedValidate = useCallback(\n (value, validationOptions) => {\n if (typeof validate === 'function') {\n return validate(value, { ...validationOptions, required })\n }\n },\n [validate, required],\n )\n\n const { filterOptions, initialValue, path, setValue, showError, value } = useField<\n Value | Value[]\n >({\n path: pathFromProps || name,\n validate: memoizedValidate,\n })\n\n const [drawerIsOpen, setDrawerIsOpen] = useState(false)\n\n const getResults: GetResults = useCallback(\n async ({\n lastFullyLoadedRelation: lastFullyLoadedRelationArg,\n onSuccess,\n search: searchArg,\n sort,\n value: valueArg,\n }) => {\n if (!permissions) {\n return\n }\n const lastFullyLoadedRelationToUse =\n typeof lastFullyLoadedRelationArg !== 'undefined' ? lastFullyLoadedRelationArg : -1\n\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const relationsToFetch =\n lastFullyLoadedRelationToUse === -1\n ? relations\n : relations.slice(lastFullyLoadedRelationToUse + 1)\n\n let resultsFetched = 0\n const relationMap = createRelationMap({\n hasMany,\n relationTo,\n value: valueArg,\n })\n\n if (!errorLoading) {\n await relationsToFetch.reduce(async (priorRelation, relation) => {\n const relationFilterOption = filterOptions?.[relation]\n\n let lastLoadedPageToUse\n if (search !== searchArg) {\n lastLoadedPageToUse = 1\n } else {\n lastLoadedPageToUse = lastLoadedPage[relation] + 1\n }\n await priorRelation\n\n if (relationFilterOption === false) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n return Promise.resolve()\n }\n\n if (resultsFetched < 10) {\n const collection = collections.find((coll) => coll.slug === relation)\n let fieldToSearch = collection?.defaultSort || collection?.admin?.useAsTitle || 'id'\n if (!searchArg) {\n if (typeof sortOptions === 'string') {\n fieldToSearch = sortOptions\n } else if (sortOptions?.[relation]) {\n fieldToSearch = sortOptions[relation]\n }\n }\n\n const query: {\n [key: string]: unknown\n where: Where\n } = {\n depth: 0,\n draft: true,\n limit: maxResultsPerRequest,\n locale,\n page: lastLoadedPageToUse,\n sort: fieldToSearch,\n where: {\n and: [\n {\n id: {\n not_in: relationMap[relation],\n },\n },\n ],\n },\n }\n\n if (searchArg) {\n query.where.and.push({\n [fieldToSearch]: {\n like: searchArg,\n },\n })\n }\n\n if (relationFilterOption && typeof relationFilterOption !== 'boolean') {\n query.where.and.push(relationFilterOption)\n }\n\n const response = await fetch(`${serverURL}${api}/${relation}?${qs.stringify(query)}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (response.ok) {\n const data: PaginatedDocs<unknown> = await response.json()\n setLastLoadedPage((prevState) => {\n return {\n ...prevState,\n [relation]: lastLoadedPageToUse,\n }\n })\n\n if (!data.nextPage) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n }\n\n if (data.docs.length > 0) {\n resultsFetched += data.docs.length\n\n dispatchOptions({\n type: 'ADD',\n collection,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n docs: data.docs,\n i18n,\n sort,\n })\n }\n } else if (response.status === 403) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n dispatchOptions({\n type: 'ADD',\n collection,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n docs: [],\n i18n,\n ids: relationMap[relation],\n sort,\n })\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n }\n }, Promise.resolve())\n\n if (typeof onSuccess === 'function') onSuccess()\n }\n },\n [\n permissions,\n relationTo,\n hasMany,\n errorLoading,\n search,\n lastLoadedPage,\n collections,\n locale,\n filterOptions,\n serverURL,\n sortOptions,\n api,\n i18n,\n config,\n t,\n ],\n )\n\n const updateSearch = useDebouncedCallback((searchArg: string, valueArg: Value | Value[]) => {\n void getResults({ search: searchArg, sort: true, value: valueArg })\n setSearch(searchArg)\n }, 300)\n\n const handleInputChange = useCallback(\n (searchArg: string, valueArg: Value | Value[]) => {\n if (search !== searchArg) {\n setLastLoadedPage({})\n updateSearch(searchArg, valueArg, searchArg !== '')\n }\n },\n [search, updateSearch],\n )\n\n // ///////////////////////////////////\n // Ensure we have an option for each value\n // ///////////////////////////////////\n\n useEffect(() => {\n const relationMap = createRelationMap({\n hasMany,\n relationTo,\n value,\n })\n\n void Object.entries(relationMap).reduce(async (priorRelation, [relation, ids]) => {\n await priorRelation\n\n const idsToLoad = ids.filter((id) => {\n return !options.find((optionGroup) =>\n optionGroup?.options?.find(\n (option) => option.value === id && option.relationTo === relation,\n ),\n )\n })\n\n if (idsToLoad.length > 0) {\n const query = {\n depth: 0,\n draft: true,\n limit: idsToLoad.length,\n locale,\n where: {\n id: {\n in: idsToLoad,\n },\n },\n }\n\n if (!errorLoading) {\n const response = await fetch(`${serverURL}${api}/${relation}?${qs.stringify(query)}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n const collection = collections.find((coll) => coll.slug === relation)\n let docs = []\n\n if (response.ok) {\n const data = await response.json()\n docs = data.docs\n }\n\n dispatchOptions({\n type: 'ADD',\n collection,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n docs,\n i18n,\n ids: idsToLoad,\n sort: true,\n })\n }\n }\n }, Promise.resolve())\n }, [\n options,\n value,\n hasMany,\n errorLoading,\n collections,\n hasMultipleRelations,\n serverURL,\n api,\n i18n,\n relationTo,\n locale,\n config,\n ])\n\n // Determine if we should switch to word boundary search\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const isIdOnly = relations.reduce((idOnly, relation) => {\n const collection = collections.find((coll) => coll.slug === relation)\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n return fieldToSearch === 'id' && idOnly\n }, true)\n setEnableWordBoundarySearch(!isIdOnly)\n }, [relationTo, collections])\n\n // When (`relationTo` || `filterOptions` || `locale`) changes, reset component\n // Note - effect should not run on first run\n useEffect(() => {\n if (firstRun.current) {\n firstRun.current = false\n return\n }\n\n dispatchOptions({ type: 'CLEAR' })\n setLastFullyLoadedRelation(-1)\n setLastLoadedPage({})\n setHasLoadedFirstPage(false)\n }, [relationTo, filterOptions, locale])\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n dispatchOptions({\n type: 'UPDATE',\n collection: args.collectionConfig,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n doc: args.doc,\n i18n,\n })\n },\n [i18n, config],\n )\n\n const filterOption = useCallback((item: Option, searchFilter: string) => {\n if (!searchFilter) {\n return true\n }\n const r = wordBoundariesRegex(searchFilter || '')\n // breaking the labels to search into smaller parts increases performance\n const breakApartThreshold = 250\n let string = item.label\n // strings less than breakApartThreshold length won't be chunked\n while (string.length > breakApartThreshold) {\n // slicing by the next space after the length of the search input prevents slicing the string up by partial words\n const indexOfSpace = string.indexOf(' ', searchFilter.length)\n if (r.test(string.slice(0, indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1))) {\n return true\n }\n string = string.slice(indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1)\n }\n return r.test(string.slice(-breakApartThreshold))\n }, [])\n\n const valueToRender = findOptionsByValue({ options, value })\n\n if (!Array.isArray(valueToRender) && valueToRender?.value === 'null') valueToRender.value = null\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n errorLoading && 'error-loading',\n readOnly && `${baseClass}--read-only`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n style={{\n ...style,\n width,\n }}\n >\n <FieldError CustomError={CustomError} {...(errorProps || {})} />\n <FieldLabel CustomLabel={CustomLabel} {...(labelProps || {})} />\n {!errorLoading && (\n <div className={`${baseClass}__wrap`}>\n <ReactSelect\n backspaceRemovesValue={!drawerIsOpen}\n components={{\n MultiValueLabel,\n SingleValue,\n }}\n customProps={{\n disableKeyDown: drawerIsOpen,\n disableMouseDown: drawerIsOpen,\n onSave,\n setDrawerIsOpen,\n }}\n disabled={readOnly || formProcessing}\n filterOption={enableWordBoundarySearch ? filterOption : undefined}\n isLoading={isLoading}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={\n !readOnly\n ? (selected) => {\n if (selected === null) {\n setValue(hasMany ? [] : null)\n } else if (hasMany) {\n setValue(\n selected\n ? selected.map((option) => {\n if (hasMultipleRelations) {\n return {\n relationTo: option.relationTo,\n value: option.value,\n }\n }\n\n return option.value\n })\n : null,\n )\n } else if (hasMultipleRelations) {\n setValue({\n relationTo: selected.relationTo,\n value: selected.value,\n })\n } else {\n setValue(selected.value)\n }\n }\n : undefined\n }\n onInputChange={(newSearch) => handleInputChange(newSearch, value)}\n onMenuOpen={() => {\n if (!hasLoadedFirstPage) {\n setIsLoading(true)\n void getResults({\n onSuccess: () => {\n setHasLoadedFirstPage(true)\n setIsLoading(false)\n },\n value: initialValue,\n })\n }\n }}\n onMenuScrollToBottom={() => {\n void getResults({\n lastFullyLoadedRelation,\n search,\n sort: false,\n value: initialValue,\n })\n }}\n options={options}\n showError={showError}\n value={valueToRender ?? null}\n />\n {!readOnly && allowCreate && (\n <AddNewRelation\n {...{\n dispatchOptions,\n hasMany,\n options,\n path,\n relationTo,\n setValue,\n value,\n }}\n />\n )}\n </div>\n )}\n {errorLoading && <div className={`${baseClass}__error-loading`}>{errorLoading}</div>}\n {CustomDescription !== undefined ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n </div>\n )\n}\n\nexport const Relationship = withCondition(RelationshipField)\n"],"names":["FieldDescription","FieldError","FieldLabel","wordBoundariesRegex","qs","React","useCallback","useEffect","useReducer","useRef","useState","ReactSelect","useFormProcessing","useField","withCondition","useDebouncedCallback","useAuth","useConfig","useLocale","useTranslation","fieldBaseClass","AddNewRelation","createRelationMap","findOptionsByValue","optionsReducer","MultiValueLabel","SingleValue","maxResultsPerRequest","baseClass","RelationshipField","props","name","CustomDescription","CustomError","CustomLabel","allowCreate","className","descriptionProps","errorProps","hasMany","isSortable","labelProps","path","pathFromProps","readOnly","relationTo","required","sortOptions","style","validate","width","config","collections","routes","api","serverURL","i18n","t","permissions","code","locale","formProcessing","hasMultipleRelations","Array","isArray","options","dispatchOptions","lastFullyLoadedRelation","setLastFullyLoadedRelation","lastLoadedPage","setLastLoadedPage","errorLoading","setErrorLoading","search","setSearch","isLoading","setIsLoading","hasLoadedFirstPage","setHasLoadedFirstPage","enableWordBoundarySearch","setEnableWordBoundarySearch","firstRun","memoizedValidate","value","validationOptions","filterOptions","initialValue","setValue","showError","drawerIsOpen","setDrawerIsOpen","getResults","lastFullyLoadedRelationArg","onSuccess","searchArg","sort","valueArg","lastFullyLoadedRelationToUse","relations","relationsToFetch","slice","resultsFetched","relationMap","reduce","priorRelation","relation","relationFilterOption","lastLoadedPageToUse","indexOf","Promise","resolve","collection","find","coll","slug","fieldToSearch","defaultSort","admin","useAsTitle","query","depth","draft","limit","page","where","and","id","not_in","push","like","response","fetch","stringify","credentials","headers","language","ok","data","json","prevState","nextPage","docs","length","type","status","ids","updateSearch","handleInputChange","Object","entries","idsToLoad","filter","optionGroup","option","in","isIdOnly","idOnly","current","onSave","args","collectionConfig","doc","filterOption","item","searchFilter","r","breakApartThreshold","string","label","indexOfSpace","test","valueToRender","div","Boolean","join","replace","backspaceRemovesValue","components","customProps","disableKeyDown","disableMouseDown","disabled","undefined","isMulti","onChange","selected","map","onInputChange","newSearch","onMenuOpen","onMenuScrollToBottom","Relationship"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs } from 'payload/database'\nimport type { Where } from 'payload/types'\n\nimport { FieldDescription } from '@payloadcms/ui/forms/FieldDescription'\nimport { FieldError } from '@payloadcms/ui/forms/FieldError'\nimport { FieldLabel } from '@payloadcms/ui/forms/FieldLabel'\nimport { useFieldProps } from '@payloadcms/ui/forms/FieldPropsProvider'\nimport { wordBoundariesRegex } from 'payload/utilities'\nimport qs from 'qs'\nimport React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'\n\nimport type { DocumentDrawerProps } from '../../elements/DocumentDrawer/types.js'\nimport type { GetResults, Option, RelationshipFieldProps, Value } from './types.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { useFormProcessing } from '../../forms/Form/context.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useDebouncedCallback } from '../../hooks/useDebouncedCallback.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport { AddNewRelation } from './AddNew/index.js'\nimport { createRelationMap } from './createRelationMap.js'\nimport { findOptionsByValue } from './findOptionsByValue.js'\nimport './index.scss'\nimport { optionsReducer } from './optionsReducer.js'\nimport { MultiValueLabel } from './select-components/MultiValueLabel/index.js'\nimport { SingleValue } from './select-components/SingleValue/index.js'\n\nconst maxResultsPerRequest = 10\n\nconst baseClass = 'relationship'\n\nexport { RelationshipFieldProps }\n\nconst RelationshipField: React.FC<RelationshipFieldProps> = (props) => {\n const {\n name,\n CustomDescription,\n CustomError,\n CustomLabel,\n allowCreate = true,\n className,\n descriptionProps,\n errorProps,\n hasMany,\n isSortable = true,\n label,\n labelProps,\n path: pathFromProps,\n readOnly,\n relationTo,\n required,\n sortOptions,\n style,\n validate,\n width,\n } = props\n\n const config = useConfig()\n\n const {\n collections,\n routes: { api },\n serverURL,\n } = config\n\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n const { code: locale } = useLocale()\n const formProcessing = useFormProcessing()\n const hasMultipleRelations = Array.isArray(relationTo)\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n const [lastFullyLoadedRelation, setLastFullyLoadedRelation] = useState(-1)\n const [lastLoadedPage, setLastLoadedPage] = useState<Record<string, number>>({})\n const [errorLoading, setErrorLoading] = useState('')\n const [search, setSearch] = useState('')\n const [isLoading, setIsLoading] = useState(false)\n const [enableWordBoundarySearch, setEnableWordBoundarySearch] = useState(false)\n const menuIsOpen = useRef(false)\n const hasLoadedFirstPageRef = useRef(false)\n\n const memoizedValidate = useCallback(\n (value, validationOptions) => {\n if (typeof validate === 'function') {\n return validate(value, { ...validationOptions, required })\n }\n },\n [validate, required],\n )\n const { path: pathFromContext } = useFieldProps()\n\n const { filterOptions, initialValue, path, setValue, showError, value } = useField<\n Value | Value[]\n >({\n path: pathFromContext || pathFromProps || name,\n validate: memoizedValidate,\n })\n\n const valueRef = useRef(value)\n valueRef.current = value\n\n const [drawerIsOpen, setDrawerIsOpen] = useState(false)\n\n const getResults: GetResults = useCallback(\n async ({\n lastFullyLoadedRelation: lastFullyLoadedRelationArg,\n lastLoadedPage: lastLoadedPageArg,\n onSuccess,\n search: searchArg,\n sort,\n value: valueArg,\n }) => {\n if (!permissions) {\n return\n }\n const lastFullyLoadedRelationToUse =\n typeof lastFullyLoadedRelationArg !== 'undefined' ? lastFullyLoadedRelationArg : -1\n\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const relationsToFetch =\n lastFullyLoadedRelationToUse === -1\n ? relations\n : relations.slice(lastFullyLoadedRelationToUse + 1)\n\n let resultsFetched = 0\n const relationMap = createRelationMap({\n hasMany,\n relationTo,\n value: valueArg,\n })\n\n if (!errorLoading) {\n await relationsToFetch.reduce(async (priorRelation, relation) => {\n const relationFilterOption = filterOptions?.[relation]\n\n let lastLoadedPageToUse\n if (search !== searchArg) {\n lastLoadedPageToUse = 1\n } else {\n lastLoadedPageToUse = lastLoadedPageArg[relation] + 1\n }\n await priorRelation\n\n if (relationFilterOption === false) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n return Promise.resolve()\n }\n\n if (resultsFetched < 10) {\n const collection = collections.find((coll) => coll.slug === relation)\n let fieldToSearch = collection?.defaultSort || collection?.admin?.useAsTitle || 'id'\n if (!searchArg) {\n if (typeof sortOptions === 'string') {\n fieldToSearch = sortOptions\n } else if (sortOptions?.[relation]) {\n fieldToSearch = sortOptions[relation]\n }\n }\n\n const query: {\n [key: string]: unknown\n where: Where\n } = {\n depth: 0,\n draft: true,\n limit: maxResultsPerRequest,\n locale,\n page: lastLoadedPageToUse,\n sort: fieldToSearch,\n where: {\n and: [\n {\n id: {\n not_in: relationMap[relation],\n },\n },\n ],\n },\n }\n\n if (searchArg) {\n query.where.and.push({\n [fieldToSearch]: {\n like: searchArg,\n },\n })\n }\n\n if (relationFilterOption && typeof relationFilterOption !== 'boolean') {\n query.where.and.push(relationFilterOption)\n }\n\n const response = await fetch(`${serverURL}${api}/${relation}?${qs.stringify(query)}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (response.ok) {\n const data: PaginatedDocs<unknown> = await response.json()\n setLastLoadedPage((prevState) => {\n return {\n ...prevState,\n [relation]: lastLoadedPageToUse,\n }\n })\n\n if (!data.nextPage) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n }\n\n if (data.docs.length > 0) {\n resultsFetched += data.docs.length\n\n dispatchOptions({\n type: 'ADD',\n collection,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n docs: data.docs,\n i18n,\n sort,\n })\n }\n } else if (response.status === 403) {\n setLastFullyLoadedRelation(relations.indexOf(relation))\n dispatchOptions({\n type: 'ADD',\n collection,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n docs: [],\n i18n,\n ids: relationMap[relation],\n sort,\n })\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n }\n }, Promise.resolve())\n\n if (typeof onSuccess === 'function') onSuccess()\n }\n },\n [\n permissions,\n relationTo,\n hasMany,\n errorLoading,\n search,\n collections,\n locale,\n filterOptions,\n serverURL,\n sortOptions,\n api,\n i18n,\n config,\n t,\n ],\n )\n\n const updateSearch = useDebouncedCallback((searchArg: string, valueArg: Value | Value[]) => {\n void getResults({ lastLoadedPage: {}, search: searchArg, sort: true, value: valueArg })\n setSearch(searchArg)\n }, 300)\n\n const handleInputChange = useCallback(\n (searchArg: string, valueArg: Value | Value[]) => {\n if (search !== searchArg) {\n setLastLoadedPage({})\n updateSearch(searchArg, valueArg, searchArg !== '')\n }\n },\n [search, updateSearch],\n )\n\n // ///////////////////////////////////\n // Ensure we have an option for each value\n // ///////////////////////////////////\n\n useEffect(() => {\n const relationMap = createRelationMap({\n hasMany,\n relationTo,\n value,\n })\n\n void Object.entries(relationMap).reduce(async (priorRelation, [relation, ids]) => {\n await priorRelation\n\n const idsToLoad = ids.filter((id) => {\n return !options.find((optionGroup) =>\n optionGroup?.options?.find(\n (option) => option.value === id && option.relationTo === relation,\n ),\n )\n })\n\n if (idsToLoad.length > 0) {\n const query = {\n depth: 0,\n draft: true,\n limit: idsToLoad.length,\n locale,\n where: {\n id: {\n in: idsToLoad,\n },\n },\n }\n\n if (!errorLoading) {\n const response = await fetch(`${serverURL}${api}/${relation}?${qs.stringify(query)}`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n const collection = collections.find((coll) => coll.slug === relation)\n let docs = []\n\n if (response.ok) {\n const data = await response.json()\n docs = data.docs\n }\n\n dispatchOptions({\n type: 'ADD',\n collection,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n docs,\n i18n,\n ids: idsToLoad,\n sort: true,\n })\n }\n }\n }, Promise.resolve())\n }, [\n options,\n value,\n hasMany,\n errorLoading,\n collections,\n hasMultipleRelations,\n serverURL,\n api,\n i18n,\n relationTo,\n locale,\n config,\n ])\n\n // Determine if we should switch to word boundary search\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const isIdOnly = relations.reduce((idOnly, relation) => {\n const collection = collections.find((coll) => coll.slug === relation)\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n return fieldToSearch === 'id' && idOnly\n }, true)\n setEnableWordBoundarySearch(!isIdOnly)\n }, [relationTo, collections])\n\n // When (`relationTo` || `filterOptions` || `locale`) changes, reset component\n // Note - effect should not run on first run\n useEffect(() => {\n // If the menu is open while filterOptions changes\n // due to latency of getFormState and fast clicking into this field,\n // re-fetch options\n\n if (hasLoadedFirstPageRef.current && menuIsOpen.current) {\n setIsLoading(true)\n void getResults({\n lastLoadedPage: {},\n onSuccess: () => {\n hasLoadedFirstPageRef.current = true\n setIsLoading(false)\n },\n value: valueRef.current,\n })\n }\n\n // If the menu is not open, still reset the field state\n // because we need to get new options next time the menu\n // opens by the user\n\n dispatchOptions({ type: 'CLEAR' })\n setLastFullyLoadedRelation(-1)\n setLastLoadedPage({})\n hasLoadedFirstPageRef.current = false\n }, [\n relationTo,\n filterOptions,\n locale,\n menuIsOpen,\n getResults,\n valueRef,\n hasLoadedFirstPageRef,\n path,\n ])\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n dispatchOptions({\n type: 'UPDATE',\n collection: args.collectionConfig,\n // TODO: fix this\n // @ts-expect-error-next-line\n config,\n doc: args.doc,\n i18n,\n })\n },\n [i18n, config],\n )\n\n const filterOption = useCallback((item: Option, searchFilter: string) => {\n if (!searchFilter) {\n return true\n }\n const r = wordBoundariesRegex(searchFilter || '')\n // breaking the labels to search into smaller parts increases performance\n const breakApartThreshold = 250\n let string = item.label\n // strings less than breakApartThreshold length won't be chunked\n while (string.length > breakApartThreshold) {\n // slicing by the next space after the length of the search input prevents slicing the string up by partial words\n const indexOfSpace = string.indexOf(' ', searchFilter.length)\n if (r.test(string.slice(0, indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1))) {\n return true\n }\n string = string.slice(indexOfSpace === -1 ? searchFilter.length : indexOfSpace + 1)\n }\n return r.test(string.slice(-breakApartThreshold))\n }, [])\n\n const valueToRender = findOptionsByValue({ options, value })\n\n if (!Array.isArray(valueToRender) && valueToRender?.value === 'null') valueToRender.value = null\n\n return (\n <div\n className={[\n fieldBaseClass,\n baseClass,\n className,\n showError && 'error',\n errorLoading && 'error-loading',\n readOnly && `${baseClass}--read-only`,\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n style={{\n ...style,\n width,\n }}\n >\n <FieldError CustomError={CustomError} path={path} {...(errorProps || {})} />\n <FieldLabel\n CustomLabel={CustomLabel}\n label={label}\n required={required}\n {...(labelProps || {})}\n />\n {!errorLoading && (\n <div className={`${baseClass}__wrap`}>\n <ReactSelect\n backspaceRemovesValue={!drawerIsOpen}\n components={{\n MultiValueLabel,\n SingleValue,\n }}\n customProps={{\n disableKeyDown: drawerIsOpen,\n disableMouseDown: drawerIsOpen,\n onSave,\n setDrawerIsOpen,\n }}\n disabled={readOnly || formProcessing}\n filterOption={enableWordBoundarySearch ? filterOption : undefined}\n isLoading={isLoading}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={\n !readOnly\n ? (selected) => {\n if (selected === null) {\n setValue(hasMany ? [] : null)\n } else if (hasMany) {\n setValue(\n selected\n ? selected.map((option) => {\n if (hasMultipleRelations) {\n return {\n relationTo: option.relationTo,\n value: option.value,\n }\n }\n\n return option.value\n })\n : null,\n )\n } else if (hasMultipleRelations) {\n setValue({\n relationTo: selected.relationTo,\n value: selected.value,\n })\n } else {\n setValue(selected.value)\n }\n }\n : undefined\n }\n onInputChange={(newSearch) => handleInputChange(newSearch, value)}\n onMenuClose={() => {\n menuIsOpen.current = false\n }}\n onMenuOpen={() => {\n menuIsOpen.current = true\n\n if (!hasLoadedFirstPageRef.current) {\n setIsLoading(true)\n void getResults({\n lastLoadedPage: {},\n onSuccess: () => {\n hasLoadedFirstPageRef.current = true\n setIsLoading(false)\n },\n value: initialValue,\n })\n }\n }}\n onMenuScrollToBottom={() => {\n void getResults({\n lastFullyLoadedRelation,\n lastLoadedPage,\n search,\n sort: false,\n value: initialValue,\n })\n }}\n options={options}\n showError={showError}\n value={valueToRender ?? null}\n />\n {!readOnly && allowCreate && (\n <AddNewRelation\n {...{\n dispatchOptions,\n hasMany,\n options,\n path,\n relationTo,\n setValue,\n value,\n }}\n />\n )}\n </div>\n )}\n {errorLoading && <div className={`${baseClass}__error-loading`}>{errorLoading}</div>}\n {CustomDescription !== undefined ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n </div>\n )\n}\n\nexport const Relationship = withCondition(RelationshipField)\n"],"names":["FieldDescription","FieldError","FieldLabel","useFieldProps","wordBoundariesRegex","qs","React","useCallback","useEffect","useReducer","useRef","useState","ReactSelect","useFormProcessing","useField","withCondition","useDebouncedCallback","useAuth","useConfig","useLocale","useTranslation","fieldBaseClass","AddNewRelation","createRelationMap","findOptionsByValue","optionsReducer","MultiValueLabel","SingleValue","maxResultsPerRequest","baseClass","RelationshipField","props","name","CustomDescription","CustomError","CustomLabel","allowCreate","className","descriptionProps","errorProps","hasMany","isSortable","label","labelProps","path","pathFromProps","readOnly","relationTo","required","sortOptions","style","validate","width","config","collections","routes","api","serverURL","i18n","t","permissions","code","locale","formProcessing","hasMultipleRelations","Array","isArray","options","dispatchOptions","lastFullyLoadedRelation","setLastFullyLoadedRelation","lastLoadedPage","setLastLoadedPage","errorLoading","setErrorLoading","search","setSearch","isLoading","setIsLoading","enableWordBoundarySearch","setEnableWordBoundarySearch","menuIsOpen","hasLoadedFirstPageRef","memoizedValidate","value","validationOptions","pathFromContext","filterOptions","initialValue","setValue","showError","valueRef","current","drawerIsOpen","setDrawerIsOpen","getResults","lastFullyLoadedRelationArg","lastLoadedPageArg","onSuccess","searchArg","sort","valueArg","lastFullyLoadedRelationToUse","relations","relationsToFetch","slice","resultsFetched","relationMap","reduce","priorRelation","relation","relationFilterOption","lastLoadedPageToUse","indexOf","Promise","resolve","collection","find","coll","slug","fieldToSearch","defaultSort","admin","useAsTitle","query","depth","draft","limit","page","where","and","id","not_in","push","like","response","fetch","stringify","credentials","headers","language","ok","data","json","prevState","nextPage","docs","length","type","status","ids","updateSearch","handleInputChange","Object","entries","idsToLoad","filter","optionGroup","option","in","isIdOnly","idOnly","onSave","args","collectionConfig","doc","filterOption","item","searchFilter","r","breakApartThreshold","string","indexOfSpace","test","valueToRender","div","Boolean","join","replace","backspaceRemovesValue","components","customProps","disableKeyDown","disableMouseDown","disabled","undefined","isMulti","onChange","selected","map","onInputChange","newSearch","onMenuClose","onMenuOpen","onMenuScrollToBottom","Relationship"],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { I18n } from '@payloadcms/translations';
|
|
2
|
-
import type { ClientCollectionConfig, RelationshipField } from 'payload/types';
|
|
2
|
+
import type { ClientCollectionConfig, FieldBase, RelationshipField } from 'payload/types';
|
|
3
3
|
import type { SanitizedConfig } from 'payload/types';
|
|
4
4
|
import type { FormFieldBase } from '../shared/index.js';
|
|
5
5
|
export type RelationshipFieldProps = FormFieldBase & {
|
|
6
6
|
allowCreate?: RelationshipField['admin']['allowCreate'];
|
|
7
7
|
hasMany?: boolean;
|
|
8
8
|
isSortable?: boolean;
|
|
9
|
+
label?: FieldBase['label'];
|
|
9
10
|
name: string;
|
|
10
11
|
relationTo?: RelationshipField['relationTo'];
|
|
11
12
|
sortOptions?: RelationshipField['admin']['sortOptions'];
|
|
@@ -48,6 +49,7 @@ type ADD = {
|
|
|
48
49
|
export type Action = ADD | CLEAR | UPDATE;
|
|
49
50
|
export type GetResults = (args: {
|
|
50
51
|
lastFullyLoadedRelation?: number;
|
|
52
|
+
lastLoadedPage: Record<string, number>;
|
|
51
53
|
onSuccess?: () => void;
|
|
52
54
|
search?: string;
|
|
53
55
|
sort?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/fields/Relationship/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/fields/Relationship/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG;IACnD,WAAW,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAA;IACvD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAA;IAC5C,WAAW,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAA;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,KAAK,GAAG,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAA;AAEvD,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,UAAU,EAAE,sBAAsB,CAAA;IAClC,MAAM,EAAE,eAAe,CAAA;IACvB,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,EAAE,QAAQ,CAAA;CACf,CAAA;AAED,KAAK,GAAG,GAAG;IACT,UAAU,EAAE,sBAAsB,CAAA;IAClC,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,GAAG,EAAE,CAAA;IACX,IAAI,EAAE,IAAI,CAAA;IACV,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,KAAK,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,MAAM,CAAA;AAEzC,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,CAAA;CACxB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Relationship/types.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type { ClientCollectionConfig, RelationshipField } from 'payload/types'\nimport type { SanitizedConfig } from 'payload/types'\n\nimport type { FormFieldBase } from '../shared/index.js'\n\nexport type RelationshipFieldProps = FormFieldBase & {\n allowCreate?: RelationshipField['admin']['allowCreate']\n hasMany?: boolean\n isSortable?: boolean\n name: string\n relationTo?: RelationshipField['relationTo']\n sortOptions?: RelationshipField['admin']['sortOptions']\n width?: string\n}\n\nexport type Option = {\n label: string\n options?: Option[]\n relationTo?: string\n value: number | string\n}\n\nexport type OptionGroup = {\n label: string\n options: Option[]\n}\n\nexport type ValueWithRelation = {\n relationTo: string\n value: number | string\n}\n\nexport type Value = ValueWithRelation | number | string\n\ntype CLEAR = {\n type: 'CLEAR'\n}\n\ntype UPDATE = {\n collection: ClientCollectionConfig\n config: SanitizedConfig\n doc: any\n i18n: I18n\n type: 'UPDATE'\n}\n\ntype ADD = {\n collection: ClientCollectionConfig\n config: SanitizedConfig\n docs: any[]\n i18n: I18n\n ids?: (number | string)[]\n sort?: boolean\n type: 'ADD'\n}\n\nexport type Action = ADD | CLEAR | UPDATE\n\nexport type GetResults = (args: {\n lastFullyLoadedRelation?: number\n onSuccess?: () => void\n search?: string\n sort?: boolean\n value?: Value | Value[]\n}) => Promise<void>\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Relationship/types.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type { ClientCollectionConfig, FieldBase, RelationshipField } from 'payload/types'\nimport type { SanitizedConfig } from 'payload/types'\n\nimport type { FormFieldBase } from '../shared/index.js'\n\nexport type RelationshipFieldProps = FormFieldBase & {\n allowCreate?: RelationshipField['admin']['allowCreate']\n hasMany?: boolean\n isSortable?: boolean\n label?: FieldBase['label']\n name: string\n relationTo?: RelationshipField['relationTo']\n sortOptions?: RelationshipField['admin']['sortOptions']\n width?: string\n}\n\nexport type Option = {\n label: string\n options?: Option[]\n relationTo?: string\n value: number | string\n}\n\nexport type OptionGroup = {\n label: string\n options: Option[]\n}\n\nexport type ValueWithRelation = {\n relationTo: string\n value: number | string\n}\n\nexport type Value = ValueWithRelation | number | string\n\ntype CLEAR = {\n type: 'CLEAR'\n}\n\ntype UPDATE = {\n collection: ClientCollectionConfig\n config: SanitizedConfig\n doc: any\n i18n: I18n\n type: 'UPDATE'\n}\n\ntype ADD = {\n collection: ClientCollectionConfig\n config: SanitizedConfig\n docs: any[]\n i18n: I18n\n ids?: (number | string)[]\n sort?: boolean\n type: 'ADD'\n}\n\nexport type Action = ADD | CLEAR | UPDATE\n\nexport type GetResults = (args: {\n lastFullyLoadedRelation?: number\n lastLoadedPage: Record<string, number>\n onSuccess?: () => void\n search?: string\n sort?: boolean\n value?: Value | Value[]\n}) => Promise<void>\n"],"names":[],"mappings":"AA4DA,WAOmB"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import type { FieldBase } from 'packages/payload/src/exports/types.js';
|
|
1
2
|
import type React from 'react';
|
|
2
3
|
import type { MappedField } from '../../providers/ComponentMap/buildComponentMap/types.js';
|
|
3
4
|
import type { FormFieldBase } from '../shared/index.js';
|
|
4
5
|
export type RichTextFieldProps = FormFieldBase & {
|
|
6
|
+
label?: FieldBase['label'];
|
|
5
7
|
name: string;
|
|
6
8
|
richTextComponentMap?: Map<string, MappedField[] | React.ReactNode>;
|
|
7
9
|
width?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/RichText/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAA;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA;IACnE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAEjD,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/RichText/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAA;AACtE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAA;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA;IACnE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAEjD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/RichText/index.tsx"],"sourcesContent":["import type React from 'react'\n\nimport type { MappedField } from '../../providers/ComponentMap/buildComponentMap/types.js'\nimport type { FormFieldBase } from '../shared/index.js'\n\nexport type RichTextFieldProps = FormFieldBase & {\n name: string\n richTextComponentMap?: Map<string, MappedField[] | React.ReactNode>\n width?: string\n}\n\nexport const RichText: React.FC<RichTextFieldProps> = () => {\n return null\n}\n"],"names":["RichText"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/RichText/index.tsx"],"sourcesContent":["import type { FieldBase } from 'packages/payload/src/exports/types.js'\nimport type React from 'react'\n\nimport type { MappedField } from '../../providers/ComponentMap/buildComponentMap/types.js'\nimport type { FormFieldBase } from '../shared/index.js'\n\nexport type RichTextFieldProps = FormFieldBase & {\n label?: FieldBase['label']\n name: string\n richTextComponentMap?: Map<string, MappedField[] | React.ReactNode>\n width?: string\n}\n\nexport const RichText: React.FC<RichTextFieldProps> = () => {\n return null\n}\n"],"names":["RichText"],"mappings":"AAaA,OAAO,MAAMA,WAAyC;IACpD,OAAO;AACT,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Row/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAM/C,OAAO,cAAc,CAAA;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Row/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAM/C,OAAO,cAAc,CAAA;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAA;AA0B9B,eAAO,MAAM,GAAG,yBAA0B,CAAA"}
|
package/dist/fields/Row/index.js
CHANGED
|
@@ -9,7 +9,7 @@ export { RowProvider, useRow };
|
|
|
9
9
|
const baseClass = 'row';
|
|
10
10
|
const RowField = (props)=>{
|
|
11
11
|
const { className, fieldMap, forceRender = false } = props;
|
|
12
|
-
const { path, readOnly, schemaPath, siblingPermissions } = useFieldProps();
|
|
12
|
+
const { indexPath, path, readOnly, schemaPath, siblingPermissions } = useFieldProps();
|
|
13
13
|
return /*#__PURE__*/ React.createElement(RowProvider, null, /*#__PURE__*/ React.createElement("div", {
|
|
14
14
|
className: [
|
|
15
15
|
fieldBaseClass,
|
|
@@ -25,6 +25,7 @@ const RowField = (props)=>{
|
|
|
25
25
|
className: `${baseClass}__fields`,
|
|
26
26
|
fieldMap: fieldMap,
|
|
27
27
|
forceRender: forceRender,
|
|
28
|
+
indexPath: indexPath,
|
|
28
29
|
margins: false,
|
|
29
30
|
permissions: siblingPermissions
|
|
30
31
|
})));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Row/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport type { RowFieldProps } from './types.js'\n\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\nimport { RowProvider, useRow } from './provider.js'\n\nexport { RowProvider, useRow }\n\nconst baseClass = 'row'\n\nconst RowField: React.FC<RowFieldProps> = (props) => {\n const { className, fieldMap, forceRender = false } = props\n\n const { path, readOnly, schemaPath, siblingPermissions } = useFieldProps()\n\n return (\n <RowProvider>\n <div className={[fieldBaseClass, baseClass, className].filter(Boolean).join(' ')}>\n <RenderFields\n {...{ fieldMap, forceRender, path, readOnly, schemaPath }}\n className={`${baseClass}__fields`}\n fieldMap={fieldMap}\n forceRender={forceRender}\n margins={false}\n permissions={siblingPermissions}\n />\n </div>\n </RowProvider>\n )\n}\n\nexport const Row = withCondition(RowField)\n"],"names":["React","useFieldProps","RenderFields","withCondition","fieldBaseClass","RowProvider","useRow","baseClass","RowField","props","className","fieldMap","forceRender","path","readOnly","schemaPath","siblingPermissions","div","filter","Boolean","join","margins","permissions","Row"],"mappings":"AAAA;AACA,OAAOA,WAAW,QAAO;AAIzB,SAASC,aAAa,QAAQ,0CAAyC;AACvE,SAASC,YAAY,QAAQ,oCAAmC;AAChE,SAASC,aAAa,QAAQ,qCAAoC;AAClE,SAASC,cAAc,QAAQ,qBAAoB;AAEnD,SAASC,WAAW,EAAEC,MAAM,QAAQ,gBAAe;AAEnD,SAASD,WAAW,EAAEC,MAAM,GAAE;AAE9B,MAAMC,YAAY;AAElB,MAAMC,WAAoC,CAACC;IACzC,MAAM,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,cAAc,KAAK,EAAE,GAAGH;IAErD,MAAM,EAAEI,IAAI,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Row/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport type { RowFieldProps } from './types.js'\n\nimport { useFieldProps } from '../../forms/FieldPropsProvider/index.js'\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\nimport { RowProvider, useRow } from './provider.js'\n\nexport { RowProvider, useRow }\n\nconst baseClass = 'row'\n\nconst RowField: React.FC<RowFieldProps> = (props) => {\n const { className, fieldMap, forceRender = false } = props\n\n const { indexPath, path, readOnly, schemaPath, siblingPermissions } = useFieldProps()\n\n return (\n <RowProvider>\n <div className={[fieldBaseClass, baseClass, className].filter(Boolean).join(' ')}>\n <RenderFields\n {...{ fieldMap, forceRender, path, readOnly, schemaPath }}\n className={`${baseClass}__fields`}\n fieldMap={fieldMap}\n forceRender={forceRender}\n indexPath={indexPath}\n margins={false}\n permissions={siblingPermissions}\n />\n </div>\n </RowProvider>\n )\n}\n\nexport const Row = withCondition(RowField)\n"],"names":["React","useFieldProps","RenderFields","withCondition","fieldBaseClass","RowProvider","useRow","baseClass","RowField","props","className","fieldMap","forceRender","indexPath","path","readOnly","schemaPath","siblingPermissions","div","filter","Boolean","join","margins","permissions","Row"],"mappings":"AAAA;AACA,OAAOA,WAAW,QAAO;AAIzB,SAASC,aAAa,QAAQ,0CAAyC;AACvE,SAASC,YAAY,QAAQ,oCAAmC;AAChE,SAASC,aAAa,QAAQ,qCAAoC;AAClE,SAASC,cAAc,QAAQ,qBAAoB;AAEnD,SAASC,WAAW,EAAEC,MAAM,QAAQ,gBAAe;AAEnD,SAASD,WAAW,EAAEC,MAAM,GAAE;AAE9B,MAAMC,YAAY;AAElB,MAAMC,WAAoC,CAACC;IACzC,MAAM,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,cAAc,KAAK,EAAE,GAAGH;IAErD,MAAM,EAAEI,SAAS,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,kBAAkB,EAAE,GAAGhB;IAEtE,qBACE,oBAACI,iCACC,oBAACa;QAAIR,WAAW;YAACN;YAAgBG;YAAWG;SAAU,CAACS,MAAM,CAACC,SAASC,IAAI,CAAC;qBAC1E,oBAACnB;QACOS;QAAUC;QAAaE;QAAMC;QAAUC;QAC7CN,WAAW,CAAC,EAAEH,UAAU,QAAQ,CAAC;QACjCI,UAAUA;QACVC,aAAaA;QACbC,WAAWA;QACXS,SAAS;QACTC,aAAaN;;AAKvB;AAEA,OAAO,MAAMO,MAAMrB,cAAcK,UAAS"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Select/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,SAAS,EAAE,MAAM,EAAgB,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Select/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,SAAS,EAAE,MAAM,EAAgB,MAAM,eAAe,CAAA;AAOpF,OAAO,KAAgC,MAAM,OAAO,CAAA;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAOvD,OAAO,cAAc,CAAA;AAErB,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAyJD,eAAO,MAAM,MAAM,4BAA6B,CAAA"}
|
|
@@ -3,6 +3,7 @@ import { getTranslation } from '@payloadcms/translations';
|
|
|
3
3
|
import { FieldDescription } from '@payloadcms/ui/forms/FieldDescription';
|
|
4
4
|
import { FieldError } from '@payloadcms/ui/forms/FieldError';
|
|
5
5
|
import { FieldLabel } from '@payloadcms/ui/forms/FieldLabel';
|
|
6
|
+
import { useFieldProps } from '@payloadcms/ui/forms/FieldPropsProvider';
|
|
6
7
|
import React, { useCallback, useState } from 'react';
|
|
7
8
|
import { ReactSelect } from '../../elements/ReactSelect/index.js';
|
|
8
9
|
import { useField } from '../../forms/useField/index.js';
|
|
@@ -18,8 +19,8 @@ const formatOptions = (options)=>options.map((option)=>{
|
|
|
18
19
|
value: option
|
|
19
20
|
};
|
|
20
21
|
});
|
|
21
|
-
|
|
22
|
-
const { name, AfterInput, BeforeInput, CustomDescription, CustomError, CustomLabel, className, descriptionProps, errorProps, hasMany = false, isClearable = true, isSortable = true, labelProps, onChange: onChangeFromProps, options: optionsFromProps = [], path: pathFromProps, readOnly, required, style, validate, width } = props;
|
|
22
|
+
const SelectField = (props)=>{
|
|
23
|
+
const { name, AfterInput, BeforeInput, CustomDescription, CustomError, CustomLabel, className, descriptionProps, errorProps, hasMany = false, isClearable = true, isSortable = true, label, labelProps, onChange: onChangeFromProps, options: optionsFromProps = [], path: pathFromProps, readOnly, required, style, validate, width } = props;
|
|
23
24
|
const { i18n } = useTranslation();
|
|
24
25
|
const [options] = useState(formatOptions(optionsFromProps));
|
|
25
26
|
const memoizedValidate = useCallback((value, validationOptions)=>{
|
|
@@ -35,8 +36,9 @@ export const SelectField = (props)=>{
|
|
|
35
36
|
hasMany,
|
|
36
37
|
options
|
|
37
38
|
]);
|
|
39
|
+
const { path: pathFromContext } = useFieldProps();
|
|
38
40
|
const { path, setValue, showError, value } = useField({
|
|
39
|
-
path: pathFromProps || name,
|
|
41
|
+
path: pathFromContext || pathFromProps || name,
|
|
40
42
|
validate: memoizedValidate
|
|
41
43
|
});
|
|
42
44
|
let valueToRender;
|
|
@@ -95,9 +97,12 @@ export const SelectField = (props)=>{
|
|
|
95
97
|
}
|
|
96
98
|
}, /*#__PURE__*/ React.createElement(FieldError, {
|
|
97
99
|
CustomError: CustomError,
|
|
100
|
+
path: path,
|
|
98
101
|
...errorProps || {}
|
|
99
102
|
}), /*#__PURE__*/ React.createElement(FieldLabel, {
|
|
100
103
|
CustomLabel: CustomLabel,
|
|
104
|
+
label: label,
|
|
105
|
+
required: required,
|
|
101
106
|
...labelProps || {}
|
|
102
107
|
}), /*#__PURE__*/ React.createElement("div", null, BeforeInput, /*#__PURE__*/ React.createElement(ReactSelect, {
|
|
103
108
|
disabled: readOnly,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/fields/Select/index.tsx"],"sourcesContent":["/* eslint-disable react/destructuring-assignment */\n'use client'\nimport type { ClientValidate, FieldBase, Option, OptionObject } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { FieldDescription } from '@payloadcms/ui/forms/FieldDescription'\nimport { FieldError } from '@payloadcms/ui/forms/FieldError'\nimport { FieldLabel } from '@payloadcms/ui/forms/FieldLabel'\nimport React, { useCallback, useState } from 'react'\n\nimport type { FormFieldBase } from '../shared/index.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\n\nexport type SelectFieldProps = FormFieldBase & {\n hasMany?: boolean\n isClearable?: boolean\n isSortable?: boolean\n label?: FieldBase['label']\n name?: string\n onChange?: (e: string) => void\n options?: Option[]\n path?: string\n value?: string\n width?: string\n}\n\nconst formatOptions = (options: Option[]): OptionObject[] =>\n options.map((option) => {\n if (typeof option === 'object' && (option.value || option.value === '')) {\n return option\n }\n\n return {\n label: option,\n value: option,\n } as OptionObject\n })\n\
|
|
1
|
+
{"version":3,"sources":["../../../src/fields/Select/index.tsx"],"sourcesContent":["/* eslint-disable react/destructuring-assignment */\n'use client'\nimport type { ClientValidate, FieldBase, Option, OptionObject } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { FieldDescription } from '@payloadcms/ui/forms/FieldDescription'\nimport { FieldError } from '@payloadcms/ui/forms/FieldError'\nimport { FieldLabel } from '@payloadcms/ui/forms/FieldLabel'\nimport { useFieldProps } from '@payloadcms/ui/forms/FieldPropsProvider'\nimport React, { useCallback, useState } from 'react'\n\nimport type { FormFieldBase } from '../shared/index.js'\n\nimport { ReactSelect } from '../../elements/ReactSelect/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { withCondition } from '../../forms/withCondition/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { fieldBaseClass } from '../shared/index.js'\nimport './index.scss'\n\nexport type SelectFieldProps = FormFieldBase & {\n hasMany?: boolean\n isClearable?: boolean\n isSortable?: boolean\n label?: FieldBase['label']\n name?: string\n onChange?: (e: string) => void\n options?: Option[]\n path?: string\n value?: string\n width?: string\n}\n\nconst formatOptions = (options: Option[]): OptionObject[] =>\n options.map((option) => {\n if (typeof option === 'object' && (option.value || option.value === '')) {\n return option\n }\n\n return {\n label: option,\n value: option,\n } as OptionObject\n })\n\nconst SelectField: React.FC<SelectFieldProps> = (props) => {\n const {\n name,\n AfterInput,\n BeforeInput,\n CustomDescription,\n CustomError,\n CustomLabel,\n className,\n descriptionProps,\n errorProps,\n hasMany = false,\n isClearable = true,\n isSortable = true,\n label,\n labelProps,\n onChange: onChangeFromProps,\n options: optionsFromProps = [],\n path: pathFromProps,\n readOnly,\n required,\n style,\n validate,\n width,\n } = props\n\n const { i18n } = useTranslation()\n\n const [options] = useState(formatOptions(optionsFromProps))\n\n const memoizedValidate: ClientValidate = useCallback(\n (value, validationOptions) => {\n if (typeof validate === 'function')\n return validate(value, { ...validationOptions, hasMany, options, required })\n },\n [validate, required, hasMany, options],\n )\n\n const { path: pathFromContext } = useFieldProps()\n\n const { path, setValue, showError, value } = useField({\n path: pathFromContext || pathFromProps || name,\n validate: memoizedValidate,\n })\n\n let valueToRender\n\n if (hasMany && Array.isArray(value)) {\n valueToRender = value.map((val) => {\n const matchingOption = options.find((option) => option.value === val)\n return {\n label: matchingOption ? getTranslation(matchingOption.label, i18n) : val,\n value: matchingOption?.value ?? val,\n }\n })\n } else if (value) {\n const matchingOption = options.find((option) => option.value === value)\n valueToRender = {\n label: matchingOption ? getTranslation(matchingOption.label, i18n) : value,\n value: matchingOption?.value ?? value,\n }\n }\n\n const onChange = useCallback(\n (selectedOption) => {\n if (!readOnly) {\n let newValue\n if (!selectedOption) {\n newValue = null\n } else if (hasMany) {\n if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => option.value)\n } else {\n newValue = []\n }\n } else {\n newValue = selectedOption.value\n }\n\n if (typeof onChangeFromProps === 'function') {\n onChangeFromProps(newValue)\n }\n\n setValue(newValue)\n }\n },\n [readOnly, hasMany, setValue, onChangeFromProps],\n )\n\n return (\n <div\n className={[\n fieldBaseClass,\n 'select',\n className,\n showError && 'error',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')}\n id={`field-${path.replace(/\\./g, '__')}`}\n style={{\n ...style,\n width,\n }}\n >\n <FieldError CustomError={CustomError} path={path} {...(errorProps || {})} />\n <FieldLabel\n CustomLabel={CustomLabel}\n label={label}\n required={required}\n {...(labelProps || {})}\n />\n <div>\n {BeforeInput}\n <ReactSelect\n disabled={readOnly}\n isClearable={isClearable}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={onChange}\n options={options.map((option) => ({\n ...option,\n label: getTranslation(option.label, i18n),\n }))}\n showError={showError}\n value={valueToRender as OptionObject}\n />\n {AfterInput}\n </div>\n {CustomDescription !== undefined ? (\n CustomDescription\n ) : (\n <FieldDescription {...(descriptionProps || {})} />\n )}\n </div>\n )\n}\n\nexport const Select = withCondition(SelectField)\n"],"names":["getTranslation","FieldDescription","FieldError","FieldLabel","useFieldProps","React","useCallback","useState","ReactSelect","useField","withCondition","useTranslation","fieldBaseClass","formatOptions","options","map","option","value","label","SelectField","props","name","AfterInput","BeforeInput","CustomDescription","CustomError","CustomLabel","className","descriptionProps","errorProps","hasMany","isClearable","isSortable","labelProps","onChange","onChangeFromProps","optionsFromProps","path","pathFromProps","readOnly","required","style","validate","width","i18n","memoizedValidate","validationOptions","pathFromContext","setValue","showError","valueToRender","Array","isArray","val","matchingOption","find","selectedOption","newValue","div","filter","Boolean","join","id","replace","disabled","isMulti","undefined","Select"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Tabs/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAMpD,OAAO,KAA2C,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yDAAyD,CAAA;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAWvD,OAAO,cAAc,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAI5C,OAAO,EAAE,YAAY,EAAE,CAAA;AAEvB,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Tabs/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAMpD,OAAO,KAA2C,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yDAAyD,CAAA;AACxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAWvD,OAAO,cAAc,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAI5C,OAAO,EAAE,YAAY,EAAE,CAAA;AAEvB,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,gBAAgB,CAAA;IAC7B,IAAI,CAAC,EAAE,SAAS,EAAE,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AA6ID,eAAO,MAAM,IAAI,0BAA2B,CAAA"}
|
|
@@ -16,8 +16,8 @@ import { TabsProvider } from './provider.js';
|
|
|
16
16
|
const baseClass = 'tabs-field';
|
|
17
17
|
export { TabsProvider };
|
|
18
18
|
const TabsField = (props)=>{
|
|
19
|
-
const { name, CustomDescription, className, descriptionProps, forceRender = false,
|
|
20
|
-
const { path: pathFromContext, permissions, schemaPath } = useFieldProps();
|
|
19
|
+
const { name, CustomDescription, className, descriptionProps, forceRender = false, path: pathFromProps, readOnly, tabs = [] } = props;
|
|
20
|
+
const { indexPath, path: pathFromContext, permissions, schemaPath } = useFieldProps();
|
|
21
21
|
const path = pathFromContext || pathFromProps || name;
|
|
22
22
|
const { getPreference, setPreference } = usePreferences();
|
|
23
23
|
const { preferencesKey } = useDocumentInfo();
|