@jobber/components 4.78.3 → 4.78.5-JOB-86464.6
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.
|
@@ -15,6 +15,7 @@ export declare const SEARCH_DEBOUNCE_DELAY: number;
|
|
|
15
15
|
export declare const DATA_LIST_FILTERING_SPINNER_TEST_ID = "ATL-DataList-filteringSpinner";
|
|
16
16
|
export declare const DATA_LIST_LOADING_MORE_SPINNER_TEST_ID = "ATL-DataList-loadingMoreSpinner";
|
|
17
17
|
export declare const DATA_LOAD_MORE_TEST_ID = "ATL-DataList-LoadMore-trigger";
|
|
18
|
+
export declare const DATA_LIST_STICKY_HEADER_TEST_ID = "ATL-DataList-stickyHeader";
|
|
18
19
|
export declare const TRANSITION_DURATION_IN_SECONDS: number;
|
|
19
20
|
export declare const TRANSITION_DELAY_IN_SECONDS: number;
|
|
20
21
|
export {};
|
package/dist/DataList/index.js
CHANGED
|
@@ -144,6 +144,7 @@ const SEARCH_DEBOUNCE_DELAY = design.tokens["timing-slowest"];
|
|
|
144
144
|
const DATA_LIST_FILTERING_SPINNER_TEST_ID = "ATL-DataList-filteringSpinner";
|
|
145
145
|
const DATA_LIST_LOADING_MORE_SPINNER_TEST_ID = "ATL-DataList-loadingMoreSpinner";
|
|
146
146
|
const DATA_LOAD_MORE_TEST_ID = "ATL-DataList-LoadMore-trigger";
|
|
147
|
+
const DATA_LIST_STICKY_HEADER_TEST_ID = "ATL-DataList-stickyHeader";
|
|
147
148
|
const TRANSITION_DURATION_IN_SECONDS = design.tokens["timing-base"] / 1000;
|
|
148
149
|
const TRANSITION_DELAY_IN_SECONDS = design.tokens["timing-quick"] / 1000;
|
|
149
150
|
|
|
@@ -304,13 +305,13 @@ styleInject_es.styleInject(css_248z$8);
|
|
|
304
305
|
function DataListSortingOptions({ options, selectedOption, onSelectChange, onClose, optionsListRef, dataListHeaderTileRef, }) {
|
|
305
306
|
useRefocusOnActivator.useRefocusOnActivator(!optionsListRef.current);
|
|
306
307
|
useOnKeyDown.useOnKeyDown(() => onClose(), "Escape");
|
|
307
|
-
|
|
308
|
+
React.useEffect(() => {
|
|
308
309
|
document.addEventListener("mousedown", handleClickOutside);
|
|
309
310
|
return () => {
|
|
310
311
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
311
312
|
};
|
|
312
313
|
}, [optionsListRef, dataListHeaderTileRef, onClose]);
|
|
313
|
-
return (React__default["default"].createElement("ul", { className: styles$8.optionsList, ref: optionsListRef }, options.map(
|
|
314
|
+
return (React__default["default"].createElement("ul", { className: styles$8.optionsList, ref: optionsListRef }, options.map(option => (React__default["default"].createElement("li", { className: styles$8.option, key: option.id, onClick: () => onSelectChange(option), onKeyDown: event => handleKeyDown(event, option), tabIndex: 0, "data-value": option.id },
|
|
314
315
|
option.label,
|
|
315
316
|
option.label === (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.label) && (React__default["default"].createElement(Icon.Icon, { name: "checkmark", color: "blue" })))))));
|
|
316
317
|
function handleKeyDown(event, option) {
|
|
@@ -320,9 +321,9 @@ function DataListSortingOptions({ options, selectedOption, onSelectChange, onClo
|
|
|
320
321
|
}
|
|
321
322
|
function handleClickOutside(event) {
|
|
322
323
|
var _a, _b;
|
|
323
|
-
const
|
|
324
|
-
|
|
325
|
-
if (!
|
|
324
|
+
const isClickInside = ((_a = optionsListRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target)) ||
|
|
325
|
+
((_b = dataListHeaderTileRef.current) === null || _b === void 0 ? void 0 : _b.contains(event.target));
|
|
326
|
+
if (!isClickInside) {
|
|
326
327
|
onClose();
|
|
327
328
|
}
|
|
328
329
|
}
|
|
@@ -332,9 +333,9 @@ function DataListSortingOptions({ options, selectedOption, onSelectChange, onClo
|
|
|
332
333
|
function DataListHeaderTile({ headers, headerKey, visible = false, }) {
|
|
333
334
|
useRefocusOnActivator.useRefocusOnActivator(visible);
|
|
334
335
|
const { sorting } = useDataListContext();
|
|
335
|
-
const [isDropDownOpen, setIsDropDownOpen] =
|
|
336
|
+
const [isDropDownOpen, setIsDropDownOpen] = React.useState(false);
|
|
336
337
|
const optionsListRef = useFocusTrap.useFocusTrap(isDropDownOpen);
|
|
337
|
-
const dataListHeaderTileRef =
|
|
338
|
+
const dataListHeaderTileRef = React.useRef(null);
|
|
338
339
|
const sortableItem = sorting === null || sorting === void 0 ? void 0 : sorting.sortable.find(item => item.key === headerKey);
|
|
339
340
|
const isSortable = Boolean(sortableItem);
|
|
340
341
|
const sortingState = sorting === null || sorting === void 0 ? void 0 : sorting.state;
|
|
@@ -344,15 +345,15 @@ function DataListHeaderTile({ headers, headerKey, visible = false, }) {
|
|
|
344
345
|
}), onClick: handleOnClick, ref: dataListHeaderTileRef },
|
|
345
346
|
React__default["default"].createElement(Text.Text, { maxLines: "single" }, headers[headerKey]),
|
|
346
347
|
isSortable && (sortableItem === null || sortableItem === void 0 ? void 0 : sortableItem.options) && isDropDownOpen && (React__default["default"].createElement(DataListSortingOptions, { options: sortableItem.options, selectedOption: (sorting === null || sorting === void 0 ? void 0 : sorting.state) || null, onSelectChange: handleSelectChange, onClose: () => setIsDropDownOpen(false), optionsListRef: optionsListRef, dataListHeaderTileRef: dataListHeaderTileRef })),
|
|
347
|
-
|
|
348
|
-
function toggleSorting(newSortingKey, newId, newLabel
|
|
348
|
+
isSortable && (React__default["default"].createElement(DataListSortingArrows, { order: (sortingState === null || sortingState === void 0 ? void 0 : sortingState.key) === headerKey ? sortingState.order : "none" }))));
|
|
349
|
+
function toggleSorting(newSortingKey, newId, newLabel) {
|
|
349
350
|
const isSameKey = newSortingKey === (sortingState === null || sortingState === void 0 ? void 0 : sortingState.key);
|
|
350
351
|
const isDescending = (sortingState === null || sortingState === void 0 ? void 0 : sortingState.order) === "desc";
|
|
351
|
-
if (isSameKey && isDescending
|
|
352
|
+
if (isSameKey && isDescending) {
|
|
352
353
|
sorting === null || sorting === void 0 ? void 0 : sorting.onSort(undefined);
|
|
353
354
|
return;
|
|
354
355
|
}
|
|
355
|
-
const sortingOrder =
|
|
356
|
+
const sortingOrder = isSameKey ? "desc" : "asc";
|
|
356
357
|
setSorting(newSortingKey, newId, newLabel, sortingOrder);
|
|
357
358
|
}
|
|
358
359
|
function setSorting(newSortingKey, newId, newLabel, newOrder) {
|
|
@@ -371,11 +372,8 @@ function DataListHeaderTile({ headers, headerKey, visible = false, }) {
|
|
|
371
372
|
setIsDropDownOpen(!isDropDownOpen);
|
|
372
373
|
}
|
|
373
374
|
else {
|
|
374
|
-
const headerValue = headers[headerKey];
|
|
375
375
|
const id = ((_b = (_a = sortableItem === null || sortableItem === void 0 ? void 0 : sortableItem.options) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.id) || headerKey;
|
|
376
|
-
|
|
377
|
-
toggleSorting(id, headerKey, headerValue);
|
|
378
|
-
}
|
|
376
|
+
toggleSorting(id, headerKey, headers[headerKey]);
|
|
379
377
|
}
|
|
380
378
|
}
|
|
381
379
|
function handleSelectChange(newSortOption) {
|
|
@@ -1019,7 +1017,7 @@ function DataListStickyHeader({ children }) {
|
|
|
1019
1017
|
ref.current && observer.unobserve(ref.current);
|
|
1020
1018
|
};
|
|
1021
1019
|
}, [handleObserver, ref.current]);
|
|
1022
|
-
return (React__default["default"].createElement("div", { ref: ref, className: classnames__default["default"](styles$5.header, { [styles$5.stuck]: isStuck }) }, children));
|
|
1020
|
+
return (React__default["default"].createElement("div", { "data-testid": DATA_LIST_STICKY_HEADER_TEST_ID, ref: ref, className: classnames__default["default"](styles$5.header, { [styles$5.stuck]: isStuck }) }, children));
|
|
1023
1021
|
}
|
|
1024
1022
|
|
|
1025
1023
|
var css_248z$4 = ".tj0MOMhLEEY- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.SaPMOnvw-3c- {\n --transition-properties: var(--timing-base) ease-in-out;\n --button-offset: calc(var(--space-largest) - var(--space-smaller));\n\n position: absolute;\n top: 50%;\n right: calc((16px * 3) - (16px / 4));\n right: calc(calc(16px * 3) - calc(16px / 4));\n right: var(--button-offset);\n visibility: hidden;\n width: 0;\n padding: calc(16px / 4) 0;\n padding: var(--space-smaller) 0;\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n opacity: 0;\n -webkit-transform: translateY(-50%);\n transform: translateY(-50%);\n transition: opacity 200ms ease-in-out,\n width 200ms ease-in-out, visibility 200ms ease-in-out;\n transition: opacity var(--transition-properties),\n width var(--transition-properties), visibility var(--transition-properties);\n}\n\n._3S1-91v2SYI- {\n visibility: visible;\n width: calc(100% - var(--button-offset));\n opacity: 1;\n}\n\n@media (min-width: 768px) {\n\n.SaPMOnvw-3c-,\n._3S1-91v2SYI- {\n position: static;\n visibility: visible;\n width: auto;\n padding: 0;\n background-color: transparent;\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n transition: none;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n.SaPMOnvw-3c-,\n._3S1-91v2SYI- {\n position: static;\n visibility: visible;\n width: auto;\n padding: 0;\n background-color: transparent;\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n transition: none;\n}\n }\n\n._9GlBktsUALw- {\n display: block;\n}\n\n@media (min-width: 768px) {\n\n._9GlBktsUALw- {\n display: none;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n._9GlBktsUALw- {\n display: none;\n}\n }\n\n/*\n * No Filters Styling\n *\n * When there are no filters, the search input is always visible.\n * ------------------------------------------------------------------------- */\n\n._3Pjrt42x454- .SaPMOnvw-3c- {\n position: static;\n visibility: visible;\n width: auto;\n opacity: 1;\n transition: none;\n}\n\n@media (min-width: 768px) {\n\n._3Pjrt42x454- .SaPMOnvw-3c- {\n max-width: 30%;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n._3Pjrt42x454- .SaPMOnvw-3c- {\n max-width: 30%;\n}\n }\n\n._3Pjrt42x454- ._9GlBktsUALw- {\n display: none;\n}\n";
|
|
@@ -1233,6 +1231,7 @@ function DataList(_a) {
|
|
|
1233
1231
|
const emptyStateComponents = getCompoundComponents(props.children, DataListEmptyState);
|
|
1234
1232
|
const itemActionComponent = getCompoundComponent(props.children, DataListItemActions);
|
|
1235
1233
|
const bulkActionsComponent = getCompoundComponent(props.children, DataListBulkActions);
|
|
1234
|
+
const shouldRenderStickyHeader = !!filterComponent || !!searchComponent;
|
|
1236
1235
|
return (React__default["default"].createElement(DataListContext.Provider, { value: Object.assign(Object.assign({ searchComponent,
|
|
1237
1236
|
filterComponent,
|
|
1238
1237
|
layoutComponents,
|
|
@@ -1245,7 +1244,7 @@ function DataList(_a) {
|
|
|
1245
1244
|
registerLayout }, props), { selected,
|
|
1246
1245
|
// T !== DataListObject
|
|
1247
1246
|
sorting: sorting }) },
|
|
1248
|
-
React__default["default"].createElement(InternalDataList,
|
|
1247
|
+
React__default["default"].createElement(InternalDataList, { shouldRenderStickyHeader: shouldRenderStickyHeader })));
|
|
1249
1248
|
function registerLayoutBreakpoints(size) {
|
|
1250
1249
|
setLayoutBreakpoints(prev => sortBreakpoints([...prev, size]));
|
|
1251
1250
|
}
|
|
@@ -1253,7 +1252,7 @@ function DataList(_a) {
|
|
|
1253
1252
|
setLayouts(prev => (Object.assign(Object.assign({}, prev), { [size]: children })));
|
|
1254
1253
|
}
|
|
1255
1254
|
}
|
|
1256
|
-
function InternalDataList() {
|
|
1255
|
+
function InternalDataList({ shouldRenderStickyHeader, }) {
|
|
1257
1256
|
const { data, title, totalCount, loadingState = "none", layoutComponents, } = useDataListContext();
|
|
1258
1257
|
const backToTopRef = React.useRef(null);
|
|
1259
1258
|
const initialLoading = loadingState === "initial";
|
|
@@ -1264,12 +1263,12 @@ function InternalDataList() {
|
|
|
1264
1263
|
title && React__default["default"].createElement(Heading.Heading, { level: 3 }, title),
|
|
1265
1264
|
React__default["default"].createElement(DataListTotalCount, { totalCount: totalCount, loading: initialLoading })),
|
|
1266
1265
|
React__default["default"].createElement("div", { ref: backToTopRef }),
|
|
1267
|
-
React__default["default"].createElement(DataListStickyHeader, null,
|
|
1266
|
+
shouldRenderStickyHeader && (React__default["default"].createElement(DataListStickyHeader, null,
|
|
1268
1267
|
React__default["default"].createElement("div", { className: styles$g.headerFilters },
|
|
1269
1268
|
React__default["default"].createElement(InternalDataListFilters, null),
|
|
1270
1269
|
React__default["default"].createElement(InternalDataListSearch, null)),
|
|
1271
1270
|
React__default["default"].createElement(InternalDataListStatusBar, null),
|
|
1272
|
-
React__default["default"].createElement(DataListHeader, null)),
|
|
1271
|
+
React__default["default"].createElement(DataListHeader, null))),
|
|
1273
1272
|
initialLoading && React__default["default"].createElement(DataListLoadingState, null),
|
|
1274
1273
|
showEmptyState && React__default["default"].createElement(InternalDataListEmptyState, null),
|
|
1275
1274
|
layoutComponents,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jobber/components",
|
|
3
|
-
"version": "4.78.
|
|
3
|
+
"version": "4.78.5-JOB-86464.6+7e7ac9fa",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@jobber/design": "^0.53.0",
|
|
23
|
-
"@jobber/formatters": "
|
|
23
|
+
"@jobber/formatters": "^0.2.2",
|
|
24
24
|
"@jobber/hooks": "^2.8.2",
|
|
25
25
|
"@popperjs/core": "^2.0.6",
|
|
26
26
|
"@std-proposal/temporal": "0.0.1",
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
"> 1%",
|
|
85
85
|
"IE 10"
|
|
86
86
|
],
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "7e7ac9fa0bde548e99b05903093a6de447884f63"
|
|
88
88
|
}
|