@payloadcms/ui 3.80.0-internal.21e9c47 → 3.80.0-internal.8d9ec7c
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/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +49 -1
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +384 -0
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +1 -0
- package/dist/elements/Combobox/index.d.ts.map +1 -1
- package/dist/elements/Combobox/index.js +1 -0
- package/dist/elements/Combobox/index.js.map +1 -1
- package/dist/elements/HierarchyColumnBrowser/index.d.ts +1 -1
- package/dist/elements/HierarchyColumnBrowser/index.d.ts.map +1 -1
- package/dist/elements/HierarchyColumnBrowser/index.js +6 -3
- package/dist/elements/HierarchyColumnBrowser/index.js.map +1 -1
- package/dist/elements/HierarchyColumnBrowser/types.d.ts +3 -0
- package/dist/elements/HierarchyColumnBrowser/types.d.ts.map +1 -1
- package/dist/elements/HierarchyColumnBrowser/types.js.map +1 -1
- package/dist/elements/HierarchyDrawer/Drawer/index.d.ts +1 -1
- package/dist/elements/HierarchyDrawer/Drawer/index.d.ts.map +1 -1
- package/dist/elements/HierarchyDrawer/Drawer/index.js +2 -0
- package/dist/elements/HierarchyDrawer/Drawer/index.js.map +1 -1
- package/dist/elements/HierarchyDrawer/index.d.ts.map +1 -1
- package/dist/elements/HierarchyDrawer/index.js +4 -2
- package/dist/elements/HierarchyDrawer/index.js.map +1 -1
- package/dist/elements/HierarchyDrawer/types.d.ts +3 -0
- package/dist/elements/HierarchyDrawer/types.d.ts.map +1 -1
- package/dist/elements/HierarchyDrawer/types.js.map +1 -1
- package/dist/elements/HierarchyTree/HierarchySidebarTab.d.ts +1 -0
- package/dist/elements/HierarchyTree/HierarchySidebarTab.d.ts.map +1 -1
- package/dist/elements/HierarchyTree/HierarchySidebarTab.js +47 -36
- package/dist/elements/HierarchyTree/HierarchySidebarTab.js.map +1 -1
- package/dist/elements/HierarchyTree/HierarchySidebarTab.server.d.ts.map +1 -1
- package/dist/elements/HierarchyTree/HierarchySidebarTab.server.js +14 -5
- package/dist/elements/HierarchyTree/HierarchySidebarTab.server.js.map +1 -1
- package/dist/elements/HierarchyTree/index.d.ts.map +1 -1
- package/dist/elements/HierarchyTree/index.js +2 -0
- package/dist/elements/HierarchyTree/index.js.map +1 -1
- package/dist/elements/HierarchyTree/types.d.ts +3 -1
- package/dist/elements/HierarchyTree/types.d.ts.map +1 -1
- package/dist/elements/HierarchyTree/types.js.map +1 -1
- package/dist/elements/HydrateHierarchyProvider/index.d.ts.map +1 -1
- package/dist/elements/HydrateHierarchyProvider/index.js +22 -19
- package/dist/elements/HydrateHierarchyProvider/index.js.map +1 -1
- package/dist/elements/Link/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.js +3 -1
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/Toasts/fieldErrors.d.ts +4 -0
- package/dist/elements/Toasts/fieldErrors.d.ts.map +1 -1
- package/dist/elements/Toasts/fieldErrors.js +4 -2
- package/dist/elements/Toasts/fieldErrors.js.map +1 -1
- package/dist/elements/Toasts/fieldErrors.spec.js +46 -0
- package/dist/elements/Toasts/fieldErrors.spec.js.map +1 -0
- package/dist/elements/Tree/TreeNode/index.d.ts +1 -1
- package/dist/elements/Tree/TreeNode/index.d.ts.map +1 -1
- package/dist/elements/Tree/TreeNode/index.js +3 -0
- package/dist/elements/Tree/TreeNode/index.js.map +1 -1
- package/dist/elements/Tree/index.d.ts.map +1 -1
- package/dist/elements/Tree/index.js +54 -42
- package/dist/elements/Tree/index.js.map +1 -1
- package/dist/elements/Tree/types.d.ts +3 -0
- package/dist/elements/Tree/types.d.ts.map +1 -1
- package/dist/elements/Tree/types.js.map +1 -1
- package/dist/elements/Tree/useChildren.d.ts +4 -1
- package/dist/elements/Tree/useChildren.d.ts.map +1 -1
- package/dist/elements/Tree/useChildren.js +8 -8
- package/dist/elements/Tree/useChildren.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js +8 -6
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
- package/dist/elements/WhereBuilder/field-types.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/field-types.js +2 -5
- package/dist/elements/WhereBuilder/field-types.js.map +1 -1
- package/dist/exports/client/{DatePicker-CL2EGBVQ.js → DatePicker-T2DMDMM5.js} +2 -2
- package/dist/exports/client/chunk-WDZJLNNB.js +29 -0
- package/dist/exports/client/{chunk-SH42NW5R.js.map → chunk-WDZJLNNB.js.map} +4 -4
- package/dist/exports/client/index.js +14 -14
- package/dist/exports/client/index.js.map +4 -4
- package/dist/providers/Hierarchy/index.d.ts.map +1 -1
- package/dist/providers/Hierarchy/index.js +12 -3
- package/dist/providers/Hierarchy/index.js.map +1 -1
- package/dist/providers/Hierarchy/types.d.ts +5 -1
- package/dist/providers/Hierarchy/types.d.ts.map +1 -1
- package/dist/providers/Hierarchy/types.js.map +1 -1
- package/dist/views/Edit/index.js +1 -1
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/HierarchyList/HierarchyTable/index.d.ts +6 -2
- package/dist/views/HierarchyList/HierarchyTable/index.d.ts.map +1 -1
- package/dist/views/HierarchyList/HierarchyTable/index.js +19 -18
- package/dist/views/HierarchyList/HierarchyTable/index.js.map +1 -1
- package/dist/views/HierarchyList/index.d.ts.map +1 -1
- package/dist/views/HierarchyList/index.js +3 -1
- package/dist/views/HierarchyList/index.js.map +1 -1
- package/package.json +5 -5
- package/dist/exports/client/chunk-SH42NW5R.js +0 -29
- /package/dist/exports/client/{DatePicker-CL2EGBVQ.js.map → DatePicker-T2DMDMM5.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChildren.d.ts","sourceRoot":"","sources":["../../../src/elements/Tree/useChildren.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useChildren.d.ts","sourceRoot":"","sources":["../../../src/elements/Tree/useChildren.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAMpC,OAAO,KAAK,EAAkB,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAK1F,KAAK,eAAe,GAAG;IACrB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAChC,gEAAgE;IAChE,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,CAAA;IACzB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,WAAW,CAAC,EAAE,IAAI,GAAG,eAAe,CAAA;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,aAAa,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,IAAI,GAAG,YAAY,EAAE,CAAA;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACvC,OAAO,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACtC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,WAAW,0KAarB,eAAe,KAAG,iBAuOpB,CAAA"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { formatAdminURL } from 'payload/shared';
|
|
1
|
+
import { combineWhereConstraints, formatAdminURL } from 'payload/shared';
|
|
2
2
|
import * as qs from 'qs-esm';
|
|
3
3
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
4
|
import { useConfig } from '../../providers/Config/index.js';
|
|
5
5
|
import { isSuperset } from '../../utilities/isSuperset.js';
|
|
6
6
|
export const useChildren = ({
|
|
7
7
|
allPossibleTypeValues,
|
|
8
|
+
baseFilter,
|
|
8
9
|
cache,
|
|
9
10
|
collectionSlug,
|
|
10
11
|
enabled = true,
|
|
@@ -17,7 +18,8 @@ export const useChildren = ({
|
|
|
17
18
|
useAsTitle
|
|
18
19
|
}) => {
|
|
19
20
|
const filterKey = filterByCollections?.length ? filterByCollections.slice().sort().join(',') : '';
|
|
20
|
-
const
|
|
21
|
+
const baseFilterKey = baseFilter ? JSON.stringify(baseFilter) : '';
|
|
22
|
+
const cacheKey = `${collectionSlug}-${parentId}-${filterKey}-${baseFilterKey}`;
|
|
21
23
|
const cachedData = cache?.current.get(cacheKey);
|
|
22
24
|
// Check if we have initial data for this specific parent
|
|
23
25
|
const parentKey = parentId === 'null' ? 'null' : String(parentId);
|
|
@@ -88,11 +90,9 @@ export const useChildren = ({
|
|
|
88
90
|
not_in: allPossibleTypeValues
|
|
89
91
|
}
|
|
90
92
|
}] : [])]
|
|
91
|
-
} :
|
|
92
|
-
// Combine conditions
|
|
93
|
-
const where = filterCondition
|
|
94
|
-
and: [parentCondition, filterCondition]
|
|
95
|
-
} : parentCondition;
|
|
93
|
+
} : undefined;
|
|
94
|
+
// Combine conditions: parent + filter + baseFilter
|
|
95
|
+
const where = combineWhereConstraints([parentCondition, filterCondition, baseFilter]);
|
|
96
96
|
const queryParams = {
|
|
97
97
|
limit,
|
|
98
98
|
page: pageToFetch,
|
|
@@ -150,7 +150,7 @@ export const useChildren = ({
|
|
|
150
150
|
} finally {
|
|
151
151
|
setIsLoading(false);
|
|
152
152
|
}
|
|
153
|
-
}, [allPossibleTypeValues, parentId, filterKey, parentFieldName, filterByCollections, typeFieldName, limit, useAsTitle, api, collectionSlug, serverURL, cache, cacheKey]);
|
|
153
|
+
}, [allPossibleTypeValues, baseFilter, parentId, filterKey, parentFieldName, filterByCollections, typeFieldName, limit, useAsTitle, api, collectionSlug, serverURL, cache, cacheKey]);
|
|
154
154
|
// Reset state when filter changes
|
|
155
155
|
const prevFilterKeyRef = useRef(filterKey);
|
|
156
156
|
useEffect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChildren.js","names":["formatAdminURL","qs","useCallback","useEffect","useRef","useState","useConfig","isSuperset","useChildren","allPossibleTypeValues","cache","collectionSlug","enabled","filterByCollections","initialData","limit","parentFieldName","parentId","typeFieldName","useAsTitle","filterKey","length","slice","sort","join","cacheKey","cachedData","current","get","parentKey","String","parentMeta","loadedParents","hasInitialData","initialDocsForParent","docs","filter","doc","docParent","children","setChildren","isLoading","setIsLoading","page","setPage","totalDocs","setTotalDocs","hasMore","setHasMore","initializedRef","config","routes","api","serverURL","fetchPage","pageToFetch","currentChildren","parentCondition","or","exists","equals","filterCondition","in","not_in","where","and","queryParams","queryString","stringify","addQueryPrefix","url","apiRoute","path","response","fetch","credentials","ok","Error","data","json","allDocs","newDocs","newChildren","hasNextPage","set","emptyChildren","prevFilterKeyRef","loadMore","shouldRefetchPage1","refresh","delete"],"sources":["../../../src/elements/Tree/useChildren.tsx"],"sourcesContent":["import { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { CachedChildren, TreeCache, TreeDocument, TreeInitialData } from './types.js'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { isSuperset } from '../../utilities/isSuperset.js'\n\ntype UseChildrenArgs = {\n allPossibleTypeValues?: string[]\n cache?: TreeCache\n collectionSlug: string\n enabled?: boolean\n filterByCollections?: string[]\n initialData?: null | TreeInitialData\n limit?: number\n parentFieldName: string\n parentId: number | string\n typeFieldName?: null | string\n useAsTitle?: string\n}\n\ntype UseChildrenReturn = {\n children: null | TreeDocument[]\n hasMore: boolean\n isLoading: boolean\n loadMore: () => Promise<TreeDocument[]>\n refresh: () => Promise<TreeDocument[]>\n totalDocs: number\n}\n\nexport const useChildren = ({\n allPossibleTypeValues,\n cache,\n collectionSlug,\n enabled = true,\n filterByCollections,\n initialData,\n limit = 2,\n parentFieldName,\n parentId,\n typeFieldName,\n useAsTitle,\n}: UseChildrenArgs): UseChildrenReturn => {\n const filterKey = filterByCollections?.length ? filterByCollections.slice().sort().join(',') : ''\n const cacheKey = `${collectionSlug}-${parentId}-${filterKey}`\n const cachedData = cache?.current.get(cacheKey)\n\n // Check if we have initial data for this specific parent\n const parentKey = parentId === 'null' ? 'null' : String(parentId)\n const parentMeta = initialData?.loadedParents?.[parentKey]\n const hasInitialData = !!parentMeta\n\n // Extract docs for this parent from initialData if available\n // Apply same superset filter as fetchPage for consistency\n const initialDocsForParent = hasInitialData\n ? initialData.docs.filter((doc) => {\n const docParent = doc[parentFieldName] || 'null'\n if (String(docParent) !== parentKey) {\n return false\n }\n if (filterByCollections?.length && typeFieldName) {\n return isSuperset(doc[typeFieldName] as string[] | undefined, filterByCollections)\n }\n return true\n })\n : null\n\n const [children, setChildren] = useState<null | TreeDocument[]>(\n initialDocsForParent || cachedData?.children || null,\n )\n const [isLoading, setIsLoading] = useState(!hasInitialData && !cachedData && enabled)\n const [page, setPage] = useState(cachedData?.page || 1)\n const [totalDocs, setTotalDocs] = useState(parentMeta?.totalDocs || cachedData?.totalDocs || 0)\n const [hasMore, setHasMore] = useState(parentMeta?.hasMore || cachedData?.hasMore || false)\n const initializedRef = useRef(!!hasInitialData)\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const fetchPage = useCallback(\n async (\n pageToFetch: number,\n currentChildren: null | TreeDocument[],\n ): Promise<TreeDocument[]> => {\n setIsLoading(true)\n\n try {\n const parentCondition =\n parentId === 'null' || parentId === null\n ? {\n or: [\n { [parentFieldName]: { exists: false } },\n { [parentFieldName]: { equals: null } },\n ],\n }\n : { [parentFieldName]: { equals: parentId } }\n\n // Build filter condition for collection type filtering\n // Matches items that:\n // - allow ANY of the selected collections, OR\n // - are unrestricted (type field doesn't exist), OR\n // - have empty allowedTypes array (unrestricted)\n const filterCondition =\n filterByCollections?.length && typeFieldName\n ? {\n or: [\n { [typeFieldName]: { in: filterByCollections } },\n { [typeFieldName]: { exists: false } },\n // Using not_in with all possible values matches empty arrays in both MongoDB and Postgres\n ...(allPossibleTypeValues?.length\n ? [{ [typeFieldName]: { not_in: allPossibleTypeValues } }]\n : []),\n ],\n }\n : null\n\n // Combine conditions with AND if filter is active\n const where = filterCondition\n ? { and: [parentCondition, filterCondition] }\n : parentCondition\n\n const queryParams: Record<string, unknown> = {\n limit,\n page: pageToFetch,\n sort: useAsTitle ?? 'id',\n where,\n }\n\n const queryString = qs.stringify(queryParams, { addQueryPrefix: true })\n const url = formatAdminURL({\n apiRoute: api,\n path: `/${collectionSlug}${queryString}`,\n serverURL,\n })\n const response = await fetch(url, {\n credentials: 'include',\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch children')\n }\n\n const data = await response.json()\n const allDocs: TreeDocument[] = data.docs || []\n\n // Client-side filter: only show items that are a superset of required collections\n // Server query uses ANY (due to PG limitations), but we want ALL (superset)\n const newDocs =\n filterByCollections?.length && typeFieldName\n ? allDocs.filter((doc) =>\n isSuperset(doc[typeFieldName] as string[] | undefined, filterByCollections),\n )\n : allDocs\n\n const newChildren = pageToFetch === 1 ? newDocs : [...(currentChildren || []), ...newDocs]\n\n setChildren(newChildren)\n setTotalDocs(data.totalDocs || 0)\n setHasMore(data.hasNextPage || false)\n setPage(pageToFetch)\n\n if (cache) {\n cache.current.set(cacheKey, {\n children: newChildren,\n hasMore: data.hasNextPage || false,\n page: pageToFetch,\n totalDocs: data.totalDocs || 0,\n })\n }\n\n return newDocs\n } catch {\n if (pageToFetch === 1) {\n const emptyChildren: TreeDocument[] = []\n setChildren(emptyChildren)\n setHasMore(false)\n\n if (cache) {\n cache.current.set(cacheKey, {\n children: emptyChildren,\n hasMore: false,\n page: 1,\n totalDocs: 0,\n })\n }\n }\n\n return []\n } finally {\n setIsLoading(false)\n }\n },\n [\n allPossibleTypeValues,\n parentId,\n filterKey,\n parentFieldName,\n filterByCollections,\n typeFieldName,\n limit,\n useAsTitle,\n api,\n collectionSlug,\n serverURL,\n cache,\n cacheKey,\n ],\n )\n\n // Reset state when filter changes\n const prevFilterKeyRef = useRef(filterKey)\n useEffect(() => {\n if (prevFilterKeyRef.current !== filterKey) {\n prevFilterKeyRef.current = filterKey\n setChildren(null)\n setPage(1)\n setTotalDocs(0)\n setHasMore(false)\n }\n }, [filterKey])\n\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n // Skip initial fetch if we have initialData\n if (initializedRef.current && children !== null) {\n initializedRef.current = false\n return\n }\n\n // Restore from cache if children was reset (e.g., filter changed)\n if (cachedData && children === null) {\n setChildren(cachedData.children)\n setPage(cachedData.page)\n setTotalDocs(cachedData.totalDocs)\n setHasMore(cachedData.hasMore)\n return\n }\n\n if (cachedData && page === cachedData.page) {\n return\n }\n\n void fetchPage(page, children)\n }, [enabled, page, cachedData, fetchPage, children])\n\n const loadMore = useCallback(async (): Promise<TreeDocument[]> => {\n if (isLoading || !hasMore) {\n return []\n }\n\n // If we have fewer items than our limit, the cached data was fetched with a smaller limit\n // We need to re-fetch page 1 with our limit to get the full first page\n const shouldRefetchPage1 = children && children.length < limit\n\n return fetchPage(shouldRefetchPage1 ? 1 : page + 1, children)\n }, [isLoading, hasMore, page, children, fetchPage, limit])\n\n const refresh = useCallback(async (): Promise<TreeDocument[]> => {\n if (cache) {\n cache.current.delete(cacheKey)\n }\n setChildren(null)\n setPage(1)\n return fetchPage(1, null)\n }, [cache, cacheKey, fetchPage])\n\n return { children, hasMore, isLoading, loadMore, refresh, totalDocs }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useChildren.js","names":["combineWhereConstraints","formatAdminURL","qs","useCallback","useEffect","useRef","useState","useConfig","isSuperset","useChildren","allPossibleTypeValues","baseFilter","cache","collectionSlug","enabled","filterByCollections","initialData","limit","parentFieldName","parentId","typeFieldName","useAsTitle","filterKey","length","slice","sort","join","baseFilterKey","JSON","stringify","cacheKey","cachedData","current","get","parentKey","String","parentMeta","loadedParents","hasInitialData","initialDocsForParent","docs","filter","doc","docParent","children","setChildren","isLoading","setIsLoading","page","setPage","totalDocs","setTotalDocs","hasMore","setHasMore","initializedRef","config","routes","api","serverURL","fetchPage","pageToFetch","currentChildren","parentCondition","or","exists","equals","filterCondition","in","not_in","undefined","where","queryParams","queryString","addQueryPrefix","url","apiRoute","path","response","fetch","credentials","ok","Error","data","json","allDocs","newDocs","newChildren","hasNextPage","set","emptyChildren","prevFilterKeyRef","loadMore","shouldRefetchPage1","refresh","delete"],"sources":["../../../src/elements/Tree/useChildren.tsx"],"sourcesContent":["import type { Where } from 'payload'\n\nimport { combineWhereConstraints, formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { CachedChildren, TreeCache, TreeDocument, TreeInitialData } from './types.js'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { isSuperset } from '../../utilities/isSuperset.js'\n\ntype UseChildrenArgs = {\n allPossibleTypeValues?: string[]\n /** Base filter to apply to all queries (e.g., tenant filter) */\n baseFilter?: null | Where\n cache?: TreeCache\n collectionSlug: string\n enabled?: boolean\n filterByCollections?: string[]\n initialData?: null | TreeInitialData\n limit?: number\n parentFieldName: string\n parentId: number | string\n typeFieldName?: null | string\n useAsTitle?: string\n}\n\ntype UseChildrenReturn = {\n children: null | TreeDocument[]\n hasMore: boolean\n isLoading: boolean\n loadMore: () => Promise<TreeDocument[]>\n refresh: () => Promise<TreeDocument[]>\n totalDocs: number\n}\n\nexport const useChildren = ({\n allPossibleTypeValues,\n baseFilter,\n cache,\n collectionSlug,\n enabled = true,\n filterByCollections,\n initialData,\n limit = 2,\n parentFieldName,\n parentId,\n typeFieldName,\n useAsTitle,\n}: UseChildrenArgs): UseChildrenReturn => {\n const filterKey = filterByCollections?.length ? filterByCollections.slice().sort().join(',') : ''\n const baseFilterKey = baseFilter ? JSON.stringify(baseFilter) : ''\n const cacheKey = `${collectionSlug}-${parentId}-${filterKey}-${baseFilterKey}`\n const cachedData = cache?.current.get(cacheKey)\n\n // Check if we have initial data for this specific parent\n const parentKey = parentId === 'null' ? 'null' : String(parentId)\n const parentMeta = initialData?.loadedParents?.[parentKey]\n const hasInitialData = !!parentMeta\n\n // Extract docs for this parent from initialData if available\n // Apply same superset filter as fetchPage for consistency\n const initialDocsForParent = hasInitialData\n ? initialData.docs.filter((doc) => {\n const docParent = doc[parentFieldName] || 'null'\n if (String(docParent) !== parentKey) {\n return false\n }\n if (filterByCollections?.length && typeFieldName) {\n return isSuperset(doc[typeFieldName] as string[] | undefined, filterByCollections)\n }\n return true\n })\n : null\n\n const [children, setChildren] = useState<null | TreeDocument[]>(\n initialDocsForParent || cachedData?.children || null,\n )\n const [isLoading, setIsLoading] = useState(!hasInitialData && !cachedData && enabled)\n const [page, setPage] = useState(cachedData?.page || 1)\n const [totalDocs, setTotalDocs] = useState(parentMeta?.totalDocs || cachedData?.totalDocs || 0)\n const [hasMore, setHasMore] = useState(parentMeta?.hasMore || cachedData?.hasMore || false)\n const initializedRef = useRef(!!hasInitialData)\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const fetchPage = useCallback(\n async (\n pageToFetch: number,\n currentChildren: null | TreeDocument[],\n ): Promise<TreeDocument[]> => {\n setIsLoading(true)\n\n try {\n const parentCondition =\n parentId === 'null' || parentId === null\n ? {\n or: [\n { [parentFieldName]: { exists: false } },\n { [parentFieldName]: { equals: null } },\n ],\n }\n : { [parentFieldName]: { equals: parentId } }\n\n // Build filter condition for collection type filtering\n // Matches items that:\n // - allow ANY of the selected collections, OR\n // - are unrestricted (type field doesn't exist), OR\n // - have empty allowedTypes array (unrestricted)\n const filterCondition: undefined | Where =\n filterByCollections?.length && typeFieldName\n ? {\n or: [\n { [typeFieldName]: { in: filterByCollections } },\n { [typeFieldName]: { exists: false } },\n // Using not_in with all possible values matches empty arrays in both MongoDB and Postgres\n ...(allPossibleTypeValues?.length\n ? [{ [typeFieldName]: { not_in: allPossibleTypeValues } }]\n : []),\n ],\n }\n : undefined\n\n // Combine conditions: parent + filter + baseFilter\n const where = combineWhereConstraints([parentCondition, filterCondition, baseFilter])\n\n const queryParams: Record<string, unknown> = {\n limit,\n page: pageToFetch,\n sort: useAsTitle ?? 'id',\n where,\n }\n\n const queryString = qs.stringify(queryParams, { addQueryPrefix: true })\n const url = formatAdminURL({\n apiRoute: api,\n path: `/${collectionSlug}${queryString}`,\n serverURL,\n })\n const response = await fetch(url, {\n credentials: 'include',\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch children')\n }\n\n const data = await response.json()\n const allDocs: TreeDocument[] = data.docs || []\n\n // Client-side filter: only show items that are a superset of required collections\n // Server query uses ANY (due to PG limitations), but we want ALL (superset)\n const newDocs =\n filterByCollections?.length && typeFieldName\n ? allDocs.filter((doc) =>\n isSuperset(doc[typeFieldName] as string[] | undefined, filterByCollections),\n )\n : allDocs\n\n const newChildren = pageToFetch === 1 ? newDocs : [...(currentChildren || []), ...newDocs]\n\n setChildren(newChildren)\n setTotalDocs(data.totalDocs || 0)\n setHasMore(data.hasNextPage || false)\n setPage(pageToFetch)\n\n if (cache) {\n cache.current.set(cacheKey, {\n children: newChildren,\n hasMore: data.hasNextPage || false,\n page: pageToFetch,\n totalDocs: data.totalDocs || 0,\n })\n }\n\n return newDocs\n } catch {\n if (pageToFetch === 1) {\n const emptyChildren: TreeDocument[] = []\n setChildren(emptyChildren)\n setHasMore(false)\n\n if (cache) {\n cache.current.set(cacheKey, {\n children: emptyChildren,\n hasMore: false,\n page: 1,\n totalDocs: 0,\n })\n }\n }\n\n return []\n } finally {\n setIsLoading(false)\n }\n },\n [\n allPossibleTypeValues,\n baseFilter,\n parentId,\n filterKey,\n parentFieldName,\n filterByCollections,\n typeFieldName,\n limit,\n useAsTitle,\n api,\n collectionSlug,\n serverURL,\n cache,\n cacheKey,\n ],\n )\n\n // Reset state when filter changes\n const prevFilterKeyRef = useRef(filterKey)\n useEffect(() => {\n if (prevFilterKeyRef.current !== filterKey) {\n prevFilterKeyRef.current = filterKey\n setChildren(null)\n setPage(1)\n setTotalDocs(0)\n setHasMore(false)\n }\n }, [filterKey])\n\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n // Skip initial fetch if we have initialData\n if (initializedRef.current && children !== null) {\n initializedRef.current = false\n return\n }\n\n // Restore from cache if children was reset (e.g., filter changed)\n if (cachedData && children === null) {\n setChildren(cachedData.children)\n setPage(cachedData.page)\n setTotalDocs(cachedData.totalDocs)\n setHasMore(cachedData.hasMore)\n return\n }\n\n if (cachedData && page === cachedData.page) {\n return\n }\n\n void fetchPage(page, children)\n }, [enabled, page, cachedData, fetchPage, children])\n\n const loadMore = useCallback(async (): Promise<TreeDocument[]> => {\n if (isLoading || !hasMore) {\n return []\n }\n\n // If we have fewer items than our limit, the cached data was fetched with a smaller limit\n // We need to re-fetch page 1 with our limit to get the full first page\n const shouldRefetchPage1 = children && children.length < limit\n\n return fetchPage(shouldRefetchPage1 ? 1 : page + 1, children)\n }, [isLoading, hasMore, page, children, fetchPage, limit])\n\n const refresh = useCallback(async (): Promise<TreeDocument[]> => {\n if (cache) {\n cache.current.delete(cacheKey)\n }\n setChildren(null)\n setPage(1)\n return fetchPage(1, null)\n }, [cache, cacheKey, fetchPage])\n\n return { children, hasMore, isLoading, loadMore, refresh, totalDocs }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAuD,MAAM,OAAO,CAAA;AAG3E,OAAO,KAAK,EAAE,uBAAuB,IAAI,KAAK,EAAqB,MAAM,YAAY,CAAA;AAQrF,OAAO,cAAc,CAAA;AAOrB,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAuD,MAAM,OAAO,CAAA;AAG3E,OAAO,KAAK,EAAE,uBAAuB,IAAI,KAAK,EAAqB,MAAM,YAAY,CAAA;AAQrF,OAAO,cAAc,CAAA;AAOrB,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA2Z9C,CAAA"}
|
|
@@ -24,10 +24,12 @@ export const RelationshipFilter = props => {
|
|
|
24
24
|
},
|
|
25
25
|
filterOptions,
|
|
26
26
|
onChange,
|
|
27
|
+
operator,
|
|
27
28
|
value
|
|
28
29
|
} = props;
|
|
29
30
|
const placeholder = 'placeholder' in admin ? admin?.placeholder : undefined;
|
|
30
31
|
const isSortable = admin?.isSortable;
|
|
32
|
+
const isMultiValue = hasMany || ['in', 'not_in'].includes(operator);
|
|
31
33
|
const {
|
|
32
34
|
config: {
|
|
33
35
|
routes: {
|
|
@@ -150,7 +152,7 @@ export const RelationshipFilter = props => {
|
|
|
150
152
|
}, []);
|
|
151
153
|
const findOptionsByValue = useCallback(() => {
|
|
152
154
|
if (value) {
|
|
153
|
-
if (
|
|
155
|
+
if (isMultiValue) {
|
|
154
156
|
if (Array.isArray(value)) {
|
|
155
157
|
return value.map(val => {
|
|
156
158
|
if (hasMultipleRelations) {
|
|
@@ -192,7 +194,7 @@ export const RelationshipFilter = props => {
|
|
|
192
194
|
return options.find(opt_2 => opt_2.value == value);
|
|
193
195
|
}
|
|
194
196
|
return undefined;
|
|
195
|
-
}, [
|
|
197
|
+
}, [isMultiValue, hasMultipleRelations, value, options]);
|
|
196
198
|
const handleInputChange = useCallback(input => {
|
|
197
199
|
if (input !== search) {
|
|
198
200
|
dispatchOptions({
|
|
@@ -276,7 +278,7 @@ export const RelationshipFilter = props => {
|
|
|
276
278
|
*/
|
|
277
279
|
useEffect(() => {
|
|
278
280
|
if (value && hasLoadedFirstOptions) {
|
|
279
|
-
if (
|
|
281
|
+
if (isMultiValue) {
|
|
280
282
|
const matchedOptions = findOptionsByValue();
|
|
281
283
|
(matchedOptions || []).forEach((option, i) => {
|
|
282
284
|
if (!option) {
|
|
@@ -299,7 +301,7 @@ export const RelationshipFilter = props => {
|
|
|
299
301
|
}
|
|
300
302
|
}
|
|
301
303
|
}
|
|
302
|
-
}, [addOptionByID, findOptionsByValue,
|
|
304
|
+
}, [addOptionByID, findOptionsByValue, isMultiValue, hasMultipleRelations, relationTo, value, hasLoadedFirstOptions]);
|
|
303
305
|
const classes = ['field-type', baseClass, errorLoading && 'error-loading'].filter(Boolean).join(' ');
|
|
304
306
|
const valueToRender = findOptionsByValue() || value;
|
|
305
307
|
return /*#__PURE__*/_jsx("div", {
|
|
@@ -309,14 +311,14 @@ export const RelationshipFilter = props => {
|
|
|
309
311
|
children: errorLoading
|
|
310
312
|
}) : /*#__PURE__*/_jsx(ReactSelect, {
|
|
311
313
|
disabled: disabled,
|
|
312
|
-
isMulti:
|
|
314
|
+
isMulti: isMultiValue,
|
|
313
315
|
isSortable: isSortable,
|
|
314
316
|
onChange: selected => {
|
|
315
317
|
if (!selected) {
|
|
316
318
|
onChange(null);
|
|
317
319
|
return;
|
|
318
320
|
}
|
|
319
|
-
if (
|
|
321
|
+
if (isMultiValue && Array.isArray(selected)) {
|
|
320
322
|
onChange(selected ? selected.map(option_0 => {
|
|
321
323
|
if (hasMultipleRelations) {
|
|
322
324
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["formatAdminURL","qs","React","useCallback","useEffect","useReducer","useState","useDebounce","useEffectEvent","useConfig","useLocale","useTranslation","ReactSelect","optionsReducer","baseClass","maxResultsPerRequest","RelationshipFilter","props","disabled","field","admin","hasMany","relationTo","filterOptions","onChange","value","placeholder","undefined","isSortable","config","routes","api","getEntityConfig","hasMultipleRelations","Array","isArray","options","dispatchOptions","search","setSearch","debouncedSearch","errorLoading","setErrorLoading","hasLoadedFirstOptions","setHasLoadedFirstOptions","i18n","t","locale","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","code","page","select","push","like","response","fetch","apiRoute","path","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","valueWithRelation","handleInputChange","input","required","addOptionByID","id","relations","abortControllers","controller","abort","_err","matchedOptions","option","i","classes","filter","Boolean","join","valueToRender","_jsx","className","isMulti","selected","onInputChange","onMenuScrollToBottom"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs, Where } from 'payload'\n\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useReducer, useState } from 'react'\n\nimport type { Option } from '../../../ReactSelect/types.js'\nimport type { RelationshipFilterProps as 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 { useLocale } from '../../../../providers/Locale/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 = {}, hasMany, relationTo },\n filterOptions,\n onChange,\n value,\n } = props\n\n const placeholder = 'placeholder' in admin ? admin?.placeholder : undefined\n const isSortable = admin?.isSortable\n\n const {\n config: {\n routes: { api },\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 const locale = useLocale()\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 locale: locale.code,\n page: loadedRelationship.nextPage,\n select: {\n [fieldToSearch]: true,\n },\n where,\n }\n\n if (filterOptions && filterOptions?.[relationSlug]) {\n query.where.and.push(filterOptions[relationSlug])\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 formatAdminURL({\n apiRoute: api,\n path: `/${relationSlug}${qs.stringify(query, { addQueryPrefix: true })}`,\n }),\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(\n formatAdminURL({ apiRoute: api, path: `/${relation}/${id}?depth=0` }),\n {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\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, 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, filterOptions])\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 <div className={`${baseClass}__error-loading`}>{errorLoading}</div>\n ) : (\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={placeholder}\n value={valueToRender}\n />\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["formatAdminURL","qs","React","useCallback","useEffect","useReducer","useState","useDebounce","useEffectEvent","useConfig","useLocale","useTranslation","ReactSelect","optionsReducer","baseClass","maxResultsPerRequest","RelationshipFilter","props","disabled","field","admin","hasMany","relationTo","filterOptions","onChange","operator","value","placeholder","undefined","isSortable","isMultiValue","includes","config","routes","api","getEntityConfig","hasMultipleRelations","Array","isArray","options","dispatchOptions","search","setSearch","debouncedSearch","errorLoading","setErrorLoading","hasLoadedFirstOptions","setHasLoadedFirstOptions","i18n","t","locale","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","code","page","select","push","like","response","fetch","apiRoute","path","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","valueWithRelation","handleInputChange","input","required","addOptionByID","id","relations","abortControllers","controller","abort","_err","matchedOptions","option","i","classes","filter","Boolean","join","valueToRender","_jsx","className","isMulti","selected","onInputChange","onMenuScrollToBottom"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs, Where } from 'payload'\n\nimport { formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useReducer, useState } from 'react'\n\nimport type { Option } from '../../../ReactSelect/types.js'\nimport type { RelationshipFilterProps as 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 { useLocale } from '../../../../providers/Locale/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 = {}, hasMany, relationTo },\n filterOptions,\n onChange,\n operator,\n value,\n } = props\n\n const placeholder = 'placeholder' in admin ? admin?.placeholder : undefined\n const isSortable = admin?.isSortable\n\n const isMultiValue = hasMany || ['in', 'not_in'].includes(operator)\n\n const {\n config: {\n routes: { api },\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 const locale = useLocale()\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 locale: locale.code,\n page: loadedRelationship.nextPage,\n select: {\n [fieldToSearch]: true,\n },\n where,\n }\n\n if (filterOptions && filterOptions?.[relationSlug]) {\n query.where.and.push(filterOptions[relationSlug])\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 formatAdminURL({\n apiRoute: api,\n path: `/${relationSlug}${qs.stringify(query, { addQueryPrefix: true })}`,\n }),\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 (isMultiValue) {\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 }, [isMultiValue, 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(\n formatAdminURL({ apiRoute: api, path: `/${relation}/${id}?depth=0` }),\n {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\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, 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, filterOptions])\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 (isMultiValue) {\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 isMultiValue,\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 <div className={`${baseClass}__error-loading`}>{errorLoading}</div>\n ) : (\n <ReactSelect\n disabled={disabled}\n isMulti={isMultiValue}\n isSortable={isSortable}\n onChange={(selected) => {\n if (!selected) {\n onChange(null)\n return\n }\n\n if (isMultiValue && 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={placeholder}\n value={valueToRender}\n />\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/field-types.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAa1C,eAAO,MAAM,cAAc;;;GAS1B,CAAA;AA8DD,eAAO,MAAM,mBAAmB,EAAE;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAC9C,CAAA;CA0DF,CAAA;AAED,eAAO,MAAM,sBAAsB,yBAGhC;IACD,KAAK,EAAE,WAAW,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,KAAG;IACF,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE;QACd,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;KACd,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/field-types.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAa1C,eAAO,MAAM,cAAc;;;GAS1B,CAAA;AA8DD,eAAO,MAAM,mBAAmB,EAAE;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAC9C,CAAA;CA0DF,CAAA;AAED,eAAO,MAAM,sBAAsB,yBAGhC;IACD,KAAK,EAAE,WAAW,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,KAAG;IACF,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE;QACd,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;KACd,EAAE,CAAA;CAqBJ,CAAA"}
|
|
@@ -120,11 +120,8 @@ export const getValidFieldOperators = ({
|
|
|
120
120
|
}) => {
|
|
121
121
|
let validOperators = [];
|
|
122
122
|
if (field.type === 'relationship' && Array.isArray(field.relationTo)) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
} else {
|
|
126
|
-
validOperators = [...base];
|
|
127
|
-
}
|
|
123
|
+
// Polymorphic relationships store {relationTo, value} - in/not_in only match value, not both properties
|
|
124
|
+
validOperators = [...equalsOperators, exists];
|
|
128
125
|
} else {
|
|
129
126
|
validOperators = [...fieldTypeConditions[field.type].operators];
|
|
130
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-types.js","names":["equalsOperators","label","value","arrayOperators","exists","base","numeric","geo","within","intersects","like","notLike","contains","fieldTypeConditions","checkbox","component","operators","code","date","email","json","number","point","radio","relationship","richText","select","text","textarea","upload","getValidFieldOperators","field","operator","validOperators","type","Array","isArray","relationTo","
|
|
1
|
+
{"version":3,"file":"field-types.js","names":["equalsOperators","label","value","arrayOperators","exists","base","numeric","geo","within","intersects","like","notLike","contains","fieldTypeConditions","checkbox","component","operators","code","date","email","json","number","point","radio","relationship","richText","select","text","textarea","upload","getValidFieldOperators","field","operator","validOperators","type","Array","isArray","relationTo","validOperator","find"],"sources":["../../../src/elements/WhereBuilder/field-types.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientField } from 'payload'\n\nconst equalsOperators = [\n {\n label: 'equals',\n value: 'equals',\n },\n {\n label: 'isNotEqualTo',\n value: 'not_equals',\n },\n]\n\nexport const arrayOperators = [\n {\n label: 'isIn',\n value: 'in',\n },\n {\n label: 'isNotIn',\n value: 'not_in',\n },\n]\n\nconst exists = {\n label: 'exists',\n value: 'exists',\n}\n\nconst base = [...equalsOperators, ...arrayOperators, exists]\n\nconst numeric = [\n ...base,\n {\n label: 'isGreaterThan',\n value: 'greater_than',\n },\n {\n label: 'isLessThan',\n value: 'less_than',\n },\n {\n label: 'isLessThanOrEqualTo',\n value: 'less_than_equal',\n },\n {\n label: 'isGreaterThanOrEqualTo',\n value: 'greater_than_equal',\n },\n]\n\nconst geo = [\n ...equalsOperators,\n {\n label: 'near',\n value: 'near',\n },\n]\n\nconst within = {\n label: 'within',\n value: 'within',\n}\n\nconst intersects = {\n label: 'intersects',\n value: 'intersects',\n}\n\nconst like = {\n label: 'isLike',\n value: 'like',\n}\n\nconst notLike = {\n label: 'isNotLike',\n value: 'not_like',\n}\n\nconst contains = {\n label: 'contains',\n value: 'contains',\n}\n\nexport const fieldTypeConditions: {\n [key: string]: {\n component: string\n operators: { label: string; value: string }[]\n }\n} = {\n checkbox: {\n component: 'Text',\n operators: [...equalsOperators, exists],\n },\n code: {\n component: 'Text',\n operators: [...base, like, notLike, contains],\n },\n date: {\n component: 'Date',\n operators: [...numeric, exists],\n },\n email: {\n component: 'Text',\n operators: [...base, contains],\n },\n json: {\n component: 'Text',\n operators: [...base, like, contains, notLike, within, intersects],\n },\n number: {\n component: 'Number',\n operators: [...numeric, exists],\n },\n point: {\n component: 'Point',\n operators: [...geo, exists, within, intersects],\n },\n radio: {\n component: 'Select',\n operators: [...base],\n },\n relationship: {\n component: 'Relationship',\n operators: [...base],\n },\n richText: {\n component: 'Text',\n operators: [...base, like, notLike, contains],\n },\n select: {\n component: 'Select',\n operators: [...base],\n },\n text: {\n component: 'Text',\n operators: [...base, like, notLike, contains],\n },\n textarea: {\n component: 'Text',\n operators: [...base, like, notLike, contains],\n },\n upload: {\n component: 'Relationship',\n operators: [...base],\n },\n}\n\nexport const getValidFieldOperators = ({\n field,\n operator,\n}: {\n field: ClientField\n operator?: string\n}): {\n validOperator: string\n validOperators: {\n label: string\n value: string\n }[]\n} => {\n let validOperators: {\n label: string\n value: string\n }[] = []\n\n if (field.type === 'relationship' && Array.isArray(field.relationTo)) {\n // Polymorphic relationships store {relationTo, value} - in/not_in only match value, not both properties\n validOperators = [...equalsOperators, exists]\n } else {\n validOperators = [...fieldTypeConditions[field.type].operators]\n }\n\n return {\n validOperator:\n operator && validOperators.find(({ value }) => value === operator)\n ? operator\n : validOperators[0].value,\n validOperators,\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,5 +10,5 @@ function require(m) {
|
|
|
10
10
|
}
|
|
11
11
|
// Workaround end
|
|
12
12
|
|
|
13
|
-
import{n as a}from"./chunk-
|
|
14
|
-
//# sourceMappingURL=DatePicker-
|
|
13
|
+
import{n as a}from"./chunk-WDZJLNNB.js";import"./chunk-5LKBKI4T.js";export{a as default};
|
|
14
|
+
//# sourceMappingURL=DatePicker-T2DMDMM5.js.map
|