@payloadcms/ui 3.73.0 → 3.74.0-canary.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/QueryPresets/QueryPresetBar/index.d.ts.map +1 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.js +1 -2
- package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
- package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/index.js +10 -1
- package/dist/elements/WhereBuilder/index.js.map +1 -1
- package/dist/exports/client/index.js +12 -12
- package/dist/exports/client/index.js.map +3 -3
- package/dist/providers/ListQuery/index.d.ts.map +1 -1
- package/dist/providers/ListQuery/index.js +28 -26
- package/dist/providers/ListQuery/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/ListQuery/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAEhF,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,YAAY,CAAA;AAWnE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/ListQuery/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAEhF,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,YAAY,CAAA;AAWnE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAuKtD,CAAA"}
|
|
@@ -25,7 +25,6 @@ export const ListQueryProvider = ({
|
|
|
25
25
|
// TODO: Investigate if this is still needed
|
|
26
26
|
'use no memo';
|
|
27
27
|
|
|
28
|
-
// TODO: Investigate if this is still needed
|
|
29
28
|
const router = useRouter();
|
|
30
29
|
const rawSearchParams = useSearchParams();
|
|
31
30
|
const {
|
|
@@ -38,15 +37,16 @@ export const ListQueryProvider = ({
|
|
|
38
37
|
const collectionConfig = getEntityConfig({
|
|
39
38
|
collectionSlug
|
|
40
39
|
});
|
|
41
|
-
const searchParams = useMemo(() => sanitizeQuery(parseSearchParams(rawSearchParams)), [rawSearchParams]);
|
|
42
40
|
const contextRef = useRef({});
|
|
43
41
|
contextRef.current.modified = modified;
|
|
44
42
|
const {
|
|
45
|
-
onQueryChange
|
|
43
|
+
onQueryChange: onQueryChangeFromContext
|
|
46
44
|
} = useListDrawerContext();
|
|
45
|
+
const onQueryChange = onQueryChangeFromContext || onQueryChangeFromProps;
|
|
46
|
+
const queryFromURL = useMemo(() => sanitizeQuery(parseSearchParams(rawSearchParams)), [rawSearchParams]);
|
|
47
47
|
const [query, setQuery] = useState(() => {
|
|
48
48
|
if (modifySearchParams) {
|
|
49
|
-
return
|
|
49
|
+
return queryFromURL;
|
|
50
50
|
} else {
|
|
51
51
|
return {
|
|
52
52
|
limit: queryFromProps.limit,
|
|
@@ -57,11 +57,7 @@ export const ListQueryProvider = ({
|
|
|
57
57
|
const refineListData = useCallback(
|
|
58
58
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
59
59
|
async (incomingQuery, modified_0) => {
|
|
60
|
-
|
|
61
|
-
setModified(modified_0);
|
|
62
|
-
} else {
|
|
63
|
-
setModified(true);
|
|
64
|
-
}
|
|
60
|
+
setModified(modified_0 ?? true);
|
|
65
61
|
const newQuery = mergeQuery(query, incomingQuery, {
|
|
66
62
|
defaults: {
|
|
67
63
|
limit: queryFromProps.limit,
|
|
@@ -69,19 +65,19 @@ export const ListQueryProvider = ({
|
|
|
69
65
|
}
|
|
70
66
|
});
|
|
71
67
|
if (modifySearchParams) {
|
|
72
|
-
|
|
68
|
+
const search = `?${qs.stringify({
|
|
73
69
|
...newQuery,
|
|
74
70
|
columns: JSON.stringify(newQuery.columns),
|
|
75
71
|
queryByGroup: JSON.stringify(newQuery.queryByGroup)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
})}`;
|
|
73
|
+
if (window.location.search !== search) {
|
|
74
|
+
startRouteTransition(() => router.replace(search));
|
|
75
|
+
}
|
|
76
|
+
} else if (typeof onQueryChange === 'function') {
|
|
77
|
+
onQueryChange(newQuery);
|
|
82
78
|
}
|
|
83
79
|
setQuery(newQuery);
|
|
84
|
-
}, [query, queryFromProps.limit, queryFromProps.sort, modifySearchParams, onQueryChange,
|
|
80
|
+
}, [query, queryFromProps.limit, queryFromProps.sort, modifySearchParams, onQueryChange, startRouteTransition, router]);
|
|
85
81
|
const handlePageChange = useCallback(async arg => {
|
|
86
82
|
await refineListData({
|
|
87
83
|
page: arg
|
|
@@ -94,9 +90,9 @@ export const ListQueryProvider = ({
|
|
|
94
90
|
});
|
|
95
91
|
}, [refineListData]);
|
|
96
92
|
const handleSearchChange = useCallback(async arg_1 => {
|
|
97
|
-
const
|
|
93
|
+
const search_0 = arg_1 === '' ? undefined : arg_1;
|
|
98
94
|
await refineListData({
|
|
99
|
-
search
|
|
95
|
+
search: search_0
|
|
100
96
|
});
|
|
101
97
|
}, [refineListData]);
|
|
102
98
|
const handleSortChange = useCallback(async sort => {
|
|
@@ -109,27 +105,33 @@ export const ListQueryProvider = ({
|
|
|
109
105
|
where
|
|
110
106
|
});
|
|
111
107
|
}, [refineListData]);
|
|
112
|
-
|
|
108
|
+
/**
|
|
109
|
+
* The server component may pass props to this client component, e.g. from
|
|
110
|
+
* fetching the query from preferences.
|
|
111
|
+
* This effect is responsible for syncing the props back to the URL, without
|
|
112
|
+
* triggering a re-render.
|
|
113
|
+
*/
|
|
114
|
+
const syncPropsToURL = useEffectEvent(() => {
|
|
113
115
|
const newQuery_0 = sanitizeQuery({
|
|
114
116
|
...(query || {}),
|
|
115
117
|
...(queryFromProps || {})
|
|
116
118
|
});
|
|
117
|
-
const
|
|
119
|
+
const search_1 = `?${qs.stringify({
|
|
118
120
|
...newQuery_0,
|
|
119
121
|
columns: JSON.stringify(newQuery_0.columns),
|
|
120
122
|
queryByGroup: JSON.stringify(newQuery_0.queryByGroup)
|
|
121
123
|
})}`;
|
|
122
|
-
if (window.location.search !==
|
|
124
|
+
if (window.location.search !== search_1) {
|
|
123
125
|
setQuery(newQuery_0);
|
|
124
|
-
// Important: do not use router.replace here to avoid re-rendering
|
|
125
|
-
window.history.replaceState(null, '',
|
|
126
|
+
// Important: do not use router.replace here to avoid re-rendering.
|
|
127
|
+
window.history.replaceState(null, '', search_1);
|
|
126
128
|
}
|
|
127
129
|
});
|
|
128
130
|
// If `query` is updated externally, update the local state
|
|
129
131
|
// E.g. when HMR runs, these properties may be different
|
|
130
132
|
useEffect(() => {
|
|
131
|
-
if (modifySearchParams) {
|
|
132
|
-
|
|
133
|
+
if (modifySearchParams && queryFromProps) {
|
|
134
|
+
syncPropsToURL();
|
|
133
135
|
}
|
|
134
136
|
}, [modifySearchParams, queryFromProps]);
|
|
135
137
|
return /*#__PURE__*/_jsx(ListQueryContext, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useRouter","useSearchParams","qs","React","useCallback","useEffect","useMemo","useRef","useState","useListDrawerContext","useEffectEvent","useRouteTransition","parseSearchParams","useConfig","ListQueryContext","ListQueryModifiedContext","mergeQuery","sanitizeQuery","useListQuery","ListQueryProvider","children","collectionSlug","data","modifySearchParams","onQueryChange","onQueryChangeFromProps","orderableFieldName","query","queryFromProps","router","rawSearchParams","startRouteTransition","modified","setModified","getEntityConfig","collectionConfig","searchParams","contextRef","current","setQuery","limit","sort","refineListData","incomingQuery","undefined","newQuery","defaults","replace","stringify","columns","JSON","queryByGroup","addQueryPrefix","onChangeFn","handlePageChange","arg","page","handlePerPageChange","handleSearchChange","search","handleSortChange","handleWhereChange","where","mergeQueryFromPropsAndSyncToURL","window","location","history","replaceState","_jsx","value","defaultLimit","isGroupingBy","Boolean","admin","groupBy"],"sources":["../../../src/providers/ListQuery/index.tsx"],"sourcesContent":["'use client'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { type ListQuery, type Where } from 'payload'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type { IListQueryContext, ListQueryProps } from './types.js'\n\nimport { useListDrawerContext } from '../../elements/ListDrawer/Provider.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { useConfig } from '../Config/index.js'\nimport { ListQueryContext, ListQueryModifiedContext } from './context.js'\nimport { mergeQuery } from './mergeQuery.js'\nimport { sanitizeQuery } from './sanitizeQuery.js'\n\nexport { useListQuery } from './context.js'\n\nexport const ListQueryProvider: React.FC<ListQueryProps> = ({\n children,\n collectionSlug,\n data,\n modifySearchParams,\n onQueryChange: onQueryChangeFromProps,\n orderableFieldName,\n query: queryFromProps,\n}) => {\n // TODO: Investigate if this is still needed\n 'use no memo'\n // TODO: Investigate if this is still needed\n\n const router = useRouter()\n const rawSearchParams = useSearchParams()\n const { startRouteTransition } = useRouteTransition()\n const [modified, setModified] = useState(false)\n const { getEntityConfig } = useConfig()\n const collectionConfig = getEntityConfig({ collectionSlug })\n\n const searchParams = useMemo<ListQuery>(\n () => sanitizeQuery(parseSearchParams(rawSearchParams)),\n [rawSearchParams],\n )\n\n const contextRef = useRef({} as IListQueryContext)\n\n contextRef.current.modified = modified\n\n const { onQueryChange } = useListDrawerContext()\n\n const [query, setQuery] = useState<ListQuery>(() => {\n if (modifySearchParams) {\n return searchParams\n } else {\n return {\n limit: queryFromProps.limit,\n sort: queryFromProps.sort,\n }\n }\n })\n\n const refineListData = useCallback(\n // eslint-disable-next-line @typescript-eslint/require-await\n async (incomingQuery: ListQuery, modified?: boolean) => {\n if (modified !== undefined) {\n setModified(modified)\n } else {\n setModified(true)\n }\n\n const newQuery = mergeQuery(query, incomingQuery, {\n defaults: {\n limit: queryFromProps.limit,\n sort: queryFromProps.sort,\n },\n })\n\n if (modifySearchParams) {\n startRouteTransition(() =>\n router.replace(\n `${qs.stringify(\n {\n ...newQuery,\n columns: JSON.stringify(newQuery.columns),\n queryByGroup: JSON.stringify(newQuery.queryByGroup),\n },\n { addQueryPrefix: true },\n )}`,\n ),\n )\n } else if (\n typeof onQueryChange === 'function' ||\n typeof onQueryChangeFromProps === 'function'\n ) {\n const onChangeFn = onQueryChange || onQueryChangeFromProps\n onChangeFn(newQuery)\n }\n\n setQuery(newQuery)\n },\n [\n query,\n queryFromProps.limit,\n queryFromProps.sort,\n modifySearchParams,\n onQueryChange,\n onQueryChangeFromProps,\n startRouteTransition,\n router,\n ],\n )\n\n const handlePageChange = useCallback(\n async (arg: number) => {\n await refineListData({ page: arg })\n },\n [refineListData],\n )\n\n const handlePerPageChange = React.useCallback(\n async (arg: number) => {\n await refineListData({ limit: arg, page: 1 })\n },\n [refineListData],\n )\n\n const handleSearchChange = useCallback(\n async (arg: string) => {\n const search = arg === '' ? undefined : arg\n await refineListData({ search })\n },\n [refineListData],\n )\n\n const handleSortChange = useCallback(\n async (sort: string) => {\n await refineListData({ sort })\n },\n [refineListData],\n )\n\n const handleWhereChange = useCallback(\n async (where: Where) => {\n await refineListData({ where })\n },\n [refineListData],\n )\n\n const mergeQueryFromPropsAndSyncToURL = useEffectEvent(() => {\n const newQuery = sanitizeQuery({ ...(query || {}), ...(queryFromProps || {}) })\n\n const search = `?${qs.stringify({\n ...newQuery,\n columns: JSON.stringify(newQuery.columns),\n queryByGroup: JSON.stringify(newQuery.queryByGroup),\n })}`\n\n if (window.location.search !== search) {\n setQuery(newQuery)\n\n // Important: do not use router.replace here to avoid re-rendering on initial load\n window.history.replaceState(null, '', search)\n }\n })\n\n // If `query` is updated externally, update the local state\n // E.g. when HMR runs, these properties may be different\n useEffect(() => {\n if (modifySearchParams) {\n mergeQueryFromPropsAndSyncToURL()\n }\n }, [modifySearchParams, queryFromProps])\n\n return (\n <ListQueryContext\n value={{\n collectionSlug,\n data,\n defaultLimit: data?.limit,\n handlePageChange,\n handlePerPageChange,\n handleSearchChange,\n handleSortChange,\n handleWhereChange,\n isGroupingBy: Boolean(collectionConfig?.admin?.groupBy && query?.groupBy),\n orderableFieldName,\n query,\n refineListData,\n setModified,\n ...contextRef.current,\n }}\n >\n <ListQueryModifiedContext value={modified}>{children}</ListQueryModifiedContext>\n </ListQueryContext>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useRouter","useSearchParams","qs","React","useCallback","useEffect","useMemo","useRef","useState","useListDrawerContext","useEffectEvent","useRouteTransition","parseSearchParams","useConfig","ListQueryContext","ListQueryModifiedContext","mergeQuery","sanitizeQuery","useListQuery","ListQueryProvider","children","collectionSlug","data","modifySearchParams","onQueryChange","onQueryChangeFromProps","orderableFieldName","query","queryFromProps","router","rawSearchParams","startRouteTransition","modified","setModified","getEntityConfig","collectionConfig","contextRef","current","onQueryChangeFromContext","queryFromURL","setQuery","limit","sort","refineListData","incomingQuery","newQuery","defaults","search","stringify","columns","JSON","queryByGroup","window","location","replace","handlePageChange","arg","page","handlePerPageChange","handleSearchChange","undefined","handleSortChange","handleWhereChange","where","syncPropsToURL","history","replaceState","_jsx","value","defaultLimit","isGroupingBy","Boolean","admin","groupBy"],"sources":["../../../src/providers/ListQuery/index.tsx"],"sourcesContent":["'use client'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { type ListQuery, type Where } from 'payload'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type { IListQueryContext, ListQueryProps } from './types.js'\n\nimport { useListDrawerContext } from '../../elements/ListDrawer/Provider.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { useConfig } from '../Config/index.js'\nimport { ListQueryContext, ListQueryModifiedContext } from './context.js'\nimport { mergeQuery } from './mergeQuery.js'\nimport { sanitizeQuery } from './sanitizeQuery.js'\n\nexport { useListQuery } from './context.js'\n\nexport const ListQueryProvider: React.FC<ListQueryProps> = ({\n children,\n collectionSlug,\n data,\n modifySearchParams,\n onQueryChange: onQueryChangeFromProps,\n orderableFieldName,\n query: queryFromProps,\n}) => {\n // TODO: Investigate if this is still needed\n 'use no memo'\n\n const router = useRouter()\n const rawSearchParams = useSearchParams()\n const { startRouteTransition } = useRouteTransition()\n const [modified, setModified] = useState(false)\n const { getEntityConfig } = useConfig()\n const collectionConfig = getEntityConfig({ collectionSlug })\n\n const contextRef = useRef({} as IListQueryContext)\n contextRef.current.modified = modified\n\n const { onQueryChange: onQueryChangeFromContext } = useListDrawerContext()\n const onQueryChange = onQueryChangeFromContext || onQueryChangeFromProps\n\n const queryFromURL = useMemo<ListQuery>(\n () => sanitizeQuery(parseSearchParams(rawSearchParams)),\n [rawSearchParams],\n )\n\n const [query, setQuery] = useState<ListQuery>(() => {\n if (modifySearchParams) {\n return queryFromURL\n } else {\n return {\n limit: queryFromProps.limit,\n sort: queryFromProps.sort,\n }\n }\n })\n\n const refineListData = useCallback(\n // eslint-disable-next-line @typescript-eslint/require-await\n async (incomingQuery: ListQuery, modified?: boolean) => {\n setModified(modified ?? true)\n\n const newQuery = mergeQuery(query, incomingQuery, {\n defaults: {\n limit: queryFromProps.limit,\n sort: queryFromProps.sort,\n },\n })\n\n if (modifySearchParams) {\n const search = `?${qs.stringify({\n ...newQuery,\n columns: JSON.stringify(newQuery.columns),\n queryByGroup: JSON.stringify(newQuery.queryByGroup),\n })}`\n if (window.location.search !== search) {\n startRouteTransition(() => router.replace(search))\n }\n } else if (typeof onQueryChange === 'function') {\n onQueryChange(newQuery)\n }\n\n setQuery(newQuery)\n },\n [\n query,\n queryFromProps.limit,\n queryFromProps.sort,\n modifySearchParams,\n onQueryChange,\n startRouteTransition,\n router,\n ],\n )\n\n const handlePageChange = useCallback(\n async (arg: number) => {\n await refineListData({ page: arg })\n },\n [refineListData],\n )\n\n const handlePerPageChange = React.useCallback(\n async (arg: number) => {\n await refineListData({ limit: arg, page: 1 })\n },\n [refineListData],\n )\n\n const handleSearchChange = useCallback(\n async (arg: string) => {\n const search = arg === '' ? undefined : arg\n await refineListData({ search })\n },\n [refineListData],\n )\n\n const handleSortChange = useCallback(\n async (sort: string) => {\n await refineListData({ sort })\n },\n [refineListData],\n )\n\n const handleWhereChange = useCallback(\n async (where: Where) => {\n await refineListData({ where })\n },\n [refineListData],\n )\n\n /**\n * The server component may pass props to this client component, e.g. from\n * fetching the query from preferences.\n * This effect is responsible for syncing the props back to the URL, without\n * triggering a re-render.\n */\n const syncPropsToURL = useEffectEvent(() => {\n const newQuery = sanitizeQuery({ ...(query || {}), ...(queryFromProps || {}) })\n\n const search = `?${qs.stringify({\n ...newQuery,\n columns: JSON.stringify(newQuery.columns),\n queryByGroup: JSON.stringify(newQuery.queryByGroup),\n })}`\n\n if (window.location.search !== search) {\n setQuery(newQuery)\n // Important: do not use router.replace here to avoid re-rendering.\n window.history.replaceState(null, '', search)\n }\n })\n\n // If `query` is updated externally, update the local state\n // E.g. when HMR runs, these properties may be different\n useEffect(() => {\n if (modifySearchParams && queryFromProps) {\n syncPropsToURL()\n }\n }, [modifySearchParams, queryFromProps])\n\n return (\n <ListQueryContext\n value={{\n collectionSlug,\n data,\n defaultLimit: data?.limit,\n handlePageChange,\n handlePerPageChange,\n handleSearchChange,\n handleSortChange,\n handleWhereChange,\n isGroupingBy: Boolean(collectionConfig?.admin?.groupBy && query?.groupBy),\n orderableFieldName,\n query,\n refineListData,\n setModified,\n ...contextRef.current,\n }}\n >\n <ListQueryModifiedContext value={modified}>{children}</ListQueryModifiedContext>\n </ListQueryContext>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/ui",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.74.0-canary.0",
|
|
4
4
|
"homepage": "https://payloadcms.com",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
"ts-essentials": "10.0.3",
|
|
137
137
|
"use-context-selector": "2.0.0",
|
|
138
138
|
"uuid": "10.0.0",
|
|
139
|
-
"@payloadcms/translations": "3.
|
|
139
|
+
"@payloadcms/translations": "3.74.0-canary.0"
|
|
140
140
|
},
|
|
141
141
|
"devDependencies": {
|
|
142
142
|
"@babel/cli": "7.27.2",
|
|
@@ -151,14 +151,14 @@
|
|
|
151
151
|
"babel-plugin-react-compiler": "19.1.0-rc.3",
|
|
152
152
|
"esbuild": "0.27.1",
|
|
153
153
|
"esbuild-sass-plugin": "3.3.1",
|
|
154
|
-
"payload": "3.
|
|
154
|
+
"payload": "3.74.0-canary.0",
|
|
155
155
|
"@payloadcms/eslint-config": "3.28.0"
|
|
156
156
|
},
|
|
157
157
|
"peerDependencies": {
|
|
158
158
|
"next": "^15.2.8 || ^15.3.8 || ^15.4.10 || ^15.5.9 || >=16.1.1-canary.35 <16.2.0 || ^16.2.0",
|
|
159
159
|
"react": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
160
160
|
"react-dom": "^19.0.1 || ^19.1.2 || ^19.2.1",
|
|
161
|
-
"payload": "3.
|
|
161
|
+
"payload": "3.74.0-canary.0"
|
|
162
162
|
},
|
|
163
163
|
"engines": {
|
|
164
164
|
"node": "^18.20.2 || >=20.9.0"
|