File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import type { UnwrapRef } from "vue" ;
2+
13/**
24 * Returns the current authenticated user, or `undefined` if the user is not
35 * authenticated.
810export default async function useMe ( ) : Promise <
911 Readonly < Ref < User | undefined > >
1012> {
11- const me = useState < User | undefined > ( "me" ) ;
13+ const me = useRawMe ( ) ;
1214
13- if ( me . value ) {
14- // `setMe` has already set the value elsewhere, so no need to fetch it.
15- return me ;
16- }
15+ // Only fetch the user if it wasn't already set by `setMe` elsewhere.
16+ if ( me . value === "unknown" ) {
17+ await callOnce ( async ( ) => {
18+ const { data } = await useApi < User > ( "/users/$me" , {
19+ shouldIgnoreResponseError : ( error ) =>
20+ getApiErrorCode ( error ) === "RESOURCE_NOT_FOUND" ,
21+ } ) ;
1722
18- await callOnce ( async ( ) => {
19- const { data } = await useApi < User > ( "/users/$me" , {
20- shouldIgnoreResponseError : ( error ) =>
21- getApiErrorCode ( error ) === "RESOURCE_NOT_FOUND" ,
23+ me . value = data . value ?? undefined ;
2224 } ) ;
25+ }
2326
24- me . value = data . value ?? undefined ;
25- } ) ;
26-
27- return me ;
27+ // We assert the user can't be unknown at this point, and it should never be
28+ // unknown again.
29+ return me as Ref < Exclude < UnwrapRef < typeof me > , "unknown" > > ;
2830}
Original file line number Diff line number Diff line change 1+ /**
2+ * Returns the raw value of the state returned by `useMe` without sending an
3+ * HTTP request.
4+ */
5+ export default function useRawMe ( ) {
6+ return useState < User | undefined | "unknown" > ( ( ) => "unknown" as const ) ;
7+ }
Original file line number Diff line number Diff line change 44 * This avoids the HTTP request required by `useMe`.
55 */
66export default function setMe ( user : User | undefined ) {
7- const me = useState < User | undefined > ( "me" ) ;
8-
7+ const me = useRawMe ( ) ;
98 me . value = user ;
109}
You can’t perform that action at this time.
0 commit comments