From 8eff9390392a92c3c1e81f16b89916fec5c87e19 Mon Sep 17 00:00:00 2001 From: "Calum H." Date: Thu, 4 Dec 2025 02:32:03 +0000 Subject: [PATCH] feat: ws client & new backups frontend (#4813) * feat: ws client * feat: v1 backups endpoints * feat: migrate backups page to api-client and new DI ctx * feat: switch to ws client via api-client * fix: disgust * fix: stats * fix: console * feat: v0 backups api * feat: migrate backups.vue to page system w/ components to ui pkgs * feat: polish backups frontend * feat: pending refactor for ws handling of backups * fix: vue shit * fix: cancel logic fix * fix: qa issues * fix: alignment issues for backups page * fix: bar positioning * feat: finish QA * fix: icons * fix: lint & i18n * fix: clear comment * lint --------- Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com> --- .../ui/servers/BackupCreateModal.vue | 126 ----- .../ui/servers/BackupDeleteModal.vue | 42 -- .../src/components/ui/servers/BackupItem.vue | 277 ----------- .../ui/servers/BackupRestoreModal.vue | 63 --- apps/frontend/src/locales/en-US/index.json | 36 -- .../src/pages/hosting/manage/[id].vue | 447 ++++++++--------- .../src/pages/hosting/manage/[id]/backups.vue | 337 +------------ .../src/pages/hosting/manage/[id]/index.vue | 14 +- packages/api-client/package.json | 1 + .../api-client/src/core/abstract-client.ts | 3 +- .../api-client/src/core/abstract-websocket.ts | 106 ++++ packages/api-client/src/index.ts | 6 + .../src/modules/archon/backups/v0.ts | 95 ++++ .../src/modules/archon/backups/v1.ts | 132 +++++ .../api-client/src/modules/archon/index.ts | 4 +- .../src/modules/archon/servers/v0.ts | 24 + .../api-client/src/modules/archon/types.ts | 183 +++++++ packages/api-client/src/modules/index.ts | 4 + packages/api-client/src/platform/generic.ts | 13 + packages/api-client/src/platform/nuxt.ts | 12 + packages/api-client/src/platform/tauri.ts | 12 + .../src/platform/websocket-generic.ts | 147 ++++++ packages/api-client/src/types/index.ts | 1 + packages/assets/generated-icons.ts | 2 + packages/assets/icons/user-round.svg | 6 + packages/ui/src/components/base/Button.vue | 19 +- .../ui/src/components/base/ProgressBar.vue | 114 ++++- packages/ui/src/components/index.ts | 5 + packages/ui/src/components/modal/NewModal.vue | 43 +- .../src/components/servers/ServerListing.vue | 21 +- .../servers/backups/BackupCreateModal.vue | 158 ++++++ .../servers/backups/BackupDeleteModal.vue | 67 +++ .../components/servers/backups/BackupItem.vue | 363 ++++++++++++++ .../servers/backups}/BackupRenameModal.vue | 83 ++-- .../servers/backups/BackupRestoreModal.vue | 108 ++++ .../src/components/servers/backups/index.ts | 6 + .../servers/marketing/MedalServerListing.vue | 21 +- packages/ui/src/locales/en-US/index.json | 45 ++ .../ui/src/pages/hosting/manage/backups.vue | 460 ++++++++++++++++++ packages/ui/src/pages/index.ts | 1 + packages/ui/src/providers/index.ts | 1 + packages/ui/src/providers/server-context.ts | 32 ++ pnpm-lock.yaml | 3 + 43 files changed, 2466 insertions(+), 1177 deletions(-) delete mode 100644 apps/frontend/src/components/ui/servers/BackupCreateModal.vue delete mode 100644 apps/frontend/src/components/ui/servers/BackupDeleteModal.vue delete mode 100644 apps/frontend/src/components/ui/servers/BackupItem.vue delete mode 100644 apps/frontend/src/components/ui/servers/BackupRestoreModal.vue create mode 100644 packages/api-client/src/core/abstract-websocket.ts create mode 100644 packages/api-client/src/modules/archon/backups/v0.ts create mode 100644 packages/api-client/src/modules/archon/backups/v1.ts create mode 100644 packages/api-client/src/platform/websocket-generic.ts create mode 100644 packages/assets/icons/user-round.svg create mode 100644 packages/ui/src/components/servers/backups/BackupCreateModal.vue create mode 100644 packages/ui/src/components/servers/backups/BackupDeleteModal.vue create mode 100644 packages/ui/src/components/servers/backups/BackupItem.vue rename {apps/frontend/src/components/ui/servers => packages/ui/src/components/servers/backups}/BackupRenameModal.vue (54%) create mode 100644 packages/ui/src/components/servers/backups/BackupRestoreModal.vue create mode 100644 packages/ui/src/components/servers/backups/index.ts create mode 100644 packages/ui/src/pages/hosting/manage/backups.vue create mode 100644 packages/ui/src/providers/server-context.ts diff --git a/apps/frontend/src/components/ui/servers/BackupCreateModal.vue b/apps/frontend/src/components/ui/servers/BackupCreateModal.vue deleted file mode 100644 index 95844d15..00000000 --- a/apps/frontend/src/components/ui/servers/BackupCreateModal.vue +++ /dev/null @@ -1,126 +0,0 @@ - - - diff --git a/apps/frontend/src/components/ui/servers/BackupDeleteModal.vue b/apps/frontend/src/components/ui/servers/BackupDeleteModal.vue deleted file mode 100644 index 1b885faf..00000000 --- a/apps/frontend/src/components/ui/servers/BackupDeleteModal.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - diff --git a/apps/frontend/src/components/ui/servers/BackupItem.vue b/apps/frontend/src/components/ui/servers/BackupItem.vue deleted file mode 100644 index 6e910066..00000000 --- a/apps/frontend/src/components/ui/servers/BackupItem.vue +++ /dev/null @@ -1,277 +0,0 @@ - - diff --git a/apps/frontend/src/components/ui/servers/BackupRestoreModal.vue b/apps/frontend/src/components/ui/servers/BackupRestoreModal.vue deleted file mode 100644 index 7e262d04..00000000 --- a/apps/frontend/src/components/ui/servers/BackupRestoreModal.vue +++ /dev/null @@ -1,63 +0,0 @@ - - - diff --git a/apps/frontend/src/locales/en-US/index.json b/apps/frontend/src/locales/en-US/index.json index b7c5acd8..a7accc9a 100644 --- a/apps/frontend/src/locales/en-US/index.json +++ b/apps/frontend/src/locales/en-US/index.json @@ -2564,42 +2564,6 @@ "servers.backup.restore.in-progress.tooltip": { "message": "Backup restore in progress" }, - "servers.backups.item.automated": { - "message": "Automated" - }, - "servers.backups.item.creating-backup": { - "message": "Creating backup..." - }, - "servers.backups.item.failed-to-create-backup": { - "message": "Failed to create backup" - }, - "servers.backups.item.failed-to-restore-backup": { - "message": "Failed to restore from backup" - }, - "servers.backups.item.lock": { - "message": "Lock" - }, - "servers.backups.item.locked": { - "message": "Locked" - }, - "servers.backups.item.queued-for-backup": { - "message": "Queued for backup" - }, - "servers.backups.item.rename": { - "message": "Rename" - }, - "servers.backups.item.restore": { - "message": "Restore" - }, - "servers.backups.item.restoring-backup": { - "message": "Restoring from backup..." - }, - "servers.backups.item.retry": { - "message": "Retry" - }, - "servers.backups.item.unlock": { - "message": "Unlock" - }, "servers.notice.actions": { "message": "Actions" }, diff --git a/apps/frontend/src/pages/hosting/manage/[id].vue b/apps/frontend/src/pages/hosting/manage/[id].vue index dffe658f..def7fc92 100644 --- a/apps/frontend/src/pages/hosting/manage/[id].vue +++ b/apps/frontend/src/pages/hosting/manage/[id].vue @@ -341,7 +341,6 @@ :stats="stats" :server-power-state="serverPowerState" :power-state-details="powerStateDetails" - :socket="socket" :server="server" :backup-in-progress="backupInProgress" @reinstall="onReinstall" @@ -362,6 +361,7 @@ - + diff --git a/apps/frontend/src/pages/hosting/manage/[id]/index.vue b/apps/frontend/src/pages/hosting/manage/[id]/index.vue index 5945b142..b3e25eb8 100644 --- a/apps/frontend/src/pages/hosting/manage/[id]/index.vue +++ b/apps/frontend/src/pages/hosting/manage/[id]/index.vue @@ -182,7 +182,7 @@ @@ -78,10 +83,14 @@ const classes = computed(() => { v-if="link && link.startsWith('/')" class="btn" :class="classes" - :to="link" + :to="disabled ? '' : link" :target="external ? '_blank' : '_self'" @click=" (event) => { + if (disabled) { + event.preventDefault() + return + } if (action) { action(event) } @@ -96,10 +105,14 @@ const classes = computed(() => { v-else-if="link" class="btn" :class="classes" - :href="link" + :href="disabled ? undefined : link" :target="external ? '_blank' : '_self'" @click=" (event) => { + if (disabled) { + event.preventDefault() + return + } if (action) { action(event) } @@ -110,7 +123,7 @@ const classes = computed(() => { - diff --git a/packages/ui/src/components/base/ProgressBar.vue b/packages/ui/src/components/base/ProgressBar.vue index 487840ac..9c927501 100644 --- a/packages/ui/src/components/base/ProgressBar.vue +++ b/packages/ui/src/components/base/ProgressBar.vue @@ -1,4 +1,5 @@ diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts index 2db7b7c2..12ee057d 100644 --- a/packages/ui/src/components/index.ts +++ b/packages/ui/src/components/index.ts @@ -127,6 +127,11 @@ export { default as ThemeSelector } from './settings/ThemeSelector.vue' // Servers export { default as ServersSpecs } from './billing/ServersSpecs.vue' +export { default as BackupCreateModal } from './servers/backups/BackupCreateModal.vue' +export { default as BackupDeleteModal } from './servers/backups/BackupDeleteModal.vue' +export { default as BackupItem } from './servers/backups/BackupItem.vue' +export { default as BackupRenameModal } from './servers/backups/BackupRenameModal.vue' +export { default as BackupRestoreModal } from './servers/backups/BackupRestoreModal.vue' export { default as BackupWarning } from './servers/backups/BackupWarning.vue' export { default as LoaderIcon } from './servers/icons/LoaderIcon.vue' export { default as ServerIcon } from './servers/icons/ServerIcon.vue' diff --git a/packages/ui/src/components/modal/NewModal.vue b/packages/ui/src/components/modal/NewModal.vue index 56d06a63..ed0447f1 100644 --- a/packages/ui/src/components/modal/NewModal.vue +++ b/packages/ui/src/components/modal/NewModal.vue @@ -10,12 +10,14 @@ @click="() => (closeOnClickOutside && closable ? hide() : {})" />