Skip to content

Commit a366c6a

Browse files
authored
Merge pull request #315 from fractal-analytics-platform/fix-discard-changes-glitch
Fix discard changes glitch and first-run glitch
2 parents 5970155 + 968f50e commit a366c6a

File tree

6 files changed

+172
-161
lines changed

6 files changed

+172
-161
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
# Unreleased
44

5+
* Fixed bug with save/discard changes in workflow task (\#315).
6+
* Fixed first-run redirects issue (\#315).
7+
58
# 0.6.0
69

710
* Added fractal-web version to the footer (\#312).

src/lib/components/common/jschema/ArrayProperty.svelte

Lines changed: 61 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
import PropertyDiscriminator from '$lib/components/common/jschema/PropertyDiscriminator.svelte';
44
import PropertyDescription from '$lib/components/common/jschema/PropertyDescription.svelte';
55
6-
export let schemaProperty = undefined;
6+
export let schemaProperty;
77
let nestedProperties = [];
88
99
let accordionParentKey = schemaProperty.key.replaceAll('#', '');
1010
let collapseSymbol = accordionParentKey + '-collapse';
1111
1212
onMount(() => {
13-
schemaProperty.value?.forEach((nestedValue, index) => {
13+
schemaProperty.value?.forEach((/** @type {any} */ nestedValue, /** @type {number} */ index) => {
1414
schemaProperty.addNestedSchemaProperty(nestedValue, index);
1515
});
1616
nestedProperties = schemaProperty.nestedProperties;
@@ -21,60 +21,68 @@
2121
nestedProperties = schemaProperty.nestedProperties;
2222
}
2323
24-
function removeNestedProperty(index) {
24+
function removeNestedProperty(/** @type {number} */ index) {
2525
schemaProperty.removeNestedSchemaProperty(index);
2626
nestedProperties = schemaProperty.nestedProperties;
2727
}
28-
2928
</script>
3029
31-
{#if schemaProperty }
32-
<div class='d-flex flex-column p-2'>
33-
<div class='property-metadata d-flex flex-row w-100'>
34-
<span class='{schemaProperty.isRequired() ? "fw-bold" : ""}'>{ schemaProperty.title || "" }</span>
35-
<PropertyDescription description={schemaProperty.description} />
36-
</div>
37-
<div class='array-items my-2'>
38-
39-
40-
<div class='accordion' id='{accordionParentKey}'>
41-
<div class='accordion-item'>
42-
<div class='accordion-header'>
43-
<button class='accordion-button collapsed' type='button' data-bs-toggle='collapse'
44-
data-bs-target='#{collapseSymbol}'>Arguments list
45-
</button>
46-
</div>
47-
<div id='{collapseSymbol}' class='accordion-collapse collapse' data-bs-parent='#{accordionParentKey}'>
48-
<div class='accordion-body p-1'>
49-
<div class='d-flex justify-content-center p-2'>
50-
<button class='btn btn-primary' on:click={addNestedProperty}>Add argument to list</button>
51-
</div>
52-
<div>
53-
{#each nestedProperties as nestedProperty, index (nestedProperty.key)}
54-
<div class='d-flex'>
55-
<div class='align-self-center m-2'>
56-
<button class='btn btn-warning' on:click={removeNestedProperty(index)}>Remove</button>
57-
</div>
58-
<div class='flex-fill'>
59-
<PropertyDiscriminator schemaProperty={nestedProperty} />
60-
</div>
61-
</div>
62-
{/each}
63-
</div>
64-
</div>
65-
</div>
66-
</div>
67-
</div>
68-
69-
70-
</div>
71-
</div>
72-
30+
{#if schemaProperty}
31+
<div class="d-flex flex-column p-2">
32+
<div class="property-metadata d-flex flex-row w-100">
33+
<span class={schemaProperty.isRequired() ? 'fw-bold' : ''}>{schemaProperty.title || ''}</span>
34+
<PropertyDescription description={schemaProperty.description} />
35+
</div>
36+
<div class="array-items my-2">
37+
<div class="accordion" id={accordionParentKey}>
38+
<div class="accordion-item">
39+
<div class="accordion-header">
40+
<button
41+
class="accordion-button collapsed"
42+
type="button"
43+
data-bs-toggle="collapse"
44+
data-bs-target="#{collapseSymbol}"
45+
>
46+
Arguments list
47+
</button>
48+
</div>
49+
<div
50+
id={collapseSymbol}
51+
class="accordion-collapse collapse"
52+
data-bs-parent="#{accordionParentKey}"
53+
>
54+
<div class="accordion-body p-1">
55+
<div class="d-flex justify-content-center p-2">
56+
<button class="btn btn-primary" type="button" on:click={addNestedProperty}>
57+
Add argument to list
58+
</button>
59+
</div>
60+
<div>
61+
{#each nestedProperties as nestedProperty, index (nestedProperty.key)}
62+
<div class="d-flex">
63+
<div class="align-self-center m-2">
64+
<button
65+
class="btn btn-warning"
66+
type="button"
67+
on:click={() => removeNestedProperty(index)}
68+
>
69+
Remove
70+
</button>
71+
</div>
72+
<div class="flex-fill">
73+
<PropertyDiscriminator schemaProperty={nestedProperty} />
74+
</div>
75+
</div>
76+
{/each}
77+
</div>
78+
</div>
79+
</div>
80+
</div>
81+
</div>
82+
</div>
83+
</div>
7384
{:else}
74-
75-
<div>
76-
<p>Unable to display array data</p>
77-
</div>
78-
79-
80-
{/if}
85+
<div>
86+
<p>Unable to display array data</p>
87+
</div>
88+
{/if}
Lines changed: 88 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
<script>
2-
import { onMount } from 'svelte';
2+
import { onMount } from 'svelte';
33
import PropertiesBlock from '$lib/components/common/jschema/PropertiesBlock.svelte';
44
import PropertyDescription from '$lib/components/common/jschema/PropertyDescription.svelte';
55
6-
export let objectSchema = undefined;
6+
export let objectSchema;
77
88
let customObjectPropertyKey = undefined;
9+
/** @type {string | undefined} */
910
let addNestedObjectError = undefined;
1011
1112
let accordionParentKey = objectSchema.key.replaceAll('#', '');
@@ -23,105 +24,98 @@
2324
2425
function addNestedObjectProperty() {
2526
try {
27+
addNestedObjectError = undefined;
2628
objectSchema.addProperty(customObjectPropertyKey);
2729
customObjectPropertyKey = '';
2830
objectSchema = objectSchema;
2931
} catch (e) {
30-
console.error(e.message);
31-
addNestedObjectError = e;
32+
const msg = /** @type {Error} */ (e).message;
33+
console.error(msg);
34+
addNestedObjectError = msg;
3235
}
3336
}
34-
3537
</script>
3638

3739
{#if objectSchema}
38-
39-
<div class='d-flex flex-column p-2'>
40-
<div class='property-metadata d-flex flex-row w-100'>
41-
<span class='{objectSchema.isRequired() ? "fw-bold" : ""}'>{ objectSchema.title }</span>
42-
<PropertyDescription description={objectSchema.description} />
43-
</div>
44-
<div class='object-properties my-2'>
45-
<div class='accordion' id='{accordionParentKey}'>
46-
<div class='accordion-item'>
47-
<div class='accordion-header'>
48-
<button class='accordion-button collapsed' type='button' data-bs-toggle='collapse'
49-
data-bs-target='#{collapseSymbol}'>Argument Properties
50-
</button>
51-
</div>
52-
<div id='{collapseSymbol}' class='accordion-collapse collapse' data-bs-parent='#{accordionParentKey}'>
53-
<div class='accordion-body p-1'>
54-
{#if objectSchema.hasCustomKeyValues}
55-
<div class='d-flex justify-content-center'>
56-
<form class='row row-cols-auto g-3 align-items-center p-2'>
57-
<div class='col-6'>
58-
<input type='text' bind:value={customObjectPropertyKey} placeholder='Key' class='form-control'>
59-
</div>
60-
<div class='col-6'>
61-
<button class='btn btn-primary' on:click={addNestedObjectProperty}>Add property</button>
62-
</div>
63-
</form>
64-
</div>
65-
{#if objectSchema.properties}
66-
{#key objectSchema.properties }
67-
<PropertiesBlock blockKey={objectSchema.key} properties={objectSchema.properties}
68-
removePropertyBlock={(propertyKey) => {
69-
propertyKey = propertyKey.split(objectSchema.manager.keySeparator).pop();
70-
objectSchema.removeProperty(propertyKey);
71-
objectSchema = objectSchema;
72-
}} />
73-
{/key}
74-
{/if}
75-
{:else}
76-
{#if objectSchema.properties}
77-
{#key objectSchema.properties }
78-
<PropertiesBlock blockKey={objectSchema.key} properties={objectSchema.properties} />
79-
{/key}
80-
{/if}
81-
{/if}
82-
</div>
83-
</div>
84-
</div>
85-
86-
</div>
87-
</div>
88-
</div>
89-
40+
<div class="d-flex flex-column p-2">
41+
<div class="property-metadata d-flex flex-row w-100">
42+
<span class={objectSchema.isRequired() ? 'fw-bold' : ''}>{objectSchema.title}</span>
43+
<PropertyDescription description={objectSchema.description} />
44+
</div>
45+
<div class="object-properties my-2">
46+
<div class="accordion" id={accordionParentKey}>
47+
<div class="accordion-item">
48+
<div class="accordion-header">
49+
<button
50+
class="accordion-button collapsed"
51+
type="button"
52+
data-bs-toggle="collapse"
53+
data-bs-target="#{collapseSymbol}"
54+
>
55+
Argument Properties
56+
</button>
57+
</div>
58+
<div
59+
id={collapseSymbol}
60+
class="accordion-collapse collapse"
61+
data-bs-parent="#{accordionParentKey}"
62+
>
63+
<div class="accordion-body p-1">
64+
{#if objectSchema.hasCustomKeyValues}
65+
<div class="d-flex justify-content-center">
66+
<form class="row row-cols-auto g-3 align-items-center p-2 flex-grow-1">
67+
<div class="col-lg-6 offset-lg-3 mb-1">
68+
<div class="input-group" class:has-validation={addNestedObjectError}>
69+
<input
70+
type="text"
71+
bind:value={customObjectPropertyKey}
72+
placeholder="Key"
73+
class="form-control"
74+
class:is-invalid={addNestedObjectError}
75+
/>
76+
<button
77+
class="btn btn-primary"
78+
type="button"
79+
on:click={addNestedObjectProperty}
80+
>
81+
Add property
82+
</button>
83+
{#if addNestedObjectError}
84+
<div class="invalid-feedback">{addNestedObjectError}</div>
85+
{/if}
86+
</div>
87+
</div>
88+
</form>
89+
</div>
90+
{#if objectSchema.properties}
91+
{#key objectSchema.properties}
92+
<PropertiesBlock
93+
blockKey={objectSchema.key}
94+
properties={objectSchema.properties}
95+
removePropertyBlock={(propertyKey) => {
96+
propertyKey = propertyKey.split(objectSchema.manager.keySeparator).pop();
97+
objectSchema.removeProperty(propertyKey);
98+
objectSchema = objectSchema;
99+
}}
100+
/>
101+
{/key}
102+
{/if}
103+
{:else if objectSchema.properties}
104+
{#key objectSchema.properties}
105+
<PropertiesBlock
106+
blockKey={objectSchema.key}
107+
properties={objectSchema.properties}
108+
/>
109+
{/key}
110+
{/if}
111+
</div>
112+
</div>
113+
</div>
114+
</div>
115+
</div>
116+
</div>
90117
{:else}
91-
92-
93-
<!--
94-
{#if objectSchema}
95-
<div style='background-color: #9e9e9e'>
96-
<p>Object property</p>
97-
98-
{#if objectSchema.hasCustomKeyValues}
99-
<p>Custom key values</p>
100-
<form action=''>
101-
<input type='text' bind:value={customObjectPropertyKey} placeholder='Key'>
102-
<button on:click={addNestedObjectProperty}>Add property</button>
103-
</form>
104-
{#if objectSchema.properties}
105-
{#key objectSchema.properties }
106-
<PropertiesBlock blockKey={objectSchema.key} properties={objectSchema.properties} removePropertyBlock={(propertyKey) => {
107-
propertyKey = propertyKey.split(objectSchema.manager.keySeparator).pop();
108-
objectSchema.removeProperty(propertyKey);
109-
objectSchema = objectSchema;
110-
}} />
111-
{/key}
112-
{/if}
113-
{:else}
114-
{#if objectSchema.properties}
115-
{#key objectSchema.properties }
116-
<PropertiesBlock blockKey={objectSchema.key} properties={objectSchema.properties} />
117-
{/key}
118-
{/if}
119-
{/if}
120-
</div>
121-
122-
{:else}
123-
-->
124-
<div>
125-
<p>Object schema is undefined</p>
126-
</div>
127-
{/if}
118+
<div>
119+
<p>Object schema is undefined</p>
120+
</div>
121+
{/if}

src/lib/components/common/jschema/PropertiesBlock.svelte

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@
1919
blockProperties.push(schemaManager.addProperty(prop));
2020
});
2121
});
22-
2322
</script>
2423

25-
<div class='d-flex flex-column properties-block'>
26-
{#if parsedProperties}
27-
{#each blockProperties as prop}
28-
{#if removePropertyBlock }
29-
<button class='btn btn-danger' on:click={removePropertyBlock.bind(this, prop.key)}>Remove Property Block
30-
</button>
31-
{/if}
32-
<PropertyDiscriminator schemaProperty={prop}></PropertyDiscriminator>
33-
{/each}
34-
{/if}
35-
</div>
24+
<div class="d-flex flex-column properties-block">
25+
{#if parsedProperties}
26+
{#each blockProperties as prop}
27+
{#if removePropertyBlock}
28+
<button class="btn btn-danger" type="button" on:click={() => removePropertyBlock(prop.key)}>
29+
Remove Property Block
30+
</button>
31+
{/if}
32+
<PropertyDiscriminator schemaProperty={prop} />
33+
{/each}
34+
{/if}
35+
</div>

0 commit comments

Comments
 (0)