From 7067876dc1a1397f8a6232c4b9a5a572eeb27e3b Mon Sep 17 00:00:00 2001 From: ThatOneCalculator <kainoa@t1c.dev> Date: Tue, 25 Oct 2022 22:44:38 -0700 Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=20add=20`os.yesno`=20for=20ye?= =?UTF-8?q?s/no=20questions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- packages/client/src/components/MkDialog.vue | 12 ++++++++++-- packages/client/src/os.ts | 18 ++++++++++++++++++ packages/client/src/pages/settings/profile.vue | 4 ++-- 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 21d24a3305..015306f400 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "calckey", - "version": "12.119.0-calc.4.2", + "version": "12.119.0-calc.4.3", "codename": "aqua", "repository": { "type": "git", diff --git a/packages/client/src/components/MkDialog.vue b/packages/client/src/components/MkDialog.vue index 155473cd75..e7867292a3 100644 --- a/packages/client/src/components/MkDialog.vue +++ b/packages/client/src/components/MkDialog.vue @@ -28,8 +28,14 @@ </template> </MkSelect> <div v-if="(showOkButton || showCancelButton) && !actions" class="buttons"> - <MkButton v-if="showOkButton" inline primary :autofocus="!input && !select" @click="ok">{{ (showCancelButton || input || select) ? i18n.ts.ok : i18n.ts.gotIt }}</MkButton> - <MkButton v-if="showCancelButton || input || select" inline @click="cancel">{{ i18n.ts.cancel }}</MkButton> + <div v-if="!isYesNo"> + <MkButton v-if="showOkButton" inline primary :autofocus="!input && !select" @click="ok">{{ (showCancelButton || input || select) ? i18n.ts.ok : i18n.ts.gotIt }}</MkButton> + <MkButton v-if="showCancelButton || input || select" inline @click="cancel">{{ i18n.ts.cancel }}</MkButton> + </div> + <div v-else> + <MkButton v-if="showOkButton" inline primary :autofocus="!input && !select" @click="ok">{{ (showCancelButton || input || select) ? i18n.ts.ok : i18n.ts.yes }}</MkButton> + <MkButton v-if="showCancelButton || input || select" inline @click="cancel">{{ i18n.ts.no }}</MkButton> + </div> </div> <div v-if="actions" class="buttons"> <MkButton v-for="action in actions" :key="action.text" inline :primary="action.primary" @click="() => { action.callback(); close(); }">{{ action.text }}</MkButton> @@ -81,11 +87,13 @@ const props = withDefaults(defineProps<{ }[]; showOkButton?: boolean; showCancelButton?: boolean; + isYesNo?: boolean; cancelableByBgClick?: boolean; }>(), { type: 'info', showOkButton: true, showCancelButton: false, + isYesNo: false, cancelableByBgClick: true, }); diff --git a/packages/client/src/os.ts b/packages/client/src/os.ts index 6759a94e54..9cccab2285 100644 --- a/packages/client/src/os.ts +++ b/packages/client/src/os.ts @@ -238,6 +238,24 @@ export function confirm(props: { }); } +export function yesno(props: { + type: 'error' | 'info' | 'success' | 'warning' | 'waiting' | 'question'; + title?: string | null; + text?: string | null; +}): Promise<{ canceled: boolean }> { + return new Promise((resolve, reject) => { + popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), { + ...props, + showCancelButton: true, + isYesNo: true, + }, { + done: result => { + resolve(result ? result : { canceled: true }); + }, + }, 'closed'); + }); +} + export function inputText(props: { type?: 'text' | 'email' | 'password' | 'url'; title?: string | null; diff --git a/packages/client/src/pages/settings/profile.vue b/packages/client/src/pages/settings/profile.vue index aaf60c8d55..db3c0fd724 100644 --- a/packages/client/src/pages/settings/profile.vue +++ b/packages/client/src/pages/settings/profile.vue @@ -130,7 +130,7 @@ function changeAvatar(ev) { selectFile(ev.currentTarget ?? ev.target, i18n.ts.avatar).then(async (file) => { let originalOrCropped = file; - const { canceled } = await os.confirm({ + const { canceled } = await os.yesno({ type: 'question', text: i18n.t('cropImageAsk'), }); @@ -153,7 +153,7 @@ function changeBanner(ev) { selectFile(ev.currentTarget ?? ev.target, i18n.ts.banner).then(async (file) => { let originalOrCropped = file; - const { canceled } = await os.confirm({ + const { canceled } = await os.yesno({ type: 'question', text: i18n.t('cropImageAsk'), });