From a7deb7009617c270f7bbc2983c4937867ecbef78 Mon Sep 17 00:00:00 2001 From: Alex Khomenko Date: Thu, 6 Feb 2025 18:02:13 +0200 Subject: [PATCH] POC/Provisioning: Fix saving in nested folders (#100193) * Remove saveProvisioned flag * Get repo data from resource * Refactor * get repository data for nested folder * Remove unused hook * Sort configs alphabetically * Codeformat --- .../saving/SaveDashboardDrawer.tsx | 15 ++++---- .../provisioned/SaveProvisionedDashboard.tsx | 7 ++-- .../saving/provisioned/hooks.ts | 23 ++++++------ .../dashboard-scene/scene/DashboardScene.tsx | 11 +----- .../scene/NavToolbarActions.tsx | 2 +- public/app/features/provisioning/hooks.ts | 35 ++++++++++++------- 6 files changed, 46 insertions(+), 47 deletions(-) diff --git a/public/app/features/dashboard-scene/saving/SaveDashboardDrawer.tsx b/public/app/features/dashboard-scene/saving/SaveDashboardDrawer.tsx index 1fb1e8b3876..4de554e648f 100644 --- a/public/app/features/dashboard-scene/saving/SaveDashboardDrawer.tsx +++ b/public/app/features/dashboard-scene/saving/SaveDashboardDrawer.tsx @@ -1,10 +1,9 @@ import { SceneComponentProps, SceneObjectBase, SceneObjectState, SceneObjectRef } from '@grafana/scenes'; import { Drawer, Tab, TabsBar } from '@grafana/ui'; import { useUrlParams } from 'app/core/navigation/hooks'; -import { AnnoKeyRepoName } from 'app/features/apiserver/types'; import { SaveDashboardDiff } from 'app/features/dashboard/components/SaveDashboard/SaveDashboardDiff'; -import { useFolderRepository } from '../../provisioning/hooks'; +import { useGetResourceRepository } from '../../provisioning/hooks'; import { DashboardScene } from '../scene/DashboardScene'; import { SaveDashboardAsForm } from './SaveDashboardAsForm'; @@ -20,7 +19,6 @@ interface SaveDashboardDrawerState extends SceneObjectState { saveRefresh?: boolean; saveAsCopy?: boolean; onSaveSuccess?: () => void; - saveProvisioned?: boolean; } export class SaveDashboardDrawer extends SceneObjectBase { @@ -47,22 +45,21 @@ export class SaveDashboardDrawer extends SceneObjectBase) => { - const { saveProvisioned, showDiff, saveAsCopy, saveTimeRange, saveVariables, saveRefresh } = model.useState(); + const { showDiff, saveAsCopy, saveTimeRange, saveVariables, saveRefresh } = model.useState(); const changeInfo = model.state.dashboardRef .resolve() .getDashboardChanges(saveTimeRange, saveVariables, saveRefresh); - const { changedSaveModel, initialSaveModel, diffs, diffCount, hasFolderChanges } = changeInfo; const changesCount = diffCount + (hasFolderChanges ? 1 : 0); const dashboard = model.state.dashboardRef.resolve(); const { meta } = dashboard.useState(); const { provisioned: isProvisioned, folderTitle } = meta; const [params] = useUrlParams(); - const folderUid = params.get('folderUid'); - const folderRepository = useFolderRepository(folderUid ?? undefined); - // Provisioned dashboards have k8s metadata annotations - const isProvisionedNG = saveProvisioned || meta.k8s?.annotations?.[AnnoKeyRepoName] || Boolean(folderRepository); + const folderUid = params.get('folderUid') || undefined; + + const folderRepository = useGetResourceRepository({ folderUid }); + const isProvisionedNG = dashboard.isProvisioned() || Boolean(folderRepository); const tabs = ( diff --git a/public/app/features/dashboard-scene/saving/provisioned/SaveProvisionedDashboard.tsx b/public/app/features/dashboard-scene/saving/provisioned/SaveProvisionedDashboard.tsx index 379688aec72..2c7e682a36f 100644 --- a/public/app/features/dashboard-scene/saving/provisioned/SaveProvisionedDashboard.tsx +++ b/public/app/features/dashboard-scene/saving/provisioned/SaveProvisionedDashboard.tsx @@ -41,7 +41,6 @@ export interface Props { } export function SaveProvisionedDashboard({ drawer, changeInfo, dashboard }: Props) { - const { saveProvisioned } = drawer.useState(); const { meta, title: defaultTitle, description: defaultDescription } = dashboard.useState(); const prURL = usePullRequestParam(); @@ -51,7 +50,7 @@ export function SaveProvisionedDashboard({ drawer, changeInfo, dashboard }: Prop isGitHub, repositoryConfig, } = useDefaultValues({ meta, defaultTitle, defaultDescription }); - const [action, request] = useCreateOrUpdateRepositoryFile(saveProvisioned || isNew ? undefined : defaultValues.path); + const [action, request] = useCreateOrUpdateRepositoryFile(isNew ? undefined : defaultValues.path); const { register, handleSubmit, @@ -207,7 +206,7 @@ export function SaveProvisionedDashboard({ drawer, changeInfo, dashboard }: Prop )} -