fix(core): fix ui flashing (#7056)

This commit is contained in:
EYHN
2024-05-27 08:05:20 +00:00
parent 306cf2ae6f
commit b356ddbe6e
33 changed files with 545 additions and 404 deletions
@@ -1,39 +0,0 @@
import type { WorkspaceMetadata } from '@toeverything/infra';
import { useService, WorkspacesService } from '@toeverything/infra';
import { useEffect, useState } from 'react';
export function useWorkspaceBlobObjectUrl(
meta?: WorkspaceMetadata,
blobKey?: string | null
) {
const workspacesService = useService(WorkspacesService);
const [blob, setBlob] = useState<string | undefined>(undefined);
useEffect(() => {
setBlob(undefined);
if (!blobKey || !meta) {
return;
}
let canceled = false;
let objectUrl: string = '';
workspacesService
.getWorkspaceBlob(meta, blobKey)
.then(blob => {
if (blob && !canceled) {
objectUrl = URL.createObjectURL(blob);
setBlob(objectUrl);
}
})
.catch(err => {
console.error('get workspace blob error: ' + err);
});
return () => {
canceled = true;
URL.revokeObjectURL(objectUrl);
};
}, [meta, blobKey, workspacesService]);
return blob;
}
@@ -4,24 +4,16 @@ import {
useService,
WorkspacesService,
} from '@toeverything/infra';
import { useEffect, useState } from 'react';
import { useWorkspaceBlobObjectUrl } from './use-workspace-blob';
import { useEffect } from 'react';
export function useWorkspaceInfo(meta: WorkspaceMetadata) {
const workspacesService = useService(WorkspacesService);
const [profile, setProfile] = useState(() =>
workspacesService.getProfile(meta)
);
const profile = workspacesService.getProfile(meta);
useEffect(() => {
const profile = workspacesService.getProfile(meta);
profile.revalidate();
setProfile(profile);
}, [meta, workspacesService]);
}, [meta, profile]);
return useLiveData(profile.profile$);
}
@@ -31,10 +23,3 @@ export function useWorkspaceName(meta: WorkspaceMetadata) {
return information?.name;
}
export function useWorkspaceAvatar(meta: WorkspaceMetadata) {
const information = useWorkspaceInfo(meta);
const avatar = useWorkspaceBlobObjectUrl(meta, information?.avatar);
return avatar;
}