メニュー型定義を分離 (TypeScriptの型支援が効かないので)
This commit is contained in:
parent
ed5805e5af
commit
0a788d1df1
5 changed files with 25 additions and 24 deletions
|
@ -9,7 +9,8 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onMounted, onBeforeUnmount } from 'vue';
|
import { onMounted, onBeforeUnmount } from 'vue';
|
||||||
import contains from '@/scripts/contains';
|
import contains from '@/scripts/contains';
|
||||||
import MkMenu, { MenuItem } from './menu.vue';
|
import MkMenu from './menu.vue';
|
||||||
|
import { MenuItem } from './types/menu.vue';
|
||||||
import * as os from '@/os';
|
import * as os from '@/os';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
|
|
|
@ -44,31 +44,11 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import * as Misskey from 'misskey-js';
|
|
||||||
import { Ref } from 'vue';
|
|
||||||
|
|
||||||
export type MenuAction = (ev: MouseEvent) => void;
|
|
||||||
|
|
||||||
export type MenuDivider = null;
|
|
||||||
export type MenuNull = undefined;
|
|
||||||
export type MenuLabel = { type: 'label', text: string };
|
|
||||||
export type MenuLink = { type: 'link', to: string, text: string, icon?: string, indicate?: boolean, avatar: Misskey.entities.User };
|
|
||||||
export type MenuA = { type: 'a', href: string, target?: string, download?: string, text: string, icon?: string, indicate?: boolean };
|
|
||||||
export type MenuUser = { type: 'user', user: Misskey.entities.User, active?: boolean, indicate?: boolean, action: MenuAction };
|
|
||||||
export type MenuSwitch = { type: 'switch', ref: Ref<boolean>, text: string };
|
|
||||||
export type MenuButton = { type?: 'button', text: string, icon?: string, indicate?: boolean, danger?: boolean, active?: boolean, avatar: Misskey.entities.User; action: MenuAction };
|
|
||||||
|
|
||||||
export type MenuPending = { type: 'pending' };
|
|
||||||
|
|
||||||
type OuterMenuItem = MenuDivider | MenuNull | MenuLabel | MenuLink | MenuA | MenuUser | MenuSwitch | MenuButton;
|
|
||||||
export type MenuItem = OuterMenuItem | Promise<OuterMenuItem>;
|
|
||||||
export type InnerMenuItem = MenuDivider | MenuPending | MenuLabel | MenuLink | MenuA | MenuUser | MenuSwitch | MenuButton;
|
|
||||||
</script>
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { nextTick, onMounted, watch } from 'vue';
|
import { nextTick, onMounted, watch } from 'vue';
|
||||||
import { focusPrev, focusNext } from '@/scripts/focus';
|
import { focusPrev, focusNext } from '@/scripts/focus';
|
||||||
import FormSwitch from '@/components/form/switch.vue';
|
import FormSwitch from '@/components/form/switch.vue';
|
||||||
|
import { MenuItem, InnerMenuItem, MenuPending, MenuAction } from '@/types/menu';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
items: MenuItem[];
|
items: MenuItem[];
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { } from 'vue';
|
import { } from 'vue';
|
||||||
import MkModal from './modal.vue';
|
import MkModal from './modal.vue';
|
||||||
import MkMenu, { MenuItem } from './menu.vue';
|
import MkMenu from './menu.vue';
|
||||||
|
import { MenuItem } from '@/types/menu';
|
||||||
|
|
||||||
defineProps<{
|
defineProps<{
|
||||||
items: MenuItem[];
|
items: MenuItem[];
|
||||||
|
|
|
@ -7,7 +7,7 @@ import * as Misskey from 'misskey-js';
|
||||||
import { apiUrl, url } from '@/config';
|
import { apiUrl, url } from '@/config';
|
||||||
import MkPostFormDialog from '@/components/post-form-dialog.vue';
|
import MkPostFormDialog from '@/components/post-form-dialog.vue';
|
||||||
import MkWaitingDialog from '@/components/waiting-dialog.vue';
|
import MkWaitingDialog from '@/components/waiting-dialog.vue';
|
||||||
import { MenuItem } from '@/components/ui/menu.vue';
|
import { MenuItem } from '@/types/menu';
|
||||||
import { resolve } from '@/router';
|
import { resolve } from '@/router';
|
||||||
import { $i } from '@/account';
|
import { $i } from '@/account';
|
||||||
|
|
||||||
|
|
19
packages/client/src/types/menu.ts
Normal file
19
packages/client/src/types/menu.ts
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
import * as Misskey from 'misskey-js';
|
||||||
|
import { Ref } from 'vue';
|
||||||
|
|
||||||
|
export type MenuAction = (ev: MouseEvent) => void;
|
||||||
|
|
||||||
|
export type MenuDivider = null;
|
||||||
|
export type MenuNull = undefined;
|
||||||
|
export type MenuLabel = { type: 'label', text: string };
|
||||||
|
export type MenuLink = { type: 'link', to: string, text: string, icon?: string, indicate?: boolean, avatar: Misskey.entities.User };
|
||||||
|
export type MenuA = { type: 'a', href: string, target?: string, download?: string, text: string, icon?: string, indicate?: boolean };
|
||||||
|
export type MenuUser = { type: 'user', user: Misskey.entities.User, active?: boolean, indicate?: boolean, action: MenuAction };
|
||||||
|
export type MenuSwitch = { type: 'switch', ref: Ref<boolean>, text: string };
|
||||||
|
export type MenuButton = { type?: 'button', text: string, icon?: string, indicate?: boolean, danger?: boolean, active?: boolean, avatar: Misskey.entities.User; action: MenuAction };
|
||||||
|
|
||||||
|
export type MenuPending = { type: 'pending' };
|
||||||
|
|
||||||
|
type OuterMenuItem = MenuDivider | MenuNull | MenuLabel | MenuLink | MenuA | MenuUser | MenuSwitch | MenuButton;
|
||||||
|
export type MenuItem = OuterMenuItem | Promise<OuterMenuItem>;
|
||||||
|
export type InnerMenuItem = MenuDivider | MenuPending | MenuLabel | MenuLink | MenuA | MenuUser | MenuSwitch | MenuButton;
|
Loading…
Reference in a new issue