From 9693dacd107cb5e81d483ffc70fe433d643d9049 Mon Sep 17 00:00:00 2001 From: Shigma Date: Tue, 13 Jun 2023 21:14:46 +0800 Subject: [PATCH] feat(client): support slot.disabled --- packages/client/client/activity.ts | 3 +++ packages/client/client/components/slot.ts | 4 +++- packages/client/client/context.ts | 6 +++--- packages/client/client/index.ts | 6 +++++- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/client/client/activity.ts b/packages/client/client/activity.ts index e867bb31..183c1d11 100644 --- a/packages/client/client/activity.ts +++ b/packages/client/client/activity.ts @@ -21,7 +21,9 @@ export namespace Activity { authority?: number position?: 'top' | 'bottom' fields?: Field[] + /** @deprecated */ when?: () => boolean + disabled?: () => boolean } } @@ -71,6 +73,7 @@ export class Activity { if (root.bail('activity', this)) return if (!this.fields.every(key => store[key])) return if (this.when && !this.when()) return + if (this.disabled?.()) return return this.options.position ?? 'top' } diff --git a/packages/client/client/components/slot.ts b/packages/client/client/components/slot.ts index 51aa4128..d542a4db 100644 --- a/packages/client/client/components/slot.ts +++ b/packages/client/client/components/slot.ts @@ -8,7 +8,9 @@ export interface SlotItem { export interface SlotOptions extends SlotItem { type: string + /** @deprecated */ when?: () => boolean + disabled?: () => boolean } export const KSlot = defineComponent({ @@ -24,7 +26,7 @@ export const KSlot = defineComponent({ .filter(node => node.type === KSlotItem) .map(node => ({ node, order: node.props?.order || 0 })) const external = [...ctx.internal.views[props.name] || []] - .filter(item => !item.when || item.when()) + .filter(item => !item.disabled?.()) .map(item => ({ node: h(item.component, { data: props.data, ...props.data }, slots), order: item.order, diff --git a/packages/client/client/context.ts b/packages/client/client/context.ts index f3f31550..6ab6d62a 100644 --- a/packages/client/client/context.ts +++ b/packages/client/client/context.ts @@ -68,10 +68,9 @@ export interface MenuItem { order?: number } -interface SettingOptions { +interface SettingOptions extends Ordered { id: string title?: string - order?: number disabled?: () => boolean schema?: Schema component?: Component @@ -172,6 +171,7 @@ export class Context extends cordis.Context { slot(options: SlotOptions) { options.order ??= 0 options.component = this.wrapComponent(options.component) + if (options.when) options.disabled = () => !options.when() const list = this.internal.views[options.type] ||= [] insert(list, options) return this.scope.collect('view', () => remove(list, options)) @@ -231,7 +231,7 @@ export class Context extends cordis.Context { for (const [type, component] of Object.entries(options.components || {})) { this.slot({ type, - when: () => config.value.theme[mode.value] === options.id, + disabled: () => config.value.theme[mode.value] !== options.id, component, }) } diff --git a/packages/client/client/index.ts b/packages/client/client/index.ts index 694833a5..49148cdc 100644 --- a/packages/client/client/index.ts +++ b/packages/client/client/index.ts @@ -6,6 +6,7 @@ import { config } from './config' import { initTask } from './loader' import { Context } from './context' import { createI18n } from 'vue-i18n' +import { watchEffect } from 'vue' export * from './activity' export * from './components' @@ -42,10 +43,13 @@ export const router = createRouter({ export const i18n = createI18n({ legacy: false, - locale: config.value.locale, fallbackLocale: 'zh-CN', }) +watchEffect(() => { + i18n.global.locale.value = config.value.locale +}) + root.app.use(install) root.app.use(i18n) root.app.use(router)