refactor utils

This commit is contained in:
pa
2026-03-10 20:08:16 +09:00
parent ff1529920b
commit 1dfd0bf54c
40 changed files with 435 additions and 275 deletions

View File

@@ -274,13 +274,14 @@
useModalStore,
useUserStore
} from '../../../stores';
import { userImage, userStatusClass } from '../../../shared/utils';
import { useUserDisplay } from '../../../composables/useUserDisplay';
import { showUserDialog } from '../../../coordinators/userCoordinator';
import { database } from '../../../services/database';
import { watchState } from '../../../services/watchState';
import configRepository from '../../../services/config';
const { userImage, userStatusClass } = useUserDisplay();
const { t } = useI18n();
const friendStore = useFriendStore();
const userStore = useUserStore();

View File

@@ -350,7 +350,8 @@
} from '../../components/ui/dropdown-menu';
import { useAppearanceSettingsStore, useFavoriteStore, useModalStore, useUserStore } from '../../stores';
import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '../../components/ui/resizable';
import { debounce, userImage } from '../../shared/utils';
import { debounce } from '../../shared/utils';
import { useUserDisplay } from '../../composables/useUserDisplay';
import { favoriteRequest } from '../../api';
import { useFavoritesCardScaling } from './composables/useFavoritesCardScaling.js';
import { useFavoritesGroupPanel } from './composables/useFavoritesGroupPanel.js';
@@ -370,6 +371,7 @@
import FavoritesToolbar from './components/FavoritesToolbar.vue';
import FriendExportDialog from './dialogs/FriendExportDialog.vue';
const { userImage } = useUserDisplay();
const friendGroupVisibilityOptions = ref(['public', 'friends', 'private']);
const {

View File

@@ -93,10 +93,11 @@
import { favoriteRequest } from '../../../api';
import { removeLocalFriendFavorite } from '../../../coordinators/favoriteCoordinator';
import { useFavoriteStore } from '../../../stores';
import { userImage } from '../../../shared/utils';
import { useUserDisplay } from '../../../composables/useUserDisplay';
import FavoritesMoveDropdown from './FavoritesMoveDropdown.vue';
const { userImage } = useUserDisplay();
const props = defineProps({
favorite: { type: Object, required: true },
group: { type: Object, default: null },

View File

@@ -125,7 +125,8 @@
import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n';
import { removeFromArray, userImage, userImageFull } from '../../../shared/utils';
import { removeFromArray } from '../../../shared/utils';
import { useUserDisplay } from '../../../composables/useUserDisplay';
import { useFavoriteStore, useGalleryStore, useUserStore } from '../../../stores';
import { addLocalFriendFavorite } from '../../../coordinators/favoriteCoordinator';
import { favoriteRequest, userRequest } from '../../../api';
@@ -133,6 +134,7 @@
import { useVrcxVueTable } from '../../../lib/table/useVrcxVueTable';
import { showUserDialog } from '../../../coordinators/userCoordinator';
const { userImage, userImageFull } = useUserDisplay();
const { t } = useI18n();
const emit = defineEmits(['update:friendImportDialogInput']);

View File

@@ -147,7 +147,7 @@
import { useVirtualizer } from '@tanstack/vue-virtual';
import { Popover, PopoverContent, PopoverTrigger } from '../../components/ui/popover';
import { useAppearanceSettingsStore, useFavoriteStore, useFriendStore } from '../../stores';
import { useAppearanceSettingsStore, useFavoriteStore, useFriendStore, useLocationStore } from '../../stores';
import { Slider } from '../../components/ui/slider';
import { Switch } from '../../components/ui/switch';
import { getFriendsLocations } from '../../shared/utils/location.js';
@@ -175,6 +175,9 @@
const favoriteStore = useFavoriteStore();
const { favoriteFriendGroups, groupedByGroupKeyFavoriteFriends, localFriendFavorites } = storeToRefs(favoriteStore);
const locationStore = useLocationStore();
const { lastLocation } = storeToRefs(locationStore);
const collapsedGroups = reactive(new Set());
const SEGMENTED_BASE_OPTIONS = [
@@ -319,7 +322,7 @@
.map((group, index) => {
if (!Array.isArray(group) || group.length === 0) return null;
const friends = group;
const instanceId = getFriendsLocations(friends) || `instance-${index + 1}`;
const instanceId = getFriendsLocations(friends, lastLocation.value) || `instance-${index + 1}`;
return {
instanceId: String(instanceId),
friends

View File

@@ -75,13 +75,14 @@
import { toast } from 'vue-sonner';
import { useI18n } from 'vue-i18n';
import { isRealInstance, parseLocation, userImage, userStatusClass } from '../../../shared/utils';
import { isRealInstance, parseLocation } from '../../../shared/utils';
import { useGameStore, useLaunchStore, useLocationStore, useUserStore } from '../../../stores';
import { instanceRequest, notificationRequest, queryRequest } from '../../../api';
import { checkCanInvite, checkCanInviteSelf } from '../../../shared/utils/invite.js';
import { useInviteChecks } from '../../../composables/useInviteChecks';
import { useUserDisplay } from '../../../composables/useUserDisplay';
import Location from '../../../components/Location.vue';
import { showUserDialog } from '../../../coordinators/userCoordinator';
import { showUserDialog } from '../../../coordinators/userCoordinator';
const { t } = useI18n();
const { showSendBoopDialog } = useUserStore();
@@ -89,6 +90,8 @@ import { showUserDialog } from '../../../coordinators/userCoordinator';
const { lastLocation, lastLocationDestination } = storeToRefs(useLocationStore());
const { isGameRunning } = storeToRefs(useGameStore());
const { currentUser } = storeToRefs(useUserStore());
const { checkCanInvite, checkCanInviteSelf } = useInviteChecks();
const { userImage, userStatusClass } = useUserDisplay();
const props = defineProps({
friend: {

View File

@@ -179,11 +179,13 @@
import { useAppearanceSettingsStore, useAuthStore, useVRCXUpdaterStore } from '../../stores';
import { getLanguageName, languageCodes } from '../../localization';
import { openExternalLink, userImage } from '../../shared/utils';
import { openExternalLink } from '../../shared/utils';
import { useUserDisplay } from '../../composables/useUserDisplay';
import { watchState } from '../../services/watchState';
import LoginSettingsDialog from './Dialog/LoginSettingsDialog.vue';
const { userImage } = useUserDisplay();
const { showVRCXUpdateDialog } = useVRCXUpdaterStore();
const router = useRouter();
const route = useRoute();

View File

@@ -27,10 +27,12 @@ import {
} from 'lucide-vue-next';
import { storeToRefs } from 'pinia';
import { checkCanInvite, formatDateFilter } from '../../shared/utils';
import { formatDateFilter } from '../../shared/utils';
import { checkCanInvite } from '../../shared/utils/invite';
import { i18n } from '../../plugins';
import {
useGameStore,
useInstanceStore,
useLocationStore,
useUiStore,
useUserStore,
@@ -70,10 +72,16 @@ export const createColumns = ({
const { isGameRunning } = storeToRefs(useGameStore());
const { isNotificationExpired } = useNotificationStore();
const { cachedInstances } = storeToRefs(useInstanceStore());
const canInvite = () => {
const location = lastLocation.value?.location;
return (
Boolean(location) && isGameRunning.value && checkCanInvite(location)
Boolean(location) && isGameRunning.value && checkCanInvite(location, {
currentUserId: currentUser.value?.id,
lastLocationStr: lastLocation.value?.location,
cachedInstances: cachedInstances.value
})
);
};

View File

@@ -77,7 +77,7 @@
import Timer from '@/components/Timer.vue';
import { useAppearanceSettingsStore, useFriendStore, useUserStore } from '../../../stores';
import { userImage, userStatusClass } from '../../../shared/utils';
import { useUserDisplay } from '../../../composables/useUserDisplay';
import '@/styles/status-icon.css';
import { showUserDialog } from '../../../coordinators/userCoordinator';
@@ -90,6 +90,7 @@ import { confirmDeleteFriend } from '../../../coordinators/friendRelationshipCoo
const { hideNicknames } = storeToRefs(useAppearanceSettingsStore());
const { isRefreshFriendsLoading, allFavoriteFriendIds } = storeToRefs(useFriendStore());
const { userImage, userStatusClass } = useUserDisplay();
const { t } = useI18n();

View File

@@ -204,9 +204,10 @@
useUserStore
} from '../../../stores';
import { buildFriendRow, buildInstanceHeaderRow, buildToggleRow, estimateRowSize } from '../friendsSidebarUtils';
import { getFriendsSortFunction, isRealInstance, userImage, userStatusClass } from '../../../shared/utils';
import { getFriendsSortFunction, isRealInstance } from '../../../shared/utils';
import { instanceRequest, notificationRequest, queryRequest, userRequest } from '../../../api';
import { checkCanInvite, checkCanInviteSelf } from '../../../shared/utils/invite.js';
import { useInviteChecks } from '../../../composables/useInviteChecks';
import { useUserDisplay } from '../../../composables/useUserDisplay';
import { getFriendsLocations } from '../../../shared/utils/location.js';
import { parseLocation } from '../../../shared/utils';
@@ -246,6 +247,8 @@ import { showUserDialog } from '../../../coordinators/userCoordinator';
const { lastLocation, lastLocationDestination } = storeToRefs(useLocationStore());
const { isGameRunning } = storeToRefs(useGameStore());
const { currentUser } = storeToRefs(useUserStore());
const { checkCanInvite, checkCanInviteSelf } = useInviteChecks();
const { userImage, userStatusClass } = useUserDisplay();
const isFriendsGroupMe = ref(true);
const isVIPFriends = ref(true);
@@ -476,7 +479,7 @@ import { showUserDialog } from '../../../coordinators/userCoordinator';
if (!friendArr || !friendArr.length) return;
const groupKey = friendArr?.[0]?.ref?.$location?.tag ?? `group-${groupIndex}`;
rows.push(
buildInstanceHeaderRow(getFriendsLocations(friendArr), friendArr.length, `instance:${groupKey}`)
buildInstanceHeaderRow(getFriendsLocations(friendArr, lastLocation.value), friendArr.length, `instance:${groupKey}`)
);
friendArr.forEach((friend, idx) => {
rows.push(

View File

@@ -95,7 +95,8 @@
ContextMenuTrigger
} from '../../../components/ui/context-menu';
import { buildGroupHeaderRow, buildGroupItemRow, estimateGroupRowSize, getGroupId } from '../groupsSidebarUtils';
import { checkCanInviteSelf, convertFileUrlToImageUrl, parseLocation } from '../../../shared/utils';
import { convertFileUrlToImageUrl, parseLocation } from '../../../shared/utils';
import { useInviteChecks } from '../../../composables/useInviteChecks';
import { useAppearanceSettingsStore, useGroupStore, useLaunchStore } from '../../../stores';
import { instanceRequest } from '../../../api';
@@ -108,6 +109,7 @@
const { isAgeGatedInstancesVisible } = storeToRefs(useAppearanceSettingsStore());
const { showGroupDialog, sortGroupInstancesByInGame } = useGroupStore();
const { groupInstances } = storeToRefs(useGroupStore());
const { checkCanInviteSelf } = useInviteChecks();
const groupInstancesCfg = ref({});
const scrollViewportRef = ref(null);

View File

@@ -257,7 +257,8 @@
import { useGameStore, useGroupStore, useLocationStore, useNotificationStore, useUserStore } from '../../../stores';
import { showGroupDialog } from '../../../coordinators/groupCoordinator';
import { showUserDialog } from '../../../coordinators/userCoordinator';
import { checkCanInvite, userImage } from '../../../shared/utils';
import { useInviteChecks } from '../../../composables/useInviteChecks';
import { useUserDisplay } from '../../../composables/useUserDisplay';
import Location from '../../../components/Location.vue';
@@ -275,6 +276,8 @@
const { lastLocation } = storeToRefs(useLocationStore());
const { isGameRunning } = storeToRefs(useGameStore());
const { openNotificationLink, isNotificationExpired } = useNotificationStore();
const { checkCanInvite } = useInviteChecks();
const { userImage } = useUserDisplay();
const senderName = computed(() => {
const n = props.notification;

View File

@@ -59,7 +59,8 @@
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
import { removeFromArray, userImage, userImageFull } from '../../../shared/utils';
import { removeFromArray } from '../../../shared/utils';
import { useUserDisplay } from '../../../composables/useUserDisplay';
import { useFriendStore, useGalleryStore, useUserStore } from '../../../stores';
import { createColumns } from './noteExportColumns.jsx';
import { miscRequest } from '../../../api';
@@ -68,6 +69,7 @@
import * as workerTimers from 'worker-timers';
import { showUserDialog } from '../../../coordinators/userCoordinator';
const { userImage, userImageFull } = useUserDisplay();
const { t } = useI18n();
const { friends } = storeToRefs(useFriendStore());