summaryrefslogtreecommitdiff
path: root/packages/frontend/src/utility/form.ts
diff options
context:
space:
mode:
authormisskey-release-bot[bot] <157398866+misskey-release-bot[bot]@users.noreply.github.com>2026-03-05 10:56:50 +0000
committerGitHub <noreply@github.com>2026-03-05 10:56:50 +0000
commitfe3dd8edb5f30104cd0a7ed755eb254feda2922d (patch)
treeaf6cf5fa4ca75302ac2de5db742cead00bc13d21 /packages/frontend/src/utility/form.ts
parentMerge pull request #16998 from misskey-dev/develop (diff)
parentRelease: 2026.3.0 (diff)
downloadmisskey-fe3dd8edb5f30104cd0a7ed755eb254feda2922d.tar.gz
misskey-fe3dd8edb5f30104cd0a7ed755eb254feda2922d.tar.bz2
misskey-fe3dd8edb5f30104cd0a7ed755eb254feda2922d.zip
Merge pull request #17217 from misskey-dev/develop
Release: 2026.3.0
Diffstat (limited to 'packages/frontend/src/utility/form.ts')
-rw-r--r--packages/frontend/src/utility/form.ts54
1 files changed, 32 insertions, 22 deletions
diff --git a/packages/frontend/src/utility/form.ts b/packages/frontend/src/utility/form.ts
index cb4a227f67..43dee37a0e 100644
--- a/packages/frontend/src/utility/form.ts
+++ b/packages/frontend/src/utility/form.ts
@@ -4,7 +4,7 @@
*/
import * as Misskey from 'misskey-js';
-import type { OptionValue } from '@/components/MkSelect.vue';
+import type { OptionValue } from '@/types/option-value.js';
export type EnumItem = string | {
label: string;
@@ -25,6 +25,7 @@ export interface StringFormItem extends FormItemBase {
required?: boolean;
multiline?: boolean;
treatAsMfm?: boolean;
+ manualSave?: boolean;
}
export interface NumberFormItem extends FormItemBase {
@@ -33,6 +34,7 @@ export interface NumberFormItem extends FormItemBase {
description?: string;
required?: boolean;
step?: number;
+ manualSave?: boolean;
}
export interface BooleanFormItem extends FormItemBase {
@@ -43,18 +45,18 @@ export interface BooleanFormItem extends FormItemBase {
export interface EnumFormItem extends FormItemBase {
type: 'enum';
- default?: string | null;
+ default?: OptionValue | null;
required?: boolean;
enum: EnumItem[];
}
export interface RadioFormItem extends FormItemBase {
type: 'radio';
- default?: unknown | null;
+ default?: OptionValue | null;
required?: boolean;
options: {
label: string;
- value: unknown;
+ value: OptionValue;
}[];
}
@@ -82,7 +84,7 @@ export interface ArrayFormItem extends FormItemBase {
export interface ButtonFormItem extends FormItemBase {
type: 'button';
content?: string;
- action: (ev: MouseEvent, v: any) => void;
+ action: (ev: PointerEvent, v: any) => void;
}
export interface DriveFileFormItem extends FormItemBase {
@@ -124,24 +126,32 @@ type NonNullableIfRequired<T, Item extends FormItem> =
type GetItemType<Item extends FormItem> =
Item extends StringFormItem
? NonNullableIfRequired<InferDefault<Item, string>, Item>
- : Item extends NumberFormItem
- ? NonNullableIfRequired<InferDefault<Item, number>, Item>
- : Item extends BooleanFormItem
- ? boolean
- : Item extends RadioFormItem
- ? GetRadioItemType<Item>
- : Item extends RangeFormItem
- ? NonNullableIfRequired<InferDefault<Item, number>, Item>
- : Item extends EnumFormItem
- ? GetEnumItemType<Item>
- : Item extends ArrayFormItem
- ? NonNullableIfRequired<InferDefault<Item, unknown[]>, Item>
- : Item extends ObjectFormItem
- ? NonNullableIfRequired<InferDefault<Item, Record<string, unknown>>, Item>
- : Item extends DriveFileFormItem
- ? Misskey.entities.DriveFile | undefined
- : never;
+ : Item extends NumberFormItem
+ ? NonNullableIfRequired<InferDefault<Item, number>, Item>
+ : Item extends BooleanFormItem
+ ? boolean
+ : Item extends RadioFormItem
+ ? GetRadioItemType<Item>
+ : Item extends RangeFormItem
+ ? NonNullableIfRequired<InferDefault<Item, number>, Item>
+ : Item extends EnumFormItem
+ ? GetEnumItemType<Item>
+ : Item extends ArrayFormItem
+ ? NonNullableIfRequired<InferDefault<Item, unknown[]>, Item>
+ : Item extends ObjectFormItem
+ ? NonNullableIfRequired<InferDefault<Item, Record<string, unknown>>, Item>
+ : Item extends DriveFileFormItem
+ ? Misskey.entities.DriveFile | undefined
+ : never;
export type GetFormResultType<F extends Form> = {
[P in keyof F]: GetItemType<F[P]>;
};
+
+export function getDefaultFormValues<F extends FormWithDefault>(form: F): GetFormResultType<F> {
+ const result = {} as GetFormResultType<F>;
+ for (const key of Object.keys(form) as (keyof F)[]) {
+ result[key] = form[key].default as GetItemType<F[typeof key]>;
+ }
+ return result;
+}