From c48a2299005c37c66c8c734100549c6184a3de1d Mon Sep 17 00:00:00 2001 From: "Calum H." Date: Mon, 9 Jun 2025 01:24:41 +0100 Subject: [PATCH] feat: start on modal --- .../composables/servers/modrinth-servers.ts | 6 +- .../composables/servers/modules/scheduling.ts | 33 +- .../manage/[id]/options/scheduling.vue | 116 ++-- packages/assets/icons/clock.svg | 1 + packages/assets/index.ts | 2 + .../ui/src/components/base/TimePicker.vue | 217 +++++++ packages/ui/src/components/index.ts | 2 + .../servers/scheduling/ScheduleTaskModal.vue | 549 ++++++++++++++++++ 8 files changed, 873 insertions(+), 53 deletions(-) create mode 100644 packages/assets/icons/clock.svg create mode 100644 packages/ui/src/components/base/TimePicker.vue create mode 100644 packages/ui/src/components/servers/scheduling/ScheduleTaskModal.vue diff --git a/apps/frontend/src/composables/servers/modrinth-servers.ts b/apps/frontend/src/composables/servers/modrinth-servers.ts index 5bf8704aa..13352c70c 100644 --- a/apps/frontend/src/composables/servers/modrinth-servers.ts +++ b/apps/frontend/src/composables/servers/modrinth-servers.ts @@ -11,7 +11,7 @@ import { WSModule, FSModule, } from "./modules/index.ts"; -import { ScheudlingModule } from "./modules/scheduling.ts"; +import { SchedulingModule } from "./modules/scheduling.ts"; export function handleError(err: any) { if (err instanceof ModrinthServerError && err.v1Error) { @@ -41,7 +41,7 @@ export class ModrinthServer { readonly startup: StartupModule; readonly ws: WSModule; readonly fs: FSModule; - readonly scheduling: ScheudlingModule; + readonly scheduling: SchedulingModule; constructor(serverId: string) { this.serverId = serverId; @@ -53,7 +53,7 @@ export class ModrinthServer { this.startup = new StartupModule(this); this.ws = new WSModule(this); this.fs = new FSModule(this); - this.scheduling = new ScheudlingModule(this); + this.scheduling = new SchedulingModule(this); } async createMissingFolders(path: string): Promise { diff --git a/apps/frontend/src/composables/servers/modules/scheduling.ts b/apps/frontend/src/composables/servers/modules/scheduling.ts index 1cc21a0ea..2957723a3 100644 --- a/apps/frontend/src/composables/servers/modules/scheduling.ts +++ b/apps/frontend/src/composables/servers/modules/scheduling.ts @@ -2,7 +2,7 @@ import type { ScheduledTask } from "@modrinth/utils"; import { useServersFetch } from "../servers-fetch.ts"; import { ServerModule } from "./base.ts"; -export class ScheudlingModule extends ServerModule { +export class SchedulingModule extends ServerModule { tasks: ScheduledTask[] = []; async fetch(): Promise { @@ -12,15 +12,34 @@ export class ScheudlingModule extends ServerModule { ); } - async deleteTask(_task: ScheduledTask): Promise { - // ... + async deleteTask(task: ScheduledTask): Promise { + await useServersFetch(`servers/${this.serverId}/options/schedules`, { + method: "DELETE", + body: { title: task.title }, + version: 1, + }); + this.tasks = this.tasks.filter((t) => t.title !== task.title); } - async createTask(_task: ScheduledTask): Promise { - return await 1; + async createTask(task: ScheduledTask): Promise { + await useServersFetch(`servers/${this.serverId}/options/schedules`, { + method: "POST", + body: task, + version: 1, + }); + this.tasks.push(task); + return this.tasks.length; } - async editTask(_taskID: number, _task: Partial) { - // ... + async editTask(taskTitle: string, updatedTask: Partial): Promise { + await useServersFetch(`servers/${this.serverId}/options/schedules`, { + method: "PATCH", + body: { title: taskTitle, ...updatedTask }, + version: 1, + }); + const index = this.tasks.findIndex((t) => t.title === taskTitle); + if (index !== -1) { + this.tasks[index] = { ...this.tasks[index], ...updatedTask }; + } } } diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/scheduling.vue b/apps/frontend/src/pages/servers/manage/[id]/options/scheduling.vue index 9559a3928..fe6047622 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/options/scheduling.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/options/scheduling.vue @@ -154,11 +154,13 @@ + + diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts index 22b3ce242..4929fcb62 100644 --- a/packages/ui/src/components/index.ts +++ b/packages/ui/src/components/index.ts @@ -43,6 +43,7 @@ export { default as StatItem } from './base/StatItem.vue' export { default as TagItem } from './base/TagItem.vue' export { default as TeleportDropdownMenu } from './base/TeleportDropdownMenu.vue' export { default as Timeline } from './base/Timeline.vue' +export { default as TimePicker } from "./base/TimePicker.vue" export { default as Toggle } from './base/Toggle.vue' // Branding @@ -111,3 +112,4 @@ export { default as ThemeSelector } from './settings/ThemeSelector.vue' // Servers export { default as BackupWarning } from './servers/backups/BackupWarning.vue' export { default as ServersSpecs } from './billing/ServersSpecs.vue' +export { default as ScheduleTaskModal } from "./servers/scheduling/ScheduleTaskModal.vue" \ No newline at end of file diff --git a/packages/ui/src/components/servers/scheduling/ScheduleTaskModal.vue b/packages/ui/src/components/servers/scheduling/ScheduleTaskModal.vue new file mode 100644 index 000000000..ed0c262b2 --- /dev/null +++ b/packages/ui/src/components/servers/scheduling/ScheduleTaskModal.vue @@ -0,0 +1,549 @@ +