@gravity-ui/querieskit 1.4.0 → 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 +32 -10
- 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/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/modules/HistoryRow/HistoryRow.css +2 -1
- package/build/cjs/modules/HistoryRow/HistoryRow.css.map +1 -1
- package/build/cjs/modules/HistoryRow/HistoryRow.js +2 -2
- package/build/cjs/modules/HistoryRow/HistoryRow.js.map +1 -1
- package/build/cjs/widgets/QueriesHistory/QueriesHistory.stories.d.ts +2 -0
- package/build/cjs/widgets/QueriesHistory/QueriesHistory.stories.js +82 -3
- package/build/cjs/widgets/QueriesHistory/QueriesHistory.stories.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 +33 -11
- 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/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/modules/HistoryRow/HistoryRow.css +2 -1
- package/build/esm/modules/HistoryRow/HistoryRow.css.map +1 -1
- package/build/esm/modules/HistoryRow/HistoryRow.js +2 -2
- package/build/esm/modules/HistoryRow/HistoryRow.js.map +1 -1
- package/build/esm/modules/HistoryRow/HistoryRow.scss +2 -1
- package/build/esm/widgets/QueriesHistory/QueriesHistory.stories.d.ts +2 -0
- package/build/esm/widgets/QueriesHistory/QueriesHistory.stories.js +81 -2
- package/build/esm/widgets/QueriesHistory/QueriesHistory.stories.js.map +1 -1
- package/package.json +7 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikit","_components","_QueriesHistory","_actions","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_interopRequireDefault","now","Date","min","QUERY","BASE_ITEMS","header","height","id","title","status","engine","mode","startTime","endTime","query","LINK_ITEMS","map","item","_objectSpread","href","concat","PAGINATION_PAGES","slice","activeFields","fields","filterFields","type","initialValue","items","logFilterApply","action","logFilterReset","renderRouterLink","_ref","_onClick","onClick","props","_objectWithoutProperties","_excluded","_jsx","event","defaultPrevented","button","metaKey","ctrlKey","shiftKey","altKey","preventDefault","meta","component","QueriesHistory","tags","parameters","layout","operationFilterOptions","value","content","_default","exports","DefaultStory","_useState","useState","_toConsumableArray","_useState2","_slicedToArray","setItems","_useState3","fullSearch","_useState4","search","setSearch","_useState5","_useState6","visibleFields","setVisibleFields","_useState7","_useState8","compareMode","setCompareMode","_useState9","_useState0","comparedRows","setComparedRows","_useState1","undefined","_useState10","editingId","setEditingId","handleCompareChange","selected","result","filter","length","handleCompareCancel","handleEditSubmit","index","findIndex","handleEditCancel","handleCompare","handleOnSearch","data","newItems","_item$query","toLowerCase","searchValue","includes","style","width","children","onChange","hasClear","onUpdate","onApply","onReset","getRowActions","text","comparison","enabled","comparedRowIds","onCancel","onCompare","editing","rowId","onSubmit","renderLink","EmptyStory","_useState11","_useState12","WithHeaderStory","_useState13","_useState14","_useState15","_useState16","logo","SegmentedRadioGroup","options","PaginatedStory","_useState17","_useState18","_useState19","_useState20","page","setPage","_useState21","_useState22","loading","setLoading","handleLoadMore","nextPage","window","setTimeout","currentItems","currentPage","selectedRowId","hasMore","onLoadMore","FullSearchUnavailableStory","_useState23","_useState24","fullSearchAvailable","RouterLinksStory","_useState25","_useState26","CustomRowRendererStory","renderRowItem","_ref2","HistoryGroupHeader","RowLink","Text","Default","render","Empty","InitialLoading","args","decorators","StoryComponent","Paginated","FullSearchUnavailable","RouterLinks","CustomRowRenderer","WithHeader"],"sources":["QueriesHistory.stories.tsx"],"sourcesContent":["import React, {useState} from 'react';\nimport type {Meta, StoryObj} from '@storybook/react';\nimport {SegmentedRadioGroup, Text} from '@gravity-ui/uikit';\nimport {HistoryGroupHeader, RowLink} from '../../components';\nimport {QueriesHistory} from './QueriesHistory';\nimport {\n QueryListFieldKey,\n QueryListFilterConfig,\n QueryListItem,\n QueryListLinkRenderer,\n QueryListVisibleFieldsConfig,\n} from '../../types/queryList';\nimport {QueryHistoryRow} from '../../types/history';\nimport {action} from 'storybook/actions';\n\nconst now = Date.now();\nconst min = 60 * 1000;\n\nconst QUERY = `use test;\n\nSELECT\n \"test_session\" AS session_id,\n \"test_task\" AS task_id,\n SUBSTRING(\"test\", 1, 1) AS truncated_char`;\n\nconst BASE_ITEMS: QueryListItem<QueryHistoryRow>[] = [\n {header: 'Today', height: 28},\n {\n id: 1,\n title: 'Query 1',\n status: 'completed',\n engine: 'YQL',\n mode: 'Validation',\n startTime: now - 2 * min,\n endTime: now - min,\n query: QUERY,\n height: 52,\n },\n {\n id: 2,\n title: 'Query 2',\n status: 'failed',\n engine: 'YQL',\n mode: 'Test',\n startTime: now - 10 * min,\n endTime: now - 9 * min,\n query: QUERY,\n height: 52,\n },\n {\n id: 3,\n title: 'Query 3',\n status: 'running',\n engine: 'YQL',\n mode: 'Test',\n startTime: now - min,\n query: QUERY,\n height: 52,\n },\n {header: 'Yesterday', height: 28},\n {\n id: 4,\n title: 'Query 4',\n status: 'aborted',\n engine: 'YQL',\n mode: 'Validation',\n startTime: now - 25 * 60 * min,\n endTime: now - 24 * 60 * min,\n query: 'SELECT 1',\n height: 52,\n },\n {\n id: 5,\n title: 'Query 5',\n status: 'draft',\n engine: 'YQL',\n mode: 'Test',\n startTime: now - 30 * 60 * min,\n query: QUERY,\n height: 52,\n },\n {\n id: 6,\n title: 'Query 6',\n status: 'draft',\n engine: 'YQL',\n mode: 'Test',\n startTime: now - 30 * 60 * min,\n query: QUERY,\n height: 52,\n },\n {\n id: 7,\n title: 'Query 7',\n status: 'draft',\n engine: 'YQL',\n mode: 'Test',\n startTime: now - 30 * 60 * min,\n query: QUERY,\n height: 52,\n },\n {\n id: 8,\n title: 'Query 8',\n status: 'draft',\n engine: 'YQL',\n mode: 'Test',\n startTime: now - 30 * 60 * min,\n query: QUERY,\n height: 52,\n },\n];\n\nconst LINK_ITEMS = BASE_ITEMS.map((item) =>\n 'id' in item ? {...item, href: `/queries/${item.id}`} : item,\n);\n\nconst PAGINATION_PAGES = [LINK_ITEMS.slice(0, 3), LINK_ITEMS.slice(3, 6), LINK_ITEMS.slice(6)];\n\ntype VisibleFields = QueryListVisibleFieldsConfig<QueryHistoryRow>['fields'];\nconst activeFields: QueryListFieldKey<QueryHistoryRow>[] = [\n 'duration',\n 'mode',\n 'startTime',\n 'engine',\n 'isPrivate',\n];\nconst fields: VisibleFields = [\n {\n id: 'duration',\n title: 'Duration',\n },\n {\n id: 'mode',\n title: 'Mode',\n },\n {\n id: 'startTime',\n title: 'Start time',\n },\n {\n id: 'engine',\n title: 'Engine',\n },\n {\n id: 'isPrivate',\n title: 'ACO',\n },\n];\n\nconst filterFields: QueryListFilterConfig['fields'] = [\n {id: 'onlyMine', type: 'switch', title: 'My queries only', initialValue: true},\n {id: 'range', type: 'rangeDatePicker', title: 'Period'},\n {\n id: 'dialect',\n type: 'checkboxGroup',\n title: 'Dialect',\n initialValue: [],\n items: [\n {id: 'yql', title: 'YQL'},\n {id: 'sql', title: 'SQL'},\n ],\n },\n];\n\nconst logFilterApply = action('onFilterApply');\nconst logFilterReset = action('onFilterReset');\n\nconst renderRouterLink: QueryListLinkRenderer = ({onClick, ...props}) => (\n <a\n {...props}\n data-router-link\n onClick={(event) => {\n onClick?.(event);\n\n if (\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey\n ) {\n return;\n }\n\n event.preventDefault();\n action('routerNavigate')(props.href);\n }}\n />\n);\n\nconst meta: Meta<typeof QueriesHistory> = {\n title: 'Widgets/QueriesHistory',\n component: QueriesHistory,\n tags: ['autodocs'],\n parameters: {\n layout: 'padded',\n },\n};\n\nconst operationFilterOptions = [\n {\n value: 'My',\n content: 'My',\n },\n {\n value: 'All',\n content: 'All',\n },\n];\n\nexport default meta;\ntype Story = StoryObj<typeof QueriesHistory>;\n\nconst DefaultStory = () => {\n const [items, setItems] = useState([...LINK_ITEMS]);\n const [search, setSearch] = useState({value: '', fullSearch: false});\n const [visibleFields, setVisibleFields] =\n useState<QueryListFieldKey<QueryHistoryRow>[]>(activeFields);\n const [compareMode, setCompareMode] = useState(false);\n const [comparedRows, setComparedRows] = useState<(number | string)[]>([]);\n const [editingId, setEditingId] = useState<number | string | undefined>(undefined);\n\n const handleCompareChange = (item: QueryHistoryRow, selected: boolean) => {\n const result = selected\n ? [...comparedRows.slice(0, 1), item.id]\n : comparedRows.filter((id) => id !== item.id);\n setComparedRows(result);\n\n if (!result.length) setCompareMode(false);\n };\n\n const handleCompareCancel = () => {\n setComparedRows([]);\n setCompareMode(false);\n };\n\n const handleEditSubmit = (item: QueryHistoryRow, title: string) => {\n const index = items.findIndex((i) => 'id' in i && i.id === item.id);\n if (index < 0) return;\n\n const result = [...items];\n result[index] = {...result[index], title};\n setItems(result);\n setEditingId(undefined);\n };\n\n const handleEditCancel = () => {\n setEditingId(undefined);\n };\n\n const handleCompare = () => {\n action('onCompare')(comparedRows);\n };\n\n const handleOnSearch = (data: {value: string; fullSearch: boolean}) => {\n setSearch(data);\n\n if (!data.value) {\n setItems(LINK_ITEMS);\n return;\n }\n\n const newItems = LINK_ITEMS.filter((item) => {\n if (!('id' in item)) return false;\n\n const title = item.title.toLowerCase();\n const query = item.query?.toLowerCase();\n const searchValue = data.value.toLowerCase();\n\n if (data.fullSearch) {\n return title.includes(searchValue) || query?.includes(searchValue);\n }\n\n return title.includes(searchValue);\n });\n setItems(newItems);\n };\n\n return (\n <div style={{width: 300, height: 500}}>\n <QueriesHistory\n title=\"History\"\n items={items}\n visibleFields={{value: visibleFields, fields, onChange: setVisibleFields}}\n search={{\n value: search.value,\n fullSearch: search.fullSearch,\n hasClear: true,\n onUpdate: handleOnSearch,\n }}\n filter={{\n fields: filterFields,\n onApply: logFilterApply,\n onReset: logFilterReset('reset'),\n }}\n getRowActions={() => [\n {\n text: 'Compare',\n onClick: (item) => {\n setCompareMode(true);\n setComparedRows([item.id]);\n },\n },\n {\n text: 'Edit',\n onClick: (item) => {\n setEditingId(item.id);\n },\n },\n ]}\n comparison={{\n enabled: compareMode,\n comparedRowIds: comparedRows,\n onChange: handleCompareChange,\n onCancel: handleCompareCancel,\n onCompare: handleCompare,\n }}\n editing={{\n rowId: editingId,\n onSubmit: handleEditSubmit,\n onCancel: handleEditCancel,\n }}\n renderLink={renderRouterLink}\n />\n </div>\n );\n};\n\nconst EmptyStory = () => {\n const [search, setSearch] = useState({value: '', fullSearch: false});\n\n return (\n <div style={{width: 300, height: 500}}>\n <QueriesHistory\n title=\"History\"\n items={[]}\n search={{\n value: search.value,\n fullSearch: search.fullSearch,\n hasClear: true,\n onUpdate: setSearch,\n }}\n />\n </div>\n );\n};\n\nconst WithHeaderStory = () => {\n const [search, setSearch] = useState({value: '', fullSearch: false});\n const [visibleFields, setVisibleFields] =\n useState<QueryListFieldKey<QueryHistoryRow>[]>(activeFields);\n\n return (\n <div style={{width: 300, height: 500}}>\n <QueriesHistory\n items={BASE_ITEMS}\n logo={<SegmentedRadioGroup options={operationFilterOptions} />}\n visibleFields={{value: visibleFields, fields, onChange: setVisibleFields}}\n filter={{\n fields: filterFields,\n onApply: logFilterApply,\n onReset: logFilterReset('reset'),\n }}\n search={{\n value: search.value,\n fullSearch: search.fullSearch,\n hasClear: true,\n onUpdate: setSearch,\n }}\n />\n </div>\n );\n};\n\nconst PaginatedStory = () => {\n const [items, setItems] = useState<QueryListItem<QueryHistoryRow>[]>(PAGINATION_PAGES[0]);\n const [page, setPage] = useState(1);\n const [loading, setLoading] = useState(false);\n\n const handleLoadMore = () => {\n const nextPage = PAGINATION_PAGES[page];\n\n if (loading || !nextPage) {\n return;\n }\n\n action('onLoadMore')(page);\n setLoading(true);\n\n window.setTimeout(() => {\n setItems((currentItems) => [...currentItems, ...nextPage]);\n setPage((currentPage) => currentPage + 1);\n setLoading(false);\n }, 700);\n };\n\n return (\n <div style={{width: 300, height: 300}}>\n <QueriesHistory\n title=\"Paginated history\"\n items={items}\n selectedRowId={2}\n loading={loading}\n hasMore={page < PAGINATION_PAGES.length}\n onLoadMore={handleLoadMore}\n search={{onUpdate: action('onSearchUpdate')}}\n />\n </div>\n );\n};\n\nconst FullSearchUnavailableStory = () => {\n const [search, setSearch] = useState({value: 'Query', fullSearch: true});\n\n return (\n <div style={{width: 300, height: 500}}>\n <QueriesHistory\n title=\"Basic search only\"\n items={LINK_ITEMS}\n search={{\n ...search,\n fullSearchAvailable: false,\n hasClear: true,\n onUpdate: (data) => {\n action('onSearchUpdate')(data);\n setSearch(data);\n },\n }}\n />\n </div>\n );\n};\n\nconst RouterLinksStory = () => {\n const [search, setSearch] = useState({value: '', fullSearch: false});\n\n return (\n <div style={{width: 500, height: 500}}>\n <QueriesHistory\n title=\"Router links\"\n items={LINK_ITEMS}\n renderLink={renderRouterLink}\n search={{...search, hasClear: true, onUpdate: setSearch}}\n />\n </div>\n );\n};\n\nconst CustomRowRendererStory = () => (\n <div style={{width: 300, height: 300}}>\n <QueriesHistory\n title=\"Custom row renderer\"\n items={LINK_ITEMS.slice(0, 3)}\n renderLink={renderRouterLink}\n renderRowItem={({item, renderLink}) =>\n 'header' in item ? (\n <HistoryGroupHeader title={item.header} />\n ) : (\n <RowLink href={item.href} renderLink={renderLink}>\n <Text>{item.title}</Text>\n </RowLink>\n )\n }\n search={{onUpdate: action('onSearchUpdate')}}\n />\n </div>\n);\n\nexport const Default: Story = {render: () => <DefaultStory />};\nexport const Empty: Story = {render: () => <EmptyStory />};\nexport const InitialLoading: Story = {\n args: {\n title: 'Loading history',\n items: [],\n loading: true,\n search: {onUpdate: action('onSearchUpdate')},\n },\n decorators: [\n (StoryComponent) => (\n <div style={{width: 300, height: 500}}>\n <StoryComponent />\n </div>\n ),\n ],\n};\nexport const Paginated: Story = {render: () => <PaginatedStory />};\nexport const FullSearchUnavailable: Story = {\n render: () => <FullSearchUnavailableStory />,\n};\nexport const RouterLinks: Story = {render: () => <RouterLinksStory />};\nexport const CustomRowRenderer: Story = {render: () => <CustomRowRendererStory />};\nexport const WithHeader: Story = {render: () => <WithHeaderStory />};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikit","_components","_QueriesHistory","_actions","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_interopRequireDefault","now","Date","min","QUERY","BASE_ITEMS","header","height","id","title","status","engine","mode","startTime","endTime","query","LINK_ITEMS","map","item","_objectSpread","href","concat","PAGINATION_PAGES","slice","NARROW_HISTORY_START","UTC","NARROW_HISTORY_ITEMS","isPrivate","activeFields","fields","filterFields","type","initialValue","items","logFilterApply","action","logFilterReset","renderRouterLink","_ref","_onClick","onClick","props","_objectWithoutProperties","_excluded","_jsx","event","defaultPrevented","button","metaKey","ctrlKey","shiftKey","altKey","preventDefault","meta","component","QueriesHistory","tags","parameters","layout","operationFilterOptions","value","content","_default","exports","DefaultStory","_useState","useState","_toConsumableArray","_useState2","_slicedToArray","setItems","_useState3","fullSearch","_useState4","search","setSearch","_useState5","_useState6","visibleFields","setVisibleFields","_useState7","_useState8","compareMode","setCompareMode","_useState9","_useState0","comparedRows","setComparedRows","_useState1","undefined","_useState10","editingId","setEditingId","handleCompareChange","selected","result","filter","length","handleCompareCancel","handleEditSubmit","index","findIndex","handleEditCancel","handleCompare","handleOnSearch","data","newItems","_item$query","toLowerCase","searchValue","includes","style","width","children","onChange","hasClear","onUpdate","onApply","onReset","getRowActions","text","comparison","enabled","comparedRowIds","onCancel","onCompare","editing","rowId","onSubmit","renderLink","EmptyStory","_useState11","_useState12","WithHeaderStory","_useState13","_useState14","_useState15","_useState16","logo","SegmentedRadioGroup","options","PaginatedStory","_useState17","_useState18","_useState19","_useState20","page","setPage","_useState21","_useState22","loading","setLoading","handleLoadMore","nextPage","window","setTimeout","currentItems","currentPage","selectedRowId","hasMore","onLoadMore","FullSearchUnavailableStory","_useState23","_useState24","fullSearchAvailable","RouterLinksStory","_useState25","_useState26","CustomRowRendererStory","renderRowItem","_ref2","HistoryGroupHeader","RowLink","Text","NarrowDurationStory","Default","render","Empty","InitialLoading","args","decorators","StoryComponent","Paginated","LoadingMore","NarrowDuration","FullSearchUnavailable","RouterLinks","CustomRowRenderer","WithHeader"],"sources":["QueriesHistory.stories.tsx"],"sourcesContent":["import React, {useState} from 'react';\nimport type {Meta, StoryObj} from '@storybook/react';\nimport {SegmentedRadioGroup, Text} from '@gravity-ui/uikit';\nimport {HistoryGroupHeader, RowLink} from '../../components';\nimport {QueriesHistory} from './QueriesHistory';\nimport {\n QueryListFieldKey,\n QueryListFilterConfig,\n QueryListItem,\n QueryListLinkRenderer,\n QueryListVisibleFieldsConfig,\n} from '../../types/queryList';\nimport {QueryHistoryRow} from '../../types/history';\nimport {action} from 'storybook/actions';\n\nconst now = Date.now();\nconst min = 60 * 1000;\n\nconst QUERY = `use test;\n\nSELECT\n \"test_session\" AS session_id,\n \"test_task\" AS task_id,\n SUBSTRING(\"test\", 1, 1) AS truncated_char`;\n\nconst BASE_ITEMS: QueryListItem<QueryHistoryRow>[] = [\n {header: 'Today', height: 28},\n {\n id: 1,\n title: 'Query 1',\n status: 'completed',\n engine: 'YQL',\n mode: 'Validation',\n startTime: now - 2 * min,\n endTime: now - min,\n query: QUERY,\n height: 52,\n },\n {\n id: 2,\n title: 'Query 2',\n status: 'failed',\n engine: 'YQL',\n mode: 'Test',\n startTime: now - 10 * min,\n endTime: now - 9 * min,\n query: QUERY,\n height: 52,\n },\n {\n id: 3,\n title: 'Query 3',\n status: 'running',\n engine: 'YQL',\n mode: 'Test',\n startTime: now - min,\n query: QUERY,\n height: 52,\n },\n {header: 'Yesterday', height: 28},\n {\n id: 4,\n title: 'Query 4',\n status: 'aborted',\n engine: 'YQL',\n mode: 'Validation',\n startTime: now - 25 * 60 * min,\n endTime: now - 24 * 60 * min,\n query: 'SELECT 1',\n height: 52,\n },\n {\n id: 5,\n title: 'Query 5',\n status: 'draft',\n engine: 'YQL',\n mode: 'Test',\n startTime: now - 30 * 60 * min,\n query: QUERY,\n height: 52,\n },\n {\n id: 6,\n title: 'Query 6',\n status: 'draft',\n engine: 'YQL',\n mode: 'Test',\n startTime: now - 30 * 60 * min,\n query: QUERY,\n height: 52,\n },\n {\n id: 7,\n title: 'Query 7',\n status: 'draft',\n engine: 'YQL',\n mode: 'Test',\n startTime: now - 30 * 60 * min,\n query: QUERY,\n height: 52,\n },\n {\n id: 8,\n title: 'Query 8',\n status: 'draft',\n engine: 'YQL',\n mode: 'Test',\n startTime: now - 30 * 60 * min,\n query: QUERY,\n height: 52,\n },\n];\n\nconst LINK_ITEMS = BASE_ITEMS.map((item) =>\n 'id' in item ? {...item, href: `/queries/${item.id}`} : item,\n);\n\nconst PAGINATION_PAGES = [LINK_ITEMS.slice(0, 6), LINK_ITEMS.slice(6)];\n\nconst NARROW_HISTORY_START = Date.UTC(2024, 0, 15, 12, 0, 0);\nconst NARROW_HISTORY_ITEMS: QueryListItem<QueryHistoryRow>[] = [\n {\n id: 'five-minutes',\n title: 'Five-minute query',\n status: 'completed',\n engine: 'YQL',\n mode: 'Test',\n isPrivate: false,\n startTime: NARROW_HISTORY_START,\n endTime: NARROW_HISTORY_START + 5 * min,\n height: 52,\n },\n {\n id: 'three-hours',\n title: 'Three-hour query',\n status: 'completed',\n engine: 'YQL',\n mode: 'Test',\n isPrivate: true,\n startTime: NARROW_HISTORY_START,\n endTime: NARROW_HISTORY_START + 190 * min,\n height: 52,\n },\n {\n id: 'twenty-seven-hours',\n title: 'Twenty-seven-hour query',\n status: 'completed',\n engine: 'YQL',\n mode: 'Test',\n isPrivate: false,\n startTime: NARROW_HISTORY_START,\n endTime: NARROW_HISTORY_START + 1_635 * min,\n height: 52,\n },\n];\n\ntype VisibleFields = QueryListVisibleFieldsConfig<QueryHistoryRow>['fields'];\nconst activeFields: QueryListFieldKey<QueryHistoryRow>[] = [\n 'duration',\n 'mode',\n 'startTime',\n 'engine',\n 'isPrivate',\n];\nconst fields: VisibleFields = [\n {\n id: 'duration',\n title: 'Duration',\n },\n {\n id: 'mode',\n title: 'Mode',\n },\n {\n id: 'startTime',\n title: 'Start time',\n },\n {\n id: 'engine',\n title: 'Engine',\n },\n {\n id: 'isPrivate',\n title: 'ACO',\n },\n];\n\nconst filterFields: QueryListFilterConfig['fields'] = [\n {id: 'onlyMine', type: 'switch', title: 'My queries only', initialValue: true},\n {id: 'range', type: 'rangeDatePicker', title: 'Period'},\n {\n id: 'dialect',\n type: 'checkboxGroup',\n title: 'Dialect',\n initialValue: [],\n items: [\n {id: 'yql', title: 'YQL'},\n {id: 'sql', title: 'SQL'},\n ],\n },\n];\n\nconst logFilterApply = action('onFilterApply');\nconst logFilterReset = action('onFilterReset');\n\nconst renderRouterLink: QueryListLinkRenderer = ({onClick, ...props}) => (\n <a\n {...props}\n data-router-link\n onClick={(event) => {\n onClick?.(event);\n\n if (\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey\n ) {\n return;\n }\n\n event.preventDefault();\n action('routerNavigate')(props.href);\n }}\n />\n);\n\nconst meta: Meta<typeof QueriesHistory> = {\n title: 'Widgets/QueriesHistory',\n component: QueriesHistory,\n tags: ['autodocs'],\n parameters: {\n layout: 'padded',\n },\n};\n\nconst operationFilterOptions = [\n {\n value: 'My',\n content: 'My',\n },\n {\n value: 'All',\n content: 'All',\n },\n];\n\nexport default meta;\ntype Story = StoryObj<typeof QueriesHistory>;\n\nconst DefaultStory = () => {\n const [items, setItems] = useState([...LINK_ITEMS]);\n const [search, setSearch] = useState({value: '', fullSearch: false});\n const [visibleFields, setVisibleFields] =\n useState<QueryListFieldKey<QueryHistoryRow>[]>(activeFields);\n const [compareMode, setCompareMode] = useState(false);\n const [comparedRows, setComparedRows] = useState<(number | string)[]>([]);\n const [editingId, setEditingId] = useState<number | string | undefined>(undefined);\n\n const handleCompareChange = (item: QueryHistoryRow, selected: boolean) => {\n const result = selected\n ? [...comparedRows.slice(0, 1), item.id]\n : comparedRows.filter((id) => id !== item.id);\n setComparedRows(result);\n\n if (!result.length) setCompareMode(false);\n };\n\n const handleCompareCancel = () => {\n setComparedRows([]);\n setCompareMode(false);\n };\n\n const handleEditSubmit = (item: QueryHistoryRow, title: string) => {\n const index = items.findIndex((i) => 'id' in i && i.id === item.id);\n if (index < 0) return;\n\n const result = [...items];\n result[index] = {...result[index], title};\n setItems(result);\n setEditingId(undefined);\n };\n\n const handleEditCancel = () => {\n setEditingId(undefined);\n };\n\n const handleCompare = () => {\n action('onCompare')(comparedRows);\n };\n\n const handleOnSearch = (data: {value: string; fullSearch: boolean}) => {\n setSearch(data);\n\n if (!data.value) {\n setItems(LINK_ITEMS);\n return;\n }\n\n const newItems = LINK_ITEMS.filter((item) => {\n if (!('id' in item)) return false;\n\n const title = item.title.toLowerCase();\n const query = item.query?.toLowerCase();\n const searchValue = data.value.toLowerCase();\n\n if (data.fullSearch) {\n return title.includes(searchValue) || query?.includes(searchValue);\n }\n\n return title.includes(searchValue);\n });\n setItems(newItems);\n };\n\n return (\n <div style={{width: 300, height: 500}}>\n <QueriesHistory\n title=\"History\"\n items={items}\n visibleFields={{value: visibleFields, fields, onChange: setVisibleFields}}\n search={{\n value: search.value,\n fullSearch: search.fullSearch,\n hasClear: true,\n onUpdate: handleOnSearch,\n }}\n filter={{\n fields: filterFields,\n onApply: logFilterApply,\n onReset: logFilterReset('reset'),\n }}\n getRowActions={() => [\n {\n text: 'Compare',\n onClick: (item) => {\n setCompareMode(true);\n setComparedRows([item.id]);\n },\n },\n {\n text: 'Edit',\n onClick: (item) => {\n setEditingId(item.id);\n },\n },\n ]}\n comparison={{\n enabled: compareMode,\n comparedRowIds: comparedRows,\n onChange: handleCompareChange,\n onCancel: handleCompareCancel,\n onCompare: handleCompare,\n }}\n editing={{\n rowId: editingId,\n onSubmit: handleEditSubmit,\n onCancel: handleEditCancel,\n }}\n renderLink={renderRouterLink}\n />\n </div>\n );\n};\n\nconst EmptyStory = () => {\n const [search, setSearch] = useState({value: '', fullSearch: false});\n\n return (\n <div style={{width: 300, height: 500}}>\n <QueriesHistory\n title=\"History\"\n items={[]}\n search={{\n value: search.value,\n fullSearch: search.fullSearch,\n hasClear: true,\n onUpdate: setSearch,\n }}\n />\n </div>\n );\n};\n\nconst WithHeaderStory = () => {\n const [search, setSearch] = useState({value: '', fullSearch: false});\n const [visibleFields, setVisibleFields] =\n useState<QueryListFieldKey<QueryHistoryRow>[]>(activeFields);\n\n return (\n <div style={{width: 300, height: 500}}>\n <QueriesHistory\n items={BASE_ITEMS}\n logo={<SegmentedRadioGroup options={operationFilterOptions} />}\n visibleFields={{value: visibleFields, fields, onChange: setVisibleFields}}\n filter={{\n fields: filterFields,\n onApply: logFilterApply,\n onReset: logFilterReset('reset'),\n }}\n search={{\n value: search.value,\n fullSearch: search.fullSearch,\n hasClear: true,\n onUpdate: setSearch,\n }}\n />\n </div>\n );\n};\n\nconst PaginatedStory = () => {\n const [items, setItems] = useState<QueryListItem<QueryHistoryRow>[]>(PAGINATION_PAGES[0]);\n const [page, setPage] = useState(1);\n const [loading, setLoading] = useState(false);\n\n const handleLoadMore = () => {\n const nextPage = PAGINATION_PAGES[page];\n\n if (loading || !nextPage) {\n return;\n }\n\n action('onLoadMore')(page);\n setLoading(true);\n\n window.setTimeout(() => {\n setItems((currentItems) => [...currentItems, ...nextPage]);\n setPage((currentPage) => currentPage + 1);\n setLoading(false);\n }, 1500);\n };\n\n return (\n <div style={{width: 300, height: 300}}>\n <QueriesHistory\n title=\"Paginated history\"\n items={items}\n selectedRowId={2}\n loading={loading}\n hasMore={page < PAGINATION_PAGES.length}\n onLoadMore={handleLoadMore}\n search={{onUpdate: action('onSearchUpdate')}}\n />\n </div>\n );\n};\n\nconst FullSearchUnavailableStory = () => {\n const [search, setSearch] = useState({value: 'Query', fullSearch: true});\n\n return (\n <div style={{width: 300, height: 500}}>\n <QueriesHistory\n title=\"Basic search only\"\n items={LINK_ITEMS}\n search={{\n ...search,\n fullSearchAvailable: false,\n hasClear: true,\n onUpdate: (data) => {\n action('onSearchUpdate')(data);\n setSearch(data);\n },\n }}\n />\n </div>\n );\n};\n\nconst RouterLinksStory = () => {\n const [search, setSearch] = useState({value: '', fullSearch: false});\n\n return (\n <div style={{width: 500, height: 500}}>\n <QueriesHistory\n title=\"Router links\"\n items={LINK_ITEMS}\n renderLink={renderRouterLink}\n search={{...search, hasClear: true, onUpdate: setSearch}}\n />\n </div>\n );\n};\n\nconst CustomRowRendererStory = () => (\n <div style={{width: 300, height: 300}}>\n <QueriesHistory\n title=\"Custom row renderer\"\n items={LINK_ITEMS.slice(0, 3)}\n renderLink={renderRouterLink}\n renderRowItem={({item, renderLink}) =>\n 'header' in item ? (\n <HistoryGroupHeader title={item.header} />\n ) : (\n <RowLink href={item.href} renderLink={renderLink}>\n <Text>{item.title}</Text>\n </RowLink>\n )\n }\n search={{onUpdate: action('onSearchUpdate')}}\n />\n </div>\n);\n\nconst NarrowDurationStory = () => (\n <div style={{width: 300, height: 300}}>\n <QueriesHistory\n title=\"Duration examples\"\n items={NARROW_HISTORY_ITEMS}\n visibleFields={{value: activeFields, fields, onChange: action('onVisibleFieldsChange')}}\n search={{onUpdate: action('onSearchUpdate')}}\n />\n </div>\n);\n\nexport const Default: Story = {render: () => <DefaultStory />};\nexport const Empty: Story = {render: () => <EmptyStory />};\nexport const InitialLoading: Story = {\n args: {\n title: 'Loading history',\n items: [],\n loading: true,\n search: {onUpdate: action('onSearchUpdate')},\n },\n decorators: [\n (StoryComponent) => (\n <div style={{width: 300, height: 500}}>\n <StoryComponent />\n </div>\n ),\n ],\n};\nexport const Paginated: Story = {render: () => <PaginatedStory />};\nexport const LoadingMore: Story = {\n args: {\n title: 'Loading next page',\n items: LINK_ITEMS.slice(0, 3),\n loading: true,\n hasMore: true,\n onLoadMore: action('onLoadMore'),\n search: {onUpdate: action('onSearchUpdate')},\n },\n decorators: [\n (StoryComponent) => (\n <div style={{width: 300, height: 300}}>\n <StoryComponent />\n </div>\n ),\n ],\n};\nexport const NarrowDuration: Story = {render: () => <NarrowDurationStory />};\nexport const FullSearchUnavailable: Story = {\n render: () => <FullSearchUnavailableStory />,\n};\nexport const RouterLinks: Story = {render: () => <RouterLinksStory />};\nexport const CustomRowRenderer: Story = {render: () => <CustomRowRendererStory />};\nexport const WithHeader: Story = {render: () => <WithHeaderStory />};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -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":""}
|
|
@@ -6,7 +6,7 @@ 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
8
|
import React, { useLayoutEffect, useMemo, useRef } from 'react';
|
|
9
|
-
import { List } from '@gravity-ui/uikit';
|
|
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
|
};
|
|
@@ -33,24 +34,36 @@ export var LazyList = function LazyList(_ref) {
|
|
|
33
34
|
isEmpty = _ref.isEmpty,
|
|
34
35
|
className = _ref.className;
|
|
35
36
|
var listRef = useRef(null);
|
|
36
|
-
var
|
|
37
|
+
var previousListStateRef = useRef({
|
|
38
|
+
itemsLength: items.length,
|
|
39
|
+
loading: loading,
|
|
40
|
+
hasMore: hasMore
|
|
41
|
+
});
|
|
37
42
|
var sentinelRef = useLoadMoreSentinel(hasMore, onLoadMore, loading, items.length);
|
|
38
43
|
var rows = useMemo(function () {
|
|
39
|
-
return hasMore ? [].concat(_toConsumableArray(items), [{
|
|
44
|
+
return hasMore || loading ? [].concat(_toConsumableArray(items), [{
|
|
40
45
|
__sentinel: true
|
|
41
46
|
}]) : items;
|
|
42
|
-
}, [items, hasMore]);
|
|
47
|
+
}, [items, hasMore, loading]);
|
|
43
48
|
var getRowHeight = function getRowHeight(row) {
|
|
44
|
-
|
|
49
|
+
if (isSentinelRow(row)) {
|
|
50
|
+
return loading ? LOADING_ROW_HEIGHT : SENTINEL_ROW_HEIGHT;
|
|
51
|
+
}
|
|
52
|
+
return itemHeight(row);
|
|
45
53
|
};
|
|
46
54
|
useLayoutEffect(function () {
|
|
47
|
-
var
|
|
48
|
-
|
|
55
|
+
var previousListState = previousListStateRef.current;
|
|
56
|
+
var listStateChanged = previousListState.itemsLength !== items.length || previousListState.loading !== loading || previousListState.hasMore !== hasMore;
|
|
57
|
+
if (listStateChanged) {
|
|
49
58
|
var _listRef$current;
|
|
50
|
-
(_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(
|
|
51
|
-
|
|
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
|
+
};
|
|
52
65
|
}
|
|
53
|
-
}, [items.length]);
|
|
66
|
+
}, [hasMore, items.length, loading]);
|
|
54
67
|
if (error) {
|
|
55
68
|
return /*#__PURE__*/_jsx(React.Fragment, {
|
|
56
69
|
children: error
|
|
@@ -81,7 +94,16 @@ export var LazyList = function LazyList(_ref) {
|
|
|
81
94
|
renderItem: function renderItem(row, isActive, index) {
|
|
82
95
|
return isSentinelRow(row) ? /*#__PURE__*/_jsx("div", {
|
|
83
96
|
ref: sentinelRef,
|
|
84
|
-
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
|
+
})
|
|
85
107
|
}) : _renderItem(row, isActive, index);
|
|
86
108
|
},
|
|
87
109
|
selectedItemIndex: selectedItemIndex,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useLayoutEffect","useMemo","useRef","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","listRef","
|
|
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":";;;;;;;AAAA,OAAOA,KAAK,IAAGC,eAAe,EAAEC,OAAO,EAAEC,MAAM,QAAO,OAAO;AAC7D,SAAQC,IAAI,EAAEC,IAAI,EAAEC,MAAM,QAAO,mBAAmB;AACpD,OAAOC,EAAE,MAAM,aAAa;AAC5B,SAAQC,mBAAmB;AAC3B,SAAQC,WAAW;AACnB;AAAyB,SAAAC,GAAA,IAAAC,IAAA;AAEzB,IAAMC,KAAK,GAAGL,EAAE,CAAC,cAAc,CAAC;AAEhC,IAAMM,mBAAmB,GAAG,CAAC;AAC7B,IAAMC,kBAAkB,GAAG,EAAE;AAK7B,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAQC,GAAmB;EAAA,OAC1CC,OAAO,CAACD,GAAG,CAAC,IAAIE,OAAA,CAAOF,GAAG,MAAK,QAAQ,IAAI,YAAY,IAAKA,GAAc;AAAA;AAkB9E,OAAO,IAAMG,QAAQ,GAAG,SAAXA,QAAQA,CAAAC,IAAA,EAcG;EAAA,IAbpBC,KAAK,GAAAD,IAAA,CAALC,KAAK;IACLC,UAAU,GAAAF,IAAA,CAAVE,UAAU;IACVC,WAAU,GAAAH,IAAA,CAAVG,UAAU;IACVC,OAAO,GAAAJ,IAAA,CAAPI,OAAO;IACPC,UAAU,GAAAL,IAAA,CAAVK,UAAU;IACVC,YAAW,GAAAN,IAAA,CAAXM,WAAW;IACXC,iBAAiB,GAAAP,IAAA,CAAjBO,iBAAiB;IAAAC,eAAA,GAAAR,IAAA,CACjBS,UAAU;IAAVA,UAAU,GAAAD,eAAA,cAAG,KAAK,GAAAA,eAAA;IAClBE,OAAO,GAAAV,IAAA,CAAPU,OAAO;IACPC,KAAK,GAAAX,IAAA,CAALW,KAAK;IACLC,YAAY,GAAAZ,IAAA,CAAZY,YAAY;IACZC,OAAO,GAAAb,IAAA,CAAPa,OAAO;IACPC,SAAS,GAAAd,IAAA,CAATc,SAAS;EAET,IAAMC,OAAO,GAAGhC,MAAM,CAAuB,IAAI,CAAC;EAClD,IAAMiC,oBAAoB,GAAGjC,MAAM,CAAC;IAACkC,WAAW,EAAEhB,KAAK,CAACiB,MAAM;IAAER,OAAO,EAAPA,OAAO;IAAEN,OAAO,EAAPA;EAAO,CAAC,CAAC;EAClF,IAAMe,WAAW,GAAG/B,mBAAmB,CAACgB,OAAO,EAAEC,UAAU,EAAEK,OAAO,EAAET,KAAK,CAACiB,MAAM,CAAC;EAEnF,IAAME,IAAsB,GAAGtC,OAAO,CAClC;IAAA,OAAOsB,OAAO,IAAIM,OAAO,MAAAW,MAAA,CAAAC,kBAAA,CAAOrB,KAAK,IAAE;MAACsB,UAAU,EAAE;IAAI,CAAC,KAAItB,KAAK;EAAA,CAAC,EACnE,CAACA,KAAK,EAAEG,OAAO,EAAEM,OAAO,CAC5B,CAAC;EAED,IAAMc,YAAY,GAAG,SAAfA,YAAYA,CAAI5B,GAAmB,EAAK;IAC1C,IAAID,aAAa,CAACC,GAAG,CAAC,EAAE;MACpB,OAAOc,OAAO,GAAGhB,kBAAkB,GAAGD,mBAAmB;IAC7D;IAEA,OAAOS,UAAU,CAACN,GAAG,CAAC;EAC1B,CAAC;EAEDf,eAAe,CAAC,YAAM;IAClB,IAAM4C,iBAAiB,GAAGT,oBAAoB,CAACU,OAAO;IACtD,IAAMC,gBAAgB,GAClBF,iBAAiB,CAACR,WAAW,KAAKhB,KAAK,CAACiB,MAAM,IAC9CO,iBAAiB,CAACf,OAAO,KAAKA,OAAO,IACrCe,iBAAiB,CAACrB,OAAO,KAAKA,OAAO;IAEzC,IAAIuB,gBAAgB,EAAE;MAAA,IAAAC,gBAAA;MAClB,CAAAA,gBAAA,GAAAb,OAAO,CAACW,OAAO,cAAAE,gBAAA,gBAAAA,gBAAA,GAAfA,gBAAA,CAAiBC,YAAY,CAACH,OAAO,cAAAE,gBAAA,eAArCA,gBAAA,CAAuCE,eAAe,CAClDC,IAAI,CAACC,GAAG,CAACP,iBAAiB,CAACR,WAAW,EAAEhB,KAAK,CAACiB,MAAM,CAAC,EACrD,IACJ,CAAC;MACDF,oBAAoB,CAACU,OAAO,GAAG;QAACT,WAAW,EAAEhB,KAAK,CAACiB,MAAM;QAAER,OAAO,EAAPA,OAAO;QAAEN,OAAO,EAAPA;MAAO,CAAC;IAChF;EACJ,CAAC,EAAE,CAACA,OAAO,EAAEH,KAAK,CAACiB,MAAM,EAAER,OAAO,CAAC,CAAC;EAEpC,IAAIC,KAAK,EAAE;IACP,oBAAOpB,IAAA,CAACX,KAAK,CAACqD,QAAQ;MAAAC,QAAA,EAAEvB;IAAK,CAAiB,CAAC;EACnD;EAEA,IAAMwB,KAAK,GAAGtB,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,CAACZ,KAAK,CAACiB,MAAM;EAEtC,IAAIR,OAAO,IAAIyB,KAAK,EAAE;IAClB,oBAAO5C,IAAA,CAACF,WAAW;MAACyB,SAAS,EAAEtB,KAAK,CAAC,SAAS,EAAEsB,SAAS;IAAE,CAAE,CAAC;EAClE;EAEA,IAAIqB,KAAK,EAAE;IACP,oBAAO5C,IAAA,CAACX,KAAK,CAACqD,QAAQ;MAAAC,QAAA,EAAEtB;IAAY,CAAiB,CAAC;EAC1D;EAEA,oBACIrB,IAAA,CAACN,IAAI;IACDmD,GAAG,EAAErB,OAAQ;IACbD,SAAS,EAAEtB,KAAK,CAAC,IAAI,EAAEsB,SAAS,CAAE;IAClCL,UAAU,EAAEA,UAAW;IACvBR,KAAK,EAAEmB,IAAK;IACZlB,UAAU,EAAEsB,YAAa;IACzBa,WAAW,EAAE,SAAbA,WAAWA,CAAGC,QAAQ;MAAA,OAClBA,QAAQ,CAACC,MAAM,CAAC,UAACC,KAAK,EAAE5C,GAAG;QAAA,OAAK4C,KAAK,GAAGhB,YAAY,CAAC5B,GAAG,CAAC;MAAA,GAAE,CAAC,CAAC;IAAA,CAChE;IACDO,UAAU,EAAE,SAAZA,UAAUA,CAAGP,GAAG,EAAE6C,QAAQ,EAAEC,KAAK;MAAA,OAC7B/C,aAAa,CAACC,GAAG,CAAC,gBACdL,IAAA;QACI6C,GAAG,EAAEjB,WAAY;QACjBL,SAAS,EAAEtB,KAAK,CAAC,UAAU,EAAE;UAACkB,OAAO,EAAEb,OAAO,CAACa,OAAO;QAAC,CAAC,CAAE;QAAAwB,QAAA,EAEzDxB,OAAO,iBACJnB,IAAA,CAACP,IAAI;UACD2D,UAAU,EAAC,QAAQ;UACnBC,cAAc,EAAC,QAAQ;UACvBC,KAAK,EAAC,MAAM;UACZC,MAAM,EAAC,MAAM;UAAAZ,QAAA,eAEb3C,IAAA,CAACL,MAAM,IAAE;QAAC,CACR;MACT,CACA,CAAC,GAENiB,WAAU,CAACP,GAAG,EAAE6C,QAAQ,EAAEC,KAAK,CAClC;IAAA,CACJ;IACDnC,iBAAiB,EAAEA,iBAA2B;IAC9CD,WAAW,EAAE,SAAbA,WAAWA,CAAGV,GAAG,EAAE8C,KAAK,EAAK;MACzB,IAAI,CAAC/C,aAAa,CAACC,GAAG,CAAC,EAAE;QACrBU,YAAW,aAAXA,YAAW,eAAXA,YAAW,CAAGV,GAAG,EAAE8C,KAAK,CAAC;MAC7B;IACJ;EAAE,CACL,CAAC;AAEV,CAAC","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,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":[]}
|
|
@@ -19,10 +19,11 @@
|
|
|
19
19
|
}
|
|
20
20
|
.qp-history-row__data {
|
|
21
21
|
display: grid;
|
|
22
|
-
grid-template-columns:
|
|
22
|
+
grid-template-columns: minmax(64px, max-content) 1fr;
|
|
23
23
|
grid-gap: 8px;
|
|
24
24
|
}
|
|
25
25
|
.qp-history-row__duration {
|
|
26
26
|
text-align: center;
|
|
27
|
+
white-space: nowrap;
|
|
27
28
|
}
|
|
28
29
|
/*# sourceMappingURL=HistoryRow.css.map */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["HistoryRow.scss"],"names":[],"mappings":"AAAA;EACE,YAAA;EACA,aAAA;EACA,+BAAA;EACA,aAAA;EAAA,QAAA;AACF;AACE;EACE,mDAAA;AACJ;AAEE;EACE,cAAA;AAAJ;AAGE;EACE,YAAA;AADJ;AAIE;EACE,gBAAA;AAFJ;AAKE;EACE,aAAA;EACA
|
|
1
|
+
{"version":3,"sources":["HistoryRow.scss"],"names":[],"mappings":"AAAA;EACE,YAAA;EACA,aAAA;EACA,+BAAA;EACA,aAAA;EAAA,QAAA;AACF;AACE;EACE,mDAAA;AACJ;AAEE;EACE,cAAA;AAAJ;AAGE;EACE,YAAA;AADJ;AAIE;EACE,gBAAA;AAFJ;AAKE;EACE,aAAA;EACA,oDAAA;EACA,aAAA;AAHJ;AAME;EACE,kBAAA;EACA,mBAAA;AAJJ","file":"HistoryRow.css","sourcesContent":[".qp-history-row {\n height: 100%;\n display: grid;\n grid-template-columns: 20px 1fr;\n gap: 4px;\n\n &_compared {\n background-color: var(--g-color-base-utility-light);\n }\n\n &__icon {\n flex: 0 0 20px;\n }\n\n &__header {\n height: 20px;\n }\n\n &__right-column {\n overflow: hidden;\n }\n\n &__data {\n display: grid;\n grid-template-columns: minmax(64px, max-content) 1fr;\n grid-gap: 8px;\n }\n\n &__duration {\n text-align: center;\n white-space: nowrap;\n }\n}\n"],"sourceRoot":""}
|
|
@@ -50,7 +50,7 @@ export var HistoryRow = function HistoryRow(_ref) {
|
|
|
50
50
|
})]
|
|
51
51
|
}), /*#__PURE__*/_jsxs("div", {
|
|
52
52
|
className: block('data'),
|
|
53
|
-
children: [isFieldVisible(visibleFields, 'duration') && startTime && /*#__PURE__*/_jsx(QueryDuration, {
|
|
53
|
+
children: [isFieldVisible(visibleFields, 'duration') && startTime !== undefined && /*#__PURE__*/_jsx(QueryDuration, {
|
|
54
54
|
className: block('duration'),
|
|
55
55
|
status: status,
|
|
56
56
|
startTime: startTime,
|
|
@@ -60,7 +60,7 @@ export var HistoryRow = function HistoryRow(_ref) {
|
|
|
60
60
|
children: [isFieldVisible(visibleFields, 'mode') && mode && /*#__PURE__*/_jsx(Text, {
|
|
61
61
|
color: "complementary",
|
|
62
62
|
children: mode
|
|
63
|
-
}), isFieldVisible(visibleFields, 'startTime') && startTime && /*#__PURE__*/_jsx(Text, {
|
|
63
|
+
}), isFieldVisible(visibleFields, 'startTime') && startTime !== undefined && /*#__PURE__*/_jsx(Text, {
|
|
64
64
|
color: "complementary",
|
|
65
65
|
children: formatTime(startTime)
|
|
66
66
|
}), isFieldVisible(visibleFields, 'engine') && engine && /*#__PURE__*/_jsx(Text, {
|