@liveblocks/react-ui
Version:
A set of React pre-built components for the Liveblocks products. Liveblocks is the all-in-one toolkit to build collaborative products like Figma, Notion, and more.
1 lines • 3.53 kB
Source Map (JSON)
{"version":3,"file":"use-user-or-group-info.cjs","sources":["../../src/utils/use-user-or-group-info.ts"],"sourcesContent":["import {\n assertNever,\n type AsyncResult,\n type AsyncSuccess,\n type BaseGroupInfo,\n type BaseUserMeta,\n} from \"@liveblocks/core\";\nimport { useGroupInfo, useUser } from \"@liveblocks/react\";\nimport {\n useGroupInfo as useGroupInfoSuspense,\n useUser as useUserSuspense,\n} from \"@liveblocks/react/suspense\";\n\nimport { useInitial } from \"./use-initial\";\n\ntype UserOrGroupInfoResult = AsyncResult<\n BaseUserMeta[\"info\"] | BaseGroupInfo,\n \"info\"\n>;\n\ntype UserOrGroupInfoSuccess = AsyncSuccess<\n BaseUserMeta[\"info\"] | BaseGroupInfo,\n \"info\"\n>;\n\nexport function useUserOrGroupInfo(\n kind: \"user\" | \"group\",\n id: string\n): UserOrGroupInfoResult {\n // Switching between user IDs and group IDs is not supported\n // to support the Rules of Hooks.\n const frozenKind = useInitial(kind);\n\n if (frozenKind === \"user\") {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { user, isLoading, error } = useUser(id);\n\n return {\n info: user,\n isLoading,\n error,\n } as UserOrGroupInfoResult;\n } else if (frozenKind === \"group\") {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { info, isLoading, error } = useGroupInfo(id);\n\n return {\n info,\n isLoading,\n error,\n } as UserOrGroupInfoResult;\n }\n\n return assertNever(frozenKind, \"Invalid kind\");\n}\n\nexport function useUserOrGroupInfoSuspense(\n kind: \"user\" | \"group\",\n id: string\n): UserOrGroupInfoSuccess {\n // Switching between user IDs and group IDs is not supported\n // to support the Rules of Hooks.\n const frozenKind = useInitial(kind);\n\n if (frozenKind === \"user\") {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { user, isLoading, error } = useUserSuspense(id);\n\n return {\n info: user,\n isLoading,\n error,\n };\n } else if (frozenKind === \"group\") {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { info, isLoading, error } = useGroupInfoSuspense(id);\n\n return {\n info,\n isLoading,\n error,\n };\n }\n\n return assertNever(frozenKind, \"Invalid kind\");\n}\n"],"names":["useInitial","useUser","useGroupInfo","assertNever","useUserSuspense","useGroupInfoSuspense"],"mappings":";;;;;;;AAyBgB,SAAA,kBAAA,CACd,MACA,EACuB,EAAA;AAGvB,EAAM,MAAA,UAAA,GAAaA,sBAAW,IAAI,CAAA,CAAA;AAElC,EAAA,IAAI,eAAe,MAAQ,EAAA;AAEzB,IAAA,MAAM,EAAE,IAAM,EAAA,SAAA,EAAW,KAAM,EAAA,GAAIC,cAAQ,EAAE,CAAA,CAAA;AAE7C,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,IAAA;AAAA,MACN,SAAA;AAAA,MACA,KAAA;AAAA,KACF,CAAA;AAAA,GACF,MAAA,IAAW,eAAe,OAAS,EAAA;AAEjC,IAAA,MAAM,EAAE,IAAM,EAAA,SAAA,EAAW,KAAM,EAAA,GAAIC,mBAAa,EAAE,CAAA,CAAA;AAElD,IAAO,OAAA;AAAA,MACL,IAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAO,OAAAC,gBAAA,CAAY,YAAY,cAAc,CAAA,CAAA;AAC/C,CAAA;AAEgB,SAAA,0BAAA,CACd,MACA,EACwB,EAAA;AAGxB,EAAM,MAAA,UAAA,GAAaH,sBAAW,IAAI,CAAA,CAAA;AAElC,EAAA,IAAI,eAAe,MAAQ,EAAA;AAEzB,IAAA,MAAM,EAAE,IAAM,EAAA,SAAA,EAAW,KAAM,EAAA,GAAII,iBAAgB,EAAE,CAAA,CAAA;AAErD,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,IAAA;AAAA,MACN,SAAA;AAAA,MACA,KAAA;AAAA,KACF,CAAA;AAAA,GACF,MAAA,IAAW,eAAe,OAAS,EAAA;AAEjC,IAAA,MAAM,EAAE,IAAM,EAAA,SAAA,EAAW,KAAM,EAAA,GAAIC,sBAAqB,EAAE,CAAA,CAAA;AAE1D,IAAO,OAAA;AAAA,MACL,IAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAO,OAAAF,gBAAA,CAAY,YAAY,cAAc,CAAA,CAAA;AAC/C;;;;;"}