@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":""}
|
|
@@ -5,8 +5,8 @@ import "core-js/modules/es.array.reduce.js";
|
|
|
5
5
|
import "core-js/modules/es.iterator.constructor.js";
|
|
6
6
|
import "core-js/modules/es.iterator.reduce.js";
|
|
7
7
|
import "core-js/modules/es.object.to-string.js";
|
|
8
|
-
import React, { useMemo } from 'react';
|
|
9
|
-
import { List } from '@gravity-ui/uikit';
|
|
8
|
+
import React, { useLayoutEffect, useMemo, useRef } from 'react';
|
|
9
|
+
import { Flex, List, Loader } from '@gravity-ui/uikit';
|
|
10
10
|
import cn from 'bem-cn-lite';
|
|
11
11
|
import { useLoadMoreSentinel } from "../../helpers/useLoadMoreSentinel";
|
|
12
12
|
import { ListSpinner } from "../ListSpinner";
|
|
@@ -14,6 +14,7 @@ import "./LazyList.css";
|
|
|
14
14
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
15
|
var block = cn('qp-lazy-list');
|
|
16
16
|
var SENTINEL_ROW_HEIGHT = 1;
|
|
17
|
+
var LOADING_ROW_HEIGHT = 40;
|
|
17
18
|
var isSentinelRow = function isSentinelRow(row) {
|
|
18
19
|
return Boolean(row) && _typeof(row) === 'object' && '__sentinel' in row;
|
|
19
20
|
};
|
|
@@ -32,15 +33,37 @@ export var LazyList = function LazyList(_ref) {
|
|
|
32
33
|
emptyContent = _ref.emptyContent,
|
|
33
34
|
isEmpty = _ref.isEmpty,
|
|
34
35
|
className = _ref.className;
|
|
35
|
-
var
|
|
36
|
+
var listRef = useRef(null);
|
|
37
|
+
var previousListStateRef = useRef({
|
|
38
|
+
itemsLength: items.length,
|
|
39
|
+
loading: loading,
|
|
40
|
+
hasMore: hasMore
|
|
41
|
+
});
|
|
42
|
+
var sentinelRef = useLoadMoreSentinel(hasMore, onLoadMore, loading, items.length);
|
|
36
43
|
var rows = useMemo(function () {
|
|
37
|
-
return hasMore ? [].concat(_toConsumableArray(items), [{
|
|
44
|
+
return hasMore || loading ? [].concat(_toConsumableArray(items), [{
|
|
38
45
|
__sentinel: true
|
|
39
46
|
}]) : items;
|
|
40
|
-
}, [items, hasMore]);
|
|
47
|
+
}, [items, hasMore, loading]);
|
|
41
48
|
var getRowHeight = function getRowHeight(row) {
|
|
42
|
-
|
|
49
|
+
if (isSentinelRow(row)) {
|
|
50
|
+
return loading ? LOADING_ROW_HEIGHT : SENTINEL_ROW_HEIGHT;
|
|
51
|
+
}
|
|
52
|
+
return itemHeight(row);
|
|
43
53
|
};
|
|
54
|
+
useLayoutEffect(function () {
|
|
55
|
+
var previousListState = previousListStateRef.current;
|
|
56
|
+
var listStateChanged = previousListState.itemsLength !== items.length || previousListState.loading !== loading || previousListState.hasMore !== hasMore;
|
|
57
|
+
if (listStateChanged) {
|
|
58
|
+
var _listRef$current;
|
|
59
|
+
(_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);
|
|
60
|
+
previousListStateRef.current = {
|
|
61
|
+
itemsLength: items.length,
|
|
62
|
+
loading: loading,
|
|
63
|
+
hasMore: hasMore
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}, [hasMore, items.length, loading]);
|
|
44
67
|
if (error) {
|
|
45
68
|
return /*#__PURE__*/_jsx(React.Fragment, {
|
|
46
69
|
children: error
|
|
@@ -58,6 +81,7 @@ export var LazyList = function LazyList(_ref) {
|
|
|
58
81
|
});
|
|
59
82
|
}
|
|
60
83
|
return /*#__PURE__*/_jsx(List, {
|
|
84
|
+
ref: listRef,
|
|
61
85
|
className: block(null, className),
|
|
62
86
|
filterable: filterable,
|
|
63
87
|
items: rows,
|
|
@@ -70,7 +94,16 @@ export var LazyList = function LazyList(_ref) {
|
|
|
70
94
|
renderItem: function renderItem(row, isActive, index) {
|
|
71
95
|
return isSentinelRow(row) ? /*#__PURE__*/_jsx("div", {
|
|
72
96
|
ref: sentinelRef,
|
|
73
|
-
className: block('sentinel'
|
|
97
|
+
className: block('sentinel', {
|
|
98
|
+
loading: Boolean(loading)
|
|
99
|
+
}),
|
|
100
|
+
children: loading && /*#__PURE__*/_jsx(Flex, {
|
|
101
|
+
alignItems: "center",
|
|
102
|
+
justifyContent: "center",
|
|
103
|
+
width: "100%",
|
|
104
|
+
height: "100%",
|
|
105
|
+
children: /*#__PURE__*/_jsx(Loader, {})
|
|
106
|
+
})
|
|
74
107
|
}) : _renderItem(row, isActive, index);
|
|
75
108
|
},
|
|
76
109
|
selectedItemIndex: selectedItemIndex,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","List","cn","useLoadMoreSentinel","ListSpinner","jsx","_jsx","block","SENTINEL_ROW_HEIGHT","isSentinelRow","row","Boolean","_typeof","LazyList","_ref","items","itemHeight","renderItem","hasMore","onLoadMore","onItemClick","selectedItemIndex","_ref$filterable","filterable","loading","error","emptyContent","isEmpty","className","sentinelRef","rows","concat","_toConsumableArray","__sentinel","getRowHeight","Fragment","children","empty","
|
|
1
|
+
{"version":3,"names":["React","useLayoutEffect","useMemo","useRef","Flex","List","Loader","cn","useLoadMoreSentinel","ListSpinner","jsx","_jsx","block","SENTINEL_ROW_HEIGHT","LOADING_ROW_HEIGHT","isSentinelRow","row","Boolean","_typeof","LazyList","_ref","items","itemHeight","renderItem","hasMore","onLoadMore","onItemClick","selectedItemIndex","_ref$filterable","filterable","loading","error","emptyContent","isEmpty","className","listRef","previousListStateRef","itemsLength","length","sentinelRef","rows","concat","_toConsumableArray","__sentinel","getRowHeight","previousListState","current","listStateChanged","_listRef$current","refContainer","resetAfterIndex","Math","min","Fragment","children","empty","ref","itemsHeight","listRows","reduce","total","isActive","index","alignItems","justifyContent","width","height"],"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":[]}
|
|
@@ -41,6 +41,13 @@ export var AllStatuses = {
|
|
|
41
41
|
status: "aborted",
|
|
42
42
|
startTime: fiveMinutesAgo,
|
|
43
43
|
endTime: now
|
|
44
|
+
}), /*#__PURE__*/_jsx(QueryDuration, {
|
|
45
|
+
status: "completed",
|
|
46
|
+
startTime: now - (27 * 60 + 15) * 60 * 1000,
|
|
47
|
+
endTime: now
|
|
48
|
+
}), /*#__PURE__*/_jsx(QueryDuration, {
|
|
49
|
+
status: "completed",
|
|
50
|
+
startTime: fiveMinutesAgo
|
|
44
51
|
}), /*#__PURE__*/_jsx(QueryDuration, {
|
|
45
52
|
status: "running",
|
|
46
53
|
startTime: fiveMinutesAgo
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","QueryDuration","jsx","_jsx","jsxs","_jsxs","now","Date","fiveMinutesAgo","oneHourAgo","meta","title","component","tags","Default","args","status","startTime","AllStatuses","render","style","display","gap","flexWrap","alignItems","children","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,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAAQC,aAAa;AAAyB,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAE9C,IAAMC,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,EAAEX,aAAa;EACxBY,IAAI,EAAE,CAAC,UAAU;AACrB,CAAC;AAED,eAAeH,IAAI;AAGnB;AACA,OAAO,IAAMI,OAAc,GAAG;EAC1BC,IAAI,EAAE;IACFC,MAAM,EAAE,SAAS;IACjBC,SAAS,EAAET;EACf;AACJ,CAAC;;AAED;AACA,OAAO,IAAMU,WAAkB,GAAG;EAC9BC,MAAM,EAAE,SAARA,MAAMA,CAAA;IAAA,oBACFd,KAAA;MAAKe,KAAK,EAAE;QAACC,OAAO,EAAE,MAAM;QAAEC,GAAG,EAAE,CAAC;QAAEC,QAAQ,EAAE,MAAM;QAAEC,UAAU,EAAE;MAAQ,CAAE;MAAAC,QAAA,gBAE1EtB,IAAA,CAACF,aAAa;QAACe,MAAM,EAAC,WAAW;QAACC,SAAS,EAAET,cAAe;QAACkB,OAAO,EAAEpB;MAAI,CAAE,CAAC,eAC7EH,IAAA,CAACF,aAAa;QAACe,MAAM,EAAC,QAAQ;QAACC,SAAS,EAAER,UAAW;QAACiB,OAAO,EAAEpB;MAAI,CAAE,CAAC,eACtEH,IAAA,CAACF,aAAa;QAACe,MAAM,EAAC,SAAS;QAACC,SAAS,EAAET,cAAe;QAACkB,OAAO,EAAEpB;MAAI,CAAE,CAAC,
|
|
1
|
+
{"version":3,"names":["React","QueryDuration","jsx","_jsx","jsxs","_jsxs","now","Date","fiveMinutesAgo","oneHourAgo","meta","title","component","tags","Default","args","status","startTime","AllStatuses","render","style","display","gap","flexWrap","alignItems","children","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,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAAQC,aAAa;AAAyB,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAE9C,IAAMC,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,EAAEX,aAAa;EACxBY,IAAI,EAAE,CAAC,UAAU;AACrB,CAAC;AAED,eAAeH,IAAI;AAGnB;AACA,OAAO,IAAMI,OAAc,GAAG;EAC1BC,IAAI,EAAE;IACFC,MAAM,EAAE,SAAS;IACjBC,SAAS,EAAET;EACf;AACJ,CAAC;;AAED;AACA,OAAO,IAAMU,WAAkB,GAAG;EAC9BC,MAAM,EAAE,SAARA,MAAMA,CAAA;IAAA,oBACFd,KAAA;MAAKe,KAAK,EAAE;QAACC,OAAO,EAAE,MAAM;QAAEC,GAAG,EAAE,CAAC;QAAEC,QAAQ,EAAE,MAAM;QAAEC,UAAU,EAAE;MAAQ,CAAE;MAAAC,QAAA,gBAE1EtB,IAAA,CAACF,aAAa;QAACe,MAAM,EAAC,WAAW;QAACC,SAAS,EAAET,cAAe;QAACkB,OAAO,EAAEpB;MAAI,CAAE,CAAC,eAC7EH,IAAA,CAACF,aAAa;QAACe,MAAM,EAAC,QAAQ;QAACC,SAAS,EAAER,UAAW;QAACiB,OAAO,EAAEpB;MAAI,CAAE,CAAC,eACtEH,IAAA,CAACF,aAAa;QAACe,MAAM,EAAC,SAAS;QAACC,SAAS,EAAET,cAAe;QAACkB,OAAO,EAAEpB;MAAI,CAAE,CAAC,eAC3EH,IAAA,CAACF,aAAa;QACVe,MAAM,EAAC,WAAW;QAClBC,SAAS,EAAEX,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAK;QAC5CoB,OAAO,EAAEpB;MAAI,CAChB,CAAC,eACFH,IAAA,CAACF,aAAa;QAACe,MAAM,EAAC,WAAW;QAACC,SAAS,EAAET;MAAe,CAAE,CAAC,eAE/DL,IAAA,CAACF,aAAa;QAACe,MAAM,EAAC,SAAS;QAACC,SAAS,EAAET;MAAe,CAAE,CAAC,eAE7DL,IAAA,CAACF,aAAa;QAACe,MAAM,EAAC,OAAO;QAACC,SAAS,EAAEX;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;
|
|
@@ -1,33 +1,39 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
2
|
import "core-js/modules/es.array.includes.js";
|
|
3
|
+
import "core-js/modules/es.date.now.js";
|
|
3
4
|
import "core-js/modules/es.string.includes.js";
|
|
4
5
|
import "core-js/modules/web.timers.js";
|
|
5
6
|
import { useEffect, useState } from 'react';
|
|
6
7
|
import { CompletedQueryStates } from "../../constants/query";
|
|
7
8
|
import { durationDates } from "../../helpers/time";
|
|
9
|
+
var calculateDuration = function calculateDuration(state, startTime, endTime) {
|
|
10
|
+
if (state === 'draft' || startTime === undefined) {
|
|
11
|
+
return '--:--';
|
|
12
|
+
}
|
|
13
|
+
if (CompletedQueryStates.includes(state)) {
|
|
14
|
+
return endTime === undefined ? '--:--' : durationDates(startTime, endTime);
|
|
15
|
+
}
|
|
16
|
+
return durationDates(startTime, endTime !== null && endTime !== void 0 ? endTime : Date.now());
|
|
17
|
+
};
|
|
8
18
|
export var useQueryDuration = function useQueryDuration(state, startTime, endTime) {
|
|
9
|
-
var _useState = useState(
|
|
19
|
+
var _useState = useState(function () {
|
|
20
|
+
return calculateDuration(state, startTime, endTime);
|
|
21
|
+
}),
|
|
10
22
|
_useState2 = _slicedToArray(_useState, 2),
|
|
11
23
|
duration = _useState2[0],
|
|
12
24
|
setDuration = _useState2[1];
|
|
13
25
|
useEffect(function () {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
setDuration(durationDates(startTime, endTime));
|
|
23
|
-
if (endTime) {
|
|
24
|
-
return;
|
|
26
|
+
setDuration(calculateDuration(state, startTime, endTime));
|
|
27
|
+
var timer;
|
|
28
|
+
if (!(state === 'draft' || startTime === undefined || CompletedQueryStates.includes(state) || endTime !== undefined)) {
|
|
29
|
+
timer = setInterval(function () {
|
|
30
|
+
return setDuration(durationDates(startTime, Date.now()));
|
|
31
|
+
}, 1000);
|
|
25
32
|
}
|
|
26
|
-
var timer = setInterval(function () {
|
|
27
|
-
return setDuration(durationDates(startTime, endTime));
|
|
28
|
-
}, 1000);
|
|
29
33
|
return function () {
|
|
30
|
-
|
|
34
|
+
if (timer !== undefined) {
|
|
35
|
+
clearInterval(timer);
|
|
36
|
+
}
|
|
31
37
|
};
|
|
32
38
|
}, [state, startTime, endTime]);
|
|
33
39
|
return duration;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useState","CompletedQueryStates","durationDates","
|
|
1
|
+
{"version":3,"names":["useEffect","useState","CompletedQueryStates","durationDates","calculateDuration","state","startTime","endTime","undefined","includes","Date","now","useQueryDuration","_useState","_useState2","_slicedToArray","duration","setDuration","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,SAAQA,SAAS,EAAEC,QAAQ,QAAO,OAAO;AAEzC,SAAQC,oBAAoB;AAC5B,SAAQC,aAAa;AAErB,IAAMC,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,IAAIN,oBAAoB,CAACO,QAAQ,CAACJ,KAAK,CAAC,EAAE;IACtC,OAAOE,OAAO,KAAKC,SAAS,GAAG,OAAO,GAAGL,aAAa,CAACG,SAAS,EAAEC,OAAO,CAAC;EAC9E;EAEA,OAAOJ,aAAa,CAACG,SAAS,EAAEC,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAIG,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,OAAO,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CACzBP,KAAkB,EAClBC,SAA2B,EAC3BC,OAAyB,EACxB;EACD,IAAAM,SAAA,GAAgCZ,QAAQ,CAAC;MAAA,OAAMG,iBAAiB,CAACC,KAAK,EAAEC,SAAS,EAAEC,OAAO,CAAC;IAAA,EAAC;IAAAO,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAArFG,QAAQ,GAAAF,UAAA;IAAEG,WAAW,GAAAH,UAAA;EAE5Bd,SAAS,CAAC,YAAM;IACZiB,WAAW,CAACb,iBAAiB,CAACC,KAAK,EAAEC,SAAS,EAAEC,OAAO,CAAC,CAAC;IAEzD,IAAIW,KAAiD;IAErD,IAAI,EACAb,KAAK,KAAK,OAAO,IACjBC,SAAS,KAAKE,SAAS,IACvBN,oBAAoB,CAACO,QAAQ,CAACJ,KAAK,CAAC,IACpCE,OAAO,KAAKC,SAAS,CACxB,EAAE;MACCU,KAAK,GAAGC,WAAW,CAAC;QAAA,OAAMF,WAAW,CAACd,aAAa,CAACG,SAAS,EAAEI,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,CAAC;MAAA,GAAE,IAAI,CAAC;IACtF;IAEA,OAAO,YAAM;MACT,IAAIO,KAAK,KAAKV,SAAS,EAAE;QACrBY,aAAa,CAACF,KAAK,CAAC;MACxB;IACJ,CAAC;EACL,CAAC,EAAE,CAACb,KAAK,EAAEC,SAAS,EAAEC,OAAO,CAAC,CAAC;EAE/B,OAAOS,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>;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
|
+
var _excluded = ["href", "disabled", "renderLink", "className", "children"];
|
|
1
4
|
import React from 'react';
|
|
2
5
|
import cn from 'bem-cn-lite';
|
|
3
6
|
import "./RowLink.css";
|
|
@@ -6,14 +9,22 @@ var block = cn('qp-row-link');
|
|
|
6
9
|
export var RowLink = function RowLink(_ref) {
|
|
7
10
|
var href = _ref.href,
|
|
8
11
|
disabled = _ref.disabled,
|
|
12
|
+
renderLink = _ref.renderLink,
|
|
9
13
|
className = _ref.className,
|
|
10
|
-
children = _ref.children
|
|
14
|
+
children = _ref.children,
|
|
15
|
+
linkProps = _objectWithoutProperties(_ref, _excluded);
|
|
11
16
|
var isLink = Boolean(href) && !disabled;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
if (!isLink) {
|
|
18
|
+
return /*#__PURE__*/_jsx("div", {
|
|
19
|
+
className: block(null, className),
|
|
20
|
+
children: children
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
var props = _objectSpread(_objectSpread({}, linkProps), {}, {
|
|
24
|
+
href: href,
|
|
15
25
|
className: block(null, className),
|
|
16
26
|
children: children
|
|
17
27
|
});
|
|
28
|
+
return renderLink ? renderLink(props) : /*#__PURE__*/_jsx("a", _objectSpread({}, props));
|
|
18
29
|
};
|
|
19
30
|
// #sourceMappingURL=RowLink.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","cn","jsx","_jsx","block","RowLink","_ref","href","disabled","className","children","isLink","Boolean","
|
|
1
|
+
{"version":3,"names":["React","cn","jsx","_jsx","block","RowLink","_ref","href","disabled","renderLink","className","children","linkProps","_objectWithoutProperties","_excluded","isLink","Boolean","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,OAAOA,KAAK,MAAY,OAAO;AAC/B,OAAOC,EAAE,MAAM,aAAa;AAE5B;AAAwB,SAAAC,GAAA,IAAAC,IAAA;AAExB,IAAMC,KAAK,GAAGH,EAAE,CAAC,aAAa,CAAC;AAQ/B,OAAO,IAAMI,OAAyB,GAAG,SAA5BA,OAAyBA,CAAAC,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,GAAAC,wBAAA,CAAAP,IAAA,EAAAQ,SAAA;EAEZ,IAAMC,MAAM,GAAGC,OAAO,CAACT,IAAI,CAAC,IAAI,CAACC,QAAQ;EAEzC,IAAI,CAACO,MAAM,EAAE;IACT,oBAAOZ,IAAA;MAAKO,SAAS,EAAEN,KAAK,CAAC,IAAI,EAAEM,SAAS,CAAE;MAAAC,QAAA,EAAEA;IAAQ,CAAM,CAAC;EACnE;EAEA,IAAMM,KAA0C,GAAAC,aAAA,CAAAA,aAAA,KACzCN,SAAS;IACZL,IAAI,EAAJA,IAAI;IACJG,SAAS,EAAEN,KAAK,CAAC,IAAI,EAAEM,SAAS,CAAC;IACjCC,QAAQ,EAARA;EAAQ,EACX;EAED,OAAOF,UAAU,GAAGA,UAAU,CAACQ,KAAK,CAAC,gBAAGd,IAAA,MAAAe,aAAA,KAAOD,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>;
|
|
@@ -14,10 +14,12 @@ export var SearchRowLayout = function SearchRowLayout(_ref) {
|
|
|
14
14
|
language = _ref.language,
|
|
15
15
|
href = _ref.href,
|
|
16
16
|
disabled = _ref.disabled,
|
|
17
|
+
renderLink = _ref.renderLink,
|
|
17
18
|
className = _ref.className;
|
|
18
19
|
return /*#__PURE__*/_jsx(RowLink, {
|
|
19
20
|
href: href,
|
|
20
21
|
disabled: disabled,
|
|
22
|
+
renderLink: renderLink,
|
|
21
23
|
className: block(null, className),
|
|
22
24
|
children: /*#__PURE__*/_jsxs(Flex, {
|
|
23
25
|
direction: "column",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Flex","cn","MonacoEditor","RowLink","fitQueryToVisibleLines","MONACO_CONFIG","jsx","_jsx","jsxs","_jsxs","block","SearchRowLayout","_ref","header","query","language","href","disabled","className","children","direction","gap","alignItems","value","readOnly","monacoConfig"],"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","Flex","cn","MonacoEditor","RowLink","fitQueryToVisibleLines","MONACO_CONFIG","jsx","_jsx","jsxs","_jsxs","block","SearchRowLayout","_ref","header","query","language","href","disabled","renderLink","className","children","direction","gap","alignItems","value","readOnly","monacoConfig"],"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,OAAOA,KAAK,MAAuB,OAAO;AAC1C,SAAQC,IAAI,QAAO,mBAAmB;AACtC,OAAOC,EAAE,MAAM,aAAa;AAC5B,SAAQC,YAAY;AACpB,SAAQC,OAAO;AAEf,SAAQC,sBAAsB;AAC9B,SAAQC,aAAa;AACrB;AAAgC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEhC,IAAMC,KAAK,GAAGT,EAAE,CAAC,sBAAsB,CAAC;AAYxC,OAAO,IAAMU,eAAyC,GAAG,SAA5CA,eAAyCA,CAAAC,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,oBACIZ,IAAA,CAACJ,OAAO;IACJa,IAAI,EAAEA,IAAK;IACXC,QAAQ,EAAEA,QAAS;IACnBC,UAAU,EAAEA,UAAW;IACvBC,SAAS,EAAET,KAAK,CAAC,IAAI,EAAES,SAAS,CAAE;IAAAC,QAAA,eAElCX,KAAA,CAACT,IAAI;MAACqB,SAAS,EAAC,QAAQ;MAACC,GAAG,EAAE,CAAE;MAACH,SAAS,EAAET,KAAK,CAAC,SAAS,CAAE;MAAAU,QAAA,gBACzDb,IAAA,CAACP,IAAI;QAACsB,GAAG,EAAE,CAAE;QAACC,UAAU,EAAC,QAAQ;QAAAH,QAAA,EAC5BP;MAAM,CACL,CAAC,eACPN,IAAA,CAACL,YAAY;QACTsB,KAAK,EAAEpB,sBAAsB,CAACU,KAAK,CAAE;QACrCC,QAAQ,EAAEA,QAAS;QACnBU,QAAQ;QACRC,YAAY,EAAErB,aAAc;QAC5Bc,SAAS,EAAET,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;
|
|
@@ -4,10 +4,11 @@ import "core-js/modules/es.array.map.js";
|
|
|
4
4
|
import "core-js/modules/es.iterator.constructor.js";
|
|
5
5
|
import "core-js/modules/es.iterator.map.js";
|
|
6
6
|
import "core-js/modules/es.object.to-string.js";
|
|
7
|
+
export var getListItemKey = function getListItemKey(item) {
|
|
8
|
+
return 'header' in item ? "h:".concat(item.header) : "r:".concat(item.id);
|
|
9
|
+
};
|
|
7
10
|
export var getListKey = function getListKey(items, variant) {
|
|
8
|
-
var itemsKey = items.map(
|
|
9
|
-
return 'header' in item ? "h:".concat(item.header) : "r:".concat(item.id);
|
|
10
|
-
}).join(',');
|
|
11
|
+
var itemsKey = items.map(getListItemKey).join(',');
|
|
11
12
|
return "".concat(variant, ":").concat(itemsKey);
|
|
12
13
|
};
|
|
13
14
|
// #sourceMappingURL=getListKey.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["getListItemKey","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":";;;;;;AAEA,OAAO,IAAMA,cAAc,GAAG,SAAjBA,cAAcA,CAA4BC,IAAsB;EAAA,OACzE,QAAQ,IAAIA,IAAI,QAAAC,MAAA,CAAQD,IAAI,CAACE,MAAM,SAAAD,MAAA,CAAUD,IAAI,CAACG,EAAE,CAAE;AAAA;AAE1D,OAAO,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CACnBC,KAAyB,EACzBC,OAA4B,EACnB;EACT,IAAMC,QAAQ,GAAGF,KAAK,CAACG,GAAG,CAACT,cAAc,CAAC,CAACU,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;
|
|
@@ -1,26 +1,31 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "core-js/modules/es.array.concat.js";
|
|
2
|
+
import "core-js/modules/es.string.pad-start.js";
|
|
3
|
+
import { dateTimeParse } from '@gravity-ui/date-utils';
|
|
2
4
|
export var formatTime = function formatTime(date) {
|
|
3
5
|
var _dateTimeParse;
|
|
4
6
|
return (_dateTimeParse = dateTimeParse(date)) === null || _dateTimeParse === void 0 ? void 0 : _dateTimeParse.format('HH:mm');
|
|
5
7
|
};
|
|
6
8
|
export var durationDates = function durationDates(date1, date2) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
var
|
|
12
|
-
|
|
9
|
+
if (date1 === undefined || date2 === undefined) return '--:--';
|
|
10
|
+
var start = dateTimeParse(date1);
|
|
11
|
+
var end = dateTimeParse(date2);
|
|
12
|
+
if (!start || !end) return '--:--';
|
|
13
|
+
var diffMs = Math.max(0, end.valueOf() - start.valueOf());
|
|
14
|
+
var totalMinutes = Math.floor(diffMs / 60000);
|
|
15
|
+
var hours = Math.floor(totalMinutes / 60);
|
|
16
|
+
var minutes = totalMinutes % 60;
|
|
17
|
+
return "".concat(String(hours).padStart(2, '0'), ":").concat(String(minutes).padStart(2, '0'));
|
|
13
18
|
};
|
|
14
19
|
export var formatTimeCanonical = function formatTimeCanonical(ts) {
|
|
15
|
-
var
|
|
16
|
-
return (
|
|
20
|
+
var _dateTimeParse2;
|
|
21
|
+
return (_dateTimeParse2 = dateTimeParse(ts)) === null || _dateTimeParse2 === void 0 ? void 0 : _dateTimeParse2.format('DD.MM.YYYY, HH:mm');
|
|
17
22
|
};
|
|
18
23
|
export var formatDateCanonical = function formatDateCanonical(ts) {
|
|
19
|
-
var
|
|
20
|
-
return (
|
|
24
|
+
var _dateTimeParse3;
|
|
25
|
+
return (_dateTimeParse3 = dateTimeParse(ts)) === null || _dateTimeParse3 === void 0 ? void 0 : _dateTimeParse3.format('DD.MM.YYYY');
|
|
21
26
|
};
|
|
22
27
|
export var getTimestampFromDate = function getTimestampFromDate(date) {
|
|
23
|
-
var
|
|
24
|
-
return (
|
|
28
|
+
var _dateTimeParse4;
|
|
29
|
+
return (_dateTimeParse4 = dateTimeParse(date)) === null || _dateTimeParse4 === void 0 ? void 0 : _dateTimeParse4.valueOf();
|
|
25
30
|
};
|
|
26
31
|
// #sourceMappingURL=time.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["dateTimeParse","formatTime","date","_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,SAAkBA,aAAa,QAAO,wBAAwB;AAI9D,OAAO,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,IAAU,EAAK;EAAA,IAAAC,cAAA;EACtC,QAAAA,cAAA,GAAOH,aAAa,CAACE,IAAI,CAAC,cAAAC,cAAA,uBAAnBA,cAAA,CAAqBC,MAAM,CAAC,OAAO,CAAC;AAC/C,CAAC;AAED,OAAO,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAIC,KAAW,EAAEC,KAAW,EAAK;EACvD,IAAID,KAAK,KAAKE,SAAS,IAAID,KAAK,KAAKC,SAAS,EAAE,OAAO,OAAO;EAE9D,IAAMC,KAAK,GAAGT,aAAa,CAACM,KAAK,CAAC;EAClC,IAAMI,GAAG,GAAGV,aAAa,CAACO,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;AAED,OAAO,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIC,EAAQ,EAAK;EAAA,IAAAC,eAAA;EAC7C,QAAAA,eAAA,GAAOxB,aAAa,CAACuB,EAAE,CAAC,cAAAC,eAAA,uBAAjBA,eAAA,CAAmBpB,MAAM,CAAC,mBAAmB,CAAC;AACzD,CAAC;AAED,OAAO,IAAMqB,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIF,EAAQ,EAAK;EAAA,IAAAG,eAAA;EAC7C,QAAAA,eAAA,GAAO1B,aAAa,CAACuB,EAAE,CAAC,cAAAG,eAAA,uBAAjBA,eAAA,CAAmBtB,MAAM,CAAC,YAAY,CAAC;AAClD,CAAC;AAED,OAAO,IAAMuB,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIzB,IAAU,EAAK;EAAA,IAAA0B,eAAA;EAChD,QAAAA,eAAA,GAAO5B,aAAa,CAACE,IAAI,CAAC,cAAA0B,eAAA,uBAAnBA,eAAA,CAAqBd,OAAO,CAAC,CAAC;AACzC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import "core-js/modules/es.array.every.js";
|
|
2
|
+
import "core-js/modules/es.array.map.js";
|
|
3
|
+
import "core-js/modules/es.iterator.constructor.js";
|
|
4
|
+
import "core-js/modules/es.iterator.every.js";
|
|
5
|
+
import "core-js/modules/es.iterator.map.js";
|
|
6
|
+
import "core-js/modules/es.object.to-string.js";
|
|
7
|
+
import { useRef } from 'react';
|
|
8
|
+
import { getListItemKey, getListKey } from "./getListKey";
|
|
9
|
+
export var useListKey = function useListKey(items, rowVariant, paginationEnabled) {
|
|
10
|
+
var itemKeys = items.map(getListItemKey);
|
|
11
|
+
var currentKey = getListKey(items, rowVariant);
|
|
12
|
+
var stateRef = useRef(undefined);
|
|
13
|
+
var previousState = stateRef.current;
|
|
14
|
+
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) {
|
|
15
|
+
return key === itemKeys[index];
|
|
16
|
+
});
|
|
17
|
+
var key = paginationEnabled && isAppend ? previousState.key : currentKey;
|
|
18
|
+
stateRef.current = {
|
|
19
|
+
key: key,
|
|
20
|
+
itemKeys: itemKeys,
|
|
21
|
+
rowVariant: rowVariant,
|
|
22
|
+
paginationEnabled: paginationEnabled
|
|
23
|
+
};
|
|
24
|
+
return key;
|
|
25
|
+
};
|
|
26
|
+
// #sourceMappingURL=useListKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useRef","getListItemKey","getListKey","useListKey","items","rowVariant","paginationEnabled","itemKeys","map","currentKey","stateRef","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,SAAQA,MAAM,QAAO,OAAO;AAC5B,SAAQC,cAAc,EAAEC,UAAU;AAUlC,OAAO,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CACnBC,KAAyB,EACzBC,UAA+B,EAC/BC,iBAA0B,EACzB;EACD,IAAMC,QAAQ,GAAGH,KAAK,CAACI,GAAG,CAACP,cAAc,CAAC;EAC1C,IAAMQ,UAAU,GAAGP,UAAU,CAACE,KAAK,EAAEC,UAAU,CAAC;EAChD,IAAMK,QAAQ,GAAGV,MAAM,CAA2BW,SAAS,CAAC;EAC5D,IAAMC,aAAa,GAAGF,QAAQ,CAACG,OAAO;EACtC,IAAMC,QAAQ,GACV,CAAAF,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEN,iBAAiB,KAChCM,aAAa,CAACP,UAAU,KAAKA,UAAU,IACvCO,aAAa,CAACL,QAAQ,CAACQ,MAAM,IAAIR,QAAQ,CAACQ,MAAM,IAChDH,aAAa,CAACL,QAAQ,CAACS,KAAK,CAAC,UAACC,GAAG,EAAEC,KAAK;IAAA,OAAKD,GAAG,KAAKV,QAAQ,CAACW,KAAK,CAAC;EAAA,EAAC;EACzE,IAAMD,GAAG,GAAGX,iBAAiB,IAAIQ,QAAQ,GAAGF,aAAa,CAACK,GAAG,GAAGR,UAAU;EAE1EC,QAAQ,CAACG,OAAO,GAAG;IAACI,GAAG,EAAHA,GAAG;IAAEV,QAAQ,EAARA,QAAQ;IAAEF,UAAU,EAAVA,UAAU;IAAEC,iBAAiB,EAAjBA;EAAiB,CAAC;EAEjE,OAAOW,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;
|
|
@@ -3,18 +3,26 @@ import "core-js/modules/es.iterator.constructor.js";
|
|
|
3
3
|
import "core-js/modules/es.iterator.some.js";
|
|
4
4
|
import "core-js/modules/es.object.to-string.js";
|
|
5
5
|
import { useCallback, useEffect, useRef } from 'react';
|
|
6
|
-
export function useLoadMoreSentinel(hasMore, onLoadMore) {
|
|
6
|
+
export function useLoadMoreSentinel(hasMore, onLoadMore, loading, itemsCount) {
|
|
7
7
|
var observerRef = useRef(null);
|
|
8
|
+
var loadRequestedRef = useRef(false);
|
|
8
9
|
var hasMoreRef = useRef(hasMore);
|
|
9
10
|
hasMoreRef.current = hasMore;
|
|
10
11
|
var onLoadMoreRef = useRef(onLoadMore);
|
|
11
12
|
onLoadMoreRef.current = onLoadMore;
|
|
13
|
+
var preventRepeatedLoad = loading !== undefined;
|
|
12
14
|
useEffect(function () {
|
|
13
15
|
return function () {
|
|
14
16
|
var _observerRef$current;
|
|
15
17
|
(_observerRef$current = observerRef.current) === null || _observerRef$current === void 0 || _observerRef$current.disconnect();
|
|
16
18
|
};
|
|
17
19
|
}, []);
|
|
20
|
+
useEffect(function () {
|
|
21
|
+
if (!loading) {
|
|
22
|
+
// Cached pages can add items without changing the loading state.
|
|
23
|
+
loadRequestedRef.current = false;
|
|
24
|
+
}
|
|
25
|
+
}, [loading, itemsCount]);
|
|
18
26
|
return useCallback(function (node) {
|
|
19
27
|
var _observerRef$current2;
|
|
20
28
|
(_observerRef$current2 = observerRef.current) === null || _observerRef$current2 === void 0 || _observerRef$current2.disconnect();
|
|
@@ -24,12 +32,13 @@ export function useLoadMoreSentinel(hasMore, onLoadMore) {
|
|
|
24
32
|
observerRef.current = new IntersectionObserver(function (entries) {
|
|
25
33
|
if (entries.some(function (entry) {
|
|
26
34
|
return entry.isIntersecting;
|
|
27
|
-
}) && hasMoreRef.current) {
|
|
35
|
+
}) && hasMoreRef.current && !loading && (!preventRepeatedLoad || !loadRequestedRef.current) && onLoadMoreRef.current) {
|
|
28
36
|
var _onLoadMoreRef$curren;
|
|
37
|
+
loadRequestedRef.current = preventRepeatedLoad;
|
|
29
38
|
(_onLoadMoreRef$curren = onLoadMoreRef.current) === null || _onLoadMoreRef$curren === void 0 || _onLoadMoreRef$curren.call(onLoadMoreRef);
|
|
30
39
|
}
|
|
31
40
|
});
|
|
32
41
|
observerRef.current.observe(node);
|
|
33
|
-
}, []);
|
|
42
|
+
}, [loading, preventRepeatedLoad]);
|
|
34
43
|
}
|
|
35
44
|
// #sourceMappingURL=useLoadMoreSentinel.js.map
|