Dashboard: Default dashboard folder to current folder when importing (#114929)

* Set default folder when importing dashboard

* console

* remove unused import
This commit is contained in:
Kristina Demeshchik
2025-12-09 09:59:21 -05:00
committed by GitHub
parent b8ad272159
commit 8c4b3d1702
3 changed files with 9 additions and 22 deletions
-3
View File
@@ -2062,9 +2062,6 @@
},
"@typescript-eslint/no-explicit-any": {
"count": 3
},
"no-restricted-syntax": {
"count": 3
}
},
"public/app/features/dashboard-scene/v2schema/ImportDashboardOverviewV2.tsx": {
@@ -17,10 +17,8 @@ interface Props
'register' | 'control' | 'getValues' | 'watch'
> {
inputs: DashboardInputs;
uidReset: boolean;
errors: FieldErrors<SaveDashboardCommand<DashboardV2Spec> & { [key: `datasource-${string}`]: string }>;
onCancel: () => void;
onUidReset: () => void;
onSubmit: FormsOnSubmit<SaveDashboardCommand<DashboardV2Spec> & { [key: `datasource-${string}`]: string }>;
}
@@ -30,8 +28,6 @@ export const ImportDashboardFormV2 = ({
control,
inputs,
getValues,
uidReset,
onUidReset,
onCancel,
onSubmit,
watch,
@@ -56,12 +52,12 @@ export const ImportDashboardFormV2 = ({
}, [errors, getValues, isSubmitted, onSubmit]);
return (
<>
<Trans i18nKey="manage-dashboards.import-dashboard-form.options">Options</Trans>
<Stack direction="column" gap={2}>
<Field
label={t('manage-dashboards.import-dashboard-form.label-name', 'Name')}
invalid={!!errors.dashboard?.title}
error={errors.dashboard?.title && errors.dashboard?.title.message}
noMargin
>
<Input
{...(register as any)('dashboard.title', {
@@ -72,7 +68,8 @@ export const ImportDashboardFormV2 = ({
data-testid={selectors.components.ImportDashboardForm.name}
/>
</Field>
<Field label={t('dashboard-scene.import-dashboard-form-v2.label-folder', 'Folder')}>
<Field label={t('dashboard-scene.import-dashboard-form-v2.label-folder', 'Folder')} noMargin>
<Controller<any>
render={({ field: { ref, value, onChange, ...field } }) => (
<FolderPicker
@@ -87,6 +84,7 @@ export const ImportDashboardFormV2 = ({
control={control}
/>
</Field>
{inputs.dataSources &&
inputs.dataSources.map((input: DataSourceInput) => {
if (input.pluginId === ExpressionDatasourceRef.type) {
@@ -102,6 +100,7 @@ export const ImportDashboardFormV2 = ({
key={input.pluginId}
invalid={!!errors[dataSourceOption]}
error={errors[dataSourceOption] ? 'Please select a data source' : undefined}
noMargin
>
<Controller<any>
name={dataSourceOption}
@@ -133,7 +132,7 @@ export const ImportDashboardFormV2 = ({
);
})}
<Stack>
<Stack direction="row" gap={2}>
<Button
type="submit"
data-testid={selectors.components.ImportDashboardForm.submit}
@@ -148,7 +147,7 @@ export const ImportDashboardFormV2 = ({
<Trans i18nKey="dashboard-scene.import-dashboard-form-v2.cancel">Cancel</Trans>
</Button>
</Stack>
</>
</Stack>
);
};
@@ -1,5 +1,3 @@
import { useState } from 'react';
import { locationUtil } from '@grafana/data';
import { locationService, reportInteraction } from '@grafana/runtime';
import {
@@ -20,7 +18,6 @@ const IMPORT_FINISHED_EVENT_NAME = 'dashboard_import_imported';
type FormData = SaveDashboardCommand<DashboardV2Spec> & { [key: `datasource-${string}`]: string };
export function ImportDashboardOverviewV2() {
const [uidReset, setUidReset] = useState(false);
const dispatch = useDispatch();
// Get state from Redux store
@@ -29,10 +26,6 @@ export function ImportDashboardOverviewV2() {
const inputs = useSelector((state: StoreState) => state.importDashboard.inputs);
const folder = searchObj.folderUid ? { uid: String(searchObj.folderUid) } : { uid: '' };
function onUidReset() {
setUidReset(true);
}
function onCancel() {
dispatch(clearLoadedDashboard());
}
@@ -180,7 +173,7 @@ export function ImportDashboardOverviewV2() {
<>
<Form<FormData>
onSubmit={onSubmit}
defaultValues={{ dashboard, k8s: { annotations: { 'grafana.app/folder': folder.uid } } }}
defaultValues={{ dashboard, folderUid: folder.uid, k8s: { annotations: { 'grafana.app/folder': folder.uid } } }}
validateOnMount
validateOn="onChange"
>
@@ -191,9 +184,7 @@ export function ImportDashboardOverviewV2() {
errors={errors}
control={control}
getValues={getValues}
uidReset={uidReset}
onCancel={onCancel}
onUidReset={onUidReset}
onSubmit={onSubmit}
watch={watch}
/>