@orchestrator-ui/orchestrator-ui-components 7.0.1 → 7.1.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.
@@ -1,12 +1,12 @@
1
1
 
2
- > @orchestrator-ui/orchestrator-ui-components@7.0.1 build
2
+ > @orchestrator-ui/orchestrator-ui-components@7.1.0 build
3
3
  > npm run generate-version && tsup src/index.ts
4
4
 
5
5
 
6
- > @orchestrator-ui/orchestrator-ui-components@7.0.1 generate-version
6
+ > @orchestrator-ui/orchestrator-ui-components@7.1.0 generate-version
7
7
  > node -p "'export const ORCHESTRATOR_UI_LIBRARY_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'" > src/configuration/version.ts && prettier --write src/configuration/version.ts
8
8
 
9
- src/configuration/version.ts 126ms
9
+ src/configuration/version.ts 138ms
10
10
  CLI Building entry: src/index.ts
11
11
  CLI Using tsconfig: tsconfig.json
12
12
  CLI tsup v8.5.0
@@ -14,9 +14,9 @@ src/configuration/version.ts 126ms
14
14
  CLI Target: es2022
15
15
  CLI Cleaning output folder
16
16
  ESM Build start
17
- ESM dist/index.js 806.25 KB
18
- ESM dist/index.js.map 1.51 MB
19
- ESM ⚡️ Build success in 277ms
17
+ ESM dist/index.js 808.07 KB
18
+ ESM dist/index.js.map 1.52 MB
19
+ ESM ⚡️ Build success in 300ms
20
20
  DTS Build start
21
- DTS ⚡️ Build success in 18247ms
21
+ DTS ⚡️ Build success in 18219ms
22
22
  DTS dist/index.d.ts 1.08 MB
@@ -1,5 +1,5 @@
1
1
 
2
- > @orchestrator-ui/orchestrator-ui-components@7.0.1 lint
2
+ > @orchestrator-ui/orchestrator-ui-components@7.1.0 lint
3
3
  > eslint
4
4
 
5
5
 
@@ -1,21 +1,21 @@
1
1
 
2
- > @orchestrator-ui/orchestrator-ui-components@7.0.1 test
2
+ > @orchestrator-ui/orchestrator-ui-components@7.1.0 test
3
3
  > jest
4
4
 
5
+ PASS Wfo-UI Tests src/components/WfoSubscription/utils/utils.spec.ts
5
6
  PASS Wfo-UI Tests src/components/WfoTree/treeUtils.spec.ts
6
- PASS Wfo-UI Tests src/utils/date.spec.ts
7
7
  PASS Wfo-UI Tests src/pages/processes/timelineUtils.spec.ts
8
- PASS Wfo-UI Tests src/components/WfoSubscription/utils/utils.spec.ts
9
- PASS Wfo-UI Tests src/utils/string.spec.ts
8
+ PASS Wfo-UI Tests src/utils/date.spec.ts
10
9
  PASS Wfo-UI Tests src/utils/getProductNamesFromProcess.spec.ts
10
+ PASS Wfo-UI Tests src/utils/string.spec.ts
11
+ PASS Wfo-UI Tests src/utils/compareVersions.spec.ts
11
12
  PASS Wfo-UI Tests src/components/WfoTable/utils/tableUtils.spec.ts
12
13
  PASS Wfo-UI Tests src/components/WfoTable/WfoTable/WfoGroupedTable/utils.spec.ts
13
- PASS Wfo-UI Tests src/utils/compareVersions.spec.ts
14
14
  PASS Wfo-UI Tests src/components/WfoTable/WfoTableWithFilter/updateQueryString.spec.ts
15
15
  PASS Wfo-UI Tests src/components/WfoTable/utils/tableConfigPersistence.spec.ts
16
16
  PASS Wfo-UI Tests src/utils/optionalArray.spec.ts
17
- PASS Wfo-UI Tests src/rtk/utils.spec.ts
18
17
  PASS Wfo-UI Tests src/utils/resultFlattener.spec.ts
18
+ PASS Wfo-UI Tests src/rtk/utils.spec.ts
19
19
  PASS Wfo-UI Tests src/utils/getQueryParams.spec.ts
20
20
  PASS Wfo-UI Tests src/components/WfoPageTemplate/WfoSidebar/utils/menuItemIsAllowed.spec.ts
21
21
  PASS Wfo-UI Tests src/utils/getEnvironmentVariables.spec.ts
@@ -36,10 +36,10 @@ PASS Wfo-UI Tests src/utils/getQueryVariablesForExport.spec.ts
36
36
  PASS Wfo-UI Tests src/components/WfoPageTemplate/WfoPageHeader/utils/toHexColorWithOpacity.spec.ts
37
37
  PASS Wfo-UI Tests src/utils/getQueryUrl.spec.ts
38
38
  PASS Wfo-UI Tests src/components/WfoPydanticForm/fields/wfoPydanticFormUtils.spec.ts
39
- PASS Wfo-UI Tests src/components/WfoTable/WfoTable/utils.spec.ts (5.276 s)
39
+ PASS Wfo-UI Tests src/components/WfoTable/WfoTable/utils.spec.ts (5.368 s)
40
40
 
41
41
  Test Suites: 35 passed, 35 total
42
42
  Tests: 226 passed, 226 total
43
43
  Snapshots: 0 total
44
- Time: 7.847 s
44
+ Time: 7.962 s
45
45
  Ran all test suites.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @orchestrator-ui/orchestrator-ui-components
2
2
 
3
+ ## 7.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - f47c7ba: Adds react-virtual and virualized WfoTable feature
8
+
3
9
  ## 7.0.1
4
10
 
5
11
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -17441,6 +17441,9 @@ type Pagination = {
17441
17441
  onChangeItemsPerPage?: (pageSize: number) => void;
17442
17442
  onChangePage?: (pageIndex: number) => void;
17443
17443
  };
17444
+ type LocalColumnWidths = {
17445
+ [key: string]: string;
17446
+ };
17444
17447
  declare enum ColumnType {
17445
17448
  DATA = "data",
17446
17449
  CONTROL = "control"
@@ -17491,11 +17494,10 @@ type WfoTableProps<T extends object> = {
17491
17494
  onUpdateDataSearch?: (updatedDataSearch: WfoDataSearch<T>) => void;
17492
17495
  appendFillerColumn?: boolean;
17493
17496
  className?: string;
17497
+ isVirtualized?: boolean;
17498
+ height?: number;
17494
17499
  };
17495
- type LocalColumnWidths = {
17496
- [key: string]: string;
17497
- };
17498
- declare const WfoTable: <T extends object>({ data, columnConfig, hiddenColumns, columnOrder, isLoading, dataSorting, rowExpandingConfiguration, pagination, overrideHeader, onUpdateDataSorting, onUpdateDataSearch, onRowClick, appendFillerColumn, className, }: WfoTableProps<T>) => _emotion_react_jsx_runtime.JSX.Element;
17500
+ declare const WfoTable: <T extends object>({ data, columnConfig, hiddenColumns, columnOrder, isLoading, dataSorting, rowExpandingConfiguration, pagination, overrideHeader, onUpdateDataSorting, onUpdateDataSearch, onRowClick, appendFillerColumn, className, isVirtualized, height, }: WfoTableProps<T>) => _emotion_react_jsx_runtime.JSX.Element;
17499
17501
 
17500
17502
  declare const TABLE_ROW_HEIGHT = "40px";
17501
17503
 
@@ -23838,7 +23840,7 @@ declare const METADATA_PRODUCT_BLOCK_ENDPOINT = "product_blocks";
23838
23840
  declare const METADATA_RESOURCE_TYPE_ENDPOINT = "resource_types";
23839
23841
  declare const METADATA_WORKFLOWS_ENDPOINT = "workflows";
23840
23842
 
23841
- declare const ORCHESTRATOR_UI_LIBRARY_VERSION = "7.0.1";
23843
+ declare const ORCHESTRATOR_UI_LIBRARY_VERSION = "7.1.0";
23842
23844
 
23843
23845
  declare const useGetTranslationMessages: (locale: string | undefined) => {
23844
23846
  pydanticForms: {
package/dist/index.js CHANGED
@@ -65,7 +65,7 @@ var PolicyResource = /* @__PURE__ */ ((PolicyResource2) => {
65
65
  })(PolicyResource || {});
66
66
 
67
67
  // src/configuration/version.ts
68
- var ORCHESTRATOR_UI_LIBRARY_VERSION = "7.0.1";
68
+ var ORCHESTRATOR_UI_LIBRARY_VERSION = "7.1.0";
69
69
 
70
70
  // src/types/types.ts
71
71
  var EngineStatus = /* @__PURE__ */ ((EngineStatus2) => {
@@ -8444,9 +8444,10 @@ var graphQlRelatedSubscriptionsTerminatedSubscriptionsFilterMapper = (data) => d
8444
8444
  } : void 0;
8445
8445
 
8446
8446
  // src/components/WfoTable/WfoTable/WfoTable.tsx
8447
- import { useState as useState12 } from "react";
8447
+ import { useRef as useRef5, useState as useState12 } from "react";
8448
8448
  import { useTranslations as useTranslations25 } from "next-intl";
8449
8449
  import { EuiSpacer as EuiSpacer12, EuiTablePagination, useEuiScrollBar } from "@elastic/eui";
8450
+ import { useVirtualizer } from "@tanstack/react-virtual";
8450
8451
 
8451
8452
  // src/components/WfoTable/utils/constants.ts
8452
8453
  var DEFAULT_PAGE_SIZES = [5, 10, 15, 20, 25, 50, 100];
@@ -8677,6 +8678,9 @@ var getWfoTableStyles = ({ theme, isDarkThemeActive }) => {
8677
8678
  width: "100%"
8678
8679
  });
8679
8680
  const headerStyle = css16({
8681
+ position: "sticky",
8682
+ top: 0,
8683
+ zIndex: 3,
8680
8684
  backgroundColor: theme.colors.lightShade,
8681
8685
  fontSize: theme.size.m,
8682
8686
  textAlign: "left",
@@ -8715,7 +8719,7 @@ var getWfoTableStyles = ({ theme, isDarkThemeActive }) => {
8715
8719
  });
8716
8720
  const sortableHeaderCellStyle = css16({
8717
8721
  paddingRight: 0,
8718
- [`&:hover`]: {
8722
+ "&:hover": {
8719
8723
  [`.${SORTABLE_ICON_CLASS}`]: {
8720
8724
  visibility: "visible"
8721
8725
  },
@@ -9236,6 +9240,7 @@ var ColumnType = /* @__PURE__ */ ((ColumnType2) => {
9236
9240
  ColumnType2["CONTROL"] = "control";
9237
9241
  return ColumnType2;
9238
9242
  })(ColumnType || {});
9243
+ var ROW_HEIGHT = 44;
9239
9244
  var WfoTable = ({
9240
9245
  data,
9241
9246
  columnConfig,
@@ -9250,9 +9255,12 @@ var WfoTable = ({
9250
9255
  onUpdateDataSearch,
9251
9256
  onRowClick,
9252
9257
  appendFillerColumn = true,
9253
- className
9258
+ className,
9259
+ isVirtualized = false,
9260
+ height
9254
9261
  }) => {
9255
9262
  const [localColumnWidths, setLocalColumnWidths] = useState12(getColumnWidthsFromConfig(columnConfig));
9263
+ const parentRef = useRef5(null);
9256
9264
  const columnConfigWithFiller = appendFillerColumn ? {
9257
9265
  ...columnConfig,
9258
9266
  filler: {
@@ -9300,39 +9308,87 @@ var WfoTable = ({
9300
9308
  }
9301
9309
  return mergedConfig;
9302
9310
  }, {});
9311
+ const rowVirtualizer = useVirtualizer({
9312
+ count: data.length,
9313
+ getScrollElement: () => parentRef.current,
9314
+ estimateSize: () => ROW_HEIGHT,
9315
+ overscan: 10
9316
+ });
9317
+ const virtualItems = rowVirtualizer.getVirtualItems();
9318
+ const totalSize = rowVirtualizer.getTotalSize();
9319
+ const lastVirtualItemEnd = virtualItems.length > 0 ? virtualItems[virtualItems.length - 1].end : 0;
9320
+ const virtualTrHeight = virtualItems[0]?.start ?? 0;
9321
+ const bottomSpacerHeight = totalSize - lastVirtualItemEnd;
9303
9322
  return /* @__PURE__ */ jsxs62(Fragment19, { children: [
9304
- /* @__PURE__ */ jsx113("div", { css: [tableContainerStyle, useEuiScrollBar()], children: /* @__PURE__ */ jsxs62("table", { className, css: tableStyle, children: [
9305
- overrideHeader ? overrideHeader(sortedVisibleColumns) : /* @__PURE__ */ jsx113("thead", { css: headerStyle, children: /* @__PURE__ */ jsx113(
9306
- WfoTableHeaderRow,
9307
- {
9308
- columnConfig: configWithLocalWidths,
9309
- hiddenColumns,
9310
- columnOrder,
9311
- dataSorting,
9312
- onUpdateDataSorting,
9313
- onUpdateDataSearch,
9314
- onUpdateColumWidth
9315
- }
9316
- ) }),
9317
- data.length === 0 ? /* @__PURE__ */ jsx113("tbody", { css: isLoading && bodyLoadingStyle, children: /* @__PURE__ */ jsx113("tr", { css: rowStyle, children: /* @__PURE__ */ jsx113(
9318
- "td",
9319
- {
9320
- colSpan: sortedVisibleColumns.length,
9321
- css: [cellStyle, emptyTableMessageStyle],
9322
- children: isLoading ? t("loading") : t("noItemsFound")
9323
- }
9324
- ) }) }) : /* @__PURE__ */ jsx113("tbody", { css: isLoading && bodyLoadingStyle, children: /* @__PURE__ */ jsx113(
9325
- WfoTableDataRows,
9326
- {
9327
- data,
9328
- columnConfig: configWithLocalWidths,
9329
- hiddenColumns,
9330
- columnOrder,
9331
- rowExpandingConfiguration,
9332
- onRowClick
9333
- }
9334
- ) })
9335
- ] }) }),
9323
+ /* @__PURE__ */ jsx113(
9324
+ "div",
9325
+ {
9326
+ ref: parentRef,
9327
+ css: [tableContainerStyle, useEuiScrollBar()],
9328
+ style: isVirtualized && height ? { maxHeight: height, overflow: "auto" } : {},
9329
+ children: /* @__PURE__ */ jsxs62("table", { className, css: tableStyle, children: [
9330
+ overrideHeader ? overrideHeader(sortedVisibleColumns) : /* @__PURE__ */ jsx113("thead", { css: headerStyle, children: /* @__PURE__ */ jsx113(
9331
+ WfoTableHeaderRow,
9332
+ {
9333
+ columnConfig: configWithLocalWidths,
9334
+ hiddenColumns,
9335
+ columnOrder,
9336
+ dataSorting,
9337
+ onUpdateDataSorting,
9338
+ onUpdateDataSearch,
9339
+ onUpdateColumWidth
9340
+ }
9341
+ ) }),
9342
+ data.length === 0 ? /* @__PURE__ */ jsx113("tbody", { css: isLoading && bodyLoadingStyle, children: /* @__PURE__ */ jsx113("tr", { css: rowStyle, children: /* @__PURE__ */ jsx113(
9343
+ "td",
9344
+ {
9345
+ colSpan: sortedVisibleColumns.length,
9346
+ css: [cellStyle, emptyTableMessageStyle],
9347
+ children: isLoading ? t("loading") : t("noItemsFound")
9348
+ }
9349
+ ) }) }) : isVirtualized && height ? /* @__PURE__ */ jsxs62("tbody", { children: [
9350
+ /* @__PURE__ */ jsx113(
9351
+ "tr",
9352
+ {
9353
+ style: {
9354
+ height: virtualTrHeight
9355
+ }
9356
+ }
9357
+ ),
9358
+ virtualItems.map((virtualRow) => /* @__PURE__ */ jsx113(
9359
+ WfoTableDataRows,
9360
+ {
9361
+ data: [data[virtualRow.index]],
9362
+ columnConfig: configWithLocalWidths,
9363
+ hiddenColumns,
9364
+ columnOrder,
9365
+ rowExpandingConfiguration,
9366
+ onRowClick
9367
+ },
9368
+ virtualRow.key
9369
+ )),
9370
+ /* @__PURE__ */ jsx113(
9371
+ "tr",
9372
+ {
9373
+ style: {
9374
+ height: bottomSpacerHeight
9375
+ }
9376
+ }
9377
+ )
9378
+ ] }) : /* @__PURE__ */ jsx113("tbody", { css: isLoading && bodyLoadingStyle, children: /* @__PURE__ */ jsx113(
9379
+ WfoTableDataRows,
9380
+ {
9381
+ data,
9382
+ columnConfig: configWithLocalWidths,
9383
+ hiddenColumns,
9384
+ columnOrder,
9385
+ rowExpandingConfiguration,
9386
+ onRowClick
9387
+ }
9388
+ ) })
9389
+ ] })
9390
+ }
9391
+ ),
9336
9392
  pagination && /* @__PURE__ */ jsxs62("div", { css: paginationStyle, children: [
9337
9393
  /* @__PURE__ */ jsx113(EuiSpacer12, { size: "xs" }),
9338
9394
  /* @__PURE__ */ jsx113(
@@ -9355,7 +9411,7 @@ import { useTranslations as useTranslations27 } from "next-intl";
9355
9411
  import { EuiButtonEmpty as EuiButtonEmpty4, EuiFlexGroup as EuiFlexGroup8, EuiSpacer as EuiSpacer13 } from "@elastic/eui";
9356
9412
 
9357
9413
  // src/components/WfoTable/WfoTable/WfoGroupedTable/useGroupedTableConfig.tsx
9358
- import { useEffect as useEffect4, useRef as useRef5, useState as useState13 } from "react";
9414
+ import { useEffect as useEffect4, useRef as useRef6, useState as useState13 } from "react";
9359
9415
 
9360
9416
  // src/components/WfoTable/WfoTable/WfoGroupedTable/WfoExpandableRow.tsx
9361
9417
  import { useTranslations as useTranslations26 } from "next-intl";
@@ -9570,7 +9626,7 @@ var useGroupedTableConfig = ({
9570
9626
  nestingLevel = 0,
9571
9627
  notifyParent
9572
9628
  }) => {
9573
- const groupReferences = useRef5(/* @__PURE__ */ new Map());
9629
+ const groupReferences = useRef6(/* @__PURE__ */ new Map());
9574
9630
  const [expandedRowIds, setExpandedRowIds] = useState13([]);
9575
9631
  const [isAllGroupsExpanded, setIsAllGroupsExpanded] = useState13(false);
9576
9632
  const [isAllSubgroupsExpanded, setIsAllSubgroupsExpanded] = useState13([]);
@@ -9579,8 +9635,8 @@ var useGroupedTableConfig = ({
9579
9635
  groupName: key.toString()
9580
9636
  }));
9581
9637
  const numberOfColumnsInnerTable = Object.keys(columnConfig).length;
9582
- const notifyParentRef = useRef5(notifyParent);
9583
- const groupsRef = useRef5(groups);
9638
+ const notifyParentRef = useRef6(notifyParent);
9639
+ const groupsRef = useRef6(groups);
9584
9640
  useEffect4(() => {
9585
9641
  if (isExpanding) {
9586
9642
  groupReferences.current.forEach((ref) => {
@@ -12047,7 +12103,7 @@ var WfoInlineJson = ({ data }) => {
12047
12103
  };
12048
12104
 
12049
12105
  // src/components/WfoTable/WfoRowContextMenu/WfoRowContextMenu.tsx
12050
- import { useEffect as useEffect8, useRef as useRef6, useState as useState22 } from "react";
12106
+ import { useEffect as useEffect8, useRef as useRef7, useState as useState22 } from "react";
12051
12107
  import {
12052
12108
  EuiButtonIcon as EuiButtonIcon9,
12053
12109
  EuiContextMenu as EuiContextMenu2,
@@ -12059,7 +12115,7 @@ var WfoRowContextMenu = ({
12059
12115
  onOpenContextMenu
12060
12116
  }) => {
12061
12117
  const [isOpen, setIsOpen] = useState22(false);
12062
- const onOpenContextMenuRef = useRef6(onOpenContextMenu);
12118
+ const onOpenContextMenuRef = useRef7(onOpenContextMenu);
12063
12119
  useEffect8(() => {
12064
12120
  if (isOpen) {
12065
12121
  onOpenContextMenuRef.current?.();
@@ -13879,10 +13935,10 @@ var WfoProcessListSubscriptionsCell = ({
13879
13935
  };
13880
13936
 
13881
13937
  // src/pages/processes/WfoProcessDetailPage.tsx
13882
- import { useRef as useRef8 } from "react";
13938
+ import { useRef as useRef9 } from "react";
13883
13939
 
13884
13940
  // src/pages/processes/WfoProcessDetail.tsx
13885
- import { useContext as useContext8, useEffect as useEffect15, useRef as useRef7 } from "react";
13941
+ import { useContext as useContext8, useEffect as useEffect15, useRef as useRef8 } from "react";
13886
13942
  import { useTranslations as useTranslations47 } from "next-intl";
13887
13943
  import { useRouter as useRouter7 } from "next/router";
13888
13944
  import {
@@ -14003,7 +14059,7 @@ var ProcessHeaderValue = ({
14003
14059
  );
14004
14060
  };
14005
14061
  function useHasPreviousRoute() {
14006
- const hasPrev = useRef7(false);
14062
+ const hasPrev = useRef8(false);
14007
14063
  useEffect15(() => {
14008
14064
  if (document.referrer && document.referrer !== window.location.href) {
14009
14065
  hasPrev.current = true;
@@ -14276,7 +14332,7 @@ import { jsx as jsx171 } from "@emotion/react/jsx-runtime";
14276
14332
  var WfoProcessDetailPage = ({
14277
14333
  processId
14278
14334
  }) => {
14279
- const stepListRef = useRef8(null);
14335
+ const stepListRef = useRef9(null);
14280
14336
  const { data, isLoading, isError } = useGetProcessDetailQuery({
14281
14337
  processId
14282
14338
  });
@@ -16179,7 +16235,7 @@ var WfoStep = React58.forwardRef(
16179
16235
  WfoStep.displayName = "WfoStep";
16180
16236
 
16181
16237
  // src/components/WfoWorkflowSteps/WfoStepList/WfoStepList.tsx
16182
- import React59, { useImperativeHandle as useImperativeHandle2, useRef as useRef9 } from "react";
16238
+ import React59, { useImperativeHandle as useImperativeHandle2, useRef as useRef10 } from "react";
16183
16239
  import { Fragment as Fragment47, jsx as jsx196, jsxs as jsxs103 } from "@emotion/react/jsx-runtime";
16184
16240
  var WfoStepList = React59.forwardRef(
16185
16241
  ({
@@ -16197,7 +16253,7 @@ var WfoStepList = React59.forwardRef(
16197
16253
  const { TIMELINE_HEIGHT, TIMELINE_OUTLINE_WIDTH } = useWithOrchestratorTheme(getTimelineStyles);
16198
16254
  const { SPACE_BETWEEN_STEPS, stepSpacerStyle } = useWithOrchestratorTheme(getWorkflowStepsStyles);
16199
16255
  const scrollOffset = NAVIGATION_HEIGHT + TIMELINE_HEIGHT + TIMELINE_OUTLINE_WIDTH + SPACE_BETWEEN_STEPS;
16200
- const stepReferences = useRef9(/* @__PURE__ */ new Map());
16256
+ const stepReferences = useRef10(/* @__PURE__ */ new Map());
16201
16257
  const { contentRef } = useContentRef();
16202
16258
  useImperativeHandle2(reference, () => ({
16203
16259
  scrollToStep: async (stepId) => {
@@ -21042,7 +21098,7 @@ var WfoSearchLoadingState = () => {
21042
21098
  };
21043
21099
 
21044
21100
  // src/components/WfoSearchPage/WfoSearchResults/WfoSearchResultItem.tsx
21045
- import { useEffect as useEffect29, useRef as useRef10 } from "react";
21101
+ import { useEffect as useEffect29, useRef as useRef11 } from "react";
21046
21102
  import { useTranslations as useTranslations90 } from "next-intl";
21047
21103
  import {
21048
21104
  EuiButtonIcon as EuiButtonIcon16,
@@ -21166,7 +21222,7 @@ var WfoSearchResultItem = ({
21166
21222
  const { theme } = useOrchestratorTheme();
21167
21223
  const baseUrl = `${window.location.protocol}//${window.location.host}`;
21168
21224
  const detailUrl = getDetailUrl(result, baseUrl);
21169
- const itemRef = useRef10(null);
21225
+ const itemRef = useRef11(null);
21170
21226
  useEffect29(() => {
21171
21227
  if (isSelected && onPositionChange && itemRef.current) {
21172
21228
  onPositionChange(index, itemRef.current);