注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91/* * Copyright 2025 Palantir Technologies, Inc. すべての権利を留保します。 * * Apache License バージョン 2.0(以下「ライセンス」)に基づいてライセンスされます。 * ライセンスに準拠する場合を除き、このファイルを使用することはできません。 * ライセンスの写しは、次の URL から取得できます。 * * http://www.apache.org/licenses/LICENSE-2.0 * * 適用法で義務付けられる場合、または書面で合意された場合を除き、 * ライセンスに基づいて配布されるソフトウェアは「現状有姿」で配布され、 * 明示または黙示を問わず、いかなる種類の保証または条件も伴いません。 * ライセンスに基づく許可および制限を定める具体的な条項については、 * ライセンスを参照してください。 */ import useSWR, { mutate, useSWRConfig } from "swr"; import type { State } from "swr"; import { useOsdkClient } from "@osdk/react"; import { getCurrent, profilePicture, getBatch } from "@osdk/foundry.admin/User"; import { useCallback } from "react"; import type { User } from "@osdk/foundry.admin"; interface UserDetails { [key: string]: User; } function useAdmin() { const client = useOsdkClient(); const { cache } = useSWRConfig(); const getCurrentUserDetails = useCallback( async () => { const user: User = await getCurrent(client); return { "currentUser": user }; }, [client] ); const getCurrentProfilePictureUrl: (user: User) => Promise<string> = useCallback( async (user) => { const profilePictureResponse = await profilePicture(client, user.id); const blob = await profilePictureResponse.blob(); return URL.createObjectURL(blob); }, [client] ); const { data, isLoading, isValidating, error } = useSWR<UserDetails>( "currentUser", getCurrentUserDetails, { revalidateOnFocus: false } ); const getBatchUserDetails: (userIds: string[]) => Promise<UserDetails> = useCallback(async (userIds) => { const cachedUsers: UserDetails = {}; const usersToFetch: string[] = []; userIds.forEach((userId) => { const cachedUser: State<unknown, unknown> | undefined = cache.get(`user-${userId}`); if (cachedUser && cachedUser.data) { cachedUsers[userId] = cachedUser.data as User; } else { usersToFetch.push(userId); } }); if (usersToFetch.length > 0) { const usersRequest = await getBatch(client, usersToFetch.map((userId) => ({ userId }))); Object.entries(usersRequest.data).forEach(([userId, user]) => { cachedUsers[userId] = user; mutate(`user-${userId}`, user, { revalidate: false }); }); } return cachedUsers; }, [cache, client] ); return { users: data, currentUser: data != null ? data["currentUser"] : undefined, isLoading, isValidating, isError: error, getBatchUserDetails, getCurrentProfilePictureUrl }; } export default useAdmin;