@parca/profile 0.19.139 → 0.19.142

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.
Files changed (170) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/GraphTooltipArrow/Content.js +224 -30
  3. package/dist/GraphTooltipArrow/DockedGraphTooltip/index.js +192 -33
  4. package/dist/GraphTooltipArrow/ExpandOnHoverValue.js +53 -3
  5. package/dist/GraphTooltipArrow/index.d.ts.map +1 -1
  6. package/dist/GraphTooltipArrow/index.js +86 -56
  7. package/dist/GraphTooltipArrow/useGraphTooltip/index.js +37 -37
  8. package/dist/GraphTooltipArrow/useGraphTooltipMetaInfo/index.js +103 -73
  9. package/dist/MatchersInput/SuggestionItem.js +91 -12
  10. package/dist/MatchersInput/SuggestionsList.d.ts +2 -1
  11. package/dist/MatchersInput/SuggestionsList.d.ts.map +1 -1
  12. package/dist/MatchersInput/SuggestionsList.js +371 -157
  13. package/dist/MatchersInput/SuggestionsList.test.d.ts +2 -0
  14. package/dist/MatchersInput/SuggestionsList.test.d.ts.map +1 -0
  15. package/dist/MatchersInput/index.js +308 -115
  16. package/dist/MetricsCircle/index.js +39 -3
  17. package/dist/MetricsGraph/MetricsContextMenu/index.js +119 -19
  18. package/dist/MetricsGraph/MetricsInfoPanel/index.js +81 -20
  19. package/dist/MetricsGraph/MetricsTooltip/index.d.ts.map +1 -1
  20. package/dist/MetricsGraph/MetricsTooltip/index.js +107 -74
  21. package/dist/MetricsGraph/index.js +552 -203
  22. package/dist/MetricsGraph/useMetricsGraphDimensions.js +46 -25
  23. package/dist/MetricsGraph/utils/colorMapping.js +24 -17
  24. package/dist/MetricsSeries/index.js +70 -7
  25. package/dist/PreSelectedMatchers/index.d.ts.map +1 -1
  26. package/dist/PreSelectedMatchers/index.js +249 -102
  27. package/dist/ProfileExplorer/ProfileExplorerCompare.js +240 -49
  28. package/dist/ProfileExplorer/ProfileExplorerSingle.js +98 -11
  29. package/dist/ProfileExplorer/index.js +183 -32
  30. package/dist/ProfileFlameChart/SamplesStrips/SamplesGraph/index.js +333 -148
  31. package/dist/ProfileFlameChart/SamplesStrips/SamplesStrips.stories.js +69 -35
  32. package/dist/ProfileFlameChart/SamplesStrips/index.js +645 -134
  33. package/dist/ProfileFlameChart/SamplesStrips/labelSetUtils.js +114 -55
  34. package/dist/ProfileFlameChart/index.js +266 -134
  35. package/dist/ProfileFlameGraph/FlameGraphArrow/ContextMenu.js +287 -88
  36. package/dist/ProfileFlameGraph/FlameGraphArrow/ContextMenuWrapper.js +56 -20
  37. package/dist/ProfileFlameGraph/FlameGraphArrow/FlameGraphNodes.js +211 -140
  38. package/dist/ProfileFlameGraph/FlameGraphArrow/MemoizedTooltip.js +133 -38
  39. package/dist/ProfileFlameGraph/FlameGraphArrow/MiniMap.js +261 -216
  40. package/dist/ProfileFlameGraph/FlameGraphArrow/TextWithEllipsis.d.ts.map +1 -1
  41. package/dist/ProfileFlameGraph/FlameGraphArrow/TextWithEllipsis.js +71 -45
  42. package/dist/ProfileFlameGraph/FlameGraphArrow/TooltipContext.d.ts.map +1 -1
  43. package/dist/ProfileFlameGraph/FlameGraphArrow/TooltipContext.js +58 -28
  44. package/dist/ProfileFlameGraph/FlameGraphArrow/ZoomControls.d.ts.map +1 -1
  45. package/dist/ProfileFlameGraph/FlameGraphArrow/ZoomControls.js +59 -8
  46. package/dist/ProfileFlameGraph/FlameGraphArrow/index.js +396 -179
  47. package/dist/ProfileFlameGraph/FlameGraphArrow/useBatchedRendering.d.ts.map +1 -1
  48. package/dist/ProfileFlameGraph/FlameGraphArrow/useBatchedRendering.js +68 -50
  49. package/dist/ProfileFlameGraph/FlameGraphArrow/useMappingList.js +62 -38
  50. package/dist/ProfileFlameGraph/FlameGraphArrow/useNodeColor.js +14 -6
  51. package/dist/ProfileFlameGraph/FlameGraphArrow/useScrollViewport.js +124 -82
  52. package/dist/ProfileFlameGraph/FlameGraphArrow/useVisibleNodes.js +160 -98
  53. package/dist/ProfileFlameGraph/FlameGraphArrow/useZoom.js +232 -112
  54. package/dist/ProfileFlameGraph/FlameGraphArrow/utils.js +137 -114
  55. package/dist/ProfileFlameGraph/benchmarks/benchdata/populateData.js +85 -0
  56. package/dist/ProfileFlameGraph/index.js +324 -148
  57. package/dist/ProfileMetricsGraph/hooks/useQueryRange.js +140 -32
  58. package/dist/ProfileMetricsGraph/index.js +518 -259
  59. package/dist/ProfileSelector/CompareButton.js +132 -12
  60. package/dist/ProfileSelector/MetricsGraphSection.js +234 -67
  61. package/dist/ProfileSelector/index.d.ts.map +1 -1
  62. package/dist/ProfileSelector/index.js +730 -142
  63. package/dist/ProfileSelector/useAutoQuerySelector.js +249 -130
  64. package/dist/ProfileSource.js +230 -163
  65. package/dist/ProfileTypeSelector/index.js +214 -125
  66. package/dist/ProfileView/components/ActionButtons/GroupByDropdown.js +50 -4
  67. package/dist/ProfileView/components/ActionButtons/SortByDropdown.js +139 -33
  68. package/dist/ProfileView/components/ColorStackLegend.js +184 -55
  69. package/dist/ProfileView/components/DashboardItems/index.js +87 -28
  70. package/dist/ProfileView/components/DashboardLayout/index.js +108 -16
  71. package/dist/ProfileView/components/DiffLegend.js +172 -29
  72. package/dist/ProfileView/components/GroupByLabelsDropdown/index.js +199 -55
  73. package/dist/ProfileView/components/InvertCallStack/index.js +99 -10
  74. package/dist/ProfileView/components/ProfileFilters/filterPresets.js +260 -315
  75. package/dist/ProfileView/components/ProfileFilters/index.js +518 -215
  76. package/dist/ProfileView/components/ProfileFilters/useProfileFilters.js +370 -306
  77. package/dist/ProfileView/components/ProfileFilters/useProfileFiltersUrlState.js +188 -120
  78. package/dist/ProfileView/components/ProfileHeader/index.js +105 -11
  79. package/dist/ProfileView/components/ShareButton/ResultBox.js +119 -16
  80. package/dist/ProfileView/components/ShareButton/index.js +352 -62
  81. package/dist/ProfileView/components/Toolbars/MultiLevelDropdown.d.ts.map +1 -1
  82. package/dist/ProfileView/components/Toolbars/MultiLevelDropdown.js +675 -195
  83. package/dist/ProfileView/components/Toolbars/SwitchMenuItem.js +94 -7
  84. package/dist/ProfileView/components/Toolbars/TableColumnsDropdown.js +198 -157
  85. package/dist/ProfileView/components/Toolbars/index.js +441 -21
  86. package/dist/ProfileView/components/ViewSelector/Dropdown.js +233 -22
  87. package/dist/ProfileView/components/ViewSelector/index.js +211 -91
  88. package/dist/ProfileView/components/VisualizationContainer/index.d.ts.map +1 -1
  89. package/dist/ProfileView/components/VisualizationContainer/index.js +52 -7
  90. package/dist/ProfileView/components/VisualizationPanel.js +185 -8
  91. package/dist/ProfileView/context/DashboardContext.js +84 -28
  92. package/dist/ProfileView/context/ProfileViewContext.js +56 -15
  93. package/dist/ProfileView/hooks/useAutoSelectDimension.js +71 -41
  94. package/dist/ProfileView/hooks/useProfileMetadata.js +50 -18
  95. package/dist/ProfileView/hooks/useResetFlameGraphState.js +31 -10
  96. package/dist/ProfileView/hooks/useResetStateOnProfileTypeChange.js +72 -29
  97. package/dist/ProfileView/hooks/useResetStateOnSeriesChange.js +39 -13
  98. package/dist/ProfileView/hooks/useVisualizationState.js +262 -87
  99. package/dist/ProfileView/index.js +383 -45
  100. package/dist/ProfileView/types/visualization.js +1 -13
  101. package/dist/ProfileView/utils/colorUtils.js +8 -7
  102. package/dist/ProfileViewWithData.js +332 -237
  103. package/dist/QueryControls/index.js +418 -47
  104. package/dist/Sandwich/components/CalleesSection.js +54 -4
  105. package/dist/Sandwich/components/CallersSection.js +97 -27
  106. package/dist/Sandwich/components/TableSection.js +77 -4
  107. package/dist/Sandwich/index.js +125 -12
  108. package/dist/Sandwich/utils/processRowData.js +48 -39
  109. package/dist/SelectWithRefresh/index.js +102 -28
  110. package/dist/SimpleMatchers/Select.js +520 -187
  111. package/dist/SimpleMatchers/index.js +590 -288
  112. package/dist/SourceView/Highlighter.js +230 -70
  113. package/dist/SourceView/LineNo.js +72 -17
  114. package/dist/SourceView/index.js +177 -101
  115. package/dist/SourceView/lang-detector/ext-to-lang.json +798 -798
  116. package/dist/SourceView/lang-detector/index.js +28 -14
  117. package/dist/SourceView/useSelectedLineRange.js +97 -16
  118. package/dist/Table/ColorCell.js +42 -1
  119. package/dist/Table/ColumnsVisibility.js +114 -6
  120. package/dist/Table/MoreDropdown.js +121 -27
  121. package/dist/Table/TableContextMenu.js +150 -139
  122. package/dist/Table/TableContextMenuWrapper.js +59 -14
  123. package/dist/Table/hooks/useColorManagement.js +58 -16
  124. package/dist/Table/hooks/useTableConfiguration.d.ts.map +1 -1
  125. package/dist/Table/hooks/useTableConfiguration.js +331 -168
  126. package/dist/Table/index.js +222 -126
  127. package/dist/Table/utils/functions.js +169 -144
  128. package/dist/Table/utils/topAndBottomExpandedRowModel.js +69 -52
  129. package/dist/TimelineGuide/index.js +209 -16
  130. package/dist/TopTable/benchmarks/benchdata/populateData.js +91 -0
  131. package/dist/TopTable/index.js +340 -122
  132. package/dist/contexts/LabelsQueryProvider.js +94 -32
  133. package/dist/contexts/UnifiedLabelsContext.js +114 -49
  134. package/dist/contexts/utils.js +37 -15
  135. package/dist/hooks/useCompareModeMeta.js +157 -94
  136. package/dist/hooks/useLabels.js +295 -52
  137. package/dist/hooks/useQueryState.js +371 -330
  138. package/dist/index.js +21 -16
  139. package/dist/testdata/fg-diff.json +3750 -0
  140. package/dist/testdata/fg-simple.json +1879 -0
  141. package/dist/testdata/link_data.json +56 -0
  142. package/dist/testdata/tabular.json +30 -0
  143. package/dist/testdata/test_flamegraph.json +26846 -0
  144. package/dist/testdata/test_graph.json +53 -0
  145. package/dist/useDelayedLoader.js +32 -18
  146. package/dist/useGrpcQuery/index.js +71 -11
  147. package/dist/useHasProfileData.js +90 -12
  148. package/dist/useQuery.js +205 -64
  149. package/dist/useSumBy.d.ts.map +1 -1
  150. package/dist/useSumBy.js +294 -138
  151. package/dist/utils.js +62 -30
  152. package/package.json +9 -9
  153. package/src/GraphTooltipArrow/index.tsx +3 -0
  154. package/src/MatchersInput/SuggestionsList.test.tsx +70 -0
  155. package/src/MatchersInput/SuggestionsList.tsx +11 -10
  156. package/src/MatchersInput/index.tsx +1 -1
  157. package/src/MetricsGraph/MetricsTooltip/index.tsx +22 -34
  158. package/src/PreSelectedMatchers/index.tsx +3 -0
  159. package/src/ProfileFlameGraph/FlameGraphArrow/TextWithEllipsis.tsx +3 -0
  160. package/src/ProfileFlameGraph/FlameGraphArrow/TooltipContext.tsx +3 -0
  161. package/src/ProfileFlameGraph/FlameGraphArrow/ZoomControls.tsx +3 -0
  162. package/src/ProfileFlameGraph/FlameGraphArrow/useBatchedRendering.ts +3 -0
  163. package/src/ProfileSelector/index.tsx +30 -7
  164. package/src/ProfileView/components/Toolbars/MultiLevelDropdown.tsx +3 -0
  165. package/src/ProfileView/components/VisualizationContainer/index.tsx +3 -0
  166. package/src/Table/hooks/useTableConfiguration.tsx +7 -13
  167. package/src/useDelayedLoader.ts +10 -10
  168. package/src/useSumBy.ts +12 -18
  169. package/dist/ProfileView/components/ProfileFilters/useProfileFiltersUrlState.test.js +0 -541
  170. package/dist/hooks/useQueryState.test.js +0 -984
@@ -1,3 +1,15 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
8
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
10
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
11
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
12
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
13
  // Copyright 2022 The Parca Authors
2
14
  // Licensed under the Apache License, Version 2.0 (the "License");
3
15
  // you may not use this file except in compliance with the License.
@@ -10,6 +22,7 @@
10
22
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
23
  // See the License for the specific language governing permissions and
12
24
  // limitations under the License.
25
+
13
26
  import { useCallback, useEffect, useMemo, useState } from 'react';
14
27
  import { DateTimeRange, useParcaContext, useURLState, useURLStateBatch } from '@parca/components';
15
28
  import { Query } from '@parca/parser';
@@ -17,335 +30,363 @@ import { ProfileSelectionFromParams } from '../ProfileSource';
17
30
  import { useResetFlameGraphState } from '../ProfileView/hooks/useResetFlameGraphState';
18
31
  import { useResetStateOnProfileTypeChange } from '../ProfileView/hooks/useResetStateOnProfileTypeChange';
19
32
  import { DEFAULT_EMPTY_SUM_BY, sumByToParam, useSumBy, useSumByFromParams } from '../useSumBy';
20
- export const useQueryState = (options = {}) => {
21
- const { queryServiceClient: queryClient } = useParcaContext();
22
- const { suffix = '', defaultExpression = '', defaultTimeSelection = 'relative:minute|15', // Default to 15 minutes relative
23
- defaultFrom, defaultTo, comparing = false, onProfileTypeChange, } = options;
24
- const batchUpdates = useURLStateBatch();
25
- const resetFlameGraphState = useResetFlameGraphState();
26
- const resetStateOnProfileTypeChange = useResetStateOnProfileTypeChange();
27
- // URL state hooks with appropriate suffixes
28
- const [expression, setExpressionState] = useURLState(`expression${suffix}`, {
29
- defaultValue: defaultExpression,
30
- });
31
- const [from, setFromState] = useURLState(`from${suffix}`, {
32
- defaultValue: defaultFrom?.toString(),
33
- });
34
- const [to, setToState] = useURLState(`to${suffix}`, {
35
- defaultValue: defaultTo?.toString(),
36
- });
37
- const [timeSelection, setTimeSelectionState] = useURLState(`time_selection${suffix}`, {
38
- defaultValue: defaultTimeSelection,
33
+ export var useQueryState = function useQueryState() {
34
+ var _ref, _ref2;
35
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
36
+ var _useParcaContext = useParcaContext(),
37
+ queryClient = _useParcaContext.queryServiceClient;
38
+ var _options$suffix = options.suffix,
39
+ suffix = _options$suffix === void 0 ? '' : _options$suffix,
40
+ _options$defaultExpre = options.defaultExpression,
41
+ defaultExpression = _options$defaultExpre === void 0 ? '' : _options$defaultExpre,
42
+ _options$defaultTimeS = options.defaultTimeSelection,
43
+ defaultTimeSelection = _options$defaultTimeS === void 0 ? 'relative:minute|15' : _options$defaultTimeS,
44
+ defaultFrom = options.defaultFrom,
45
+ defaultTo = options.defaultTo,
46
+ _options$comparing = options.comparing,
47
+ comparing = _options$comparing === void 0 ? false : _options$comparing,
48
+ onProfileTypeChange = options.onProfileTypeChange;
49
+ var batchUpdates = useURLStateBatch();
50
+ var resetFlameGraphState = useResetFlameGraphState();
51
+ var resetStateOnProfileTypeChange = useResetStateOnProfileTypeChange();
52
+
53
+ // URL state hooks with appropriate suffixes
54
+ var _useURLState = useURLState("expression".concat(suffix), {
55
+ defaultValue: defaultExpression
56
+ }),
57
+ _useURLState2 = _slicedToArray(_useURLState, 2),
58
+ expression = _useURLState2[0],
59
+ setExpressionState = _useURLState2[1];
60
+ var _useURLState3 = useURLState("from".concat(suffix), {
61
+ defaultValue: defaultFrom === null || defaultFrom === void 0 ? void 0 : defaultFrom.toString()
62
+ }),
63
+ _useURLState4 = _slicedToArray(_useURLState3, 2),
64
+ from = _useURLState4[0],
65
+ setFromState = _useURLState4[1];
66
+ var _useURLState5 = useURLState("to".concat(suffix), {
67
+ defaultValue: defaultTo === null || defaultTo === void 0 ? void 0 : defaultTo.toString()
68
+ }),
69
+ _useURLState6 = _slicedToArray(_useURLState5, 2),
70
+ to = _useURLState6[0],
71
+ setToState = _useURLState6[1];
72
+ var _useURLState7 = useURLState("time_selection".concat(suffix), {
73
+ defaultValue: defaultTimeSelection
74
+ }),
75
+ _useURLState8 = _slicedToArray(_useURLState7, 2),
76
+ timeSelection = _useURLState8[0],
77
+ setTimeSelectionState = _useURLState8[1];
78
+ var _useURLState9 = useURLState("sum_by".concat(suffix)),
79
+ _useURLState0 = _slicedToArray(_useURLState9, 2),
80
+ sumByParam = _useURLState0[0],
81
+ setSumByParam = _useURLState0[1];
82
+ var _useURLState1 = useURLState('group_by', {
83
+ alwaysReturnArray: true
84
+ }),
85
+ _useURLState10 = _slicedToArray(_useURLState1, 2),
86
+ setGroupByParam = _useURLState10[1];
87
+ var _useURLState11 = useURLState("merge_from".concat(suffix)),
88
+ _useURLState12 = _slicedToArray(_useURLState11, 2),
89
+ mergeFrom = _useURLState12[0],
90
+ setMergeFromState = _useURLState12[1];
91
+ var _useURLState13 = useURLState("merge_to".concat(suffix)),
92
+ _useURLState14 = _slicedToArray(_useURLState13, 2),
93
+ mergeTo = _useURLState14[0],
94
+ setMergeToState = _useURLState14[1];
95
+
96
+ // ProfileSelection URL state hooks - reuses merge_from/merge_to but adds selection
97
+ var _useURLState15 = useURLState("selection".concat(suffix)),
98
+ _useURLState16 = _slicedToArray(_useURLState15, 2),
99
+ selectionParam = _useURLState16[0],
100
+ setSelectionParam = _useURLState16[1];
101
+
102
+ // Parse sumBy from URL parameter format
103
+ var sumBy = useSumByFromParams(sumByParam);
104
+
105
+ // Draft state management
106
+ var _useState = useState(expression !== null && expression !== void 0 ? expression : defaultExpression),
107
+ _useState2 = _slicedToArray(_useState, 2),
108
+ draftExpression = _useState2[0],
109
+ setDraftExpression = _useState2[1];
110
+ var _useState3 = useState((_ref = from !== null && from !== void 0 ? from : defaultFrom === null || defaultFrom === void 0 ? void 0 : defaultFrom.toString()) !== null && _ref !== void 0 ? _ref : ''),
111
+ _useState4 = _slicedToArray(_useState3, 2),
112
+ draftFrom = _useState4[0],
113
+ setDraftFrom = _useState4[1];
114
+ var _useState5 = useState((_ref2 = to !== null && to !== void 0 ? to : defaultTo === null || defaultTo === void 0 ? void 0 : defaultTo.toString()) !== null && _ref2 !== void 0 ? _ref2 : ''),
115
+ _useState6 = _slicedToArray(_useState5, 2),
116
+ draftTo = _useState6[0],
117
+ setDraftTo = _useState6[1];
118
+ var _useState7 = useState(timeSelection !== null && timeSelection !== void 0 ? timeSelection : defaultTimeSelection),
119
+ _useState8 = _slicedToArray(_useState7, 2),
120
+ draftTimeSelection = _useState8[0],
121
+ setDraftTimeSelection = _useState8[1];
122
+ // Parse the draft query to extract profile information
123
+ var draftQuery = useMemo(function () {
124
+ try {
125
+ return Query.parse(draftExpression !== null && draftExpression !== void 0 ? draftExpression : '');
126
+ } catch (error) {
127
+ console.warn('Failed to parse draft expression', {
128
+ expression: draftExpression,
129
+ error: error instanceof Error ? error.message : String(error)
130
+ });
131
+ return Query.parse('');
132
+ }
133
+ }, [draftExpression]);
134
+ var query = useMemo(function () {
135
+ try {
136
+ return Query.parse(expression !== null && expression !== void 0 ? expression : '');
137
+ } catch (error_0) {
138
+ console.warn('Failed to parse expression', {
139
+ expression: expression,
140
+ error: error_0 instanceof Error ? error_0.message : String(error_0)
141
+ });
142
+ return Query.parse('');
143
+ }
144
+ }, [expression]);
145
+ var draftProfileType = useMemo(function () {
146
+ return draftQuery.profileType();
147
+ }, [draftQuery]);
148
+ var draftProfileName = useMemo(function () {
149
+ return draftQuery.profileName();
150
+ }, [draftQuery]);
151
+ var profileType = useMemo(function () {
152
+ return query.profileType();
153
+ }, [query]);
154
+
155
+ // Compute draft time range for label fetching
156
+ var draftTimeRange = useMemo(function () {
157
+ return DateTimeRange.fromRangeKey(draftTimeSelection !== null && draftTimeSelection !== void 0 ? draftTimeSelection : defaultTimeSelection, draftFrom !== '' ? parseInt(draftFrom) : defaultFrom, draftTo !== '' ? parseInt(draftTo) : defaultTo);
158
+ }, [draftTimeSelection, draftFrom, draftTo, defaultTimeSelection, defaultFrom, defaultTo]);
159
+ // Use combined sumBy hook for fetching labels and computing defaults (based on committed state)
160
+ var _useSumBy = useSumBy(queryClient, (profileType === null || profileType === void 0 ? void 0 : profileType.profileName) !== '' ? profileType : draftProfileType, draftTimeRange, draftProfileType, draftTimeRange, sumBy),
161
+ computedSumByFromURL = _useSumBy.sumBy,
162
+ sumBySelectionLoading = _useSumBy.isLoading,
163
+ draftSumBy = _useSumBy.draftSumBy,
164
+ setDraftSumBy = _useSumBy.setDraftSumBy,
165
+ isDraftSumByLoading = _useSumBy.isDraftSumByLoading;
166
+
167
+ // Sync draft state with URL state when URL changes externally
168
+ useEffect(function () {
169
+ setDraftExpression(expression !== null && expression !== void 0 ? expression : defaultExpression);
170
+ }, [expression, defaultExpression]);
171
+ useEffect(function () {
172
+ var _ref3;
173
+ setDraftFrom((_ref3 = from !== null && from !== void 0 ? from : defaultFrom === null || defaultFrom === void 0 ? void 0 : defaultFrom.toString()) !== null && _ref3 !== void 0 ? _ref3 : '');
174
+ }, [from, defaultFrom]);
175
+ useEffect(function () {
176
+ var _ref4;
177
+ setDraftTo((_ref4 = to !== null && to !== void 0 ? to : defaultTo === null || defaultTo === void 0 ? void 0 : defaultTo.toString()) !== null && _ref4 !== void 0 ? _ref4 : '');
178
+ }, [to, defaultTo]);
179
+ useEffect(function () {
180
+ setDraftTimeSelection(timeSelection !== null && timeSelection !== void 0 ? timeSelection : defaultTimeSelection);
181
+ }, [timeSelection, defaultTimeSelection]);
182
+ useEffect(function () {
183
+ setDraftSumBy(sumBy);
184
+ }, [sumBy, setDraftSumBy]);
185
+
186
+ // Sync computed sumBy to URL if URL doesn't already have a value
187
+ // to ensure the shared URL can always pick it up.
188
+ useEffect(function () {
189
+ if (sumByParam === undefined && computedSumByFromURL !== undefined && !sumBySelectionLoading) {
190
+ setSumByParam(sumByToParam(computedSumByFromURL));
191
+ }
192
+ }, [sumByParam, computedSumByFromURL, sumBySelectionLoading, setSumByParam]);
193
+
194
+ // Construct the QuerySelection object (committed state from URL)
195
+ var querySelection = useMemo(function () {
196
+ var range = DateTimeRange.fromRangeKey(timeSelection !== null && timeSelection !== void 0 ? timeSelection : defaultTimeSelection, from !== undefined && from !== '' ? parseInt(from) : defaultFrom, to !== undefined && to !== '' ? parseInt(to) : defaultTo);
197
+ return _objectSpread({
198
+ expression: expression !== null && expression !== void 0 ? expression : defaultExpression,
199
+ from: range.getFromMs(),
200
+ to: range.getToMs(),
201
+ timeSelection: range.getRangeKey(),
202
+ sumBy: computedSumByFromURL
203
+ }, mergeFrom !== undefined && mergeFrom !== '' && mergeTo !== undefined && mergeTo !== '' ? {
204
+ mergeFrom: mergeFrom,
205
+ mergeTo: mergeTo
206
+ } : {});
207
+ }, [expression, from, to, timeSelection, computedSumByFromURL, mergeFrom, mergeTo, defaultExpression, defaultTimeSelection, defaultFrom, defaultTo]);
208
+
209
+ // Construct the draft QuerySelection object (local draft state)
210
+ var draftSelection = useMemo(function () {
211
+ var isDelta = draftProfileType.delta;
212
+ var draftMergeFrom = isDelta ? (BigInt(draftTimeRange.getFromMs()) * 1000000n).toString() : undefined;
213
+ var draftMergeTo = isDelta ? (BigInt(draftTimeRange.getToMs()) * 1000000n).toString() : undefined;
214
+ var finalSumBy = draftSumBy !== null && draftSumBy !== void 0 ? draftSumBy : computedSumByFromURL;
215
+ return _objectSpread({
216
+ expression: draftExpression !== null && draftExpression !== void 0 ? draftExpression : defaultExpression,
217
+ from: draftTimeRange.getFromMs(),
218
+ to: draftTimeRange.getToMs(),
219
+ timeSelection: draftTimeRange.getRangeKey(),
220
+ sumBy: finalSumBy
221
+ }, draftMergeFrom !== undefined && draftMergeFrom !== '' && draftMergeTo !== undefined && draftMergeTo !== '' ? {
222
+ mergeFrom: draftMergeFrom,
223
+ mergeTo: draftMergeTo
224
+ } : {});
225
+ }, [draftExpression, draftTimeRange, draftSumBy, computedSumByFromURL, draftProfileType.delta, defaultExpression]);
226
+
227
+ // Compute ProfileSelection from URL params
228
+ var profileSelection = useMemo(function () {
229
+ return ProfileSelectionFromParams(mergeFrom, mergeTo, selectionParam);
230
+ }, [mergeFrom, mergeTo, selectionParam]);
231
+
232
+ // Compute ProfileSource from ProfileSelection
233
+ var profileSource = useMemo(function () {
234
+ if (profileSelection === null) return null;
235
+ return profileSelection.ProfileSource();
236
+ }, [profileSelection]);
237
+
238
+ // Commit draft changes to URL
239
+ // Optional refreshedTimeRange parameter allows re-evaluating relative time ranges (e.g., "last 15 minutes")
240
+ // to the current moment when the Search button is clicked
241
+ // Optional expression parameter allows updating the expression before committing
242
+ var commitDraft = useCallback(function (refreshedTimeRange, expression_0) {
243
+ batchUpdates(function () {
244
+ var _refreshedTimeRange$f, _refreshedTimeRange$f2, _refreshedTimeRange$t, _refreshedTimeRange$t2, _refreshedTimeRange$t3;
245
+ // Use provided expression or current draft expression
246
+ var finalExpression = expression_0 !== null && expression_0 !== void 0 ? expression_0 : draftExpression;
247
+
248
+ // Update draft state with new expression if provided
249
+ if (expression_0 !== undefined) {
250
+ setDraftExpression(expression_0);
251
+ }
252
+
253
+ // Calculate the actual from/to values from draftSelection if not provided
254
+ var calculatedFrom = draftSelection.from.toString();
255
+ var calculatedTo = draftSelection.to.toString();
256
+ var finalFrom = (_refreshedTimeRange$f = refreshedTimeRange === null || refreshedTimeRange === void 0 || (_refreshedTimeRange$f2 = refreshedTimeRange.from) === null || _refreshedTimeRange$f2 === void 0 ? void 0 : _refreshedTimeRange$f2.toString()) !== null && _refreshedTimeRange$f !== void 0 ? _refreshedTimeRange$f : draftFrom !== '' ? draftFrom : calculatedFrom;
257
+ var finalTo = (_refreshedTimeRange$t = refreshedTimeRange === null || refreshedTimeRange === void 0 || (_refreshedTimeRange$t2 = refreshedTimeRange.to) === null || _refreshedTimeRange$t2 === void 0 ? void 0 : _refreshedTimeRange$t2.toString()) !== null && _refreshedTimeRange$t !== void 0 ? _refreshedTimeRange$t : draftTo !== '' ? draftTo : calculatedTo;
258
+ var finalTimeSelection = (_refreshedTimeRange$t3 = refreshedTimeRange === null || refreshedTimeRange === void 0 ? void 0 : refreshedTimeRange.timeSelection) !== null && _refreshedTimeRange$t3 !== void 0 ? _refreshedTimeRange$t3 : draftTimeSelection;
259
+
260
+ // Update draft state with refreshed time range if provided
261
+ if ((refreshedTimeRange === null || refreshedTimeRange === void 0 ? void 0 : refreshedTimeRange.from) !== undefined) {
262
+ setDraftFrom(finalFrom);
263
+ }
264
+ if ((refreshedTimeRange === null || refreshedTimeRange === void 0 ? void 0 : refreshedTimeRange.to) !== undefined) {
265
+ setDraftTo(finalTo);
266
+ }
267
+ if ((refreshedTimeRange === null || refreshedTimeRange === void 0 ? void 0 : refreshedTimeRange.timeSelection) !== undefined) {
268
+ setDraftTimeSelection(finalTimeSelection);
269
+ }
270
+ setExpressionState(finalExpression);
271
+ setFromState(finalFrom);
272
+ setToState(finalTo);
273
+ setTimeSelectionState(finalTimeSelection);
274
+
275
+ // Auto-calculate merge parameters for delta profiles
276
+ // Parse the final expression to check if it's a delta profile
277
+ var finalQuery = Query.parse(finalExpression);
278
+ var isDelta_0 = finalQuery.profileType().delta;
279
+ if (isDelta_0) {
280
+ setSumByParam(sumByToParam(draftSumBy));
281
+ } else {
282
+ setSumByParam(DEFAULT_EMPTY_SUM_BY);
283
+ }
284
+ if (isDelta_0 && finalFrom !== '' && finalTo !== '') {
285
+ var fromMs = parseInt(finalFrom);
286
+ var toMs = parseInt(finalTo);
287
+ setMergeFromState((BigInt(fromMs) * 1000000n).toString());
288
+ setMergeToState((BigInt(toMs) * 1000000n).toString());
289
+
290
+ // Auto-select the time range for delta profiles (but not in compare mode)
291
+ // This applies both on initial load AND when Search is clicked
292
+ // The selection will use the final expression and the updated time range
293
+ if (!comparing) {
294
+ setSelectionParam(finalExpression);
295
+ } else {
296
+ setSelectionParam(undefined);
297
+ }
298
+ } else {
299
+ setMergeFromState(undefined);
300
+ setMergeToState(undefined);
301
+ // Clear ProfileSelection for non-delta profiles
302
+ setSelectionParam(undefined);
303
+ }
304
+ resetFlameGraphState();
305
+ if (draftProfileType.toString() !== Query.parse(querySelection.expression).profileType().toString()) {
306
+ resetStateOnProfileTypeChange();
307
+ onProfileTypeChange === null || onProfileTypeChange === void 0 || onProfileTypeChange();
308
+ }
39
309
  });
40
- const [sumByParam, setSumByParam] = useURLState(`sum_by${suffix}`);
41
- const [, setGroupByParam] = useURLState('group_by', {
42
- alwaysReturnArray: true,
310
+ }, [batchUpdates, draftExpression, draftFrom, draftTo, draftTimeSelection, draftSumBy, draftSelection.from, draftSelection.to, comparing, setExpressionState, setFromState, setToState, setTimeSelectionState, setSumByParam, setMergeFromState, setMergeToState, setSelectionParam, resetFlameGraphState, resetStateOnProfileTypeChange, onProfileTypeChange, draftProfileType, querySelection.expression]);
311
+ var setDraftTimeRange = useCallback(function (newFrom, newTo, newTimeSelection) {
312
+ setDraftFrom(newFrom.toString());
313
+ setDraftTo(newTo.toString());
314
+ setDraftTimeSelection(newTimeSelection);
315
+ }, []);
316
+ var setDraftSumByCallback = useCallback(function (newSumBy) {
317
+ setDraftSumBy(newSumBy);
318
+ }, [setDraftSumBy]);
319
+ var setDraftProfileName = useCallback(function (newProfileName) {
320
+ if (newProfileName === '') return;
321
+ var _draftQuery$setProfil = draftQuery.setProfileName(newProfileName),
322
+ _draftQuery$setProfil2 = _slicedToArray(_draftQuery$setProfil, 2),
323
+ newQuery = _draftQuery$setProfil2[0],
324
+ changed = _draftQuery$setProfil2[1];
325
+ if (changed) {
326
+ setDraftExpression(newQuery.toString());
327
+ setDraftSumBy(undefined);
328
+ }
329
+ }, [draftQuery, setDraftSumBy]);
330
+ var setDraftMatchers = useCallback(function (matchers) {
331
+ var newExpression = "".concat(draftProfileName, "{").concat(matchers, "}");
332
+ setDraftExpression(newExpression);
333
+ }, [draftProfileName]);
334
+
335
+ // Set ProfileSelection (auto-commits to URL immediately)
336
+ var setProfileSelection = useCallback(function (mergeFrom_0, mergeTo_0, query_0) {
337
+ batchUpdates(function () {
338
+ setSelectionParam(query_0.toString());
339
+ setMergeFromState(mergeFrom_0.toString());
340
+ setMergeToState(mergeTo_0.toString());
43
341
  });
44
- const [mergeFrom, setMergeFromState] = useURLState(`merge_from${suffix}`);
45
- const [mergeTo, setMergeToState] = useURLState(`merge_to${suffix}`);
46
- // ProfileSelection URL state hooks - reuses merge_from/merge_to but adds selection
47
- const [selectionParam, setSelectionParam] = useURLState(`selection${suffix}`);
48
- // Parse sumBy from URL parameter format
49
- const sumBy = useSumByFromParams(sumByParam);
50
- // Draft state management
51
- const [draftExpression, setDraftExpression] = useState(expression ?? defaultExpression);
52
- const [draftFrom, setDraftFrom] = useState(from ?? defaultFrom?.toString() ?? '');
53
- const [draftTo, setDraftTo] = useState(to ?? defaultTo?.toString() ?? '');
54
- const [draftTimeSelection, setDraftTimeSelection] = useState(timeSelection ?? defaultTimeSelection);
55
- // Parse the draft query to extract profile information
56
- const draftQuery = useMemo(() => {
57
- try {
58
- return Query.parse(draftExpression ?? '');
59
- }
60
- catch (error) {
61
- console.warn('Failed to parse draft expression', {
62
- expression: draftExpression,
63
- error: error instanceof Error ? error.message : String(error),
64
- });
65
- return Query.parse('');
66
- }
67
- }, [draftExpression]);
68
- const query = useMemo(() => {
69
- try {
70
- return Query.parse(expression ?? '');
71
- }
72
- catch (error) {
73
- console.warn('Failed to parse expression', {
74
- expression,
75
- error: error instanceof Error ? error.message : String(error),
76
- });
77
- return Query.parse('');
78
- }
79
- }, [expression]);
80
- const draftProfileType = useMemo(() => draftQuery.profileType(), [draftQuery]);
81
- const draftProfileName = useMemo(() => draftQuery.profileName(), [draftQuery]);
82
- const profileType = useMemo(() => query.profileType(), [query]);
83
- // Compute draft time range for label fetching
84
- const draftTimeRange = useMemo(() => {
85
- return DateTimeRange.fromRangeKey(draftTimeSelection ?? defaultTimeSelection, draftFrom !== '' ? parseInt(draftFrom) : defaultFrom, draftTo !== '' ? parseInt(draftTo) : defaultTo);
86
- }, [draftTimeSelection, draftFrom, draftTo, defaultTimeSelection, defaultFrom, defaultTo]);
87
- // Use combined sumBy hook for fetching labels and computing defaults (based on committed state)
88
- const { sumBy: computedSumByFromURL, isLoading: sumBySelectionLoading, draftSumBy, setDraftSumBy, isDraftSumByLoading, } = useSumBy(queryClient, profileType?.profileName !== '' ? profileType : draftProfileType, draftTimeRange, draftProfileType, draftTimeRange, sumBy);
89
- // Sync draft state with URL state when URL changes externally
90
- useEffect(() => {
91
- setDraftExpression(expression ?? defaultExpression);
92
- }, [expression, defaultExpression]);
93
- useEffect(() => {
94
- setDraftFrom(from ?? defaultFrom?.toString() ?? '');
95
- }, [from, defaultFrom]);
96
- useEffect(() => {
97
- setDraftTo(to ?? defaultTo?.toString() ?? '');
98
- }, [to, defaultTo]);
99
- useEffect(() => {
100
- setDraftTimeSelection(timeSelection ?? defaultTimeSelection);
101
- }, [timeSelection, defaultTimeSelection]);
102
- useEffect(() => {
103
- setDraftSumBy(sumBy);
104
- }, [sumBy, setDraftSumBy]);
105
- // Sync computed sumBy to URL if URL doesn't already have a value
106
- // to ensure the shared URL can always pick it up.
107
- useEffect(() => {
108
- if (sumByParam === undefined && computedSumByFromURL !== undefined && !sumBySelectionLoading) {
109
- setSumByParam(sumByToParam(computedSumByFromURL));
110
- }
111
- }, [sumByParam, computedSumByFromURL, sumBySelectionLoading, setSumByParam]);
112
- // Construct the QuerySelection object (committed state from URL)
113
- const querySelection = useMemo(() => {
114
- const range = DateTimeRange.fromRangeKey(timeSelection ?? defaultTimeSelection, from !== undefined && from !== '' ? parseInt(from) : defaultFrom, to !== undefined && to !== '' ? parseInt(to) : defaultTo);
115
- return {
116
- expression: expression ?? defaultExpression,
117
- from: range.getFromMs(),
118
- to: range.getToMs(),
119
- timeSelection: range.getRangeKey(),
120
- sumBy: computedSumByFromURL,
121
- ...(mergeFrom !== undefined && mergeFrom !== '' && mergeTo !== undefined && mergeTo !== ''
122
- ? { mergeFrom, mergeTo }
123
- : {}),
124
- };
125
- }, [
126
- expression,
127
- from,
128
- to,
129
- timeSelection,
130
- computedSumByFromURL,
131
- mergeFrom,
132
- mergeTo,
133
- defaultExpression,
134
- defaultTimeSelection,
135
- defaultFrom,
136
- defaultTo,
137
- ]);
138
- // Construct the draft QuerySelection object (local draft state)
139
- const draftSelection = useMemo(() => {
140
- const isDelta = draftProfileType.delta;
141
- const draftMergeFrom = isDelta
142
- ? (BigInt(draftTimeRange.getFromMs()) * 1000000n).toString()
143
- : undefined;
144
- const draftMergeTo = isDelta
145
- ? (BigInt(draftTimeRange.getToMs()) * 1000000n).toString()
146
- : undefined;
147
- const finalSumBy = draftSumBy ?? computedSumByFromURL;
148
- return {
149
- expression: draftExpression ?? defaultExpression,
150
- from: draftTimeRange.getFromMs(),
151
- to: draftTimeRange.getToMs(),
152
- timeSelection: draftTimeRange.getRangeKey(),
153
- sumBy: finalSumBy, // Use draft if set, otherwise fallback to computed
154
- ...(draftMergeFrom !== undefined &&
155
- draftMergeFrom !== '' &&
156
- draftMergeTo !== undefined &&
157
- draftMergeTo !== ''
158
- ? { mergeFrom: draftMergeFrom, mergeTo: draftMergeTo }
159
- : {}),
160
- };
161
- }, [
162
- draftExpression,
163
- draftTimeRange,
164
- draftSumBy,
165
- computedSumByFromURL,
166
- draftProfileType.delta,
167
- defaultExpression,
168
- ]);
169
- // Compute ProfileSelection from URL params
170
- const profileSelection = useMemo(() => {
171
- return ProfileSelectionFromParams(mergeFrom, mergeTo, selectionParam);
172
- }, [mergeFrom, mergeTo, selectionParam]);
173
- // Compute ProfileSource from ProfileSelection
174
- const profileSource = useMemo(() => {
175
- if (profileSelection === null)
176
- return null;
177
- return profileSelection.ProfileSource();
178
- }, [profileSelection]);
179
- // Commit draft changes to URL
180
- // Optional refreshedTimeRange parameter allows re-evaluating relative time ranges (e.g., "last 15 minutes")
181
- // to the current moment when the Search button is clicked
182
- // Optional expression parameter allows updating the expression before committing
183
- const commitDraft = useCallback((refreshedTimeRange, expression) => {
184
- batchUpdates(() => {
185
- // Use provided expression or current draft expression
186
- const finalExpression = expression ?? draftExpression;
187
- // Update draft state with new expression if provided
188
- if (expression !== undefined) {
189
- setDraftExpression(expression);
190
- }
191
- // Calculate the actual from/to values from draftSelection if not provided
192
- const calculatedFrom = draftSelection.from.toString();
193
- const calculatedTo = draftSelection.to.toString();
194
- const finalFrom = refreshedTimeRange?.from?.toString() ?? (draftFrom !== '' ? draftFrom : calculatedFrom);
195
- const finalTo = refreshedTimeRange?.to?.toString() ?? (draftTo !== '' ? draftTo : calculatedTo);
196
- const finalTimeSelection = refreshedTimeRange?.timeSelection ?? draftTimeSelection;
197
- // Update draft state with refreshed time range if provided
198
- if (refreshedTimeRange?.from !== undefined) {
199
- setDraftFrom(finalFrom);
200
- }
201
- if (refreshedTimeRange?.to !== undefined) {
202
- setDraftTo(finalTo);
203
- }
204
- if (refreshedTimeRange?.timeSelection !== undefined) {
205
- setDraftTimeSelection(finalTimeSelection);
206
- }
207
- setExpressionState(finalExpression);
208
- setFromState(finalFrom);
209
- setToState(finalTo);
210
- setTimeSelectionState(finalTimeSelection);
211
- // Auto-calculate merge parameters for delta profiles
212
- // Parse the final expression to check if it's a delta profile
213
- const finalQuery = Query.parse(finalExpression);
214
- const isDelta = finalQuery.profileType().delta;
215
- if (isDelta) {
216
- setSumByParam(sumByToParam(draftSumBy));
217
- }
218
- else {
219
- setSumByParam(DEFAULT_EMPTY_SUM_BY);
220
- }
221
- if (isDelta && finalFrom !== '' && finalTo !== '') {
222
- const fromMs = parseInt(finalFrom);
223
- const toMs = parseInt(finalTo);
224
- setMergeFromState((BigInt(fromMs) * 1000000n).toString());
225
- setMergeToState((BigInt(toMs) * 1000000n).toString());
226
- // Auto-select the time range for delta profiles (but not in compare mode)
227
- // This applies both on initial load AND when Search is clicked
228
- // The selection will use the final expression and the updated time range
229
- if (!comparing) {
230
- setSelectionParam(finalExpression);
231
- }
232
- else {
233
- setSelectionParam(undefined);
234
- }
235
- }
236
- else {
237
- setMergeFromState(undefined);
238
- setMergeToState(undefined);
239
- // Clear ProfileSelection for non-delta profiles
240
- setSelectionParam(undefined);
241
- }
242
- resetFlameGraphState();
243
- if (draftProfileType.toString() !==
244
- Query.parse(querySelection.expression).profileType().toString()) {
245
- resetStateOnProfileTypeChange();
246
- onProfileTypeChange?.();
247
- }
248
- });
249
- }, [
250
- batchUpdates,
251
- draftExpression,
252
- draftFrom,
253
- draftTo,
254
- draftTimeSelection,
255
- draftSumBy,
256
- draftSelection.from,
257
- draftSelection.to,
258
- comparing,
259
- setExpressionState,
260
- setFromState,
261
- setToState,
262
- setTimeSelectionState,
263
- setSumByParam,
264
- setMergeFromState,
265
- setMergeToState,
266
- setSelectionParam,
267
- resetFlameGraphState,
268
- resetStateOnProfileTypeChange,
269
- onProfileTypeChange,
270
- draftProfileType,
271
- querySelection.expression,
272
- ]);
273
- const setDraftTimeRange = useCallback((newFrom, newTo, newTimeSelection) => {
274
- setDraftFrom(newFrom.toString());
275
- setDraftTo(newTo.toString());
276
- setDraftTimeSelection(newTimeSelection);
277
- }, []);
278
- const setDraftSumByCallback = useCallback((newSumBy) => {
279
- setDraftSumBy(newSumBy);
280
- }, [setDraftSumBy]);
281
- const setDraftProfileName = useCallback((newProfileName) => {
282
- if (newProfileName === '')
283
- return;
284
- const [newQuery, changed] = draftQuery.setProfileName(newProfileName);
285
- if (changed) {
286
- setDraftExpression(newQuery.toString());
287
- setDraftSumBy(undefined);
288
- }
289
- }, [draftQuery, setDraftSumBy]);
290
- const setDraftMatchers = useCallback((matchers) => {
291
- const newExpression = `${draftProfileName}{${matchers}}`;
292
- setDraftExpression(newExpression);
293
- }, [draftProfileName]);
294
- // Set ProfileSelection (auto-commits to URL immediately)
295
- const setProfileSelection = useCallback((mergeFrom, mergeTo, query) => {
296
- batchUpdates(() => {
297
- setSelectionParam(query.toString());
298
- setMergeFromState(mergeFrom.toString());
299
- setMergeToState(mergeTo.toString());
300
- });
301
- }, [batchUpdates, setSelectionParam, setMergeFromState, setMergeToState]);
302
- const draftParsedQuery = useMemo(() => {
303
- try {
304
- return Query.parse(draftSelection.expression ?? '');
305
- }
306
- catch (error) {
307
- console.warn('Failed to parse draft selection expression', {
308
- expression: draftSelection.expression,
309
- error: error instanceof Error ? error.message : String(error),
310
- });
311
- return Query.parse('');
312
- }
313
- }, [draftSelection.expression]);
314
- const parsedQuery = useMemo(() => {
315
- try {
316
- return Query.parse(querySelection.expression ?? '');
317
- }
318
- catch (error) {
319
- console.warn('Failed to parse query selection expression', {
320
- expression: querySelection.expression,
321
- error: error instanceof Error ? error.message : String(error),
322
- });
323
- return Query.parse('');
324
- }
325
- }, [querySelection.expression]);
326
- return {
327
- // Current committed state
328
- querySelection,
329
- // Draft state
330
- draftSelection,
331
- // Draft setters
332
- setDraftExpression,
333
- setDraftTimeRange,
334
- setDraftSumBy: setDraftSumByCallback,
335
- setDraftProfileName,
336
- setDraftMatchers,
337
- // Commit function
338
- commitDraft,
339
- // ProfileSelection state
340
- profileSelection,
341
- profileSource,
342
- setProfileSelection,
343
- // Loading state
344
- sumByLoading: isDraftSumByLoading || sumBySelectionLoading,
345
- draftParsedQuery,
346
- parsedQuery,
347
- setExpressionParam: setExpressionState,
348
- setSumByParam,
349
- setGroupByParam,
350
- };
351
- };
342
+ }, [batchUpdates, setSelectionParam, setMergeFromState, setMergeToState]);
343
+ var draftParsedQuery = useMemo(function () {
344
+ try {
345
+ var _draftSelection$expre;
346
+ return Query.parse((_draftSelection$expre = draftSelection.expression) !== null && _draftSelection$expre !== void 0 ? _draftSelection$expre : '');
347
+ } catch (error_1) {
348
+ console.warn('Failed to parse draft selection expression', {
349
+ expression: draftSelection.expression,
350
+ error: error_1 instanceof Error ? error_1.message : String(error_1)
351
+ });
352
+ return Query.parse('');
353
+ }
354
+ }, [draftSelection.expression]);
355
+ var parsedQuery = useMemo(function () {
356
+ try {
357
+ var _querySelection$expre;
358
+ return Query.parse((_querySelection$expre = querySelection.expression) !== null && _querySelection$expre !== void 0 ? _querySelection$expre : '');
359
+ } catch (error_2) {
360
+ console.warn('Failed to parse query selection expression', {
361
+ expression: querySelection.expression,
362
+ error: error_2 instanceof Error ? error_2.message : String(error_2)
363
+ });
364
+ return Query.parse('');
365
+ }
366
+ }, [querySelection.expression]);
367
+ return {
368
+ // Current committed state
369
+ querySelection: querySelection,
370
+ // Draft state
371
+ draftSelection: draftSelection,
372
+ // Draft setters
373
+ setDraftExpression: setDraftExpression,
374
+ setDraftTimeRange: setDraftTimeRange,
375
+ setDraftSumBy: setDraftSumByCallback,
376
+ setDraftProfileName: setDraftProfileName,
377
+ setDraftMatchers: setDraftMatchers,
378
+ // Commit function
379
+ commitDraft: commitDraft,
380
+ // ProfileSelection state
381
+ profileSelection: profileSelection,
382
+ profileSource: profileSource,
383
+ setProfileSelection: setProfileSelection,
384
+ // Loading state
385
+ sumByLoading: isDraftSumByLoading || sumBySelectionLoading,
386
+ draftParsedQuery: draftParsedQuery,
387
+ parsedQuery: parsedQuery,
388
+ setExpressionParam: setExpressionState,
389
+ setSumByParam: setSumByParam,
390
+ setGroupByParam: setGroupByParam
391
+ };
392
+ };