This commit is contained in:
pa
2026-03-26 17:41:45 +09:00
parent 62a54922e7
commit c504c71191
8 changed files with 64 additions and 61 deletions
@@ -218,7 +218,8 @@ export function updateFriendship(ref) {
previousDisplayName: ctx.displayName, previousDisplayName: ctx.displayName,
friendNumber: ref.$friendNumber friendNumber: ref.$friendNumber
}; };
friendLogTable.value.data.push(friendLogHistoryDisplayName); // Sentry: VRCX-WEB-2A7
friendLogTable.value?.data.push(friendLogHistoryDisplayName);
database.addFriendLogHistory(friendLogHistoryDisplayName); database.addFriendLogHistory(friendLogHistoryDisplayName);
notificationStore.queueFriendLogNoty(friendLogHistoryDisplayName); notificationStore.queueFriendLogNoty(friendLogHistoryDisplayName);
sharedFeedStore.addEntry(friendLogHistoryDisplayName); sharedFeedStore.addEntry(friendLogHistoryDisplayName);
-1
View File
@@ -577,7 +577,6 @@ async function handleUserUpdate(ref, props) {
export async function refreshUserDialogAvatars(fileId) { export async function refreshUserDialogAvatars(fileId) {
const userStore = useUserStore(); const userStore = useUserStore();
const avatarStore = useAvatarStore(); const avatarStore = useAvatarStore();
const t = i18n.global.t;
const D = userStore.userDialog; const D = userStore.userDialog;
const userId = D.id; const userId = D.id;
+1 -1
View File
@@ -570,7 +570,7 @@
"context_menu": { "context_menu": {
"view_details": "View Details", "view_details": "View Details",
"hide_friend": "Hide from Graph", "hide_friend": "Hide from Graph",
"refresh_mutuals": "Refresh Their Mutuals", "refresh_mutuals": "Refresh Mutuals",
"confirm_non_friend_title": "Not a Friend", "confirm_non_friend_title": "Not a Friend",
"confirm_non_friend_message": "This user is no longer your friend. Do you still want to fetch their mutual friends data?", "confirm_non_friend_message": "This user is no longer your friend. Do you still want to fetch their mutual friends data?",
"refresh_success": "Mutual friends data updated for {name}", "refresh_success": "Mutual friends data updated for {name}",
@@ -945,6 +945,8 @@
if (!sigmaInstance) { if (!sigmaInstance) {
sigmaInstance = new Sigma(graph, container, { sigmaInstance = new Sigma(graph, container, {
// Sentry: VRCX-WEB-2EG
allowInvalidContainer: true,
renderLabels: true, renderLabels: true,
labelRenderedSizeThreshold: DEFAULT_LABEL_THRESHOLD, labelRenderedSizeThreshold: DEFAULT_LABEL_THRESHOLD,
labelColor: { color: labelColor }, labelColor: { color: labelColor },
@@ -1,51 +1,48 @@
<template> <template>
<UserContextMenu <UserContextMenu :user-id="friend.id" :state="friend.state" :location="friend.ref?.location">
:user-id="friend.id" <Card
:state="friend.state" class="friend-card x-hover-card hover:bg-muted relative"
:location="friend.ref?.location"> :style="cardStyle"
<Card @click="showUserDialog(friend.id)">
class="friend-card x-hover-card hover:bg-muted relative" <div class="friend-card__header grid items-center mb-1.75">
:style="cardStyle" <div>
@click="showUserDialog(friend.id)"> <Avatar :style="{ width: `${avatarSize}px`, height: `${avatarSize}px` }">
<div class="friend-card__header grid items-center mb-1.75"> <AvatarImage :src="userImage(friend.ref, true)" />
<div> <AvatarFallback>
<Avatar :style="{ width: `${avatarSize}px`, height: `${avatarSize}px` }"> <User class="text-muted-foreground" :size="Math.max(16, 20 * cardScale)" />
<AvatarImage :src="userImage(friend.ref, true)" /> </AvatarFallback>
<AvatarFallback> </Avatar>
<User class="text-muted-foreground" :size="Math.max(16, 20 * cardScale)" />
</AvatarFallback>
</Avatar>
</div>
<span
class="friend-card__status-dot absolute rounded-full pointer-events-none"
:class="statusDotClass"></span>
<div
class="friend-card__name font-semibold leading-[1.3] overflow-hidden text-ellipsis whitespace-nowrap ml-2"
:title="friend.name">
{{ friend.name }}
</div>
</div> </div>
<div class="friend-card__body grid"> <span
<div class="friend-card__status-dot absolute rounded-full pointer-events-none"
class="friend-card__signature flex items-center overflow-hidden text-ellipsis whitespace-nowrap text-muted-foreground" :class="statusDotClass"></span>
:title="friend.ref?.statusDescription"> <div
<Pencil v-if="friend.ref?.statusDescription" class="h-3.5 w-3.5 mr-0.5" style="opacity: 0.7" /> class="friend-card__name font-semibold leading-[1.3] overflow-hidden text-ellipsis whitespace-nowrap ml-2"
{{ friend.ref?.statusDescription || '&nbsp;' }} :title="friend.name">
</div> {{ friend.name }}
<div
v-if="displayInstanceInfo"
@click.stop
class="friend-card__world flex items-center justify-start box-border max-w-full min-w-0 overflow-hidden"
:title="friend.worldName">
<Location
class="friend-card__location flex w-full overflow-hidden leading-[1.3] wrap-break-word text-center"
:location="friend.ref?.location"
:traveling="friend.ref?.travelingToLocation"
enable-context-menu
link />
</div>
</div> </div>
</Card> </div>
<div class="friend-card__body grid">
<div
class="friend-card__signature flex items-center overflow-hidden text-ellipsis whitespace-nowrap text-muted-foreground"
:title="friend.ref?.statusDescription">
<Pencil v-if="friend.ref?.statusDescription" class="h-3.5 w-3.5 mr-0.5" style="opacity: 0.7" />
{{ friend.ref?.statusDescription || '&nbsp;' }}
</div>
<div
v-if="displayInstanceInfo"
@click.stop
class="friend-card__world flex items-center justify-start box-border max-w-full min-w-0 overflow-hidden"
:title="friend.worldName">
<Location
class="friend-card__location flex w-full overflow-hidden leading-[1.3] wrap-break-word text-center"
:location="friend.ref?.location"
:traveling="friend.ref?.travelingToLocation"
enable-context-menu
link />
</div>
</div>
</Card>
</UserContextMenu> </UserContextMenu>
</template> </template>
@@ -92,18 +89,17 @@
paddingBottom: `${36 * props.cardScale * props.cardSpacing}px !important` paddingBottom: `${36 * props.cardScale * props.cardSpacing}px !important`
})); }));
const statusDotClass = computed(() => { const statusDotClass = computed(() => {
const status = userStatusClass(props.friend.ref, props.friend.pendingOffline); const status = userStatusClass(props.friend.ref, props.friend.pendingOffline);
if (status.joinme) { if (status?.joinme) {
return 'friend-card__status-dot--join'; return 'friend-card__status-dot--join';
} }
if (status.online) { if (status?.online) {
return 'friend-card__status-dot--online'; return 'friend-card__status-dot--online';
} }
// sometimes appearing and sometimes disappearing // sometimes appearing and sometimes disappearing
if (status.active) { if (status?.active) {
const friendStatus = props.friend.status; const friendStatus = props.friend.status;
if (friendStatus === 'join me') { if (friendStatus === 'join me') {
return 'friend-card__status-dot--active-join'; return 'friend-card__status-dot--active-join';
@@ -116,13 +112,13 @@
} }
return 'friend-card__status-dot--active'; return 'friend-card__status-dot--active';
} }
if (status.askme) { if (status?.askme) {
return 'friend-card__status-dot--ask'; return 'friend-card__status-dot--ask';
} }
if (status.busy) { if (status?.busy) {
return 'friend-card__status-dot--busy'; return 'friend-card__status-dot--busy';
} }
if (status.offline) { if (status?.offline) {
return 'friend-card__status-dot--offline'; return 'friend-card__status-dot--offline';
} }
+5 -3
View File
@@ -72,15 +72,17 @@ export const createColumns = ({
const { isGameRunning } = storeToRefs(useGameStore()); const { isGameRunning } = storeToRefs(useGameStore());
const { isNotificationExpired } = useNotificationStore(); const { isNotificationExpired } = useNotificationStore();
const { cachedInstances } = storeToRefs(useInstanceStore()); const { cachedInstances } = useInstanceStore();
const canInvite = () => { const canInvite = () => {
const location = lastLocation.value?.location; const location = lastLocation.value?.location;
return ( return (
Boolean(location) && isGameRunning.value && checkCanInvite(location, { Boolean(location) &&
isGameRunning.value &&
checkCanInvite(location, {
currentUserId: currentUser.value?.id, currentUserId: currentUser.value?.id,
lastLocationStr: lastLocation.value?.location, lastLocationStr: lastLocation.value?.location,
cachedInstances: cachedInstances.value cachedInstances: cachedInstances
}) })
); );
}; };
@@ -109,12 +109,13 @@
import { groupRequest } from '../../../api'; import { groupRequest } from '../../../api';
import { processBulk } from '../../../services/request'; import { processBulk } from '../../../services/request';
import { useGroupStore } from '../../../stores'; import { useGroupStore } from '../../../stores';
import { showGroupDialog } from '@/coordinators/groupCoordinator';
import GroupCalendarEventCard from '../components/GroupCalendarEventCard.vue'; import GroupCalendarEventCard from '../components/GroupCalendarEventCard.vue';
import GroupCalendarMonth from '../components/GroupCalendarMonth.vue'; import GroupCalendarMonth from '../components/GroupCalendarMonth.vue';
import configRepository from '../../../services/config'; import configRepository from '../../../services/config';
const { applyGroupEvent, showGroupDialog } = useGroupStore(); const { applyGroupEvent } = useGroupStore();
const { t } = useI18n(); const { t } = useI18n();
+4 -2
View File
@@ -126,7 +126,9 @@ export default defineConfig(({ mode }) => {
}, },
sourcemaps: { sourcemaps: {
assets: './build/html/**', assets: './build/html/**',
filesToDeleteAfterUpload: './build/html/**/*.js.map' filesToDeleteAfterUpload:
'./build/html/**/*.js.map',
ignore: []
} }
}) })
) )
@@ -179,7 +181,7 @@ export default defineConfig(({ mode }) => {
copyPublicDir: true, copyPublicDir: true,
reportCompressedSize: false, reportCompressedSize: false,
chunkSizeWarningLimit: 5000, chunkSizeWarningLimit: 5000,
sourcemap: buildAndUploadSourceMaps, sourcemap: buildAndUploadSourceMaps ? 'hidden' : false,
assetsInlineLimit(filePath) { assetsInlineLimit(filePath) {
if (isFont(filePath)) return 0; if (isFont(filePath)) return 0;
return 40960; return 40960;