@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
|
@@ -17,52 +17,46 @@ const valueFields = {
|
|
|
17
17
|
};
|
|
18
18
|
const baseClass = 'condition';
|
|
19
19
|
export const Condition = (props)=>{
|
|
20
|
-
const { andIndex,
|
|
21
|
-
const
|
|
22
|
-
const [
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
const operatorValue = operatorAndValue?.[0];
|
|
26
|
-
const [internalValue, setInternalValue] = useState(queryValue);
|
|
27
|
-
const [internalOperatorField, setInternalOperatorField] = useState(operatorValue);
|
|
28
|
-
const debouncedValue = useDebounce(internalValue, 300);
|
|
20
|
+
const { addCondition, andIndex, fieldName, fields, initialValue, operator, orIndex, removeCondition, updateCondition } = props;
|
|
21
|
+
const [internalField, setInternalField] = useState(()=>fields.find((field)=>fieldName === field.value));
|
|
22
|
+
const [internalOperatorOption, setInternalOperatorOption] = useState(operator);
|
|
23
|
+
const [internalQueryValue, setInternalQueryValue] = useState(initialValue);
|
|
24
|
+
const debouncedValue = useDebounce(internalQueryValue, 300);
|
|
29
25
|
useEffect(()=>{
|
|
30
|
-
|
|
31
|
-
if (
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
// This is to trigger changes when the debounced value changes
|
|
27
|
+
if (internalField.value && internalOperatorOption && ![
|
|
28
|
+
null,
|
|
29
|
+
undefined
|
|
30
|
+
].includes(debouncedValue)) {
|
|
31
|
+
updateCondition({
|
|
32
|
+
andIndex,
|
|
33
|
+
fieldName: internalField.value,
|
|
34
|
+
operator: internalOperatorOption,
|
|
35
|
+
orIndex,
|
|
36
|
+
value: debouncedValue
|
|
37
|
+
});
|
|
35
38
|
}
|
|
36
|
-
}, [
|
|
37
|
-
fieldName,
|
|
38
|
-
fields,
|
|
39
|
-
activeField
|
|
40
|
-
]);
|
|
41
|
-
useEffect(()=>{
|
|
42
|
-
dispatch({
|
|
43
|
-
type: 'update',
|
|
44
|
-
andIndex,
|
|
45
|
-
orIndex,
|
|
46
|
-
value: debouncedValue || ''
|
|
47
|
-
});
|
|
48
39
|
}, [
|
|
49
40
|
debouncedValue,
|
|
50
|
-
|
|
41
|
+
andIndex,
|
|
42
|
+
internalField?.value,
|
|
43
|
+
internalOperatorOption,
|
|
51
44
|
orIndex,
|
|
52
|
-
|
|
45
|
+
updateCondition,
|
|
46
|
+
operator
|
|
53
47
|
]);
|
|
54
48
|
const booleanSelect = [
|
|
55
49
|
'exists'
|
|
56
|
-
].includes(
|
|
57
|
-
const ValueComponent = booleanSelect ? Select : valueFields[
|
|
50
|
+
].includes(internalOperatorOption) || internalField?.props?.type === 'checkbox';
|
|
51
|
+
const ValueComponent = booleanSelect ? Select : valueFields[internalField?.component] || valueFields.Text;
|
|
58
52
|
let valueOptions;
|
|
59
53
|
if (booleanSelect) {
|
|
60
54
|
valueOptions = [
|
|
61
55
|
'true',
|
|
62
56
|
'false'
|
|
63
57
|
];
|
|
64
|
-
} else if (
|
|
65
|
-
valueOptions =
|
|
58
|
+
} else if (internalField?.props && 'options' in internalField.props) {
|
|
59
|
+
valueOptions = internalField.props.options;
|
|
66
60
|
}
|
|
67
61
|
return /*#__PURE__*/ React.createElement("div", {
|
|
68
62
|
className: baseClass
|
|
@@ -75,43 +69,35 @@ export const Condition = (props)=>{
|
|
|
75
69
|
}, /*#__PURE__*/ React.createElement(ReactSelect, {
|
|
76
70
|
isClearable: false,
|
|
77
71
|
onChange: (field)=>{
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
field: field?.value,
|
|
82
|
-
orIndex
|
|
83
|
-
});
|
|
72
|
+
setInternalField(fields.find((f)=>f.value === field.value));
|
|
73
|
+
setInternalOperatorOption(undefined);
|
|
74
|
+
setInternalQueryValue(undefined);
|
|
84
75
|
},
|
|
85
76
|
options: fields,
|
|
86
|
-
value: fields.find((field)=>
|
|
77
|
+
value: fields.find((field)=>internalField.value === field.value) || fields[0]
|
|
87
78
|
})), /*#__PURE__*/ React.createElement("div", {
|
|
88
79
|
className: `${baseClass}__operator`
|
|
89
80
|
}, /*#__PURE__*/ React.createElement(ReactSelect, {
|
|
90
|
-
disabled: !
|
|
81
|
+
disabled: !internalField.value,
|
|
91
82
|
isClearable: false,
|
|
92
83
|
onChange: (operator)=>{
|
|
93
|
-
|
|
94
|
-
type: 'update',
|
|
95
|
-
andIndex,
|
|
96
|
-
operator: operator.value,
|
|
97
|
-
orIndex
|
|
98
|
-
});
|
|
99
|
-
setInternalOperatorField(operator.value);
|
|
84
|
+
setInternalOperatorOption(operator.value);
|
|
100
85
|
},
|
|
101
|
-
options:
|
|
102
|
-
value:
|
|
86
|
+
options: internalField?.operators,
|
|
87
|
+
value: internalField?.operators.find((operator)=>internalOperatorOption === operator.value) || null
|
|
103
88
|
})), /*#__PURE__*/ React.createElement("div", {
|
|
104
89
|
className: `${baseClass}__value`
|
|
105
90
|
}, /*#__PURE__*/ React.createElement(RenderCustomComponent, {
|
|
106
|
-
CustomComponent:
|
|
91
|
+
CustomComponent: internalField?.props?.admin?.components?.Filter,
|
|
107
92
|
DefaultComponent: ValueComponent,
|
|
108
93
|
componentProps: {
|
|
109
|
-
...
|
|
110
|
-
disabled: !
|
|
111
|
-
onChange:
|
|
112
|
-
operator:
|
|
94
|
+
...internalField?.props,
|
|
95
|
+
disabled: !internalOperatorOption,
|
|
96
|
+
onChange: setInternalQueryValue,
|
|
97
|
+
operator: internalOperatorOption,
|
|
113
98
|
options: valueOptions,
|
|
114
|
-
|
|
99
|
+
relationTo: internalField?.props?.type === 'relationship' && 'cellProps' in internalField.props && typeof internalField.props.cellProps === 'object' && 'relationTo' in internalField.props.cellProps ? internalField.props.cellProps?.relationTo : undefined,
|
|
100
|
+
value: internalQueryValue ?? ''
|
|
115
101
|
}
|
|
116
102
|
}))), /*#__PURE__*/ React.createElement("div", {
|
|
117
103
|
className: `${baseClass}__actions`
|
|
@@ -120,8 +106,7 @@ export const Condition = (props)=>{
|
|
|
120
106
|
className: `${baseClass}__actions-remove`,
|
|
121
107
|
icon: "x",
|
|
122
108
|
iconStyle: "with-border",
|
|
123
|
-
onClick: ()=>
|
|
124
|
-
type: 'remove',
|
|
109
|
+
onClick: ()=>removeCondition({
|
|
125
110
|
andIndex,
|
|
126
111
|
orIndex
|
|
127
112
|
}),
|
|
@@ -131,10 +116,9 @@ export const Condition = (props)=>{
|
|
|
131
116
|
className: `${baseClass}__actions-add`,
|
|
132
117
|
icon: "plus",
|
|
133
118
|
iconStyle: "with-border",
|
|
134
|
-
onClick: ()=>
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
field: fields[0].value,
|
|
119
|
+
onClick: ()=>addCondition({
|
|
120
|
+
andIndex,
|
|
121
|
+
fieldName,
|
|
138
122
|
orIndex,
|
|
139
123
|
relation: 'and'
|
|
140
124
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"sourcesContent":["import type { Where } from 'payload/types'\n\nimport React, { useEffect, useState } from 'react'\n\nimport type { Action, FieldCondition } from '../types.js'\n\nexport type Props = {\n andIndex: number\n dispatch: (action: Action) => void\n fields: FieldCondition[]\n orIndex: number\n value: Where\n}\n\nimport { RenderCustomComponent } from '../../../elements/RenderCustomComponent/index.js'\nimport { useDebounce } from '../../../hooks/useDebounce.js'\nimport { Button } from '../../Button/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { DateField } from './Date/index.js'\nimport { NumberField } from './Number/index.js'\nimport { RelationshipField } from './Relationship/index.js'\nimport { Select } from './Select/index.js'\nimport Text from './Text/index.js'\nimport './index.scss'\n\ntype ComponentType = 'Date' | 'Number' | 'Relationship' | 'Select' | 'Text'\nconst valueFields: Record<ComponentType, React.FC> = {\n Date: DateField,\n Number: NumberField,\n Relationship: RelationshipField,\n Select,\n Text,\n}\n\nconst baseClass = 'condition'\n\nexport const Condition: React.FC<Props> = (props) => {\n const { andIndex, dispatch, fields, orIndex, value } = props\n const fieldName = Object.keys(value)[0]\n const [activeField, setActiveField] = useState<FieldCondition>(() =>\n fields.find((field) => fieldName === field.value),\n )\n\n const operatorAndValue = value?.[fieldName] ? Object.entries(value[fieldName])[0] : undefined\n const queryValue = operatorAndValue?.[1]\n const operatorValue = operatorAndValue?.[0]\n\n const [internalValue, setInternalValue] = useState(queryValue)\n const [internalOperatorField, setInternalOperatorField] = useState(operatorValue)\n\n const debouncedValue = useDebounce(internalValue, 300)\n\n useEffect(() => {\n const newActiveField = fields.find(({ value: name }) => name === fieldName)\n\n if (newActiveField && newActiveField !== activeField) {\n setActiveField(newActiveField)\n setInternalOperatorField(null)\n setInternalValue('')\n }\n }, [fieldName, fields, activeField])\n\n useEffect(() => {\n dispatch({\n type: 'update',\n andIndex,\n orIndex,\n value: debouncedValue || '',\n })\n }, [debouncedValue, dispatch, orIndex, andIndex])\n\n const booleanSelect =\n ['exists'].includes(operatorValue) || activeField?.props?.type === 'checkbox'\n const ValueComponent = booleanSelect\n ? Select\n : valueFields[activeField?.component] || valueFields.Text\n\n let valueOptions\n if (booleanSelect) {\n valueOptions = ['true', 'false']\n } else if (activeField?.props && 'options' in activeField.props) {\n valueOptions = activeField.props.options\n }\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <div className={`${baseClass}__inputs`}>\n <div className={`${baseClass}__field`}>\n <ReactSelect\n isClearable={false}\n onChange={(field) => {\n dispatch({\n type: 'update',\n andIndex,\n field: field?.value,\n orIndex,\n })\n }}\n options={fields}\n value={fields.find((field) => fieldName === field.value)}\n />\n </div>\n <div className={`${baseClass}__operator`}>\n <ReactSelect\n disabled={!fieldName}\n isClearable={false}\n onChange={(operator) => {\n dispatch({\n type: 'update',\n andIndex,\n operator: operator.value,\n orIndex,\n })\n setInternalOperatorField(operator.value)\n }}\n options={activeField?.operators}\n value={\n activeField?.operators.find(\n (operator) => internalOperatorField === operator.value,\n ) || null\n }\n />\n </div>\n <div className={`${baseClass}__value`}>\n <RenderCustomComponent\n CustomComponent={activeField?.props?.admin?.components?.Filter}\n DefaultComponent={ValueComponent}\n componentProps={{\n ...activeField?.props,\n disabled: !operatorValue,\n onChange: setInternalValue,\n operator: operatorValue,\n options: valueOptions,\n value: internalValue,\n }}\n />\n </div>\n </div>\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__actions-remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={() =>\n dispatch({\n type: 'remove',\n andIndex,\n orIndex,\n })\n }\n round\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__actions-add`}\n icon=\"plus\"\n iconStyle=\"with-border\"\n onClick={() =>\n dispatch({\n type: 'add',\n andIndex: andIndex + 1,\n field: fields[0].value,\n orIndex,\n relation: 'and',\n })\n }\n round\n />\n </div>\n </div>\n </div>\n )\n}\n"],"names":["React","useEffect","useState","RenderCustomComponent","useDebounce","Button","ReactSelect","DateField","NumberField","RelationshipField","Select","Text","valueFields","Date","Number","Relationship","baseClass","Condition","props","andIndex","dispatch","fields","orIndex","value","fieldName","Object","keys","activeField","setActiveField","find","field","operatorAndValue","entries","undefined","queryValue","operatorValue","internalValue","setInternalValue","internalOperatorField","setInternalOperatorField","debouncedValue","newActiveField","name","type","booleanSelect","includes","ValueComponent","component","valueOptions","options","div","className","isClearable","onChange","disabled","operator","operators","CustomComponent","admin","components","Filter","DefaultComponent","componentProps","buttonStyle","icon","iconStyle","onClick","round","relation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react'\n\nimport type { FieldCondition } from '../types.js'\n\nexport type Props = {\n addCondition: ({\n andIndex,\n fieldName,\n orIndex,\n relation,\n }: {\n andIndex: number\n fieldName: string\n orIndex: number\n relation: 'and' | 'or'\n }) => void\n andIndex: number\n fieldName: string\n fields: FieldCondition[]\n initialValue: string\n operator: string\n orIndex: number\n removeCondition: ({ andIndex, orIndex }: { andIndex: number; orIndex: number }) => void\n updateCondition: ({\n andIndex,\n fieldName,\n operator,\n orIndex,\n value,\n }: {\n andIndex: number\n fieldName: string\n operator: string\n orIndex: number\n value: string\n }) => void\n}\n\nimport type { RelationshipFieldProps } from '@payloadcms/ui/fields/Relationship'\n\nimport { RenderCustomComponent } from '../../../elements/RenderCustomComponent/index.js'\nimport { useDebounce } from '../../../hooks/useDebounce.js'\nimport { Button } from '../../Button/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { DateField } from './Date/index.js'\nimport { NumberField } from './Number/index.js'\nimport { RelationshipField } from './Relationship/index.js'\nimport { Select } from './Select/index.js'\nimport Text from './Text/index.js'\nimport './index.scss'\n\ntype ComponentType = 'Date' | 'Number' | 'Relationship' | 'Select' | 'Text'\nconst valueFields: Record<ComponentType, React.FC> = {\n Date: DateField,\n Number: NumberField,\n Relationship: RelationshipField,\n Select,\n Text,\n}\n\nconst baseClass = 'condition'\n\nexport const Condition: React.FC<Props> = (props) => {\n const {\n addCondition,\n andIndex,\n fieldName,\n fields,\n initialValue,\n operator,\n orIndex,\n removeCondition,\n updateCondition,\n } = props\n const [internalField, setInternalField] = useState<FieldCondition>(() =>\n fields.find((field) => fieldName === field.value),\n )\n const [internalOperatorOption, setInternalOperatorOption] = useState(operator)\n const [internalQueryValue, setInternalQueryValue] = useState<string>(initialValue)\n\n const debouncedValue = useDebounce(internalQueryValue, 300)\n\n useEffect(() => {\n // This is to trigger changes when the debounced value changes\n if (\n internalField.value &&\n internalOperatorOption &&\n ![null, undefined].includes(debouncedValue)\n ) {\n updateCondition({\n andIndex,\n fieldName: internalField.value,\n operator: internalOperatorOption,\n orIndex,\n value: debouncedValue,\n })\n }\n }, [\n debouncedValue,\n andIndex,\n internalField?.value,\n internalOperatorOption,\n orIndex,\n updateCondition,\n operator,\n ])\n\n const booleanSelect =\n ['exists'].includes(internalOperatorOption) || internalField?.props?.type === 'checkbox'\n const ValueComponent = booleanSelect\n ? Select\n : valueFields[internalField?.component] || valueFields.Text\n\n let valueOptions\n if (booleanSelect) {\n valueOptions = ['true', 'false']\n } else if (internalField?.props && 'options' in internalField.props) {\n valueOptions = internalField.props.options\n }\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <div className={`${baseClass}__inputs`}>\n <div className={`${baseClass}__field`}>\n <ReactSelect\n isClearable={false}\n onChange={(field) => {\n setInternalField(fields.find((f) => f.value === field.value))\n setInternalOperatorOption(undefined)\n setInternalQueryValue(undefined)\n }}\n options={fields}\n value={fields.find((field) => internalField.value === field.value) || fields[0]}\n />\n </div>\n <div className={`${baseClass}__operator`}>\n <ReactSelect\n disabled={!internalField.value}\n isClearable={false}\n onChange={(operator) => {\n setInternalOperatorOption(operator.value)\n }}\n options={internalField?.operators}\n value={\n internalField?.operators.find(\n (operator) => internalOperatorOption === operator.value,\n ) || null\n }\n />\n </div>\n <div className={`${baseClass}__value`}>\n <RenderCustomComponent\n CustomComponent={internalField?.props?.admin?.components?.Filter}\n DefaultComponent={ValueComponent}\n componentProps={{\n ...internalField?.props,\n disabled: !internalOperatorOption,\n onChange: setInternalQueryValue,\n operator: internalOperatorOption,\n options: valueOptions,\n relationTo:\n internalField?.props?.type === 'relationship' &&\n 'cellProps' in internalField.props &&\n typeof internalField.props.cellProps === 'object' &&\n 'relationTo' in internalField.props.cellProps\n ? internalField.props.cellProps?.relationTo\n : undefined,\n value: internalQueryValue ?? '',\n }}\n />\n </div>\n </div>\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__actions-remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={() =>\n removeCondition({\n andIndex,\n orIndex,\n })\n }\n round\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__actions-add`}\n icon=\"plus\"\n iconStyle=\"with-border\"\n onClick={() =>\n addCondition({\n andIndex,\n fieldName,\n orIndex,\n relation: 'and',\n })\n }\n round\n />\n </div>\n </div>\n </div>\n )\n}\n"],"names":["React","useEffect","useState","RenderCustomComponent","useDebounce","Button","ReactSelect","DateField","NumberField","RelationshipField","Select","Text","valueFields","Date","Number","Relationship","baseClass","Condition","props","addCondition","andIndex","fieldName","fields","initialValue","operator","orIndex","removeCondition","updateCondition","internalField","setInternalField","find","field","value","internalOperatorOption","setInternalOperatorOption","internalQueryValue","setInternalQueryValue","debouncedValue","undefined","includes","booleanSelect","type","ValueComponent","component","valueOptions","options","div","className","isClearable","onChange","f","disabled","operators","CustomComponent","admin","components","Filter","DefaultComponent","componentProps","relationTo","cellProps","buttonStyle","icon","iconStyle","onClick","round","relation"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAElD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAQnD,OAAO,cAAc,CAAA;AAOrB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA0NpD,CAAA"}
|
|
@@ -1,66 +1,60 @@
|
|
|
1
1
|
import { getTranslation } from '@payloadcms/translations';
|
|
2
|
-
import {
|
|
3
|
-
import React, { useReducer, useState } from 'react';
|
|
4
|
-
import { useConfig } from '../../providers/Config/index.js';
|
|
2
|
+
import React, { useEffect, useState } from 'react';
|
|
5
3
|
import { useListQuery } from '../../providers/ListQuery/index.js';
|
|
6
4
|
import { useSearchParams } from '../../providers/SearchParams/index.js';
|
|
7
5
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
8
6
|
import { Button } from '../Button/index.js';
|
|
7
|
+
import { useTableColumns } from '../TableColumns/index.js';
|
|
9
8
|
import { Condition } from './Condition/index.js';
|
|
10
|
-
import
|
|
11
|
-
import reducer from './reducer.js';
|
|
9
|
+
import { reduceFieldMap } from './reduceFieldMap.js';
|
|
12
10
|
import { transformWhereQuery } from './transformWhereQuery.js';
|
|
13
11
|
import validateWhereQuery from './validateWhereQuery.js';
|
|
14
12
|
const baseClass = 'where-builder';
|
|
15
|
-
const reduceFields = (fields, i18n)=>flattenTopLevelFields(fields).reduce((reduced, field)=>{
|
|
16
|
-
if (typeof fieldTypes[field.type] === 'object') {
|
|
17
|
-
const operatorKeys = new Set();
|
|
18
|
-
const operators = fieldTypes[field.type].operators.reduce((acc, operator)=>{
|
|
19
|
-
if (!operatorKeys.has(operator.value)) {
|
|
20
|
-
operatorKeys.add(operator.value);
|
|
21
|
-
return [
|
|
22
|
-
...acc,
|
|
23
|
-
{
|
|
24
|
-
...operator,
|
|
25
|
-
label: i18n.t(`operators:${operator.label}`)
|
|
26
|
-
}
|
|
27
|
-
];
|
|
28
|
-
}
|
|
29
|
-
return acc;
|
|
30
|
-
}, []);
|
|
31
|
-
const formattedField = {
|
|
32
|
-
label: getTranslation(field.label || field.name, i18n),
|
|
33
|
-
value: field.name,
|
|
34
|
-
...fieldTypes[field.type],
|
|
35
|
-
operators,
|
|
36
|
-
props: {
|
|
37
|
-
...field
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
return [
|
|
41
|
-
...reduced,
|
|
42
|
-
formattedField
|
|
43
|
-
];
|
|
44
|
-
}
|
|
45
|
-
return reduced;
|
|
46
|
-
}, []);
|
|
47
13
|
/**
|
|
48
14
|
* The WhereBuilder component is used to render the filter controls for a collection's list view.
|
|
49
15
|
* It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).
|
|
50
16
|
*/ export const WhereBuilder = (props)=>{
|
|
51
|
-
const { collectionPluralLabel
|
|
17
|
+
const { collectionPluralLabel } = props;
|
|
52
18
|
const { i18n, t } = useTranslation();
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
|
|
19
|
+
const { columns } = useTableColumns();
|
|
20
|
+
const [reducedFields, setReducedColumns] = useState(()=>reduceFieldMap(columns, i18n));
|
|
21
|
+
useEffect(()=>{
|
|
22
|
+
setReducedColumns(reduceFieldMap(columns, i18n));
|
|
23
|
+
}, [
|
|
24
|
+
columns,
|
|
25
|
+
i18n
|
|
26
|
+
]);
|
|
56
27
|
const { searchParams } = useSearchParams();
|
|
57
28
|
const { handleWhereChange } = useListQuery();
|
|
29
|
+
const [shouldUpdateQuery, setShouldUpdateQuery] = React.useState(false);
|
|
58
30
|
// This handles initializing the where conditions from the search query (URL). That way, if you pass in
|
|
59
31
|
// query params to the URL, the where conditions will be initialized from those and displayed in the UI.
|
|
60
32
|
// Example: /admin/collections/posts?where[or][0][and][0][text][equals]=example%20post
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
33
|
+
/*
|
|
34
|
+
stored conditions look like this:
|
|
35
|
+
[
|
|
36
|
+
_or_ & _and_ queries have the same shape:
|
|
37
|
+
{
|
|
38
|
+
and: [{
|
|
39
|
+
category: {
|
|
40
|
+
equals: 'category-a'
|
|
41
|
+
}
|
|
42
|
+
}]
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
{
|
|
46
|
+
and:[{
|
|
47
|
+
category: {
|
|
48
|
+
equals: 'category-b'
|
|
49
|
+
},
|
|
50
|
+
text: {
|
|
51
|
+
not_equals: 'oranges'
|
|
52
|
+
},
|
|
53
|
+
}]
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
*/ const [conditions, setConditions] = React.useState(()=>{
|
|
57
|
+
const whereFromSearch = searchParams.where;
|
|
64
58
|
if (whereFromSearch) {
|
|
65
59
|
if (validateWhereQuery(whereFromSearch)) {
|
|
66
60
|
return whereFromSearch.or;
|
|
@@ -74,6 +68,76 @@ const reduceFields = (fields, i18n)=>flattenTopLevelFields(fields).reduce((reduc
|
|
|
74
68
|
}
|
|
75
69
|
return [];
|
|
76
70
|
});
|
|
71
|
+
const addCondition = React.useCallback(({ andIndex, fieldName, orIndex, relation })=>{
|
|
72
|
+
setConditions((prevConditions)=>{
|
|
73
|
+
const newConditions = [
|
|
74
|
+
...prevConditions
|
|
75
|
+
];
|
|
76
|
+
if (relation === 'and') {
|
|
77
|
+
newConditions[orIndex].and.splice(andIndex, 0, {
|
|
78
|
+
[fieldName]: {}
|
|
79
|
+
});
|
|
80
|
+
} else {
|
|
81
|
+
newConditions.push({
|
|
82
|
+
and: [
|
|
83
|
+
{
|
|
84
|
+
[fieldName]: {}
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return newConditions;
|
|
90
|
+
});
|
|
91
|
+
}, []);
|
|
92
|
+
const updateCondition = React.useCallback(({ andIndex, fieldName: fieldNameArg, operator: operatorArg, orIndex, value: valueArg })=>{
|
|
93
|
+
setConditions((prevConditions)=>{
|
|
94
|
+
const newConditions = [
|
|
95
|
+
...prevConditions
|
|
96
|
+
];
|
|
97
|
+
if (typeof newConditions[orIndex].and[andIndex] === 'object') {
|
|
98
|
+
const fieldName = fieldNameArg;
|
|
99
|
+
const operator = operatorArg;
|
|
100
|
+
const value = valueArg ?? (operator ? newConditions[orIndex].and[andIndex][operator] : '');
|
|
101
|
+
if (fieldName && operator && ![
|
|
102
|
+
null,
|
|
103
|
+
undefined
|
|
104
|
+
].includes(value)) {
|
|
105
|
+
newConditions[orIndex].and[andIndex] = {
|
|
106
|
+
[fieldName]: operator ? {
|
|
107
|
+
[operator]: value
|
|
108
|
+
} : {}
|
|
109
|
+
};
|
|
110
|
+
setShouldUpdateQuery(true);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return newConditions;
|
|
114
|
+
});
|
|
115
|
+
}, []);
|
|
116
|
+
const removeCondition = React.useCallback(({ andIndex, orIndex })=>{
|
|
117
|
+
setConditions((prevConditions)=>{
|
|
118
|
+
const newConditions = [
|
|
119
|
+
...prevConditions
|
|
120
|
+
];
|
|
121
|
+
newConditions[orIndex].and.splice(andIndex, 1);
|
|
122
|
+
if (newConditions[orIndex].and.length === 0) {
|
|
123
|
+
newConditions.splice(orIndex, 1);
|
|
124
|
+
}
|
|
125
|
+
return newConditions;
|
|
126
|
+
});
|
|
127
|
+
setShouldUpdateQuery(true);
|
|
128
|
+
}, []);
|
|
129
|
+
React.useEffect(()=>{
|
|
130
|
+
if (shouldUpdateQuery) {
|
|
131
|
+
handleWhereChange({
|
|
132
|
+
or: conditions
|
|
133
|
+
});
|
|
134
|
+
setShouldUpdateQuery(false);
|
|
135
|
+
}
|
|
136
|
+
}, [
|
|
137
|
+
conditions,
|
|
138
|
+
handleWhereChange,
|
|
139
|
+
shouldUpdateQuery
|
|
140
|
+
]);
|
|
77
141
|
return /*#__PURE__*/ React.createElement("div", {
|
|
78
142
|
className: baseClass
|
|
79
143
|
}, conditions.length > 0 && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("div", {
|
|
@@ -88,27 +152,38 @@ const reduceFields = (fields, i18n)=>flattenTopLevelFields(fields).reduce((reduc
|
|
|
88
152
|
className: `${baseClass}__label`
|
|
89
153
|
}, t('general:or')), /*#__PURE__*/ React.createElement("ul", {
|
|
90
154
|
className: `${baseClass}__and-filters`
|
|
91
|
-
}, Array.isArray(or?.and) && or.and.map((_, andIndex)
|
|
155
|
+
}, Array.isArray(or?.and) && or.and.map((_, andIndex)=>{
|
|
156
|
+
const initialFieldName = Object.keys(conditions[orIndex].and[andIndex])[0];
|
|
157
|
+
const initialOperator = Object.keys(conditions[orIndex].and[andIndex]?.[initialFieldName] || {})?.[0] || undefined;
|
|
158
|
+
const initialValue = conditions[orIndex].and[andIndex]?.[initialFieldName]?.[initialOperator] || '';
|
|
159
|
+
return /*#__PURE__*/ React.createElement("li", {
|
|
92
160
|
key: andIndex
|
|
93
161
|
}, andIndex !== 0 && /*#__PURE__*/ React.createElement("div", {
|
|
94
162
|
className: `${baseClass}__label`
|
|
95
163
|
}, t('general:and')), /*#__PURE__*/ React.createElement(Condition, {
|
|
164
|
+
addCondition: addCondition,
|
|
96
165
|
andIndex: andIndex,
|
|
97
|
-
|
|
166
|
+
fieldName: initialFieldName,
|
|
98
167
|
fields: reducedFields,
|
|
168
|
+
initialValue: initialValue,
|
|
99
169
|
key: andIndex,
|
|
170
|
+
operator: initialOperator,
|
|
100
171
|
orIndex: orIndex,
|
|
101
|
-
|
|
102
|
-
|
|
172
|
+
removeCondition: removeCondition,
|
|
173
|
+
updateCondition: updateCondition
|
|
174
|
+
}));
|
|
175
|
+
}))))), /*#__PURE__*/ React.createElement(Button, {
|
|
103
176
|
buttonStyle: "icon-label",
|
|
104
177
|
className: `${baseClass}__add-or`,
|
|
105
178
|
icon: "plus",
|
|
106
179
|
iconPosition: "left",
|
|
107
180
|
iconStyle: "with-border",
|
|
108
181
|
onClick: ()=>{
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
182
|
+
addCondition({
|
|
183
|
+
andIndex: 0,
|
|
184
|
+
fieldName: reducedFields[0].value,
|
|
185
|
+
orIndex: conditions.length,
|
|
186
|
+
relation: 'or'
|
|
112
187
|
});
|
|
113
188
|
}
|
|
114
189
|
}, t('general:or'))), conditions.length === 0 && /*#__PURE__*/ React.createElement("div", {
|
|
@@ -122,10 +197,14 @@ const reduceFields = (fields, i18n)=>flattenTopLevelFields(fields).reduce((reduc
|
|
|
122
197
|
iconPosition: "left",
|
|
123
198
|
iconStyle: "with-border",
|
|
124
199
|
onClick: ()=>{
|
|
125
|
-
if (reducedFields.length > 0)
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
200
|
+
if (reducedFields.length > 0) {
|
|
201
|
+
addCondition({
|
|
202
|
+
andIndex: 0,
|
|
203
|
+
fieldName: reducedFields[0].value,
|
|
204
|
+
orIndex: conditions.length,
|
|
205
|
+
relation: 'or'
|
|
206
|
+
});
|
|
207
|
+
}
|
|
129
208
|
}
|
|
130
209
|
}, t('general:addFilter'))));
|
|
131
210
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/WhereBuilder/index.tsx"],"sourcesContent":["import type { Where } from 'payload/types'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { flattenTopLevelFields } from 'payload/utilities'\nimport React, { useReducer, useState } from 'react'\n\nimport type { WhereBuilderProps } from './types.js'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useSearchParams } from '../../providers/SearchParams/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { Condition } from './Condition/index.js'\nimport fieldTypes from './field-types.js'\nimport './index.scss'\nimport reducer from './reducer.js'\nimport { transformWhereQuery } from './transformWhereQuery.js'\nimport validateWhereQuery from './validateWhereQuery.js'\n\nconst baseClass = 'where-builder'\n\nconst reduceFields = (fields, i18n) =>\n flattenTopLevelFields(fields).reduce((reduced, field) => {\n if (typeof fieldTypes[field.type] === 'object') {\n const operatorKeys = new Set()\n const operators = fieldTypes[field.type].operators.reduce((acc, operator) => {\n if (!operatorKeys.has(operator.value)) {\n operatorKeys.add(operator.value)\n return [\n ...acc,\n {\n ...operator,\n label: i18n.t(`operators:${operator.label}`),\n },\n ]\n }\n return acc\n }, [])\n\n const formattedField = {\n label: getTranslation(field.label || field.name, i18n),\n value: field.name,\n ...fieldTypes[field.type],\n operators,\n props: {\n ...field,\n },\n }\n\n return [...reduced, formattedField]\n }\n\n return reduced\n }, [])\n\nexport { WhereBuilderProps }\n\n/**\n * The WhereBuilder component is used to render the filter controls for a collection's list view.\n * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const { collectionPluralLabel, collectionSlug } = props\n const { i18n, t } = useTranslation()\n\n const config = useConfig()\n const collection = config.collections.find((c) => c.slug === collectionSlug)\n const [reducedFields] = useState(() => reduceFields(collection.fields, i18n))\n\n const { searchParams } = useSearchParams()\n const { handleWhereChange } = useListQuery()\n\n // This handles initializing the where conditions from the search query (URL). That way, if you pass in\n // query params to the URL, the where conditions will be initialized from those and displayed in the UI.\n // Example: /admin/collections/posts?where[or][0][and][0][text][equals]=example%20post\n const [conditions, dispatchConditions] = useReducer(\n reducer((state) => handleWhereChange({ or: state })),\n searchParams.where as Where,\n (whereFromSearch: Where) => {\n if (whereFromSearch) {\n if (validateWhereQuery(whereFromSearch)) {\n return whereFromSearch.or\n }\n\n // Transform the where query to be in the right format. This will transform something simple like [text][equals]=example%20post to the right format\n const transformedWhere = transformWhereQuery(whereFromSearch)\n\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or\n }\n\n console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`)\n }\n return []\n },\n )\n\n return (\n <div className={baseClass}>\n {conditions.length > 0 && (\n <React.Fragment>\n <div className={`${baseClass}__label`}>\n {t('general:filterWhere', { label: getTranslation(collectionPluralLabel, i18n) })}\n </div>\n <ul className={`${baseClass}__or-filters`}>\n {conditions.map((or, orIndex) => (\n <li key={orIndex}>\n {orIndex !== 0 && <div className={`${baseClass}__label`}>{t('general:or')}</div>}\n <ul className={`${baseClass}__and-filters`}>\n {Array.isArray(or?.and) &&\n or.and.map((_, andIndex) => (\n <li key={andIndex}>\n {andIndex !== 0 && (\n <div className={`${baseClass}__label`}>{t('general:and')}</div>\n )}\n <Condition\n andIndex={andIndex}\n dispatch={dispatchConditions}\n fields={reducedFields}\n key={andIndex}\n orIndex={orIndex}\n value={conditions[orIndex].and[andIndex]}\n />\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-or`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={() => {\n if (reducedFields.length > 0)\n dispatchConditions({ type: 'add', field: reducedFields[0].value })\n }}\n >\n {t('general:or')}\n </Button>\n </React.Fragment>\n )}\n {conditions.length === 0 && (\n <div className={`${baseClass}__no-filters`}>\n <div className={`${baseClass}__label`}>{t('general:noFiltersSet')}</div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-first-filter`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={() => {\n if (reducedFields.length > 0)\n dispatchConditions({ type: 'add', field: reducedFields[0].value })\n }}\n >\n {t('general:addFilter')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n"],"names":["getTranslation","flattenTopLevelFields","React","useReducer","useState","useConfig","useListQuery","useSearchParams","useTranslation","Button","Condition","fieldTypes","reducer","transformWhereQuery","validateWhereQuery","baseClass","reduceFields","fields","i18n","reduce","reduced","field","type","operatorKeys","Set","operators","acc","operator","has","value","add","label","t","formattedField","name","props","WhereBuilder","collectionPluralLabel","collectionSlug","config","collection","collections","find","c","slug","reducedFields","searchParams","handleWhereChange","conditions","dispatchConditions","state","or","where","whereFromSearch","transformedWhere","console","warn","JSON","stringify","div","className","length","Fragment","ul","map","orIndex","li","key","Array","isArray","and","_","andIndex","dispatch","buttonStyle","icon","iconPosition","iconStyle","onClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/WhereBuilder/index.tsx"],"sourcesContent":["import { getTranslation } from '@payloadcms/translations'\nimport React, { useEffect, useState } from 'react'\n\nimport type { WhereBuilderProps } from './types.js'\n\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useSearchParams } from '../../providers/SearchParams/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { useTableColumns } from '../TableColumns/index.js'\nimport { Condition } from './Condition/index.js'\nimport './index.scss'\nimport { reduceFieldMap } from './reduceFieldMap.js'\nimport { transformWhereQuery } from './transformWhereQuery.js'\nimport validateWhereQuery from './validateWhereQuery.js'\n\nconst baseClass = 'where-builder'\n\nexport { WhereBuilderProps }\n\n/**\n * The WhereBuilder component is used to render the filter controls for a collection's list view.\n * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const { collectionPluralLabel } = props\n const { i18n, t } = useTranslation()\n const { columns } = useTableColumns()\n\n const [reducedFields, setReducedColumns] = useState(() => reduceFieldMap(columns, i18n))\n\n useEffect(() => {\n setReducedColumns(reduceFieldMap(columns, i18n))\n }, [columns, i18n])\n\n const { searchParams } = useSearchParams()\n const { handleWhereChange } = useListQuery()\n const [shouldUpdateQuery, setShouldUpdateQuery] = React.useState(false)\n\n // This handles initializing the where conditions from the search query (URL). That way, if you pass in\n // query params to the URL, the where conditions will be initialized from those and displayed in the UI.\n // Example: /admin/collections/posts?where[or][0][and][0][text][equals]=example%20post\n /*\n stored conditions look like this:\n [\n _or_ & _and_ queries have the same shape:\n {\n and: [{\n category: {\n equals: 'category-a'\n }\n }]\n },\n\n {\n and:[{\n category: {\n equals: 'category-b'\n },\n text: {\n not_equals: 'oranges'\n },\n }]\n }\n ]\n */\n\n const [conditions, setConditions] = React.useState(() => {\n const whereFromSearch = searchParams.where\n if (whereFromSearch) {\n if (validateWhereQuery(whereFromSearch)) {\n return whereFromSearch.or\n }\n\n // Transform the where query to be in the right format. This will transform something simple like [text][equals]=example%20post to the right format\n const transformedWhere = transformWhereQuery(whereFromSearch)\n\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or\n }\n\n console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`)\n }\n\n return []\n })\n\n const addCondition = React.useCallback(({ andIndex, fieldName, orIndex, relation }) => {\n setConditions((prevConditions) => {\n const newConditions = [...prevConditions]\n if (relation === 'and') {\n newConditions[orIndex].and.splice(andIndex, 0, { [fieldName]: {} })\n } else {\n newConditions.push({\n and: [\n {\n [fieldName]: {},\n },\n ],\n })\n }\n\n return newConditions\n })\n }, [])\n\n const updateCondition = React.useCallback(\n ({ andIndex, fieldName: fieldNameArg, operator: operatorArg, orIndex, value: valueArg }) => {\n setConditions((prevConditions) => {\n const newConditions = [...prevConditions]\n if (typeof newConditions[orIndex].and[andIndex] === 'object') {\n const fieldName = fieldNameArg\n const operator = operatorArg\n const value = valueArg ?? (operator ? newConditions[orIndex].and[andIndex][operator] : '')\n\n if (fieldName && operator && ![null, undefined].includes(value)) {\n newConditions[orIndex].and[andIndex] = {\n [fieldName]: operator ? { [operator]: value } : {},\n }\n setShouldUpdateQuery(true)\n }\n }\n\n return newConditions\n })\n },\n [],\n )\n\n const removeCondition = React.useCallback(({ andIndex, orIndex }) => {\n setConditions((prevConditions) => {\n const newConditions = [...prevConditions]\n newConditions[orIndex].and.splice(andIndex, 1)\n\n if (newConditions[orIndex].and.length === 0) {\n newConditions.splice(orIndex, 1)\n }\n\n return newConditions\n })\n setShouldUpdateQuery(true)\n }, [])\n\n React.useEffect(() => {\n if (shouldUpdateQuery) {\n handleWhereChange({ or: conditions })\n setShouldUpdateQuery(false)\n }\n }, [conditions, handleWhereChange, shouldUpdateQuery])\n\n return (\n <div className={baseClass}>\n {conditions.length > 0 && (\n <React.Fragment>\n <div className={`${baseClass}__label`}>\n {t('general:filterWhere', { label: getTranslation(collectionPluralLabel, i18n) })}\n </div>\n <ul className={`${baseClass}__or-filters`}>\n {conditions.map((or, orIndex) => (\n <li key={orIndex}>\n {orIndex !== 0 && <div className={`${baseClass}__label`}>{t('general:or')}</div>}\n <ul className={`${baseClass}__and-filters`}>\n {Array.isArray(or?.and) &&\n or.and.map((_, andIndex) => {\n const initialFieldName = Object.keys(conditions[orIndex].and[andIndex])[0]\n const initialOperator =\n Object.keys(\n conditions[orIndex].and[andIndex]?.[initialFieldName] || {},\n )?.[0] || undefined\n const initialValue =\n conditions[orIndex].and[andIndex]?.[initialFieldName]?.[initialOperator] ||\n ''\n\n return (\n <li key={andIndex}>\n {andIndex !== 0 && (\n <div className={`${baseClass}__label`}>{t('general:and')}</div>\n )}\n <Condition\n addCondition={addCondition}\n andIndex={andIndex}\n fieldName={initialFieldName}\n fields={reducedFields}\n initialValue={initialValue}\n key={andIndex}\n operator={initialOperator}\n orIndex={orIndex}\n removeCondition={removeCondition}\n updateCondition={updateCondition}\n />\n </li>\n )\n })}\n </ul>\n </li>\n ))}\n </ul>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-or`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={() => {\n addCondition({\n andIndex: 0,\n fieldName: reducedFields[0].value,\n orIndex: conditions.length,\n relation: 'or',\n })\n }}\n >\n {t('general:or')}\n </Button>\n </React.Fragment>\n )}\n {conditions.length === 0 && (\n <div className={`${baseClass}__no-filters`}>\n <div className={`${baseClass}__label`}>{t('general:noFiltersSet')}</div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-first-filter`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={() => {\n if (reducedFields.length > 0) {\n addCondition({\n andIndex: 0,\n fieldName: reducedFields[0].value,\n orIndex: conditions.length,\n relation: 'or',\n })\n }\n }}\n >\n {t('general:addFilter')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n"],"names":["getTranslation","React","useEffect","useState","useListQuery","useSearchParams","useTranslation","Button","useTableColumns","Condition","reduceFieldMap","transformWhereQuery","validateWhereQuery","baseClass","WhereBuilder","props","collectionPluralLabel","i18n","t","columns","reducedFields","setReducedColumns","searchParams","handleWhereChange","shouldUpdateQuery","setShouldUpdateQuery","conditions","setConditions","whereFromSearch","where","or","transformedWhere","console","warn","JSON","stringify","addCondition","useCallback","andIndex","fieldName","orIndex","relation","prevConditions","newConditions","and","splice","push","updateCondition","fieldNameArg","operator","operatorArg","value","valueArg","undefined","includes","removeCondition","length","div","className","Fragment","label","ul","map","li","key","Array","isArray","_","initialFieldName","Object","keys","initialOperator","initialValue","fields","buttonStyle","icon","iconPosition","iconStyle","onClick"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reduceFieldMap.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/reduceFieldMap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAI/C,eAAO,MAAM,cAAc,aAAc,MAAM,EAAE,qBAkCzC,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import fieldTypes from './field-types.js';
|
|
2
|
+
export const reduceFieldMap = (fieldMap, i18n)=>fieldMap.reduce((reduced, field)=>{
|
|
3
|
+
if (typeof fieldTypes[field.type] === 'object') {
|
|
4
|
+
const operatorKeys = new Set();
|
|
5
|
+
const operators = fieldTypes[field.type].operators.reduce((acc, operator)=>{
|
|
6
|
+
if (!operatorKeys.has(operator.value)) {
|
|
7
|
+
operatorKeys.add(operator.value);
|
|
8
|
+
return [
|
|
9
|
+
...acc,
|
|
10
|
+
{
|
|
11
|
+
...operator,
|
|
12
|
+
label: i18n.t(`operators:${operator.label}`)
|
|
13
|
+
}
|
|
14
|
+
];
|
|
15
|
+
}
|
|
16
|
+
return acc;
|
|
17
|
+
}, []);
|
|
18
|
+
const formattedField = {
|
|
19
|
+
label: field.Label,
|
|
20
|
+
value: field.name,
|
|
21
|
+
...fieldTypes[field.type],
|
|
22
|
+
operators,
|
|
23
|
+
props: {
|
|
24
|
+
...field,
|
|
25
|
+
...field?.cellProps || {}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
return [
|
|
29
|
+
...reduced,
|
|
30
|
+
formattedField
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
return reduced;
|
|
34
|
+
}, []);
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=reduceFieldMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/WhereBuilder/reduceFieldMap.tsx"],"sourcesContent":["import type { Column } from '../Table/index.js'\n\nimport fieldTypes from './field-types.js'\n\nexport const reduceFieldMap = (fieldMap: Column[], i18n) =>\n fieldMap.reduce((reduced, field) => {\n if (typeof fieldTypes[field.type] === 'object') {\n const operatorKeys = new Set()\n\n const operators = fieldTypes[field.type].operators.reduce((acc, operator) => {\n if (!operatorKeys.has(operator.value)) {\n operatorKeys.add(operator.value)\n return [\n ...acc,\n {\n ...operator,\n label: i18n.t(`operators:${operator.label}`),\n },\n ]\n }\n return acc\n }, [])\n\n const formattedField = {\n label: field.Label,\n value: field.name,\n ...fieldTypes[field.type],\n operators,\n props: {\n ...field,\n ...(field?.cellProps || {}),\n },\n }\n\n return [...reduced, formattedField]\n }\n\n return reduced\n }, [])\n"],"names":["fieldTypes","reduceFieldMap","fieldMap","i18n","reduce","reduced","field","type","operatorKeys","Set","operators","acc","operator","has","value","add","label","t","formattedField","Label","name","props","cellProps"],"mappings":"AAEA,OAAOA,gBAAgB,mBAAkB;AAEzC,OAAO,MAAMC,iBAAiB,CAACC,UAAoBC,OACjDD,SAASE,MAAM,CAAC,CAACC,SAASC;QACxB,IAAI,OAAON,UAAU,CAACM,MAAMC,IAAI,CAAC,KAAK,UAAU;YAC9C,MAAMC,eAAe,IAAIC;YAEzB,MAAMC,YAAYV,UAAU,CAACM,MAAMC,IAAI,CAAC,CAACG,SAAS,CAACN,MAAM,CAAC,CAACO,KAAKC;gBAC9D,IAAI,CAACJ,aAAaK,GAAG,CAACD,SAASE,KAAK,GAAG;oBACrCN,aAAaO,GAAG,CAACH,SAASE,KAAK;oBAC/B,OAAO;2BACFH;wBACH;4BACE,GAAGC,QAAQ;4BACXI,OAAOb,KAAKc,CAAC,CAAC,CAAC,UAAU,EAAEL,SAASI,KAAK,CAAC,CAAC;wBAC7C;qBACD;gBACH;gBACA,OAAOL;YACT,GAAG,EAAE;YAEL,MAAMO,iBAAiB;gBACrBF,OAAOV,MAAMa,KAAK;gBAClBL,OAAOR,MAAMc,IAAI;gBACjB,GAAGpB,UAAU,CAACM,MAAMC,IAAI,CAAC;gBACzBG;gBACAW,OAAO;oBACL,GAAGf,KAAK;oBACR,GAAIA,OAAOgB,aAAa,CAAC,CAAC;gBAC5B;YACF;YAEA,OAAO;mBAAIjB;gBAASa;aAAe;QACrC;QAEA,OAAOb;IACT,GAAG,EAAE,EAAC"}
|
|
@@ -20,7 +20,7 @@ import React from 'react';
|
|
|
20
20
|
*/ export function withMergedProps({ Component, toMergeIntoProps }) {
|
|
21
21
|
// A wrapper around the args.Component to inject the args.toMergeArgs as props, which are merged with the passed props
|
|
22
22
|
const MergedPropsComponent = (passedProps)=>{
|
|
23
|
-
const mergedProps = deepMerge(
|
|
23
|
+
const mergedProps = deepMerge(passedProps, toMergeIntoProps);
|
|
24
24
|
return /*#__PURE__*/ React.createElement(Component, mergedProps);
|
|
25
25
|
};
|
|
26
26
|
return MergedPropsComponent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/withMergedProps/index.tsx"],"sourcesContent":["import { deepMerge } from 'payload/utilities'\nimport React from 'react'\n\n/**\n * Creates a higher-order component (HOC) that merges predefined properties (`toMergeIntoProps`)\n * with any properties passed to the resulting component.\n *\n * Use this when you want to pre-specify some props for a component, while also allowing users to\n * pass in their own props. The HOC ensures the passed props and predefined props are combined before\n * rendering the original component.\n *\n * @example\n * const PredefinedComponent = getMergedPropsComponent({\n * Component: OriginalComponent,\n * toMergeIntoProps: { someExtraValue: 5 }\n * });\n * // Using <PredefinedComponent customProp=\"value\" /> will result in\n * // <OriginalComponent customProp=\"value\" someExtraValue={5} />\n *\n * @returns A higher-order component with combined properties.\n */\nexport function withMergedProps<ToMergeIntoProps, CompleteReturnProps>({\n Component,\n toMergeIntoProps,\n}: {\n Component: React.FC<CompleteReturnProps>\n toMergeIntoProps: ToMergeIntoProps\n}): React.FC<CompleteReturnProps> {\n // A wrapper around the args.Component to inject the args.toMergeArgs as props, which are merged with the passed props\n const MergedPropsComponent: React.FC<CompleteReturnProps> = (passedProps) => {\n const mergedProps = deepMerge(
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/withMergedProps/index.tsx"],"sourcesContent":["import { deepMerge } from 'payload/utilities'\nimport React from 'react'\n\n/**\n * Creates a higher-order component (HOC) that merges predefined properties (`toMergeIntoProps`)\n * with any properties passed to the resulting component.\n *\n * Use this when you want to pre-specify some props for a component, while also allowing users to\n * pass in their own props. The HOC ensures the passed props and predefined props are combined before\n * rendering the original component.\n *\n * @example\n * const PredefinedComponent = getMergedPropsComponent({\n * Component: OriginalComponent,\n * toMergeIntoProps: { someExtraValue: 5 }\n * });\n * // Using <PredefinedComponent customProp=\"value\" /> will result in\n * // <OriginalComponent customProp=\"value\" someExtraValue={5} />\n *\n * @returns A higher-order component with combined properties.\n */\nexport function withMergedProps<ToMergeIntoProps, CompleteReturnProps>({\n Component,\n toMergeIntoProps,\n}: {\n Component: React.FC<CompleteReturnProps>\n toMergeIntoProps: ToMergeIntoProps\n}): React.FC<CompleteReturnProps> {\n // A wrapper around the args.Component to inject the args.toMergeArgs as props, which are merged with the passed props\n const MergedPropsComponent: React.FC<CompleteReturnProps> = (passedProps) => {\n const mergedProps = deepMerge(passedProps, toMergeIntoProps)\n return <Component {...mergedProps} />\n }\n\n return MergedPropsComponent\n}\n"],"names":["deepMerge","React","withMergedProps","Component","toMergeIntoProps","MergedPropsComponent","passedProps","mergedProps"],"mappings":"AAAA,SAASA,SAAS,QAAQ,oBAAmB;AAC7C,OAAOC,WAAW,QAAO;AAEzB;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,SAASC,gBAAuD,EACrEC,SAAS,EACTC,gBAAgB,EAIjB;IACC,sHAAsH;IACtH,MAAMC,uBAAsD,CAACC;QAC3D,MAAMC,cAAcP,UAAUM,aAAaF;QAC3C,qBAAO,oBAACD,WAAcI;IACxB;IAEA,OAAOF;AACT"}
|
|
@@ -8,6 +8,7 @@ type ArrayRowProps = UseDraggableSortableReturn & {
|
|
|
8
8
|
CustomRowLabel?: React.ReactNode;
|
|
9
9
|
addRow: (rowIndex: number) => void;
|
|
10
10
|
duplicateRow: (rowIndex: number) => void;
|
|
11
|
+
errorCount: number;
|
|
11
12
|
fieldMap: FieldMap;
|
|
12
13
|
forceRender?: boolean;
|
|
13
14
|
hasMaxRows?: boolean;
|
|
@@ -21,6 +22,7 @@ type ArrayRowProps = UseDraggableSortableReturn & {
|
|
|
21
22
|
row: Row;
|
|
22
23
|
rowCount: number;
|
|
23
24
|
rowIndex: number;
|
|
25
|
+
schemaPath: string;
|
|
24
26
|
setCollapse: (rowID: string, collapsed: boolean) => void;
|
|
25
27
|
};
|
|
26
28
|
export declare const ArrayRow: React.FC<ArrayRowProps>;
|