@datarecce/ui 0.1.23 → 0.1.25
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/{RecceCheckContext-DIQjrvH8.mjs → RecceCheckContext-CiG9fGRW.mjs} +4 -3
- package/dist/RecceCheckContext-CiG9fGRW.mjs.map +1 -0
- package/dist/{RecceCheckContext-_xzNlnbJ.js → RecceCheckContext-tUxygNmN.js} +4 -3
- package/dist/RecceCheckContext-tUxygNmN.js.map +1 -0
- package/dist/api.d.mts +2 -2
- package/dist/api.d.ts +2 -2
- package/dist/api.js +3 -2
- package/dist/api.mjs +3 -3
- package/dist/{components-DXbVq9Cw.js → components-Chaffojm.js} +274 -227
- package/dist/components-Chaffojm.js.map +1 -0
- package/dist/{components-CfY72Lq2.mjs → components-DoLZeY_e.mjs} +274 -225
- package/dist/components-DoLZeY_e.mjs.map +1 -0
- package/dist/components.d.mts +1 -1
- package/dist/components.d.ts +1 -1
- package/dist/components.js +4 -4
- package/dist/components.mjs +4 -4
- package/dist/{hooks-C4jkoryM.js → hooks-VXI-W5Aq.js} +3 -3
- package/dist/{hooks-C4jkoryM.js.map → hooks-VXI-W5Aq.js.map} +1 -1
- package/dist/{hooks-C8pyX9m_.mjs → hooks-XsKEyc3k.mjs} +3 -3
- package/dist/{hooks-C8pyX9m_.mjs.map → hooks-XsKEyc3k.mjs.map} +1 -1
- package/dist/hooks.d.mts +2 -2
- package/dist/hooks.d.ts +2 -2
- package/dist/hooks.js +4 -3
- package/dist/hooks.mjs +4 -4
- package/dist/{index-CVPmrztP.d.ts → index-OeBjAMJ6.d.ts} +46 -40
- package/dist/index-OeBjAMJ6.d.ts.map +1 -0
- package/dist/{index-DIHuswfP.d.mts → index-_KWh3aGd.d.mts} +115 -109
- package/dist/index-_KWh3aGd.d.mts.map +1 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +7 -5
- package/dist/index.mjs +6 -6
- package/dist/{state-BbgVwFV2.mjs → state-DyHCt6IJ.mjs} +118 -96
- package/dist/state-DyHCt6IJ.mjs.map +1 -0
- package/dist/{state-AeoqV9ja.js → state-FkYREAs-.js} +123 -95
- package/dist/state-FkYREAs-.js.map +1 -0
- package/dist/types.d.mts +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/{version-MxW9vrDY.js → version-BGNaeW6k.js} +22 -12
- package/dist/version-BGNaeW6k.js.map +1 -0
- package/dist/{version-C2NU3xyx.mjs → version-Dav28qEz.mjs} +18 -14
- package/dist/version-Dav28qEz.mjs.map +1 -0
- package/package.json +2 -1
- package/dist/RecceCheckContext-DIQjrvH8.mjs.map +0 -1
- package/dist/RecceCheckContext-_xzNlnbJ.js.map +0 -1
- package/dist/components-CfY72Lq2.mjs.map +0 -1
- package/dist/components-DXbVq9Cw.js.map +0 -1
- package/dist/index-CVPmrztP.d.ts.map +0 -1
- package/dist/index-DIHuswfP.d.mts.map +0 -1
- package/dist/state-AeoqV9ja.js.map +0 -1
- package/dist/state-BbgVwFV2.mjs.map +0 -1
- package/dist/version-C2NU3xyx.mjs.map +0 -1
- package/dist/version-MxW9vrDY.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client"
|
|
2
|
-
import { $t as
|
|
2
|
+
import { $t as trackLineageViewRender, At as createLineageDiffCheck, B as IconExport, Bn as darkTheme, Bt as submitRunFromCheck, Cn as selectUpstream, En as getCll, Et as ScreenshotDataGrid, Ft as cancelRun, G as deltaPercentageString, Gt as LINEAGE_SELECTION_ACTION, H as IconInfo, Hn as token, Ht as EXPLORE_ACTION, I as useRecceActionContext, J as mergeKeys, Jt as trackEnvironmentConfig, Kt as trackColumnLevelLineage, L as useAppLocation, Ln as toaster, Lt as listRuns, M as useLineageViewContext, Mn as axiosClient, Mt as submitQueryBase, N as useLineageViewContextSafe, Nt as submitQueryDiff, Qt as trackLineageSelection, Sn as selectDownstream, St as useApiConfig, Tn as union, Tt as EmptyRowsRenderer, U as IconSave, Vn as lightTheme, Vt as waitRun, W as IconSync, Wt as EXPLORE_SOURCE, Y as mergeKeysWithStatus, Yt as trackExploreAction, Zt as trackHistoryAction, _ as findByRunType, _n as isValueDiffRun, a as saveAs$1, an as trackSingleEnvironment, at as supportsHistogramDiff, bn as isLineageGraphNode, c as createCheckByRun, cn as isHistogramDiffRun, ct as useLineageGraphContext, d as getCheck, dn as isQueryDiffRun, en as trackMultiNodesAction, f as listChecks, fn as isQueryRun, ft as useIdleTimeout, g as useChecks, gn as isValueDiffDetailRun, gt as formatDuration, h as updateCheck, hn as isTopKDiffRun, i as rename, in as trackShareState, j as LineageViewContext, jt as submitQuery, k as createDataGridFromData, ln as isProfileDiffRun, lt as useRunsAggregated, mn as isRowCountRun, nn as trackPreviewChange, on as trackStateAction, ot as useModelColumns_default, p as markAsPresetCheck, pn as isRowCountDiffRun, q as useClipBoardToast, qt as trackCopyToClipboard, r as isStateSyncing, rn as trackPreviewChangeFeedback, s as syncState, t as exportState, tn as trackNavigation, u as deleteCheck, un as isQueryBaseRun, ut as useRecceServerFlag, v as runTypeHasRef, vn as COLUMN_HEIGHT, vt as useRecceInstanceContext, wn as toReactFlow, wt as cacheKeys, xn as layout, yn as isLineageGraphColumnNode, yt as useRecceInstanceInfo, z as IconEdit, zn as colors, zt as submitRun } from "./state-DyHCt6IJ.mjs";
|
|
3
3
|
import { t as RECCE_SUPPORT_CALENDAR_URL } from "./urls-D7PrPolY.mjs";
|
|
4
|
-
import { a as
|
|
5
|
-
import { i as useValueDiffAlertDialog_default, l as defaultSqlQuery, n as useRecceCheckContext, o as useRecceShareStateContext, r as useCheckToast, u as useRecceQueryContext } from "./RecceCheckContext-
|
|
4
|
+
import { a as connectToCloud, c as select, i as fetchUser, l as createSchemaDiffCheck, n as useVersionNumber, o as localStorageKeys, r as fetchGitHubAvatar, s as sessionStorageKeys } from "./version-Dav28qEz.mjs";
|
|
5
|
+
import { i as useValueDiffAlertDialog_default, l as defaultSqlQuery, n as useRecceCheckContext, o as useRecceShareStateContext, r as useCheckToast, u as useRecceQueryContext } from "./RecceCheckContext-CiG9fGRW.mjs";
|
|
6
6
|
import { t as DisableTooltipMessages } from "./tooltipMessage-CrXjOmVM.mjs";
|
|
7
7
|
import CssBaseline from "@mui/material/CssBaseline";
|
|
8
8
|
import { ThemeProvider, alpha, useTheme } from "@mui/material/styles";
|
|
@@ -19,7 +19,7 @@ import { ErrorBoundary, FallbackRender } from "@sentry/react";
|
|
|
19
19
|
import ReactSplit, { SplitProps } from "react-split";
|
|
20
20
|
import { Background, BackgroundVariant, BaseEdge, ControlButton, Controls, EdgeProps, Handle, MiniMap, Node, NodeProps, Panel, Position, ReactFlow, ReactFlowProvider, getBezierPath, getNodesBounds, useEdgesState, useNodesState, useReactFlow, useStore } from "@xyflow/react";
|
|
21
21
|
import Divider from "@mui/material/Divider";
|
|
22
|
-
import { AxiosError, AxiosResponse } from "axios";
|
|
22
|
+
import { AxiosError, AxiosInstance, AxiosResponse } from "axios";
|
|
23
23
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
24
24
|
import "@xyflow/react/dist/style.css";
|
|
25
25
|
import { FiArrowRight, FiCopy, FiFrown, FiInfo, FiPackage } from "react-icons/fi";
|
|
@@ -97,8 +97,6 @@ import Card from "@mui/material/Card";
|
|
|
97
97
|
import CardContent from "@mui/material/CardContent";
|
|
98
98
|
import CardHeader from "@mui/material/CardHeader";
|
|
99
99
|
import Badge from "@mui/material/Badge";
|
|
100
|
-
import DisplayModeToggle from "app/(mainComponents)/DisplayModeToggle";
|
|
101
|
-
import RecceVersionBadge from "app/(mainComponents)/RecceVersionBadge";
|
|
102
100
|
|
|
103
101
|
//#region recce-source/js/src/components/ui/mui-provider.tsx
|
|
104
102
|
/**
|
|
@@ -117,10 +115,19 @@ import RecceVersionBadge from "app/(mainComponents)/RecceVersionBadge";
|
|
|
117
115
|
*/
|
|
118
116
|
function MuiProvider({ children, forcedTheme, enableCssBaseline = false }) {
|
|
119
117
|
const { resolvedTheme } = useTheme$1();
|
|
118
|
+
const [mounted, setMounted] = useState(false);
|
|
119
|
+
useEffect(() => {
|
|
120
|
+
setMounted(true);
|
|
121
|
+
}, []);
|
|
120
122
|
return /* @__PURE__ */ jsxs(ThemeProvider, {
|
|
121
123
|
theme: useMemo(() => {
|
|
124
|
+
if (!mounted) return lightTheme;
|
|
122
125
|
return (forcedTheme ?? resolvedTheme) === "dark" ? darkTheme : lightTheme;
|
|
123
|
-
}, [
|
|
126
|
+
}, [
|
|
127
|
+
forcedTheme,
|
|
128
|
+
resolvedTheme,
|
|
129
|
+
mounted
|
|
130
|
+
]),
|
|
124
131
|
children: [enableCssBaseline && /* @__PURE__ */ jsx(CssBaseline, {}), children]
|
|
125
132
|
});
|
|
126
133
|
}
|
|
@@ -483,13 +490,14 @@ function useImageDownloadModal() {
|
|
|
483
490
|
//#endregion
|
|
484
491
|
//#region recce-source/js/src/lib/hooks/useRun.tsx
|
|
485
492
|
const useRun = (runId) => {
|
|
493
|
+
const { apiClient } = useApiConfig();
|
|
486
494
|
const [isRunning, setIsRunning] = useState(false);
|
|
487
495
|
const [aborting, setAborting] = useState(false);
|
|
488
496
|
const [, refetchRunsAggregated] = useRunsAggregated();
|
|
489
497
|
const { error, data: run } = useQuery({
|
|
490
498
|
queryKey: cacheKeys.run(runId ?? ""),
|
|
491
499
|
queryFn: async () => {
|
|
492
|
-
return await waitRun(runId ?? "", isRunning ? 2 : 0);
|
|
500
|
+
return await waitRun(runId ?? "", isRunning ? 2 : 0, apiClient);
|
|
493
501
|
},
|
|
494
502
|
enabled: !!runId,
|
|
495
503
|
refetchInterval: isRunning ? 50 : false,
|
|
@@ -513,8 +521,8 @@ const useRun = (runId) => {
|
|
|
513
521
|
const onCancel = useCallback(async () => {
|
|
514
522
|
setAborting(true);
|
|
515
523
|
if (!runId) return;
|
|
516
|
-
await cancelRun(runId);
|
|
517
|
-
}, [runId]);
|
|
524
|
+
await cancelRun(runId, apiClient);
|
|
525
|
+
}, [runId, apiClient]);
|
|
518
526
|
let RunResultView;
|
|
519
527
|
if (run && runTypeHasRef(run.type)) RunResultView = findByRunType(run.type).RunResultView;
|
|
520
528
|
return {
|
|
@@ -532,9 +540,8 @@ const useRun = (runId) => {
|
|
|
532
540
|
/**
|
|
533
541
|
* Theme-aware color utility hook
|
|
534
542
|
*
|
|
535
|
-
*
|
|
536
|
-
*
|
|
537
|
-
* color logic to avoid repetitive ternary expressions throughout components.
|
|
543
|
+
* Uses next-themes to determine dark/light mode, which is more reliable
|
|
544
|
+
* when the host app uses MUI CSS variables mode with nested ThemeProviders.
|
|
538
545
|
*
|
|
539
546
|
* @example
|
|
540
547
|
* ```tsx
|
|
@@ -554,20 +561,25 @@ const useRun = (runId) => {
|
|
|
554
561
|
* ```
|
|
555
562
|
*/
|
|
556
563
|
function useThemeColors() {
|
|
557
|
-
const
|
|
558
|
-
const
|
|
564
|
+
const muiTheme = useTheme();
|
|
565
|
+
const { resolvedTheme } = useTheme$1();
|
|
566
|
+
const [mounted, setMounted] = useState(false);
|
|
567
|
+
useEffect(() => {
|
|
568
|
+
setMounted(true);
|
|
569
|
+
}, []);
|
|
570
|
+
const isDark = mounted ? resolvedTheme === "dark" : false;
|
|
559
571
|
return {
|
|
560
572
|
isDark,
|
|
561
|
-
theme,
|
|
573
|
+
theme: muiTheme,
|
|
562
574
|
background: {
|
|
563
|
-
default:
|
|
564
|
-
paper:
|
|
575
|
+
default: isDark ? colors.neutral[900] : colors.white,
|
|
576
|
+
paper: isDark ? colors.neutral[800] : colors.white,
|
|
565
577
|
subtle: isDark ? colors.neutral[800] : colors.neutral[50],
|
|
566
578
|
emphasized: isDark ? colors.neutral[700] : colors.neutral[100]
|
|
567
579
|
},
|
|
568
580
|
text: {
|
|
569
|
-
primary:
|
|
570
|
-
secondary:
|
|
581
|
+
primary: isDark ? colors.neutral[50] : colors.neutral[900],
|
|
582
|
+
secondary: isDark ? colors.neutral[400] : colors.neutral[600],
|
|
571
583
|
disabled: isDark ? colors.neutral[500] : colors.neutral[400],
|
|
572
584
|
inverted: isDark ? colors.neutral[900] : colors.neutral[50]
|
|
573
585
|
},
|
|
@@ -578,16 +590,16 @@ function useThemeColors() {
|
|
|
578
590
|
},
|
|
579
591
|
status: {
|
|
580
592
|
added: {
|
|
581
|
-
bg: isDark ?
|
|
582
|
-
text:
|
|
593
|
+
bg: isDark ? colors.green[900] : colors.green[100],
|
|
594
|
+
text: isDark ? colors.neutral[50] : colors.neutral[900]
|
|
583
595
|
},
|
|
584
596
|
removed: {
|
|
585
|
-
bg: isDark ?
|
|
586
|
-
text:
|
|
597
|
+
bg: isDark ? colors.red[950] : colors.red[200],
|
|
598
|
+
text: isDark ? colors.neutral[50] : colors.neutral[900]
|
|
587
599
|
},
|
|
588
600
|
modified: {
|
|
589
|
-
bg: isDark ?
|
|
590
|
-
text:
|
|
601
|
+
bg: isDark ? colors.yellow[900] : colors.amber[100],
|
|
602
|
+
text: isDark ? colors.neutral[50] : colors.neutral[900]
|
|
591
603
|
}
|
|
592
604
|
},
|
|
593
605
|
interactive: {
|
|
@@ -4252,6 +4264,7 @@ const QueryForm = ({ defaultPrimaryKeys, onPrimaryKeysChange, ...props }) => {
|
|
|
4252
4264
|
//#region recce-source/js/src/components/AuthModal/AuthModal.tsx
|
|
4253
4265
|
function AuthModal({ handleParentClose, parentOpen = false, ignoreCookie = false, variant = "auth" }) {
|
|
4254
4266
|
const { authed } = useRecceInstanceContext();
|
|
4267
|
+
const { apiClient } = useApiConfig();
|
|
4255
4268
|
const [open, setOpen] = useState(parentOpen || !authed);
|
|
4256
4269
|
const authStateCookieValue = Cookies.get("authState") ?? "pending";
|
|
4257
4270
|
const [authState, setAuthState] = useState(ignoreCookie ? "pending" : authStateCookieValue);
|
|
@@ -4334,7 +4347,7 @@ function AuthModal({ handleParentClose, parentOpen = false, ignoreCookie = false
|
|
|
4334
4347
|
},
|
|
4335
4348
|
onClick: async () => {
|
|
4336
4349
|
setAuthState("authenticating");
|
|
4337
|
-
const { connection_url } = await connectToCloud();
|
|
4350
|
+
const { connection_url } = await connectToCloud(apiClient);
|
|
4338
4351
|
window.open(connection_url, "_blank");
|
|
4339
4352
|
},
|
|
4340
4353
|
children: [
|
|
@@ -5020,6 +5033,7 @@ function AddToCheckButton({ runId, viewOptions }) {
|
|
|
5020
5033
|
const { error, run } = useRun(runId);
|
|
5021
5034
|
const queryClient = useQueryClient();
|
|
5022
5035
|
const [, setLocation] = useAppLocation();
|
|
5036
|
+
const { apiClient } = useApiConfig();
|
|
5023
5037
|
const checkId = run?.check_id;
|
|
5024
5038
|
const handleGoToCheck = useCallback(() => {
|
|
5025
5039
|
if (!checkId) return;
|
|
@@ -5027,14 +5041,15 @@ function AddToCheckButton({ runId, viewOptions }) {
|
|
|
5027
5041
|
}, [checkId, setLocation]);
|
|
5028
5042
|
const handleAddToChecklist = useCallback(async () => {
|
|
5029
5043
|
if (!runId) return;
|
|
5030
|
-
const check = await createCheckByRun(runId, viewOptions);
|
|
5044
|
+
const check = await createCheckByRun(runId, viewOptions, apiClient);
|
|
5031
5045
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.checks() });
|
|
5032
5046
|
setLocation(`/checks/?id=${check.check_id}`);
|
|
5033
5047
|
}, [
|
|
5034
5048
|
runId,
|
|
5035
5049
|
setLocation,
|
|
5036
5050
|
queryClient,
|
|
5037
|
-
viewOptions
|
|
5051
|
+
viewOptions,
|
|
5052
|
+
apiClient
|
|
5038
5053
|
]);
|
|
5039
5054
|
if (featureToggles.disableUpdateChecklist) return /* @__PURE__ */ jsx(Fragment$1, {});
|
|
5040
5055
|
if (run?.check_id) return /* @__PURE__ */ jsx(Button, {
|
|
@@ -5192,15 +5207,16 @@ function SandboxView({ isOpen, onClose, current }) {
|
|
|
5192
5207
|
const { showRunId, clearRunResult } = useRecceActionContext();
|
|
5193
5208
|
const { primaryKeys, setPrimaryKeys } = useRecceQueryContext();
|
|
5194
5209
|
const { data: flags, isLoading } = useRecceServerFlag();
|
|
5210
|
+
const { apiClient } = useApiConfig();
|
|
5195
5211
|
const queryFn = async () => {
|
|
5196
5212
|
const sqlTemplate = modifiedCode;
|
|
5197
5213
|
const { run_id } = await submitQueryDiff({
|
|
5198
5214
|
current_model: current?.name ?? "",
|
|
5199
5215
|
primary_keys: primaryKeys,
|
|
5200
5216
|
sql_template: sqlTemplate
|
|
5201
|
-
}, { nowait: true });
|
|
5217
|
+
}, { nowait: true }, apiClient);
|
|
5202
5218
|
showRunId(run_id);
|
|
5203
|
-
return await waitRun(run_id);
|
|
5219
|
+
return await waitRun(run_id, void 0, apiClient);
|
|
5204
5220
|
};
|
|
5205
5221
|
const { mutate: runQuery, isPending } = useMutation({
|
|
5206
5222
|
mutationFn: queryFn,
|
|
@@ -5678,12 +5694,17 @@ function ExploreChangeMenuButton({ node, baseColumns, currentColumns, disableRea
|
|
|
5678
5694
|
const { envInfo, isActionAvailable } = useLineageGraphContext();
|
|
5679
5695
|
const { featureToggles } = useRecceInstanceContext();
|
|
5680
5696
|
const { primaryKey } = useModelColumns_default(node.data.name);
|
|
5697
|
+
const { apiClient } = useApiConfig();
|
|
5681
5698
|
const metadataOnly = featureToggles.mode === "metadata only";
|
|
5682
5699
|
const isAddedOrRemoved = node.data.changeStatus === "added" || node.data.changeStatus === "removed";
|
|
5683
5700
|
const addSchemaCheck = useCallback(async () => {
|
|
5684
5701
|
const nodeId = node.id;
|
|
5685
|
-
setLocation(`/checks/?id=${(await createSchemaDiffCheck({ node_id: nodeId })).check_id}`);
|
|
5686
|
-
}, [
|
|
5702
|
+
setLocation(`/checks/?id=${(await createSchemaDiffCheck({ node_id: nodeId }, apiClient)).check_id}`);
|
|
5703
|
+
}, [
|
|
5704
|
+
node,
|
|
5705
|
+
setLocation,
|
|
5706
|
+
apiClient
|
|
5707
|
+
]);
|
|
5687
5708
|
const formattedColumns = formatSelectColumns(baseColumns, currentColumns);
|
|
5688
5709
|
let query = `select * from {{ ref("${node.data.name}") }}`;
|
|
5689
5710
|
if (formattedColumns.length) query = `select \n ${formattedColumns.join("\n ")}\nfrom {{ ref("${node.data.name}") }}`;
|
|
@@ -6150,6 +6171,7 @@ const initValue = {
|
|
|
6150
6171
|
actions: {}
|
|
6151
6172
|
};
|
|
6152
6173
|
const useMultiNodesAction = (nodes, { onActionStarted, onActionNodeUpdated, onActionCompleted }) => {
|
|
6174
|
+
const { apiClient } = useApiConfig();
|
|
6153
6175
|
const actionState = useRef({ ...initValue }).current;
|
|
6154
6176
|
const { showRunId } = useRecceActionContext();
|
|
6155
6177
|
const submitRunForNodes = async (type, skip, getParams) => {
|
|
@@ -6179,12 +6201,12 @@ const useMultiNodesAction = (nodes, { onActionStarted, onActionNodeUpdated, onAc
|
|
|
6179
6201
|
}
|
|
6180
6202
|
const params = getParams(candidates);
|
|
6181
6203
|
try {
|
|
6182
|
-
const { run_id } = await submitRun(type, params, { nowait: true });
|
|
6204
|
+
const { run_id } = await submitRun(type, params, { nowait: true }, apiClient);
|
|
6183
6205
|
showRunId(run_id);
|
|
6184
6206
|
actionState.currentRun = { run_id };
|
|
6185
6207
|
actionState.total = 1;
|
|
6186
6208
|
for (;;) {
|
|
6187
|
-
const run = await waitRun(run_id, 2);
|
|
6209
|
+
const run = await waitRun(run_id, 2, apiClient);
|
|
6188
6210
|
actionState.currentRun = run;
|
|
6189
6211
|
const status = run.error ? "failure" : run.result ? "success" : "running";
|
|
6190
6212
|
for (const node of candidates) {
|
|
@@ -6233,7 +6255,7 @@ const useMultiNodesAction = (nodes, { onActionStarted, onActionNodeUpdated, onAc
|
|
|
6233
6255
|
};
|
|
6234
6256
|
onActionNodeUpdated(node);
|
|
6235
6257
|
} else try {
|
|
6236
|
-
const { run_id } = await submitRun(type, params, { nowait: true });
|
|
6258
|
+
const { run_id } = await submitRun(type, params, { nowait: true }, apiClient);
|
|
6237
6259
|
actionState.currentRun = { run_id };
|
|
6238
6260
|
actions[node.id] = {
|
|
6239
6261
|
mode,
|
|
@@ -6241,7 +6263,7 @@ const useMultiNodesAction = (nodes, { onActionStarted, onActionNodeUpdated, onAc
|
|
|
6241
6263
|
};
|
|
6242
6264
|
onActionNodeUpdated(node);
|
|
6243
6265
|
for (;;) {
|
|
6244
|
-
const run = await waitRun(run_id, 2);
|
|
6266
|
+
const run = await waitRun(run_id, 2, apiClient);
|
|
6245
6267
|
actionState.currentRun = run;
|
|
6246
6268
|
const status = run.error ? "failure" : run.result ? "success" : "running";
|
|
6247
6269
|
actions[node.id] = {
|
|
@@ -6327,17 +6349,17 @@ const useMultiNodesAction = (nodes, { onActionStarted, onActionNodeUpdated, onAc
|
|
|
6327
6349
|
});
|
|
6328
6350
|
};
|
|
6329
6351
|
const addLineageDiffCheck = async () => {
|
|
6330
|
-
return await createLineageDiffCheck({ node_ids: nodes.map((node) => node.id) });
|
|
6352
|
+
return await createLineageDiffCheck({ node_ids: nodes.map((node) => node.id) }, apiClient);
|
|
6331
6353
|
};
|
|
6332
6354
|
const addSchemaDiffCheck = async () => {
|
|
6333
6355
|
let check;
|
|
6334
|
-
if (nodes.length === 1) check = await createSchemaDiffCheck({ node_id: nodes[0].id });
|
|
6335
|
-
else check = await createSchemaDiffCheck({ node_id: nodes.map((node) => node.id) });
|
|
6356
|
+
if (nodes.length === 1) check = await createSchemaDiffCheck({ node_id: nodes[0].id }, apiClient);
|
|
6357
|
+
else check = await createSchemaDiffCheck({ node_id: nodes.map((node) => node.id) }, apiClient);
|
|
6336
6358
|
return check;
|
|
6337
6359
|
};
|
|
6338
6360
|
const cancel = async () => {
|
|
6339
6361
|
actionState.status = "canceling";
|
|
6340
|
-
if (actionState.currentRun?.run_id) await cancelRun(actionState.currentRun.run_id);
|
|
6362
|
+
if (actionState.currentRun?.run_id) await cancelRun(actionState.currentRun.run_id, apiClient);
|
|
6341
6363
|
};
|
|
6342
6364
|
const reset = () => {
|
|
6343
6365
|
Object.assign(actionState, initValue);
|
|
@@ -6400,6 +6422,7 @@ const useNavToCheck = () => {
|
|
|
6400
6422
|
};
|
|
6401
6423
|
function PrivateLineageView({ interactive = false, ...props }, ref) {
|
|
6402
6424
|
const { isDark } = useThemeColors();
|
|
6425
|
+
const { apiClient } = useApiConfig();
|
|
6403
6426
|
const reactFlow = useReactFlow();
|
|
6404
6427
|
const refResize = useRef(null);
|
|
6405
6428
|
const { successToast, failToast } = useClipBoardToast();
|
|
@@ -6447,7 +6470,7 @@ function PrivateLineageView({ interactive = false, ...props }, ref) {
|
|
|
6447
6470
|
}, []);
|
|
6448
6471
|
const cllHistory = useRef([]).current;
|
|
6449
6472
|
const [cll, setCll] = useState(void 0);
|
|
6450
|
-
const actionGetCll = useMutation({ mutationFn: getCll });
|
|
6473
|
+
const actionGetCll = useMutation({ mutationFn: (input) => getCll(input, apiClient) });
|
|
6451
6474
|
const [nodeColumnSetMap, setNodeColumSetMap] = useState({});
|
|
6452
6475
|
const findNodeByName = useCallback((name) => {
|
|
6453
6476
|
return nodes.filter(isLineageGraphNode).find((n) => n.data.name === name);
|
|
@@ -6550,7 +6573,7 @@ function PrivateLineageView({ interactive = false, ...props }, ref) {
|
|
|
6550
6573
|
exclude: newViewOptions.exclude,
|
|
6551
6574
|
packages: newViewOptions.packages,
|
|
6552
6575
|
view_mode: newViewOptions.view_mode
|
|
6553
|
-
})).nodes;
|
|
6576
|
+
}, apiClient)).nodes;
|
|
6554
6577
|
} catch (_$1) {
|
|
6555
6578
|
newViewOptions.view_mode = "all";
|
|
6556
6579
|
filteredNodeIds$1 = (await select({
|
|
@@ -6558,7 +6581,7 @@ function PrivateLineageView({ interactive = false, ...props }, ref) {
|
|
|
6558
6581
|
exclude: newViewOptions.exclude,
|
|
6559
6582
|
packages: newViewOptions.packages,
|
|
6560
6583
|
view_mode: newViewOptions.view_mode
|
|
6561
|
-
})).nodes;
|
|
6584
|
+
}, apiClient)).nodes;
|
|
6562
6585
|
}
|
|
6563
6586
|
setViewOptions(newViewOptions);
|
|
6564
6587
|
}
|
|
@@ -6679,7 +6702,7 @@ function PrivateLineageView({ interactive = false, ...props }, ref) {
|
|
|
6679
6702
|
exclude: newViewOptions.exclude,
|
|
6680
6703
|
packages: newViewOptions.packages,
|
|
6681
6704
|
view_mode: newViewOptions.view_mode
|
|
6682
|
-
});
|
|
6705
|
+
}, apiClient);
|
|
6683
6706
|
newViewOptions = {
|
|
6684
6707
|
...newViewOptions,
|
|
6685
6708
|
column_level_lineage: void 0
|
|
@@ -6961,7 +6984,7 @@ function PrivateLineageView({ interactive = false, ...props }, ref) {
|
|
|
6961
6984
|
selected: "multi"
|
|
6962
6985
|
});
|
|
6963
6986
|
} else if (!focusedNode) {
|
|
6964
|
-
check = await createLineageDiffCheck(viewOptions);
|
|
6987
|
+
check = await createLineageDiffCheck(viewOptions, apiClient);
|
|
6965
6988
|
trackMultiNodesAction({
|
|
6966
6989
|
type: "lineage_diff",
|
|
6967
6990
|
selected: "none"
|
|
@@ -6981,7 +7004,7 @@ function PrivateLineageView({ interactive = false, ...props }, ref) {
|
|
|
6981
7004
|
});
|
|
6982
7005
|
}
|
|
6983
7006
|
} else if (focusedNode) {
|
|
6984
|
-
check = await createSchemaDiffCheck({ node_id: focusedNode.id });
|
|
7007
|
+
check = await createSchemaDiffCheck({ node_id: focusedNode.id }, apiClient);
|
|
6985
7008
|
trackMultiNodesAction({
|
|
6986
7009
|
type: "schema_diff",
|
|
6987
7010
|
selected: "single"
|
|
@@ -6992,7 +7015,7 @@ function PrivateLineageView({ interactive = false, ...props }, ref) {
|
|
|
6992
7015
|
exclude: viewOptions.exclude,
|
|
6993
7016
|
packages: viewOptions.packages,
|
|
6994
7017
|
view_mode: viewOptions.view_mode
|
|
6995
|
-
});
|
|
7018
|
+
}, apiClient);
|
|
6996
7019
|
trackMultiNodesAction({
|
|
6997
7020
|
type: "schema_diff",
|
|
6998
7021
|
selected: "none"
|
|
@@ -7328,6 +7351,7 @@ const QueryPage = () => {
|
|
|
7328
7351
|
if (envInfo?.adapterType === "sqlmesh" && _sqlQuery === defaultSqlQuery) sqlQuery = `select * from db.mymodel`;
|
|
7329
7352
|
if (featureToggles.mode === "read only") sqlQuery = `--- Would like to do query here? Book a demo with us at ${RECCE_SUPPORT_CALENDAR_URL}\n${sqlQuery}`;
|
|
7330
7353
|
const { showRunId } = useRecceActionContext();
|
|
7354
|
+
const { apiClient } = useApiConfig();
|
|
7331
7355
|
const queryFn = async (type) => {
|
|
7332
7356
|
function queryFactory(type$1) {
|
|
7333
7357
|
switch (type$1) {
|
|
@@ -7345,9 +7369,9 @@ const QueryPage = () => {
|
|
|
7345
7369
|
params.primary_keys = primaryKeys;
|
|
7346
7370
|
if (isCustomQueries) params.base_sql_template = baseSqlQuery;
|
|
7347
7371
|
}
|
|
7348
|
-
const { run_id } = await runFn(params, options);
|
|
7372
|
+
const { run_id } = await runFn(params, options, apiClient);
|
|
7349
7373
|
showRunId(run_id);
|
|
7350
|
-
return await waitRun(run_id);
|
|
7374
|
+
return await waitRun(run_id, void 0, apiClient);
|
|
7351
7375
|
};
|
|
7352
7376
|
const { mutate: runQuery, isPending } = useMutation({ mutationFn: queryFn });
|
|
7353
7377
|
const currentSchema = useMemo(() => {
|
|
@@ -7502,9 +7526,10 @@ const ChecklistItem = ({ check, selected, onSelect, onMarkAsApproved }) => {
|
|
|
7502
7526
|
const isDark = useTheme().palette.mode === "dark";
|
|
7503
7527
|
const { featureToggles } = useRecceInstanceContext();
|
|
7504
7528
|
const queryClient = useQueryClient();
|
|
7529
|
+
const { apiClient } = useApiConfig();
|
|
7505
7530
|
const checkId = check.check_id;
|
|
7506
7531
|
const { mutate } = useMutation({
|
|
7507
|
-
mutationFn: (check$1) => updateCheck(checkId, check$1),
|
|
7532
|
+
mutationFn: (check$1) => updateCheck(checkId, check$1, apiClient),
|
|
7508
7533
|
onSuccess: async () => {
|
|
7509
7534
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.check(checkId) });
|
|
7510
7535
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.checks() });
|
|
@@ -7576,8 +7601,9 @@ const CheckList = ({ checks, selectedItem, onCheckSelected, onChecksReordered })
|
|
|
7576
7601
|
const [open, setOpen] = useState(false);
|
|
7577
7602
|
const [pendingApprovalCheckId, setPendingApprovalCheckId] = useState(null);
|
|
7578
7603
|
const queryClient = useQueryClient();
|
|
7604
|
+
const { apiClient } = useApiConfig();
|
|
7579
7605
|
const { mutate: markCheckedByID } = useMutation({
|
|
7580
|
-
mutationFn: (checkId) => updateCheck(checkId, { is_checked: true }),
|
|
7606
|
+
mutationFn: (checkId) => updateCheck(checkId, { is_checked: true }, apiClient),
|
|
7581
7607
|
onSuccess: async (_$1, checkId) => {
|
|
7582
7608
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.check(checkId) });
|
|
7583
7609
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.checks() });
|
|
@@ -7725,20 +7751,22 @@ const CheckList = ({ checks, selectedItem, onCheckSelected, onChecksReordered })
|
|
|
7725
7751
|
* List all events for a check in chronological order.
|
|
7726
7752
|
*
|
|
7727
7753
|
* @param checkId - The check ID
|
|
7754
|
+
* @param client - Optional axios instance for API configuration
|
|
7728
7755
|
* @returns Promise resolving to array of CheckEvent objects
|
|
7729
7756
|
*/
|
|
7730
|
-
async function listCheckEvents(checkId) {
|
|
7731
|
-
return (await
|
|
7757
|
+
async function listCheckEvents(checkId, client = axiosClient) {
|
|
7758
|
+
return (await client.get(`/api/checks/${checkId}/events`)).data;
|
|
7732
7759
|
}
|
|
7733
7760
|
/**
|
|
7734
7761
|
* Create a new comment on a check.
|
|
7735
7762
|
*
|
|
7736
7763
|
* @param checkId - The check ID
|
|
7737
7764
|
* @param content - The comment content (plain text for now, markdown later)
|
|
7765
|
+
* @param client - Optional axios instance for API configuration
|
|
7738
7766
|
* @returns Promise resolving to the created CheckEvent
|
|
7739
7767
|
*/
|
|
7740
|
-
async function createComment(checkId, content) {
|
|
7741
|
-
return (await
|
|
7768
|
+
async function createComment(checkId, content, client = axiosClient) {
|
|
7769
|
+
return (await client.post(`/api/checks/${checkId}/events`, { content })).data;
|
|
7742
7770
|
}
|
|
7743
7771
|
/**
|
|
7744
7772
|
* Update an existing comment.
|
|
@@ -7747,10 +7775,11 @@ async function createComment(checkId, content) {
|
|
|
7747
7775
|
* @param checkId - The check ID
|
|
7748
7776
|
* @param eventId - The event ID of the comment to update
|
|
7749
7777
|
* @param content - The new comment content
|
|
7778
|
+
* @param client - Optional axios instance for API configuration
|
|
7750
7779
|
* @returns Promise resolving to the updated CheckEvent
|
|
7751
7780
|
*/
|
|
7752
|
-
async function updateComment(checkId, eventId, content) {
|
|
7753
|
-
return (await
|
|
7781
|
+
async function updateComment(checkId, eventId, content, client = axiosClient) {
|
|
7782
|
+
return (await client.patch(`/api/checks/${checkId}/events/${eventId}`, { content })).data;
|
|
7754
7783
|
}
|
|
7755
7784
|
/**
|
|
7756
7785
|
* Delete a comment (soft delete).
|
|
@@ -7758,10 +7787,11 @@ async function updateComment(checkId, eventId, content) {
|
|
|
7758
7787
|
*
|
|
7759
7788
|
* @param checkId - The check ID
|
|
7760
7789
|
* @param eventId - The event ID of the comment to delete
|
|
7790
|
+
* @param client - Optional axios instance for API configuration
|
|
7761
7791
|
* @returns Promise resolving when deletion is complete
|
|
7762
7792
|
*/
|
|
7763
|
-
async function deleteComment(checkId, eventId) {
|
|
7764
|
-
await
|
|
7793
|
+
async function deleteComment(checkId, eventId, client = axiosClient) {
|
|
7794
|
+
await client.delete(`/api/checks/${checkId}/events/${eventId}`);
|
|
7765
7795
|
}
|
|
7766
7796
|
/**
|
|
7767
7797
|
* Get the appropriate icon name for an event type.
|
|
@@ -7791,27 +7821,28 @@ const POLLING_INTERVAL = 1e4;
|
|
|
7791
7821
|
function useCheckEvents(checkId, options = {}) {
|
|
7792
7822
|
const { enabled = true } = options;
|
|
7793
7823
|
const queryClient = useQueryClient();
|
|
7824
|
+
const { apiClient } = useApiConfig();
|
|
7794
7825
|
const { data: events, isLoading, error, refetch } = useQuery({
|
|
7795
7826
|
queryKey: cacheKeys.checkEvents(checkId),
|
|
7796
|
-
queryFn: () => listCheckEvents(checkId),
|
|
7827
|
+
queryFn: () => listCheckEvents(checkId, apiClient),
|
|
7797
7828
|
enabled,
|
|
7798
7829
|
refetchInterval: POLLING_INTERVAL,
|
|
7799
7830
|
refetchIntervalInBackground: false
|
|
7800
7831
|
});
|
|
7801
7832
|
const createCommentMutation = useMutation({
|
|
7802
|
-
mutationFn: (content) => createComment(checkId, content),
|
|
7833
|
+
mutationFn: (content) => createComment(checkId, content, apiClient),
|
|
7803
7834
|
onSuccess: async () => {
|
|
7804
7835
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.checkEvents(checkId) });
|
|
7805
7836
|
}
|
|
7806
7837
|
});
|
|
7807
7838
|
const updateCommentMutation = useMutation({
|
|
7808
|
-
mutationFn: ({ eventId, content }) => updateComment(checkId, eventId, content),
|
|
7839
|
+
mutationFn: ({ eventId, content }) => updateComment(checkId, eventId, content, apiClient),
|
|
7809
7840
|
onSuccess: async () => {
|
|
7810
7841
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.checkEvents(checkId) });
|
|
7811
7842
|
}
|
|
7812
7843
|
});
|
|
7813
7844
|
const deleteCommentMutation = useMutation({
|
|
7814
|
-
mutationFn: (eventId) => deleteComment(checkId, eventId),
|
|
7845
|
+
mutationFn: (eventId) => deleteComment(checkId, eventId, apiClient),
|
|
7815
7846
|
onSuccess: async () => {
|
|
7816
7847
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.checkEvents(checkId) });
|
|
7817
7848
|
}
|
|
@@ -8668,10 +8699,11 @@ function TimelineEvent({ event, currentUserId, onEdit, onDelete }) {
|
|
|
8668
8699
|
*/
|
|
8669
8700
|
function CheckTimeline({ checkId }) {
|
|
8670
8701
|
const isDark = useTheme().palette.mode === "dark";
|
|
8702
|
+
const { apiClient } = useApiConfig();
|
|
8671
8703
|
const { events, isLoading, error, createComment: createComment$1, isCreatingComment, updateComment: updateComment$1, deleteComment: deleteComment$1 } = useCheckEvents(checkId);
|
|
8672
8704
|
const { data: currentUser } = useQuery({
|
|
8673
8705
|
queryKey: cacheKeys.user(),
|
|
8674
|
-
queryFn: fetchUser,
|
|
8706
|
+
queryFn: () => fetchUser(apiClient),
|
|
8675
8707
|
retry: false
|
|
8676
8708
|
});
|
|
8677
8709
|
const handleCreateComment = (content) => {
|
|
@@ -9056,6 +9088,7 @@ const NodelistItem = ({ node, selected, onSelect, schemaChanged, isDark }) => {
|
|
|
9056
9088
|
};
|
|
9057
9089
|
function PrivateSchemaDiffView({ check }, ref) {
|
|
9058
9090
|
const isDark = useTheme().palette.mode === "dark";
|
|
9091
|
+
const { apiClient } = useApiConfig();
|
|
9059
9092
|
const { lineageGraph } = useLineageGraphContext();
|
|
9060
9093
|
const params = check.params;
|
|
9061
9094
|
const { isLoading, error, data } = useQuery({
|
|
@@ -9065,7 +9098,7 @@ function PrivateSchemaDiffView({ check }, ref) {
|
|
|
9065
9098
|
exclude: params.exclude,
|
|
9066
9099
|
packages: params.packages,
|
|
9067
9100
|
view_mode: params.view_mode
|
|
9068
|
-
}),
|
|
9101
|
+
}, apiClient),
|
|
9069
9102
|
refetchOnMount: true,
|
|
9070
9103
|
enabled: !params.node_id
|
|
9071
9104
|
});
|
|
@@ -9177,6 +9210,7 @@ const SchemaDiffView = forwardRef(PrivateSchemaDiffView);
|
|
|
9177
9210
|
function CheckDetail({ checkId, refreshCheckList }) {
|
|
9178
9211
|
const theme = useTheme();
|
|
9179
9212
|
const isDark = theme.palette.mode === "dark";
|
|
9213
|
+
const { apiClient } = useApiConfig();
|
|
9180
9214
|
const { featureToggles, sessionId } = useRecceInstanceContext();
|
|
9181
9215
|
const { setLatestSelectedCheckId } = useRecceCheckContext();
|
|
9182
9216
|
const { cloudMode } = useLineageGraphContext();
|
|
@@ -9192,7 +9226,7 @@ function CheckDetail({ checkId, refreshCheckList }) {
|
|
|
9192
9226
|
const menuOpen = Boolean(menuAnchorEl);
|
|
9193
9227
|
const { isLoading, error, data: check } = useQuery({
|
|
9194
9228
|
queryKey: cacheKeys.check(checkId),
|
|
9195
|
-
queryFn: async () => getCheck(checkId),
|
|
9229
|
+
queryFn: async () => getCheck(checkId, apiClient),
|
|
9196
9230
|
refetchOnMount: true
|
|
9197
9231
|
});
|
|
9198
9232
|
const trackedRunId = submittedRunId ?? check?.last_run?.run_id;
|
|
@@ -9204,14 +9238,14 @@ function CheckDetail({ checkId, refreshCheckList }) {
|
|
|
9204
9238
|
const isPresetCheck = check?.is_preset ?? false;
|
|
9205
9239
|
const lineageViewRef = useRef(null);
|
|
9206
9240
|
const { mutate } = useMutation({
|
|
9207
|
-
mutationFn: (check$1) => updateCheck(checkId, check$1),
|
|
9241
|
+
mutationFn: (check$1) => updateCheck(checkId, check$1, apiClient),
|
|
9208
9242
|
onSuccess: async () => {
|
|
9209
9243
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.check(checkId) });
|
|
9210
9244
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.checks() });
|
|
9211
9245
|
}
|
|
9212
9246
|
});
|
|
9213
9247
|
const { mutate: handleDelete } = useMutation({
|
|
9214
|
-
mutationFn: () => deleteCheck(checkId),
|
|
9248
|
+
mutationFn: () => deleteCheck(checkId, apiClient),
|
|
9215
9249
|
onSuccess: async () => {
|
|
9216
9250
|
setLatestSelectedCheckId("");
|
|
9217
9251
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.checks() });
|
|
@@ -9221,7 +9255,7 @@ function CheckDetail({ checkId, refreshCheckList }) {
|
|
|
9221
9255
|
const { mutate: handleMarkAsPresetCheck, isPending: isMarkingAsPreset } = useMutation({
|
|
9222
9256
|
mutationFn: async () => {
|
|
9223
9257
|
if (!check) throw new Error("Check not found");
|
|
9224
|
-
return await markAsPresetCheck(checkId);
|
|
9258
|
+
return await markAsPresetCheck(checkId, apiClient);
|
|
9225
9259
|
},
|
|
9226
9260
|
onSuccess: async () => {
|
|
9227
9261
|
successToast("Check marked as preset successfully");
|
|
@@ -9233,20 +9267,21 @@ function CheckDetail({ checkId, refreshCheckList }) {
|
|
|
9233
9267
|
});
|
|
9234
9268
|
const handleRerun = useCallback(async () => {
|
|
9235
9269
|
if (!check?.type) return;
|
|
9236
|
-
setSubmittedRunId((await submitRunFromCheck(checkId, { nowait: true })).run_id);
|
|
9270
|
+
setSubmittedRunId((await submitRunFromCheck(checkId, { nowait: true }, apiClient)).run_id);
|
|
9237
9271
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.check(checkId) });
|
|
9238
9272
|
if (refreshCheckList) refreshCheckList();
|
|
9239
9273
|
}, [
|
|
9240
9274
|
check,
|
|
9241
9275
|
checkId,
|
|
9242
9276
|
queryClient,
|
|
9243
|
-
refreshCheckList
|
|
9277
|
+
refreshCheckList,
|
|
9278
|
+
apiClient
|
|
9244
9279
|
]);
|
|
9245
9280
|
const handleCancel = useCallback(async () => {
|
|
9246
9281
|
setAborting(true);
|
|
9247
9282
|
if (!trackedRunId) return;
|
|
9248
|
-
return await cancelRun(trackedRunId);
|
|
9249
|
-
}, [trackedRunId]);
|
|
9283
|
+
return await cancelRun(trackedRunId, apiClient);
|
|
9284
|
+
}, [trackedRunId, apiClient]);
|
|
9250
9285
|
const handleCopy = async () => {
|
|
9251
9286
|
if (!check) return;
|
|
9252
9287
|
const markdown = buildMarkdown(check);
|
|
@@ -9751,8 +9786,9 @@ function buildBody(check) {
|
|
|
9751
9786
|
const CheckEmptyState = () => {
|
|
9752
9787
|
const queryClient = useQueryClient();
|
|
9753
9788
|
const [, setLocation] = useAppLocation();
|
|
9789
|
+
const { apiClient } = useApiConfig();
|
|
9754
9790
|
const { mutate: createSchemaCheck, isPending } = useMutation({
|
|
9755
|
-
mutationFn: () => createSchemaDiffCheck({ select: "state:modified" }),
|
|
9791
|
+
mutationFn: () => createSchemaDiffCheck({ select: "state:modified" }, apiClient),
|
|
9756
9792
|
onSuccess: async (check) => {
|
|
9757
9793
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.checks() });
|
|
9758
9794
|
setLocation(`/checks/?id=${check.check_id}`);
|
|
@@ -9835,9 +9871,10 @@ const CheckEmptyState = () => {
|
|
|
9835
9871
|
//#endregion
|
|
9836
9872
|
//#region recce-source/js/src/components/run/RunPage.tsx
|
|
9837
9873
|
const RunPage = ({ runId }) => {
|
|
9874
|
+
const { apiClient } = useApiConfig();
|
|
9838
9875
|
const { error, data: run } = useQuery({
|
|
9839
9876
|
queryKey: cacheKeys.run(runId),
|
|
9840
|
-
queryFn: async () => waitRun(runId)
|
|
9877
|
+
queryFn: async () => waitRun(runId, void 0, apiClient)
|
|
9841
9878
|
});
|
|
9842
9879
|
let RunResultView;
|
|
9843
9880
|
if (run && runTypeHasRef(run.type)) RunResultView = findByRunType(run.type).RunResultView;
|
|
@@ -9852,10 +9889,11 @@ const RunPage = ({ runId }) => {
|
|
|
9852
9889
|
//#region recce-source/js/src/components/run/RunList.tsx
|
|
9853
9890
|
const RunListItem = ({ run, isSelected, onSelectRun, onAddToChecklist, onGoToCheck }) => {
|
|
9854
9891
|
const { featureToggles } = useRecceInstanceContext();
|
|
9892
|
+
const { apiClient } = useApiConfig();
|
|
9855
9893
|
const { data: fetchedRun } = useQuery({
|
|
9856
9894
|
queryKey: cacheKeys.run(run.run_id),
|
|
9857
9895
|
queryFn: async () => {
|
|
9858
|
-
return await waitRun(run.run_id);
|
|
9896
|
+
return await waitRun(run.run_id, void 0, apiClient);
|
|
9859
9897
|
},
|
|
9860
9898
|
enabled: run.status === "running",
|
|
9861
9899
|
retry: false
|
|
@@ -9959,10 +9997,11 @@ const DateSegmentItem = ({ runAt }) => {
|
|
|
9959
9997
|
};
|
|
9960
9998
|
const RunList = () => {
|
|
9961
9999
|
const { closeHistory } = useRecceActionContext();
|
|
10000
|
+
const { apiClient } = useApiConfig();
|
|
9962
10001
|
const { data: runs, isLoading } = useQuery({
|
|
9963
10002
|
queryKey: cacheKeys.runs(),
|
|
9964
10003
|
queryFn: async () => {
|
|
9965
|
-
return await listRuns();
|
|
10004
|
+
return await listRuns(apiClient);
|
|
9966
10005
|
},
|
|
9967
10006
|
retry: false
|
|
9968
10007
|
});
|
|
@@ -10026,6 +10065,7 @@ const RunList = () => {
|
|
|
10026
10065
|
function DateDividedRunHistoryItem({ run, previousDate }) {
|
|
10027
10066
|
const [, setLocation] = useAppLocation();
|
|
10028
10067
|
const queryClient = useQueryClient();
|
|
10068
|
+
const { apiClient } = useApiConfig();
|
|
10029
10069
|
const { showRunId, runId } = useRecceActionContext();
|
|
10030
10070
|
const currentDate = new Date(run.run_at).toDateString();
|
|
10031
10071
|
const shouldRenderDateSegment = previousDate != null && previousDate !== currentDate;
|
|
@@ -10034,10 +10074,14 @@ function DateDividedRunHistoryItem({ run, previousDate }) {
|
|
|
10034
10074
|
showRunId(runId$1, false);
|
|
10035
10075
|
};
|
|
10036
10076
|
const handleAddToChecklist = useCallback(async (clickedRunId) => {
|
|
10037
|
-
const check = await createCheckByRun(clickedRunId);
|
|
10077
|
+
const check = await createCheckByRun(clickedRunId, void 0, apiClient);
|
|
10038
10078
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.checks() });
|
|
10039
10079
|
setLocation(`/checks/?id=${check.check_id}`);
|
|
10040
|
-
}, [
|
|
10080
|
+
}, [
|
|
10081
|
+
setLocation,
|
|
10082
|
+
queryClient,
|
|
10083
|
+
apiClient
|
|
10084
|
+
]);
|
|
10041
10085
|
const handleGoToCheck = useCallback((checkId) => {
|
|
10042
10086
|
trackHistoryAction({ name: "go_to_check" });
|
|
10043
10087
|
setLocation(`/checks/?id=${checkId}`);
|
|
@@ -10405,9 +10449,10 @@ function SummaryView() {
|
|
|
10405
10449
|
//#endregion
|
|
10406
10450
|
//#region recce-source/js/src/components/app/AvatarDropdown.tsx
|
|
10407
10451
|
function AvatarDropdown() {
|
|
10452
|
+
const { apiClient } = useApiConfig();
|
|
10408
10453
|
const { data: user, isLoading, error } = useQuery({
|
|
10409
10454
|
queryKey: cacheKeys.user(),
|
|
10410
|
-
queryFn: fetchUser,
|
|
10455
|
+
queryFn: () => fetchUser(apiClient),
|
|
10411
10456
|
retry: false
|
|
10412
10457
|
});
|
|
10413
10458
|
const { data: avatarUrl } = useQuery({
|
|
@@ -10556,6 +10601,142 @@ function IdleTimeoutBadge() {
|
|
|
10556
10601
|
});
|
|
10557
10602
|
}
|
|
10558
10603
|
|
|
10604
|
+
//#endregion
|
|
10605
|
+
//#region recce-source/js/app/(mainComponents)/DisplayModeToggle.tsx
|
|
10606
|
+
/**
|
|
10607
|
+
* Display Mode Toggle - switches between light and dark themes
|
|
10608
|
+
*
|
|
10609
|
+
* Uses next-themes to persist the user's preference.
|
|
10610
|
+
* Default is light theme, with future support for system preference.
|
|
10611
|
+
*/
|
|
10612
|
+
function DisplayModeToggle() {
|
|
10613
|
+
const { setTheme, resolvedTheme } = useTheme$1();
|
|
10614
|
+
const [mounted, setMounted] = useState(false);
|
|
10615
|
+
useEffect(() => {
|
|
10616
|
+
setMounted(true);
|
|
10617
|
+
}, []);
|
|
10618
|
+
const toggleTheme = () => {
|
|
10619
|
+
setTheme(resolvedTheme === "dark" ? "light" : "dark");
|
|
10620
|
+
};
|
|
10621
|
+
if (!mounted) return /* @__PURE__ */ jsx(IconButton, {
|
|
10622
|
+
size: "small",
|
|
10623
|
+
sx: {
|
|
10624
|
+
color: "rgba(255, 255, 255, 0.8)",
|
|
10625
|
+
"&:hover": { bgcolor: "rgba(255, 255, 255, 0.1)" }
|
|
10626
|
+
},
|
|
10627
|
+
disabled: true,
|
|
10628
|
+
children: /* @__PURE__ */ jsx(PiSun, { style: {
|
|
10629
|
+
width: 18,
|
|
10630
|
+
height: 18
|
|
10631
|
+
} })
|
|
10632
|
+
});
|
|
10633
|
+
const isDark = resolvedTheme === "dark";
|
|
10634
|
+
return /* @__PURE__ */ jsx(MuiTooltip, {
|
|
10635
|
+
title: isDark ? "Switch to light mode" : "Switch to dark mode",
|
|
10636
|
+
children: /* @__PURE__ */ jsx(IconButton, {
|
|
10637
|
+
size: "small",
|
|
10638
|
+
onClick: toggleTheme,
|
|
10639
|
+
sx: {
|
|
10640
|
+
color: "rgba(255, 255, 255, 0.8)",
|
|
10641
|
+
"&:hover": { bgcolor: "rgba(255, 255, 255, 0.1)" }
|
|
10642
|
+
},
|
|
10643
|
+
"aria-label": isDark ? "Switch to light mode" : "Switch to dark mode",
|
|
10644
|
+
children: isDark ? /* @__PURE__ */ jsx(PiSun, { style: {
|
|
10645
|
+
width: 18,
|
|
10646
|
+
height: 18
|
|
10647
|
+
} }) : /* @__PURE__ */ jsx(PiMoon, { style: {
|
|
10648
|
+
width: 18,
|
|
10649
|
+
height: 18
|
|
10650
|
+
} })
|
|
10651
|
+
})
|
|
10652
|
+
});
|
|
10653
|
+
}
|
|
10654
|
+
|
|
10655
|
+
//#endregion
|
|
10656
|
+
//#region recce-source/js/app/(mainComponents)/RecceVersionBadge.tsx
|
|
10657
|
+
function RecceVersionBadge() {
|
|
10658
|
+
const { version, latestVersion } = useVersionNumber();
|
|
10659
|
+
const versionFormatRegex = useMemo(() => /* @__PURE__ */ new RegExp("^\\d+\\.\\d+\\.\\d+$"), []);
|
|
10660
|
+
useEffect(() => {
|
|
10661
|
+
if (versionFormatRegex.test(version) && version !== latestVersion) {
|
|
10662
|
+
const storageKey = "recce-update-toast-shown";
|
|
10663
|
+
if (sessionStorage.getItem(storageKey)) return;
|
|
10664
|
+
setTimeout(() => {
|
|
10665
|
+
toaster.create({
|
|
10666
|
+
id: "recce-update-available",
|
|
10667
|
+
title: "Update available",
|
|
10668
|
+
description: /* @__PURE__ */ jsxs("span", { children: [
|
|
10669
|
+
"A new version of Recce (v",
|
|
10670
|
+
latestVersion,
|
|
10671
|
+
") is available.",
|
|
10672
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
10673
|
+
"Please run",
|
|
10674
|
+
" ",
|
|
10675
|
+
/* @__PURE__ */ jsx(Box, {
|
|
10676
|
+
component: "code",
|
|
10677
|
+
sx: {
|
|
10678
|
+
bgcolor: "grey.200",
|
|
10679
|
+
px: .5,
|
|
10680
|
+
py: .25,
|
|
10681
|
+
borderRadius: .5,
|
|
10682
|
+
fontFamily: "monospace",
|
|
10683
|
+
fontSize: "0.875em"
|
|
10684
|
+
},
|
|
10685
|
+
children: "pip install --upgrade recce"
|
|
10686
|
+
}),
|
|
10687
|
+
" ",
|
|
10688
|
+
"to update Recce.",
|
|
10689
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
10690
|
+
/* @__PURE__ */ jsx(Link, {
|
|
10691
|
+
sx: {
|
|
10692
|
+
color: "primary.main",
|
|
10693
|
+
fontWeight: "bold",
|
|
10694
|
+
"&:hover": { textDecoration: "underline" }
|
|
10695
|
+
},
|
|
10696
|
+
href: `https://github.com/DataRecce/recce/releases/tag/v${latestVersion}`,
|
|
10697
|
+
target: "_blank",
|
|
10698
|
+
children: "Click here to view the detail of latest release"
|
|
10699
|
+
})
|
|
10700
|
+
] }),
|
|
10701
|
+
duration: 60 * 1e3,
|
|
10702
|
+
closable: true
|
|
10703
|
+
});
|
|
10704
|
+
sessionStorage.setItem(storageKey, "true");
|
|
10705
|
+
}, 0);
|
|
10706
|
+
}
|
|
10707
|
+
}, [
|
|
10708
|
+
version,
|
|
10709
|
+
latestVersion,
|
|
10710
|
+
versionFormatRegex
|
|
10711
|
+
]);
|
|
10712
|
+
if (!versionFormatRegex.test(version)) return /* @__PURE__ */ jsx(Typography, {
|
|
10713
|
+
component: "span",
|
|
10714
|
+
sx: {
|
|
10715
|
+
fontSize: "sm",
|
|
10716
|
+
color: "rgba(255,255,255,0.8)",
|
|
10717
|
+
textTransform: "uppercase",
|
|
10718
|
+
borderWidth: 1,
|
|
10719
|
+
px: 1,
|
|
10720
|
+
borderRadius: .75
|
|
10721
|
+
},
|
|
10722
|
+
children: version
|
|
10723
|
+
});
|
|
10724
|
+
return /* @__PURE__ */ jsx(Link, {
|
|
10725
|
+
href: `https://github.com/DataRecce/recce/releases/tag/v${version}`,
|
|
10726
|
+
sx: {
|
|
10727
|
+
"&:hover": { textDecoration: "none" },
|
|
10728
|
+
fontSize: "sm",
|
|
10729
|
+
color: "rgba(255,255,255,0.8)",
|
|
10730
|
+
textTransform: "uppercase",
|
|
10731
|
+
borderWidth: 1,
|
|
10732
|
+
px: 1,
|
|
10733
|
+
borderRadius: .75
|
|
10734
|
+
},
|
|
10735
|
+
target: "_blank",
|
|
10736
|
+
children: version
|
|
10737
|
+
});
|
|
10738
|
+
}
|
|
10739
|
+
|
|
10559
10740
|
//#endregion
|
|
10560
10741
|
//#region recce-source/js/app/(mainComponents)/TopBar.tsx
|
|
10561
10742
|
function LinkIcon({ icon: IconComponent, href, sx, ...props }) {
|
|
@@ -10808,6 +10989,7 @@ const useClosePrompt = (prompt) => {
|
|
|
10808
10989
|
const Filename = () => {
|
|
10809
10990
|
const { featureToggles } = useRecceInstanceContext();
|
|
10810
10991
|
const { fileName, cloudMode, isDemoSite, envInfo } = useLineageGraphContext();
|
|
10992
|
+
const { apiClient } = useApiConfig();
|
|
10811
10993
|
const [modalOpen, setModalOpen] = useState(false);
|
|
10812
10994
|
const [overwriteOpen, setOverwriteOpen] = useState(false);
|
|
10813
10995
|
const isStateless = !fileName && !cloudMode && !isDemoSite;
|
|
@@ -10834,11 +11016,11 @@ const Filename = () => {
|
|
|
10834
11016
|
if (method === "save") await saveAs$1({
|
|
10835
11017
|
filename: newFileName,
|
|
10836
11018
|
overwrite: overwrite ?? bypassOverwrite
|
|
10837
|
-
});
|
|
11019
|
+
}, apiClient);
|
|
10838
11020
|
else await rename({
|
|
10839
11021
|
filename: newFileName,
|
|
10840
11022
|
overwrite: overwrite ?? bypassOverwrite
|
|
10841
|
-
});
|
|
11023
|
+
}, apiClient);
|
|
10842
11024
|
toastSuccess(method === "save" ? "Save file successfully" : "Rename file successfully");
|
|
10843
11025
|
await queryClient.invalidateQueries({ queryKey: cacheKeys.lineage() });
|
|
10844
11026
|
if (bypass) localStorage.setItem(localStorageKeys.bypassSaveOverwrite, "true");
|
|
@@ -11062,9 +11244,10 @@ const Filename = () => {
|
|
|
11062
11244
|
//#region recce-source/js/src/components/app/StateExporter.tsx
|
|
11063
11245
|
function StateExporter() {
|
|
11064
11246
|
const { featureToggles } = useRecceInstanceContext();
|
|
11247
|
+
const { apiClient } = useApiConfig();
|
|
11065
11248
|
const handleExport = async () => {
|
|
11066
11249
|
try {
|
|
11067
|
-
const jsonData = await exportState();
|
|
11250
|
+
const jsonData = await exportState(apiClient);
|
|
11068
11251
|
const jsonString = JSON.stringify(jsonData, null, 2);
|
|
11069
11252
|
saveAs(new Blob([jsonString], { type: "application/json" }), `recce-state-${format(/* @__PURE__ */ new Date(), "yyyy-MM-dd-HH-mm-ss")}.json`);
|
|
11070
11253
|
} catch (error) {
|
|
@@ -11231,6 +11414,7 @@ function StateSpinner() {
|
|
|
11231
11414
|
function StateSynchronizer() {
|
|
11232
11415
|
const [isSyncing, setSyncing] = useState(false);
|
|
11233
11416
|
const queryClient = useQueryClient();
|
|
11417
|
+
const { apiClient } = useApiConfig();
|
|
11234
11418
|
const [location, setLocation] = useAppLocation();
|
|
11235
11419
|
const [open, setOpen] = useState(false);
|
|
11236
11420
|
const [syncOption, setSyncOption] = useState("");
|
|
@@ -11239,12 +11423,12 @@ function StateSynchronizer() {
|
|
|
11239
11423
|
const handleSync = useCallback(async (input) => {
|
|
11240
11424
|
setOpen(false);
|
|
11241
11425
|
setSyncing(true);
|
|
11242
|
-
if ((await syncState(input)).status === "conflict") {
|
|
11426
|
+
if ((await syncState(input, apiClient)).status === "conflict") {
|
|
11243
11427
|
setOpen(true);
|
|
11244
11428
|
setSyncing(false);
|
|
11245
11429
|
return;
|
|
11246
11430
|
}
|
|
11247
|
-
while (await isStateSyncing()) await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
11431
|
+
while (await isStateSyncing(apiClient)) await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
11248
11432
|
toaster.create({
|
|
11249
11433
|
description: "Sync Completed",
|
|
11250
11434
|
type: "success",
|
|
@@ -11260,7 +11444,8 @@ function StateSynchronizer() {
|
|
|
11260
11444
|
}, [
|
|
11261
11445
|
queryClient,
|
|
11262
11446
|
location,
|
|
11263
|
-
setLocation
|
|
11447
|
+
setLocation,
|
|
11448
|
+
apiClient
|
|
11264
11449
|
]);
|
|
11265
11450
|
if (isSyncing) return /* @__PURE__ */ jsx(StateSpinner, {});
|
|
11266
11451
|
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(MuiTooltip, {
|
|
@@ -11546,141 +11731,5 @@ function NavBar() {
|
|
|
11546
11731
|
}
|
|
11547
11732
|
|
|
11548
11733
|
//#endregion
|
|
11549
|
-
|
|
11550
|
-
|
|
11551
|
-
* Display Mode Toggle - switches between light and dark themes
|
|
11552
|
-
*
|
|
11553
|
-
* Uses next-themes to persist the user's preference.
|
|
11554
|
-
* Default is light theme, with future support for system preference.
|
|
11555
|
-
*/
|
|
11556
|
-
function DisplayModeToggle$1() {
|
|
11557
|
-
const { setTheme, resolvedTheme } = useTheme$1();
|
|
11558
|
-
const [mounted, setMounted] = useState(false);
|
|
11559
|
-
useEffect(() => {
|
|
11560
|
-
setMounted(true);
|
|
11561
|
-
}, []);
|
|
11562
|
-
const toggleTheme = () => {
|
|
11563
|
-
setTheme(resolvedTheme === "dark" ? "light" : "dark");
|
|
11564
|
-
};
|
|
11565
|
-
if (!mounted) return /* @__PURE__ */ jsx(IconButton, {
|
|
11566
|
-
size: "small",
|
|
11567
|
-
sx: {
|
|
11568
|
-
color: "rgba(255, 255, 255, 0.8)",
|
|
11569
|
-
"&:hover": { bgcolor: "rgba(255, 255, 255, 0.1)" }
|
|
11570
|
-
},
|
|
11571
|
-
disabled: true,
|
|
11572
|
-
children: /* @__PURE__ */ jsx(PiSun, { style: {
|
|
11573
|
-
width: 18,
|
|
11574
|
-
height: 18
|
|
11575
|
-
} })
|
|
11576
|
-
});
|
|
11577
|
-
const isDark = resolvedTheme === "dark";
|
|
11578
|
-
return /* @__PURE__ */ jsx(MuiTooltip, {
|
|
11579
|
-
title: isDark ? "Switch to light mode" : "Switch to dark mode",
|
|
11580
|
-
children: /* @__PURE__ */ jsx(IconButton, {
|
|
11581
|
-
size: "small",
|
|
11582
|
-
onClick: toggleTheme,
|
|
11583
|
-
sx: {
|
|
11584
|
-
color: "rgba(255, 255, 255, 0.8)",
|
|
11585
|
-
"&:hover": { bgcolor: "rgba(255, 255, 255, 0.1)" }
|
|
11586
|
-
},
|
|
11587
|
-
"aria-label": isDark ? "Switch to light mode" : "Switch to dark mode",
|
|
11588
|
-
children: isDark ? /* @__PURE__ */ jsx(PiSun, { style: {
|
|
11589
|
-
width: 18,
|
|
11590
|
-
height: 18
|
|
11591
|
-
} }) : /* @__PURE__ */ jsx(PiMoon, { style: {
|
|
11592
|
-
width: 18,
|
|
11593
|
-
height: 18
|
|
11594
|
-
} })
|
|
11595
|
-
})
|
|
11596
|
-
});
|
|
11597
|
-
}
|
|
11598
|
-
|
|
11599
|
-
//#endregion
|
|
11600
|
-
//#region recce-source/js/app/(mainComponents)/RecceVersionBadge.tsx
|
|
11601
|
-
function RecceVersionBadge$1() {
|
|
11602
|
-
const { version, latestVersion } = useVersionNumber();
|
|
11603
|
-
const versionFormatRegex = useMemo(() => /* @__PURE__ */ new RegExp("^\\d+\\.\\d+\\.\\d+$"), []);
|
|
11604
|
-
useEffect(() => {
|
|
11605
|
-
if (versionFormatRegex.test(version) && version !== latestVersion) {
|
|
11606
|
-
const storageKey = "recce-update-toast-shown";
|
|
11607
|
-
if (sessionStorage.getItem(storageKey)) return;
|
|
11608
|
-
setTimeout(() => {
|
|
11609
|
-
toaster.create({
|
|
11610
|
-
id: "recce-update-available",
|
|
11611
|
-
title: "Update available",
|
|
11612
|
-
description: /* @__PURE__ */ jsxs("span", { children: [
|
|
11613
|
-
"A new version of Recce (v",
|
|
11614
|
-
latestVersion,
|
|
11615
|
-
") is available.",
|
|
11616
|
-
/* @__PURE__ */ jsx("br", {}),
|
|
11617
|
-
"Please run",
|
|
11618
|
-
" ",
|
|
11619
|
-
/* @__PURE__ */ jsx(Box, {
|
|
11620
|
-
component: "code",
|
|
11621
|
-
sx: {
|
|
11622
|
-
bgcolor: "grey.200",
|
|
11623
|
-
px: .5,
|
|
11624
|
-
py: .25,
|
|
11625
|
-
borderRadius: .5,
|
|
11626
|
-
fontFamily: "monospace",
|
|
11627
|
-
fontSize: "0.875em"
|
|
11628
|
-
},
|
|
11629
|
-
children: "pip install --upgrade recce"
|
|
11630
|
-
}),
|
|
11631
|
-
" ",
|
|
11632
|
-
"to update Recce.",
|
|
11633
|
-
/* @__PURE__ */ jsx("br", {}),
|
|
11634
|
-
/* @__PURE__ */ jsx(Link, {
|
|
11635
|
-
sx: {
|
|
11636
|
-
color: "primary.main",
|
|
11637
|
-
fontWeight: "bold",
|
|
11638
|
-
"&:hover": { textDecoration: "underline" }
|
|
11639
|
-
},
|
|
11640
|
-
href: `https://github.com/DataRecce/recce/releases/tag/v${latestVersion}`,
|
|
11641
|
-
target: "_blank",
|
|
11642
|
-
children: "Click here to view the detail of latest release"
|
|
11643
|
-
})
|
|
11644
|
-
] }),
|
|
11645
|
-
duration: 60 * 1e3,
|
|
11646
|
-
closable: true
|
|
11647
|
-
});
|
|
11648
|
-
sessionStorage.setItem(storageKey, "true");
|
|
11649
|
-
}, 0);
|
|
11650
|
-
}
|
|
11651
|
-
}, [
|
|
11652
|
-
version,
|
|
11653
|
-
latestVersion,
|
|
11654
|
-
versionFormatRegex
|
|
11655
|
-
]);
|
|
11656
|
-
if (!versionFormatRegex.test(version)) return /* @__PURE__ */ jsx(Typography, {
|
|
11657
|
-
component: "span",
|
|
11658
|
-
sx: {
|
|
11659
|
-
fontSize: "sm",
|
|
11660
|
-
color: "rgba(255,255,255,0.8)",
|
|
11661
|
-
textTransform: "uppercase",
|
|
11662
|
-
borderWidth: 1,
|
|
11663
|
-
px: 1,
|
|
11664
|
-
borderRadius: .75
|
|
11665
|
-
},
|
|
11666
|
-
children: version
|
|
11667
|
-
});
|
|
11668
|
-
return /* @__PURE__ */ jsx(Link, {
|
|
11669
|
-
href: `https://github.com/DataRecce/recce/releases/tag/v${version}`,
|
|
11670
|
-
sx: {
|
|
11671
|
-
"&:hover": { textDecoration: "none" },
|
|
11672
|
-
fontSize: "sm",
|
|
11673
|
-
color: "rgba(255,255,255,0.8)",
|
|
11674
|
-
textTransform: "uppercase",
|
|
11675
|
-
borderWidth: 1,
|
|
11676
|
-
px: 1,
|
|
11677
|
-
borderRadius: .75
|
|
11678
|
-
},
|
|
11679
|
-
target: "_blank",
|
|
11680
|
-
children: version
|
|
11681
|
-
});
|
|
11682
|
-
}
|
|
11683
|
-
|
|
11684
|
-
//#endregion
|
|
11685
|
-
export { NodeSqlView as A, GraphEdge as B, NodeView as C, SqlEditor_default as D, RunStatusAndDate as E, HistoryToggle as F, MuiProvider as G, HSplit as H, GraphNode as I, mui_provider_default as K, ModelRowCount as L, CodeEditor_default as M, SchemaView as N, QueryForm as O, LineageViewTopBar as P, ResourceTypeTag as R, SetupConnectionBanner as S, RunView as T, VSplit as U, GraphColumnNode as V, ErrorBoundary$1 as W, CheckList as _, IdleTimeoutBadge as a, LineagePage as b, ChangeSummary as c, CheckEmptyState as d, CheckDetail as f, CheckBreadcrumb as g, CheckDescription as h, TopBar as i, DiffEditor_default as j, EnvInfo as k, RunList as l, LineageDiffView as m, DisplayModeToggle$1 as n, SummaryView as o, SchemaDiffView as p, NavBar as r, SchemaSummary as s, RecceVersionBadge$1 as t, RunPage as u, QueryPage as v, RunResultPane as w, LineageView as x, SetupConnectionGuide as y, RowCountDiffTag as z };
|
|
11686
|
-
//# sourceMappingURL=components-CfY72Lq2.mjs.map
|
|
11734
|
+
export { NodeSqlView as A, GraphEdge as B, NodeView as C, SqlEditor_default as D, RunStatusAndDate as E, HistoryToggle as F, MuiProvider as G, HSplit as H, GraphNode as I, mui_provider_default as K, ModelRowCount as L, CodeEditor_default as M, SchemaView as N, QueryForm as O, LineageViewTopBar as P, ResourceTypeTag as R, SetupConnectionBanner as S, RunView as T, VSplit as U, GraphColumnNode as V, ErrorBoundary$1 as W, CheckList as _, IdleTimeoutBadge as a, LineagePage as b, ChangeSummary as c, CheckEmptyState as d, CheckDetail as f, CheckBreadcrumb as g, CheckDescription as h, DisplayModeToggle as i, DiffEditor_default as j, EnvInfo as k, RunList as l, LineageDiffView as m, TopBar as n, SummaryView as o, SchemaDiffView as p, RecceVersionBadge as r, SchemaSummary as s, NavBar as t, RunPage as u, QueryPage as v, RunResultPane as w, LineageView as x, SetupConnectionGuide as y, RowCountDiffTag as z };
|
|
11735
|
+
//# sourceMappingURL=components-DoLZeY_e.mjs.map
|