diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2025-09-13 21:00:33 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-13 21:00:33 +0900 |
| commit | d4654dd7bd5bf1c7faa74ed89f592448c0076be8 (patch) | |
| tree | b4f51e86f174717fef469fbedca48faa2a55e841 /packages/frontend/src/composables | |
| parent | fix(deps): update dependency vite [security] (#16535) (diff) | |
| download | misskey-d4654dd7bd5bf1c7faa74ed89f592448c0076be8.tar.gz misskey-d4654dd7bd5bf1c7faa74ed89f592448c0076be8.tar.bz2 misskey-d4654dd7bd5bf1c7faa74ed89f592448c0076be8.zip | |
refactor(frontend): os.select, MkSelectのitem指定をオブジェクトによる定義に統一し、型を狭める (#16475)
* refactor(frontend): MkSelectのitem指定をオブジェクトによる定義に統一
* fix
* spdx
* fix
* fix os.select
* fix lint
* add comment
* fix
* fix: os.select対応漏れを修正
* fix
* fix
* fix: MkSelectのmodelに対する型チェックを厳格化
* fix
* fix
* fix
* Update packages/frontend/src/components/MkEmbedCodeGenDialog.vue
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
* fix
* fix types
* fix
* fix
* Update packages/frontend/src/pages/admin/roles.editor.vue
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
* fix: MkSelectに直接配列を指定している場合に正常に型が解決されるように
---------
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
Diffstat (limited to 'packages/frontend/src/composables')
| -rw-r--r-- | packages/frontend/src/composables/use-mkselect.ts | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/packages/frontend/src/composables/use-mkselect.ts b/packages/frontend/src/composables/use-mkselect.ts new file mode 100644 index 0000000000..7cb470d169 --- /dev/null +++ b/packages/frontend/src/composables/use-mkselect.ts @@ -0,0 +1,38 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { ref } from 'vue'; +import type { Ref, MaybeRefOrGetter } from 'vue'; +import type { MkSelectItem, OptionValue, GetMkSelectValueTypesFromDef } from '@/components/MkSelect.vue'; + +type UnwrapReadonlyItems<T> = T extends readonly (infer U)[] ? U[] : T; + +/** 指定したオプション定義をもとに型を狭めたrefを生成するコンポーサブル */ +export function useMkSelect< + const TItemsInput extends MaybeRefOrGetter<MkSelectItem[]>, + const TItems extends TItemsInput extends MaybeRefOrGetter<infer U> ? U : never, + TInitialValue extends OptionValue | void = void, + TItemsValue = GetMkSelectValueTypesFromDef<UnwrapReadonlyItems<TItems>>, + ModelType = TInitialValue extends void + ? TItemsValue + : (TItemsValue | TInitialValue) +>(opts: { + items: TItemsInput; + initialValue?: (TInitialValue | (OptionValue extends TItemsValue ? OptionValue : TInitialValue)) & ( + TItemsValue extends TInitialValue + ? unknown + : { 'Error: Type of initialValue must include all types of items': TItemsValue } + ); +}): { + def: TItemsInput; + model: Ref<ModelType>; +} { + const model = ref(opts.initialValue ?? null); + + return { + def: opts.items, + model: model as Ref<ModelType>, + }; +} |