From de8bb4ed6a807d55c73ad2ffc174844fecfaad50 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Mon, 24 Feb 2025 12:31:36 +0300 Subject: [PATCH] Provisioning: better branch handling (#101188) --- .../saving/provisioned/SaveProvisionedDashboard.tsx | 5 +++-- .../features/dashboard-scene/saving/provisioned/hooks.ts | 9 +++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/public/app/features/dashboard-scene/saving/provisioned/SaveProvisionedDashboard.tsx b/public/app/features/dashboard-scene/saving/provisioned/SaveProvisionedDashboard.tsx index 7115744096d..638447c2d20 100644 --- a/public/app/features/dashboard-scene/saving/provisioned/SaveProvisionedDashboard.tsx +++ b/public/app/features/dashboard-scene/saving/provisioned/SaveProvisionedDashboard.tsx @@ -47,6 +47,7 @@ export function SaveProvisionedDashboard({ drawer, changeInfo, dashboard }: Prop const { meta, title: defaultTitle, description: defaultDescription } = dashboard.useState(); const navigate = useNavigate(); const [params] = useUrlParams(); + const loadedFromRef = params.get('ref') ?? undefined; const { values: defaultValues, @@ -120,13 +121,13 @@ export function SaveProvisionedDashboard({ drawer, changeInfo, dashboard }: Prop }); if (workflow === 'write') { - ref = params.get('ref') ?? undefined; // the original ref from URL or undefined + ref = loadedFromRef; // the original ref from URL or undefined } action({ ref, name: repo, path, message: comment, body: saveModel }); }; - const workflows = getWorkflowOptions(repositoryConfig, ref); + const workflows = getWorkflowOptions(repositoryConfig, loadedFromRef); return (
diff --git a/public/app/features/dashboard-scene/saving/provisioned/hooks.ts b/public/app/features/dashboard-scene/saving/provisioned/hooks.ts index 80191b2c7a4..f9991c18e4d 100644 --- a/public/app/features/dashboard-scene/saving/provisioned/hooks.ts +++ b/public/app/features/dashboard-scene/saving/provisioned/hooks.ts @@ -1,3 +1,6 @@ +import { Chance } from 'chance'; + +import { dateTime } from '@grafana/data'; import { AnnoKeyRepoName, AnnoKeyRepoPath } from 'app/features/apiserver/types'; import { useGetResourceRepository } from 'app/features/provisioning/hooks'; import { DashboardMeta } from 'app/types'; @@ -10,7 +13,7 @@ interface UseDefaultValuesParams { defaultDescription?: string; } -function generatePath(timestamp: number, pathFromAnnotation?: string, slug?: string) { +function generatePath(timestamp: string, pathFromAnnotation?: string, slug?: string) { if (pathFromAnnotation) { const hashIndex = pathFromAnnotation.indexOf('#'); return hashIndex > 0 ? pathFromAnnotation.substring(0, hashIndex) : pathFromAnnotation; @@ -27,7 +30,9 @@ export function useDefaultValues({ meta, defaultTitle, defaultDescription }: Use // Get config by resource name or folder UID for new resources const repositoryConfig = useGetResourceRepository({ name: annoName, folderUid: meta.folderUid }); const repository = repositoryConfig?.spec; - const timestamp = Date.now(); + + const random = Chance(1); + const timestamp = `${dateTime().format('YYYY-MM-DD')}-${random.string({ length: 5, alpha: true })}`; return { values: {