mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-07 06:56:04 +02:00
improve i18n
This commit is contained in:
@@ -311,7 +311,7 @@
|
|||||||
shortName: props.shortname
|
shortName: props.shortname
|
||||||
})
|
})
|
||||||
.then((args) => {
|
.then((args) => {
|
||||||
toast.success('Self invite sent');
|
toast.success(t('message.invite.self_sent'));
|
||||||
return args;
|
return args;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -91,8 +91,9 @@
|
|||||||
})
|
})
|
||||||
.then((args) => {
|
.then((args) => {
|
||||||
if (args.json[slot].message === I.messageSlot.message) {
|
if (args.json[slot].message === I.messageSlot.message) {
|
||||||
toast.error("VRChat API didn't update message, try again");
|
const errorMessage = t('message.invite.message_update_failed');
|
||||||
throw new Error("VRChat API didn't update message, try again");
|
toast.error(errorMessage);
|
||||||
|
throw new Error(errorMessage);
|
||||||
} else {
|
} else {
|
||||||
toast('Invite message updated');
|
toast('Invite message updated');
|
||||||
}
|
}
|
||||||
@@ -141,7 +142,7 @@
|
|||||||
} else {
|
} else {
|
||||||
J.loading = false;
|
J.loading = false;
|
||||||
J.visible = false;
|
J.visible = false;
|
||||||
toast.success('Invite sent');
|
toast.success(t('message.invite.sent'));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
inviteLoop();
|
inviteLoop();
|
||||||
|
|||||||
@@ -244,7 +244,7 @@
|
|||||||
function sendInvite() {
|
function sendInvite() {
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: 'Continue? Invite',
|
description: t('confirm.invite'),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(({ ok }) => {
|
.then(({ ok }) => {
|
||||||
@@ -281,7 +281,7 @@
|
|||||||
} else {
|
} else {
|
||||||
D.loading = false;
|
D.loading = false;
|
||||||
D.visible = false;
|
D.visible = false;
|
||||||
toast.success('Invite sent');
|
toast.success(t('message.invite.sent'));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
inviteLoop();
|
inviteLoop();
|
||||||
|
|||||||
@@ -273,7 +273,7 @@
|
|||||||
function sendGroupInvite() {
|
function sendGroupInvite() {
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: 'Continue? Invite User(s) To Group',
|
description: t('confirm.invite_group'),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(({ ok }) => {
|
.then(({ ok }) => {
|
||||||
|
|||||||
@@ -309,7 +309,7 @@
|
|||||||
shortName
|
shortName
|
||||||
})
|
})
|
||||||
.then((args) => {
|
.then((args) => {
|
||||||
toast.success('Self invite sent');
|
toast.success(t('message.invite.self_sent'));
|
||||||
return args;
|
return args;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -916,7 +916,7 @@
|
|||||||
worldId: L.worldId
|
worldId: L.worldId
|
||||||
})
|
})
|
||||||
.then((args) => {
|
.then((args) => {
|
||||||
toast.success('Self invite sent');
|
toast.success(t('message.invite.self_sent'));
|
||||||
return args;
|
return args;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1854,7 +1854,7 @@
|
|||||||
D.id
|
D.id
|
||||||
)
|
)
|
||||||
.then((_args) => {
|
.then((_args) => {
|
||||||
toast('Invite sent');
|
toast(t('message.invite.sent'));
|
||||||
return _args;
|
return _args;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -975,7 +975,9 @@
|
|||||||
case 'Trash2':
|
case 'Trash2':
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: `Continue? ${command}`,
|
description: t('confirm.command_question', {
|
||||||
|
command
|
||||||
|
}),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(({ ok }) => {
|
.then(({ ok }) => {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import { PaginationEllipsis } from 'reka-ui';
|
import { PaginationEllipsis } from 'reka-ui';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
import { reactiveOmit } from '@vueuse/core';
|
import { reactiveOmit } from '@vueuse/core';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
asChild: { type: Boolean, required: false },
|
asChild: { type: Boolean, required: false },
|
||||||
@@ -10,6 +11,8 @@
|
|||||||
class: { type: null, required: false }
|
class: { type: null, required: false }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
const delegatedProps = reactiveOmit(props, 'class');
|
const delegatedProps = reactiveOmit(props, 'class');
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -20,7 +23,9 @@
|
|||||||
:class="cn('flex size-9 items-center justify-center text-[13px]', props.class)">
|
:class="cn('flex size-9 items-center justify-center text-[13px]', props.class)">
|
||||||
<slot>
|
<slot>
|
||||||
<MoreHorizontal class="size-4" />
|
<MoreHorizontal class="size-4" />
|
||||||
<span class="sr-only">More pages</span>
|
<span class="sr-only">
|
||||||
|
{{ t('table.pagination.more_pages') }}
|
||||||
|
</span>
|
||||||
</slot>
|
</slot>
|
||||||
</PaginationEllipsis>
|
</PaginationEllipsis>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
import { buttonVariants } from '@/components/ui/button';
|
import { buttonVariants } from '@/components/ui/button';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
import { reactiveOmit } from '@vueuse/core';
|
import { reactiveOmit } from '@vueuse/core';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
asChild: { type: Boolean, required: false },
|
asChild: { type: Boolean, required: false },
|
||||||
@@ -12,6 +13,8 @@
|
|||||||
class: { type: null, required: false }
|
class: { type: null, required: false }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
const delegatedProps = reactiveOmit(props, 'class', 'size');
|
const delegatedProps = reactiveOmit(props, 'class', 'size');
|
||||||
const forwarded = useForwardProps(delegatedProps);
|
const forwarded = useForwardProps(delegatedProps);
|
||||||
</script>
|
</script>
|
||||||
@@ -23,7 +26,9 @@
|
|||||||
v-bind="forwarded">
|
v-bind="forwarded">
|
||||||
<slot>
|
<slot>
|
||||||
<ChevronLeftIcon />
|
<ChevronLeftIcon />
|
||||||
<span class="hidden sm:block">First</span>
|
<span class="hidden sm:block">
|
||||||
|
{{ t('table.pagination.first') }}
|
||||||
|
</span>
|
||||||
</slot>
|
</slot>
|
||||||
</PaginationFirst>
|
</PaginationFirst>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
import { buttonVariants } from '@/components/ui/button';
|
import { buttonVariants } from '@/components/ui/button';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
import { reactiveOmit } from '@vueuse/core';
|
import { reactiveOmit } from '@vueuse/core';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
asChild: { type: Boolean, required: false },
|
asChild: { type: Boolean, required: false },
|
||||||
@@ -12,6 +13,8 @@
|
|||||||
class: { type: null, required: false }
|
class: { type: null, required: false }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
const delegatedProps = reactiveOmit(props, 'class', 'size');
|
const delegatedProps = reactiveOmit(props, 'class', 'size');
|
||||||
const forwarded = useForwardProps(delegatedProps);
|
const forwarded = useForwardProps(delegatedProps);
|
||||||
</script>
|
</script>
|
||||||
@@ -22,7 +25,9 @@
|
|||||||
:class="cn(buttonVariants({ variant: 'ghost', size }), 'text-[13px] gap-1 px-2.5 sm:pr-2.5', props.class)"
|
:class="cn(buttonVariants({ variant: 'ghost', size }), 'text-[13px] gap-1 px-2.5 sm:pr-2.5', props.class)"
|
||||||
v-bind="forwarded">
|
v-bind="forwarded">
|
||||||
<slot>
|
<slot>
|
||||||
<span class="hidden sm:block">Last</span>
|
<span class="hidden sm:block">
|
||||||
|
{{ t('table.pagination.last') }}
|
||||||
|
</span>
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</slot>
|
</slot>
|
||||||
</PaginationLast>
|
</PaginationLast>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
import { buttonVariants } from '@/components/ui/button';
|
import { buttonVariants } from '@/components/ui/button';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
import { reactiveOmit } from '@vueuse/core';
|
import { reactiveOmit } from '@vueuse/core';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
asChild: { type: Boolean, required: false },
|
asChild: { type: Boolean, required: false },
|
||||||
@@ -12,6 +13,8 @@
|
|||||||
class: { type: null, required: false }
|
class: { type: null, required: false }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
const delegatedProps = reactiveOmit(props, 'class', 'size');
|
const delegatedProps = reactiveOmit(props, 'class', 'size');
|
||||||
const forwarded = useForwardProps(delegatedProps);
|
const forwarded = useForwardProps(delegatedProps);
|
||||||
</script>
|
</script>
|
||||||
@@ -22,7 +25,9 @@
|
|||||||
:class="cn(buttonVariants({ variant: 'ghost', size }), 'text-[13px] gap-1 px-2.5 sm:pr-2.5', props.class)"
|
:class="cn(buttonVariants({ variant: 'ghost', size }), 'text-[13px] gap-1 px-2.5 sm:pr-2.5', props.class)"
|
||||||
v-bind="forwarded">
|
v-bind="forwarded">
|
||||||
<slot>
|
<slot>
|
||||||
<span class="hidden sm:block">Next</span>
|
<span class="hidden sm:block">
|
||||||
|
{{ t('table.pagination.next') }}
|
||||||
|
</span>
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</slot>
|
</slot>
|
||||||
</PaginationNext>
|
</PaginationNext>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
import { buttonVariants } from '@/components/ui/button';
|
import { buttonVariants } from '@/components/ui/button';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
import { reactiveOmit } from '@vueuse/core';
|
import { reactiveOmit } from '@vueuse/core';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
asChild: { type: Boolean, required: false },
|
asChild: { type: Boolean, required: false },
|
||||||
@@ -12,6 +13,8 @@
|
|||||||
class: { type: null, required: false }
|
class: { type: null, required: false }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
const delegatedProps = reactiveOmit(props, 'class', 'size');
|
const delegatedProps = reactiveOmit(props, 'class', 'size');
|
||||||
const forwarded = useForwardProps(delegatedProps);
|
const forwarded = useForwardProps(delegatedProps);
|
||||||
</script>
|
</script>
|
||||||
@@ -23,7 +26,9 @@
|
|||||||
v-bind="forwarded">
|
v-bind="forwarded">
|
||||||
<slot>
|
<slot>
|
||||||
<ChevronLeftIcon />
|
<ChevronLeftIcon />
|
||||||
<span class="hidden sm:block">Previous</span>
|
<span class="hidden sm:block">
|
||||||
|
{{ t('table.pagination.previous') }}
|
||||||
|
</span>
|
||||||
</slot>
|
</slot>
|
||||||
</PaginationPrev>
|
</PaginationPrev>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -250,6 +250,13 @@
|
|||||||
"filter_placeholder": "Filter",
|
"filter_placeholder": "Filter",
|
||||||
"search_placeholder": "Search",
|
"search_placeholder": "Search",
|
||||||
"refresh_tooltip": "Refresh",
|
"refresh_tooltip": "Refresh",
|
||||||
|
"actions": {
|
||||||
|
"accept": "Accept",
|
||||||
|
"invite": "Invite",
|
||||||
|
"decline": "Decline",
|
||||||
|
"delete_log": "Delete log",
|
||||||
|
"decline_with_message": "Decline with message"
|
||||||
|
},
|
||||||
"filters": {
|
"filters": {
|
||||||
"requestInvite": "Request Invite",
|
"requestInvite": "Request Invite",
|
||||||
"invite": "Invite",
|
"invite": "Invite",
|
||||||
@@ -1954,7 +1961,22 @@
|
|||||||
"title": "Confirm",
|
"title": "Confirm",
|
||||||
"confirm_button": "Confirm",
|
"confirm_button": "Confirm",
|
||||||
"cancel_button": "Cancel",
|
"cancel_button": "Cancel",
|
||||||
"message": "Continue {command}?"
|
"message": "Continue {command}?",
|
||||||
|
"logout": "Continue? Logout",
|
||||||
|
"unfriend": "Continue? Unfriend",
|
||||||
|
"clear_avatar_history": "Continue? Clear Avatar History",
|
||||||
|
"select_avatar": "Continue? Select Avatar",
|
||||||
|
"invite": "Continue? Invite",
|
||||||
|
"invite_group": "Continue? Invite User(s) To Group",
|
||||||
|
"delete_log": "Continue? Delete Log",
|
||||||
|
"accept_friend_request": "Continue? Accept Friend Request",
|
||||||
|
"send_invite": "Continue? Send Invite",
|
||||||
|
"decline_type": "Continue? Decline {type}",
|
||||||
|
"delete_type": "Continue? Trash2 {type}",
|
||||||
|
"command_question": "Continue? {command}",
|
||||||
|
"restart_required_title": "Restart Required",
|
||||||
|
"restart_now": "Restart Now",
|
||||||
|
"restart_later": "Later"
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"title": "VRChat Status"
|
"title": "VRChat Status"
|
||||||
@@ -1974,19 +1996,35 @@
|
|||||||
"instance": {
|
"instance": {
|
||||||
"closed": "Instance closed",
|
"closed": "Instance closed",
|
||||||
"removed_form_queue": "Removed instance {worldName} from queue",
|
"removed_form_queue": "Removed instance {worldName} from queue",
|
||||||
"not_allowed": "You're not allowed to access this instance"
|
"not_allowed": "You're not allowed to access this instance",
|
||||||
|
"create_failed": "Failed to create instance"
|
||||||
},
|
},
|
||||||
"avatar": {
|
"avatar": {
|
||||||
"change_moderation_failed": "Failed to change avatar moderation",
|
"change_moderation_failed": "Failed to change avatar moderation",
|
||||||
"image_changed": "Avatar image changed",
|
"image_changed": "Avatar image changed",
|
||||||
"image_invalid": "Current avatar image invalid"
|
"image_invalid": "Current avatar image invalid"
|
||||||
},
|
},
|
||||||
|
"database": {
|
||||||
|
"upgrade_complete": "Database upgrade complete"
|
||||||
|
},
|
||||||
"emoji": {
|
"emoji": {
|
||||||
"uploaded": "Emoji uploaded"
|
"uploaded": "Emoji uploaded"
|
||||||
},
|
},
|
||||||
"file": {
|
"file": {
|
||||||
"not_image": "File isn't an image",
|
"not_image": "File isn't an image",
|
||||||
"too_large": "File size too large"
|
"too_large": "File size too large",
|
||||||
|
"folder_missing": "Folder dosn't exist"
|
||||||
|
},
|
||||||
|
"group": {
|
||||||
|
"load_failed": "Failed to load group"
|
||||||
|
},
|
||||||
|
"invite": {
|
||||||
|
"self_sent": "Self invite sent",
|
||||||
|
"sent": "Invite sent",
|
||||||
|
"message_update_failed": "VRChat API didn't update message, try again"
|
||||||
|
},
|
||||||
|
"launch": {
|
||||||
|
"invalid_path": "Invalid path, you must enter VRChat folder or launch.exe"
|
||||||
},
|
},
|
||||||
"print": {
|
"print": {
|
||||||
"uploaded": "Print uploaded"
|
"uploaded": "Print uploaded"
|
||||||
@@ -2014,17 +2052,22 @@
|
|||||||
},
|
},
|
||||||
"world": {
|
"world": {
|
||||||
"image_changed": "World image changed",
|
"image_changed": "World image changed",
|
||||||
"image_invalid": "Current world image invalid"
|
"image_invalid": "Current world image invalid",
|
||||||
|
"load_failed": "Failed to load world"
|
||||||
},
|
},
|
||||||
"icon": {
|
"icon": {
|
||||||
"uploaded": "Icon uploaded"
|
"uploaded": "Icon uploaded"
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"moderated": "User moderated"
|
"moderated": "User moderated",
|
||||||
|
"load_failed": "Failed to load user"
|
||||||
},
|
},
|
||||||
"friend": {
|
"friend": {
|
||||||
"load_failed": "Failed to load friends list, logging out"
|
"load_failed": "Failed to load friends list, logging out"
|
||||||
},
|
},
|
||||||
|
"vrcplus": {
|
||||||
|
"required": "VRCPlus required"
|
||||||
|
},
|
||||||
"screenshot_metadata": {
|
"screenshot_metadata": {
|
||||||
"deleted": "Screenshot metadata deleted",
|
"deleted": "Screenshot metadata deleted",
|
||||||
"delete_failed": "Failed to delete screenshot metadata"
|
"delete_failed": "Failed to delete screenshot metadata"
|
||||||
@@ -2272,7 +2315,12 @@
|
|||||||
},
|
},
|
||||||
"table": {
|
"table": {
|
||||||
"pagination": {
|
"pagination": {
|
||||||
"rows_per_page": "Rows per page"
|
"rows_per_page": "Rows per page",
|
||||||
|
"first": "First",
|
||||||
|
"previous": "Previous",
|
||||||
|
"next": "Next",
|
||||||
|
"last": "Last",
|
||||||
|
"more_pages": "More pages"
|
||||||
},
|
},
|
||||||
"feed": {
|
"feed": {
|
||||||
"date": "Date",
|
"date": "Date",
|
||||||
|
|||||||
+1
-1
@@ -418,7 +418,7 @@ export const useAuthStore = defineStore('Auth', () => {
|
|||||||
function logout() {
|
function logout() {
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: 'Continue? Logout',
|
description: t('confirm.logout'),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(({ ok }) => {
|
.then(({ ok }) => {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { nextTick, ref, watch } from 'vue';
|
import { nextTick, ref, watch } from 'vue';
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { toast } from 'vue-sonner';
|
import { toast } from 'vue-sonner';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
checkVRChatCache,
|
checkVRChatCache,
|
||||||
@@ -31,6 +32,7 @@ export const useAvatarStore = defineStore('Avatar', () => {
|
|||||||
const advancedSettingsStore = useAdvancedSettingsStore();
|
const advancedSettingsStore = useAdvancedSettingsStore();
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const modalStore = useModalStore();
|
const modalStore = useModalStore();
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
let cachedAvatarModerations = new Map();
|
let cachedAvatarModerations = new Map();
|
||||||
let cachedAvatars = new Map();
|
let cachedAvatars = new Map();
|
||||||
@@ -392,7 +394,7 @@ export const useAvatarStore = defineStore('Avatar', () => {
|
|||||||
function promptClearAvatarHistory() {
|
function promptClearAvatarHistory() {
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: 'Continue? Clear Avatar History',
|
description: t('confirm.clear_avatar_history'),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(({ ok }) => {
|
.then(({ ok }) => {
|
||||||
@@ -556,7 +558,7 @@ export const useAvatarStore = defineStore('Avatar', () => {
|
|||||||
function selectAvatarWithConfirmation(id) {
|
function selectAvatarWithConfirmation(id) {
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: 'Continue? Select Avatar',
|
description: t('confirm.select_avatar'),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(({ ok }) => {
|
.then(({ ok }) => {
|
||||||
|
|||||||
@@ -1581,7 +1581,7 @@ export const useFriendStore = defineStore('Friend', () => {
|
|||||||
function confirmDeleteFriend(id) {
|
function confirmDeleteFriend(id) {
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: 'Continue? Unfriend',
|
description: t('confirm.unfriend'),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(async ({ ok }) => {
|
.then(async ({ ok }) => {
|
||||||
|
|||||||
+3
-1
@@ -1,6 +1,7 @@
|
|||||||
import { nextTick, reactive, ref, watch } from 'vue';
|
import { nextTick, reactive, ref, watch } from 'vue';
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { toast } from 'vue-sonner';
|
import { toast } from 'vue-sonner';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
groupRequest,
|
groupRequest,
|
||||||
@@ -32,6 +33,7 @@ export const useGroupStore = defineStore('Group', () => {
|
|||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const notificationStore = useNotificationStore();
|
const notificationStore = useNotificationStore();
|
||||||
const modalStore = useModalStore();
|
const modalStore = useModalStore();
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
let cachedGroups = new Map();
|
let cachedGroups = new Map();
|
||||||
|
|
||||||
@@ -152,7 +154,7 @@ export const useGroupStore = defineStore('Group', () => {
|
|||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
D.loading = false;
|
D.loading = false;
|
||||||
D.visible = false;
|
D.visible = false;
|
||||||
toast.error('Failed to load group');
|
toast.error(t('message.group.load_failed'));
|
||||||
throw err;
|
throw err;
|
||||||
})
|
})
|
||||||
.then((args) => {
|
.then((args) => {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { computed, ref, watch } from 'vue';
|
import { computed, ref, watch } from 'vue';
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { toast } from 'vue-sonner';
|
import { toast } from 'vue-sonner';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import { instanceRequest, inviteMessagesRequest } from '../api';
|
import { instanceRequest, inviteMessagesRequest } from '../api';
|
||||||
import { parseLocation } from '../shared/utils';
|
import { parseLocation } from '../shared/utils';
|
||||||
@@ -15,6 +16,7 @@ export const useInviteStore = defineStore('Invite', () => {
|
|||||||
const gameStore = useGameStore();
|
const gameStore = useGameStore();
|
||||||
const launchStore = useLaunchStore();
|
const launchStore = useLaunchStore();
|
||||||
const advancedSettingsStore = useAdvancedSettingsStore();
|
const advancedSettingsStore = useAdvancedSettingsStore();
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
const inviteMessageTable = ref({
|
const inviteMessageTable = ref({
|
||||||
data: [],
|
data: [],
|
||||||
@@ -95,7 +97,7 @@ export const useInviteStore = defineStore('Invite', () => {
|
|||||||
instanceStore.createNewInstance(worldId).then((args) => {
|
instanceStore.createNewInstance(worldId).then((args) => {
|
||||||
const location = args?.json?.location;
|
const location = args?.json?.location;
|
||||||
if (!location) {
|
if (!location) {
|
||||||
toast.error('Failed to create instance');
|
toast.error(t('message.instance.create_failed'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// self invite
|
// self invite
|
||||||
@@ -115,7 +117,7 @@ export const useInviteStore = defineStore('Invite', () => {
|
|||||||
worldId: L.worldId
|
worldId: L.worldId
|
||||||
})
|
})
|
||||||
.then((args) => {
|
.then((args) => {
|
||||||
toast.success('Self invite sent');
|
toast.success(t('message.invite.self_sent'));
|
||||||
return args;
|
return args;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { nextTick, ref, watch } from 'vue';
|
import { nextTick, ref, watch } from 'vue';
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { toast } from 'vue-sonner';
|
import { toast } from 'vue-sonner';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import { instanceRequest } from '../api';
|
import { instanceRequest } from '../api';
|
||||||
import { parseLocation } from '../shared/utils';
|
import { parseLocation } from '../shared/utils';
|
||||||
@@ -11,6 +12,7 @@ import configRepository from '../service/config';
|
|||||||
export const useLaunchStore = defineStore('Launch', () => {
|
export const useLaunchStore = defineStore('Launch', () => {
|
||||||
const isLaunchOptionsDialogVisible = ref(false);
|
const isLaunchOptionsDialogVisible = ref(false);
|
||||||
const isOpeningInstance = ref(false);
|
const isOpeningInstance = ref(false);
|
||||||
|
const { t } = useI18n();
|
||||||
const launchDialogData = ref({
|
const launchDialogData = ref({
|
||||||
visible: false,
|
visible: false,
|
||||||
loading: false,
|
loading: false,
|
||||||
@@ -114,7 +116,7 @@ export const useLaunchStore = defineStore('Launch', () => {
|
|||||||
worldId: L.worldId,
|
worldId: L.worldId,
|
||||||
shortName
|
shortName
|
||||||
});
|
});
|
||||||
toast.success('Self invite sent');
|
toast.success(t('message.invite.self_sent'));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -485,9 +485,9 @@ export const useAdvancedSettingsStore = defineStore('AdvancedSettings', () => {
|
|||||||
.confirm({
|
.confirm({
|
||||||
description:
|
description:
|
||||||
'Error reporting setting has been enabled. Would you like to restart VRCX now for the change to take effect?',
|
'Error reporting setting has been enabled. Would you like to restart VRCX now for the change to take effect?',
|
||||||
title: 'Restart Required',
|
title: t('confirm.restart_required_title'),
|
||||||
confirmText: 'Restart Now',
|
confirmText: t('confirm.restart_now'),
|
||||||
cancelText: 'Later'
|
cancelText: t('confirm.restart_later')
|
||||||
})
|
})
|
||||||
.then(async ({ ok }) => {
|
.then(async ({ ok }) => {
|
||||||
if (!ok) return;
|
if (!ok) return;
|
||||||
@@ -507,9 +507,9 @@ export const useAdvancedSettingsStore = defineStore('AdvancedSettings', () => {
|
|||||||
.confirm({
|
.confirm({
|
||||||
description:
|
description:
|
||||||
'Error reporting setting has been disabled. Would you like to restart VRCX now for the change to take effect?',
|
'Error reporting setting has been disabled. Would you like to restart VRCX now for the change to take effect?',
|
||||||
title: 'Restart Required',
|
title: t('confirm.restart_required_title'),
|
||||||
confirmText: 'Restart Now',
|
confirmText: t('confirm.restart_now'),
|
||||||
cancelText: 'Later'
|
cancelText: t('confirm.restart_later')
|
||||||
})
|
})
|
||||||
.then(async ({ ok }) => {
|
.then(async ({ ok }) => {
|
||||||
if (!ok) return;
|
if (!ok) return;
|
||||||
|
|||||||
+3
-1
@@ -1,6 +1,7 @@
|
|||||||
import { computed, reactive, ref, shallowReactive, watch } from 'vue';
|
import { computed, reactive, ref, shallowReactive, watch } from 'vue';
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { toast } from 'vue-sonner';
|
import { toast } from 'vue-sonner';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import Noty from 'noty';
|
import Noty from 'noty';
|
||||||
|
|
||||||
@@ -70,6 +71,7 @@ export const useUserStore = defineStore('User', () => {
|
|||||||
const moderationStore = useModerationStore();
|
const moderationStore = useModerationStore();
|
||||||
const photonStore = usePhotonStore();
|
const photonStore = usePhotonStore();
|
||||||
const sharedFeedStore = useSharedFeedStore();
|
const sharedFeedStore = useSharedFeedStore();
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
const currentUser = ref({
|
const currentUser = ref({
|
||||||
acceptedPrivacyVersion: 0,
|
acceptedPrivacyVersion: 0,
|
||||||
@@ -837,7 +839,7 @@ export const useUserStore = defineStore('User', () => {
|
|||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
D.loading = false;
|
D.loading = false;
|
||||||
D.visible = false;
|
D.visible = false;
|
||||||
toast.error('Failed to load user');
|
toast.error(t('message.user.load_failed'));
|
||||||
throw err;
|
throw err;
|
||||||
})
|
})
|
||||||
.then((args) => {
|
.then((args) => {
|
||||||
|
|||||||
+1
-1
@@ -195,7 +195,7 @@ export const useVrcxStore = defineStore('Vrcx', () => {
|
|||||||
toast.dismiss(msgBox);
|
toast.dismiss(msgBox);
|
||||||
if (state.databaseVersion) {
|
if (state.databaseVersion) {
|
||||||
// only display when database exists
|
// only display when database exists
|
||||||
toast.success('Database upgrade complete');
|
toast.success(t('message.database.upgrade_complete'));
|
||||||
}
|
}
|
||||||
state.databaseVersion = databaseVersion;
|
state.databaseVersion = databaseVersion;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
+3
-1
@@ -1,6 +1,7 @@
|
|||||||
import { reactive, shallowReactive, watch } from 'vue';
|
import { reactive, shallowReactive, watch } from 'vue';
|
||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { toast } from 'vue-sonner';
|
import { toast } from 'vue-sonner';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
checkVRChatCache,
|
checkVRChatCache,
|
||||||
@@ -24,6 +25,7 @@ export const useWorldStore = defineStore('World', () => {
|
|||||||
const favoriteStore = useFavoriteStore();
|
const favoriteStore = useFavoriteStore();
|
||||||
const instanceStore = useInstanceStore();
|
const instanceStore = useInstanceStore();
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
const worldDialog = reactive({
|
const worldDialog = reactive({
|
||||||
visible: false,
|
visible: false,
|
||||||
@@ -132,7 +134,7 @@ export const useWorldStore = defineStore('World', () => {
|
|||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
D.loading = false;
|
D.loading = false;
|
||||||
D.visible = false;
|
D.visible = false;
|
||||||
toast.error('Failed to load world');
|
toast.error(t('message.world.load_failed'));
|
||||||
throw err;
|
throw err;
|
||||||
})
|
})
|
||||||
.then((args) => {
|
.then((args) => {
|
||||||
|
|||||||
@@ -151,7 +151,7 @@
|
|||||||
function deleteFriendLogPrompt(row) {
|
function deleteFriendLogPrompt(row) {
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: 'Continue? Delete Log',
|
description: t('confirm.delete_log'),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(({ ok }) => ok && deleteFriendLog(row))
|
.then(({ ok }) => ok && deleteFriendLog(row))
|
||||||
|
|||||||
@@ -138,7 +138,7 @@
|
|||||||
function deleteGameLogEntryPrompt(row) {
|
function deleteGameLogEntryPrompt(row) {
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: 'Continue? Delete Log',
|
description: t('confirm.delete_log'),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(({ ok }) => ok && deleteGameLogEntry(row))
|
.then(({ ok }) => ok && deleteGameLogEntry(row))
|
||||||
|
|||||||
@@ -324,7 +324,7 @@
|
|||||||
// FIXME: 메시지 수정
|
// FIXME: 메시지 수정
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: 'Continue? Accept Friend Request',
|
description: t('confirm.accept_friend_request'),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(({ ok }) => {
|
.then(({ ok }) => {
|
||||||
@@ -349,7 +349,7 @@
|
|||||||
function acceptRequestInvite(row) {
|
function acceptRequestInvite(row) {
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: 'Continue? Send Invite',
|
description: t('confirm.send_invite'),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(({ ok }) => {
|
.then(({ ok }) => {
|
||||||
@@ -381,7 +381,7 @@
|
|||||||
row.senderUserId
|
row.senderUserId
|
||||||
)
|
)
|
||||||
.then((_args) => {
|
.then((_args) => {
|
||||||
toast('Invite sent');
|
toast(t('message.invite.sent'));
|
||||||
notificationRequest.hideNotification({
|
notificationRequest.hideNotification({
|
||||||
notificationId: row.id
|
notificationId: row.id
|
||||||
});
|
});
|
||||||
@@ -459,7 +459,7 @@
|
|||||||
function hideNotificationPrompt(row) {
|
function hideNotificationPrompt(row) {
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: `Continue? Decline ${row.type}`,
|
description: t('confirm.decline_type', { type: row.type }),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(({ ok }) => {
|
.then(({ ok }) => {
|
||||||
@@ -483,7 +483,7 @@
|
|||||||
function deleteNotificationLogPrompt(row) {
|
function deleteNotificationLogPrompt(row) {
|
||||||
modalStore
|
modalStore
|
||||||
.confirm({
|
.confirm({
|
||||||
description: `Continue? Trash2 ${row.type}`,
|
description: t('confirm.delete_type', { type: row.type }),
|
||||||
title: 'Confirm'
|
title: 'Confirm'
|
||||||
})
|
})
|
||||||
.then(({ ok }) => {
|
.then(({ ok }) => {
|
||||||
|
|||||||
@@ -543,7 +543,11 @@ export const createColumns = ({
|
|||||||
</button>
|
</button>
|
||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent side="top">
|
<TooltipContent side="top">
|
||||||
<span>Accept</span>
|
<span>
|
||||||
|
{t(
|
||||||
|
'view.notification.actions.accept'
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
</TooltipProvider>
|
||||||
@@ -567,7 +571,9 @@ export const createColumns = ({
|
|||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent side="top">
|
<TooltipContent side="top">
|
||||||
<span>
|
<span>
|
||||||
Decline with message
|
{t(
|
||||||
|
'view.notification.actions.decline_with_message'
|
||||||
|
)}
|
||||||
</span>
|
</span>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
@@ -593,7 +599,11 @@ export const createColumns = ({
|
|||||||
</button>
|
</button>
|
||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent side="top">
|
<TooltipContent side="top">
|
||||||
<span>Invite</span>
|
<span>
|
||||||
|
{t(
|
||||||
|
'view.notification.actions.invite'
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
</TooltipProvider>
|
||||||
@@ -615,7 +625,9 @@ export const createColumns = ({
|
|||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent side="top">
|
<TooltipContent side="top">
|
||||||
<span>
|
<span>
|
||||||
Decline with message
|
{t(
|
||||||
|
'view.notification.actions.decline_with_message'
|
||||||
|
)}
|
||||||
</span>
|
</span>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
@@ -705,7 +717,11 @@ export const createColumns = ({
|
|||||||
</button>
|
</button>
|
||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent side="top">
|
<TooltipContent side="top">
|
||||||
<span>Decline</span>
|
<span>
|
||||||
|
{t(
|
||||||
|
'view.notification.actions.decline'
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
</TooltipProvider>
|
||||||
@@ -736,7 +752,11 @@ export const createColumns = ({
|
|||||||
</button>
|
</button>
|
||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent side="top">
|
<TooltipContent side="top">
|
||||||
<span>Delete log</span>
|
<span>
|
||||||
|
{t(
|
||||||
|
'view.notification.actions.delete_log'
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
</TooltipProvider>
|
||||||
@@ -767,7 +787,11 @@ export const createColumns = ({
|
|||||||
</button>
|
</button>
|
||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent side="top">
|
<TooltipContent side="top">
|
||||||
<span>Delete log</span>
|
<span>
|
||||||
|
{t(
|
||||||
|
'view.notification.actions.delete_log'
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</TooltipProvider>
|
</TooltipProvider>
|
||||||
|
|||||||
@@ -79,8 +79,9 @@
|
|||||||
})
|
})
|
||||||
.then((args) => {
|
.then((args) => {
|
||||||
if (args.json[slot].message === I.messageSlot.message) {
|
if (args.json[slot].message === I.messageSlot.message) {
|
||||||
toast.error("VRChat API didn't update message, try again");
|
const errorMessage = t('message.invite.message_update_failed');
|
||||||
throw new Error("VRChat API didn't update message, try again");
|
toast.error(errorMessage);
|
||||||
|
throw new Error(errorMessage);
|
||||||
} else {
|
} else {
|
||||||
toast('Invite message updated');
|
toast('Invite message updated');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -507,7 +507,7 @@
|
|||||||
if (result) {
|
if (result) {
|
||||||
toast.success('Folder opened');
|
toast.success('Folder opened');
|
||||||
} else {
|
} else {
|
||||||
toast.error("Folder dosn't exist");
|
toast.error(t('message.file.folder_missing'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -517,7 +517,7 @@
|
|||||||
if (result) {
|
if (result) {
|
||||||
toast.success('Folder opened');
|
toast.success('Folder opened');
|
||||||
} else {
|
} else {
|
||||||
toast.error("Folder dosn't exist");
|
toast.error(t('message.file.folder_missing'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -527,7 +527,7 @@
|
|||||||
if (result) {
|
if (result) {
|
||||||
toast.success('Folder opened');
|
toast.success('Folder opened');
|
||||||
} else {
|
} else {
|
||||||
toast.error("Folder dosn't exist");
|
toast.error(t('message.file.folder_missing'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,7 +111,7 @@
|
|||||||
D.vrcLaunchPathOverride.endsWith('.exe') &&
|
D.vrcLaunchPathOverride.endsWith('.exe') &&
|
||||||
!D.vrcLaunchPathOverride.endsWith('launch.exe')
|
!D.vrcLaunchPathOverride.endsWith('launch.exe')
|
||||||
) {
|
) {
|
||||||
toast.error('Invalid path, you must enter VRChat folder or launch.exe');
|
toast.error(t('message.launch.invalid_path'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
configRepository.setString('vrcLaunchPathOverride', D.vrcLaunchPathOverride);
|
configRepository.setString('vrcLaunchPathOverride', D.vrcLaunchPathOverride);
|
||||||
|
|||||||
@@ -737,7 +737,7 @@
|
|||||||
|
|
||||||
function setProfilePicOverride(fileId) {
|
function setProfilePicOverride(fileId) {
|
||||||
if (!isLocalUserVrcPlusSupporter.value) {
|
if (!isLocalUserVrcPlusSupporter.value) {
|
||||||
toast.error('VRCPlus required');
|
toast.error(t('message.vrcplus.required'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let profilePicOverride = '';
|
let profilePicOverride = '';
|
||||||
@@ -834,7 +834,7 @@
|
|||||||
|
|
||||||
function setVRCPlusIcon(fileId) {
|
function setVRCPlusIcon(fileId) {
|
||||||
if (!isLocalUserVrcPlusSupporter.value) {
|
if (!isLocalUserVrcPlusSupporter.value) {
|
||||||
toast.error('VRCPlus required');
|
toast.error(t('message.vrcplus.required'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let userIcon = '';
|
let userIcon = '';
|
||||||
|
|||||||
@@ -286,7 +286,7 @@
|
|||||||
if (result) {
|
if (result) {
|
||||||
toast.success('Folder opened');
|
toast.success('Folder opened');
|
||||||
} else {
|
} else {
|
||||||
toast.error("Folder dosn't exist");
|
toast.error(t('message.file.folder_missing'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
if (result) {
|
if (result) {
|
||||||
toast.success('Folder opened');
|
toast.success('Folder opened');
|
||||||
} else {
|
} else {
|
||||||
toast.error("Folder dosn't exist");
|
toast.error(t('message.file.folder_missing'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,8 +70,9 @@
|
|||||||
})
|
})
|
||||||
.then((args) => {
|
.then((args) => {
|
||||||
if (args.json[slot].message === props.inviteMessage.message) {
|
if (args.json[slot].message === props.inviteMessage.message) {
|
||||||
toast.error("VRChat API didn't update message, try again");
|
const errorMessage = t('message.invite.message_update_failed');
|
||||||
throw new Error("VRChat API didn't update message, try again");
|
toast.error(errorMessage);
|
||||||
|
throw new Error(errorMessage);
|
||||||
} else {
|
} else {
|
||||||
toast.success('Invite message updated');
|
toast.success('Invite message updated');
|
||||||
emit('updateInviteMessages', messageType);
|
emit('updateInviteMessages', messageType);
|
||||||
|
|||||||
Reference in New Issue
Block a user