From 6482d5b46575027ebfc54d23e7f565e8be27f652 Mon Sep 17 00:00:00 2001 From: "Calum H." Date: Mon, 9 Jun 2025 21:01:40 +0100 Subject: [PATCH] refactor: yeet modal, start work on subpage for editing --- .../composables/servers/modules/scheduling.ts | 52 +- .../{scheduling.vue => scheduling/index.vue} | 46 +- .../ui/src/components/base/TabbedContent.vue | 161 +++++ packages/ui/src/components/index.ts | 4 +- .../servers/scheduling/ScheduleTaskModal.vue | 549 ------------------ packages/utils/servers/types/scheduling.ts | 3 +- 6 files changed, 204 insertions(+), 611 deletions(-) rename apps/frontend/src/pages/servers/manage/[id]/options/{scheduling.vue => scheduling/index.vue} (92%) create mode 100644 packages/ui/src/components/base/TabbedContent.vue delete mode 100644 packages/ui/src/components/servers/scheduling/ScheduleTaskModal.vue diff --git a/apps/frontend/src/composables/servers/modules/scheduling.ts b/apps/frontend/src/composables/servers/modules/scheduling.ts index 2957723a3..8f49aa12f 100644 --- a/apps/frontend/src/composables/servers/modules/scheduling.ts +++ b/apps/frontend/src/composables/servers/modules/scheduling.ts @@ -6,40 +6,40 @@ export class SchedulingModule extends ServerModule { tasks: ScheduledTask[] = []; async fetch(): Promise { - this.tasks = await useServersFetch( - `servers/${this.serverId}/options/schedules`, - { version: 1 }, - ); + // this.tasks = await useServersFetch( + // `servers/${this.serverId}/options/schedules`, + // { version: 1 }, + // ); } 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); + // 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 { - await useServersFetch(`servers/${this.serverId}/options/schedules`, { - method: "POST", - body: task, - version: 1, - }); - this.tasks.push(task); - return this.tasks.length; + // await useServersFetch(`servers/${this.serverId}/options/schedules`, { + // method: "POST", + // body: task, + // version: 1, + // }); + // this.tasks.push(task); + // return this.tasks.length; } 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 }; - } + // 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/index.vue similarity index 92% rename from apps/frontend/src/pages/servers/manage/[id]/options/scheduling.vue rename to apps/frontend/src/pages/servers/manage/[id]/options/scheduling/index.vue index fe6047622..9ffc14b97 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/options/scheduling.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/options/scheduling/index.vue @@ -6,10 +6,13 @@

Task Scheduling

- +
@@ -129,9 +132,12 @@
- +
- - @@ -172,7 +176,7 @@ import { SortAscendingIcon as AscendingIcon, SortDescendingIcon as DescendingIcon, } from "@modrinth/assets"; -import { Toggle, Checkbox, RaisedBadge, ButtonStyled, ScheduleTaskModal } from "@modrinth/ui"; +import { Toggle, Checkbox, RaisedBadge, ButtonStyled } from "@modrinth/ui"; import cronstrue from "cronstrue"; import type { ScheduledTask } from "@modrinth/utils"; import { ModrinthServer } from "~/composables/servers/modrinth-servers.ts"; @@ -181,6 +185,8 @@ const props = defineProps<{ server: ModrinthServer; }>(); +const route = useRoute(); + onBeforeMount(async () => { await props.server.scheduling.fetch(); }); @@ -188,7 +194,6 @@ onBeforeMount(async () => { const selectedTasks = ref([]); const sortBy = ref("Name"); const descending = ref(false); -const scheduleModal = ref(); const tasks = computed(() => props.server.scheduling.tasks); @@ -238,10 +243,6 @@ async function handleTaskToggle(task: ScheduledTask, enabled: boolean): Promise< } } -function handleTaskEdit(task: ScheduledTask): void { - scheduleModal.value?.show(task); -} - async function handleTaskDelete(task: ScheduledTask): Promise { if (confirm(`Are you sure you want to delete "${task.title}"?`)) { try { @@ -254,10 +255,6 @@ async function handleTaskDelete(task: ScheduledTask): Promise { } } -function handleCreateTask(): void { - scheduleModal.value?.showNew(); -} - async function handleBulkToggle(): Promise { const enabledCount = selectedTasks.value.filter((t) => t.enabled).length; const shouldEnable = enabledCount < selectedTasks.value.length / 2; @@ -288,23 +285,6 @@ async function handleBulkDelete(): Promise { } } -async function handleTaskSave(data: ScheduledTask): Promise { - try { - if (scheduleModal.value?.mode === "edit") { - await props.server.scheduling.editTask( - scheduleModal.value.originalData?.title || data.title, - data, - ); - console.log("Updated task:", data.title); - } else { - await props.server.scheduling.createTask(data); - console.log("Created task:", data.title); - } - } catch (error) { - console.error("Failed to save task:", error); - } -} - function updateSort(): void { // Trigger reactivity for sortedTasks } diff --git a/packages/ui/src/components/base/TabbedContent.vue b/packages/ui/src/components/base/TabbedContent.vue new file mode 100644 index 000000000..2fdc74745 --- /dev/null +++ b/packages/ui/src/components/base/TabbedContent.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts index 4929fcb62..0dfd0a7c8 100644 --- a/packages/ui/src/components/index.ts +++ b/packages/ui/src/components/index.ts @@ -40,6 +40,7 @@ export { default as SimpleBadge } from './base/SimpleBadge.vue' export { default as Slider } from './base/Slider.vue' export { default as SmartClickable } from './base/SmartClickable.vue' export { default as StatItem } from './base/StatItem.vue' +export { default as TabbedContent } from "./base/TabbedContent.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' @@ -111,5 +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 +export { default as ServersSpecs } from './billing/ServersSpecs.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 deleted file mode 100644 index ed0c262b2..000000000 --- a/packages/ui/src/components/servers/scheduling/ScheduleTaskModal.vue +++ /dev/null @@ -1,549 +0,0 @@ -