mirror of
https://github.com/AppFlowy-IO/AppFlowy-Web.git
synced 2026-03-13 10:00:26 +08:00
chore: modified mention persion attribute name (#28)
This commit is contained in:
@@ -1196,7 +1196,7 @@ export interface MentionablePerson {
|
||||
|
||||
name: string;
|
||||
role: number;
|
||||
uuid: string;
|
||||
person_id: string;
|
||||
invited: boolean;
|
||||
last_mentioned_at: string | null;
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ import { AppOverlayProvider } from '@/components/app/app-overlay/AppOverlayProvi
|
||||
import RequestAccess from '@/components/app/landing-pages/RequestAccess';
|
||||
import { AFConfigContext, useService } from '@/components/main/app.hooks';
|
||||
import { findAncestors, findView, findViewByLayout } from '@/components/_shared/outline/utils';
|
||||
import { createDeduplicatedNoArgsRequest } from '@/utils/deduplicateRequest';
|
||||
|
||||
const ViewModal = React.lazy(() => import('@/components/app/ViewModal'));
|
||||
|
||||
@@ -1052,7 +1053,9 @@ export const AppProvider = ({ children }: { children: React.ReactNode }) => {
|
||||
);
|
||||
|
||||
const mentionableUsersRef = useRef<MentionablePerson[]>([]);
|
||||
const loadMentionableUsers = useCallback(async () => {
|
||||
|
||||
// 原始的请求函数
|
||||
const _loadMentionableUsers = useCallback(async () => {
|
||||
if (!currentWorkspaceId || !service) {
|
||||
throw new Error('No workspace or service found');
|
||||
}
|
||||
@@ -1068,15 +1071,19 @@ export const AppProvider = ({ children }: { children: React.ReactNode }) => {
|
||||
}
|
||||
}, [currentWorkspaceId, service]);
|
||||
|
||||
const loadMentionableUsers = useMemo(
|
||||
() => createDeduplicatedNoArgsRequest(_loadMentionableUsers),
|
||||
[_loadMentionableUsers]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
void loadMentionableUsers();
|
||||
}, [loadMentionableUsers]);
|
||||
|
||||
const getMentionUser = useCallback(
|
||||
async (uuid: string) => {
|
||||
console.log('mentionableUsers', mentionableUsersRef.current);
|
||||
if (mentionableUsersRef.current.length > 0) {
|
||||
const user = mentionableUsersRef.current.find((user) => user.uuid === uuid);
|
||||
const user = mentionableUsersRef.current.find((user) => user.person_id === uuid);
|
||||
|
||||
if (user) {
|
||||
return user;
|
||||
@@ -1086,7 +1093,7 @@ export const AppProvider = ({ children }: { children: React.ReactNode }) => {
|
||||
try {
|
||||
const res = await loadMentionableUsers();
|
||||
|
||||
return res.find((user) => user.uuid === uuid);
|
||||
return res.find((user: MentionablePerson) => user.person_id === uuid);
|
||||
} catch (e) {
|
||||
return Promise.reject(e);
|
||||
}
|
||||
|
||||
40
src/utils/deduplicateRequest.ts
Normal file
40
src/utils/deduplicateRequest.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export function createDeduplicatedRequest<T extends (...args: any[]) => Promise<any>>(
|
||||
requestFn: T,
|
||||
keyGenerator?: (...args: Parameters<T>) => string
|
||||
): T {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const pendingRequests = new Map<string, Promise<any>>();
|
||||
|
||||
return ((...args: Parameters<T>) => {
|
||||
const key = keyGenerator ? keyGenerator(...args) : JSON.stringify(args);
|
||||
|
||||
if (pendingRequests.has(key)) {
|
||||
return pendingRequests.get(key)!;
|
||||
}
|
||||
|
||||
const promise = requestFn(...args).finally(() => {
|
||||
pendingRequests.delete(key);
|
||||
});
|
||||
|
||||
pendingRequests.set(key, promise);
|
||||
|
||||
return promise;
|
||||
}) as T;
|
||||
}
|
||||
|
||||
export function createDeduplicatedNoArgsRequest<T>(requestFn: () => Promise<T>): () => Promise<T> {
|
||||
let pendingRequest: Promise<T> | null = null;
|
||||
|
||||
return () => {
|
||||
if (pendingRequest) {
|
||||
return pendingRequest;
|
||||
}
|
||||
|
||||
pendingRequest = requestFn().finally(() => {
|
||||
pendingRequest = null;
|
||||
});
|
||||
|
||||
return pendingRequest;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user