From 1fd7477a9c809915621ba50602c09c476384ff66 Mon Sep 17 00:00:00 2001 From: arabcoders Date: Thu, 25 Sep 2025 17:32:28 +0300 Subject: [PATCH] improve the simple view flow and change settings render to work on both --- ui/app/assets/css/style.css | 4 ++ ui/app/components/ConditionForm.vue | 3 +- ui/app/components/History.vue | 5 +- ui/app/components/NotificationForm.vue | 3 +- ui/app/components/Queue.vue | 1 + ui/app/components/Settings.vue | 58 +++++++++------ ui/app/components/Simple.vue | 99 ++++++++++++++++++++------ ui/app/components/TaskForm.vue | 3 +- ui/app/composables/useConfirm.ts | 35 +++------ ui/app/layouts/default.vue | 20 ++++-- ui/app/pages/conditions.vue | 3 +- ui/app/pages/notifications.vue | 1 + ui/app/pages/presets.vue | 3 +- ui/app/pages/tasks.vue | 3 +- uv.lock | 6 +- 15 files changed, 159 insertions(+), 88 deletions(-) diff --git a/ui/app/assets/css/style.css b/ui/app/assets/css/style.css index 17fefacd..cd841efe 100644 --- a/ui/app/assets/css/style.css +++ b/ui/app/assets/css/style.css @@ -358,6 +358,10 @@ div.is-centered { justify-content: center; } +.is-overflow-visible { + overflow: visible !important +} + .modal-content-max { width: calc(100% - 20px); max-width: 1344px; diff --git a/ui/app/components/ConditionForm.vue b/ui/app/components/ConditionForm.vue index db50016d..93b3bae6 100644 --- a/ui/app/components/ConditionForm.vue +++ b/ui/app/components/ConditionForm.vue @@ -268,6 +268,7 @@ import { useStorage } from '@vueuse/core' import TextareaAutocomplete from '~/components/TextareaAutocomplete.vue' import type { AutoCompleteOptions } from '~/types/autocomplete'; import type { ConditionItem, ImportedConditionItem } from '~/types/conditions' +import {useConfirm} from '~/composables/useConfirm' const emitter = defineEmits<{ (e: 'cancel'): void @@ -410,7 +411,7 @@ const importItem = async (): Promise => { return } - if ((form.filter || form.cli || Object.keys(form.extras).length > 0) && !(await box.confirm('Overwrite the current form fields?', true))) { + if ((form.filter || form.cli || Object.keys(form.extras).length > 0) && !(await box.confirm('Overwrite the current form fields?'))) { return } diff --git a/ui/app/components/History.vue b/ui/app/components/History.vue index fa564054..685525aa 100644 --- a/ui/app/components/History.vue +++ b/ui/app/components/History.vue @@ -450,6 +450,7 @@ import moment from 'moment' import { useStorage } from '@vueuse/core' import type { StoreItem } from '~/types/store' +import {useConfirm} from '~/composables/useConfirm' const emitter = defineEmits<{ (e: 'getInfo', url: string, preset: string, cli: string): void @@ -588,7 +589,7 @@ const deleteSelectedItems = async () => { if (true === config.app.remove_files) { msg += ' This will remove any associated files if they exists.' } - if (false === (await box.confirm(msg, config.app.remove_files))) { + if (false === (await box.confirm(msg))) { return } for (const key in selectedElms.value) { @@ -750,7 +751,7 @@ const removeItem = async (item: StoreItem) => { if (item.status === 'finished' && config.app.remove_files) { msg += ' This will remove any associated files if they exists.' } - if (false === (await box.confirm(msg, Boolean(item.filename && config.app.remove_files)))) { + if (false === (await box.confirm(msg))) { return false } diff --git a/ui/app/components/NotificationForm.vue b/ui/app/components/NotificationForm.vue index df4bb096..9497cd4a 100644 --- a/ui/app/components/NotificationForm.vue +++ b/ui/app/components/NotificationForm.vue @@ -308,6 +308,7 @@ diff --git a/ui/app/components/Simple.vue b/ui/app/components/Simple.vue index 62e37650..c5ddb5f9 100644 --- a/ui/app/components/Simple.vue +++ b/ui/app/components/Simple.vue @@ -3,8 +3,19 @@
- +
+
+ +
@@ -12,11 +23,37 @@
+
+
+ +
+
+
+ +
+
+
+
@@ -26,12 +63,12 @@
+
+
{{ updateProgress(entry.item) }}
+
+
-
-
{{ updateProgress(entry.item) }}
-
-
- +
@@ -48,7 +85,7 @@

{{ entry.item.title }}

-
+
@@ -56,32 +93,32 @@
- {{ - getStatusLabel(entry.item) }} + + {{ getStatusLabel(entry.item) }} +
-

- {{ getDescription(entry.item) }} +

+ {{ getDescription(entry.item) || 'No description available.' }}

-
@@ -89,16 +126,16 @@
- + Download
@@ -132,6 +169,7 @@ diff --git a/ui/app/components/TaskForm.vue b/ui/app/components/TaskForm.vue index e98645b6..157d5499 100644 --- a/ui/app/components/TaskForm.vue +++ b/ui/app/components/TaskForm.vue @@ -307,6 +307,7 @@ import { CronExpressionParser } from 'cron-parser' import TextareaAutocomplete from '~/components/TextareaAutocomplete.vue' import type { AutoCompleteOptions } from '~/types/autocomplete' import type { exported_task, task_item } from '~/types/tasks' +import {useConfirm} from '~/composables/useConfirm' const props = defineProps<{ reference?: string | null | undefined @@ -408,7 +409,7 @@ const importItem = async (): Promise => { } if (form.url || form.timer) { - if (false === (await box.confirm('Overwrite the current form fields?', true))) { + if (false === (await box.confirm('Overwrite the current form fields?'))) { return } } diff --git a/ui/app/composables/useConfirm.ts b/ui/app/composables/useConfirm.ts index 7286ca41..e3f8aa71 100644 --- a/ui/app/composables/useConfirm.ts +++ b/ui/app/composables/useConfirm.ts @@ -1,42 +1,29 @@ -import { useStorage } from '@vueuse/core' -import { useDialog } from './useDialog' +import { useDialog, type ConfirmOptions, type AlertOptions, type PromptOptions } from './useDialog' const dialog = useDialog() -const reduceConfirm = useStorage('reduce_confirm', false) - -const confirm = async (msg: string, force: boolean = false) => { - if (false === force && true === reduceConfirm.value) { - return true - } - - const { status } = await dialog.confirmDialog({ +const confirm = async (msg: string, opts: ConfirmOptions = {}) => { + const { status } = await dialog.confirmDialog(Object.assign({ title: 'Please Confirm', message: msg, cancelText: 'Cancel', confirmText: 'OK', - }) + } as ConfirmOptions, opts || {})) return status } -const alert = async (msg: string) => { - const { status } = await dialog.alertDialog({ +const alert = async (msg: string, opts: AlertOptions = {}) => { + const { status } = await dialog.alertDialog(Object.assign({ title: 'Alert', message: msg, confirmText: 'OK', - }) + } as AlertOptions, opts || {})) return status } -const prompt = async (msg: string, defaultValue: string = '') => { - const { status, value } = await dialog.promptDialog({ - title: 'Input Required', - message: msg, - initial: defaultValue, - cancelText: 'Cancel', - confirmText: 'OK', - }) +const prompt = async (msg: string, opts: PromptOptions = {}) => { + const { status, value } = await dialog.promptDialog(Object.assign({ message: msg } as PromptOptions, opts || {})) if (status) { return value @@ -45,6 +32,4 @@ const prompt = async (msg: string, defaultValue: string = '') => { return null } -export default function useConfirm() { - return { confirm, alert, prompt, reduceConfirm } -} +export const useConfirm = () => ({ confirm, alert, prompt }) diff --git a/ui/app/layouts/default.vue b/ui/app/layouts/default.vue index a965723d..5ec19b7a 100644 --- a/ui/app/layouts/default.vue +++ b/ui/app/layouts/default.vue @@ -1,8 +1,16 @@