mirror of
https://github.com/grafana/grafana.git
synced 2026-09-05 04:40:13 -05:00
ChangeTracker: Unified unsaved changes handling with library panels (#34989)
* UnsavedChanges: Move Change tracker to use Prompt * Fix a lot of race conditions and stacking of changes in onConfirm and onDismiss * Listen to save event * add missing delay argument * migrated the change tracker unit tests * Updated snapshot * Removed unessary action * removed updateSourcePanel * Fix hiding save library panel modal prompt when clicking discard * change saved libray panel title and buttons so they are a bit different as Prompt and when used from save button * Fixed issue with saving new dashboard * Now all scenarios work * increase wait time * Fixed one more race condition
This commit is contained in:
+11
-9
@@ -9,7 +9,7 @@ import { getModalStyles } from '../../styles';
|
||||
interface Props {
|
||||
panel: PanelModelWithLibraryPanel;
|
||||
folderId: number;
|
||||
isOpen: boolean;
|
||||
isUnsavedPrompt?: boolean;
|
||||
onConfirm: () => void;
|
||||
onDismiss: () => void;
|
||||
onDiscard: () => void;
|
||||
@@ -18,7 +18,7 @@ interface Props {
|
||||
export const SaveLibraryPanelModal: React.FC<Props> = ({
|
||||
panel,
|
||||
folderId,
|
||||
isOpen,
|
||||
isUnsavedPrompt,
|
||||
onDismiss,
|
||||
onConfirm,
|
||||
onDiscard,
|
||||
@@ -52,11 +52,12 @@ export const SaveLibraryPanelModal: React.FC<Props> = ({
|
||||
const styles = useStyles(getModalStyles);
|
||||
const discardAndClose = useCallback(() => {
|
||||
onDiscard();
|
||||
onDismiss();
|
||||
}, [onDiscard, onDismiss]);
|
||||
}, [onDiscard]);
|
||||
|
||||
const title = isUnsavedPrompt ? 'Unsaved library panel changes' : 'Save library panel';
|
||||
|
||||
return (
|
||||
<Modal title="Update all panel instances" icon="save" onDismiss={onDismiss} isOpen={isOpen}>
|
||||
<Modal title={title} icon="save" onDismiss={onDismiss} isOpen={true}>
|
||||
<div>
|
||||
<p className={styles.textInfo}>
|
||||
{'This update will affect '}
|
||||
@@ -95,14 +96,15 @@ export const SaveLibraryPanelModal: React.FC<Props> = ({
|
||||
<Button variant="secondary" onClick={onDismiss} fill="outline">
|
||||
Cancel
|
||||
</Button>
|
||||
<Button variant="destructive" onClick={discardAndClose}>
|
||||
Discard
|
||||
</Button>
|
||||
{isUnsavedPrompt && (
|
||||
<Button variant="destructive" onClick={discardAndClose}>
|
||||
Discard
|
||||
</Button>
|
||||
)}
|
||||
<Button
|
||||
onClick={() => {
|
||||
saveLibraryPanel(panel, folderId).then(() => {
|
||||
onConfirm();
|
||||
onDismiss();
|
||||
});
|
||||
}}
|
||||
>
|
||||
|
||||
Reference in New Issue
Block a user