From ae463d006904b6a8ea7e9da3c0987712dce2a5b5 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Wed, 23 Jun 2021 09:59:42 -0700 Subject: [PATCH] Added restoration confirmation page --- ui/src/app/core/components/FormattedDate.js | 11 ++- ui/src/app/metadata/Metadata.js | 6 +- .../app/metadata/hoc/MetadataVersionLoader.js | 10 +-- .../metadata/view/MetadataConfirmRestore.js | 70 +++++++++++++++++++ ui/src/app/metadata/view/MetadataRestore.js | 6 +- ui/src/app/metadata/view/MetadataVersion.js | 11 ++- 6 files changed, 100 insertions(+), 14 deletions(-) create mode 100644 ui/src/app/metadata/view/MetadataConfirmRestore.js diff --git a/ui/src/app/core/components/FormattedDate.js b/ui/src/app/core/components/FormattedDate.js index e9298af73..4d74cc26d 100644 --- a/ui/src/app/core/components/FormattedDate.js +++ b/ui/src/app/core/components/FormattedDate.js @@ -1,8 +1,17 @@ import React from 'react'; import { format, parseISO } from 'date-fns'; +export function useDateFormatter() { + return (date, time) => format(parseISO(date), `MMM d, Y${time ? ' HH:mm:ss' : ''}`); +} + +export function useFormattedDate (date, time = false) { + const formatter = useDateFormatter(); + return React.useMemo(() => formatter(date, time), [date, time, formatter]); +} + export function FormattedDate ({ date, time = false }) { - const formatted = React.useMemo(() => format(parseISO(date), `MMM d, Y${time ? ' HH:mm:ss' : ''}`), [date, time]); + const formatted = useFormattedDate(date, time); return (<>{ formatted }); } diff --git a/ui/src/app/metadata/Metadata.js b/ui/src/app/metadata/Metadata.js index a9ff0b182..0d1e38b07 100644 --- a/ui/src/app/metadata/Metadata.js +++ b/ui/src/app/metadata/Metadata.js @@ -11,6 +11,7 @@ import { MetadataComparison } from './view/MetadataComparison'; import { MetadataVersion } from './view/MetadataVersion'; import { MetadataEdit } from './view/MetadataEdit'; import { MetadataRestore } from './view/MetadataRestore'; +import { MetadataConfirmRestore } from './view/MetadataConfirmRestore'; export function Metadata () { @@ -51,7 +52,10 @@ export function Metadata () { } /> - + + + } /> + } /> diff --git a/ui/src/app/metadata/hoc/MetadataVersionLoader.js b/ui/src/app/metadata/hoc/MetadataVersionLoader.js index b14e0f59a..e1d17747d 100644 --- a/ui/src/app/metadata/hoc/MetadataVersionLoader.js +++ b/ui/src/app/metadata/hoc/MetadataVersionLoader.js @@ -12,9 +12,7 @@ export function MetadataVersionLoader({children}) { const [metadata, setMetadata] = React.useState(); - const { get, response } = useMetadataEntity(type, { - cachePolicy: 'no-cache', - }, []); + const { get, response, loading } = useMetadataEntity(type, {}, []); async function loadVersion(v) { const l = await get(`/${id}/Versions/${v}`); @@ -29,10 +27,6 @@ export function MetadataVersionLoader({children}) { }, [versionId]); return ( - <> - {metadata && - {children(metadata)} - } - + {children(metadata, loading)} ); } diff --git a/ui/src/app/metadata/view/MetadataConfirmRestore.js b/ui/src/app/metadata/view/MetadataConfirmRestore.js new file mode 100644 index 000000000..abf791fbb --- /dev/null +++ b/ui/src/app/metadata/view/MetadataConfirmRestore.js @@ -0,0 +1,70 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { MetadataVersionLoader } from '../hoc/MetadataVersionLoader'; +import { Translate } from '../../i18n/components/translate'; +import { useDateFormatter } from '../../core/components/FormattedDate'; +import { faSpinner } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; + +export function MetadataConfirmRestore () { + + const formatter = useDateFormatter(); + + return ( + + {(metadata, loading) => +
+
+
+ + <>{loading ? +
+ + Loading... +
+ : + <>{metadata && + <> +

+ + Restore Version ( date ) + +

+
+
+
+

+ Create New Version from Previous Settings +

+

+ Restoring this version will copy the Version ( date ) configuration and create a new Version from the selected version settings. You can then edit the configuration before saving the new version. +

+ Cancel + Restore +
+
+
+ + } + } + + + +
+
+
+ } +
+ ) +} \ No newline at end of file diff --git a/ui/src/app/metadata/view/MetadataRestore.js b/ui/src/app/metadata/view/MetadataRestore.js index 9511c4c92..3dd257d4d 100644 --- a/ui/src/app/metadata/view/MetadataRestore.js +++ b/ui/src/app/metadata/view/MetadataRestore.js @@ -10,7 +10,8 @@ export function MetadataRestore() { return ( - {(metadata) => + {(metadata, loading) => <> + {metadata && - } + } + } ); } diff --git a/ui/src/app/metadata/view/MetadataVersion.js b/ui/src/app/metadata/view/MetadataVersion.js index 3bde185fa..16fda5c3e 100644 --- a/ui/src/app/metadata/view/MetadataVersion.js +++ b/ui/src/app/metadata/view/MetadataVersion.js @@ -5,7 +5,7 @@ import { Configuration } from '../hoc/Configuration'; import { MetadataConfiguration } from '../component/MetadataConfiguration'; import { Link, useParams } from 'react-router-dom'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faArrowUp, faHistory, faPlus } from '@fortawesome/free-solid-svg-icons'; +import { faArrowUp, faHistory, faPlus, faSpinner } from '@fortawesome/free-solid-svg-icons'; import { scroller } from 'react-scroll'; @@ -35,7 +35,13 @@ export function MetadataVersion() { return ( - {(metadata) => + {(metadata, loading) => + <> + {loading &&
+ + Loading... +
} + {metadata && {(config) => <> @@ -87,6 +93,7 @@ export function MetadataVersion() { } + } }
);