diff --git a/packages/web-app-files/src/components/SideBar/Details/FileDetails.vue b/packages/web-app-files/src/components/SideBar/Details/FileDetails.vue index e7cce6ad97..ee0f157d75 100644 --- a/packages/web-app-files/src/components/SideBar/Details/FileDetails.vue +++ b/packages/web-app-files/src/components/SideBar/Details/FileDetails.vue @@ -27,7 +27,11 @@

+

+ +
@@ -179,6 +183,7 @@ const { user } = storeToRefs(userStore) const resource = inject>('resource') const versions = inject>('versions') +const versionsLoading = inject>('versionsLoading') const space = inject>('space') const preview = ref(undefined) @@ -187,6 +192,7 @@ const authStore = useAuthStore() const { publicLinkContextReady } = storeToRefs(authStore) const isPreviewLoading = computed(() => previewEnabled && unref(previewsLoading)) +const detailsLoading = computed(() => unref(versionsLoading)) const sharedAncestor = computed(() => { return Object.values(unref(ancestorMetaData)).find( diff --git a/packages/web-pkg/src/components/SideBar/FileSideBar.vue b/packages/web-pkg/src/components/SideBar/FileSideBar.vue index da5c01fafc..bfaef34f2e 100644 --- a/packages/web-pkg/src/components/SideBar/FileSideBar.vue +++ b/packages/web-pkg/src/components/SideBar/FileSideBar.vue @@ -111,10 +111,10 @@ export default defineComponent({ const { selectedResources } = useSelectedResources() - const isMetaDataLoading = ref(false) + const sharesLoading = ref(false) const isLoading = computed(() => { - return unref(isMetaDataLoading) || loadVersionsTask.isRunning + return unref(sharesLoading) }) const panelContext = computed>(() => { @@ -329,9 +329,10 @@ export default defineComponent({ sharesStore.setLoading(false) }).restartable() + const currentResourceMtime = ref() // used to check if we need to load new versions watch( () => [...unref(panelContext).items, props.isOpen], - async () => { + async (newValue, oldValue) => { if (unref(panelContext).items?.length !== 1) { return } @@ -341,7 +342,15 @@ export default defineComponent({ return } + const res1 = newValue?.[0] as Resource + const res2 = oldValue?.[0] as Resource + if (res1?.id === res2?.id && res1?.mdate === unref(currentResourceMtime)) { + // don't load versions if the content of the resource didn't change + return + } + const resource = unref(panelContext).items[0] + currentResourceMtime.value = resource.mdate if (loadVersionsTask.isRunning) { loadVersionsTask.cancelAll() @@ -376,7 +385,7 @@ export default defineComponent({ } const resource = unref(panelContext).items[0] - isMetaDataLoading.value = true + sharesLoading.value = true if (isProjectSpaceResource(resource)) { await spacesStore.loadGraphPermissions({ @@ -399,7 +408,7 @@ export default defineComponent({ if (!unref(isShareLocation)) { loadedResource.value = resource - isMetaDataLoading.value = false + sharesLoading.value = false return } @@ -420,7 +429,7 @@ export default defineComponent({ loadedResource.value = resource console.error(error) } - isMetaDataLoading.value = false + sharesLoading.value = false }, { deep: true, @@ -440,6 +449,10 @@ export default defineComponent({ ) provide('availableInternalShareRoles', readonly(availableInternalShareRoles)) provide('availableExternalShareRoles', readonly(availableExternalShareRoles)) + provide( + 'versionsLoading', + computed(() => loadVersionsTask.isRunning) + ) return { loadedResource,