From dbd948867c864f5049f49c8bc472a335cb2c1711 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 31 Aug 2022 15:03:36 +0200 Subject: [PATCH] fix: loading state on start --- .../src/routes/databases/[id]/__layout.svelte | 321 ++++++----- .../src/routes/services/[id]/_Secret.svelte | 2 +- .../src/routes/services/[id]/__layout.svelte | 523 +++++++++--------- .../src/routes/services/[id]/secrets.svelte | 38 ++ apps/ui/src/routes/services/[id]/utils.ts | 42 ++ 5 files changed, 502 insertions(+), 424 deletions(-) create mode 100644 apps/ui/src/routes/services/[id]/utils.ts diff --git a/apps/ui/src/routes/databases/[id]/__layout.svelte b/apps/ui/src/routes/databases/[id]/__layout.svelte index fd4a81817..90cbe3e99 100644 --- a/apps/ui/src/routes/databases/[id]/__layout.svelte +++ b/apps/ui/src/routes/databases/[id]/__layout.svelte @@ -60,11 +60,9 @@ import { errorNotification, handlerNotFoundLoad } from '$lib/common'; import { appSession, status, disabledButton } from '$lib/store'; import DeleteIcon from '$lib/components/DeleteIcon.svelte'; - import Loading from '$lib/components/Loading.svelte'; import { onDestroy, onMount } from 'svelte'; const { id } = $page.params; - let loading = false; let statusInterval: any = false; $disabledButton = !$appSession.isAdmin; @@ -72,36 +70,41 @@ async function deleteDatabase() { const sure = confirm(`Are you sure you would like to delete '${database.name}'?`); if (sure) { - loading = true; + $status.database.initialLoading = true; try { await del(`/databases/${database.id}`, { id: database.id }); return await goto('/databases'); } catch (error) { return errorNotification(error); } finally { - loading = false; + $status.database.initialLoading = false; } } } async function stopDatabase() { const sure = confirm($t('database.confirm_stop', { name: database.name })); if (sure) { - loading = true; + $status.database.initialLoading = true; try { await post(`/databases/${database.id}/stop`, {}); - return window.location.reload(); } catch (error) { return errorNotification(error); + } finally { + $status.database.initialLoading = false; } } } async function startDatabase() { - loading = true; + $status.database.initialLoading = true; + $status.database.loading = true; try { await post(`/databases/${database.id}/start`, {}); - return window.location.reload(); } catch (error) { return errorNotification(error); + } finally { + $status.database.initialLoading = false; + $status.database.loading = false; + await getStatus(); } } async function getStatus() { @@ -137,120 +140,36 @@ {#if id !== 'new'} {/if} diff --git a/apps/ui/src/routes/services/[id]/_Secret.svelte b/apps/ui/src/routes/services/[id]/_Secret.svelte index c347dcabc..fa1f95318 100644 --- a/apps/ui/src/routes/services/[id]/_Secret.svelte +++ b/apps/ui/src/routes/services/[id]/_Secret.svelte @@ -1,4 +1,4 @@ - diff --git a/apps/ui/src/routes/services/[id]/secrets.svelte b/apps/ui/src/routes/services/[id]/secrets.svelte index 78271ca7d..a0929bf2c 100644 --- a/apps/ui/src/routes/services/[id]/secrets.svelte +++ b/apps/ui/src/routes/services/[id]/secrets.svelte @@ -25,14 +25,47 @@ import { page } from '$app/stores'; import { get } from '$lib/api'; import { t } from '$lib/translations'; + import pLimit from 'p-limit'; import ServiceLinks from './_ServiceLinks.svelte'; + import { addToast } from '$lib/store'; + import { saveSecret } from './utils'; + const limit = pLimit(1); const { id } = $page.params; + let batchSecrets = ''; async function refreshSecrets() { const data = await get(`/services/${id}/secrets`); secrets = [...data.secrets]; } + async function getValues(e: any) { + e.preventDefault(); + const eachValuePair = batchSecrets.split('\n'); + const batchSecretsPairs = eachValuePair + .filter((secret) => !secret.startsWith('#') && secret) + .map((secret) => { + const [name, ...rest] = secret.split('='); + const value = rest.join('='); + const cleanValue = value?.replaceAll('"', '') || ''; + return { + name, + value: cleanValue, + isNew: !secrets.find((secret: any) => name === secret.name) + }; + }); + + await Promise.all( + batchSecretsPairs.map(({ name, value, isNew }) => + limit(() => saveSecret({ name, value, serviceId: id, isNew })) + ) + ); + batchSecrets = ''; + await refreshSecrets(); + addToast({ + message: 'Secrets saved.', + type: 'success' + }); + }
+

Paste .env file

+
+