@gravity-ui/querieskit 1.3.2 → 1.5.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/build/cjs/components/LazyList/LazyList.css +4 -0
- package/build/cjs/components/LazyList/LazyList.css.map +1 -1
- package/build/cjs/components/LazyList/LazyList.js +38 -5
- package/build/cjs/components/LazyList/LazyList.js.map +1 -1
- package/build/cjs/components/QueryDuration/QueryDuration.stories.js +7 -0
- package/build/cjs/components/QueryDuration/QueryDuration.stories.js.map +1 -1
- package/build/cjs/components/QueryDuration/useQueryDuration.d.ts +1 -1
- package/build/cjs/components/QueryDuration/useQueryDuration.js +22 -16
- package/build/cjs/components/QueryDuration/useQueryDuration.js.map +1 -1
- package/build/cjs/components/RowLink/RowLink.d.ts +4 -4
- package/build/cjs/components/RowLink/RowLink.js +15 -4
- package/build/cjs/components/RowLink/RowLink.js.map +1 -1
- package/build/cjs/components/SearchRowLayout/SearchRowLayout.d.ts +2 -0
- package/build/cjs/components/SearchRowLayout/SearchRowLayout.js +2 -0
- package/build/cjs/components/SearchRowLayout/SearchRowLayout.js.map +1 -1
- package/build/cjs/helpers/getListKey.d.ts +1 -0
- package/build/cjs/helpers/getListKey.js +5 -4
- package/build/cjs/helpers/getListKey.js.map +1 -1
- package/build/cjs/helpers/time.d.ts +1 -1
- package/build/cjs/helpers/time.js +17 -12
- package/build/cjs/helpers/time.js.map +1 -1
- package/build/cjs/helpers/useListKey.d.ts +2 -0
- package/build/cjs/helpers/useListKey.js +32 -0
- package/build/cjs/helpers/useListKey.js.map +1 -0
- package/build/cjs/helpers/useLoadMoreSentinel.d.ts +1 -1
- package/build/cjs/helpers/useLoadMoreSentinel.js +12 -3
- package/build/cjs/helpers/useLoadMoreSentinel.js.map +1 -1
- package/build/cjs/modules/HistoryHeader/HistoryHeader.d.ts +1 -0
- package/build/cjs/modules/HistoryHeader/HistoryHeader.js +8 -6
- package/build/cjs/modules/HistoryHeader/HistoryHeader.js.map +1 -1
- package/build/cjs/modules/HistoryRow/HistoryRow.css +2 -1
- package/build/cjs/modules/HistoryRow/HistoryRow.css.map +1 -1
- package/build/cjs/modules/HistoryRow/HistoryRow.d.ts +1 -1
- package/build/cjs/modules/HistoryRow/HistoryRow.js +5 -3
- package/build/cjs/modules/HistoryRow/HistoryRow.js.map +1 -1
- package/build/cjs/modules/HistorySearchRow/HistorySearchRow.d.ts +1 -1
- package/build/cjs/modules/HistorySearchRow/HistorySearchRow.js +3 -1
- package/build/cjs/modules/HistorySearchRow/HistorySearchRow.js.map +1 -1
- package/build/cjs/modules/QueriesList/QueriesList.d.ts +6 -2
- package/build/cjs/modules/QueriesList/QueriesList.js +14 -3
- package/build/cjs/modules/QueriesList/QueriesList.js.map +1 -1
- package/build/cjs/modules/RowsList/RowsList.d.ts +6 -2
- package/build/cjs/modules/RowsList/RowsList.js +13 -7
- package/build/cjs/modules/RowsList/RowsList.js.map +1 -1
- package/build/cjs/modules/RowsList/helpers/prepareRowData.d.ts +3 -2
- package/build/cjs/modules/RowsList/helpers/prepareRowData.js +4 -2
- package/build/cjs/modules/RowsList/helpers/prepareRowData.js.map +1 -1
- package/build/cjs/types/queryList.d.ts +4 -1
- package/build/cjs/types/queryList.js.map +1 -1
- package/build/cjs/widgets/QueriesHistory/QueriesHistory.d.ts +6 -2
- package/build/cjs/widgets/QueriesHistory/QueriesHistory.js +9 -1
- package/build/cjs/widgets/QueriesHistory/QueriesHistory.js.map +1 -1
- package/build/cjs/widgets/QueriesHistory/QueriesHistory.stories.d.ts +7 -0
- package/build/cjs/widgets/QueriesHistory/QueriesHistory.stories.js +279 -6
- package/build/cjs/widgets/QueriesHistory/QueriesHistory.stories.js.map +1 -1
- package/build/cjs/widgets/TutorialsHistory/TutorialsHistory.js +3 -1
- package/build/cjs/widgets/TutorialsHistory/TutorialsHistory.js.map +1 -1
- package/build/esm/components/LazyList/LazyList.css +4 -0
- package/build/esm/components/LazyList/LazyList.css.map +1 -1
- package/build/esm/components/LazyList/LazyList.js +40 -7
- package/build/esm/components/LazyList/LazyList.js.map +1 -1
- package/build/esm/components/LazyList/LazyList.scss +5 -0
- package/build/esm/components/QueryDuration/QueryDuration.stories.js +7 -0
- package/build/esm/components/QueryDuration/QueryDuration.stories.js.map +1 -1
- package/build/esm/components/QueryDuration/useQueryDuration.d.ts +1 -1
- package/build/esm/components/QueryDuration/useQueryDuration.js +22 -16
- package/build/esm/components/QueryDuration/useQueryDuration.js.map +1 -1
- package/build/esm/components/RowLink/RowLink.d.ts +4 -4
- package/build/esm/components/RowLink/RowLink.js +15 -4
- package/build/esm/components/RowLink/RowLink.js.map +1 -1
- package/build/esm/components/SearchRowLayout/SearchRowLayout.d.ts +2 -0
- package/build/esm/components/SearchRowLayout/SearchRowLayout.js +2 -0
- package/build/esm/components/SearchRowLayout/SearchRowLayout.js.map +1 -1
- package/build/esm/helpers/getListKey.d.ts +1 -0
- package/build/esm/helpers/getListKey.js +4 -3
- package/build/esm/helpers/getListKey.js.map +1 -1
- package/build/esm/helpers/time.d.ts +1 -1
- package/build/esm/helpers/time.js +18 -13
- package/build/esm/helpers/time.js.map +1 -1
- package/build/esm/helpers/useListKey.d.ts +2 -0
- package/build/esm/helpers/useListKey.js +26 -0
- package/build/esm/helpers/useListKey.js.map +1 -0
- package/build/esm/helpers/useLoadMoreSentinel.d.ts +1 -1
- package/build/esm/helpers/useLoadMoreSentinel.js +12 -3
- package/build/esm/helpers/useLoadMoreSentinel.js.map +1 -1
- package/build/esm/modules/HistoryHeader/HistoryHeader.d.ts +1 -0
- package/build/esm/modules/HistoryHeader/HistoryHeader.js +8 -6
- package/build/esm/modules/HistoryHeader/HistoryHeader.js.map +1 -1
- package/build/esm/modules/HistoryRow/HistoryRow.css +2 -1
- package/build/esm/modules/HistoryRow/HistoryRow.css.map +1 -1
- package/build/esm/modules/HistoryRow/HistoryRow.d.ts +1 -1
- package/build/esm/modules/HistoryRow/HistoryRow.js +5 -3
- package/build/esm/modules/HistoryRow/HistoryRow.js.map +1 -1
- package/build/esm/modules/HistoryRow/HistoryRow.scss +2 -1
- package/build/esm/modules/HistorySearchRow/HistorySearchRow.d.ts +1 -1
- package/build/esm/modules/HistorySearchRow/HistorySearchRow.js +3 -1
- package/build/esm/modules/HistorySearchRow/HistorySearchRow.js.map +1 -1
- package/build/esm/modules/QueriesList/QueriesList.d.ts +6 -2
- package/build/esm/modules/QueriesList/QueriesList.js +14 -3
- package/build/esm/modules/QueriesList/QueriesList.js.map +1 -1
- package/build/esm/modules/RowsList/RowsList.d.ts +6 -2
- package/build/esm/modules/RowsList/RowsList.js +13 -7
- package/build/esm/modules/RowsList/RowsList.js.map +1 -1
- package/build/esm/modules/RowsList/helpers/prepareRowData.d.ts +3 -2
- package/build/esm/modules/RowsList/helpers/prepareRowData.js +4 -2
- package/build/esm/modules/RowsList/helpers/prepareRowData.js.map +1 -1
- package/build/esm/types/queryList.d.ts +4 -1
- package/build/esm/types/queryList.js.map +1 -1
- package/build/esm/widgets/QueriesHistory/QueriesHistory.d.ts +6 -2
- package/build/esm/widgets/QueriesHistory/QueriesHistory.js +9 -1
- package/build/esm/widgets/QueriesHistory/QueriesHistory.js.map +1 -1
- package/build/esm/widgets/QueriesHistory/QueriesHistory.stories.d.ts +7 -0
- package/build/esm/widgets/QueriesHistory/QueriesHistory.stories.js +279 -6
- package/build/esm/widgets/QueriesHistory/QueriesHistory.stories.js.map +1 -1
- package/build/esm/widgets/TutorialsHistory/TutorialsHistory.js +3 -1
- package/build/esm/widgets/TutorialsHistory/TutorialsHistory.js.map +1 -1
- package/package.json +7 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["LazyList.scss"],"names":[],"mappings":"AACE;EACE,qDAAA;AAAJ;AAGE;EACE,WAAA;AADJ;
|
|
1
|
+
{"version":3,"sources":["LazyList.scss"],"names":[],"mappings":"AACE;EACE,qDAAA;AAAJ;AAGE;EACE,WAAA;EACA,WAAA;AADJ;AAGI;EACE,YAAA;AADN;AAKE;EACE,YAAA;AAHJ","file":"LazyList.css","sourcesContent":[".qp-lazy-list {\n .g-list__item_selected:hover {\n background-color: var(--g-color-base-selection-hover);\n }\n\n &__sentinel {\n height: 1px;\n width: 100%;\n\n &_loading {\n height: 40px;\n }\n }\n\n &__spinner {\n height: 100%;\n }\n}\n"],"sourceRoot":""}
|
|
@@ -22,6 +22,7 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
22
22
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
23
|
var block = (0, _bemCnLite.default)('qp-lazy-list');
|
|
24
24
|
var SENTINEL_ROW_HEIGHT = 1;
|
|
25
|
+
var LOADING_ROW_HEIGHT = 40;
|
|
25
26
|
var isSentinelRow = function isSentinelRow(row) {
|
|
26
27
|
return Boolean(row) && (0, _typeof2.default)(row) === 'object' && '__sentinel' in row;
|
|
27
28
|
};
|
|
@@ -40,15 +41,37 @@ var LazyList = exports.LazyList = function LazyList(_ref) {
|
|
|
40
41
|
emptyContent = _ref.emptyContent,
|
|
41
42
|
isEmpty = _ref.isEmpty,
|
|
42
43
|
className = _ref.className;
|
|
43
|
-
var
|
|
44
|
+
var listRef = (0, _react.useRef)(null);
|
|
45
|
+
var previousListStateRef = (0, _react.useRef)({
|
|
46
|
+
itemsLength: items.length,
|
|
47
|
+
loading: loading,
|
|
48
|
+
hasMore: hasMore
|
|
49
|
+
});
|
|
50
|
+
var sentinelRef = (0, _useLoadMoreSentinel.useLoadMoreSentinel)(hasMore, onLoadMore, loading, items.length);
|
|
44
51
|
var rows = (0, _react.useMemo)(function () {
|
|
45
|
-
return hasMore ? [].concat((0, _toConsumableArray2.default)(items), [{
|
|
52
|
+
return hasMore || loading ? [].concat((0, _toConsumableArray2.default)(items), [{
|
|
46
53
|
__sentinel: true
|
|
47
54
|
}]) : items;
|
|
48
|
-
}, [items, hasMore]);
|
|
55
|
+
}, [items, hasMore, loading]);
|
|
49
56
|
var getRowHeight = function getRowHeight(row) {
|
|
50
|
-
|
|
57
|
+
if (isSentinelRow(row)) {
|
|
58
|
+
return loading ? LOADING_ROW_HEIGHT : SENTINEL_ROW_HEIGHT;
|
|
59
|
+
}
|
|
60
|
+
return itemHeight(row);
|
|
51
61
|
};
|
|
62
|
+
(0, _react.useLayoutEffect)(function () {
|
|
63
|
+
var previousListState = previousListStateRef.current;
|
|
64
|
+
var listStateChanged = previousListState.itemsLength !== items.length || previousListState.loading !== loading || previousListState.hasMore !== hasMore;
|
|
65
|
+
if (listStateChanged) {
|
|
66
|
+
var _listRef$current;
|
|
67
|
+
(_listRef$current = listRef.current) === null || _listRef$current === void 0 || (_listRef$current = _listRef$current.refContainer.current) === null || _listRef$current === void 0 || _listRef$current.resetAfterIndex(Math.min(previousListState.itemsLength, items.length), true);
|
|
68
|
+
previousListStateRef.current = {
|
|
69
|
+
itemsLength: items.length,
|
|
70
|
+
loading: loading,
|
|
71
|
+
hasMore: hasMore
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}, [hasMore, items.length, loading]);
|
|
52
75
|
if (error) {
|
|
53
76
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.default.Fragment, {
|
|
54
77
|
children: error
|
|
@@ -66,6 +89,7 @@ var LazyList = exports.LazyList = function LazyList(_ref) {
|
|
|
66
89
|
});
|
|
67
90
|
}
|
|
68
91
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_uikit.List, {
|
|
92
|
+
ref: listRef,
|
|
69
93
|
className: block(null, className),
|
|
70
94
|
filterable: filterable,
|
|
71
95
|
items: rows,
|
|
@@ -78,7 +102,16 @@ var LazyList = exports.LazyList = function LazyList(_ref) {
|
|
|
78
102
|
renderItem: function renderItem(row, isActive, index) {
|
|
79
103
|
return isSentinelRow(row) ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
80
104
|
ref: sentinelRef,
|
|
81
|
-
className: block('sentinel'
|
|
105
|
+
className: block('sentinel', {
|
|
106
|
+
loading: Boolean(loading)
|
|
107
|
+
}),
|
|
108
|
+
children: loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_uikit.Flex, {
|
|
109
|
+
alignItems: "center",
|
|
110
|
+
justifyContent: "center",
|
|
111
|
+
width: "100%",
|
|
112
|
+
height: "100%",
|
|
113
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_uikit.Loader, {})
|
|
114
|
+
})
|
|
82
115
|
}) : _renderItem(row, isActive, index);
|
|
83
116
|
},
|
|
84
117
|
selectedItemIndex: selectedItemIndex,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikit","_bemCnLite","_interopRequireDefault","_useLoadMoreSentinel","_ListSpinner","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","block","cn","SENTINEL_ROW_HEIGHT","isSentinelRow","row","Boolean","_typeof","LazyList","exports","_ref","items","itemHeight","renderItem","hasMore","onLoadMore","onItemClick","selectedItemIndex","_ref$filterable","filterable","loading","error","emptyContent","isEmpty","className","sentinelRef","useLoadMoreSentinel","rows","useMemo","concat","_toConsumableArray","__sentinel","getRowHeight","_jsx","React","Fragment","children","empty","length","ListSpinner","List","itemsHeight","listRows","reduce","total","isActive","index","ref","_renderItem","_onItemClick"],"sources":["LazyList.tsx"],"sourcesContent":["import React, {useMemo} from 'react';\nimport {List} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport {useLoadMoreSentinel} from '../../helpers/useLoadMoreSentinel';\nimport {ListSpinner} from '../ListSpinner';\nimport './LazyList.scss';\n\nconst block = cn('qp-lazy-list');\n\nconst SENTINEL_ROW_HEIGHT = 1;\n\ntype SentinelRow = {__sentinel: true};\ntype LazyListRow<T> = T | SentinelRow;\n\nconst isSentinelRow = <T,>(row: LazyListRow<T>): row is SentinelRow =>\n Boolean(row) && typeof row === 'object' && '__sentinel' in (row as object);\n\nexport type LazyListProps<T extends object> = {\n items: T[];\n itemHeight: (item: T) => number;\n renderItem: (item: T, isActive: boolean, index: number) => React.ReactNode;\n hasMore?: boolean;\n onLoadMore?: () => void;\n onItemClick?: (item: T, index: number) => void;\n selectedItemIndex?: T[keyof T] | number;\n filterable?: boolean;\n loading?: boolean;\n error?: React.ReactNode;\n emptyContent?: React.ReactNode;\n isEmpty?: boolean;\n className?: string;\n};\n\nexport const LazyList = <T extends object>({\n items,\n itemHeight,\n renderItem,\n hasMore,\n onLoadMore,\n onItemClick,\n selectedItemIndex,\n filterable = false,\n loading,\n error,\n emptyContent,\n isEmpty,\n className,\n}: LazyListProps<T>) => {\n const sentinelRef = useLoadMoreSentinel(hasMore, onLoadMore);\n\n const rows: LazyListRow<T>[] = useMemo(\n () => (hasMore ? [...items, {__sentinel: true}] : items),\n [items, hasMore],\n );\n\n const getRowHeight = (row: LazyListRow<T>) =>\n isSentinelRow(row) ? SENTINEL_ROW_HEIGHT : itemHeight(row);\n\n if (error) {\n return <React.Fragment>{error}</React.Fragment>;\n }\n\n const empty = isEmpty ?? !items.length;\n\n if (loading && empty) {\n return <ListSpinner className={block('spinner', className)} />;\n }\n\n if (empty) {\n return <React.Fragment>{emptyContent}</React.Fragment>;\n }\n\n return (\n <List<LazyListRow<T>>\n className={block(null, className)}\n filterable={filterable}\n items={rows}\n itemHeight={getRowHeight}\n itemsHeight={(listRows) =>\n listRows.reduce((total, row) => total + getRowHeight(row), 0)\n }\n renderItem={(row, isActive, index) =>\n isSentinelRow(row) ? (\n <div ref={sentinelRef} className={block('sentinel')} />\n ) : (\n renderItem(row, isActive, index)\n )\n }\n selectedItemIndex={selectedItemIndex as never}\n onItemClick={(row, index) => {\n if (!isSentinelRow(row)) {\n onItemClick?.(row, index);\n }\n }}\n />\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikit","_bemCnLite","_interopRequireDefault","_useLoadMoreSentinel","_ListSpinner","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","block","cn","SENTINEL_ROW_HEIGHT","LOADING_ROW_HEIGHT","isSentinelRow","row","Boolean","_typeof","LazyList","exports","_ref","items","itemHeight","renderItem","hasMore","onLoadMore","onItemClick","selectedItemIndex","_ref$filterable","filterable","loading","error","emptyContent","isEmpty","className","listRef","useRef","previousListStateRef","itemsLength","length","sentinelRef","useLoadMoreSentinel","rows","useMemo","concat","_toConsumableArray","__sentinel","getRowHeight","useLayoutEffect","previousListState","current","listStateChanged","_listRef$current","refContainer","resetAfterIndex","Math","min","_jsx","React","Fragment","children","empty","ListSpinner","List","ref","itemsHeight","listRows","reduce","total","isActive","index","Flex","alignItems","justifyContent","width","height","Loader","_renderItem","_onItemClick"],"sources":["LazyList.tsx"],"sourcesContent":["import React, {useLayoutEffect, useMemo, useRef} from 'react';\nimport {Flex, List, Loader} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport {useLoadMoreSentinel} from '../../helpers/useLoadMoreSentinel';\nimport {ListSpinner} from '../ListSpinner';\nimport './LazyList.scss';\n\nconst block = cn('qp-lazy-list');\n\nconst SENTINEL_ROW_HEIGHT = 1;\nconst LOADING_ROW_HEIGHT = 40;\n\ntype SentinelRow = {__sentinel: true};\ntype LazyListRow<T> = T | SentinelRow;\n\nconst isSentinelRow = <T,>(row: LazyListRow<T>): row is SentinelRow =>\n Boolean(row) && typeof row === 'object' && '__sentinel' in (row as object);\n\nexport type LazyListProps<T extends object> = {\n items: T[];\n itemHeight: (item: T) => number;\n renderItem: (item: T, isActive: boolean, index: number) => React.ReactNode;\n hasMore?: boolean;\n onLoadMore?: () => void;\n onItemClick?: (item: T, index: number) => void;\n selectedItemIndex?: T[keyof T] | number;\n filterable?: boolean;\n loading?: boolean;\n error?: React.ReactNode;\n emptyContent?: React.ReactNode;\n isEmpty?: boolean;\n className?: string;\n};\n\nexport const LazyList = <T extends object>({\n items,\n itemHeight,\n renderItem,\n hasMore,\n onLoadMore,\n onItemClick,\n selectedItemIndex,\n filterable = false,\n loading,\n error,\n emptyContent,\n isEmpty,\n className,\n}: LazyListProps<T>) => {\n const listRef = useRef<List<LazyListRow<T>>>(null);\n const previousListStateRef = useRef({itemsLength: items.length, loading, hasMore});\n const sentinelRef = useLoadMoreSentinel(hasMore, onLoadMore, loading, items.length);\n\n const rows: LazyListRow<T>[] = useMemo(\n () => (hasMore || loading ? [...items, {__sentinel: true}] : items),\n [items, hasMore, loading],\n );\n\n const getRowHeight = (row: LazyListRow<T>) => {\n if (isSentinelRow(row)) {\n return loading ? LOADING_ROW_HEIGHT : SENTINEL_ROW_HEIGHT;\n }\n\n return itemHeight(row);\n };\n\n useLayoutEffect(() => {\n const previousListState = previousListStateRef.current;\n const listStateChanged =\n previousListState.itemsLength !== items.length ||\n previousListState.loading !== loading ||\n previousListState.hasMore !== hasMore;\n\n if (listStateChanged) {\n listRef.current?.refContainer.current?.resetAfterIndex(\n Math.min(previousListState.itemsLength, items.length),\n true,\n );\n previousListStateRef.current = {itemsLength: items.length, loading, hasMore};\n }\n }, [hasMore, items.length, loading]);\n\n if (error) {\n return <React.Fragment>{error}</React.Fragment>;\n }\n\n const empty = isEmpty ?? !items.length;\n\n if (loading && empty) {\n return <ListSpinner className={block('spinner', className)} />;\n }\n\n if (empty) {\n return <React.Fragment>{emptyContent}</React.Fragment>;\n }\n\n return (\n <List<LazyListRow<T>>\n ref={listRef}\n className={block(null, className)}\n filterable={filterable}\n items={rows}\n itemHeight={getRowHeight}\n itemsHeight={(listRows) =>\n listRows.reduce((total, row) => total + getRowHeight(row), 0)\n }\n renderItem={(row, isActive, index) =>\n isSentinelRow(row) ? (\n <div\n ref={sentinelRef}\n className={block('sentinel', {loading: Boolean(loading)})}\n >\n {loading && (\n <Flex\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n height=\"100%\"\n >\n <Loader />\n </Flex>\n )}\n </div>\n ) : (\n renderItem(row, isActive, index)\n )\n }\n selectedItemIndex={selectedItemIndex as never}\n onItemClick={(row, index) => {\n if (!isSentinelRow(row)) {\n onItemClick?.(row, index);\n }\n }}\n />\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -48,6 +48,13 @@ var AllStatuses = exports.AllStatuses = {
|
|
|
48
48
|
status: "aborted",
|
|
49
49
|
startTime: fiveMinutesAgo,
|
|
50
50
|
endTime: now
|
|
51
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_QueryDuration.QueryDuration, {
|
|
52
|
+
status: "completed",
|
|
53
|
+
startTime: now - (27 * 60 + 15) * 60 * 1000,
|
|
54
|
+
endTime: now
|
|
55
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_QueryDuration.QueryDuration, {
|
|
56
|
+
status: "completed",
|
|
57
|
+
startTime: fiveMinutesAgo
|
|
51
58
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_QueryDuration.QueryDuration, {
|
|
52
59
|
status: "running",
|
|
53
60
|
startTime: fiveMinutesAgo
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_QueryDuration","_jsxRuntime","e","__esModule","default","now","Date","fiveMinutesAgo","oneHourAgo","meta","title","component","QueryDuration","tags","_default","exports","Default","args","status","startTime","AllStatuses","render","_jsxs","style","display","gap","flexWrap","alignItems","children","_jsx","endTime"],"sources":["QueryDuration.stories.tsx"],"sourcesContent":["import React from 'react';\nimport type {Meta, StoryObj} from '@storybook/react';\nimport {QueryDuration} from './QueryDuration';\n\nconst now = Date.now();\nconst fiveMinutesAgo = now - 5 * 60 * 1000;\nconst oneHourAgo = now - 60 * 60 * 1000;\n\nconst meta: Meta<typeof QueryDuration> = {\n title: 'Components/QueryDuration',\n component: QueryDuration,\n tags: ['autodocs'],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof QueryDuration>;\n\n/** Live timer: endTime not provided — counter ticks every second */\nexport const Default: Story = {\n args: {\n status: 'running',\n startTime: fiveMinutesAgo,\n },\n};\n\n/** All variants side by side: Running updates in real time, Draft is static */\nexport const AllStatuses: Story = {\n render: () => (\n <div style={{display: 'flex', gap: 8, flexWrap: 'wrap', alignItems: 'center'}}>\n {/* Static */}\n <QueryDuration status=\"completed\" startTime={fiveMinutesAgo} endTime={now} />\n <QueryDuration status=\"failed\" startTime={oneHourAgo} endTime={now} />\n <QueryDuration status=\"aborted\" startTime={fiveMinutesAgo} endTime={now} />\n {/* Live timer */}\n <QueryDuration status=\"running\" startTime={fiveMinutesAgo} />\n {/* Always --:-- */}\n <QueryDuration status=\"draft\" startTime={now} />\n </div>\n ),\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,cAAA,GAAAD,OAAA;AAA8C,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9C,IAAMG,GAAG,GAAGC,IAAI,CAACD,GAAG,CAAC,CAAC;AACtB,IAAME,cAAc,GAAGF,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;AAC1C,IAAMG,UAAU,GAAGH,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAEvC,IAAMI,IAAgC,GAAG;EACrCC,KAAK,EAAE,0BAA0B;EACjCC,SAAS,EAAEC,4BAAa;EACxBC,IAAI,EAAE,CAAC,UAAU;AACrB,CAAC;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAAX,OAAA,GAEcK,IAAI;AAGnB;AACO,IAAMO,OAAc,GAAAD,OAAA,CAAAC,OAAA,GAAG;EAC1BC,IAAI,EAAE;IACFC,MAAM,EAAE,SAAS;IACjBC,SAAS,EAAEZ;EACf;AACJ,CAAC;;AAED;AACO,IAAMa,WAAkB,GAAAL,OAAA,CAAAK,WAAA,GAAG;EAC9BC,MAAM,EAAE,SAARA,MAAMA,CAAA;IAAA,oBACF,IAAAC,gBAAA;MAAKC,KAAK,EAAE;QAACC,OAAO,EAAE,MAAM;QAAEC,GAAG,EAAE,CAAC;QAAEC,QAAQ,EAAE,MAAM;QAAEC,UAAU,EAAE;MAAQ,CAAE;MAAAC,QAAA,gBAE1E,IAAAC,eAAA,EAACjB,4BAAa;QAACM,MAAM,EAAC,WAAW;QAACC,SAAS,EAAEZ,cAAe;QAACuB,OAAO,EAAEzB;MAAI,CAAE,CAAC,eAC7E,IAAAwB,eAAA,EAACjB,4BAAa;QAACM,MAAM,EAAC,QAAQ;QAACC,SAAS,EAAEX,UAAW;QAACsB,OAAO,EAAEzB;MAAI,CAAE,CAAC,eACtE,IAAAwB,eAAA,EAACjB,4BAAa;QAACM,MAAM,EAAC,SAAS;QAACC,SAAS,EAAEZ,cAAe;QAACuB,OAAO,EAAEzB;MAAI,CAAE,CAAC,
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_QueryDuration","_jsxRuntime","e","__esModule","default","now","Date","fiveMinutesAgo","oneHourAgo","meta","title","component","QueryDuration","tags","_default","exports","Default","args","status","startTime","AllStatuses","render","_jsxs","style","display","gap","flexWrap","alignItems","children","_jsx","endTime"],"sources":["QueryDuration.stories.tsx"],"sourcesContent":["import React from 'react';\nimport type {Meta, StoryObj} from '@storybook/react';\nimport {QueryDuration} from './QueryDuration';\n\nconst now = Date.now();\nconst fiveMinutesAgo = now - 5 * 60 * 1000;\nconst oneHourAgo = now - 60 * 60 * 1000;\n\nconst meta: Meta<typeof QueryDuration> = {\n title: 'Components/QueryDuration',\n component: QueryDuration,\n tags: ['autodocs'],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof QueryDuration>;\n\n/** Live timer: endTime not provided — counter ticks every second */\nexport const Default: Story = {\n args: {\n status: 'running',\n startTime: fiveMinutesAgo,\n },\n};\n\n/** All variants side by side: Running updates in real time, Draft is static */\nexport const AllStatuses: Story = {\n render: () => (\n <div style={{display: 'flex', gap: 8, flexWrap: 'wrap', alignItems: 'center'}}>\n {/* Static */}\n <QueryDuration status=\"completed\" startTime={fiveMinutesAgo} endTime={now} />\n <QueryDuration status=\"failed\" startTime={oneHourAgo} endTime={now} />\n <QueryDuration status=\"aborted\" startTime={fiveMinutesAgo} endTime={now} />\n <QueryDuration\n status=\"completed\"\n startTime={now - (27 * 60 + 15) * 60 * 1000}\n endTime={now}\n />\n <QueryDuration status=\"completed\" startTime={fiveMinutesAgo} />\n {/* Live timer */}\n <QueryDuration status=\"running\" startTime={fiveMinutesAgo} />\n {/* Always --:-- */}\n <QueryDuration status=\"draft\" startTime={now} />\n </div>\n ),\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,cAAA,GAAAD,OAAA;AAA8C,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9C,IAAMG,GAAG,GAAGC,IAAI,CAACD,GAAG,CAAC,CAAC;AACtB,IAAME,cAAc,GAAGF,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;AAC1C,IAAMG,UAAU,GAAGH,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAEvC,IAAMI,IAAgC,GAAG;EACrCC,KAAK,EAAE,0BAA0B;EACjCC,SAAS,EAAEC,4BAAa;EACxBC,IAAI,EAAE,CAAC,UAAU;AACrB,CAAC;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAAX,OAAA,GAEcK,IAAI;AAGnB;AACO,IAAMO,OAAc,GAAAD,OAAA,CAAAC,OAAA,GAAG;EAC1BC,IAAI,EAAE;IACFC,MAAM,EAAE,SAAS;IACjBC,SAAS,EAAEZ;EACf;AACJ,CAAC;;AAED;AACO,IAAMa,WAAkB,GAAAL,OAAA,CAAAK,WAAA,GAAG;EAC9BC,MAAM,EAAE,SAARA,MAAMA,CAAA;IAAA,oBACF,IAAAC,gBAAA;MAAKC,KAAK,EAAE;QAACC,OAAO,EAAE,MAAM;QAAEC,GAAG,EAAE,CAAC;QAAEC,QAAQ,EAAE,MAAM;QAAEC,UAAU,EAAE;MAAQ,CAAE;MAAAC,QAAA,gBAE1E,IAAAC,eAAA,EAACjB,4BAAa;QAACM,MAAM,EAAC,WAAW;QAACC,SAAS,EAAEZ,cAAe;QAACuB,OAAO,EAAEzB;MAAI,CAAE,CAAC,eAC7E,IAAAwB,eAAA,EAACjB,4BAAa;QAACM,MAAM,EAAC,QAAQ;QAACC,SAAS,EAAEX,UAAW;QAACsB,OAAO,EAAEzB;MAAI,CAAE,CAAC,eACtE,IAAAwB,eAAA,EAACjB,4BAAa;QAACM,MAAM,EAAC,SAAS;QAACC,SAAS,EAAEZ,cAAe;QAACuB,OAAO,EAAEzB;MAAI,CAAE,CAAC,eAC3E,IAAAwB,eAAA,EAACjB,4BAAa;QACVM,MAAM,EAAC,WAAW;QAClBC,SAAS,EAAEd,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAK;QAC5CyB,OAAO,EAAEzB;MAAI,CAChB,CAAC,eACF,IAAAwB,eAAA,EAACjB,4BAAa;QAACM,MAAM,EAAC,WAAW;QAACC,SAAS,EAAEZ;MAAe,CAAE,CAAC,eAE/D,IAAAsB,eAAA,EAACjB,4BAAa;QAACM,MAAM,EAAC,SAAS;QAACC,SAAS,EAAEZ;MAAe,CAAE,CAAC,eAE7D,IAAAsB,eAAA,EAACjB,4BAAa;QAACM,MAAM,EAAC,OAAO;QAACC,SAAS,EAAEd;MAAI,CAAE,CAAC;IAAA,CAC/C,CAAC;EAAA;AAEd,CAAC","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { QueryStatus } from '../../types/history';
|
|
2
|
-
export declare const useQueryDuration: (state: QueryStatus, startTime?: string | number, endTime?: string | number) => string
|
|
2
|
+
export declare const useQueryDuration: (state: QueryStatus, startTime?: string | number, endTime?: string | number) => string;
|
|
@@ -6,35 +6,41 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.useQueryDuration = void 0;
|
|
7
7
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
8
8
|
require("core-js/modules/es.array.includes.js");
|
|
9
|
+
require("core-js/modules/es.date.now.js");
|
|
9
10
|
require("core-js/modules/es.string.includes.js");
|
|
10
11
|
require("core-js/modules/web.timers.js");
|
|
11
12
|
var _react = require("react");
|
|
12
13
|
var _query = require("../../constants/query");
|
|
13
14
|
var _time = require("../../helpers/time");
|
|
14
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
var calculateDuration = function calculateDuration(state, startTime, endTime) {
|
|
17
|
+
if (state === 'draft' || startTime === undefined) {
|
|
18
|
+
return '--:--';
|
|
19
|
+
}
|
|
20
|
+
if (_query.CompletedQueryStates.includes(state)) {
|
|
21
|
+
return endTime === undefined ? '--:--' : (0, _time.durationDates)(startTime, endTime);
|
|
22
|
+
}
|
|
23
|
+
return (0, _time.durationDates)(startTime, endTime !== null && endTime !== void 0 ? endTime : Date.now());
|
|
24
|
+
};
|
|
15
25
|
var useQueryDuration = exports.useQueryDuration = function useQueryDuration(state, startTime, endTime) {
|
|
16
|
-
var _useState = (0, _react.useState)((
|
|
26
|
+
var _useState = (0, _react.useState)(function () {
|
|
27
|
+
return calculateDuration(state, startTime, endTime);
|
|
28
|
+
}),
|
|
17
29
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
18
30
|
duration = _useState2[0],
|
|
19
31
|
setDuration = _useState2[1];
|
|
20
32
|
(0, _react.useEffect)(function () {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
setDuration((0, _time.durationDates)(startTime, endTime));
|
|
30
|
-
if (endTime) {
|
|
31
|
-
return;
|
|
33
|
+
setDuration(calculateDuration(state, startTime, endTime));
|
|
34
|
+
var timer;
|
|
35
|
+
if (!(state === 'draft' || startTime === undefined || _query.CompletedQueryStates.includes(state) || endTime !== undefined)) {
|
|
36
|
+
timer = setInterval(function () {
|
|
37
|
+
return setDuration((0, _time.durationDates)(startTime, Date.now()));
|
|
38
|
+
}, 1000);
|
|
32
39
|
}
|
|
33
|
-
var timer = setInterval(function () {
|
|
34
|
-
return setDuration((0, _time.durationDates)(startTime, endTime));
|
|
35
|
-
}, 1000);
|
|
36
40
|
return function () {
|
|
37
|
-
|
|
41
|
+
if (timer !== undefined) {
|
|
42
|
+
clearInterval(timer);
|
|
43
|
+
}
|
|
38
44
|
};
|
|
39
45
|
}, [state, startTime, endTime]);
|
|
40
46
|
return duration;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_query","_time","_interopRequireDefault","e","__esModule","default","
|
|
1
|
+
{"version":3,"names":["_react","require","_query","_time","_interopRequireDefault","e","__esModule","default","calculateDuration","state","startTime","endTime","undefined","CompletedQueryStates","includes","durationDates","Date","now","useQueryDuration","exports","_useState","useState","_useState2","_slicedToArray","duration","setDuration","useEffect","timer","setInterval","clearInterval"],"sources":["useQueryDuration.ts"],"sourcesContent":["import {useEffect, useState} from 'react';\nimport {QueryStatus} from '../../types/history';\nimport {CompletedQueryStates} from '../../constants/query';\nimport {durationDates} from '../../helpers/time';\n\nconst calculateDuration = (\n state: QueryStatus,\n startTime?: string | number,\n endTime?: string | number,\n) => {\n if (state === 'draft' || startTime === undefined) {\n return '--:--';\n }\n\n if (CompletedQueryStates.includes(state)) {\n return endTime === undefined ? '--:--' : durationDates(startTime, endTime);\n }\n\n return durationDates(startTime, endTime ?? Date.now());\n};\n\nexport const useQueryDuration = (\n state: QueryStatus,\n startTime?: string | number,\n endTime?: string | number,\n) => {\n const [duration, setDuration] = useState(() => calculateDuration(state, startTime, endTime));\n\n useEffect(() => {\n setDuration(calculateDuration(state, startTime, endTime));\n\n let timer: ReturnType<typeof setInterval> | undefined;\n\n if (!(\n state === 'draft' ||\n startTime === undefined ||\n CompletedQueryStates.includes(state) ||\n endTime !== undefined\n )) {\n timer = setInterval(() => setDuration(durationDates(startTime, Date.now())), 1000);\n }\n\n return () => {\n if (timer !== undefined) {\n clearInterval(timer);\n }\n };\n }, [state, startTime, endTime]);\n\n return duration;\n};\n"],"mappings":";;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AAAqB,SAAAG,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAErB,IAAMG,iBAAiB,GAAG,SAApBA,iBAAiBA,CACnBC,KAAkB,EAClBC,SAA2B,EAC3BC,OAAyB,EACxB;EACD,IAAIF,KAAK,KAAK,OAAO,IAAIC,SAAS,KAAKE,SAAS,EAAE;IAC9C,OAAO,OAAO;EAClB;EAEA,IAAIC,2BAAoB,CAACC,QAAQ,CAACL,KAAK,CAAC,EAAE;IACtC,OAAOE,OAAO,KAAKC,SAAS,GAAG,OAAO,GAAG,IAAAG,mBAAa,EAACL,SAAS,EAAEC,OAAO,CAAC;EAC9E;EAEA,OAAO,IAAAI,mBAAa,EAACL,SAAS,EAAEC,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAIK,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC;AAEM,IAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG,SAAnBA,gBAAgBA,CACzBT,KAAkB,EAClBC,SAA2B,EAC3BC,OAAyB,EACxB;EACD,IAAAS,SAAA,GAAgC,IAAAC,eAAQ,EAAC;MAAA,OAAMb,iBAAiB,CAACC,KAAK,EAAEC,SAAS,EAAEC,OAAO,CAAC;IAAA,EAAC;IAAAW,UAAA,OAAAC,uBAAA,EAAAH,SAAA;IAArFI,QAAQ,GAAAF,UAAA;IAAEG,WAAW,GAAAH,UAAA;EAE5B,IAAAI,gBAAS,EAAC,YAAM;IACZD,WAAW,CAACjB,iBAAiB,CAACC,KAAK,EAAEC,SAAS,EAAEC,OAAO,CAAC,CAAC;IAEzD,IAAIgB,KAAiD;IAErD,IAAI,EACAlB,KAAK,KAAK,OAAO,IACjBC,SAAS,KAAKE,SAAS,IACvBC,2BAAoB,CAACC,QAAQ,CAACL,KAAK,CAAC,IACpCE,OAAO,KAAKC,SAAS,CACxB,EAAE;MACCe,KAAK,GAAGC,WAAW,CAAC;QAAA,OAAMH,WAAW,CAAC,IAAAV,mBAAa,EAACL,SAAS,EAAEM,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,CAAC;MAAA,GAAE,IAAI,CAAC;IACtF;IAEA,OAAO,YAAM;MACT,IAAIU,KAAK,KAAKf,SAAS,EAAE;QACrBiB,aAAa,CAACF,KAAK,CAAC;MACxB;IACJ,CAAC;EACL,CAAC,EAAE,CAAClB,KAAK,EAAEC,SAAS,EAAEC,OAAO,CAAC,CAAC;EAE/B,OAAOa,QAAQ;AACnB,CAAC","ignoreList":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { FC
|
|
1
|
+
import React, { FC } from 'react';
|
|
2
|
+
import { QueryListLinkRenderer } from '../../types/queryList';
|
|
2
3
|
import './RowLink.scss';
|
|
3
|
-
export type RowLinkProps = {
|
|
4
|
+
export type RowLinkProps = Omit<React.ComponentPropsWithoutRef<'a'>, 'href'> & {
|
|
4
5
|
href?: string;
|
|
5
6
|
disabled?: boolean;
|
|
6
|
-
|
|
7
|
-
children: ReactNode;
|
|
7
|
+
renderLink?: QueryListLinkRenderer;
|
|
8
8
|
};
|
|
9
9
|
export declare const RowLink: FC<RowLinkProps>;
|
|
@@ -4,23 +4,34 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.RowLink = void 0;
|
|
7
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
8
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
7
9
|
var _react = _interopRequireDefault(require("react"));
|
|
8
10
|
var _bemCnLite = _interopRequireDefault(require("bem-cn-lite"));
|
|
9
11
|
require("./RowLink.css");
|
|
10
12
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
13
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
var _excluded = ["href", "disabled", "renderLink", "className", "children"];
|
|
12
15
|
var block = (0, _bemCnLite.default)('qp-row-link');
|
|
13
16
|
var RowLink = exports.RowLink = function RowLink(_ref) {
|
|
14
17
|
var href = _ref.href,
|
|
15
18
|
disabled = _ref.disabled,
|
|
19
|
+
renderLink = _ref.renderLink,
|
|
16
20
|
className = _ref.className,
|
|
17
|
-
children = _ref.children
|
|
21
|
+
children = _ref.children,
|
|
22
|
+
linkProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
18
23
|
var isLink = Boolean(href) && !disabled;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
24
|
+
if (!isLink) {
|
|
25
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
26
|
+
className: block(null, className),
|
|
27
|
+
children: children
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
var props = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, linkProps), {}, {
|
|
31
|
+
href: href,
|
|
22
32
|
className: block(null, className),
|
|
23
33
|
children: children
|
|
24
34
|
});
|
|
35
|
+
return renderLink ? renderLink(props) : /*#__PURE__*/(0, _jsxRuntime.jsx)("a", (0, _objectSpread2.default)({}, props));
|
|
25
36
|
};
|
|
26
37
|
// #sourceMappingURL=RowLink.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_bemCnLite","_jsxRuntime","e","__esModule","default","block","cn","RowLink","exports","_ref","href","disabled","className","children","isLink","Boolean","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_bemCnLite","_jsxRuntime","e","__esModule","default","block","cn","RowLink","exports","_ref","href","disabled","renderLink","className","children","linkProps","_objectWithoutProperties","_excluded","isLink","Boolean","_jsx","props","_objectSpread"],"sources":["RowLink.tsx"],"sourcesContent":["import React, {FC} from 'react';\nimport cn from 'bem-cn-lite';\nimport {QueryListLinkRenderer} from '../../types/queryList';\nimport './RowLink.scss';\n\nconst block = cn('qp-row-link');\n\nexport type RowLinkProps = Omit<React.ComponentPropsWithoutRef<'a'>, 'href'> & {\n href?: string;\n disabled?: boolean;\n renderLink?: QueryListLinkRenderer;\n};\n\nexport const RowLink: FC<RowLinkProps> = ({\n href,\n disabled,\n renderLink,\n className,\n children,\n ...linkProps\n}) => {\n const isLink = Boolean(href) && !disabled;\n\n if (!isLink) {\n return <div className={block(null, className)}>{children}</div>;\n }\n\n const props: React.ComponentPropsWithoutRef<'a'> = {\n ...linkProps,\n href,\n className: block(null, className),\n children,\n };\n\n return renderLink ? renderLink(props) : <a {...props} />;\n};\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEAA,OAAA;AAAwB,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;;AAExB,IAAMG,KAAK,GAAG,IAAAC,kBAAE,EAAC,aAAa,CAAC;AAQxB,IAAMC,OAAyB,GAAAC,OAAA,CAAAD,OAAA,GAAG,SAA5BA,OAAyBA,CAAAE,IAAA,EAOhC;EAAA,IANFC,IAAI,GAAAD,IAAA,CAAJC,IAAI;IACJC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;IACRC,UAAU,GAAAH,IAAA,CAAVG,UAAU;IACVC,SAAS,GAAAJ,IAAA,CAATI,SAAS;IACTC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;IACLC,SAAS,OAAAC,iCAAA,EAAAP,IAAA,EAAAQ,SAAA;EAEZ,IAAMC,MAAM,GAAGC,OAAO,CAACT,IAAI,CAAC,IAAI,CAACC,QAAQ;EAEzC,IAAI,CAACO,MAAM,EAAE;IACT,oBAAO,IAAAE,eAAA;MAAKP,SAAS,EAAER,KAAK,CAAC,IAAI,EAAEQ,SAAS,CAAE;MAAAC,QAAA,EAAEA;IAAQ,CAAM,CAAC;EACnE;EAEA,IAAMO,KAA0C,OAAAC,sBAAA,MAAAA,sBAAA,MACzCP,SAAS;IACZL,IAAI,EAAJA,IAAI;IACJG,SAAS,EAAER,KAAK,CAAC,IAAI,EAAEQ,SAAS,CAAC;IACjCC,QAAQ,EAARA;EAAQ,EACX;EAED,OAAOF,UAAU,GAAGA,UAAU,CAACS,KAAK,CAAC,gBAAG,IAAAD,eAAA,WAAAE,sBAAA,MAAOD,KAAK,CAAG,CAAC;AAC5D,CAAC","ignoreList":[]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FC, ReactNode } from 'react';
|
|
2
|
+
import { QueryListLinkRenderer } from '../../types/queryList';
|
|
2
3
|
import './SearchRowLayout.scss';
|
|
3
4
|
export type SearchRowLayoutProps = {
|
|
4
5
|
header: ReactNode;
|
|
@@ -6,6 +7,7 @@ export type SearchRowLayoutProps = {
|
|
|
6
7
|
language: string;
|
|
7
8
|
href?: string;
|
|
8
9
|
disabled?: boolean;
|
|
10
|
+
renderLink?: QueryListLinkRenderer;
|
|
9
11
|
className?: string;
|
|
10
12
|
};
|
|
11
13
|
export declare const SearchRowLayout: FC<SearchRowLayoutProps>;
|
|
@@ -21,10 +21,12 @@ var SearchRowLayout = exports.SearchRowLayout = function SearchRowLayout(_ref) {
|
|
|
21
21
|
language = _ref.language,
|
|
22
22
|
href = _ref.href,
|
|
23
23
|
disabled = _ref.disabled,
|
|
24
|
+
renderLink = _ref.renderLink,
|
|
24
25
|
className = _ref.className;
|
|
25
26
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_RowLink.RowLink, {
|
|
26
27
|
href: href,
|
|
27
28
|
disabled: disabled,
|
|
29
|
+
renderLink: renderLink,
|
|
28
30
|
className: block(null, className),
|
|
29
31
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_uikit.Flex, {
|
|
30
32
|
direction: "column",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_uikit","_bemCnLite","_MonacoEditor","_RowLink","_fitQueryToVisibleLines","_monacoConfig","_jsxRuntime","e","__esModule","default","block","cn","SearchRowLayout","exports","_ref","header","query","language","href","disabled","className","_jsx","RowLink","children","_jsxs","Flex","direction","gap","alignItems","MonacoEditor","value","fitQueryToVisibleLines","readOnly","monacoConfig","MONACO_CONFIG"],"sources":["SearchRowLayout.tsx"],"sourcesContent":["import React, {FC, ReactNode} from 'react';\nimport {Flex} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport {MonacoEditor} from '../MonacoEditor';\nimport {RowLink} from '../RowLink';\nimport {fitQueryToVisibleLines} from './helpers/fitQueryToVisibleLines';\nimport {MONACO_CONFIG} from './helpers/monacoConfig';\nimport './SearchRowLayout.scss';\n\nconst block = cn('qp-search-row-layout');\n\nexport type SearchRowLayoutProps = {\n header: ReactNode;\n query?: string;\n language: string;\n href?: string;\n disabled?: boolean;\n className?: string;\n};\n\nexport const SearchRowLayout: FC<SearchRowLayoutProps> = ({\n header,\n query,\n language,\n href,\n disabled,\n className,\n}) => {\n return (\n <RowLink
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_uikit","_bemCnLite","_MonacoEditor","_RowLink","_fitQueryToVisibleLines","_monacoConfig","_jsxRuntime","e","__esModule","default","block","cn","SearchRowLayout","exports","_ref","header","query","language","href","disabled","renderLink","className","_jsx","RowLink","children","_jsxs","Flex","direction","gap","alignItems","MonacoEditor","value","fitQueryToVisibleLines","readOnly","monacoConfig","MONACO_CONFIG"],"sources":["SearchRowLayout.tsx"],"sourcesContent":["import React, {FC, ReactNode} from 'react';\nimport {Flex} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport {MonacoEditor} from '../MonacoEditor';\nimport {RowLink} from '../RowLink';\nimport {QueryListLinkRenderer} from '../../types/queryList';\nimport {fitQueryToVisibleLines} from './helpers/fitQueryToVisibleLines';\nimport {MONACO_CONFIG} from './helpers/monacoConfig';\nimport './SearchRowLayout.scss';\n\nconst block = cn('qp-search-row-layout');\n\nexport type SearchRowLayoutProps = {\n header: ReactNode;\n query?: string;\n language: string;\n href?: string;\n disabled?: boolean;\n renderLink?: QueryListLinkRenderer;\n className?: string;\n};\n\nexport const SearchRowLayout: FC<SearchRowLayoutProps> = ({\n header,\n query,\n language,\n href,\n disabled,\n renderLink,\n className,\n}) => {\n return (\n <RowLink\n href={href}\n disabled={disabled}\n renderLink={renderLink}\n className={block(null, className)}\n >\n <Flex direction=\"column\" gap={2} className={block('content')}>\n <Flex gap={2} alignItems=\"center\">\n {header}\n </Flex>\n <MonacoEditor\n value={fitQueryToVisibleLines(query)}\n language={language}\n readOnly\n monacoConfig={MONACO_CONFIG}\n className={block('monaco')}\n />\n </Flex>\n </RowLink>\n );\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AAEA,IAAAK,uBAAA,GAAAL,OAAA;AACA,IAAAM,aAAA,GAAAN,OAAA;AACAA,OAAA;AAAgC,IAAAO,WAAA,GAAAP,OAAA;AAAA,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEhC,IAAMG,KAAK,GAAG,IAAAC,kBAAE,EAAC,sBAAsB,CAAC;AAYjC,IAAMC,eAAyC,GAAAC,OAAA,CAAAD,eAAA,GAAG,SAA5CA,eAAyCA,CAAAE,IAAA,EAQhD;EAAA,IAPFC,MAAM,GAAAD,IAAA,CAANC,MAAM;IACNC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACLC,QAAQ,GAAAH,IAAA,CAARG,QAAQ;IACRC,IAAI,GAAAJ,IAAA,CAAJI,IAAI;IACJC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;IACRC,UAAU,GAAAN,IAAA,CAAVM,UAAU;IACVC,SAAS,GAAAP,IAAA,CAATO,SAAS;EAET,oBACI,IAAAC,eAAA,EAACC,gBAAO;IACJL,IAAI,EAAEA,IAAK;IACXC,QAAQ,EAAEA,QAAS;IACnBC,UAAU,EAAEA,UAAW;IACvBC,SAAS,EAAEX,KAAK,CAAC,IAAI,EAAEW,SAAS,CAAE;IAAAG,QAAA,eAElC,IAAAC,gBAAA,EAACC,WAAI;MAACC,SAAS,EAAC,QAAQ;MAACC,GAAG,EAAE,CAAE;MAACP,SAAS,EAAEX,KAAK,CAAC,SAAS,CAAE;MAAAc,QAAA,gBACzD,IAAAF,eAAA,EAACI,WAAI;QAACE,GAAG,EAAE,CAAE;QAACC,UAAU,EAAC,QAAQ;QAAAL,QAAA,EAC5BT;MAAM,CACL,CAAC,eACP,IAAAO,eAAA,EAACQ,0BAAY;QACTC,KAAK,EAAE,IAAAC,8CAAsB,EAAChB,KAAK,CAAE;QACrCC,QAAQ,EAAEA,QAAS;QACnBgB,QAAQ;QACRC,YAAY,EAAEC,2BAAc;QAC5Bd,SAAS,EAAEX,KAAK,CAAC,QAAQ;MAAE,CAC9B,CAAC;IAAA,CACA;EAAC,CACF,CAAC;AAElB,CAAC","ignoreList":[]}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { QueryListItem, QueryListRow, QueryListRowVariant } from '../types/queryList';
|
|
2
|
+
export declare const getListItemKey: <T extends QueryListRow>(item: QueryListItem<T>) => string;
|
|
2
3
|
export declare const getListKey: <T extends QueryListRow>(items: QueryListItem<T>[], variant: QueryListRowVariant) => string;
|
|
@@ -3,17 +3,18 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getListKey = void 0;
|
|
6
|
+
exports.getListKey = exports.getListItemKey = void 0;
|
|
7
7
|
require("core-js/modules/es.array.concat.js");
|
|
8
8
|
require("core-js/modules/es.array.join.js");
|
|
9
9
|
require("core-js/modules/es.array.map.js");
|
|
10
10
|
require("core-js/modules/es.iterator.constructor.js");
|
|
11
11
|
require("core-js/modules/es.iterator.map.js");
|
|
12
12
|
require("core-js/modules/es.object.to-string.js");
|
|
13
|
+
var getListItemKey = exports.getListItemKey = function getListItemKey(item) {
|
|
14
|
+
return 'header' in item ? "h:".concat(item.header) : "r:".concat(item.id);
|
|
15
|
+
};
|
|
13
16
|
var getListKey = exports.getListKey = function getListKey(items, variant) {
|
|
14
|
-
var itemsKey = items.map(
|
|
15
|
-
return 'header' in item ? "h:".concat(item.header) : "r:".concat(item.id);
|
|
16
|
-
}).join(',');
|
|
17
|
+
var itemsKey = items.map(getListItemKey).join(',');
|
|
17
18
|
return "".concat(variant, ":").concat(itemsKey);
|
|
18
19
|
};
|
|
19
20
|
// #sourceMappingURL=getListKey.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["getListItemKey","exports","item","concat","header","id","getListKey","items","variant","itemsKey","map","join"],"sources":["getListKey.ts"],"sourcesContent":["import {QueryListItem, QueryListRow, QueryListRowVariant} from '../types/queryList';\n\nexport const getListItemKey = <T extends QueryListRow>(item: QueryListItem<T>): string =>\n 'header' in item ? `h:${item.header}` : `r:${item.id}`;\n\nexport const getListKey = <T extends QueryListRow>(\n items: QueryListItem<T>[],\n variant: QueryListRowVariant,\n): string => {\n const itemsKey = items.map(getListItemKey).join(',');\n\n return `${variant}:${itemsKey}`;\n};\n"],"mappings":";;;;;;;;;;;;AAEO,IAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,SAAjBA,cAAcA,CAA4BE,IAAsB;EAAA,OACzE,QAAQ,IAAIA,IAAI,QAAAC,MAAA,CAAQD,IAAI,CAACE,MAAM,SAAAD,MAAA,CAAUD,IAAI,CAACG,EAAE,CAAE;AAAA;AAEnD,IAAMC,UAAU,GAAAL,OAAA,CAAAK,UAAA,GAAG,SAAbA,UAAUA,CACnBC,KAAyB,EACzBC,OAA4B,EACnB;EACT,IAAMC,QAAQ,GAAGF,KAAK,CAACG,GAAG,CAACV,cAAc,CAAC,CAACW,IAAI,CAAC,GAAG,CAAC;EAEpD,UAAAR,MAAA,CAAUK,OAAO,OAAAL,MAAA,CAAIM,QAAQ;AACjC,CAAC","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DateTime } from '@gravity-ui/date-utils';
|
|
2
2
|
type Date = DateTime | string | number | undefined;
|
|
3
3
|
export declare const formatTime: (date: Date) => string | undefined;
|
|
4
|
-
export declare const durationDates: (date1: Date, date2: Date) => string
|
|
4
|
+
export declare const durationDates: (date1: Date, date2: Date) => string;
|
|
5
5
|
export declare const formatTimeCanonical: (ts: Date) => string | undefined;
|
|
6
6
|
export declare const formatDateCanonical: (ts: Date) => string | undefined;
|
|
7
7
|
export declare const getTimestampFromDate: (date: Date) => number | undefined;
|
|
@@ -4,29 +4,34 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getTimestampFromDate = exports.formatTimeCanonical = exports.formatTime = exports.formatDateCanonical = exports.durationDates = void 0;
|
|
7
|
+
require("core-js/modules/es.array.concat.js");
|
|
8
|
+
require("core-js/modules/es.string.pad-start.js");
|
|
7
9
|
var _dateUtils = require("@gravity-ui/date-utils");
|
|
8
10
|
var formatTime = exports.formatTime = function formatTime(date) {
|
|
9
11
|
var _dateTimeParse;
|
|
10
12
|
return (_dateTimeParse = (0, _dateUtils.dateTimeParse)(date)) === null || _dateTimeParse === void 0 ? void 0 : _dateTimeParse.format('HH:mm');
|
|
11
13
|
};
|
|
12
14
|
var durationDates = exports.durationDates = function durationDates(date1, date2) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var
|
|
16
|
-
|
|
17
|
-
var
|
|
18
|
-
|
|
15
|
+
if (date1 === undefined || date2 === undefined) return '--:--';
|
|
16
|
+
var start = (0, _dateUtils.dateTimeParse)(date1);
|
|
17
|
+
var end = (0, _dateUtils.dateTimeParse)(date2);
|
|
18
|
+
if (!start || !end) return '--:--';
|
|
19
|
+
var diffMs = Math.max(0, end.valueOf() - start.valueOf());
|
|
20
|
+
var totalMinutes = Math.floor(diffMs / 60000);
|
|
21
|
+
var hours = Math.floor(totalMinutes / 60);
|
|
22
|
+
var minutes = totalMinutes % 60;
|
|
23
|
+
return "".concat(String(hours).padStart(2, '0'), ":").concat(String(minutes).padStart(2, '0'));
|
|
19
24
|
};
|
|
20
25
|
var formatTimeCanonical = exports.formatTimeCanonical = function formatTimeCanonical(ts) {
|
|
21
|
-
var
|
|
22
|
-
return (
|
|
26
|
+
var _dateTimeParse2;
|
|
27
|
+
return (_dateTimeParse2 = (0, _dateUtils.dateTimeParse)(ts)) === null || _dateTimeParse2 === void 0 ? void 0 : _dateTimeParse2.format('DD.MM.YYYY, HH:mm');
|
|
23
28
|
};
|
|
24
29
|
var formatDateCanonical = exports.formatDateCanonical = function formatDateCanonical(ts) {
|
|
25
|
-
var
|
|
26
|
-
return (
|
|
30
|
+
var _dateTimeParse3;
|
|
31
|
+
return (_dateTimeParse3 = (0, _dateUtils.dateTimeParse)(ts)) === null || _dateTimeParse3 === void 0 ? void 0 : _dateTimeParse3.format('DD.MM.YYYY');
|
|
27
32
|
};
|
|
28
33
|
var getTimestampFromDate = exports.getTimestampFromDate = function getTimestampFromDate(date) {
|
|
29
|
-
var
|
|
30
|
-
return (
|
|
34
|
+
var _dateTimeParse4;
|
|
35
|
+
return (_dateTimeParse4 = (0, _dateUtils.dateTimeParse)(date)) === null || _dateTimeParse4 === void 0 ? void 0 : _dateTimeParse4.valueOf();
|
|
31
36
|
};
|
|
32
37
|
// #sourceMappingURL=time.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_dateUtils","require","formatTime","exports","date","_dateTimeParse","dateTimeParse","format","durationDates","date1","date2","
|
|
1
|
+
{"version":3,"names":["_dateUtils","require","formatTime","exports","date","_dateTimeParse","dateTimeParse","format","durationDates","date1","date2","undefined","start","end","diffMs","Math","max","valueOf","totalMinutes","floor","hours","minutes","concat","String","padStart","formatTimeCanonical","ts","_dateTimeParse2","formatDateCanonical","_dateTimeParse3","getTimestampFromDate","_dateTimeParse4"],"sources":["time.ts"],"sourcesContent":["import {DateTime, dateTimeParse} from '@gravity-ui/date-utils';\n\ntype Date = DateTime | string | number | undefined;\n\nexport const formatTime = (date: Date) => {\n return dateTimeParse(date)?.format('HH:mm');\n};\n\nexport const durationDates = (date1: Date, date2: Date) => {\n if (date1 === undefined || date2 === undefined) return '--:--';\n\n const start = dateTimeParse(date1);\n const end = dateTimeParse(date2);\n\n if (!start || !end) return '--:--';\n\n const diffMs = Math.max(0, end.valueOf() - start.valueOf());\n const totalMinutes = Math.floor(diffMs / 60_000);\n const hours = Math.floor(totalMinutes / 60);\n const minutes = totalMinutes % 60;\n\n return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`;\n};\n\nexport const formatTimeCanonical = (ts: Date) => {\n return dateTimeParse(ts)?.format('DD.MM.YYYY, HH:mm');\n};\n\nexport const formatDateCanonical = (ts: Date) => {\n return dateTimeParse(ts)?.format('DD.MM.YYYY');\n};\n\nexport const getTimestampFromDate = (date: Date) => {\n return dateTimeParse(date)?.valueOf();\n};\n"],"mappings":";;;;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAIO,IAAMC,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG,SAAbA,UAAUA,CAAIE,IAAU,EAAK;EAAA,IAAAC,cAAA;EACtC,QAAAA,cAAA,GAAO,IAAAC,wBAAa,EAACF,IAAI,CAAC,cAAAC,cAAA,uBAAnBA,cAAA,CAAqBE,MAAM,CAAC,OAAO,CAAC;AAC/C,CAAC;AAEM,IAAMC,aAAa,GAAAL,OAAA,CAAAK,aAAA,GAAG,SAAhBA,aAAaA,CAAIC,KAAW,EAAEC,KAAW,EAAK;EACvD,IAAID,KAAK,KAAKE,SAAS,IAAID,KAAK,KAAKC,SAAS,EAAE,OAAO,OAAO;EAE9D,IAAMC,KAAK,GAAG,IAAAN,wBAAa,EAACG,KAAK,CAAC;EAClC,IAAMI,GAAG,GAAG,IAAAP,wBAAa,EAACI,KAAK,CAAC;EAEhC,IAAI,CAACE,KAAK,IAAI,CAACC,GAAG,EAAE,OAAO,OAAO;EAElC,IAAMC,MAAM,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEH,GAAG,CAACI,OAAO,CAAC,CAAC,GAAGL,KAAK,CAACK,OAAO,CAAC,CAAC,CAAC;EAC3D,IAAMC,YAAY,GAAGH,IAAI,CAACI,KAAK,CAACL,MAAM,GAAG,KAAM,CAAC;EAChD,IAAMM,KAAK,GAAGL,IAAI,CAACI,KAAK,CAACD,YAAY,GAAG,EAAE,CAAC;EAC3C,IAAMG,OAAO,GAAGH,YAAY,GAAG,EAAE;EAEjC,UAAAI,MAAA,CAAUC,MAAM,CAACH,KAAK,CAAC,CAACI,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,OAAAF,MAAA,CAAIC,MAAM,CAACF,OAAO,CAAC,CAACG,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAChF,CAAC;AAEM,IAAMC,mBAAmB,GAAAtB,OAAA,CAAAsB,mBAAA,GAAG,SAAtBA,mBAAmBA,CAAIC,EAAQ,EAAK;EAAA,IAAAC,eAAA;EAC7C,QAAAA,eAAA,GAAO,IAAArB,wBAAa,EAACoB,EAAE,CAAC,cAAAC,eAAA,uBAAjBA,eAAA,CAAmBpB,MAAM,CAAC,mBAAmB,CAAC;AACzD,CAAC;AAEM,IAAMqB,mBAAmB,GAAAzB,OAAA,CAAAyB,mBAAA,GAAG,SAAtBA,mBAAmBA,CAAIF,EAAQ,EAAK;EAAA,IAAAG,eAAA;EAC7C,QAAAA,eAAA,GAAO,IAAAvB,wBAAa,EAACoB,EAAE,CAAC,cAAAG,eAAA,uBAAjBA,eAAA,CAAmBtB,MAAM,CAAC,YAAY,CAAC;AAClD,CAAC;AAEM,IAAMuB,oBAAoB,GAAA3B,OAAA,CAAA2B,oBAAA,GAAG,SAAvBA,oBAAoBA,CAAI1B,IAAU,EAAK;EAAA,IAAA2B,eAAA;EAChD,QAAAA,eAAA,GAAO,IAAAzB,wBAAa,EAACF,IAAI,CAAC,cAAA2B,eAAA,uBAAnBA,eAAA,CAAqBd,OAAO,CAAC,CAAC;AACzC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useListKey = void 0;
|
|
7
|
+
require("core-js/modules/es.array.every.js");
|
|
8
|
+
require("core-js/modules/es.array.map.js");
|
|
9
|
+
require("core-js/modules/es.iterator.constructor.js");
|
|
10
|
+
require("core-js/modules/es.iterator.every.js");
|
|
11
|
+
require("core-js/modules/es.iterator.map.js");
|
|
12
|
+
require("core-js/modules/es.object.to-string.js");
|
|
13
|
+
var _react = require("react");
|
|
14
|
+
var _getListKey = require("./getListKey");
|
|
15
|
+
var useListKey = exports.useListKey = function useListKey(items, rowVariant, paginationEnabled) {
|
|
16
|
+
var itemKeys = items.map(_getListKey.getListItemKey);
|
|
17
|
+
var currentKey = (0, _getListKey.getListKey)(items, rowVariant);
|
|
18
|
+
var stateRef = (0, _react.useRef)(undefined);
|
|
19
|
+
var previousState = stateRef.current;
|
|
20
|
+
var isAppend = (previousState === null || previousState === void 0 ? void 0 : previousState.paginationEnabled) && previousState.rowVariant === rowVariant && previousState.itemKeys.length <= itemKeys.length && previousState.itemKeys.every(function (key, index) {
|
|
21
|
+
return key === itemKeys[index];
|
|
22
|
+
});
|
|
23
|
+
var key = paginationEnabled && isAppend ? previousState.key : currentKey;
|
|
24
|
+
stateRef.current = {
|
|
25
|
+
key: key,
|
|
26
|
+
itemKeys: itemKeys,
|
|
27
|
+
rowVariant: rowVariant,
|
|
28
|
+
paginationEnabled: paginationEnabled
|
|
29
|
+
};
|
|
30
|
+
return key;
|
|
31
|
+
};
|
|
32
|
+
// #sourceMappingURL=useListKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_getListKey","useListKey","exports","items","rowVariant","paginationEnabled","itemKeys","map","getListItemKey","currentKey","getListKey","stateRef","useRef","undefined","previousState","current","isAppend","length","every","key","index"],"sources":["useListKey.ts"],"sourcesContent":["import {useRef} from 'react';\nimport {getListItemKey, getListKey} from './getListKey';\nimport {QueryListItem, QueryListRow, QueryListRowVariant} from '../types/queryList';\n\ntype ListKeyState = {\n key: string;\n itemKeys: string[];\n rowVariant: QueryListRowVariant;\n paginationEnabled: boolean;\n};\n\nexport const useListKey = <T extends QueryListRow>(\n items: QueryListItem<T>[],\n rowVariant: QueryListRowVariant,\n paginationEnabled: boolean,\n) => {\n const itemKeys = items.map(getListItemKey);\n const currentKey = getListKey(items, rowVariant);\n const stateRef = useRef<ListKeyState | undefined>(undefined);\n const previousState = stateRef.current;\n const isAppend =\n previousState?.paginationEnabled &&\n previousState.rowVariant === rowVariant &&\n previousState.itemKeys.length <= itemKeys.length &&\n previousState.itemKeys.every((key, index) => key === itemKeys[index]);\n const key = paginationEnabled && isAppend ? previousState.key : currentKey;\n\n stateRef.current = {key, itemKeys, rowVariant, paginationEnabled};\n\n return key;\n};\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAUO,IAAME,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG,SAAbA,UAAUA,CACnBE,KAAyB,EACzBC,UAA+B,EAC/BC,iBAA0B,EACzB;EACD,IAAMC,QAAQ,GAAGH,KAAK,CAACI,GAAG,CAACC,0BAAc,CAAC;EAC1C,IAAMC,UAAU,GAAG,IAAAC,sBAAU,EAACP,KAAK,EAAEC,UAAU,CAAC;EAChD,IAAMO,QAAQ,GAAG,IAAAC,aAAM,EAA2BC,SAAS,CAAC;EAC5D,IAAMC,aAAa,GAAGH,QAAQ,CAACI,OAAO;EACtC,IAAMC,QAAQ,GACV,CAAAF,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAET,iBAAiB,KAChCS,aAAa,CAACV,UAAU,KAAKA,UAAU,IACvCU,aAAa,CAACR,QAAQ,CAACW,MAAM,IAAIX,QAAQ,CAACW,MAAM,IAChDH,aAAa,CAACR,QAAQ,CAACY,KAAK,CAAC,UAACC,GAAG,EAAEC,KAAK;IAAA,OAAKD,GAAG,KAAKb,QAAQ,CAACc,KAAK,CAAC;EAAA,EAAC;EACzE,IAAMD,GAAG,GAAGd,iBAAiB,IAAIW,QAAQ,GAAGF,aAAa,CAACK,GAAG,GAAGV,UAAU;EAE1EE,QAAQ,CAACI,OAAO,GAAG;IAACI,GAAG,EAAHA,GAAG;IAAEb,QAAQ,EAARA,QAAQ;IAAEF,UAAU,EAAVA,UAAU;IAAEC,iBAAiB,EAAjBA;EAAiB,CAAC;EAEjE,OAAOc,GAAG;AACd,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function useLoadMoreSentinel(hasMore: boolean | undefined, onLoadMore?: () => void): (node: HTMLElement | null) => void;
|
|
1
|
+
export declare function useLoadMoreSentinel(hasMore: boolean | undefined, onLoadMore?: () => void, loading?: boolean, itemsCount?: number): (node: HTMLElement | null) => void;
|
|
@@ -9,18 +9,26 @@ require("core-js/modules/es.iterator.constructor.js");
|
|
|
9
9
|
require("core-js/modules/es.iterator.some.js");
|
|
10
10
|
require("core-js/modules/es.object.to-string.js");
|
|
11
11
|
var _react = require("react");
|
|
12
|
-
function useLoadMoreSentinel(hasMore, onLoadMore) {
|
|
12
|
+
function useLoadMoreSentinel(hasMore, onLoadMore, loading, itemsCount) {
|
|
13
13
|
var observerRef = (0, _react.useRef)(null);
|
|
14
|
+
var loadRequestedRef = (0, _react.useRef)(false);
|
|
14
15
|
var hasMoreRef = (0, _react.useRef)(hasMore);
|
|
15
16
|
hasMoreRef.current = hasMore;
|
|
16
17
|
var onLoadMoreRef = (0, _react.useRef)(onLoadMore);
|
|
17
18
|
onLoadMoreRef.current = onLoadMore;
|
|
19
|
+
var preventRepeatedLoad = loading !== undefined;
|
|
18
20
|
(0, _react.useEffect)(function () {
|
|
19
21
|
return function () {
|
|
20
22
|
var _observerRef$current;
|
|
21
23
|
(_observerRef$current = observerRef.current) === null || _observerRef$current === void 0 || _observerRef$current.disconnect();
|
|
22
24
|
};
|
|
23
25
|
}, []);
|
|
26
|
+
(0, _react.useEffect)(function () {
|
|
27
|
+
if (!loading) {
|
|
28
|
+
// Cached pages can add items without changing the loading state.
|
|
29
|
+
loadRequestedRef.current = false;
|
|
30
|
+
}
|
|
31
|
+
}, [loading, itemsCount]);
|
|
24
32
|
return (0, _react.useCallback)(function (node) {
|
|
25
33
|
var _observerRef$current2;
|
|
26
34
|
(_observerRef$current2 = observerRef.current) === null || _observerRef$current2 === void 0 || _observerRef$current2.disconnect();
|
|
@@ -30,12 +38,13 @@ function useLoadMoreSentinel(hasMore, onLoadMore) {
|
|
|
30
38
|
observerRef.current = new IntersectionObserver(function (entries) {
|
|
31
39
|
if (entries.some(function (entry) {
|
|
32
40
|
return entry.isIntersecting;
|
|
33
|
-
}) && hasMoreRef.current) {
|
|
41
|
+
}) && hasMoreRef.current && !loading && (!preventRepeatedLoad || !loadRequestedRef.current) && onLoadMoreRef.current) {
|
|
34
42
|
var _onLoadMoreRef$curren;
|
|
43
|
+
loadRequestedRef.current = preventRepeatedLoad;
|
|
35
44
|
(_onLoadMoreRef$curren = onLoadMoreRef.current) === null || _onLoadMoreRef$curren === void 0 || _onLoadMoreRef$curren.call(onLoadMoreRef);
|
|
36
45
|
}
|
|
37
46
|
});
|
|
38
47
|
observerRef.current.observe(node);
|
|
39
|
-
}, []);
|
|
48
|
+
}, [loading, preventRepeatedLoad]);
|
|
40
49
|
}
|
|
41
50
|
// #sourceMappingURL=useLoadMoreSentinel.js.map
|