Skip to content

Commit 26e38a5

Browse files
committed
Standardized modal automatic closure on success
1 parent b2d6e6b commit 26e38a5

File tree

6 files changed

+146
-141
lines changed

6 files changed

+146
-141
lines changed

src/lib/components/common/StandardDismissableAlert.svelte

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,18 @@
22
export let message;
33
export let autoDismiss = true;
44
5-
$: if (autoDismiss && message) setTimeout(hide, 3000);
5+
let timeout;
6+
7+
$: if (autoDismiss && message) {
8+
console.log(`alertMessage=${message}`)
9+
if (timeout) {
10+
clearTimeout(timeout);
11+
}
12+
timeout = setTimeout(function () {
13+
hide();
14+
timeout = null;
15+
}, 3000);
16+
}
617
718
export function hide() {
819
message = '';

src/lib/components/projects/WorkflowImport.svelte

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
importing = false;
5454
errorAlert = displayStandardErrorAlert(
5555
'The workflow file is not a valid JSON file',
56-
'importWorkflowError'
56+
'errorAlert-importWorkflowModal'
5757
);
5858
return;
5959
}
@@ -87,12 +87,12 @@
8787
dispatch('workflowImported', workflow);
8888
} else {
8989
console.error('Import workflow failed', result);
90-
errorAlert = displayStandardErrorAlert(result, 'importWorkflowError');
90+
errorAlert = displayStandardErrorAlert(result, 'errorAlert-importWorkflowModal');
9191
}
9292
}
9393
</script>
9494

95-
<div id="importWorkflowError" />
95+
<div id="errorAlert-importWorkflowModal" />
9696

9797
<form on:submit|preventDefault={handleWorkflowImportForm}>
9898
<div class="mb-3">

src/lib/components/projects/WorkflowsList.svelte

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
$: enableCreateWorkflow = !!newWorkflowName;
1515
let validationError = false;
1616
17+
/** @type {Modal} */
18+
let importWorkflowModal;
1719
/** @type {WorkflowImport} */
1820
let workflowImportComponent;
1921
@@ -75,10 +77,11 @@
7577
const importedWorkflow = event.detail;
7678
workflows.push(importedWorkflow);
7779
workflows = workflows;
80+
goto(`/projects/${projectId}/workflows/${importedWorkflow.id}`);
7881
}
7982
</script>
8083

81-
<Modal id="importWorkflowModal" size="lg" centered={true} scrollable={true}>
84+
<Modal id="importWorkflowModal" size="lg" centered={true} scrollable={true} bind:this={importWorkflowModal}>
8285
<svelte:fragment slot="header">
8386
<h5 class="modal-title">Import workflow</h5>
8487
</svelte:fragment>

src/routes/projects/[projectId]/+page.svelte

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@
4747
}
4848
});
4949
}
50+
51+
function onEditProjectModalOpen() {
52+
projectUpdatesSuccessMessage = '';
53+
}
5054
</script>
5155

5256
<div class="d-flex justify-content-between align-items-center">
@@ -87,7 +91,7 @@
8791
</div>
8892
{/if}
8993

90-
<Modal id="editProjectModal" centered={true} bind:this={editProjectModal}>
94+
<Modal id="editProjectModal" centered={true} bind:this={editProjectModal} onOpen={onEditProjectModalOpen}>
9195
<svelte:fragment slot="header">
9296
<h5 class="modal-title">Project properties</h5>
9397
</svelte:fragment>

src/routes/projects/[projectId]/datasets/[datasetId]/+page.svelte

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@
1313
1414
let dataset = undefined;
1515
16+
let datasetSuccessMessage = '';
17+
1618
// for updating the dataset
1719
let name = '';
1820
let type = '';
1921
let read_only = false;
20-
let updateDatasetSuccess = false;
2122
/** @type {Modal} */
2223
let updateDatasetModal;
2324
2425
// for creating a new resource
2526
let source = '';
26-
let createResourceSuccessMessage = '';
2727
/** @type {Modal} */
2828
let createDatasetResourceModal;
2929
@@ -38,42 +38,44 @@
3838
* @returns {Promise<*>}
3939
*/
4040
async function handleDatasetUpdate() {
41-
updateDatasetSuccess = false;
41+
updateDatasetModal.confirmAndHide(async () => {
42+
datasetSuccessMessage = '';
4243
43-
if (!dataset || !name) {
44-
return;
45-
}
44+
if (!dataset || !name) {
45+
return;
46+
}
4647
47-
const requestBody = {
48-
name,
49-
type,
50-
read_only
51-
};
48+
const requestBody = {
49+
name,
50+
type,
51+
read_only
52+
};
5253
53-
// Should prevent requestBody null or empty values
54-
Object.keys(requestBody).forEach((key) => {
55-
if (requestBody[key] === null || requestBody[key] === '') {
56-
delete requestBody[key];
57-
}
58-
});
54+
// Should prevent requestBody null or empty values
55+
Object.keys(requestBody).forEach((key) => {
56+
if (requestBody[key] === null || requestBody[key] === '') {
57+
delete requestBody[key];
58+
}
59+
});
5960
60-
const headers = new Headers();
61-
headers.set('Content-Type', 'application/json');
61+
const headers = new Headers();
62+
headers.set('Content-Type', 'application/json');
6263
63-
const response = await fetch(`/api/v1/project/${projectId}/dataset/${datasetId}`, {
64-
method: 'PATCH',
65-
credentials: 'include',
66-
headers,
67-
body: JSON.stringify(requestBody)
68-
});
64+
const response = await fetch(`/api/v1/project/${projectId}/dataset/${datasetId}`, {
65+
method: 'PATCH',
66+
credentials: 'include',
67+
headers,
68+
body: JSON.stringify(requestBody)
69+
});
6970
70-
const result = await response.json();
71-
if (response.ok) {
72-
dataset = result;
73-
updateDatasetSuccess = true;
74-
} else {
75-
updateDatasetModal.displayErrorAlert(result);
76-
}
71+
const result = await response.json();
72+
if (response.ok) {
73+
dataset = result;
74+
datasetSuccessMessage = 'Dataset properties successfully updated';
75+
} else {
76+
throw new AlertError(result);
77+
}
78+
});
7779
}
7880
7981
function onCreateDatasetResourceModalOpen() {
@@ -86,7 +88,7 @@
8688
*/
8789
async function handleCreateDatasetResource() {
8890
createDatasetResourceModal.confirmAndHide(async () => {
89-
createResourceSuccessMessage = '';
91+
datasetSuccessMessage = '';
9092
createDatasetResourceModal.hideErrorAlert();
9193
if (!source) {
9294
return;
@@ -108,7 +110,7 @@
108110
const result = await response.json();
109111
if (response.ok) {
110112
dataset.resource_list = [...dataset.resource_list, result];
111-
createResourceSuccessMessage = 'Resource created';
113+
datasetSuccessMessage = 'Resource created';
112114
source = '';
113115
} else {
114116
throw new AlertError(result);
@@ -168,7 +170,7 @@
168170
class="btn btn-light"
169171
data-bs-toggle="modal"
170172
data-bs-target="#updateDatasetModal"
171-
on:click={() => (updateDatasetSuccess = false)}
173+
on:click={() => (datasetSuccessMessage = '')}
172174
>
173175
<i class="bi-gear-wide-connected" />
174176
</button>
@@ -182,7 +184,7 @@
182184
<h1>Dataset {dataset.name} #{dataset.id}</h1>
183185
</div>
184186

185-
<StandardDismissableAlert message={createResourceSuccessMessage} />
187+
<StandardDismissableAlert message={datasetSuccessMessage} />
186188

187189
<div class="row mt-2">
188190
<div class="col-4">
@@ -329,9 +331,6 @@
329331

330332
<div class="d-flex align-items-center">
331333
<button class="btn btn-primary me-3" type="submit" disabled={!name}>Update</button>
332-
{#if updateDatasetSuccess}
333-
<span class="text-success">Dataset properties updated with success</span>
334-
{/if}
335334
</div>
336335
</form>
337336
</svelte:fragment>

0 commit comments

Comments
 (0)