@wordpress/dataviews 13.1.1-next.v.202603161435.0 → 14.0.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/CHANGELOG.md +15 -6
- package/README.md +17 -2
- package/build/components/dataform-controls/datetime.cjs +8 -4
- package/build/components/dataform-controls/datetime.cjs.map +2 -2
- package/build/components/dataform-layouts/card/index.cjs +132 -128
- package/build/components/dataform-layouts/card/index.cjs.map +3 -3
- package/build/components/dataviews-bulk-actions/index.cjs +28 -5
- package/build/components/dataviews-bulk-actions/index.cjs.map +2 -2
- package/build/components/dataviews-context/index.cjs +2 -2
- package/build/components/dataviews-context/index.cjs.map +2 -2
- package/build/components/dataviews-footer/index.cjs +2 -3
- package/build/components/dataviews-footer/index.cjs.map +2 -2
- package/build/components/dataviews-layouts/grid/composite-grid.cjs +378 -249
- package/build/components/dataviews-layouts/grid/composite-grid.cjs.map +2 -2
- package/build/components/dataviews-layouts/picker-grid/index.cjs +63 -30
- package/build/components/dataviews-layouts/picker-grid/index.cjs.map +2 -2
- package/build/components/dataviews-layouts/picker-table/index.cjs +34 -22
- package/build/components/dataviews-layouts/picker-table/index.cjs.map +2 -2
- package/build/components/dataviews-layouts/utils/use-infinite-scroll.cjs +62 -0
- package/build/components/dataviews-layouts/utils/use-infinite-scroll.cjs.map +7 -0
- package/build/components/dataviews-picker-footer/index.cjs +23 -4
- package/build/components/dataviews-picker-footer/index.cjs.map +2 -2
- package/build/components/dataviews-search/index.cjs +2 -1
- package/build/components/dataviews-search/index.cjs.map +2 -2
- package/build/components/dataviews-selection-checkbox/index.cjs +3 -2
- package/build/components/dataviews-selection-checkbox/index.cjs.map +2 -2
- package/build/components/dataviews-view-config/index.cjs +0 -2
- package/build/components/dataviews-view-config/index.cjs.map +3 -3
- package/build/components/dataviews-view-config/infinite-scroll-toggle.cjs +0 -3
- package/build/components/dataviews-view-config/infinite-scroll-toggle.cjs.map +2 -2
- package/build/dataviews/index.cjs +37 -37
- package/build/dataviews/index.cjs.map +3 -3
- package/build/dataviews-picker/index.cjs +25 -24
- package/build/dataviews-picker/index.cjs.map +3 -3
- package/build/hooks/index.cjs +11 -2
- package/build/hooks/index.cjs.map +2 -2
- package/build/hooks/use-data.cjs +146 -9
- package/build/hooks/use-data.cjs.map +2 -2
- package/build/hooks/use-infinite-scroll.cjs +208 -0
- package/build/hooks/use-infinite-scroll.cjs.map +7 -0
- package/build/hooks/use-selected-items.cjs +57 -0
- package/build/hooks/use-selected-items.cjs.map +7 -0
- package/build/types/dataviews.cjs.map +1 -1
- package/build/types/field-api.cjs.map +1 -1
- package/build/utils/filter-sort-and-paginate.cjs +5 -1
- package/build/utils/filter-sort-and-paginate.cjs.map +2 -2
- package/build/utils/get-footer-message.cjs +8 -8
- package/build/utils/get-footer-message.cjs.map +2 -2
- package/build-module/components/dataform-controls/datetime.mjs +8 -4
- package/build-module/components/dataform-controls/datetime.mjs.map +2 -2
- package/build-module/components/dataform-layouts/card/index.mjs +132 -133
- package/build-module/components/dataform-layouts/card/index.mjs.map +2 -2
- package/build-module/components/dataviews-bulk-actions/index.mjs +28 -5
- package/build-module/components/dataviews-bulk-actions/index.mjs.map +2 -2
- package/build-module/components/dataviews-context/index.mjs +2 -2
- package/build-module/components/dataviews-context/index.mjs.map +2 -2
- package/build-module/components/dataviews-footer/index.mjs +2 -3
- package/build-module/components/dataviews-footer/index.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/grid/composite-grid.mjs +387 -250
- package/build-module/components/dataviews-layouts/grid/composite-grid.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/picker-grid/index.mjs +67 -31
- package/build-module/components/dataviews-layouts/picker-grid/index.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/picker-table/index.mjs +34 -22
- package/build-module/components/dataviews-layouts/picker-table/index.mjs.map +2 -2
- package/build-module/components/dataviews-layouts/utils/use-infinite-scroll.mjs +26 -0
- package/build-module/components/dataviews-layouts/utils/use-infinite-scroll.mjs.map +7 -0
- package/build-module/components/dataviews-picker-footer/index.mjs +23 -4
- package/build-module/components/dataviews-picker-footer/index.mjs.map +2 -2
- package/build-module/components/dataviews-search/index.mjs +2 -1
- package/build-module/components/dataviews-search/index.mjs.map +2 -2
- package/build-module/components/dataviews-selection-checkbox/index.mjs +3 -2
- package/build-module/components/dataviews-selection-checkbox/index.mjs.map +2 -2
- package/build-module/components/dataviews-view-config/index.mjs +0 -2
- package/build-module/components/dataviews-view-config/index.mjs.map +2 -2
- package/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs +0 -3
- package/build-module/components/dataviews-view-config/infinite-scroll-toggle.mjs.map +2 -2
- package/build-module/dataviews/index.mjs +45 -39
- package/build-module/dataviews/index.mjs.map +2 -2
- package/build-module/dataviews-picker/index.mjs +33 -26
- package/build-module/dataviews-picker/index.mjs.map +2 -2
- package/build-module/hooks/index.mjs +7 -1
- package/build-module/hooks/index.mjs.map +2 -2
- package/build-module/hooks/use-data.mjs +147 -10
- package/build-module/hooks/use-data.mjs.map +2 -2
- package/build-module/hooks/use-infinite-scroll.mjs +188 -0
- package/build-module/hooks/use-infinite-scroll.mjs.map +7 -0
- package/build-module/hooks/use-selected-items.mjs +36 -0
- package/build-module/hooks/use-selected-items.mjs.map +7 -0
- package/build-module/utils/filter-sort-and-paginate.mjs +5 -1
- package/build-module/utils/filter-sort-and-paginate.mjs.map +2 -2
- package/build-module/utils/get-footer-message.mjs +8 -8
- package/build-module/utils/get-footer-message.mjs.map +2 -2
- package/build-style/style-rtl.css +61 -37
- package/build-style/style.css +61 -37
- package/build-types/components/dataform-controls/datetime.d.ts +1 -1
- package/build-types/components/dataform-controls/datetime.d.ts.map +1 -1
- package/build-types/components/dataform-layouts/card/index.d.ts.map +1 -1
- package/build-types/components/dataviews-bulk-actions/index.d.ts +2 -1
- package/build-types/components/dataviews-bulk-actions/index.d.ts.map +1 -1
- package/build-types/components/dataviews-context/index.d.ts +1 -1
- package/build-types/components/dataviews-context/index.d.ts.map +1 -1
- package/build-types/components/dataviews-footer/index.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/grid/composite-grid.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/picker-grid/index.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/picker-table/index.d.ts.map +1 -1
- package/build-types/components/dataviews-layouts/utils/use-infinite-scroll.d.ts +22 -0
- package/build-types/components/dataviews-layouts/utils/use-infinite-scroll.d.ts.map +1 -0
- package/build-types/components/dataviews-picker-footer/index.d.ts.map +1 -1
- package/build-types/components/dataviews-search/index.d.ts.map +1 -1
- package/build-types/components/dataviews-selection-checkbox/index.d.ts.map +1 -1
- package/build-types/components/dataviews-view-config/index.d.ts.map +1 -1
- package/build-types/components/dataviews-view-config/infinite-scroll-toggle.d.ts +1 -1
- package/build-types/components/dataviews-view-config/infinite-scroll-toggle.d.ts.map +1 -1
- package/build-types/dataviews/index.d.ts +0 -1
- package/build-types/dataviews/index.d.ts.map +1 -1
- package/build-types/dataviews/stories/fixtures.d.ts.map +1 -1
- package/build-types/dataviews/stories/free-composition.d.ts.map +1 -1
- package/build-types/dataviews/stories/index.story.d.ts +11 -0
- package/build-types/dataviews/stories/index.story.d.ts.map +1 -1
- package/build-types/dataviews/stories/infinite-scroll.d.ts.map +1 -1
- package/build-types/dataviews/stories/with-card.d.ts.map +1 -1
- package/build-types/dataviews-picker/index.d.ts +0 -1
- package/build-types/dataviews-picker/index.d.ts.map +1 -1
- package/build-types/dataviews-picker/stories/fixtures.d.ts.map +1 -1
- package/build-types/dataviews-picker/stories/index.story.d.ts.map +1 -1
- package/build-types/field-types/stories/index.story.d.ts.map +1 -1
- package/build-types/hooks/index.d.ts +3 -0
- package/build-types/hooks/index.d.ts.map +1 -1
- package/build-types/hooks/test/use-data.d.ts +2 -0
- package/build-types/hooks/test/use-data.d.ts.map +1 -0
- package/build-types/hooks/use-data.d.ts +41 -3
- package/build-types/hooks/use-data.d.ts.map +1 -1
- package/build-types/hooks/use-infinite-scroll.d.ts +21 -0
- package/build-types/hooks/use-infinite-scroll.d.ts.map +1 -0
- package/build-types/hooks/use-selected-items.d.ts +19 -0
- package/build-types/hooks/use-selected-items.d.ts.map +1 -0
- package/build-types/types/dataviews.d.ts +7 -1
- package/build-types/types/dataviews.d.ts.map +1 -1
- package/build-types/types/field-api.d.ts +15 -4
- package/build-types/types/field-api.d.ts.map +1 -1
- package/build-types/utils/filter-sort-and-paginate.d.ts.map +1 -1
- package/build-types/utils/get-footer-message.d.ts +3 -2
- package/build-types/utils/get-footer-message.d.ts.map +1 -1
- package/build-wp/index.js +3013 -2613
- package/package.json +19 -19
- package/src/components/dataform-controls/datetime.tsx +19 -11
- package/src/components/dataform-layouts/card/index.tsx +171 -146
- package/src/components/dataform-layouts/card/style.scss +8 -5
- package/src/components/dataviews-bulk-actions/index.tsx +28 -1
- package/src/components/dataviews-context/index.ts +2 -2
- package/src/components/dataviews-footer/index.tsx +1 -6
- package/src/components/dataviews-layouts/grid/composite-grid.tsx +433 -284
- package/src/components/dataviews-layouts/grid/style.scss +4 -0
- package/src/components/dataviews-layouts/picker-grid/index.tsx +53 -15
- package/src/components/dataviews-layouts/picker-table/index.tsx +42 -22
- package/src/components/dataviews-layouts/utils/use-infinite-scroll.ts +64 -0
- package/src/components/dataviews-picker-footer/index.tsx +21 -1
- package/src/components/dataviews-search/index.tsx +2 -1
- package/src/components/dataviews-selection-checkbox/index.tsx +4 -2
- package/src/components/dataviews-view-config/index.tsx +0 -2
- package/src/components/dataviews-view-config/infinite-scroll-toggle.tsx +0 -5
- package/src/dataviews/index.tsx +57 -52
- package/src/dataviews/stories/fixtures.tsx +288 -0
- package/src/dataviews/stories/free-composition.tsx +12 -11
- package/src/dataviews/stories/index.story.tsx +19 -2
- package/src/dataviews/stories/infinite-scroll.tsx +12 -92
- package/src/dataviews/stories/with-card.tsx +30 -23
- package/src/dataviews/style.scss +5 -7
- package/src/dataviews/test/dataviews.tsx +21 -9
- package/src/dataviews-picker/index.tsx +40 -34
- package/src/dataviews-picker/stories/fixtures.tsx +270 -0
- package/src/dataviews-picker/stories/index.story.tsx +62 -129
- package/src/field-types/stories/index.story.tsx +12 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/test/use-data.ts +791 -0
- package/src/hooks/use-data.ts +288 -21
- package/src/hooks/use-infinite-scroll.ts +304 -0
- package/src/hooks/use-selected-items.ts +72 -0
- package/src/types/dataviews.ts +8 -1
- package/src/types/field-api.ts +16 -3
- package/src/utils/filter-sort-and-paginate.ts +13 -1
- package/src/utils/get-footer-message.ts +12 -9
- package/src/utils/test/filter-sort-and-paginate.js +78 -54
|
@@ -33,6 +33,7 @@ __export(dataviews_exports, {
|
|
|
33
33
|
default: () => dataviews_default
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(dataviews_exports);
|
|
36
|
+
var import_clsx = __toESM(require("clsx"));
|
|
36
37
|
var import_element = require("@wordpress/element");
|
|
37
38
|
var import_compose = require("@wordpress/compose");
|
|
38
39
|
var import_ui = require("@wordpress/ui");
|
|
@@ -47,6 +48,7 @@ var import_dataviews_pagination = require("../components/dataviews-pagination/in
|
|
|
47
48
|
var import_dataviews_view_config = __toESM(require("../components/dataviews-view-config/index.cjs"));
|
|
48
49
|
var import_field_types = __toESM(require("../field-types/index.cjs"));
|
|
49
50
|
var import_use_data = __toESM(require("../hooks/use-data.cjs"));
|
|
51
|
+
var import_use_infinite_scroll = require("../hooks/use-infinite-scroll.cjs");
|
|
50
52
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
51
53
|
var defaultGetItemId = (item) => item.id;
|
|
52
54
|
var defaultIsItemClickable = () => true;
|
|
@@ -59,6 +61,8 @@ function DefaultUI({
|
|
|
59
61
|
search = true,
|
|
60
62
|
searchLabel = void 0
|
|
61
63
|
}) {
|
|
64
|
+
const { view } = (0, import_element.useContext)(import_dataviews_context.default);
|
|
65
|
+
const isInfiniteScroll = view.infiniteScrollEnabled;
|
|
62
66
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
63
67
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
64
68
|
import_ui.Stack,
|
|
@@ -66,7 +70,9 @@ function DefaultUI({
|
|
|
66
70
|
direction: "row",
|
|
67
71
|
align: "top",
|
|
68
72
|
justify: "space-between",
|
|
69
|
-
className: "dataviews__view-actions",
|
|
73
|
+
className: (0, import_clsx.default)("dataviews__view-actions", {
|
|
74
|
+
"dataviews__view-actions--infinite-scroll": isInfiniteScroll
|
|
75
|
+
}),
|
|
70
76
|
gap: "xs",
|
|
71
77
|
children: [
|
|
72
78
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
@@ -118,7 +124,22 @@ function DataViews({
|
|
|
118
124
|
empty,
|
|
119
125
|
onReset
|
|
120
126
|
}) {
|
|
121
|
-
const
|
|
127
|
+
const [selectionState, setSelectionState] = (0, import_element.useState)([]);
|
|
128
|
+
const isUncontrolled = selectionProperty === void 0 || onChangeSelection === void 0;
|
|
129
|
+
const selection = isUncontrolled ? selectionState : selectionProperty;
|
|
130
|
+
const {
|
|
131
|
+
data: displayData,
|
|
132
|
+
paginationInfo: displayPaginationInfo,
|
|
133
|
+
hasInitiallyLoaded,
|
|
134
|
+
setVisibleEntries
|
|
135
|
+
} = (0, import_use_data.default)({
|
|
136
|
+
view,
|
|
137
|
+
data,
|
|
138
|
+
getItemId,
|
|
139
|
+
isLoading,
|
|
140
|
+
selection,
|
|
141
|
+
paginationInfo
|
|
142
|
+
});
|
|
122
143
|
const containerRef = (0, import_element.useRef)(null);
|
|
123
144
|
const [containerWidth, setContainerWidth] = (0, import_element.useState)(0);
|
|
124
145
|
const resizeObserverRef = (0, import_compose.useResizeObserver)(
|
|
@@ -129,9 +150,6 @@ function DataViews({
|
|
|
129
150
|
},
|
|
130
151
|
{ box: "border-box" }
|
|
131
152
|
);
|
|
132
|
-
const [selectionState, setSelectionState] = (0, import_element.useState)([]);
|
|
133
|
-
const isUncontrolled = selectionProperty === void 0 || onChangeSelection === void 0;
|
|
134
|
-
const selection = isUncontrolled ? selectionState : selectionProperty;
|
|
135
153
|
const [openedFilter, setOpenedFilter] = (0, import_element.useState)(null);
|
|
136
154
|
function setSelectionWithChange(value) {
|
|
137
155
|
const newValue = typeof value === "function" ? value(selection) : value;
|
|
@@ -144,10 +162,13 @@ function DataViews({
|
|
|
144
162
|
}
|
|
145
163
|
const _fields = (0, import_element.useMemo)(() => (0, import_field_types.default)(fields), [fields]);
|
|
146
164
|
const _selection = (0, import_element.useMemo)(() => {
|
|
165
|
+
if (view.infiniteScrollEnabled) {
|
|
166
|
+
return selection;
|
|
167
|
+
}
|
|
147
168
|
return selection.filter(
|
|
148
169
|
(id) => data.some((item) => getItemId(item) === id)
|
|
149
170
|
);
|
|
150
|
-
}, [selection, data, getItemId]);
|
|
171
|
+
}, [selection, data, getItemId, view.infiniteScrollEnabled]);
|
|
151
172
|
const filters = (0, import_dataviews_filters.useFilters)(_fields, view);
|
|
152
173
|
const hasPrimaryOrLockedFilters = (0, import_element.useMemo)(
|
|
153
174
|
() => (filters || []).some(
|
|
@@ -158,40 +179,19 @@ function DataViews({
|
|
|
158
179
|
const [isShowingFilter, setIsShowingFilter] = (0, import_element.useState)(
|
|
159
180
|
hasPrimaryOrLockedFilters
|
|
160
181
|
);
|
|
182
|
+
const { intersectionObserver } = (0, import_use_infinite_scroll.useInfiniteScroll)({
|
|
183
|
+
view,
|
|
184
|
+
onChangeView,
|
|
185
|
+
isLoading,
|
|
186
|
+
paginationInfo,
|
|
187
|
+
containerRef,
|
|
188
|
+
setVisibleEntries
|
|
189
|
+
});
|
|
161
190
|
(0, import_element.useEffect)(() => {
|
|
162
191
|
if (hasPrimaryOrLockedFilters && !isShowingFilter) {
|
|
163
192
|
setIsShowingFilter(true);
|
|
164
193
|
}
|
|
165
194
|
}, [hasPrimaryOrLockedFilters, isShowingFilter]);
|
|
166
|
-
const {
|
|
167
|
-
data: displayData,
|
|
168
|
-
paginationInfo: displayPaginationInfo,
|
|
169
|
-
hasInitiallyLoaded
|
|
170
|
-
} = (0, import_use_data.default)(data, isLoading, paginationInfo);
|
|
171
|
-
(0, import_element.useEffect)(() => {
|
|
172
|
-
if (!hasInitiallyLoaded || !view.infiniteScrollEnabled || !containerRef.current) {
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
const handleScroll = (0, import_compose.throttle)((event) => {
|
|
176
|
-
const target = event.target;
|
|
177
|
-
const scrollTop = target.scrollTop;
|
|
178
|
-
const scrollHeight = target.scrollHeight;
|
|
179
|
-
const clientHeight = target.clientHeight;
|
|
180
|
-
if (scrollTop + clientHeight >= scrollHeight - 100) {
|
|
181
|
-
infiniteScrollHandler?.();
|
|
182
|
-
}
|
|
183
|
-
}, 100);
|
|
184
|
-
const container = containerRef.current;
|
|
185
|
-
container.addEventListener("scroll", handleScroll);
|
|
186
|
-
return () => {
|
|
187
|
-
container.removeEventListener("scroll", handleScroll);
|
|
188
|
-
handleScroll.cancel();
|
|
189
|
-
};
|
|
190
|
-
}, [
|
|
191
|
-
hasInitiallyLoaded,
|
|
192
|
-
infiniteScrollHandler,
|
|
193
|
-
view.infiniteScrollEnabled
|
|
194
|
-
]);
|
|
195
195
|
const defaultLayouts = (0, import_element.useMemo)(
|
|
196
196
|
() => Object.fromEntries(
|
|
197
197
|
Object.entries(defaultLayoutsProperty).filter(
|
|
@@ -237,8 +237,8 @@ function DataViews({
|
|
|
237
237
|
config,
|
|
238
238
|
empty,
|
|
239
239
|
hasInitiallyLoaded,
|
|
240
|
-
|
|
241
|
-
|
|
240
|
+
onReset,
|
|
241
|
+
intersectionObserver
|
|
242
242
|
},
|
|
243
243
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "dataviews-wrapper", children: children ?? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
244
244
|
DefaultUI,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/dataviews/index.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport type { ReactNode, ComponentProps, ReactElement } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
6
|
-
"names": ["DataViewsSearch", "DataViewsViewConfig", "DataViewsLayout", "DataViewsFooter", "
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport type { ReactNode, ComponentProps, ReactElement } from 'react';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\nimport { useResizeObserver } from '@wordpress/compose';\nimport { Stack } from '@wordpress/ui';\n\n/**\n * Internal dependencies\n */\nimport DataViewsContext from '../components/dataviews-context';\nimport { VIEW_LAYOUTS } from '../components/dataviews-layouts';\nimport {\n\tFilters,\n\tFiltersToggled,\n\tuseFilters,\n\tFiltersToggle,\n} from '../components/dataviews-filters';\nimport DataViewsLayout from '../components/dataviews-layout';\nimport DataViewsFooter from '../components/dataviews-footer';\nimport DataViewsSearch from '../components/dataviews-search';\nimport { BulkActionsFooter } from '../components/dataviews-bulk-actions';\nimport { DataViewsPagination } from '../components/dataviews-pagination';\nimport DataViewsViewConfig, {\n\tDataviewsViewConfigDropdown,\n\tViewTypeMenu,\n} from '../components/dataviews-view-config';\nimport normalizeFields from '../field-types';\nimport useData from '../hooks/use-data';\nimport { useInfiniteScroll } from '../hooks/use-infinite-scroll';\nimport type { Action, Field, View, SupportedLayouts } from '../types';\nimport type { SelectionOrUpdater } from '../types/private';\ntype ItemWithId = { id: string };\n\ntype DataViewsProps< Item > = {\n\tview: View;\n\tonChangeView: ( view: View ) => void;\n\tfields: Field< Item >[];\n\tsearch?: boolean;\n\tsearchLabel?: string;\n\tactions?: Action< Item >[];\n\tdata: Item[];\n\tisLoading?: boolean;\n\tpaginationInfo: {\n\t\ttotalItems: number;\n\t\ttotalPages: number;\n\t};\n\tdefaultLayouts: SupportedLayouts;\n\tselection?: string[];\n\tonChangeSelection?: ( items: string[] ) => void;\n\tonClickItem?: ( item: Item ) => void;\n\trenderItemLink?: (\n\t\tprops: {\n\t\t\titem: Item;\n\t\t} & ComponentProps< 'a' >\n\t) => ReactElement;\n\tisItemClickable?: ( item: Item ) => boolean;\n\theader?: ReactNode;\n\tgetItemLevel?: ( item: Item ) => number;\n\tchildren?: ReactNode;\n\tconfig?: {\n\t\tperPageSizes: number[];\n\t};\n\tempty?: ReactNode;\n\tonReset?: ( () => void ) | false;\n} & ( Item extends ItemWithId\n\t? { getItemId?: ( item: Item ) => string }\n\t: { getItemId: ( item: Item ) => string } );\n\nconst defaultGetItemId = ( item: ItemWithId ) => item.id;\nconst defaultIsItemClickable = () => true;\nconst EMPTY_ARRAY: any[] = [];\n\nconst dataViewsLayouts = VIEW_LAYOUTS.filter(\n\t( viewLayout ) => ! viewLayout.isPicker\n);\n\ntype DefaultUIProps = Pick<\n\tDataViewsProps< any >,\n\t'header' | 'search' | 'searchLabel'\n>;\n\nfunction DefaultUI( {\n\theader,\n\tsearch = true,\n\tsearchLabel = undefined,\n}: DefaultUIProps ) {\n\tconst { view } = useContext( DataViewsContext );\n\tconst isInfiniteScroll = view.infiniteScrollEnabled;\n\treturn (\n\t\t<>\n\t\t\t<Stack\n\t\t\t\tdirection=\"row\"\n\t\t\t\talign=\"top\"\n\t\t\t\tjustify=\"space-between\"\n\t\t\t\tclassName={ clsx( 'dataviews__view-actions', {\n\t\t\t\t\t'dataviews__view-actions--infinite-scroll':\n\t\t\t\t\t\tisInfiniteScroll,\n\t\t\t\t} ) }\n\t\t\t\tgap=\"xs\"\n\t\t\t>\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\tjustify=\"start\"\n\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\tclassName=\"dataviews__search\"\n\t\t\t\t>\n\t\t\t\t\t{ search && <DataViewsSearch label={ searchLabel } /> }\n\t\t\t\t\t<FiltersToggle />\n\t\t\t\t</Stack>\n\t\t\t\t<Stack direction=\"row\" gap=\"xs\" style={ { flexShrink: 0 } }>\n\t\t\t\t\t<DataViewsViewConfig />\n\t\t\t\t\t{ header }\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t\t<FiltersToggled className=\"dataviews-filters__container\" />\n\t\t\t<DataViewsLayout />\n\t\t\t<DataViewsFooter />\n\t\t</>\n\t);\n}\n\nfunction DataViews< Item >( {\n\tview,\n\tonChangeView,\n\tfields,\n\tsearch = true,\n\tsearchLabel = undefined,\n\tactions = EMPTY_ARRAY,\n\tdata,\n\tgetItemId = defaultGetItemId,\n\tgetItemLevel,\n\tisLoading = false,\n\tpaginationInfo,\n\tdefaultLayouts: defaultLayoutsProperty,\n\tselection: selectionProperty,\n\tonChangeSelection,\n\tonClickItem,\n\trenderItemLink,\n\tisItemClickable = defaultIsItemClickable,\n\theader,\n\tchildren,\n\tconfig = { perPageSizes: [ 10, 20, 50, 100 ] },\n\tempty,\n\tonReset,\n}: DataViewsProps< Item > ) {\n\tconst [ selectionState, setSelectionState ] = useState< string[] >( [] );\n\tconst isUncontrolled =\n\t\tselectionProperty === undefined || onChangeSelection === undefined;\n\tconst selection = isUncontrolled ? selectionState : selectionProperty;\n\n\t// useData handles both infinite scroll and standard pagination paths,\n\t// preserving previous data while loading and tracking initial load state.\n\tconst {\n\t\tdata: displayData,\n\t\tpaginationInfo: displayPaginationInfo,\n\t\thasInitiallyLoaded,\n\t\tsetVisibleEntries,\n\t} = useData( {\n\t\tview,\n\t\tdata: data as any,\n\t\tgetItemId: getItemId as any,\n\t\tisLoading,\n\t\tselection,\n\t\tpaginationInfo,\n\t} ) as {\n\t\tdata: ( Item & { position?: number } )[];\n\t\tpaginationInfo: { totalItems: number; totalPages: number };\n\t\thasInitiallyLoaded: boolean;\n\t\tsetVisibleEntries?: React.Dispatch< React.SetStateAction< number[] > >;\n\t};\n\tconst containerRef = useRef< HTMLDivElement >( null );\n\tconst [ containerWidth, setContainerWidth ] = useState( 0 );\n\tconst resizeObserverRef = useResizeObserver(\n\t\t( resizeObserverEntries: any ) => {\n\t\t\tsetContainerWidth(\n\t\t\t\tresizeObserverEntries[ 0 ].borderBoxSize[ 0 ].inlineSize\n\t\t\t);\n\t\t},\n\t\t{ box: 'border-box' }\n\t);\n\tconst [ openedFilter, setOpenedFilter ] = useState< string | null >( null );\n\tfunction setSelectionWithChange( value: SelectionOrUpdater ) {\n\t\tconst newValue =\n\t\t\ttypeof value === 'function' ? value( selection ) : value;\n\t\tif ( isUncontrolled ) {\n\t\t\tsetSelectionState( newValue );\n\t\t}\n\t\tif ( onChangeSelection ) {\n\t\t\tonChangeSelection( newValue );\n\t\t}\n\t}\n\tconst _fields = useMemo( () => normalizeFields( fields ), [ fields ] );\n\t// When infinite scroll is enabled, don't filter selection by current data\n\t// because items may be scrolled out of view but still selected.\n\tconst _selection = useMemo( () => {\n\t\tif ( view.infiniteScrollEnabled ) {\n\t\t\treturn selection;\n\t\t}\n\t\treturn selection.filter( ( id ) =>\n\t\t\tdata.some( ( item ) => getItemId( item ) === id )\n\t\t);\n\t}, [ selection, data, getItemId, view.infiniteScrollEnabled ] );\n\n\tconst filters = useFilters( _fields, view );\n\tconst hasPrimaryOrLockedFilters = useMemo(\n\t\t() =>\n\t\t\t( filters || [] ).some(\n\t\t\t\t( filter ) => filter.isPrimary || filter.isLocked\n\t\t\t),\n\t\t[ filters ]\n\t);\n\tconst [ isShowingFilter, setIsShowingFilter ] = useState< boolean >(\n\t\thasPrimaryOrLockedFilters\n\t);\n\n\tconst { intersectionObserver } = useInfiniteScroll( {\n\t\tview,\n\t\tonChangeView,\n\t\tisLoading,\n\t\tpaginationInfo,\n\t\tcontainerRef,\n\t\tsetVisibleEntries,\n\t} );\n\n\tuseEffect( () => {\n\t\tif ( hasPrimaryOrLockedFilters && ! isShowingFilter ) {\n\t\t\tsetIsShowingFilter( true );\n\t\t}\n\t}, [ hasPrimaryOrLockedFilters, isShowingFilter ] );\n\n\t// Filter out DataViewsPicker layouts.\n\tconst defaultLayouts = useMemo(\n\t\t() =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries( defaultLayoutsProperty ).filter(\n\t\t\t\t\t( [ layoutType ] ) => {\n\t\t\t\t\t\treturn dataViewsLayouts.some(\n\t\t\t\t\t\t\t( viewLayout ) => viewLayout.type === layoutType\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t),\n\t\t[ defaultLayoutsProperty ]\n\t);\n\n\tif ( ! defaultLayouts[ view.type ] ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<DataViewsContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tview,\n\t\t\t\tonChangeView,\n\t\t\t\tfields: _fields,\n\t\t\t\tactions,\n\t\t\t\tdata: displayData,\n\t\t\t\tisLoading,\n\t\t\t\tpaginationInfo: displayPaginationInfo,\n\t\t\t\tselection: _selection,\n\t\t\t\tonChangeSelection: setSelectionWithChange,\n\t\t\t\topenedFilter,\n\t\t\t\tsetOpenedFilter,\n\t\t\t\tgetItemId,\n\t\t\t\tgetItemLevel,\n\t\t\t\tisItemClickable,\n\t\t\t\tonClickItem,\n\t\t\t\trenderItemLink,\n\t\t\t\tcontainerWidth,\n\t\t\t\tcontainerRef,\n\t\t\t\tresizeObserverRef,\n\t\t\t\tdefaultLayouts,\n\t\t\t\tfilters,\n\t\t\t\tisShowingFilter,\n\t\t\t\tsetIsShowingFilter,\n\t\t\t\tconfig,\n\t\t\t\tempty,\n\t\t\t\thasInitiallyLoaded,\n\t\t\t\tonReset,\n\t\t\t\tintersectionObserver,\n\t\t\t} }\n\t\t>\n\t\t\t<div className=\"dataviews-wrapper\">\n\t\t\t\t{ children ?? (\n\t\t\t\t\t<DefaultUI\n\t\t\t\t\t\theader={ header }\n\t\t\t\t\t\tsearch={ search }\n\t\t\t\t\t\tsearchLabel={ searchLabel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</DataViewsContext.Provider>\n\t);\n}\n\n// Populate the DataViews sub components\nconst DataViewsSubComponents = DataViews as typeof DataViews & {\n\tBulkActionToolbar: typeof BulkActionsFooter;\n\tFilters: typeof Filters;\n\tFiltersToggle: typeof FiltersToggle;\n\tFiltersToggled: typeof FiltersToggled;\n\tLayout: typeof DataViewsLayout;\n\tLayoutSwitcher: typeof ViewTypeMenu;\n\tPagination: typeof DataViewsPagination;\n\tSearch: typeof DataViewsSearch;\n\tViewConfig: typeof DataviewsViewConfigDropdown;\n\tFooter: typeof DataViewsFooter;\n};\n\nDataViewsSubComponents.BulkActionToolbar = BulkActionsFooter;\nDataViewsSubComponents.Filters = Filters;\nDataViewsSubComponents.FiltersToggled = FiltersToggled;\nDataViewsSubComponents.FiltersToggle = FiltersToggle;\nDataViewsSubComponents.Layout = DataViewsLayout;\nDataViewsSubComponents.LayoutSwitcher = ViewTypeMenu;\nDataViewsSubComponents.Pagination = DataViewsPagination;\nDataViewsSubComponents.Search = DataViewsSearch;\nDataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown;\nDataViewsSubComponents.Footer = DataViewsFooter;\n\nexport default DataViewsSubComponents;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["DataViewsContext", "clsx", "DataViewsSearch", "DataViewsViewConfig", "DataViewsLayout", "DataViewsFooter", "useData", "normalizeFields"]
|
|
7
7
|
}
|
|
@@ -33,6 +33,7 @@ __export(dataviews_picker_exports, {
|
|
|
33
33
|
default: () => dataviews_picker_default
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(dataviews_picker_exports);
|
|
36
|
+
var import_clsx = __toESM(require("clsx"));
|
|
36
37
|
var import_element = require("@wordpress/element");
|
|
37
38
|
var import_compose = require("@wordpress/compose");
|
|
38
39
|
var import_ui = require("@wordpress/ui");
|
|
@@ -45,6 +46,8 @@ var import_dataviews_search = __toESM(require("../components/dataviews-search/in
|
|
|
45
46
|
var import_dataviews_pagination = require("../components/dataviews-pagination/index.cjs");
|
|
46
47
|
var import_dataviews_view_config = __toESM(require("../components/dataviews-view-config/index.cjs"));
|
|
47
48
|
var import_field_types = __toESM(require("../field-types/index.cjs"));
|
|
49
|
+
var import_use_data = __toESM(require("../hooks/use-data.cjs"));
|
|
50
|
+
var import_use_infinite_scroll = require("../hooks/use-infinite-scroll.cjs");
|
|
48
51
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
49
52
|
var isItemClickable = () => false;
|
|
50
53
|
var dataViewsPickerLayouts = import_dataviews_layouts.VIEW_LAYOUTS.filter(
|
|
@@ -56,6 +59,8 @@ function DefaultUI({
|
|
|
56
59
|
search = true,
|
|
57
60
|
searchLabel = void 0
|
|
58
61
|
}) {
|
|
62
|
+
const { view } = (0, import_element.useContext)(import_dataviews_context.default);
|
|
63
|
+
const isInfiniteScroll = view.infiniteScrollEnabled;
|
|
59
64
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
60
65
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
61
66
|
import_ui.Stack,
|
|
@@ -63,7 +68,9 @@ function DefaultUI({
|
|
|
63
68
|
direction: "row",
|
|
64
69
|
align: "top",
|
|
65
70
|
justify: "space-between",
|
|
66
|
-
className: "dataviews__view-actions",
|
|
71
|
+
className: (0, import_clsx.default)("dataviews__view-actions", {
|
|
72
|
+
"dataviews__view-actions--infinite-scroll": isInfiniteScroll
|
|
73
|
+
}),
|
|
67
74
|
gap: "xs",
|
|
68
75
|
children: [
|
|
69
76
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
@@ -107,7 +114,13 @@ function DataViewsPicker({
|
|
|
107
114
|
itemListLabel,
|
|
108
115
|
empty
|
|
109
116
|
}) {
|
|
110
|
-
const {
|
|
117
|
+
const { data: displayData, setVisibleEntries } = (0, import_use_data.default)({
|
|
118
|
+
view,
|
|
119
|
+
data,
|
|
120
|
+
getItemId,
|
|
121
|
+
selection,
|
|
122
|
+
paginationInfo
|
|
123
|
+
});
|
|
111
124
|
const containerRef = (0, import_element.useRef)(null);
|
|
112
125
|
const [containerWidth, setContainerWidth] = (0, import_element.useState)(0);
|
|
113
126
|
const resizeObserverRef = (0, import_compose.useResizeObserver)(
|
|
@@ -136,31 +149,19 @@ function DataViewsPicker({
|
|
|
136
149
|
const [isShowingFilter, setIsShowingFilter] = (0, import_element.useState)(
|
|
137
150
|
hasPrimaryOrLockedFilters
|
|
138
151
|
);
|
|
152
|
+
const { intersectionObserver } = (0, import_use_infinite_scroll.useInfiniteScroll)({
|
|
153
|
+
view,
|
|
154
|
+
onChangeView,
|
|
155
|
+
isLoading,
|
|
156
|
+
paginationInfo,
|
|
157
|
+
containerRef,
|
|
158
|
+
setVisibleEntries
|
|
159
|
+
});
|
|
139
160
|
(0, import_element.useEffect)(() => {
|
|
140
161
|
if (hasPrimaryOrLockedFilters && !isShowingFilter) {
|
|
141
162
|
setIsShowingFilter(true);
|
|
142
163
|
}
|
|
143
164
|
}, [hasPrimaryOrLockedFilters, isShowingFilter]);
|
|
144
|
-
(0, import_element.useEffect)(() => {
|
|
145
|
-
if (!view.infiniteScrollEnabled || !containerRef.current) {
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
const handleScroll = (0, import_compose.throttle)((event) => {
|
|
149
|
-
const target = event.target;
|
|
150
|
-
const scrollTop = target.scrollTop;
|
|
151
|
-
const scrollHeight = target.scrollHeight;
|
|
152
|
-
const clientHeight = target.clientHeight;
|
|
153
|
-
if (scrollTop + clientHeight >= scrollHeight - 100) {
|
|
154
|
-
infiniteScrollHandler?.();
|
|
155
|
-
}
|
|
156
|
-
}, 100);
|
|
157
|
-
const container = containerRef.current;
|
|
158
|
-
container.addEventListener("scroll", handleScroll);
|
|
159
|
-
return () => {
|
|
160
|
-
container.removeEventListener("scroll", handleScroll);
|
|
161
|
-
handleScroll.cancel();
|
|
162
|
-
};
|
|
163
|
-
}, [infiniteScrollHandler, view.infiniteScrollEnabled]);
|
|
164
165
|
const defaultLayouts = (0, import_element.useMemo)(
|
|
165
166
|
() => Object.fromEntries(
|
|
166
167
|
Object.entries(defaultLayoutsProperty).filter(
|
|
@@ -184,7 +185,7 @@ function DataViewsPicker({
|
|
|
184
185
|
onChangeView,
|
|
185
186
|
fields: _fields,
|
|
186
187
|
actions,
|
|
187
|
-
data,
|
|
188
|
+
data: displayData,
|
|
188
189
|
isLoading,
|
|
189
190
|
paginationInfo,
|
|
190
191
|
isItemClickable,
|
|
@@ -204,7 +205,7 @@ function DataViewsPicker({
|
|
|
204
205
|
itemListLabel,
|
|
205
206
|
empty,
|
|
206
207
|
hasInitiallyLoaded: true,
|
|
207
|
-
|
|
208
|
+
intersectionObserver
|
|
208
209
|
},
|
|
209
210
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "dataviews-picker-wrapper", children: children ?? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DefaultUI, { search, searchLabel }) })
|
|
210
211
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/dataviews-picker/index.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport type { ReactNode } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
6
|
-
"names": ["DataViewsSearch", "DataViewsViewConfig", "DataViewsLayout", "
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport type { ReactNode } from 'react';\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from '@wordpress/element';\nimport { useResizeObserver } from '@wordpress/compose';\nimport { Stack } from '@wordpress/ui';\n\n/**\n * Internal dependencies\n */\nimport DataViewsContext from '../components/dataviews-context';\nimport { VIEW_LAYOUTS } from '../components/dataviews-layouts';\nimport {\n\tFilters,\n\tFiltersToggled,\n\tuseFilters,\n\tFiltersToggle,\n} from '../components/dataviews-filters';\nimport DataViewsLayout from '../components/dataviews-layout';\nimport { DataViewsPickerFooter } from '../components/dataviews-picker-footer';\nimport DataViewsSearch from '../components/dataviews-search';\nimport { DataViewsPagination } from '../components/dataviews-pagination';\nimport DataViewsViewConfig, {\n\tDataviewsViewConfigDropdown,\n\tViewTypeMenu,\n} from '../components/dataviews-view-config';\nimport normalizeFields from '../field-types';\nimport useData from '../hooks/use-data';\nimport { useInfiniteScroll } from '../hooks/use-infinite-scroll';\nimport type { ActionButton, Field, View, SupportedLayouts } from '../types';\nimport type { SelectionOrUpdater } from '../types/private';\ntype ItemWithId = { id: string };\n\nconst isItemClickable = () => false;\n\nconst dataViewsPickerLayouts = VIEW_LAYOUTS.filter(\n\t( viewLayout ) => viewLayout.isPicker\n);\n\ntype DataViewsPickerProps< Item > = {\n\tview: View;\n\tonChangeView: ( view: View ) => void;\n\tfields: Field< Item >[];\n\tactions?: ActionButton< Item >[];\n\tsearch?: boolean;\n\tsearchLabel?: string;\n\tdata: Item[];\n\tisLoading?: boolean;\n\tpaginationInfo: {\n\t\ttotalItems: number;\n\t\ttotalPages: number;\n\t};\n\tdefaultLayouts: SupportedLayouts;\n\tselection: string[];\n\tonChangeSelection: ( items: string[] ) => void;\n\tchildren?: ReactNode;\n\tconfig?: {\n\t\tperPageSizes: number[];\n\t};\n\titemListLabel?: string;\n\tempty?: ReactNode;\n} & ( Item extends ItemWithId\n\t? { getItemId?: ( item: Item ) => string }\n\t: { getItemId: ( item: Item ) => string } );\n\nconst defaultGetItemId = ( item: ItemWithId ) => item.id;\nconst EMPTY_ARRAY: any[] = [];\n\ntype DefaultUIProps = Pick<\n\tDataViewsPickerProps< any >,\n\t'search' | 'searchLabel'\n>;\n\nfunction DefaultUI( {\n\tsearch = true,\n\tsearchLabel = undefined,\n}: DefaultUIProps ) {\n\tconst { view } = useContext( DataViewsContext );\n\tconst isInfiniteScroll = view.infiniteScrollEnabled;\n\treturn (\n\t\t<>\n\t\t\t<Stack\n\t\t\t\tdirection=\"row\"\n\t\t\t\talign=\"top\"\n\t\t\t\tjustify=\"space-between\"\n\t\t\t\tclassName={ clsx( 'dataviews__view-actions', {\n\t\t\t\t\t'dataviews__view-actions--infinite-scroll':\n\t\t\t\t\t\tisInfiniteScroll,\n\t\t\t\t} ) }\n\t\t\t\tgap=\"xs\"\n\t\t\t>\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\tgap=\"sm\"\n\t\t\t\t\tjustify=\"start\"\n\t\t\t\t\tclassName=\"dataviews__search\"\n\t\t\t\t>\n\t\t\t\t\t{ search && <DataViewsSearch label={ searchLabel } /> }\n\t\t\t\t\t<FiltersToggle />\n\t\t\t\t</Stack>\n\t\t\t\t<Stack direction=\"row\" gap=\"xs\" style={ { flexShrink: 0 } }>\n\t\t\t\t\t<DataViewsViewConfig />\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t\t<FiltersToggled className=\"dataviews-filters__container\" />\n\t\t\t<DataViewsLayout />\n\t\t\t<DataViewsPickerFooter />\n\t\t</>\n\t);\n}\n\nfunction DataViewsPicker< Item >( {\n\tview,\n\tonChangeView,\n\tfields,\n\tsearch = true,\n\tsearchLabel = undefined,\n\tactions = EMPTY_ARRAY,\n\tdata,\n\tgetItemId = defaultGetItemId,\n\tisLoading = false,\n\tpaginationInfo,\n\tdefaultLayouts: defaultLayoutsProperty,\n\tselection,\n\tonChangeSelection,\n\tchildren,\n\tconfig = { perPageSizes: [ 10, 20, 50, 100 ] },\n\titemListLabel,\n\tempty,\n}: DataViewsPickerProps< Item > ) {\n\t// useData ensures data loading is correct whether infinite scroll is enabled or pagination is used.\n\tconst { data: displayData, setVisibleEntries } = useData( {\n\t\tview,\n\t\tdata: data as any,\n\t\tgetItemId: getItemId as any,\n\t\tselection,\n\t\tpaginationInfo,\n\t} ) as {\n\t\tdata: ( Item & { position?: number } )[];\n\t\tsetVisibleEntries?: React.Dispatch< React.SetStateAction< number[] > >;\n\t};\n\tconst containerRef = useRef< HTMLDivElement >( null );\n\tconst [ containerWidth, setContainerWidth ] = useState( 0 );\n\tconst resizeObserverRef = useResizeObserver(\n\t\t( resizeObserverEntries: any ) => {\n\t\t\tsetContainerWidth(\n\t\t\t\tresizeObserverEntries[ 0 ].borderBoxSize[ 0 ].inlineSize\n\t\t\t);\n\t\t},\n\t\t{ box: 'border-box' }\n\t);\n\tconst [ openedFilter, setOpenedFilter ] = useState< string | null >( null );\n\tfunction setSelectionWithChange( value: SelectionOrUpdater ) {\n\t\tconst newValue =\n\t\t\ttypeof value === 'function' ? value( selection ) : value;\n\t\tif ( onChangeSelection ) {\n\t\t\tonChangeSelection( newValue );\n\t\t}\n\t}\n\tconst _fields = useMemo( () => normalizeFields( fields ), [ fields ] );\n\tconst filters = useFilters( _fields, view );\n\n\tconst hasPrimaryOrLockedFilters = useMemo(\n\t\t() =>\n\t\t\t( filters || [] ).some(\n\t\t\t\t( filter ) => filter.isPrimary || filter.isLocked\n\t\t\t),\n\t\t[ filters ]\n\t);\n\tconst [ isShowingFilter, setIsShowingFilter ] = useState< boolean >(\n\t\thasPrimaryOrLockedFilters\n\t);\n\n\tconst { intersectionObserver } = useInfiniteScroll( {\n\t\tview,\n\t\tonChangeView,\n\t\tisLoading,\n\t\tpaginationInfo,\n\t\tcontainerRef,\n\t\tsetVisibleEntries,\n\t} );\n\n\tuseEffect( () => {\n\t\tif ( hasPrimaryOrLockedFilters && ! isShowingFilter ) {\n\t\t\tsetIsShowingFilter( true );\n\t\t}\n\t}, [ hasPrimaryOrLockedFilters, isShowingFilter ] );\n\n\t// Filter out DataViewsPicker layouts.\n\tconst defaultLayouts = useMemo(\n\t\t() =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries( defaultLayoutsProperty ).filter(\n\t\t\t\t\t( [ layoutType ] ) => {\n\t\t\t\t\t\treturn dataViewsPickerLayouts.some(\n\t\t\t\t\t\t\t( viewLayout ) => viewLayout.type === layoutType\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t),\n\t\t[ defaultLayoutsProperty ]\n\t);\n\n\tif ( ! defaultLayouts[ view.type ] ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<DataViewsContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tview,\n\t\t\t\tonChangeView,\n\t\t\t\tfields: _fields,\n\t\t\t\tactions,\n\t\t\t\tdata: displayData,\n\t\t\t\tisLoading,\n\t\t\t\tpaginationInfo,\n\t\t\t\tisItemClickable,\n\t\t\t\tselection,\n\t\t\t\tonChangeSelection: setSelectionWithChange,\n\t\t\t\topenedFilter,\n\t\t\t\tsetOpenedFilter,\n\t\t\t\tgetItemId,\n\t\t\t\tcontainerWidth,\n\t\t\t\tcontainerRef,\n\t\t\t\tresizeObserverRef,\n\t\t\t\tdefaultLayouts,\n\t\t\t\tfilters,\n\t\t\t\tisShowingFilter,\n\t\t\t\tsetIsShowingFilter,\n\t\t\t\tconfig,\n\t\t\t\titemListLabel,\n\t\t\t\tempty,\n\t\t\t\thasInitiallyLoaded: true,\n\t\t\t\tintersectionObserver,\n\t\t\t} }\n\t\t>\n\t\t\t<div className=\"dataviews-picker-wrapper\">\n\t\t\t\t{ children ?? (\n\t\t\t\t\t<DefaultUI search={ search } searchLabel={ searchLabel } />\n\t\t\t\t) }\n\t\t\t</div>\n\t\t</DataViewsContext.Provider>\n\t);\n}\n\n// Populate the DataViews sub components\nconst DataViewsPickerSubComponents =\n\tDataViewsPicker as typeof DataViewsPicker & {\n\t\tBulkActionToolbar: typeof DataViewsPickerFooter;\n\t\tFilters: typeof Filters;\n\t\tFiltersToggled: typeof FiltersToggled;\n\t\tFiltersToggle: typeof FiltersToggle;\n\t\tLayout: typeof DataViewsLayout;\n\t\tLayoutSwitcher: typeof ViewTypeMenu;\n\t\tPagination: typeof DataViewsPagination;\n\t\tSearch: typeof DataViewsSearch;\n\t\tViewConfig: typeof DataviewsViewConfigDropdown;\n\t};\n\nDataViewsPickerSubComponents.BulkActionToolbar = DataViewsPickerFooter;\nDataViewsPickerSubComponents.Filters = Filters;\nDataViewsPickerSubComponents.FiltersToggled = FiltersToggled;\nDataViewsPickerSubComponents.FiltersToggle = FiltersToggle;\nDataViewsPickerSubComponents.Layout = DataViewsLayout;\nDataViewsPickerSubComponents.LayoutSwitcher = ViewTypeMenu;\nDataViewsPickerSubComponents.Pagination = DataViewsPagination;\nDataViewsPickerSubComponents.Search = DataViewsSearch;\nDataViewsPickerSubComponents.ViewConfig = DataviewsViewConfigDropdown;\n\nexport default DataViewsPickerSubComponents;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["DataViewsContext", "clsx", "DataViewsSearch", "DataViewsViewConfig", "DataViewsLayout", "useData", "normalizeFields"]
|
|
7
7
|
}
|
package/build/hooks/index.cjs
CHANGED
|
@@ -30,12 +30,21 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// packages/dataviews/src/hooks/index.ts
|
|
31
31
|
var hooks_exports = {};
|
|
32
32
|
__export(hooks_exports, {
|
|
33
|
-
|
|
33
|
+
useData: () => import_use_data.default,
|
|
34
|
+
useFormValidity: () => import_use_form_validity.default,
|
|
35
|
+
useInfiniteScroll: () => import_use_infinite_scroll.useInfiniteScroll,
|
|
36
|
+
useSelectedItems: () => import_use_selected_items.default
|
|
34
37
|
});
|
|
35
38
|
module.exports = __toCommonJS(hooks_exports);
|
|
36
39
|
var import_use_form_validity = __toESM(require("./use-form-validity.cjs"));
|
|
40
|
+
var import_use_data = __toESM(require("./use-data.cjs"));
|
|
41
|
+
var import_use_infinite_scroll = require("./use-infinite-scroll.cjs");
|
|
42
|
+
var import_use_selected_items = __toESM(require("./use-selected-items.cjs"));
|
|
37
43
|
// Annotate the CommonJS export names for ESM import in node:
|
|
38
44
|
0 && (module.exports = {
|
|
39
|
-
|
|
45
|
+
useData,
|
|
46
|
+
useFormValidity,
|
|
47
|
+
useInfiniteScroll,
|
|
48
|
+
useSelectedItems
|
|
40
49
|
});
|
|
41
50
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/hooks/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Internal dependencies\n */\nexport { default as useFormValidity } from './use-form-validity';\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,+BAA2C;",
|
|
4
|
+
"sourcesContent": ["/**\n * Internal dependencies\n */\nexport { default as useFormValidity } from './use-form-validity';\nexport { default as useData } from './use-data';\nexport { useInfiniteScroll } from './use-infinite-scroll';\nexport { default as useSelectedItems } from './use-selected-items';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,+BAA2C;AAC3C,sBAAmC;AACnC,iCAAkC;AAClC,gCAA4C;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/hooks/use-data.cjs
CHANGED
|
@@ -24,23 +24,160 @@ __export(use_data_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(use_data_exports);
|
|
26
26
|
var import_element = require("@wordpress/element");
|
|
27
|
-
function useData(
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
function useData({
|
|
28
|
+
view,
|
|
29
|
+
data: shownData,
|
|
30
|
+
getItemId,
|
|
31
|
+
isLoading,
|
|
32
|
+
paginationInfo,
|
|
33
|
+
selection
|
|
34
|
+
}) {
|
|
35
|
+
const isInfiniteScrollEnabled = view.infiniteScrollEnabled;
|
|
30
36
|
const [hasInitiallyLoaded, setHasInitiallyLoaded] = (0, import_element.useState)(
|
|
31
37
|
!isLoading
|
|
32
38
|
);
|
|
33
39
|
(0, import_element.useEffect)(() => {
|
|
34
40
|
if (!isLoading) {
|
|
35
|
-
previousDataRef.current = data;
|
|
36
|
-
previousPaginationInfoRef.current = paginationInfo;
|
|
37
41
|
setHasInitiallyLoaded(true);
|
|
38
42
|
}
|
|
39
|
-
}, [
|
|
43
|
+
}, [isLoading]);
|
|
44
|
+
const previousDataRef = (0, import_element.useRef)(shownData);
|
|
45
|
+
const previousPaginationInfoRef = (0, import_element.useRef)(paginationInfo);
|
|
46
|
+
(0, import_element.useEffect)(() => {
|
|
47
|
+
if (!isLoading) {
|
|
48
|
+
previousDataRef.current = shownData;
|
|
49
|
+
previousPaginationInfoRef.current = paginationInfo;
|
|
50
|
+
}
|
|
51
|
+
}, [shownData, isLoading, paginationInfo]);
|
|
52
|
+
const [visibleEntries, setVisibleEntries] = (0, import_element.useState)([]);
|
|
53
|
+
const positionMapRef = (0, import_element.useRef)(/* @__PURE__ */ new Map());
|
|
54
|
+
const allLoadedRecordsRef = (0, import_element.useRef)([]);
|
|
55
|
+
const prevViewParamsRef = (0, import_element.useRef)({
|
|
56
|
+
search: void 0,
|
|
57
|
+
filters: void 0,
|
|
58
|
+
perPage: void 0
|
|
59
|
+
});
|
|
60
|
+
const scrollDirectionRef = (0, import_element.useRef)(void 0);
|
|
61
|
+
const prevStartPositionRef = (0, import_element.useRef)(void 0);
|
|
62
|
+
const hasInitializedRef = (0, import_element.useRef)(false);
|
|
63
|
+
const allLoadedRecords = (0, import_element.useMemo)(() => {
|
|
64
|
+
if (view.startPosition !== void 0 && prevStartPositionRef.current !== void 0) {
|
|
65
|
+
if (view.startPosition < prevStartPositionRef.current) {
|
|
66
|
+
scrollDirectionRef.current = "up";
|
|
67
|
+
} else if (view.startPosition > prevStartPositionRef.current) {
|
|
68
|
+
scrollDirectionRef.current = "down";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
prevStartPositionRef.current = view.startPosition;
|
|
72
|
+
const currentFiltersKey = JSON.stringify(view.filters ?? []);
|
|
73
|
+
const prevFiltersKey = prevViewParamsRef.current.filters;
|
|
74
|
+
const shouldReset = !hasInitializedRef.current || !view.infiniteScrollEnabled || view.search !== prevViewParamsRef.current.search || currentFiltersKey !== prevFiltersKey || view.perPage !== prevViewParamsRef.current.perPage;
|
|
75
|
+
hasInitializedRef.current = true;
|
|
76
|
+
prevViewParamsRef.current = {
|
|
77
|
+
search: view.search,
|
|
78
|
+
filters: currentFiltersKey,
|
|
79
|
+
perPage: view.perPage
|
|
80
|
+
};
|
|
81
|
+
if (shouldReset) {
|
|
82
|
+
positionMapRef.current.clear();
|
|
83
|
+
scrollDirectionRef.current = void 0;
|
|
84
|
+
const startPosition = view.search ? 1 : view.startPosition ?? 1;
|
|
85
|
+
const records = shownData.map((record, index) => {
|
|
86
|
+
const position = startPosition + index;
|
|
87
|
+
positionMapRef.current.set(getItemId(record), position);
|
|
88
|
+
return {
|
|
89
|
+
...record,
|
|
90
|
+
position
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
allLoadedRecordsRef.current = records;
|
|
94
|
+
return records;
|
|
95
|
+
}
|
|
96
|
+
const prev = allLoadedRecordsRef.current;
|
|
97
|
+
const shownDataIds = new Set(shownData.map(getItemId));
|
|
98
|
+
const scrollDirection = scrollDirectionRef.current;
|
|
99
|
+
const basePosition = view.search ? 1 : view.startPosition ?? 1;
|
|
100
|
+
const newRecords = shownData.map((record, index) => {
|
|
101
|
+
const itemId = getItemId(record);
|
|
102
|
+
const position = view.infiniteScrollEnabled ? basePosition + index : void 0;
|
|
103
|
+
if (position !== void 0) {
|
|
104
|
+
positionMapRef.current.set(itemId, position);
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
...record,
|
|
108
|
+
position
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
if (newRecords.length === 0) {
|
|
112
|
+
return prev;
|
|
113
|
+
}
|
|
114
|
+
const prevWithoutDuplicates = prev.filter(
|
|
115
|
+
(record) => !shownDataIds.has(getItemId(record))
|
|
116
|
+
);
|
|
117
|
+
const allRecords = scrollDirection === "up" ? [...newRecords, ...prevWithoutDuplicates] : [...prevWithoutDuplicates, ...newRecords];
|
|
118
|
+
allRecords.sort((a, b) => {
|
|
119
|
+
const posA = a.position;
|
|
120
|
+
const posB = b.position;
|
|
121
|
+
return posA - posB;
|
|
122
|
+
});
|
|
123
|
+
let result = allRecords;
|
|
124
|
+
if (visibleEntries.length > 0) {
|
|
125
|
+
const visibleMin = Math.min(...visibleEntries);
|
|
126
|
+
const visibleMax = Math.max(...visibleEntries);
|
|
127
|
+
const buffer = 20;
|
|
128
|
+
const recordPositions = allRecords.map(
|
|
129
|
+
(r) => r.position
|
|
130
|
+
);
|
|
131
|
+
const minRecordPos = Math.min(...recordPositions);
|
|
132
|
+
const maxRecordPos = Math.max(...recordPositions);
|
|
133
|
+
const hasOverlap = !(maxRecordPos < visibleMin - buffer || minRecordPos > visibleMax + buffer);
|
|
134
|
+
if (hasOverlap) {
|
|
135
|
+
result = allRecords.filter((record) => {
|
|
136
|
+
const itemId = getItemId(record);
|
|
137
|
+
const isSelected = selection?.includes(itemId);
|
|
138
|
+
if (isSelected) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
const itemPosition = record.position;
|
|
142
|
+
if (scrollDirection === "up") {
|
|
143
|
+
return itemPosition <= visibleMax + buffer;
|
|
144
|
+
} else if (scrollDirection === "down") {
|
|
145
|
+
return itemPosition >= visibleMin - buffer;
|
|
146
|
+
}
|
|
147
|
+
return itemPosition >= visibleMin - buffer && itemPosition <= visibleMax + buffer;
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
allLoadedRecordsRef.current = result;
|
|
152
|
+
return result;
|
|
153
|
+
}, [
|
|
154
|
+
shownData,
|
|
155
|
+
view.search,
|
|
156
|
+
view.filters,
|
|
157
|
+
view.perPage,
|
|
158
|
+
view.startPosition,
|
|
159
|
+
view.infiniteScrollEnabled,
|
|
160
|
+
visibleEntries,
|
|
161
|
+
selection,
|
|
162
|
+
getItemId
|
|
163
|
+
]);
|
|
164
|
+
if (!isInfiniteScrollEnabled) {
|
|
165
|
+
const dataToReturn = isLoading && previousDataRef.current?.length ? previousDataRef.current : shownData;
|
|
166
|
+
return {
|
|
167
|
+
data: dataToReturn.map((item) => ({
|
|
168
|
+
...item,
|
|
169
|
+
position: void 0
|
|
170
|
+
})),
|
|
171
|
+
paginationInfo: isLoading && previousDataRef.current?.length ? previousPaginationInfoRef.current : paginationInfo,
|
|
172
|
+
hasInitiallyLoaded,
|
|
173
|
+
setVisibleEntries: void 0
|
|
174
|
+
};
|
|
175
|
+
}
|
|
40
176
|
return {
|
|
41
|
-
data:
|
|
42
|
-
paginationInfo
|
|
43
|
-
hasInitiallyLoaded
|
|
177
|
+
data: allLoadedRecords,
|
|
178
|
+
paginationInfo,
|
|
179
|
+
hasInitiallyLoaded,
|
|
180
|
+
setVisibleEntries
|
|
44
181
|
};
|
|
45
182
|
}
|
|
46
183
|
//# sourceMappingURL=use-data.cjs.map
|