@payloadcms/ui 3.23.0-canary.fa36283 → 3.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +1 -1
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/ViewDescription/index.d.ts +0 -1
- package/dist/elements/ViewDescription/index.d.ts.map +1 -1
- package/dist/elements/ViewDescription/index.js +1 -2
- package/dist/elements/ViewDescription/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.d.ts +2 -2
- package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.js +1 -0
- package/dist/elements/WhereBuilder/Condition/DefaultFilter/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 +59 -43
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Select/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Select/index.js +2 -0
- package/dist/elements/WhereBuilder/Condition/Select/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Select/types.d.ts +1 -0
- package/dist/elements/WhereBuilder/Condition/Select/types.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Select/types.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/index.d.ts +5 -16
- package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/Condition/index.js +114 -276
- package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/types.d.ts +2 -2
- package/dist/elements/WhereBuilder/Condition/types.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/Condition/types.js.map +1 -1
- package/dist/elements/WhereBuilder/field-types.d.ts +1 -92
- package/dist/elements/WhereBuilder/field-types.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/field-types.js.map +1 -1
- package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/index.js +168 -259
- package/dist/elements/WhereBuilder/index.js.map +1 -1
- package/dist/elements/WhereBuilder/{reduceClientFields.d.ts → reduceFields.d.ts} +5 -4
- package/dist/elements/WhereBuilder/reduceFields.d.ts.map +1 -0
- package/dist/elements/WhereBuilder/{reduceClientFields.js → reduceFields.js} +8 -8
- package/dist/elements/WhereBuilder/reduceFields.js.map +1 -0
- package/dist/elements/WhereBuilder/types.d.ts +15 -2
- package/dist/elements/WhereBuilder/types.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/types.js.map +1 -1
- package/dist/elements/WhereBuilder/validateWhereQuery.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/validateWhereQuery.js.map +1 -1
- package/dist/exports/client/index.js +11 -11
- package/dist/exports/client/index.js.map +4 -4
- package/dist/styles.css +1 -1
- package/package.json +4 -4
- package/dist/elements/ViewDescription/index.scss +0 -7
- package/dist/elements/WhereBuilder/reduceClientFields.d.ts.map +0 -1
- package/dist/elements/WhereBuilder/reduceClientFields.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAI5D,OAAO,KAAgD,MAAM,OAAO,CAAA;AAiBpE,OAAO,cAAc,CAAA;AAKrB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAA;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACtD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACnD,QAAQ,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;CACxD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAI5D,OAAO,KAAgD,MAAM,OAAO,CAAA;AAiBpE,OAAO,cAAc,CAAA;AAKrB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAA;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACtD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACnD,QAAQ,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;CACxD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA4LpD,CAAA"}
|
|
@@ -162,7 +162,7 @@ export const ListControls = props => {
|
|
|
162
162
|
collectionSlug: collectionConfig.slug,
|
|
163
163
|
fields: collectionConfig?.fields,
|
|
164
164
|
renderedFilters: renderedFilters
|
|
165
|
-
}
|
|
165
|
+
})
|
|
166
166
|
}), enableSort && /*#__PURE__*/_jsx(AnimateHeight, {
|
|
167
167
|
className: `${baseClass}__sort`,
|
|
168
168
|
height: visibleDrawer === 'sort' ? 'auto' : 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useWindowInfo","getTranslation","React","Fragment","useEffect","useRef","useState","useUseTitleField","ChevronIcon","SearchIcon","useListQuery","useTranslation","AnimateHeight","ColumnSelector","DeleteMany","EditMany","Pill","PublishMany","SearchFilter","UnpublishMany","WhereBuilder","validateWhereQuery","getTextFieldsToBeSearched","baseClass","ListControls","props","beforeActions","collectionConfig","collectionSlug","disableBulkDelete","disableBulkEdit","enableColumns","enableSort","renderedFilters","handleSearchChange","query","titleField","i18n","t","breakpoints","s","smallBreak","searchLabel","label","name","listSearchableFields","admin","fields","searchLabelTranslated","hasWhereParam","Boolean","where","shouldInitializeWhereOpened","visibleDrawer","setVisibleDrawer","undefined","current","length","reduce","placeholderText","field","i","_jsxs","className","_jsx","fieldName","handleChange","search","initialParams","collection","icon","direction","onClick","pillStyle","height","id","slug","collectionPluralLabel","labels","plural","String"],"sources":["../../../src/elements/ListControls/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Where } from 'payload'\n\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { Fragment, useEffect, useRef, useState } from 'react'\n\nimport { useUseTitleField } from '../../hooks/useUseAsTitle.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { SearchIcon } from '../../icons/Search/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { AnimateHeight } from '../AnimateHeight/index.js'\nimport { ColumnSelector } from '../ColumnSelector/index.js'\nimport { DeleteMany } from '../DeleteMany/index.js'\nimport { EditMany } from '../EditMany/index.js'\nimport { Pill } from '../Pill/index.js'\nimport { PublishMany } from '../PublishMany/index.js'\nimport { SearchFilter } from '../SearchFilter/index.js'\nimport { UnpublishMany } from '../UnpublishMany/index.js'\nimport { WhereBuilder } from '../WhereBuilder/index.js'\nimport validateWhereQuery from '../WhereBuilder/validateWhereQuery.js'\nimport './index.scss'\nimport { getTextFieldsToBeSearched } from './getTextFieldsToBeSearched.js'\n\nconst baseClass = 'list-controls'\n\nexport type ListControlsProps = {\n readonly beforeActions?: React.ReactNode[]\n readonly collectionConfig: ClientCollectionConfig\n readonly collectionSlug: string\n readonly disableBulkDelete?: boolean\n readonly disableBulkEdit?: boolean\n readonly enableColumns?: boolean\n readonly enableSort?: boolean\n readonly handleSearchChange?: (search: string) => void\n readonly handleSortChange?: (sort: string) => void\n readonly handleWhereChange?: (where: Where) => void\n readonly renderedFilters?: Map<string, React.ReactNode>\n}\n\n/**\n * The ListControls component is used to render the controls (search, filter, where)\n * for a collection's list view. You can find those directly above the table which lists\n * the collection's documents.\n */\nexport const ListControls: React.FC<ListControlsProps> = (props) => {\n const {\n beforeActions,\n collectionConfig,\n collectionSlug,\n disableBulkDelete,\n disableBulkEdit,\n enableColumns = true,\n enableSort = false,\n renderedFilters,\n } = props\n\n const { handleSearchChange, query } = useListQuery()\n const titleField = useUseTitleField(collectionConfig)\n const { i18n, t } = useTranslation()\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n\n const searchLabel =\n (titleField &&\n getTranslation(\n 'label' in titleField && typeof titleField.label === 'string'\n ? titleField.label\n : 'name' in titleField\n ? titleField.name\n : null,\n i18n,\n )) ??\n 'ID'\n\n const listSearchableFields = getTextFieldsToBeSearched(\n collectionConfig.admin.listSearchableFields,\n collectionConfig.fields,\n )\n\n const searchLabelTranslated = useRef(\n t('general:searchBy', { label: getTranslation(searchLabel, i18n) }),\n )\n\n const hasWhereParam = useRef(Boolean(query?.where))\n\n const shouldInitializeWhereOpened = validateWhereQuery(query?.where)\n const [visibleDrawer, setVisibleDrawer] = useState<'columns' | 'sort' | 'where'>(\n shouldInitializeWhereOpened ? 'where' : undefined,\n )\n\n useEffect(() => {\n if (hasWhereParam.current && !query?.where) {\n hasWhereParam.current = false\n } else if (query?.where) {\n hasWhereParam.current = true\n }\n }, [setVisibleDrawer, query?.where])\n\n useEffect(() => {\n if (listSearchableFields?.length > 0) {\n searchLabelTranslated.current = listSearchableFields.reduce(\n (placeholderText: string, field, i: number) => {\n const label =\n 'label' in field && field.label ? field.label : 'name' in field ? field.name : null\n\n if (i === 0) {\n return `${t('general:searchBy', {\n label: getTranslation(label, i18n),\n })}`\n }\n\n if (i === listSearchableFields.length - 1) {\n return `${placeholderText} ${t('general:or')} ${getTranslation(label, i18n)}`\n }\n\n return `${placeholderText}, ${getTranslation(label, i18n)}`\n },\n '',\n )\n } else {\n searchLabelTranslated.current = t('general:searchBy', {\n label: getTranslation(searchLabel, i18n),\n })\n }\n }, [t, listSearchableFields, i18n, searchLabel])\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <SearchIcon />\n <SearchFilter\n fieldName={titleField && 'name' in titleField ? titleField?.name : null}\n handleChange={(search) => {\n return void handleSearchChange(search)\n }}\n // @ts-expect-error @todo: fix types\n initialParams={query}\n key={collectionSlug}\n label={searchLabelTranslated.current}\n />\n <div className={`${baseClass}__buttons`}>\n <div className={`${baseClass}__buttons-wrap`}>\n {!smallBreak && (\n <React.Fragment>\n {beforeActions && beforeActions}\n {!disableBulkEdit && (\n <Fragment>\n <EditMany collection={collectionConfig} />\n <PublishMany collection={collectionConfig} />\n <UnpublishMany collection={collectionConfig} />\n </Fragment>\n )}\n {!disableBulkDelete && <DeleteMany collection={collectionConfig} />}\n </React.Fragment>\n )}\n {enableColumns && (\n <Pill\n aria-controls={`${baseClass}-columns`}\n aria-expanded={visibleDrawer === 'columns'}\n className={`${baseClass}__toggle-columns`}\n icon={<ChevronIcon direction={visibleDrawer === 'columns' ? 'up' : 'down'} />}\n onClick={() =>\n setVisibleDrawer(visibleDrawer !== 'columns' ? 'columns' : undefined)\n }\n pillStyle=\"light\"\n >\n {t('general:columns')}\n </Pill>\n )}\n <Pill\n aria-controls={`${baseClass}-where`}\n aria-expanded={visibleDrawer === 'where'}\n className={`${baseClass}__toggle-where`}\n icon={<ChevronIcon direction={visibleDrawer === 'where' ? 'up' : 'down'} />}\n onClick={() => setVisibleDrawer(visibleDrawer !== 'where' ? 'where' : undefined)}\n pillStyle=\"light\"\n >\n {t('general:filters')}\n </Pill>\n {enableSort && (\n <Pill\n aria-controls={`${baseClass}-sort`}\n aria-expanded={visibleDrawer === 'sort'}\n className={`${baseClass}__toggle-sort`}\n icon={<ChevronIcon />}\n onClick={() => setVisibleDrawer(visibleDrawer !== 'sort' ? 'sort' : undefined)}\n pillStyle=\"light\"\n >\n {t('general:sort')}\n </Pill>\n )}\n </div>\n </div>\n </div>\n {enableColumns && (\n <AnimateHeight\n className={`${baseClass}__columns`}\n height={visibleDrawer === 'columns' ? 'auto' : 0}\n id={`${baseClass}-columns`}\n >\n <ColumnSelector collectionSlug={collectionConfig.slug} />\n </AnimateHeight>\n )}\n <AnimateHeight\n className={`${baseClass}__where`}\n height={visibleDrawer === 'where' ? 'auto' : 0}\n id={`${baseClass}-where`}\n >\n <WhereBuilder\n collectionPluralLabel={collectionConfig?.labels?.plural}\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig?.fields}\n key={String(hasWhereParam.current && !query?.where)}\n renderedFilters={renderedFilters}\n />\n </AnimateHeight>\n {enableSort && (\n <AnimateHeight\n className={`${baseClass}__sort`}\n height={visibleDrawer === 'sort' ? 'auto' : 0}\n id={`${baseClass}-sort`}\n >\n <p>Sort Complex</p>\n {/* <SortComplex\n collection={collection}\n handleChange={handleSortChange}\n modifySearchQuery={modifySearchQuery}\n /> */}\n </AnimateHeight>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useWindowInfo","getTranslation","React","Fragment","useEffect","useRef","useState","useUseTitleField","ChevronIcon","SearchIcon","useListQuery","useTranslation","AnimateHeight","ColumnSelector","DeleteMany","EditMany","Pill","PublishMany","SearchFilter","UnpublishMany","WhereBuilder","validateWhereQuery","getTextFieldsToBeSearched","baseClass","ListControls","props","beforeActions","collectionConfig","collectionSlug","disableBulkDelete","disableBulkEdit","enableColumns","enableSort","renderedFilters","handleSearchChange","query","titleField","i18n","t","breakpoints","s","smallBreak","searchLabel","label","name","listSearchableFields","admin","fields","searchLabelTranslated","hasWhereParam","Boolean","where","shouldInitializeWhereOpened","visibleDrawer","setVisibleDrawer","undefined","current","length","reduce","placeholderText","field","i","_jsxs","className","_jsx","fieldName","handleChange","search","initialParams","collection","icon","direction","onClick","pillStyle","height","id","slug","collectionPluralLabel","labels","plural"],"sources":["../../../src/elements/ListControls/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Where } from 'payload'\n\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { Fragment, useEffect, useRef, useState } from 'react'\n\nimport { useUseTitleField } from '../../hooks/useUseAsTitle.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { SearchIcon } from '../../icons/Search/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { AnimateHeight } from '../AnimateHeight/index.js'\nimport { ColumnSelector } from '../ColumnSelector/index.js'\nimport { DeleteMany } from '../DeleteMany/index.js'\nimport { EditMany } from '../EditMany/index.js'\nimport { Pill } from '../Pill/index.js'\nimport { PublishMany } from '../PublishMany/index.js'\nimport { SearchFilter } from '../SearchFilter/index.js'\nimport { UnpublishMany } from '../UnpublishMany/index.js'\nimport { WhereBuilder } from '../WhereBuilder/index.js'\nimport validateWhereQuery from '../WhereBuilder/validateWhereQuery.js'\nimport './index.scss'\nimport { getTextFieldsToBeSearched } from './getTextFieldsToBeSearched.js'\n\nconst baseClass = 'list-controls'\n\nexport type ListControlsProps = {\n readonly beforeActions?: React.ReactNode[]\n readonly collectionConfig: ClientCollectionConfig\n readonly collectionSlug: string\n readonly disableBulkDelete?: boolean\n readonly disableBulkEdit?: boolean\n readonly enableColumns?: boolean\n readonly enableSort?: boolean\n readonly handleSearchChange?: (search: string) => void\n readonly handleSortChange?: (sort: string) => void\n readonly handleWhereChange?: (where: Where) => void\n readonly renderedFilters?: Map<string, React.ReactNode>\n}\n\n/**\n * The ListControls component is used to render the controls (search, filter, where)\n * for a collection's list view. You can find those directly above the table which lists\n * the collection's documents.\n */\nexport const ListControls: React.FC<ListControlsProps> = (props) => {\n const {\n beforeActions,\n collectionConfig,\n collectionSlug,\n disableBulkDelete,\n disableBulkEdit,\n enableColumns = true,\n enableSort = false,\n renderedFilters,\n } = props\n\n const { handleSearchChange, query } = useListQuery()\n const titleField = useUseTitleField(collectionConfig)\n const { i18n, t } = useTranslation()\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n\n const searchLabel =\n (titleField &&\n getTranslation(\n 'label' in titleField && typeof titleField.label === 'string'\n ? titleField.label\n : 'name' in titleField\n ? titleField.name\n : null,\n i18n,\n )) ??\n 'ID'\n\n const listSearchableFields = getTextFieldsToBeSearched(\n collectionConfig.admin.listSearchableFields,\n collectionConfig.fields,\n )\n\n const searchLabelTranslated = useRef(\n t('general:searchBy', { label: getTranslation(searchLabel, i18n) }),\n )\n\n const hasWhereParam = useRef(Boolean(query?.where))\n\n const shouldInitializeWhereOpened = validateWhereQuery(query?.where)\n const [visibleDrawer, setVisibleDrawer] = useState<'columns' | 'sort' | 'where'>(\n shouldInitializeWhereOpened ? 'where' : undefined,\n )\n\n useEffect(() => {\n if (hasWhereParam.current && !query?.where) {\n hasWhereParam.current = false\n } else if (query?.where) {\n hasWhereParam.current = true\n }\n }, [setVisibleDrawer, query?.where])\n\n useEffect(() => {\n if (listSearchableFields?.length > 0) {\n searchLabelTranslated.current = listSearchableFields.reduce(\n (placeholderText: string, field, i: number) => {\n const label =\n 'label' in field && field.label ? field.label : 'name' in field ? field.name : null\n\n if (i === 0) {\n return `${t('general:searchBy', {\n label: getTranslation(label, i18n),\n })}`\n }\n\n if (i === listSearchableFields.length - 1) {\n return `${placeholderText} ${t('general:or')} ${getTranslation(label, i18n)}`\n }\n\n return `${placeholderText}, ${getTranslation(label, i18n)}`\n },\n '',\n )\n } else {\n searchLabelTranslated.current = t('general:searchBy', {\n label: getTranslation(searchLabel, i18n),\n })\n }\n }, [t, listSearchableFields, i18n, searchLabel])\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <SearchIcon />\n <SearchFilter\n fieldName={titleField && 'name' in titleField ? titleField?.name : null}\n handleChange={(search) => {\n return void handleSearchChange(search)\n }}\n // @ts-expect-error @todo: fix types\n initialParams={query}\n key={collectionSlug}\n label={searchLabelTranslated.current}\n />\n <div className={`${baseClass}__buttons`}>\n <div className={`${baseClass}__buttons-wrap`}>\n {!smallBreak && (\n <React.Fragment>\n {beforeActions && beforeActions}\n {!disableBulkEdit && (\n <Fragment>\n <EditMany collection={collectionConfig} />\n <PublishMany collection={collectionConfig} />\n <UnpublishMany collection={collectionConfig} />\n </Fragment>\n )}\n {!disableBulkDelete && <DeleteMany collection={collectionConfig} />}\n </React.Fragment>\n )}\n {enableColumns && (\n <Pill\n aria-controls={`${baseClass}-columns`}\n aria-expanded={visibleDrawer === 'columns'}\n className={`${baseClass}__toggle-columns`}\n icon={<ChevronIcon direction={visibleDrawer === 'columns' ? 'up' : 'down'} />}\n onClick={() =>\n setVisibleDrawer(visibleDrawer !== 'columns' ? 'columns' : undefined)\n }\n pillStyle=\"light\"\n >\n {t('general:columns')}\n </Pill>\n )}\n <Pill\n aria-controls={`${baseClass}-where`}\n aria-expanded={visibleDrawer === 'where'}\n className={`${baseClass}__toggle-where`}\n icon={<ChevronIcon direction={visibleDrawer === 'where' ? 'up' : 'down'} />}\n onClick={() => setVisibleDrawer(visibleDrawer !== 'where' ? 'where' : undefined)}\n pillStyle=\"light\"\n >\n {t('general:filters')}\n </Pill>\n {enableSort && (\n <Pill\n aria-controls={`${baseClass}-sort`}\n aria-expanded={visibleDrawer === 'sort'}\n className={`${baseClass}__toggle-sort`}\n icon={<ChevronIcon />}\n onClick={() => setVisibleDrawer(visibleDrawer !== 'sort' ? 'sort' : undefined)}\n pillStyle=\"light\"\n >\n {t('general:sort')}\n </Pill>\n )}\n </div>\n </div>\n </div>\n {enableColumns && (\n <AnimateHeight\n className={`${baseClass}__columns`}\n height={visibleDrawer === 'columns' ? 'auto' : 0}\n id={`${baseClass}-columns`}\n >\n <ColumnSelector collectionSlug={collectionConfig.slug} />\n </AnimateHeight>\n )}\n <AnimateHeight\n className={`${baseClass}__where`}\n height={visibleDrawer === 'where' ? 'auto' : 0}\n id={`${baseClass}-where`}\n >\n <WhereBuilder\n collectionPluralLabel={collectionConfig?.labels?.plural}\n collectionSlug={collectionConfig.slug}\n fields={collectionConfig?.fields}\n renderedFilters={renderedFilters}\n />\n </AnimateHeight>\n {enableSort && (\n <AnimateHeight\n className={`${baseClass}__sort`}\n height={visibleDrawer === 'sort' ? 'auto' : 0}\n id={`${baseClass}-sort`}\n >\n <p>Sort Complex</p>\n {/* <SortComplex\n collection={collection}\n handleChange={handleSortChange}\n modifySearchQuery={modifySearchQuery}\n /> */}\n </AnimateHeight>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { DescriptionFunction, StaticDescription } from 'payload';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import './index.scss';
|
|
4
3
|
export type ViewDescriptionComponent = React.ComponentType<any>;
|
|
5
4
|
type Description = DescriptionFunction | StaticDescription | string | ViewDescriptionComponent;
|
|
6
5
|
export type ViewDescriptionProps = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ViewDescription/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAGrE,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ViewDescription/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAGrE,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,MAAM,MAAM,wBAAwB,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;AAE/D,KAAK,WAAW,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,MAAM,GAAG,wBAAwB,CAAA;AAE9F,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;CACzC,CAAA;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,IAAI,wBAAwB,CAE7F;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAS1D,CAAA"}
|
|
@@ -5,7 +5,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
5
5
|
import { getTranslation } from '@payloadcms/translations';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
8
|
-
import './index.scss';
|
|
9
8
|
export function isComponent(description) {
|
|
10
9
|
return /*#__PURE__*/React.isValidElement(description);
|
|
11
10
|
}
|
|
@@ -21,7 +20,7 @@ export const ViewDescription = props => {
|
|
|
21
20
|
let t0;
|
|
22
21
|
if ($[0] !== description || $[1] !== i18n) {
|
|
23
22
|
t0 = _jsx("div", {
|
|
24
|
-
className: "view-description",
|
|
23
|
+
className: "custom-view-description",
|
|
25
24
|
children: getTranslation(description, i18n)
|
|
26
25
|
});
|
|
27
26
|
$[0] = description;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","getTranslation","React","useTranslation","isComponent","description","isValidElement","ViewDescription","props","$","i18n","t0","_jsx","className","children"],"sources":["../../../src/elements/ViewDescription/index.tsx"],"sourcesContent":["'use client'\nimport type { DescriptionFunction, StaticDescription } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport { useTranslation } from '../../providers/Translation/index.js'\
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","getTranslation","React","useTranslation","isComponent","description","isValidElement","ViewDescription","props","$","i18n","t0","_jsx","className","children"],"sources":["../../../src/elements/ViewDescription/index.tsx"],"sourcesContent":["'use client'\nimport type { DescriptionFunction, StaticDescription } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport { useTranslation } from '../../providers/Translation/index.js'\n\nexport type ViewDescriptionComponent = React.ComponentType<any>\n\ntype Description = DescriptionFunction | StaticDescription | string | ViewDescriptionComponent\n\nexport type ViewDescriptionProps = {\n readonly description?: StaticDescription\n}\n\nexport function isComponent(description: Description): description is ViewDescriptionComponent {\n return React.isValidElement(description)\n}\n\nexport const ViewDescription: React.FC<ViewDescriptionProps> = (props) => {\n const { i18n } = useTranslation()\n const { description } = props\n\n if (description) {\n return <div className=\"custom-view-description\">{getTranslation(description, i18n)}</div>\n }\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,cAAc,QAAQ;AAC/B,OAAOC,KAAA,MAAW;AAElB,SAASC,cAAc,QAAQ;AAU/B,OAAO,SAASC,YAAYC,WAAwB;EAClD,oBAAOH,KAAA,CAAMI,cAAc,CAACD,WAAA;AAC9B;AAEA,OAAO,MAAME,eAAA,GAAkDC,KAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EAC7D;IAAAU;EAAA,IAAiBP,cAAA;EACjB;IAAAE;EAAA,IAAwBG,KAAA;EAAA,IAEpBH,WAAA;IAAA,IAAAM,EAAA;IAAA,IAAAF,CAAA,QAAAJ,WAAA,IAAAI,CAAA,QAAAC,IAAA;MACKC,EAAA,GAAAC,IAAA,CAAC;QAAAC,SAAA,EAAc;QAAAC,QAAA,EAA2Bb,cAAA,CAAeI,WAAA,EAAaK,IAAA;MAAA,C;;;;;;;WAAtEC,E;;;CAIX","ignoreList":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Operator, Option } from 'payload';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import type {
|
|
3
|
+
import type { ReducedField } from '../../types.js';
|
|
4
4
|
type Props = {
|
|
5
5
|
booleanSelect: boolean;
|
|
6
6
|
disabled: boolean;
|
|
7
|
-
internalField:
|
|
7
|
+
internalField: ReducedField;
|
|
8
8
|
onChange: React.Dispatch<React.SetStateAction<string>>;
|
|
9
9
|
operator: Operator;
|
|
10
10
|
options: Option[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/DefaultFilter/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAsC,MAAM,SAAS,CAAA;AAEnF,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/DefaultFilter/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAsC,MAAM,SAAS,CAAA;AAEnF,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAQlD,KAAK,KAAK,GAAG;IACX,aAAa,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,OAAO,CAAA;IACjB,aAAa,EAAE,YAAY,CAAA;IAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;IACtD,QAAQ,EAAE,QAAQ,CAAA;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwEzC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","DateFilter","NumberFilter","RelationshipFilter","Select","Text","DefaultFilter","booleanSelect","disabled","internalField","onChange","operator","options","value","includes","field","type","_jsx"],"sources":["../../../../../src/elements/WhereBuilder/Condition/DefaultFilter/index.tsx"],"sourcesContent":["import type { Operator, Option, SelectFieldClient, TextFieldClient } from 'payload'\n\nimport React from 'react'\n\nimport type {
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","DateFilter","NumberFilter","RelationshipFilter","Select","Text","DefaultFilter","booleanSelect","disabled","internalField","onChange","operator","options","value","includes","field","type","_jsx","isClearable"],"sources":["../../../../../src/elements/WhereBuilder/Condition/DefaultFilter/index.tsx"],"sourcesContent":["import type { Operator, Option, SelectFieldClient, TextFieldClient } from 'payload'\n\nimport React from 'react'\n\nimport type { ReducedField } from '../../types.js'\n\nimport { DateFilter } from '../Date/index.js'\nimport { NumberFilter } from '../Number/index.js'\nimport { RelationshipFilter } from '../Relationship/index.js'\nimport { Select } from '../Select/index.js'\nimport { Text } from '../Text/index.js'\n\ntype Props = {\n booleanSelect: boolean\n disabled: boolean\n internalField: ReducedField\n onChange: React.Dispatch<React.SetStateAction<string>>\n operator: Operator\n options: Option[]\n value: string\n}\n\nexport const DefaultFilter: React.FC<Props> = ({\n booleanSelect,\n disabled,\n internalField,\n onChange,\n operator,\n options,\n value,\n}) => {\n if (booleanSelect || ['radio', 'select'].includes(internalField?.field?.type)) {\n return (\n <Select\n disabled={disabled}\n field={internalField.field as SelectFieldClient}\n isClearable={!booleanSelect}\n onChange={onChange}\n operator={operator}\n options={options}\n value={value}\n />\n )\n }\n\n switch (internalField?.field?.type) {\n case 'date': {\n return (\n <DateFilter\n disabled={disabled}\n field={internalField.field}\n onChange={onChange}\n operator={operator}\n value={value}\n />\n )\n }\n\n case 'number': {\n return (\n <NumberFilter\n disabled={disabled}\n field={internalField.field}\n onChange={onChange}\n operator={operator}\n value={value}\n />\n )\n }\n\n case 'relationship': {\n return (\n <RelationshipFilter\n disabled={disabled}\n field={internalField.field}\n onChange={onChange}\n operator={operator}\n value={value}\n />\n )\n }\n\n default: {\n return (\n <Text\n disabled={disabled}\n field={internalField?.field as TextFieldClient}\n onChange={onChange}\n operator={operator}\n value={value}\n />\n )\n }\n }\n}\n"],"mappings":";AAEA,OAAOA,KAAA,MAAW;AAIlB,SAASC,UAAU,QAAQ;AAC3B,SAASC,YAAY,QAAQ;AAC7B,SAASC,kBAAkB,QAAQ;AACnC,SAASC,MAAM,QAAQ;AACvB,SAASC,IAAI,QAAQ;AAYrB,OAAO,MAAMC,aAAA,GAAiCA,CAAC;EAC7CC,aAAa;EACbC,QAAQ;EACRC,aAAa;EACbC,QAAQ;EACRC,QAAQ;EACRC,OAAO;EACPC;AAAK,CACN;EACC,IAAIN,aAAA,IAAiB,CAAC,SAAS,SAAS,CAACO,QAAQ,CAACL,aAAA,EAAeM,KAAA,EAAOC,IAAA,GAAO;IAC7E,oBACEC,IAAA,CAACb,MAAA;MACCI,QAAA,EAAUA,QAAA;MACVO,KAAA,EAAON,aAAA,CAAcM,KAAK;MAC1BG,WAAA,EAAa,CAACX,aAAA;MACdG,QAAA,EAAUA,QAAA;MACVC,QAAA,EAAUA,QAAA;MACVC,OAAA,EAASA,OAAA;MACTC,KAAA,EAAOA;;EAGb;EAEA,QAAQJ,aAAA,EAAeM,KAAA,EAAOC,IAAA;IAC5B,KAAK;MAAQ;QACX,oBACEC,IAAA,CAAChB,UAAA;UACCO,QAAA,EAAUA,QAAA;UACVO,KAAA,EAAON,aAAA,CAAcM,KAAK;UAC1BL,QAAA,EAAUA,QAAA;UACVC,QAAA,EAAUA,QAAA;UACVE,KAAA,EAAOA;;MAGb;IAEA,KAAK;MAAU;QACb,oBACEI,IAAA,CAACf,YAAA;UACCM,QAAA,EAAUA,QAAA;UACVO,KAAA,EAAON,aAAA,CAAcM,KAAK;UAC1BL,QAAA,EAAUA,QAAA;UACVC,QAAA,EAAUA,QAAA;UACVE,KAAA,EAAOA;;MAGb;IAEA,KAAK;MAAgB;QACnB,oBACEI,IAAA,CAACd,kBAAA;UACCK,QAAA,EAAUA,QAAA;UACVO,KAAA,EAAON,aAAA,CAAcM,KAAK;UAC1BL,QAAA,EAAUA,QAAA;UACVC,QAAA,EAAUA,QAAA;UACVE,KAAA,EAAOA;;MAGb;IAEA;MAAS;QACP,oBACEI,IAAA,CAACZ,IAAA;UACCG,QAAA,EAAUA,QAAA;UACVO,KAAA,EAAON,aAAA,EAAeM,KAAA;UACtBL,QAAA,EAAUA,QAAA;UACVC,QAAA,EAAUA,QAAA;UACVE,KAAA,EAAOA;;MAGb;EACF;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAuD,MAAM,OAAO,CAAA;AAG3E,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAuD,MAAM,OAAO,CAAA;AAG3E,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAA;AAQ1D,OAAO,cAAc,CAAA;AAMrB,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwY9C,CAAA"}
|
|
@@ -4,11 +4,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
4
4
|
import * as qs from 'qs-esm';
|
|
5
5
|
import React, { useCallback, useEffect, useReducer, useState } from 'react';
|
|
6
6
|
import { useDebounce } from '../../../../hooks/useDebounce.js';
|
|
7
|
+
import { useEffectEvent } from '../../../../hooks/useEffectEvent.js';
|
|
7
8
|
import { useConfig } from '../../../../providers/Config/index.js';
|
|
8
9
|
import { useTranslation } from '../../../../providers/Translation/index.js';
|
|
9
10
|
import { ReactSelect } from '../../../ReactSelect/index.js';
|
|
10
|
-
import './index.scss';
|
|
11
11
|
import optionsReducer from './optionsReducer.js';
|
|
12
|
+
import './index.scss';
|
|
12
13
|
const baseClass = 'condition-value-relationship';
|
|
13
14
|
const maxResultsPerRequest = 10;
|
|
14
15
|
export const RelationshipFilter = props => {
|
|
@@ -36,23 +37,18 @@ export const RelationshipFilter = props => {
|
|
|
36
37
|
const hasMultipleRelations = Array.isArray(relationTo);
|
|
37
38
|
const [options, dispatchOptions] = useReducer(optionsReducer, []);
|
|
38
39
|
const [search, setSearch] = useState('');
|
|
40
|
+
const debouncedSearch = useDebounce(search, 300);
|
|
39
41
|
const [errorLoading, setErrorLoading] = useState('');
|
|
40
42
|
const [hasLoadedFirstOptions, setHasLoadedFirstOptions] = useState(false);
|
|
41
|
-
const debouncedSearch = useDebounce(search, 300);
|
|
42
43
|
const {
|
|
43
44
|
i18n,
|
|
44
45
|
t
|
|
45
46
|
} = useTranslation();
|
|
46
47
|
const relationSlugs = hasMultipleRelations ? relationTo : [relationTo];
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
return map;
|
|
53
|
-
};
|
|
54
|
-
const nextPageByRelationshipRef = React.useRef(initialRelationMap());
|
|
55
|
-
const partiallyLoadedRelationshipSlugs = React.useRef(relationSlugs);
|
|
48
|
+
const loadedRelationships = React.useRef(new Map(relationSlugs.map(relation => [relation, {
|
|
49
|
+
hasLoadedAll: false,
|
|
50
|
+
nextPage: 1
|
|
51
|
+
}])));
|
|
56
52
|
const addOptions = useCallback((data, relation_0) => {
|
|
57
53
|
const collection = getEntityConfig({
|
|
58
54
|
collectionSlug: relation_0
|
|
@@ -66,23 +62,23 @@ export const RelationshipFilter = props => {
|
|
|
66
62
|
relation: relation_0
|
|
67
63
|
});
|
|
68
64
|
}, [hasMultipleRelations, i18n, getEntityConfig]);
|
|
69
|
-
const
|
|
65
|
+
const loadOptions = useEffectEvent(async ({
|
|
70
66
|
abortController,
|
|
71
67
|
relationSlug
|
|
72
68
|
}) => {
|
|
73
|
-
|
|
69
|
+
const loadedRelationship = loadedRelationships.current.get(relationSlug);
|
|
70
|
+
if (relationSlug && !loadedRelationship.hasLoadedAll) {
|
|
74
71
|
const collection_0 = getEntityConfig({
|
|
75
72
|
collectionSlug: relationSlug
|
|
76
73
|
});
|
|
77
74
|
const fieldToSearch = collection_0?.admin?.useAsTitle || 'id';
|
|
78
|
-
const pageIndex = nextPageByRelationshipRef.current.get(relationSlug);
|
|
79
75
|
const where = {
|
|
80
76
|
and: []
|
|
81
77
|
};
|
|
82
78
|
const query = {
|
|
83
79
|
depth: 0,
|
|
84
80
|
limit: maxResultsPerRequest,
|
|
85
|
-
page:
|
|
81
|
+
page: loadedRelationship.nextPage,
|
|
86
82
|
select: {
|
|
87
83
|
[fieldToSearch]: true
|
|
88
84
|
},
|
|
@@ -110,9 +106,15 @@ export const RelationshipFilter = props => {
|
|
|
110
106
|
if (data_0.docs.length > 0) {
|
|
111
107
|
addOptions(data_0, relationSlug);
|
|
112
108
|
if (data_0.nextPage) {
|
|
113
|
-
|
|
109
|
+
loadedRelationships.current.set(relationSlug, {
|
|
110
|
+
hasLoadedAll: false,
|
|
111
|
+
nextPage: data_0.nextPage
|
|
112
|
+
});
|
|
114
113
|
} else {
|
|
115
|
-
|
|
114
|
+
loadedRelationships.current.set(relationSlug, {
|
|
115
|
+
hasLoadedAll: true,
|
|
116
|
+
nextPage: null
|
|
117
|
+
});
|
|
116
118
|
}
|
|
117
119
|
}
|
|
118
120
|
} else {
|
|
@@ -120,21 +122,23 @@ export const RelationshipFilter = props => {
|
|
|
120
122
|
}
|
|
121
123
|
} catch (e) {
|
|
122
124
|
if (!abortController.signal.aborted) {
|
|
123
|
-
console.error(e)
|
|
125
|
+
console.error(e) // eslint-disable-line no-console
|
|
126
|
+
;
|
|
124
127
|
}
|
|
125
128
|
}
|
|
126
129
|
}
|
|
127
130
|
setHasLoadedFirstOptions(true);
|
|
128
|
-
}
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
+
});
|
|
132
|
+
const handleScrollToBottom = React.useCallback(() => {
|
|
133
|
+
const relationshipToLoad = loadedRelationships.current.entries().next().value;
|
|
134
|
+
if (relationshipToLoad[0] && !relationshipToLoad[1].hasLoadedAll) {
|
|
131
135
|
const abortController_0 = new AbortController();
|
|
132
|
-
void
|
|
136
|
+
void loadOptions({
|
|
133
137
|
abortController: abortController_0,
|
|
134
|
-
relationSlug:
|
|
138
|
+
relationSlug: relationshipToLoad[0]
|
|
135
139
|
});
|
|
136
140
|
}
|
|
137
|
-
}, [
|
|
141
|
+
}, []);
|
|
138
142
|
const findOptionsByValue = useCallback(() => {
|
|
139
143
|
if (value) {
|
|
140
144
|
if (hasMany) {
|
|
@@ -180,22 +184,24 @@ export const RelationshipFilter = props => {
|
|
|
180
184
|
}
|
|
181
185
|
return undefined;
|
|
182
186
|
}, [hasMany, hasMultipleRelations, value, options]);
|
|
183
|
-
const handleInputChange = input => {
|
|
187
|
+
const handleInputChange = useCallback(input => {
|
|
184
188
|
if (input !== search) {
|
|
185
189
|
dispatchOptions({
|
|
186
190
|
type: 'CLEAR',
|
|
187
191
|
i18n,
|
|
188
192
|
required: false
|
|
189
193
|
});
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
194
|
+
const relationSlugs_0 = Array.isArray(relationTo) ? relationTo : [relationTo];
|
|
195
|
+
loadedRelationships.current = new Map(relationSlugs_0.map(relation_1 => [relation_1, {
|
|
196
|
+
hasLoadedAll: false,
|
|
197
|
+
nextPage: 1
|
|
198
|
+
}]));
|
|
193
199
|
setSearch(input);
|
|
194
200
|
}
|
|
195
|
-
};
|
|
196
|
-
const addOptionByID = useCallback(async (id,
|
|
197
|
-
if (!errorLoading && id !== 'null' && id &&
|
|
198
|
-
const response_0 = await fetch(`${serverURL}${api}/${
|
|
201
|
+
}, [i18n, relationTo, search]);
|
|
202
|
+
const addOptionByID = useCallback(async (id, relation_2) => {
|
|
203
|
+
if (!errorLoading && id !== 'null' && id && relation_2) {
|
|
204
|
+
const response_0 = await fetch(`${serverURL}${api}/${relation_2}/${id}?depth=0`, {
|
|
199
205
|
credentials: 'include',
|
|
200
206
|
headers: {
|
|
201
207
|
'Accept-Language': i18n.language
|
|
@@ -205,7 +211,7 @@ export const RelationshipFilter = props => {
|
|
|
205
211
|
const data_1 = await response_0.json();
|
|
206
212
|
addOptions({
|
|
207
213
|
docs: [data_1]
|
|
208
|
-
},
|
|
214
|
+
}, relation_2);
|
|
209
215
|
} else {
|
|
210
216
|
// eslint-disable-next-line no-console
|
|
211
217
|
console.error(t('error:loadingDocument', {
|
|
@@ -215,18 +221,29 @@ export const RelationshipFilter = props => {
|
|
|
215
221
|
}
|
|
216
222
|
}, [i18n, addOptions, api, errorLoading, serverURL, t]);
|
|
217
223
|
/**
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
224
|
+
* When `relationTo` changes externally, reset the options and reload them from scratch
|
|
225
|
+
* The `loadOptions` dependency is a useEffectEvent which has no dependencies of its own
|
|
226
|
+
* This means we can safely depend on it without it triggering this effect to run
|
|
227
|
+
* This is useful because this effect should _only_ run when `relationTo` changes
|
|
221
228
|
*/
|
|
222
229
|
useEffect(() => {
|
|
223
230
|
const relations = Array.isArray(relationTo) ? relationTo : [relationTo];
|
|
231
|
+
loadedRelationships.current = new Map(relations.map(relation_3 => [relation_3, {
|
|
232
|
+
hasLoadedAll: false,
|
|
233
|
+
nextPage: 1
|
|
234
|
+
}]));
|
|
235
|
+
dispatchOptions({
|
|
236
|
+
type: 'CLEAR',
|
|
237
|
+
i18n,
|
|
238
|
+
required: false
|
|
239
|
+
});
|
|
240
|
+
setHasLoadedFirstOptions(false);
|
|
224
241
|
const abortControllers = [];
|
|
225
|
-
relations.forEach(
|
|
242
|
+
relations.forEach(relation_4 => {
|
|
226
243
|
const abortController_1 = new AbortController();
|
|
227
|
-
void
|
|
244
|
+
void loadOptions({
|
|
228
245
|
abortController: abortController_1,
|
|
229
|
-
relationSlug:
|
|
246
|
+
relationSlug: relation_4
|
|
230
247
|
});
|
|
231
248
|
abortControllers.push(abortController_1);
|
|
232
249
|
});
|
|
@@ -241,10 +258,9 @@ export const RelationshipFilter = props => {
|
|
|
241
258
|
}
|
|
242
259
|
});
|
|
243
260
|
};
|
|
244
|
-
}, [i18n,
|
|
261
|
+
}, [i18n, relationTo, debouncedSearch]);
|
|
245
262
|
/**
|
|
246
|
-
* Load any options that were not
|
|
247
|
-
* in the first 10 of each relation fetch
|
|
263
|
+
* Load any other options that might exist in the value that were not loaded already
|
|
248
264
|
*/
|
|
249
265
|
useEffect(() => {
|
|
250
266
|
if (value && hasLoadedFirstOptions) {
|
|
@@ -305,7 +321,7 @@ export const RelationshipFilter = props => {
|
|
|
305
321
|
}
|
|
306
322
|
},
|
|
307
323
|
onInputChange: handleInputChange,
|
|
308
|
-
onMenuScrollToBottom:
|
|
324
|
+
onMenuScrollToBottom: handleScrollToBottom,
|
|
309
325
|
options: options,
|
|
310
326
|
placeholder: t('general:selectValue'),
|
|
311
327
|
value: valueToRender
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["qs","React","useCallback","useEffect","useReducer","useState","useDebounce","useConfig","useTranslation","ReactSelect","optionsReducer","baseClass","maxResultsPerRequest","RelationshipFilter","props","disabled","field","admin","isSortable","hasMany","relationTo","onChange","value","config","routes","api","serverURL","getEntityConfig","hasMultipleRelations","Array","isArray","options","dispatchOptions","search","setSearch","errorLoading","setErrorLoading","hasLoadedFirstOptions","setHasLoadedFirstOptions","debouncedSearch","i18n","t","relationSlugs","initialRelationMap","map","Map","forEach","relation","set","nextPageByRelationshipRef","useRef","partiallyLoadedRelationshipSlugs","addOptions","data","collection","collectionSlug","type","loadRelationOptions","abortController","relationSlug","current","includes","fieldToSearch","useAsTitle","pageIndex","get","where","and","query","depth","limit","page","select","push","like","response","fetch","stringify","addQueryPrefix","credentials","headers","language","signal","ok","json","docs","length","nextPage","filter","partiallyLoadedRelation","e","aborted","console","error","loadMoreOptions","AbortController","findOptionsByValue","val","matchedOption","opt","some","subOpt","find","undefined","valueWithRelation","handleInputChange","input","required","addOptionByID","id","relations","abortControllers","controller","abort","_err","matchedOptions","option","i","classes","Boolean","join","valueToRender","_jsxs","className","_jsx","isMulti","selected","onInputChange","onMenuScrollToBottom","placeholder"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs, Where } from 'payload'\n\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useReducer, useState } from 'react'\n\nimport type { Option } from '../../../ReactSelect/types.js'\nimport type { Props, ValueWithRelation } from './types.js'\n\nimport { useDebounce } from '../../../../hooks/useDebounce.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport './index.scss'\nimport optionsReducer from './optionsReducer.js'\n\nconst baseClass = 'condition-value-relationship'\n\nconst maxResultsPerRequest = 10\n\nexport const RelationshipFilter: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { admin: { isSortable } = {}, hasMany, relationTo },\n onChange,\n value,\n } = props\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const hasMultipleRelations = Array.isArray(relationTo)\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n const [search, setSearch] = useState('')\n const [errorLoading, setErrorLoading] = useState('')\n const [hasLoadedFirstOptions, setHasLoadedFirstOptions] = useState(false)\n const debouncedSearch = useDebounce(search, 300)\n const { i18n, t } = useTranslation()\n const relationSlugs = hasMultipleRelations ? relationTo : [relationTo]\n\n const initialRelationMap = () => {\n const map: Map<string, number> = new Map()\n relationSlugs.forEach((relation) => {\n map.set(relation, 1)\n })\n return map\n }\n\n const nextPageByRelationshipRef = React.useRef<Map<string, number>>(initialRelationMap())\n const partiallyLoadedRelationshipSlugs = React.useRef<string[]>(relationSlugs)\n\n const addOptions = useCallback(\n (data, relation) => {\n const collection = getEntityConfig({ collectionSlug: relation })\n dispatchOptions({ type: 'ADD', collection, data, hasMultipleRelations, i18n, relation })\n },\n [hasMultipleRelations, i18n, getEntityConfig],\n )\n\n const loadRelationOptions = React.useCallback(\n async ({\n abortController,\n relationSlug,\n }: {\n abortController: AbortController\n relationSlug: string\n }) => {\n if (relationSlug && partiallyLoadedRelationshipSlugs.current.includes(relationSlug)) {\n const collection = getEntityConfig({\n collectionSlug: relationSlug,\n })\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n const pageIndex = nextPageByRelationshipRef.current.get(relationSlug)\n\n const where: Where = {\n and: [],\n }\n const query = {\n depth: 0,\n limit: maxResultsPerRequest,\n page: pageIndex,\n select: {\n [fieldToSearch]: true,\n },\n where,\n }\n\n if (debouncedSearch) {\n query.where.and.push({\n [fieldToSearch]: {\n like: debouncedSearch,\n },\n })\n }\n\n try {\n const response = await fetch(\n `${serverURL}${api}/${relationSlug}${qs.stringify(query, { addQueryPrefix: true })}`,\n {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n signal: abortController.signal,\n },\n )\n\n if (response.ok) {\n const data: PaginatedDocs = await response.json()\n if (data.docs.length > 0) {\n addOptions(data, relationSlug)\n\n if (data.nextPage) {\n nextPageByRelationshipRef.current.set(relationSlug, data.nextPage)\n } else {\n partiallyLoadedRelationshipSlugs.current =\n partiallyLoadedRelationshipSlugs.current.filter(\n (partiallyLoadedRelation) => partiallyLoadedRelation !== relationSlug,\n )\n }\n }\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n } catch (e) {\n if (!abortController.signal.aborted) {\n console.error(e)\n }\n }\n }\n\n setHasLoadedFirstOptions(true)\n },\n [addOptions, api, debouncedSearch, getEntityConfig, i18n.language, serverURL, t],\n )\n\n const loadMoreOptions = React.useCallback(() => {\n if (partiallyLoadedRelationshipSlugs.current.length > 0) {\n const abortController = new AbortController()\n void loadRelationOptions({\n abortController,\n relationSlug: partiallyLoadedRelationshipSlugs.current[0],\n })\n }\n }, [loadRelationOptions])\n\n const findOptionsByValue = useCallback((): Option | Option[] => {\n if (value) {\n if (hasMany) {\n if (Array.isArray(value)) {\n return value.map((val) => {\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n options.forEach((opt) => {\n if (opt.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value == val.value) {\n matchedOption = subOpt\n return true\n }\n\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value == val)\n })\n }\n\n return undefined\n }\n\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n const valueWithRelation = value as ValueWithRelation\n\n options.forEach((opt) => {\n if (opt?.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value == valueWithRelation.value) {\n matchedOption = subOpt\n return true\n }\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value == value)\n }\n\n return undefined\n }, [hasMany, hasMultipleRelations, value, options])\n\n const handleInputChange = (input: string) => {\n if (input !== search) {\n dispatchOptions({ type: 'CLEAR', i18n, required: false })\n const relationSlug = partiallyLoadedRelationshipSlugs.current[0]\n partiallyLoadedRelationshipSlugs.current = relationSlugs\n nextPageByRelationshipRef.current.set(relationSlug, 1)\n setSearch(input)\n }\n }\n\n const addOptionByID = useCallback(\n async (id, relation) => {\n if (!errorLoading && id !== 'null' && id && relation) {\n const response = await fetch(`${serverURL}${api}/${relation}/${id}?depth=0`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (response.ok) {\n const data = await response.json()\n addOptions({ docs: [data] }, relation)\n } else {\n // eslint-disable-next-line no-console\n console.error(t('error:loadingDocument', { id }))\n }\n }\n },\n [i18n, addOptions, api, errorLoading, serverURL, t],\n )\n\n /**\n * 1. Trigger initial relationship options fetch\n * 2. When search changes, loadRelationOptions will\n * fire off again\n */\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n const abortControllers: AbortController[] = []\n relations.forEach((relation) => {\n const abortController = new AbortController()\n void loadRelationOptions({\n abortController,\n relationSlug: relation,\n })\n abortControllers.push(abortController)\n })\n\n return () => {\n abortControllers.forEach((controller) => {\n if (controller.signal) {\n try {\n controller.abort()\n } catch (_err) {\n // swallow error\n }\n }\n })\n }\n }, [i18n, loadRelationOptions, relationTo])\n\n /**\n * Load any options that were not returned\n * in the first 10 of each relation fetch\n */\n useEffect(() => {\n if (value && hasLoadedFirstOptions) {\n if (hasMany) {\n const matchedOptions = findOptionsByValue()\n\n ;((matchedOptions as Option[]) || []).forEach((option, i) => {\n if (!option) {\n if (hasMultipleRelations) {\n void addOptionByID(value[i].value, value[i].relationTo)\n } else {\n void addOptionByID(value[i], relationTo)\n }\n }\n })\n } else {\n const matchedOption = findOptionsByValue()\n\n if (!matchedOption) {\n if (hasMultipleRelations) {\n const valueWithRelation = value as ValueWithRelation\n void addOptionByID(valueWithRelation.value, valueWithRelation.relationTo)\n } else {\n void addOptionByID(value, relationTo)\n }\n }\n }\n }\n }, [\n addOptionByID,\n findOptionsByValue,\n hasMany,\n hasMultipleRelations,\n relationTo,\n value,\n hasLoadedFirstOptions,\n ])\n\n const classes = ['field-type', baseClass, errorLoading && 'error-loading']\n .filter(Boolean)\n .join(' ')\n\n const valueToRender = (findOptionsByValue() || value) as Option\n\n return (\n <div className={classes}>\n {!errorLoading && (\n <ReactSelect\n disabled={disabled}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={(selected) => {\n if (!selected) {\n onChange(null)\n return\n }\n if (hasMany && Array.isArray(selected)) {\n onChange(\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 && !Array.isArray(selected)) {\n onChange({\n relationTo: selected?.relationTo,\n value: selected?.value,\n })\n } else if (!Array.isArray(selected)) {\n onChange(selected?.value)\n }\n }}\n onInputChange={handleInputChange}\n onMenuScrollToBottom={loadMoreOptions}\n options={options}\n placeholder={t('general:selectValue')}\n value={valueToRender}\n />\n )}\n {errorLoading && <div className={`${baseClass}__error-loading`}>{errorLoading}</div>}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["qs","React","useCallback","useEffect","useReducer","useState","useDebounce","useEffectEvent","useConfig","useTranslation","ReactSelect","optionsReducer","baseClass","maxResultsPerRequest","RelationshipFilter","props","disabled","field","admin","isSortable","hasMany","relationTo","onChange","value","config","routes","api","serverURL","getEntityConfig","hasMultipleRelations","Array","isArray","options","dispatchOptions","search","setSearch","debouncedSearch","errorLoading","setErrorLoading","hasLoadedFirstOptions","setHasLoadedFirstOptions","i18n","t","relationSlugs","loadedRelationships","useRef","Map","map","relation","hasLoadedAll","nextPage","addOptions","data","collection","collectionSlug","type","loadOptions","abortController","relationSlug","loadedRelationship","current","get","fieldToSearch","useAsTitle","where","and","query","depth","limit","page","select","push","like","response","fetch","stringify","addQueryPrefix","credentials","headers","language","signal","ok","json","docs","length","set","e","aborted","console","error","handleScrollToBottom","relationshipToLoad","entries","next","AbortController","findOptionsByValue","val","matchedOption","forEach","opt","some","subOpt","find","undefined","valueWithRelation","handleInputChange","input","required","addOptionByID","id","relations","abortControllers","controller","abort","_err","matchedOptions","option","i","classes","filter","Boolean","join","valueToRender","_jsxs","className","_jsx","isMulti","selected","onInputChange","onMenuScrollToBottom","placeholder"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs, Where } from 'payload'\n\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useReducer, useState } from 'react'\n\nimport type { Option } from '../../../ReactSelect/types.js'\nimport type { Props, ValueWithRelation } from './types.js'\n\nimport { useDebounce } from '../../../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../../../hooks/useEffectEvent.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport optionsReducer from './optionsReducer.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-relationship'\n\nconst maxResultsPerRequest = 10\n\nexport const RelationshipFilter: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { admin: { isSortable } = {}, hasMany, relationTo },\n onChange,\n value,\n } = props\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const hasMultipleRelations = Array.isArray(relationTo)\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n const [search, setSearch] = useState('')\n const debouncedSearch = useDebounce(search, 300)\n const [errorLoading, setErrorLoading] = useState('')\n const [hasLoadedFirstOptions, setHasLoadedFirstOptions] = useState(false)\n const { i18n, t } = useTranslation()\n\n const relationSlugs = hasMultipleRelations ? relationTo : [relationTo]\n\n const loadedRelationships = React.useRef<\n Map<\n string,\n {\n hasLoadedAll: boolean\n nextPage: number\n }\n >\n >(\n new Map(\n relationSlugs.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n ),\n )\n\n const addOptions = useCallback(\n (data, relation) => {\n const collection = getEntityConfig({ collectionSlug: relation })\n dispatchOptions({ type: 'ADD', collection, data, hasMultipleRelations, i18n, relation })\n },\n [hasMultipleRelations, i18n, getEntityConfig],\n )\n\n const loadOptions = useEffectEvent(\n async ({\n abortController,\n relationSlug,\n }: {\n abortController: AbortController\n relationSlug: string\n }) => {\n const loadedRelationship = loadedRelationships.current.get(relationSlug)\n\n if (relationSlug && !loadedRelationship.hasLoadedAll) {\n const collection = getEntityConfig({\n collectionSlug: relationSlug,\n })\n\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n\n const where: Where = {\n and: [],\n }\n\n const query = {\n depth: 0,\n limit: maxResultsPerRequest,\n page: loadedRelationship.nextPage,\n select: {\n [fieldToSearch]: true,\n },\n where,\n }\n\n if (debouncedSearch) {\n query.where.and.push({\n [fieldToSearch]: {\n like: debouncedSearch,\n },\n })\n }\n\n try {\n const response = await fetch(\n `${serverURL}${api}/${relationSlug}${qs.stringify(query, { addQueryPrefix: true })}`,\n {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n signal: abortController.signal,\n },\n )\n\n if (response.ok) {\n const data: PaginatedDocs = await response.json()\n if (data.docs.length > 0) {\n addOptions(data, relationSlug)\n\n if (data.nextPage) {\n loadedRelationships.current.set(relationSlug, {\n hasLoadedAll: false,\n nextPage: data.nextPage,\n })\n } else {\n loadedRelationships.current.set(relationSlug, {\n hasLoadedAll: true,\n nextPage: null,\n })\n }\n }\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n } catch (e) {\n if (!abortController.signal.aborted) {\n console.error(e) // eslint-disable-line no-console\n }\n }\n }\n\n setHasLoadedFirstOptions(true)\n },\n )\n\n const handleScrollToBottom = React.useCallback(() => {\n const relationshipToLoad = loadedRelationships.current.entries().next().value\n\n if (relationshipToLoad[0] && !relationshipToLoad[1].hasLoadedAll) {\n const abortController = new AbortController()\n\n void loadOptions({\n abortController,\n relationSlug: relationshipToLoad[0],\n })\n }\n }, [])\n\n const findOptionsByValue = useCallback((): Option | Option[] => {\n if (value) {\n if (hasMany) {\n if (Array.isArray(value)) {\n return value.map((val) => {\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n options.forEach((opt) => {\n if (opt.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value == val.value) {\n matchedOption = subOpt\n return true\n }\n\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value == val)\n })\n }\n\n return undefined\n }\n\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n const valueWithRelation = value as ValueWithRelation\n\n options.forEach((opt) => {\n if (opt?.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value == valueWithRelation.value) {\n matchedOption = subOpt\n return true\n }\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value == value)\n }\n\n return undefined\n }, [hasMany, hasMultipleRelations, value, options])\n\n const handleInputChange = useCallback(\n (input: string) => {\n if (input !== search) {\n dispatchOptions({ type: 'CLEAR', i18n, required: false })\n\n const relationSlugs = Array.isArray(relationTo) ? relationTo : [relationTo]\n\n loadedRelationships.current = new Map(\n relationSlugs.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n )\n\n setSearch(input)\n }\n },\n [i18n, relationTo, search],\n )\n\n const addOptionByID = useCallback(\n async (id, relation) => {\n if (!errorLoading && id !== 'null' && id && relation) {\n const response = await fetch(`${serverURL}${api}/${relation}/${id}?depth=0`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (response.ok) {\n const data = await response.json()\n addOptions({ docs: [data] }, relation)\n } else {\n // eslint-disable-next-line no-console\n console.error(t('error:loadingDocument', { id }))\n }\n }\n },\n [i18n, addOptions, api, errorLoading, serverURL, t],\n )\n\n /**\n * When `relationTo` changes externally, reset the options and reload them from scratch\n * The `loadOptions` dependency is a useEffectEvent which has no dependencies of its own\n * This means we can safely depend on it without it triggering this effect to run\n * This is useful because this effect should _only_ run when `relationTo` changes\n */\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n\n loadedRelationships.current = new Map(\n relations.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n )\n\n dispatchOptions({ type: 'CLEAR', i18n, required: false })\n setHasLoadedFirstOptions(false)\n\n const abortControllers: AbortController[] = []\n\n relations.forEach((relation) => {\n const abortController = new AbortController()\n\n void loadOptions({\n abortController,\n relationSlug: relation,\n })\n\n abortControllers.push(abortController)\n })\n\n return () => {\n abortControllers.forEach((controller) => {\n if (controller.signal) {\n try {\n controller.abort()\n } catch (_err) {\n // swallow error\n }\n }\n })\n }\n }, [i18n, relationTo, debouncedSearch])\n\n /**\n * Load any other options that might exist in the value that were not loaded already\n */\n useEffect(() => {\n if (value && hasLoadedFirstOptions) {\n if (hasMany) {\n const matchedOptions = findOptionsByValue()\n\n ;((matchedOptions as Option[]) || []).forEach((option, i) => {\n if (!option) {\n if (hasMultipleRelations) {\n void addOptionByID(value[i].value, value[i].relationTo)\n } else {\n void addOptionByID(value[i], relationTo)\n }\n }\n })\n } else {\n const matchedOption = findOptionsByValue()\n\n if (!matchedOption) {\n if (hasMultipleRelations) {\n const valueWithRelation = value as ValueWithRelation\n void addOptionByID(valueWithRelation.value, valueWithRelation.relationTo)\n } else {\n void addOptionByID(value, relationTo)\n }\n }\n }\n }\n }, [\n addOptionByID,\n findOptionsByValue,\n hasMany,\n hasMultipleRelations,\n relationTo,\n value,\n hasLoadedFirstOptions,\n ])\n\n const classes = ['field-type', baseClass, errorLoading && 'error-loading']\n .filter(Boolean)\n .join(' ')\n\n const valueToRender = (findOptionsByValue() || value) as Option\n\n return (\n <div className={classes}>\n {!errorLoading && (\n <ReactSelect\n disabled={disabled}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={(selected) => {\n if (!selected) {\n onChange(null)\n return\n }\n\n if (hasMany && Array.isArray(selected)) {\n onChange(\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 && !Array.isArray(selected)) {\n onChange({\n relationTo: selected?.relationTo,\n value: selected?.value,\n })\n } else if (!Array.isArray(selected)) {\n onChange(selected?.value)\n }\n }}\n onInputChange={handleInputChange}\n onMenuScrollToBottom={handleScrollToBottom}\n options={options}\n placeholder={t('general:selectValue')}\n value={valueToRender}\n />\n )}\n {errorLoading && <div className={`${baseClass}__error-loading`}>{errorLoading}</div>}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Select/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAMvC,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Select/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAMvC,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuElC,CAAA"}
|
|
@@ -11,6 +11,7 @@ export const Select = t0 => {
|
|
|
11
11
|
const $ = _c(26);
|
|
12
12
|
const {
|
|
13
13
|
disabled,
|
|
14
|
+
isClearable,
|
|
14
15
|
onChange,
|
|
15
16
|
operator,
|
|
16
17
|
options: optionsFromProps,
|
|
@@ -157,6 +158,7 @@ export const Select = t0 => {
|
|
|
157
158
|
}
|
|
158
159
|
return _jsx(ReactSelect, {
|
|
159
160
|
disabled,
|
|
161
|
+
isClearable,
|
|
160
162
|
isMulti,
|
|
161
163
|
onChange: onSelect,
|
|
162
164
|
options: options.map(t8),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","getTranslation","React","useTranslation","ReactSelect","formatOptions","Select","t0","$","disabled","onChange","operator","options","optionsFromProps","value","i18n","t1","setOptions","useState","t2","Symbol","for","isMulti","includes","valueToRender","Array","isArray","t3","val","matchingOption","find","option","label","map","matchingOption_0","t4","option_0","selectedOption","newValue","_temp","onSelect","t5","useEffect","t6","t7","t8","option_2","_jsx","option_1"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Select/index.tsx"],"sourcesContent":["'use client'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { Props } from './types.js'\n\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport { formatOptions } from './formatOptions.js'\n\nexport const Select: React.FC<Props> = ({\n disabled,\n onChange,\n operator,\n options: optionsFromProps,\n value,\n}) => {\n const { i18n } = useTranslation()\n const [options, setOptions] = React.useState(formatOptions(optionsFromProps))\n\n const isMulti = ['in', 'not_in'].includes(operator)\n let valueToRender\n\n if (isMulti && 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 onSelect = React.useCallback(\n (selectedOption) => {\n let newValue\n if (!selectedOption) {\n newValue = null\n } else if (isMulti) {\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 onChange(newValue)\n },\n [isMulti, onChange],\n )\n\n React.useEffect(() => {\n setOptions(formatOptions(optionsFromProps))\n }, [optionsFromProps])\n\n React.useEffect(() => {\n if (!isMulti && Array.isArray(value)) {\n onChange(value[0])\n }\n }, [isMulti, onChange, value])\n\n return (\n <ReactSelect\n disabled={disabled}\n isMulti={isMulti}\n onChange={onSelect}\n options={options.map((option) => ({ ...option, label: getTranslation(option.label, i18n) }))}\n value={valueToRender}\n />\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,SAASC,cAAc,QAAQ;AAC/B,OAAOC,KAAA,MAAW;AAIlB,SAASC,cAAc,QAAQ;AAC/B,SAASC,WAAW,QAAQ;AAC5B,SAASC,aAAa,QAAQ;AAE9B,OAAO,MAAMC,MAAA,GAA0BC,EAAA;EAAA,MAAAC,CAAA,GAAAR,EAAA;EAAC;IAAAS,QAAA;IAAAC,QAAA;IAAAC,QAAA;IAAAC,OAAA,EAAAC,gBAAA;IAAAC;EAAA,
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","getTranslation","React","useTranslation","ReactSelect","formatOptions","Select","t0","$","disabled","isClearable","onChange","operator","options","optionsFromProps","value","i18n","t1","setOptions","useState","t2","Symbol","for","isMulti","includes","valueToRender","Array","isArray","t3","val","matchingOption","find","option","label","map","matchingOption_0","t4","option_0","selectedOption","newValue","_temp","onSelect","t5","useEffect","t6","t7","t8","option_2","_jsx","option_1"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Select/index.tsx"],"sourcesContent":["'use client'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { Props } from './types.js'\n\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport { formatOptions } from './formatOptions.js'\n\nexport const Select: React.FC<Props> = ({\n disabled,\n isClearable,\n onChange,\n operator,\n options: optionsFromProps,\n value,\n}) => {\n const { i18n } = useTranslation()\n const [options, setOptions] = React.useState(formatOptions(optionsFromProps))\n\n const isMulti = ['in', 'not_in'].includes(operator)\n let valueToRender\n\n if (isMulti && 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 onSelect = React.useCallback(\n (selectedOption) => {\n let newValue\n\n if (!selectedOption) {\n newValue = null\n } else if (isMulti) {\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 onChange(newValue)\n },\n [isMulti, onChange],\n )\n\n React.useEffect(() => {\n setOptions(formatOptions(optionsFromProps))\n }, [optionsFromProps])\n\n React.useEffect(() => {\n if (!isMulti && Array.isArray(value)) {\n onChange(value[0])\n }\n }, [isMulti, onChange, value])\n\n return (\n <ReactSelect\n disabled={disabled}\n isClearable={isClearable}\n isMulti={isMulti}\n onChange={onSelect}\n options={options.map((option) => ({ ...option, label: getTranslation(option.label, i18n) }))}\n value={valueToRender}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,6 +2,7 @@ import type { Option, SelectFieldClient } from 'payload';
|
|
|
2
2
|
import type { DefaultFilterProps } from '../types.js';
|
|
3
3
|
export type Props = {
|
|
4
4
|
readonly field: SelectFieldClient;
|
|
5
|
+
readonly isClearable?: boolean;
|
|
5
6
|
readonly onChange: (val: string) => void;
|
|
6
7
|
readonly options: Option[];
|
|
7
8
|
readonly value: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Select/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,GAAG,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Select/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAA;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,GAAG,kBAAkB,CAAA"}
|