diff --git a/ui/package.json b/ui/package.json
index 2c8a54b12..5717f8a46 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -4,6 +4,7 @@
"private": true,
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.35",
+ "@fortawesome/free-regular-svg-icons": "^5.15.3",
"@fortawesome/free-solid-svg-icons": "^5.15.3",
"@fortawesome/react-fontawesome": "^0.1.14",
"@testing-library/jest-dom": "^5.11.4",
diff --git a/ui/src/app/metadata/domain/filter/component/MetadataFilterConfigurationListItem.js b/ui/src/app/metadata/domain/filter/component/MetadataFilterConfigurationListItem.js
index de11d4205..6b2fa4d09 100644
--- a/ui/src/app/metadata/domain/filter/component/MetadataFilterConfigurationListItem.js
+++ b/ui/src/app/metadata/domain/filter/component/MetadataFilterConfigurationListItem.js
@@ -73,12 +73,13 @@ export function MetadataFilterConfigurationListItem ({ filter, isLast, isFirst,
}
- {configuration && }
-
-
- }
+ {configuration &&
+ }
+
+
+ }
>);
}
\ No newline at end of file
diff --git a/ui/src/app/metadata/domain/filter/component/MetadataFilterVersionList.js b/ui/src/app/metadata/domain/filter/component/MetadataFilterVersionList.js
index b8d6e8df2..fb3043cdb 100644
--- a/ui/src/app/metadata/domain/filter/component/MetadataFilterVersionList.js
+++ b/ui/src/app/metadata/domain/filter/component/MetadataFilterVersionList.js
@@ -1,60 +1,47 @@
-import { faCheckSquare, faSquare } from '@fortawesome/free-solid-svg-icons';
+import { faArrowLeft } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import React from 'react';
import FormattedDate from '../../../../core/components/FormattedDate';
import Translate from '../../../../i18n/components/translate';
import { usePropertyWidth } from '../../../component/properties/hooks';
+import { MetadataFilterVersionListItem } from './MetadataFilterVersionListItem';
-
-
-
-export function MetadataFilterVersionList ({ configuration, columns }) {
+export function MetadataFilterVersionList ({ configuration, limited, columns }) {
const width = usePropertyWidth(columns);
const [comparing, setComparing] = React.useState(false);
const [selected, setSelected] = React.useState(null);
+ const resetFilterComparison = () => {
+ setComparing(false);
+ setSelected(null);
+ }
+
return (
{ configuration && configuration.dates.length > 0 &&
-
+ {!comparing ?
- {configuration.dates.map(d =>
-
+ {configuration.dates.map((d, didx) =>
+
) }
-
+
:
}
{configuration.filters.map((version, i) =>
-
-
- { i + 1 }
-
- {version.map((filter, n) =>
-
- {filter ?
-
-
-
{ filter.name }
-
{ filter['@type'] }
-
- { filter.comparable &&
-
- }
-
- :
-
-
- }
-
- )}
-
+ setSelected(id)} />
) }
{ configuration &&
@@ -65,9 +52,16 @@ export function MetadataFilterVersionList ({ configuration, columns }) {
:
-
}
@@ -75,8 +69,5 @@ export function MetadataFilterVersionList ({ configuration, columns }) {
}
-
-
-
);
}
diff --git a/ui/src/app/metadata/domain/filter/component/MetadataFilterVersionListItem.js b/ui/src/app/metadata/domain/filter/component/MetadataFilterVersionListItem.js
new file mode 100644
index 000000000..cd00341ca
--- /dev/null
+++ b/ui/src/app/metadata/domain/filter/component/MetadataFilterVersionListItem.js
@@ -0,0 +1,72 @@
+import React from 'react';
+import { faCheckSquare, faSquare } from '@fortawesome/free-regular-svg-icons';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { MetadataConfiguration } from '../../../component/MetadataConfiguration';
+import { getDefinition } from '../../../domain/index';
+import { useMetadataSchema } from '../../../hooks/api';
+import { useMetadataConfiguration } from '../../../hooks/configuration';
+
+export function MetadataFilterVersionListItem ({ filters, width, selected, index, comparing, limited, onSelect }) {
+
+ const filter = filters.find(f => f.hasOwnProperty('@type'));
+ const type = filter['@type'];
+
+ React.useEffect(() => console.log(filters), [filters]);
+
+ const definition = React.useMemo(() => getDefinition(type), [type]);
+
+ const { get, response } = useMetadataSchema();
+
+ const [schema, setSchema] = React.useState();
+
+ async function loadSchema(d) {
+ const source = await get(`/${d.schema}`)
+ if (response.ok) {
+ setSchema(source);
+ }
+ }
+
+ /*eslint-disable react-hooks/exhaustive-deps*/
+ React.useEffect(() => { loadSchema(definition) }, [definition]);
+
+ const config = useMetadataConfiguration([...filters.filter(f => !!f)], schema, definition, limited);
+
+ return (
+
+ {!comparing &&
+
+
+ {index + 1}
+
+ {filters.map((filter, n) =>
+
+
+
+ {filter ?
+
+
+
{filter.name}
+
{filter['@type']}
+
+ {filter.comparable &&
+
onSelect(filter.resourceId)}>
+
+ Compare
+
+ }
+
+ :
+
-
+ }
+
+
+
+ )}
+
+ }
+ {comparing === filter.resourceId &&
+
+ }
+
+ );
+}
\ No newline at end of file
diff --git a/ui/src/app/metadata/hoc/MetadataVersionLoader.js b/ui/src/app/metadata/hoc/MetadataVersionLoader.js
index a2c62c10e..40b6f2bdf 100644
--- a/ui/src/app/metadata/hoc/MetadataVersionLoader.js
+++ b/ui/src/app/metadata/hoc/MetadataVersionLoader.js
@@ -38,9 +38,10 @@ export function MetadataVersionLoader ({versions, children}) {
loadVersion(v);
}
+ /*eslint-disable react-hooks/exhaustive-deps*/
React.useEffect(() => {
loadNext(versions[0]);
- }, []);
+ }, [versions]);
return (
{children(versions.map(v => list[v]).filter(v => !!v))}
diff --git a/ui/src/app/metadata/hooks/schema.js b/ui/src/app/metadata/hooks/schema.js
index ae1a4872e..ad5acdb65 100644
--- a/ui/src/app/metadata/hooks/schema.js
+++ b/ui/src/app/metadata/hooks/schema.js
@@ -1,6 +1,4 @@
-import { MetadataFilterTypes } from "../domain/filter";
-
-export function getDefinition(path, definitions) {
+function getDefinition(path, definitions) {
let def = path.split('/').pop();
return definitions[def];
}
diff --git a/ui/src/app/metadata/view/MetadataComparison.js b/ui/src/app/metadata/view/MetadataComparison.js
index a945c2578..b1b792134 100644
--- a/ui/src/app/metadata/view/MetadataComparison.js
+++ b/ui/src/app/metadata/view/MetadataComparison.js
@@ -31,6 +31,11 @@ export function MetadataComparison () {
return (
<>
+
+ Compare
+ Source
+ Configuration
+
{versions &&
{(v) =>
@@ -61,7 +66,7 @@ export function MetadataComparison () {
- {(c) => }
+ {(c) => }
}
diff --git a/ui/src/app/metadata/view/MetadataHistory.js b/ui/src/app/metadata/view/MetadataHistory.js
index 64d7e7de2..2bd83db69 100644
--- a/ui/src/app/metadata/view/MetadataHistory.js
+++ b/ui/src/app/metadata/view/MetadataHistory.js
@@ -7,6 +7,8 @@ import FormattedDate from '../../core/components/FormattedDate';
import Translate from '../../i18n/components/translate';
import { useMetadataHistory } from '../hooks/api';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { faUndo } from '@fortawesome/free-solid-svg-icons';
const sortVersionsByDate = (versions) => {
return versions.sort((a, b) => {
@@ -34,8 +36,8 @@ export function MetadataHistory () {
};
const restore = () => {};
const compare = (versions) => {
- const sorted = sortVersionsByDate(versions);
- const path = `/metadata/${type}/${id}/configuration/compare?${queryString.stringify({versions: sorted.map(s => s.id)}, {
+ const s = sortVersionsByDate(versions);
+ const path = `/metadata/${type}/${id}/configuration/compare?${queryString.stringify({versions: s.map(s => s.id)}, {
skipNull: true,
})}`;
history.push(path);
@@ -71,7 +73,7 @@ export function MetadataHistory () {
- {data.map((version, i) =>
+ {sorted.map((version, i) =>
toggleVersionSelected(version)}>
@@ -95,7 +97,7 @@ export function MetadataHistory () {
{i > 0 &&
restore(version) }>
-
+
Restore
}
diff --git a/ui/src/app/metadata/view/MetadataVersion.js b/ui/src/app/metadata/view/MetadataVersion.js
index db3bf3d81..2e4d23262 100644
--- a/ui/src/app/metadata/view/MetadataVersion.js
+++ b/ui/src/app/metadata/view/MetadataVersion.js
@@ -37,6 +37,7 @@ export function MetadataVersion() {
}
}
+ /*eslint-disable react-hooks/exhaustive-deps*/
React.useEffect(() => {
loadVersion(versionId);
}, [versionId]);
@@ -85,7 +86,7 @@ export function MetadataVersion() {
- Add Filter
+ Add Filter
diff --git a/ui/src/theme/assets/exclamation-circle.svg b/ui/src/theme/assets/exclamation-circle.svg
new file mode 100644
index 000000000..8d35be07c
--- /dev/null
+++ b/ui/src/theme/assets/exclamation-circle.svg
@@ -0,0 +1,5 @@
+
+
\ No newline at end of file
diff --git a/ui/src/theme/project/utility.scss b/ui/src/theme/project/utility.scss
index f3ff5e38b..1a79b3eec 100644
--- a/ui/src/theme/project/utility.scss
+++ b/ui/src/theme/project/utility.scss
@@ -28,14 +28,16 @@
position: relative;
border-color: #CCC !important;
&::before {
- $size: 24px;
- content: "\f06a";
+ $size: 16px;
+ content: "";
+ opacity: 0.75;
+ background: url('../assets/exclamation-circle.svg');
font-family: 'FontAwesome';
text-align: center;
width: $size;
height: $size;
position: absolute;
- left: -$size;
- top: 0.5rem;
+ left: -$size - 4;
+ top: 0.75rem;
}
}
\ No newline at end of file
diff --git a/ui/yarn.lock b/ui/yarn.lock
index 43d217b52..549119ae0 100644
--- a/ui/yarn.lock
+++ b/ui/yarn.lock
@@ -1189,6 +1189,13 @@
dependencies:
"@fortawesome/fontawesome-common-types" "^0.2.35"
+"@fortawesome/free-regular-svg-icons@^5.15.3":
+ version "5.15.3"
+ resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.15.3.tgz#1ec4f2410ff638db549c5c5484fc60b66407dbe6"
+ integrity sha512-q4/p8Xehy9qiVTdDWHL4Z+o5PCLRChePGZRTXkl+/Z7erDVL8VcZUuqzJjs6gUz6czss4VIPBRdCz6wP37/zMQ==
+ dependencies:
+ "@fortawesome/fontawesome-common-types" "^0.2.35"
+
"@fortawesome/free-solid-svg-icons@^5.15.3":
version "5.15.3"
resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz#52eebe354f60dc77e0bde934ffc5c75ffd04f9d8"
| |