@localstack/appinspector-ui 1.0.56 → 1.0.57

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/dist/index.cjs CHANGED
@@ -12148,15 +12148,65 @@ var newSpanBackgroundColor = {
12148
12148
  dark: "#887b02",
12149
12149
  light: "#ffde7b"
12150
12150
  };
12151
+ var SpansDataGridRow = (0, import_react40.memo)(
12152
+ ({ row }) => {
12153
+ const theme = (0, import_material4.useTheme)();
12154
+ return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12155
+ import_material4.TableRow,
12156
+ {
12157
+ animate: {
12158
+ backgroundColor: "transparent"
12159
+ },
12160
+ component: motion.tr,
12161
+ initial: {
12162
+ backgroundColor: theme.palette.mode === "light" ? newSpanBackgroundColor.light : newSpanBackgroundColor.dark
12163
+ },
12164
+ sx: {
12165
+ transition: "background-color 1200ms ease-in"
12166
+ },
12167
+ children: row.getVisibleCells().map((cell) => {
12168
+ return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12169
+ import_material4.TableCell,
12170
+ {
12171
+ sx: {
12172
+ height: 36,
12173
+ maxWidth: `${cell.column.getSize().toString()}px`,
12174
+ minWidth: `${cell.column.getSize().toString()}px`
12175
+ },
12176
+ children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12177
+ import_material4.Box,
12178
+ {
12179
+ sx: {
12180
+ "alignItems": "center",
12181
+ "display": "flex",
12182
+ "flex-direction": "row",
12183
+ "height": "100%",
12184
+ "tr:hover &": {
12185
+ backgroundColor: (theme2) => theme2.palette.action.hover
12186
+ },
12187
+ "width": "100%"
12188
+ },
12189
+ children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.Box, { sx: { px: 1, width: "100%" }, children: flexRender(cell.column.columnDef.cell, cell.getContext()) })
12190
+ }
12191
+ )
12192
+ },
12193
+ cell.id
12194
+ );
12195
+ })
12196
+ },
12197
+ row.original.span_id
12198
+ );
12199
+ },
12200
+ // Since spans are immutable, we can cache this component by the span ID
12201
+ (previous, next) => previous.row.original.span_id === next.row.original.span_id
12202
+ );
12151
12203
  var SpansDataGrid = ({
12152
12204
  clearingSpans,
12153
12205
  fetchingBackward,
12154
- fetchingForward,
12155
12206
  hasMoreBackward,
12156
12207
  hasMoreForward,
12157
12208
  onClearSpans,
12158
12209
  onFetchBackward,
12159
- onFetchForward,
12160
12210
  onSpanClick,
12161
12211
  spans
12162
12212
  }) => {
@@ -12194,6 +12244,16 @@ var SpansDataGrid = ({
12194
12244
  size: 180
12195
12245
  }),
12196
12246
  columnHelper.accessor("operation_name", {
12247
+ cell: (props) => /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12248
+ import_material4.Box,
12249
+ {
12250
+ sx: {
12251
+ overflow: "hidden",
12252
+ textOverflow: "ellipsis"
12253
+ },
12254
+ children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("span", { title: props.getValue(), children: props.getValue() })
12255
+ }
12256
+ ),
12197
12257
  header: "Action",
12198
12258
  id: "operationName",
12199
12259
  size: 96
@@ -12234,7 +12294,6 @@ var SpansDataGrid = ({
12234
12294
  const columnCount = table.getAllColumns().length;
12235
12295
  const rows = table.getRowModel().rows;
12236
12296
  const hasRows = rows.length > 0;
12237
- const theme = (0, import_material4.useTheme)();
12238
12297
  return /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(import_jsx_runtime124.Fragment, { children: [
12239
12298
  /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.Grid, { item: true, xs: 12, children: /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(import_material4.Box, { sx: { alignItems: "center", display: "flex", gap: "0.5rem" }, children: [
12240
12299
  /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.Box, { sx: { flexGrow: 1 } }),
@@ -12296,74 +12355,20 @@ var SpansDataGrid = ({
12296
12355
  /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(import_material4.TableBody, { children: [
12297
12356
  spans === void 0 && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.TableCell, { colSpan: columnCount, sx: { fontStyle: "italic", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.CircularProgress, { size: 48, sx: { m: 4 } }) }) }),
12298
12357
  spans?.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.TableCell, { colSpan: columnCount, sx: { fontStyle: "italic", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("span", { children: "There are no spans" }) }) }),
12358
+ hasRows && !hasMoreBackward && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.TableCell, { colSpan: columnCount, sx: { fontStyle: "italic", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("span", { children: "This is the beginning of the stream" }) }) }),
12299
12359
  hasRows && hasMoreBackward && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(import_material4.TableCell, { colSpan: columnCount, sx: { textAlign: "center" }, children: [
12300
- !fetchingBackward && !fetchingForward && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12360
+ !fetchingBackward && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12301
12361
  import_material4.Button,
12302
12362
  {
12303
12363
  onClick: onFetchBackward,
12304
12364
  sx: { my: 1 },
12305
- children: "Load newer spans"
12306
- }
12307
- ),
12308
- (fetchingBackward || fetchingForward) && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.CircularProgress, { size: 24, sx: { m: 2 } })
12309
- ] }) }),
12310
- hasRows && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(AnimatePresence, { initial: false, children: rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12311
- import_material4.TableRow,
12312
- {
12313
- animate: {
12314
- backgroundColor: "transparent"
12315
- },
12316
- component: motion.tr,
12317
- initial: {
12318
- backgroundColor: theme.palette.mode === "light" ? newSpanBackgroundColor.light : newSpanBackgroundColor.dark
12319
- },
12320
- sx: {
12321
- transition: "background-color 1200ms ease-in"
12322
- },
12323
- children: row.getVisibleCells().map((cell) => {
12324
- return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12325
- import_material4.TableCell,
12326
- {
12327
- sx: {
12328
- height: 36,
12329
- maxWidth: `${cell.column.getSize().toString()}px`,
12330
- minWidth: `${cell.column.getSize().toString()}px`
12331
- },
12332
- children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12333
- import_material4.Box,
12334
- {
12335
- sx: {
12336
- "alignItems": "center",
12337
- "display": "flex",
12338
- "flex-direction": "row",
12339
- "height": "100%",
12340
- "tr:hover &": {
12341
- backgroundColor: (theme2) => theme2.palette.action.hover
12342
- },
12343
- "width": "100%"
12344
- },
12345
- children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.Box, { sx: { px: 1, width: "100%" }, children: flexRender(cell.column.columnDef.cell, cell.getContext()) })
12346
- }
12347
- )
12348
- },
12349
- cell.id
12350
- );
12351
- })
12352
- },
12353
- row.original.span_id
12354
- )) }),
12355
- hasRows && hasMoreForward && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(import_material4.TableCell, { colSpan: columnCount, sx: { textAlign: "center" }, children: [
12356
- !fetchingBackward && !fetchingForward && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
12357
- import_material4.Button,
12358
- {
12359
- onClick: onFetchForward,
12360
- sx: { my: 1 },
12361
12365
  children: "Load older spans"
12362
12366
  }
12363
12367
  ),
12364
- (fetchingBackward || fetchingForward) && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.CircularProgress, { size: 24, sx: { m: 2 } })
12368
+ fetchingBackward && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.CircularProgress, { size: 24, sx: { m: 2 } })
12365
12369
  ] }) }),
12366
- hasRows && !hasMoreForward && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.TableCell, { colSpan: columnCount, sx: { fontStyle: "italic", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("span", { children: "There are no older spans" }) }) })
12370
+ hasRows && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(AnimatePresence, { initial: false, children: rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(SpansDataGridRow, { row }, row.original.span_id)) }),
12371
+ hasRows && !hasMoreForward && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.TableCell, { colSpan: columnCount, sx: { fontStyle: "italic", textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("span", { children: "This is the end of the stream" }) }) })
12367
12372
  ] })
12368
12373
  ]
12369
12374
  }
@@ -12380,7 +12385,7 @@ var SpansList = (props) => {
12380
12385
  props.fetchError && /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)(
12381
12386
  import_material5.Alert,
12382
12387
  {
12383
- action: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_material5.Button, { onClick: props.onRefresh, children: "Retry" }),
12388
+ action: /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(import_material5.Button, { onClick: props.onFetchForward, children: "Retry" }),
12384
12389
  severity: "error",
12385
12390
  children: [
12386
12391
  "Unexpected error:",
@@ -12400,7 +12405,6 @@ var SpansList = (props) => {
12400
12405
  onClearSpans: props.onClearSpans,
12401
12406
  onFetchBackward: props.onFetchBackward,
12402
12407
  onFetchForward: props.onFetchForward,
12403
- onRefresh: props.onRefresh,
12404
12408
  onSpanClick: props.onSpanClick,
12405
12409
  refetching: props.refetching,
12406
12410
  spans: props.spans
@@ -12734,7 +12738,7 @@ var useStatus = () => {
12734
12738
  const hasFetchedReference = (0, import_react42.useRef)(false);
12735
12739
  const abortControllerReference = (0, import_react42.useRef)(null);
12736
12740
  const checkStatus = (0, import_react42.useCallback)(async () => {
12737
- if (abortControllerReference.current) {
12741
+ if (abortControllerReference.current !== null) {
12738
12742
  abortControllerReference.current.abort();
12739
12743
  }
12740
12744
  const abortController = new AbortController();
@@ -12767,26 +12771,53 @@ var useStatus = () => {
12767
12771
  };
12768
12772
 
12769
12773
  // src/utils/pagination-buffer.ts
12774
+ var insertSorted = (array, item, compareFunction, hint = "back") => {
12775
+ let left;
12776
+ let right;
12777
+ if (hint === "back") {
12778
+ left = array.length;
12779
+ right = array.length;
12780
+ let step = 1;
12781
+ while (left > 0 && compareFunction(array[left - 1], item) > 0) {
12782
+ right = left;
12783
+ left = Math.max(0, left - step);
12784
+ step *= 2;
12785
+ }
12786
+ } else {
12787
+ left = 0;
12788
+ right = 0;
12789
+ let step = 1;
12790
+ while (right < array.length && compareFunction(array[right], item) <= 0) {
12791
+ left = right + 1;
12792
+ right = Math.min(array.length, right + step);
12793
+ step *= 2;
12794
+ }
12795
+ }
12796
+ while (left < right) {
12797
+ const mid = left + right >>> 1;
12798
+ if (compareFunction(array[mid], item) <= 0) {
12799
+ left = mid + 1;
12800
+ } else {
12801
+ right = mid;
12802
+ }
12803
+ }
12804
+ array.splice(left, 0, item);
12805
+ };
12770
12806
  var createPaginationBuffer = (options) => {
12771
- const { fetchPage, pageSize } = options;
12772
- const items = [];
12773
- const pages2 = [];
12807
+ const { fetchPage } = options;
12808
+ let items = void 0;
12809
+ let nextForwardToken;
12810
+ let nextBackwardToken;
12811
+ let hasMoreForward = void 0;
12812
+ let hasMoreBackward = void 0;
12774
12813
  let fetchingForward = false;
12775
12814
  let fetchingBackward = false;
12776
- let refetching = false;
12777
- const hasMoreBackward = () => {
12778
- const firstPage = pages2[0];
12779
- return firstPage?.hasMoreBackward;
12780
- };
12781
- const hasMoreForward = () => {
12782
- const lastPage = pages2.at(-1);
12783
- return lastPage?.hasMoreForward;
12784
- };
12815
+ const refetching = false;
12785
12816
  const reportDataChange = () => {
12786
12817
  options.onDataChange({
12787
- hasMoreBackward: hasMoreBackward() ?? false,
12788
- hasMoreForward: hasMoreForward() ?? false,
12789
- items: structuredClone(items)
12818
+ hasMoreBackward: hasMoreBackward ?? false,
12819
+ hasMoreForward: hasMoreForward ?? false,
12820
+ items: items ?? []
12790
12821
  });
12791
12822
  };
12792
12823
  const reportStatusChange = () => {
@@ -12801,35 +12832,24 @@ var createPaginationBuffer = (options) => {
12801
12832
  };
12802
12833
  let fetchForwardLater = false;
12803
12834
  let fetchBackwardLater = false;
12804
- let refetchCurrentLater = false;
12805
12835
  const fetchForward = async () => {
12806
12836
  fetchingForward = true;
12807
12837
  reportStatusChange();
12808
12838
  try {
12809
- const lastPage = pages2.at(-1);
12810
- const token = lastPage?.nextForwardToken;
12811
- const newPage = await fetchPage(token, pageSize);
12812
- if (lastPage && lastPage.items.length < pageSize) {
12813
- lastPage.items.push(...newPage.items);
12814
- lastPage.nextForwardToken = newPage.nextForwardToken;
12815
- } else if (newPage.items.length > 0) {
12816
- pages2.push({
12817
- hasMoreBackward: newPage.hasMoreBackward,
12818
- hasMoreForward: newPage.hasMoreForward,
12819
- items: newPage.items,
12820
- nextBackwardToken: newPage.nextBackwardToken,
12821
- nextForwardToken: newPage.nextForwardToken,
12822
- token,
12823
- tokenDirection: "forward"
12824
- });
12825
- if (pages2.length > 3) {
12826
- const removedPage = pages2.shift();
12827
- if (removedPage) {
12828
- items.splice(0, removedPage.items.length);
12829
- }
12839
+ const newPage = await fetchPage(nextForwardToken);
12840
+ if (options.sortComparator === void 0) {
12841
+ items = [...items ?? [], ...newPage.items];
12842
+ } else {
12843
+ const merged = [...items ?? []];
12844
+ for (const item of newPage.items.toSorted(options.sortComparator)) {
12845
+ insertSorted(merged, item, options.sortComparator, "back");
12830
12846
  }
12847
+ items = merged;
12831
12848
  }
12832
- items.push(...newPage.items);
12849
+ hasMoreForward = newPage.hasMoreForward;
12850
+ nextForwardToken = newPage.nextForwardToken;
12851
+ hasMoreBackward ??= newPage.hasMoreBackward;
12852
+ nextBackwardToken ??= newPage.nextBackwardToken;
12833
12853
  reportDataChange();
12834
12854
  } catch (error) {
12835
12855
  reportError(error instanceof Error ? error : new Error("Failed to fetch forward page", { cause: error }));
@@ -12843,32 +12863,20 @@ var createPaginationBuffer = (options) => {
12843
12863
  fetchingBackward = true;
12844
12864
  reportStatusChange();
12845
12865
  try {
12846
- const firstPage = pages2[0];
12847
- const token = firstPage?.nextBackwardToken;
12848
- const newPage = await fetchPage(token, pageSize);
12849
- if (firstPage && firstPage.items.length < pageSize) {
12850
- firstPage.items.unshift(...newPage.items);
12851
- firstPage.nextBackwardToken = newPage.nextBackwardToken;
12852
- items.unshift(...newPage.items);
12853
- } else if (newPage.items.length > 0) {
12854
- pages2.unshift({
12855
- hasMoreBackward: newPage.hasMoreBackward,
12856
- hasMoreForward: newPage.hasMoreForward,
12857
- items: newPage.items,
12858
- nextBackwardToken: newPage.nextBackwardToken,
12859
- nextForwardToken: newPage.nextForwardToken,
12860
- token,
12861
- // If no token was used, the default direction is forward.
12862
- tokenDirection: token ? "backward" : "forward"
12863
- });
12864
- if (pages2.length > 3) {
12865
- const removedPage = pages2.pop();
12866
- if (removedPage) {
12867
- items.splice(items.length - removedPage.items.length, removedPage.items.length);
12868
- }
12866
+ const newPage = await fetchPage(nextBackwardToken);
12867
+ if (options.sortComparator === void 0) {
12868
+ items = [...newPage.items, ...items ?? []];
12869
+ } else {
12870
+ const merged = [...items ?? []];
12871
+ for (const item of newPage.items.toSorted(options.sortComparator)) {
12872
+ insertSorted(merged, item, options.sortComparator, "front");
12869
12873
  }
12870
- items.unshift(...newPage.items);
12874
+ items = merged;
12871
12875
  }
12876
+ hasMoreBackward = newPage.hasMoreBackward;
12877
+ nextBackwardToken = newPage.nextBackwardToken;
12878
+ hasMoreForward ??= newPage.hasMoreForward;
12879
+ nextForwardToken ??= newPage.nextForwardToken;
12872
12880
  reportDataChange();
12873
12881
  } catch (error) {
12874
12882
  reportError(error instanceof Error ? error : new Error("Failed to fetch forward page", { cause: error }));
@@ -12878,62 +12886,6 @@ var createPaginationBuffer = (options) => {
12878
12886
  }
12879
12887
  runPostFetchActions();
12880
12888
  };
12881
- const refetchCurrent = async () => {
12882
- if (pages2.length === 0) {
12883
- await fetchForward();
12884
- return;
12885
- }
12886
- refetching = true;
12887
- reportStatusChange();
12888
- try {
12889
- const backwardIndex = pages2.findLastIndex((page) => page.tokenDirection === "backward");
12890
- const backwardPage = backwardIndex === -1 ? void 0 : pages2[backwardIndex];
12891
- const backwardPageCount = backwardIndex + 1;
12892
- const forwardIndex = pages2.findIndex((page) => page.tokenDirection === "forward");
12893
- const forwardPage = forwardIndex === -1 ? void 0 : pages2[forwardIndex];
12894
- const forwardPageCount = forwardIndex === -1 ? 0 : pages2.length - forwardIndex;
12895
- const [backwardResponse, forwardResponse] = await Promise.all([
12896
- backwardPageCount > 0 ? fetchPage(backwardPage?.token, pageSize * backwardPageCount) : void 0,
12897
- forwardPageCount > 0 ? fetchPage(forwardPage?.token, pageSize * forwardPageCount) : void 0
12898
- ]);
12899
- pages2.length = 0;
12900
- items.length = 0;
12901
- if (backwardResponse) {
12902
- pages2.push({
12903
- hasMoreBackward: backwardResponse.hasMoreBackward,
12904
- hasMoreForward: backwardResponse.hasMoreForward,
12905
- items: backwardResponse.items,
12906
- nextBackwardToken: backwardResponse.nextBackwardToken,
12907
- nextForwardToken: backwardResponse.nextForwardToken,
12908
- token: backwardPage?.token,
12909
- tokenDirection: "backward"
12910
- });
12911
- items.push(...backwardResponse.items);
12912
- }
12913
- if (forwardResponse) {
12914
- pages2.push({
12915
- hasMoreBackward: forwardResponse.hasMoreBackward,
12916
- hasMoreForward: forwardResponse.hasMoreForward,
12917
- items: forwardResponse.items,
12918
- nextBackwardToken: forwardResponse.nextBackwardToken,
12919
- nextForwardToken: forwardResponse.nextForwardToken,
12920
- token: forwardPage?.token,
12921
- tokenDirection: "forward"
12922
- });
12923
- items.push(...forwardResponse.items);
12924
- }
12925
- reportDataChange();
12926
- if (hasMoreForward() === false) {
12927
- fetchForwardLater = true;
12928
- }
12929
- } catch (error) {
12930
- reportError(error instanceof Error ? error : new Error("Failed to fetch forward page", { cause: error }));
12931
- } finally {
12932
- refetching = false;
12933
- reportStatusChange();
12934
- }
12935
- runPostFetchActions();
12936
- };
12937
12889
  const runPostFetchActions = () => {
12938
12890
  if (fetchBackwardLater) {
12939
12891
  fetchBackwardLater = false;
@@ -12943,41 +12895,25 @@ var createPaginationBuffer = (options) => {
12943
12895
  fetchForwardLater = false;
12944
12896
  void fetchForward();
12945
12897
  }
12946
- if (refetchCurrentLater) {
12947
- refetchCurrentLater = false;
12948
- void refetchCurrent();
12949
- }
12950
12898
  };
12951
12899
  return {
12900
+ clear: () => {
12901
+ if (items !== void 0) {
12902
+ items.length = 0;
12903
+ reportDataChange();
12904
+ }
12905
+ },
12952
12906
  fetchBackward: () => {
12953
12907
  if (fetchingForward || fetchingBackward) {
12954
12908
  return;
12955
12909
  }
12956
- if (refetching) {
12957
- fetchBackwardLater = true;
12958
- return;
12959
- }
12960
12910
  void fetchBackward();
12961
12911
  },
12962
12912
  fetchForward: () => {
12963
12913
  if (fetchingForward || fetchingBackward) {
12964
12914
  return;
12965
12915
  }
12966
- if (refetching) {
12967
- fetchForwardLater = true;
12968
- return;
12969
- }
12970
12916
  void fetchForward();
12971
- },
12972
- refetchCurrent: () => {
12973
- if (fetchingForward || fetchingBackward || refetching) {
12974
- refetchCurrentLater = true;
12975
- return;
12976
- }
12977
- if (refetchCurrentLater) {
12978
- return;
12979
- }
12980
- void refetchCurrent();
12981
12917
  }
12982
12918
  };
12983
12919
  };
@@ -13269,7 +13205,7 @@ function useSpansWebSocket(options) {
13269
13205
  }
13270
13206
 
13271
13207
  // src/hooks/use-spans.ts
13272
- var PAGE_SIZE = 50;
13208
+ var PAGE_SIZE = 30;
13273
13209
  var useSpans = () => {
13274
13210
  const api = useAppInspectorApi();
13275
13211
  const [spans, setSpans] = (0, import_react46.useState)();
@@ -13278,9 +13214,9 @@ var useSpans = () => {
13278
13214
  const [fetchingBackward, setFetchingBackward] = (0, import_react46.useState)(false);
13279
13215
  const [refetching, setRefetching] = (0, import_react46.useState)(false);
13280
13216
  const paginationBuffer = (0, import_react46.useRef)(createPaginationBuffer({
13281
- async fetchPage(token, limit) {
13217
+ async fetchPage(token) {
13282
13218
  const response = await api.getSpans({
13283
- limit,
13219
+ limit: PAGE_SIZE,
13284
13220
  pagination_token: token
13285
13221
  });
13286
13222
  return {
@@ -13292,6 +13228,7 @@ var useSpans = () => {
13292
13228
  };
13293
13229
  },
13294
13230
  onDataChange: ({ hasMoreBackward: hasMoreBackward2, hasMoreForward: hasMoreForward2, items }) => {
13231
+ setFetchError(void 0);
13295
13232
  setSpans(items);
13296
13233
  setHasMoreBackward(hasMoreBackward2);
13297
13234
  setHasMoreForward(hasMoreForward2);
@@ -13304,7 +13241,12 @@ var useSpans = () => {
13304
13241
  setFetchingForward(status2.fetchingForward);
13305
13242
  setRefetching(status2.refetching);
13306
13243
  },
13307
- pageSize: PAGE_SIZE
13244
+ // The spans endpoint is sorted by span ingestion time, which might differ from
13245
+ // the span timestamp. In order to accomodate for this, we will sort the spans
13246
+ // in the frontend with the following sort comparator.
13247
+ sortComparator(a2, b2) {
13248
+ return a2.start_time_unix_nano < b2.start_time_unix_nano ? -1 : 1;
13249
+ }
13308
13250
  }));
13309
13251
  const [hasMoreBackward, setHasMoreBackward] = (0, import_react46.useState)();
13310
13252
  const [hasMoreForward, setHasMoreForward] = (0, import_react46.useState)();
@@ -13318,28 +13260,22 @@ var useSpans = () => {
13318
13260
  fetchForward();
13319
13261
  }, [fetchForward]);
13320
13262
  const { checkStatus, error: statusError, status } = useStatus();
13321
- const refreshSpans = (0, import_react46.useCallback)(() => {
13322
- paginationBuffer.current.refetchCurrent();
13323
- }, []);
13324
- (0, import_react46.useEffect)(() => {
13325
- refreshSpans();
13326
- }, [refreshSpans]);
13327
13263
  const [clearingSpans, setClearingSpans] = (0, import_react46.useState)(false);
13328
13264
  const clearSpans = (0, import_react46.useCallback)(async () => {
13329
13265
  setClearingSpans(true);
13330
13266
  try {
13331
13267
  await api.deleteSpans();
13332
- refreshSpans();
13268
+ paginationBuffer.current.clear();
13333
13269
  } catch (error) {
13334
13270
  console.error("Failed to delete spans:", error);
13335
13271
  setFetchError(error instanceof Error ? error : new Error("Failed to delete spans", { cause: error }));
13336
13272
  } finally {
13337
13273
  setClearingSpans(false);
13338
13274
  }
13339
- }, [refreshSpans, api]);
13275
+ }, [paginationBuffer, api]);
13340
13276
  useSpansWebSocket({
13341
13277
  onMessage: () => {
13342
- refreshSpans();
13278
+ paginationBuffer.current.fetchForward();
13343
13279
  }
13344
13280
  });
13345
13281
  return {
@@ -13354,7 +13290,6 @@ var useSpans = () => {
13354
13290
  hasMoreBackward,
13355
13291
  hasMoreForward,
13356
13292
  refetching,
13357
- refreshSpans,
13358
13293
  spans,
13359
13294
  status,
13360
13295
  statusError
@@ -14880,7 +14815,6 @@ var SpansListPage = () => {
14880
14815
  hasMoreBackward,
14881
14816
  hasMoreForward,
14882
14817
  refetching,
14883
- refreshSpans,
14884
14818
  spans,
14885
14819
  status,
14886
14820
  statusError
@@ -14933,7 +14867,6 @@ var SpansListPage = () => {
14933
14867
  onClearSpans: clearSpansSync,
14934
14868
  onFetchBackward: fetchBackward,
14935
14869
  onFetchForward: fetchForward,
14936
- onRefresh: refreshSpans,
14937
14870
  onSpanClick: navigateToSpan,
14938
14871
  refetching,
14939
14872
  spans