mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-12 11:23:52 +02:00
remove useVirtualizerAnchor
This commit is contained in:
@@ -1,62 +0,0 @@
|
||||
import { nextTick } from 'vue';
|
||||
|
||||
export function useVirtualizerAnchor({
|
||||
virtualizer,
|
||||
virtualRows,
|
||||
scrollViewportRef
|
||||
}) {
|
||||
const captureScrollAnchor = () => {
|
||||
const viewport = scrollViewportRef.value;
|
||||
const items = virtualizer.value?.getVirtualItems?.() ?? [];
|
||||
if (!viewport || !items.length) {
|
||||
return null;
|
||||
}
|
||||
const firstItem = items[0];
|
||||
const row = virtualRows.value[firstItem.index];
|
||||
const key = row?.key ?? firstItem.key;
|
||||
if (typeof key === 'undefined') {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
key,
|
||||
offset: viewport.scrollTop - firstItem.start
|
||||
};
|
||||
};
|
||||
|
||||
const restoreScrollAnchor = (anchor) => {
|
||||
if (!anchor) {
|
||||
return;
|
||||
}
|
||||
const index = virtualRows.value.findIndex(
|
||||
(row) => row?.key === anchor.key
|
||||
);
|
||||
if (index === -1) {
|
||||
return;
|
||||
}
|
||||
const offsetInfo = virtualizer.value?.getOffsetForIndex?.(
|
||||
index,
|
||||
'start'
|
||||
);
|
||||
const targetStart = Array.isArray(offsetInfo) ? offsetInfo[0] : null;
|
||||
if (typeof targetStart !== 'number') {
|
||||
return;
|
||||
}
|
||||
virtualizer.value?.scrollToOffset?.(targetStart + anchor.offset);
|
||||
};
|
||||
|
||||
const measureWithAnchor = (measureFn) => {
|
||||
const anchor = captureScrollAnchor();
|
||||
nextTick(() => {
|
||||
if (measureFn) {
|
||||
measureFn();
|
||||
}
|
||||
restoreScrollAnchor(anchor);
|
||||
});
|
||||
};
|
||||
|
||||
return {
|
||||
captureScrollAnchor,
|
||||
restoreScrollAnchor,
|
||||
measureWithAnchor
|
||||
};
|
||||
}
|
||||
@@ -98,7 +98,6 @@
|
||||
} from '../../../stores';
|
||||
import { isRealInstance, userImage, userStatusClass } from '../../../shared/utils';
|
||||
import { getFriendsLocations } from '../../../shared/utils/location.js';
|
||||
import { useVirtualizerAnchor } from '../../../composables/useVirtualizerAnchor';
|
||||
|
||||
import FriendItem from './FriendItem.vue';
|
||||
import Location from '../../../components/Location.vue';
|
||||
@@ -421,12 +420,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
const { measureWithAnchor } = useVirtualizerAnchor({
|
||||
virtualizer,
|
||||
virtualRows,
|
||||
scrollViewportRef
|
||||
});
|
||||
|
||||
function saveFriendsGroupStates() {
|
||||
configRepository.setBool('VRCX_isFriendsGroupMe', isFriendsGroupMe.value);
|
||||
configRepository.setBool('VRCX_isFriendsGroupFavorites', isVIPFriends.value);
|
||||
@@ -485,7 +478,7 @@
|
||||
});
|
||||
|
||||
watch(virtualRows, () => {
|
||||
measureWithAnchor(() => {
|
||||
nextTick(() => {
|
||||
virtualizer.value?.measure?.();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -56,7 +56,6 @@
|
||||
|
||||
import { useAppearanceSettingsStore, useGroupStore } from '../../../stores';
|
||||
import { convertFileUrlToImageUrl } from '../../../shared/utils';
|
||||
import { useVirtualizerAnchor } from '../../../composables/useVirtualizerAnchor';
|
||||
|
||||
import Location from '../../../components/Location.vue';
|
||||
|
||||
@@ -162,11 +161,6 @@
|
||||
transform: `translateY(${item.virtualItem.start}px)`
|
||||
});
|
||||
|
||||
const { measureWithAnchor } = useVirtualizerAnchor({
|
||||
virtualizer,
|
||||
virtualRows,
|
||||
scrollViewportRef
|
||||
});
|
||||
|
||||
function getSmallGroupIconUrl(url) {
|
||||
return convertFileUrlToImageUrl(url);
|
||||
@@ -188,7 +182,7 @@
|
||||
});
|
||||
|
||||
watch(virtualRows, () => {
|
||||
measureWithAnchor(() => {
|
||||
nextTick(() => {
|
||||
virtualizer.value?.measure?.();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user