Skip to content

Commit ec4d2bc

Browse files
authored
Merge pull request #84 from gdi-be/get-value-from-original
Introduces button to use the value of the original dataset
2 parents e5b469d + cd1dc97 commit ec4d2bc

4 files changed

Lines changed: 54 additions & 3 deletions

File tree

src/lib/components/Form/Field/13_TopicCategory.svelte

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
2626
let disabled = $derived(!!annexValue?.length && profileValue !== 'ISO');
2727
28-
$inspect(annexValue?.length, profileValue, disabled);
29-
3028
const onChange = async (newValue?: string[]) => {
3129
const response = await persistValue(KEY, newValue);
3230
if (response.ok) {

src/lib/components/Form/FieldTools.svelte

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
import Checkmark from './Checkmark.svelte';
33
import HelpButton from './HelpButton.svelte';
44
import CopyButton from './CopyButton.svelte';
5-
import type { Snippet } from 'svelte';
5+
import { type Snippet } from 'svelte';
66
import { Icon } from '@smui/button';
7+
import { getFormContext, getValue, persistValue } from '$lib/context/FormContext.svelte';
8+
import IconButton from '@smui/icon-button';
79
810
export type FieldToolsProps = {
911
key: string;
@@ -23,11 +25,23 @@
2325
noCopyButton = false
2426
}: FieldToolsProps = $props();
2527
28+
const metadata = $derived(getFormContext()?.metadata);
29+
2630
const checkIfHasHelp = async () => {
2731
const response = await fetch(`/help/${key}`);
2832
if (!response.ok || response.status === 204) return false;
2933
return true;
3034
};
35+
36+
const getValueFromOriginal = async () => {
37+
const response = await fetch(`/metadata/${metadata?.clonedFromId}`, {
38+
headers: {
39+
'Content-Type': 'application/json'
40+
}
41+
});
42+
const originalMetadata = await response.json();
43+
return getValue(key, originalMetadata);
44+
};
3145
</script>
3246

3347
<div class="field-tools">
@@ -45,6 +59,31 @@
4559
{#if !noCopyButton}
4660
<CopyButton {key} />
4761
{/if}
62+
{#if metadata?.clonedFromId}
63+
{#await getValueFromOriginal()}
64+
<Icon
65+
class="material-icons spinner"
66+
title="Es wird geprüft, ob der Wert im Originaldatensatz gesetzt ist."
67+
>
68+
progress_activity
69+
</Icon>
70+
{:then valueFromOriginal}
71+
{#if valueFromOriginal}
72+
<IconButton
73+
type="button"
74+
size="button"
75+
title="Wert aus Originaldatensatz übernehmen"
76+
onclick={() => persistValue(key, valueFromOriginal)}
77+
>
78+
<Icon class="material-icons">settings_backup_restore</Icon>
79+
</IconButton>
80+
{/if}
81+
{:catch}
82+
<Icon class="material-icons" title="Fehler beim Prüfen des Originaldatensatzes.">
83+
warning
84+
</Icon>
85+
{/await}
86+
{/if}
4887
{@render children?.()}
4988
{#if !noCheckmark}
5089
<Checkmark bind:running />

src/lib/models/metadata.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ export type Contacts = Contact[];
215215

216216
export type MetadataCollection = {
217217
id?: string;
218+
clonedFromId?: string;
218219
metadataId?: MetadataId;
219220
teamMemberIds?: string[];
220221
assignedUserId?: string;

src/routes/metadata/[metadataid]/+server.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
import { error, json } from '@sveltejs/kit';
22
import { getAccessToken } from '$lib/auth/cookies.js';
33
import { deleteMetadataCollection, updateDataValue } from '$lib/api/metadata.js';
4+
import { getMetadataCollectionByMetadataId } from '$lib/api/metadata.js';
5+
6+
/** @type {import('./$types').RequestHandler} */
7+
export async function GET({ cookies, params }) {
8+
const token = await getAccessToken(cookies);
9+
if (!token) return error(401, 'Unauthorized');
10+
if (!params.metadataid) return error(404, 'Not Found');
11+
12+
const metadata = await getMetadataCollectionByMetadataId(params.metadataid, token);
13+
if (!metadata) return error(404, `Metadata with ID ${params.metadataid} could not be found`);
14+
15+
return json(metadata);
16+
}
417

518
/** @type {import('./$types').RequestHandler} */
619
export async function PATCH({ cookies, request, params }) {

0 commit comments

Comments
 (0)