@payloadcms/ui 3.0.0-beta.74 → 3.0.0-beta.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/elements/HydrateAuthProvider/index.d.ts +13 -0
  2. package/dist/elements/HydrateAuthProvider/index.d.ts.map +1 -0
  3. package/dist/elements/{HydrateClientUser → HydrateAuthProvider}/index.js +3 -6
  4. package/dist/elements/HydrateAuthProvider/index.js.map +1 -0
  5. package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
  6. package/dist/elements/WhereBuilder/Condition/index.js +8 -2
  7. package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
  8. package/dist/exports/client/index.d.ts +1 -1
  9. package/dist/exports/client/index.d.ts.map +1 -1
  10. package/dist/exports/client/index.js +7 -7
  11. package/dist/exports/client/index.js.map +4 -4
  12. package/dist/forms/useField/types.d.ts +1 -1
  13. package/dist/forms/useField/types.js.map +1 -1
  14. package/dist/providers/Auth/index.d.ts +6 -2
  15. package/dist/providers/Auth/index.d.ts.map +1 -1
  16. package/dist/providers/Auth/index.js +4 -4
  17. package/dist/providers/Auth/index.js.map +1 -1
  18. package/dist/providers/Params/index.d.ts +2 -1
  19. package/dist/providers/Params/index.d.ts.map +1 -1
  20. package/dist/providers/Params/index.js.map +1 -1
  21. package/dist/providers/Root/index.d.ts +3 -1
  22. package/dist/providers/Root/index.d.ts.map +1 -1
  23. package/dist/providers/Root/index.js +3 -1
  24. package/dist/providers/Root/index.js.map +1 -1
  25. package/dist/utilities/buildFormState.d.ts.map +1 -1
  26. package/dist/utilities/buildFormState.js +17 -3
  27. package/dist/utilities/buildFormState.js.map +1 -1
  28. package/package.json +7 -7
  29. package/dist/elements/HydrateClientUser/index.d.ts +0 -6
  30. package/dist/elements/HydrateClientUser/index.d.ts.map +0 -1
  31. package/dist/elements/HydrateClientUser/index.js.map +0 -1
@@ -3,7 +3,7 @@ export type Options = {
3
3
  disableFormData?: boolean;
4
4
  hasRows?: boolean;
5
5
  /**
6
- * If you do not provide a `path` or a `name`, this hook will look for one using the `useFieldPath` hook.
6
+ * If you do not provide a `path` or a `name`, this hook will look for one using the `useFieldProps` hook.
7
7
  **/
8
8
  path?: string;
9
9
  validate?: Validate;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/forms/useField/types.ts"],"sourcesContent":["import type { FieldPermissions, FilterOptionsResult, Row, Validate } from 'payload'\n\nexport type Options = {\n disableFormData?: boolean\n hasRows?: boolean\n /**\n * If you do not provide a `path` or a `name`, this hook will look for one using the `useFieldPath` hook.\n **/\n path?: string\n validate?: Validate\n}\n\nexport type FieldType<T> = {\n errorMessage?: string\n errorPaths?: string[]\n filterOptions?: FilterOptionsResult\n formInitializing: boolean\n formProcessing: boolean\n formSubmitted: boolean\n initialValue?: T\n path: string\n permissions: FieldPermissions\n readOnly?: boolean\n rows?: Row[]\n schemaPath: string\n setValue: (val: unknown, disableModifyingForm?: boolean) => void\n showError: boolean\n valid?: boolean\n value: T\n}\n"],"names":[],"mappings":"AAYA,WAiBC"}
1
+ {"version":3,"sources":["../../../src/forms/useField/types.ts"],"sourcesContent":["import type { FieldPermissions, FilterOptionsResult, Row, Validate } from 'payload'\n\nexport type Options = {\n disableFormData?: boolean\n hasRows?: boolean\n /**\n * If you do not provide a `path` or a `name`, this hook will look for one using the `useFieldProps` hook.\n **/\n path?: string\n validate?: Validate\n}\n\nexport type FieldType<T> = {\n errorMessage?: string\n errorPaths?: string[]\n filterOptions?: FilterOptionsResult\n formInitializing: boolean\n formProcessing: boolean\n formSubmitted: boolean\n initialValue?: T\n path: string\n permissions: FieldPermissions\n readOnly?: boolean\n rows?: Row[]\n schemaPath: string\n setValue: (val: unknown, disableModifyingForm?: boolean) => void\n showError: boolean\n valid?: boolean\n value: T\n}\n"],"names":[],"mappings":"AAYA,WAiBC"}
@@ -14,8 +14,12 @@ export type AuthContext<T = ClientUser> = {
14
14
  tokenExpiration?: number;
15
15
  user?: T | null;
16
16
  };
17
- export declare const AuthProvider: React.FC<{
17
+ type Props = {
18
18
  children: React.ReactNode;
19
- }>;
19
+ permissions?: Permissions;
20
+ user?: ClientUser | null;
21
+ };
22
+ export declare function AuthProvider({ children, permissions: initialPermissions, user: initialUser, }: Props): React.JSX.Element;
20
23
  export declare const useAuth: <T = ClientUser>() => AuthContext<T>;
24
+ export {};
21
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Auth/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAqB,WAAW,EAAE,MAAM,SAAS,CAAA;AAKzE,OAAO,KAAsE,MAAM,OAAO,CAAA;AAU1F,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,UAAU,IAAI;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,kBAAkB,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,cAAc,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAA;IAClD,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;CAChB,CAAA;AAMD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CA2RhE,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,oBAAmB,WAAW,CAAC,CAAC,CAA0C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Auth/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAqB,WAAW,EAAE,MAAM,SAAS,CAAA;AAKzE,OAAO,KAAsE,MAAM,OAAO,CAAA;AAU1F,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,UAAU,IAAI;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,kBAAkB,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,cAAc,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAA;IAClD,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;CAChB,CAAA;AAMD,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CACzB,CAAA;AACD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EAAE,kBAAkB,EAC/B,IAAI,EAAE,WAAW,GAClB,EAAE,KAAK,qBA2RP;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,oBAAmB,WAAW,CAAC,CAAC,CAA0C,CAAA"}
@@ -13,15 +13,15 @@ import { formatAdminURL } from '../../utilities/formatAdminURL.js';
13
13
  import { useConfig } from '../Config/index.js';
14
14
  const Context = /*#__PURE__*/ createContext({});
15
15
  const maxTimeoutTime = 2147483647;
16
- export const AuthProvider = ({ children })=>{
17
- const [user, setUser] = useState();
16
+ export function AuthProvider({ children, permissions: initialPermissions, user: initialUser }) {
17
+ const [user, setUser] = useState(initialUser);
18
18
  const [tokenInMemory, setTokenInMemory] = useState();
19
19
  const [tokenExpiration, setTokenExpiration] = useState();
20
20
  const pathname = usePathname();
21
21
  const router = useRouter();
22
22
  const config = useConfig();
23
23
  const { admin: { routes: { inactivity: logoutInactivityRoute }, user: userSlug }, routes: { admin: adminRoute, api: apiRoute }, serverURL } = config;
24
- const [permissions, setPermissions] = useState();
24
+ const [permissions, setPermissions] = useState(initialPermissions);
25
25
  const { i18n } = useTranslation();
26
26
  const { closeAllModals, openModal } = useModal();
27
27
  const [lastLocationChange, setLastLocationChange] = useState(0);
@@ -271,7 +271,7 @@ export const AuthProvider = ({ children })=>{
271
271
  },
272
272
  children: children
273
273
  });
274
- };
274
+ }
275
275
  export const useAuth = ()=>useContext(Context);
276
276
 
277
277
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/providers/Auth/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientUser, MeOperationResult, Permissions } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { usePathname, useRouter } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { createContext, useCallback, useContext, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { stayLoggedInModalSlug } from '../../elements/StayLoggedIn/index.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { useConfig } from '../Config/index.js'\n\nexport type AuthContext<T = ClientUser> = {\n fetchFullUser: () => Promise<void>\n logOut: () => Promise<void>\n permissions?: Permissions\n refreshCookie: (forceRefresh?: boolean) => void\n refreshCookieAsync: () => Promise<ClientUser>\n refreshPermissions: () => Promise<void>\n setPermissions: (permissions: Permissions) => void\n setUser: (user: T) => void\n strategy?: string\n token?: string\n tokenExpiration?: number\n user?: T | null\n}\n\nconst Context = createContext({} as AuthContext)\n\nconst maxTimeoutTime = 2147483647\n\nexport const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [user, setUser] = useState<ClientUser | null>()\n const [tokenInMemory, setTokenInMemory] = useState<string>()\n const [tokenExpiration, setTokenExpiration] = useState<number>()\n const pathname = usePathname()\n const router = useRouter()\n\n const config = useConfig()\n\n const {\n admin: {\n routes: { inactivity: logoutInactivityRoute },\n user: userSlug,\n },\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n } = config\n\n const [permissions, setPermissions] = useState<Permissions>()\n\n const { i18n } = useTranslation()\n const { closeAllModals, openModal } = useModal()\n const [lastLocationChange, setLastLocationChange] = useState(0)\n const debouncedLocationChange = useDebounce(lastLocationChange, 10000)\n\n const id = user?.id\n\n const redirectToInactivityRoute = useCallback(() => {\n if (window.location.pathname.startsWith(adminRoute)) {\n const redirectParam = `?redirect=${encodeURIComponent(window.location.pathname)}`\n router.replace(\n formatAdminURL({\n adminRoute,\n path: `${logoutInactivityRoute}${redirectParam}`,\n }),\n )\n } else {\n router.replace(\n formatAdminURL({\n adminRoute,\n path: logoutInactivityRoute,\n }),\n )\n }\n closeAllModals()\n }, [router, adminRoute, logoutInactivityRoute, closeAllModals])\n\n const revokeTokenAndExpire = useCallback(() => {\n setTokenInMemory(undefined)\n setTokenExpiration(undefined)\n }, [])\n\n const setTokenAndExpiration = useCallback(\n (json) => {\n const token = json?.token || json?.refreshedToken\n if (token && json?.exp) {\n setTokenInMemory(token)\n setTokenExpiration(json.exp)\n } else {\n revokeTokenAndExpire()\n }\n },\n [revokeTokenAndExpire],\n )\n\n const refreshCookie = useCallback(\n (forceRefresh?: boolean) => {\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = (typeof tokenExpiration === 'number' ? tokenExpiration : 0) - now\n\n if (forceRefresh || (tokenExpiration && remainingTime < 120)) {\n setTimeout(() => {\n async function refresh() {\n try {\n const request = await requests.post(\n `${serverURL}${apiRoute}/${userSlug}/refresh-token`,\n {\n headers: {\n 'Accept-Language': i18n.language,\n },\n },\n )\n\n if (request.status === 200) {\n const json = await request.json()\n setUser(json.user)\n\n setTokenAndExpiration(json)\n } else {\n setUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(e.message)\n }\n }\n\n void refresh()\n }, 1000)\n }\n },\n [\n tokenExpiration,\n serverURL,\n apiRoute,\n userSlug,\n i18n,\n redirectToInactivityRoute,\n setTokenAndExpiration,\n ],\n )\n\n const refreshCookieAsync = useCallback(\n async (skipSetUser?: boolean): Promise<ClientUser> => {\n try {\n const request = await requests.post(`${serverURL}${apiRoute}/${userSlug}/refresh-token`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json = await request.json()\n if (!skipSetUser) {\n setUser(json.user)\n setTokenAndExpiration(json)\n }\n return json.user\n }\n\n setUser(null)\n redirectToInactivityRoute()\n return null\n } catch (e) {\n toast.error(`Refreshing token failed: ${e.message}`)\n return null\n }\n },\n [serverURL, apiRoute, userSlug, i18n, redirectToInactivityRoute, setTokenAndExpiration],\n )\n\n const logOut = useCallback(async () => {\n setUser(null)\n revokeTokenAndExpire()\n try {\n await requests.post(`${serverURL}${apiRoute}/${userSlug}/logout`)\n } catch (e) {\n toast.error(`Logging out failed: ${e.message}`)\n }\n }, [serverURL, apiRoute, userSlug, revokeTokenAndExpire])\n\n const refreshPermissions = useCallback(\n async ({ locale }: { locale?: string } = {}) => {\n const params = qs.stringify(\n {\n locale,\n },\n {\n addQueryPrefix: true,\n },\n )\n\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/access${params}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: Permissions = await request.json()\n setPermissions(json)\n } else {\n throw new Error(`Fetching permissions failed with status code ${request.status}`)\n }\n } catch (e) {\n toast.error(`Refreshing permissions failed: ${e.message}`)\n }\n },\n [serverURL, apiRoute, i18n],\n )\n\n const fetchFullUser = React.useCallback(async () => {\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/${userSlug}/me`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: MeOperationResult = await request.json()\n\n if (json?.user) {\n setUser(json.user)\n\n if (json?.token) {\n setTokenAndExpiration(json)\n }\n } else {\n setUser(null)\n revokeTokenAndExpire()\n }\n }\n } catch (e) {\n toast.error(`Fetching user failed: ${e.message}`)\n }\n }, [serverURL, apiRoute, userSlug, i18n.language, setTokenAndExpiration, revokeTokenAndExpire])\n\n // On mount, get user and set\n useEffect(() => {\n void fetchFullUser()\n }, [fetchFullUser])\n\n // When location changes, refresh cookie\n useEffect(() => {\n if (id) {\n refreshCookie()\n }\n }, [debouncedLocationChange, refreshCookie, id])\n\n useEffect(() => {\n setLastLocationChange(Date.now())\n }, [pathname])\n\n useEffect(() => {\n let reminder: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n\n if (remainingTime > 0) {\n reminder = setTimeout(\n () => {\n openModal(stayLoggedInModalSlug)\n },\n Math.max(Math.min((remainingTime - 60) * 1000, maxTimeoutTime)),\n )\n }\n\n return () => {\n if (reminder) clearTimeout(reminder)\n }\n }, [tokenExpiration, openModal])\n\n useEffect(() => {\n let forceLogOut: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n\n if (remainingTime > 0) {\n forceLogOut = setTimeout(\n () => {\n setUser(null)\n revokeTokenAndExpire()\n redirectToInactivityRoute()\n },\n Math.max(Math.min(remainingTime * 1000, maxTimeoutTime), 0),\n )\n }\n\n return () => {\n if (forceLogOut) clearTimeout(forceLogOut)\n }\n }, [tokenExpiration, closeAllModals, i18n, redirectToInactivityRoute, revokeTokenAndExpire])\n\n return (\n <Context.Provider\n value={{\n fetchFullUser,\n logOut,\n permissions,\n refreshCookie,\n refreshCookieAsync,\n refreshPermissions,\n setPermissions,\n setUser,\n token: tokenInMemory,\n user,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\nexport const useAuth = <T = ClientUser,>(): AuthContext<T> => useContext(Context) as AuthContext<T>\n"],"names":["useModal","usePathname","useRouter","qs","React","createContext","useCallback","useContext","useEffect","useState","toast","stayLoggedInModalSlug","useDebounce","useTranslation","requests","formatAdminURL","useConfig","Context","maxTimeoutTime","AuthProvider","children","user","setUser","tokenInMemory","setTokenInMemory","tokenExpiration","setTokenExpiration","pathname","router","config","admin","routes","inactivity","logoutInactivityRoute","userSlug","adminRoute","api","apiRoute","serverURL","permissions","setPermissions","i18n","closeAllModals","openModal","lastLocationChange","setLastLocationChange","debouncedLocationChange","id","redirectToInactivityRoute","window","location","startsWith","redirectParam","encodeURIComponent","replace","path","revokeTokenAndExpire","undefined","setTokenAndExpiration","json","token","refreshedToken","exp","refreshCookie","forceRefresh","now","Math","round","Date","getTime","remainingTime","setTimeout","refresh","request","post","headers","language","status","e","error","message","refreshCookieAsync","skipSetUser","logOut","refreshPermissions","locale","params","stringify","addQueryPrefix","get","Error","fetchFullUser","reminder","max","min","clearTimeout","forceLogOut","Provider","value","useAuth"],"mappings":"AAAA;;AAGA,SAASA,QAAQ,QAAQ,qBAAoB;AAC7C,SAASC,WAAW,EAAEC,SAAS,QAAQ,qBAAoB;AAC3D,YAAYC,QAAQ,SAAQ;AAC5B,OAAOC,SAASC,aAAa,EAAEC,WAAW,EAAEC,UAAU,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAC1F,SAASC,KAAK,QAAQ,SAAQ;AAE9B,SAASC,qBAAqB,QAAQ,uCAAsC;AAC5E,SAASC,WAAW,QAAQ,6BAA4B;AACxD,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,QAAQ,QAAQ,yBAAwB;AACjD,SAASC,cAAc,QAAQ,oCAAmC;AAClE,SAASC,SAAS,QAAQ,qBAAoB;AAiB9C,MAAMC,wBAAUZ,cAAc,CAAC;AAE/B,MAAMa,iBAAiB;AAEvB,OAAO,MAAMC,eAAwD,CAAC,EAAEC,QAAQ,EAAE;IAChF,MAAM,CAACC,MAAMC,QAAQ,GAAGb;IACxB,MAAM,CAACc,eAAeC,iBAAiB,GAAGf;IAC1C,MAAM,CAACgB,iBAAiBC,mBAAmB,GAAGjB;IAC9C,MAAMkB,WAAW1B;IACjB,MAAM2B,SAAS1B;IAEf,MAAM2B,SAASb;IAEf,MAAM,EACJc,OAAO,EACLC,QAAQ,EAAEC,YAAYC,qBAAqB,EAAE,EAC7CZ,MAAMa,QAAQ,EACf,EACDH,QAAQ,EAAED,OAAOK,UAAU,EAAEC,KAAKC,QAAQ,EAAE,EAC5CC,SAAS,EACV,GAAGT;IAEJ,MAAM,CAACU,aAAaC,eAAe,GAAG/B;IAEtC,MAAM,EAAEgC,IAAI,EAAE,GAAG5B;IACjB,MAAM,EAAE6B,cAAc,EAAEC,SAAS,EAAE,GAAG3C;IACtC,MAAM,CAAC4C,oBAAoBC,sBAAsB,GAAGpC,SAAS;IAC7D,MAAMqC,0BAA0BlC,YAAYgC,oBAAoB;IAEhE,MAAMG,KAAK1B,MAAM0B;IAEjB,MAAMC,4BAA4B1C,YAAY;QAC5C,IAAI2C,OAAOC,QAAQ,CAACvB,QAAQ,CAACwB,UAAU,CAAChB,aAAa;YACnD,MAAMiB,gBAAgB,CAAC,UAAU,EAAEC,mBAAmBJ,OAAOC,QAAQ,CAACvB,QAAQ,EAAE,CAAC;YACjFC,OAAO0B,OAAO,CACZvC,eAAe;gBACboB;gBACAoB,MAAM,CAAC,EAAEtB,sBAAsB,EAAEmB,cAAc,CAAC;YAClD;QAEJ,OAAO;YACLxB,OAAO0B,OAAO,CACZvC,eAAe;gBACboB;gBACAoB,MAAMtB;YACR;QAEJ;QACAS;IACF,GAAG;QAACd;QAAQO;QAAYF;QAAuBS;KAAe;IAE9D,MAAMc,uBAAuBlD,YAAY;QACvCkB,iBAAiBiC;QACjB/B,mBAAmB+B;IACrB,GAAG,EAAE;IAEL,MAAMC,wBAAwBpD,YAC5B,CAACqD;QACC,MAAMC,QAAQD,MAAMC,SAASD,MAAME;QACnC,IAAID,SAASD,MAAMG,KAAK;YACtBtC,iBAAiBoC;YACjBlC,mBAAmBiC,KAAKG,GAAG;QAC7B,OAAO;YACLN;QACF;IACF,GACA;QAACA;KAAqB;IAGxB,MAAMO,gBAAgBzD,YACpB,CAAC0D;QACC,MAAMC,MAAMC,KAAKC,KAAK,CAAC,IAAIC,OAAOC,OAAO,KAAK;QAC9C,MAAMC,gBAAgB,AAAC,CAAA,OAAO7C,oBAAoB,WAAWA,kBAAkB,CAAA,IAAKwC;QAEpF,IAAID,gBAAiBvC,mBAAmB6C,gBAAgB,KAAM;YAC5DC,WAAW;gBACT,eAAeC;oBACb,IAAI;wBACF,MAAMC,UAAU,MAAM3D,SAAS4D,IAAI,CACjC,CAAC,EAAEpC,UAAU,EAAED,SAAS,CAAC,EAAEH,SAAS,cAAc,CAAC,EACnD;4BACEyC,SAAS;gCACP,mBAAmBlC,KAAKmC,QAAQ;4BAClC;wBACF;wBAGF,IAAIH,QAAQI,MAAM,KAAK,KAAK;4BAC1B,MAAMlB,OAAO,MAAMc,QAAQd,IAAI;4BAC/BrC,QAAQqC,KAAKtC,IAAI;4BAEjBqC,sBAAsBC;wBACxB,OAAO;4BACLrC,QAAQ;4BACR0B;wBACF;oBACF,EAAE,OAAO8B,GAAG;wBACVpE,MAAMqE,KAAK,CAACD,EAAEE,OAAO;oBACvB;gBACF;gBAEA,KAAKR;YACP,GAAG;QACL;IACF,GACA;QACE/C;QACAa;QACAD;QACAH;QACAO;QACAO;QACAU;KACD;IAGH,MAAMuB,qBAAqB3E,YACzB,OAAO4E;QACL,IAAI;YACF,MAAMT,UAAU,MAAM3D,SAAS4D,IAAI,CAAC,CAAC,EAAEpC,UAAU,EAAED,SAAS,CAAC,EAAEH,SAAS,cAAc,CAAC,EAAE;gBACvFyC,SAAS;oBACP,mBAAmBlC,KAAKmC,QAAQ;gBAClC;YACF;YAEA,IAAIH,QAAQI,MAAM,KAAK,KAAK;gBAC1B,MAAMlB,OAAO,MAAMc,QAAQd,IAAI;gBAC/B,IAAI,CAACuB,aAAa;oBAChB5D,QAAQqC,KAAKtC,IAAI;oBACjBqC,sBAAsBC;gBACxB;gBACA,OAAOA,KAAKtC,IAAI;YAClB;YAEAC,QAAQ;YACR0B;YACA,OAAO;QACT,EAAE,OAAO8B,GAAG;YACVpE,MAAMqE,KAAK,CAAC,CAAC,yBAAyB,EAAED,EAAEE,OAAO,CAAC,CAAC;YACnD,OAAO;QACT;IACF,GACA;QAAC1C;QAAWD;QAAUH;QAAUO;QAAMO;QAA2BU;KAAsB;IAGzF,MAAMyB,SAAS7E,YAAY;QACzBgB,QAAQ;QACRkC;QACA,IAAI;YACF,MAAM1C,SAAS4D,IAAI,CAAC,CAAC,EAAEpC,UAAU,EAAED,SAAS,CAAC,EAAEH,SAAS,OAAO,CAAC;QAClE,EAAE,OAAO4C,GAAG;YACVpE,MAAMqE,KAAK,CAAC,CAAC,oBAAoB,EAAED,EAAEE,OAAO,CAAC,CAAC;QAChD;IACF,GAAG;QAAC1C;QAAWD;QAAUH;QAAUsB;KAAqB;IAExD,MAAM4B,qBAAqB9E,YACzB,OAAO,EAAE+E,MAAM,EAAuB,GAAG,CAAC,CAAC;QACzC,MAAMC,SAASnF,GAAGoF,SAAS,CACzB;YACEF;QACF,GACA;YACEG,gBAAgB;QAClB;QAGF,IAAI;YACF,MAAMf,UAAU,MAAM3D,SAAS2E,GAAG,CAAC,CAAC,EAAEnD,UAAU,EAAED,SAAS,OAAO,EAAEiD,OAAO,CAAC,EAAE;gBAC5EX,SAAS;oBACP,mBAAmBlC,KAAKmC,QAAQ;gBAClC;YACF;YAEA,IAAIH,QAAQI,MAAM,KAAK,KAAK;gBAC1B,MAAMlB,OAAoB,MAAMc,QAAQd,IAAI;gBAC5CnB,eAAemB;YACjB,OAAO;gBACL,MAAM,IAAI+B,MAAM,CAAC,6CAA6C,EAAEjB,QAAQI,MAAM,CAAC,CAAC;YAClF;QACF,EAAE,OAAOC,GAAG;YACVpE,MAAMqE,KAAK,CAAC,CAAC,+BAA+B,EAAED,EAAEE,OAAO,CAAC,CAAC;QAC3D;IACF,GACA;QAAC1C;QAAWD;QAAUI;KAAK;IAG7B,MAAMkD,gBAAgBvF,MAAME,WAAW,CAAC;QACtC,IAAI;YACF,MAAMmE,UAAU,MAAM3D,SAAS2E,GAAG,CAAC,CAAC,EAAEnD,UAAU,EAAED,SAAS,CAAC,EAAEH,SAAS,GAAG,CAAC,EAAE;gBAC3EyC,SAAS;oBACP,mBAAmBlC,KAAKmC,QAAQ;gBAClC;YACF;YAEA,IAAIH,QAAQI,MAAM,KAAK,KAAK;gBAC1B,MAAMlB,OAA0B,MAAMc,QAAQd,IAAI;gBAElD,IAAIA,MAAMtC,MAAM;oBACdC,QAAQqC,KAAKtC,IAAI;oBAEjB,IAAIsC,MAAMC,OAAO;wBACfF,sBAAsBC;oBACxB;gBACF,OAAO;oBACLrC,QAAQ;oBACRkC;gBACF;YACF;QACF,EAAE,OAAOsB,GAAG;YACVpE,MAAMqE,KAAK,CAAC,CAAC,sBAAsB,EAAED,EAAEE,OAAO,CAAC,CAAC;QAClD;IACF,GAAG;QAAC1C;QAAWD;QAAUH;QAAUO,KAAKmC,QAAQ;QAAElB;QAAuBF;KAAqB;IAE9F,6BAA6B;IAC7BhD,UAAU;QACR,KAAKmF;IACP,GAAG;QAACA;KAAc;IAElB,wCAAwC;IACxCnF,UAAU;QACR,IAAIuC,IAAI;YACNgB;QACF;IACF,GAAG;QAACjB;QAAyBiB;QAAehB;KAAG;IAE/CvC,UAAU;QACRqC,sBAAsBuB,KAAKH,GAAG;IAChC,GAAG;QAACtC;KAAS;IAEbnB,UAAU;QACR,IAAIoF;QACJ,MAAM3B,MAAMC,KAAKC,KAAK,CAAC,IAAIC,OAAOC,OAAO,KAAK;QAC9C,MAAMC,gBAAgB,OAAO7C,oBAAoB,WAAWA,kBAAkBwC,MAAM;QAEpF,IAAIK,gBAAgB,GAAG;YACrBsB,WAAWrB,WACT;gBACE5B,UAAUhC;YACZ,GACAuD,KAAK2B,GAAG,CAAC3B,KAAK4B,GAAG,CAAC,AAACxB,CAAAA,gBAAgB,EAAC,IAAK,MAAMpD;QAEnD;QAEA,OAAO;YACL,IAAI0E,UAAUG,aAAaH;QAC7B;IACF,GAAG;QAACnE;QAAiBkB;KAAU;IAE/BnC,UAAU;QACR,IAAIwF;QACJ,MAAM/B,MAAMC,KAAKC,KAAK,CAAC,IAAIC,OAAOC,OAAO,KAAK;QAC9C,MAAMC,gBAAgB,OAAO7C,oBAAoB,WAAWA,kBAAkBwC,MAAM;QAEpF,IAAIK,gBAAgB,GAAG;YACrB0B,cAAczB,WACZ;gBACEjD,QAAQ;gBACRkC;gBACAR;YACF,GACAkB,KAAK2B,GAAG,CAAC3B,KAAK4B,GAAG,CAACxB,gBAAgB,MAAMpD,iBAAiB;QAE7D;QAEA,OAAO;YACL,IAAI8E,aAAaD,aAAaC;QAChC;IACF,GAAG;QAACvE;QAAiBiB;QAAgBD;QAAMO;QAA2BQ;KAAqB;IAE3F,qBACE,KAACvC,QAAQgF,QAAQ;QACfC,OAAO;YACLP;YACAR;YACA5C;YACAwB;YACAkB;YACAG;YACA5C;YACAlB;YACAsC,OAAOrC;YACPF;QACF;kBAECD;;AAGP,EAAC;AAED,OAAO,MAAM+E,UAAU,IAAuC5F,WAAWU,SAA0B"}
1
+ {"version":3,"sources":["../../../src/providers/Auth/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientUser, MeOperationResult, Permissions } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { usePathname, useRouter } from 'next/navigation.js'\nimport * as qs from 'qs-esm'\nimport React, { createContext, useCallback, useContext, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { stayLoggedInModalSlug } from '../../elements/StayLoggedIn/index.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { formatAdminURL } from '../../utilities/formatAdminURL.js'\nimport { useConfig } from '../Config/index.js'\n\nexport type AuthContext<T = ClientUser> = {\n fetchFullUser: () => Promise<void>\n logOut: () => Promise<void>\n permissions?: Permissions\n refreshCookie: (forceRefresh?: boolean) => void\n refreshCookieAsync: () => Promise<ClientUser>\n refreshPermissions: () => Promise<void>\n setPermissions: (permissions: Permissions) => void\n setUser: (user: T) => void\n strategy?: string\n token?: string\n tokenExpiration?: number\n user?: T | null\n}\n\nconst Context = createContext({} as AuthContext)\n\nconst maxTimeoutTime = 2147483647\n\ntype Props = {\n children: React.ReactNode\n permissions?: Permissions\n user?: ClientUser | null\n}\nexport function AuthProvider({\n children,\n permissions: initialPermissions,\n user: initialUser,\n}: Props) {\n const [user, setUser] = useState<ClientUser | null>(initialUser)\n const [tokenInMemory, setTokenInMemory] = useState<string>()\n const [tokenExpiration, setTokenExpiration] = useState<number>()\n const pathname = usePathname()\n const router = useRouter()\n\n const config = useConfig()\n\n const {\n admin: {\n routes: { inactivity: logoutInactivityRoute },\n user: userSlug,\n },\n routes: { admin: adminRoute, api: apiRoute },\n serverURL,\n } = config\n\n const [permissions, setPermissions] = useState<Permissions>(initialPermissions)\n\n const { i18n } = useTranslation()\n const { closeAllModals, openModal } = useModal()\n const [lastLocationChange, setLastLocationChange] = useState(0)\n const debouncedLocationChange = useDebounce(lastLocationChange, 10000)\n\n const id = user?.id\n\n const redirectToInactivityRoute = useCallback(() => {\n if (window.location.pathname.startsWith(adminRoute)) {\n const redirectParam = `?redirect=${encodeURIComponent(window.location.pathname)}`\n router.replace(\n formatAdminURL({\n adminRoute,\n path: `${logoutInactivityRoute}${redirectParam}`,\n }),\n )\n } else {\n router.replace(\n formatAdminURL({\n adminRoute,\n path: logoutInactivityRoute,\n }),\n )\n }\n closeAllModals()\n }, [router, adminRoute, logoutInactivityRoute, closeAllModals])\n\n const revokeTokenAndExpire = useCallback(() => {\n setTokenInMemory(undefined)\n setTokenExpiration(undefined)\n }, [])\n\n const setTokenAndExpiration = useCallback(\n (json) => {\n const token = json?.token || json?.refreshedToken\n if (token && json?.exp) {\n setTokenInMemory(token)\n setTokenExpiration(json.exp)\n } else {\n revokeTokenAndExpire()\n }\n },\n [revokeTokenAndExpire],\n )\n\n const refreshCookie = useCallback(\n (forceRefresh?: boolean) => {\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = (typeof tokenExpiration === 'number' ? tokenExpiration : 0) - now\n\n if (forceRefresh || (tokenExpiration && remainingTime < 120)) {\n setTimeout(() => {\n async function refresh() {\n try {\n const request = await requests.post(\n `${serverURL}${apiRoute}/${userSlug}/refresh-token`,\n {\n headers: {\n 'Accept-Language': i18n.language,\n },\n },\n )\n\n if (request.status === 200) {\n const json = await request.json()\n setUser(json.user)\n\n setTokenAndExpiration(json)\n } else {\n setUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(e.message)\n }\n }\n\n void refresh()\n }, 1000)\n }\n },\n [\n tokenExpiration,\n serverURL,\n apiRoute,\n userSlug,\n i18n,\n redirectToInactivityRoute,\n setTokenAndExpiration,\n ],\n )\n\n const refreshCookieAsync = useCallback(\n async (skipSetUser?: boolean): Promise<ClientUser> => {\n try {\n const request = await requests.post(`${serverURL}${apiRoute}/${userSlug}/refresh-token`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json = await request.json()\n if (!skipSetUser) {\n setUser(json.user)\n setTokenAndExpiration(json)\n }\n return json.user\n }\n\n setUser(null)\n redirectToInactivityRoute()\n return null\n } catch (e) {\n toast.error(`Refreshing token failed: ${e.message}`)\n return null\n }\n },\n [serverURL, apiRoute, userSlug, i18n, redirectToInactivityRoute, setTokenAndExpiration],\n )\n\n const logOut = useCallback(async () => {\n setUser(null)\n revokeTokenAndExpire()\n try {\n await requests.post(`${serverURL}${apiRoute}/${userSlug}/logout`)\n } catch (e) {\n toast.error(`Logging out failed: ${e.message}`)\n }\n }, [serverURL, apiRoute, userSlug, revokeTokenAndExpire])\n\n const refreshPermissions = useCallback(\n async ({ locale }: { locale?: string } = {}) => {\n const params = qs.stringify(\n {\n locale,\n },\n {\n addQueryPrefix: true,\n },\n )\n\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/access${params}`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: Permissions = await request.json()\n setPermissions(json)\n } else {\n throw new Error(`Fetching permissions failed with status code ${request.status}`)\n }\n } catch (e) {\n toast.error(`Refreshing permissions failed: ${e.message}`)\n }\n },\n [serverURL, apiRoute, i18n],\n )\n\n const fetchFullUser = React.useCallback(async () => {\n try {\n const request = await requests.get(`${serverURL}${apiRoute}/${userSlug}/me`, {\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: MeOperationResult = await request.json()\n\n if (json?.user) {\n setUser(json.user)\n\n if (json?.token) {\n setTokenAndExpiration(json)\n }\n } else {\n setUser(null)\n revokeTokenAndExpire()\n }\n }\n } catch (e) {\n toast.error(`Fetching user failed: ${e.message}`)\n }\n }, [serverURL, apiRoute, userSlug, i18n.language, setTokenAndExpiration, revokeTokenAndExpire])\n\n // On mount, get user and set\n useEffect(() => {\n void fetchFullUser()\n }, [fetchFullUser])\n\n // When location changes, refresh cookie\n useEffect(() => {\n if (id) {\n refreshCookie()\n }\n }, [debouncedLocationChange, refreshCookie, id])\n\n useEffect(() => {\n setLastLocationChange(Date.now())\n }, [pathname])\n\n useEffect(() => {\n let reminder: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n\n if (remainingTime > 0) {\n reminder = setTimeout(\n () => {\n openModal(stayLoggedInModalSlug)\n },\n Math.max(Math.min((remainingTime - 60) * 1000, maxTimeoutTime)),\n )\n }\n\n return () => {\n if (reminder) clearTimeout(reminder)\n }\n }, [tokenExpiration, openModal])\n\n useEffect(() => {\n let forceLogOut: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n\n if (remainingTime > 0) {\n forceLogOut = setTimeout(\n () => {\n setUser(null)\n revokeTokenAndExpire()\n redirectToInactivityRoute()\n },\n Math.max(Math.min(remainingTime * 1000, maxTimeoutTime), 0),\n )\n }\n\n return () => {\n if (forceLogOut) clearTimeout(forceLogOut)\n }\n }, [tokenExpiration, closeAllModals, i18n, redirectToInactivityRoute, revokeTokenAndExpire])\n\n return (\n <Context.Provider\n value={{\n fetchFullUser,\n logOut,\n permissions,\n refreshCookie,\n refreshCookieAsync,\n refreshPermissions,\n setPermissions,\n setUser,\n token: tokenInMemory,\n user,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\nexport const useAuth = <T = ClientUser,>(): AuthContext<T> => useContext(Context) as AuthContext<T>\n"],"names":["useModal","usePathname","useRouter","qs","React","createContext","useCallback","useContext","useEffect","useState","toast","stayLoggedInModalSlug","useDebounce","useTranslation","requests","formatAdminURL","useConfig","Context","maxTimeoutTime","AuthProvider","children","permissions","initialPermissions","user","initialUser","setUser","tokenInMemory","setTokenInMemory","tokenExpiration","setTokenExpiration","pathname","router","config","admin","routes","inactivity","logoutInactivityRoute","userSlug","adminRoute","api","apiRoute","serverURL","setPermissions","i18n","closeAllModals","openModal","lastLocationChange","setLastLocationChange","debouncedLocationChange","id","redirectToInactivityRoute","window","location","startsWith","redirectParam","encodeURIComponent","replace","path","revokeTokenAndExpire","undefined","setTokenAndExpiration","json","token","refreshedToken","exp","refreshCookie","forceRefresh","now","Math","round","Date","getTime","remainingTime","setTimeout","refresh","request","post","headers","language","status","e","error","message","refreshCookieAsync","skipSetUser","logOut","refreshPermissions","locale","params","stringify","addQueryPrefix","get","Error","fetchFullUser","reminder","max","min","clearTimeout","forceLogOut","Provider","value","useAuth"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import type { Params } from 'next/dist/shared/lib/router/utils/route-matcher.js';
1
+ import { useParams as useNextParams } from 'next/navigation.js';
2
2
  import React from 'react';
3
+ export type Params = ReturnType<typeof useNextParams>;
3
4
  interface IParamsContext extends Params {
4
5
  }
5
6
  export declare const ParamsProvider: React.FC<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Params/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oDAAoD,CAAA;AAGhF,OAAO,KAAoC,MAAM,OAAO,CAAA;AAExD,UAAU,cAAe,SAAQ,MAAM;CAAG;AAK1C,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAGnE,CAAA;AAED,eAAO,MAAM,SAAS,QAAO,cAAqC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Params/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,KAAoC,MAAM,OAAO,CAAA;AAExD,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA;AACrD,UAAU,cAAe,SAAQ,MAAM;CAAG;AAK1C,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAGnE,CAAA;AAED,eAAO,MAAM,SAAS,QAAO,cAAqC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/providers/Params/index.tsx"],"sourcesContent":["'use client'\nimport type { Params } from 'next/dist/shared/lib/router/utils/route-matcher.js'\n\nimport { useParams as useNextParams } from 'next/navigation.js'\nimport React, { createContext, useContext } from 'react'\n\ninterface IParamsContext extends Params {}\n\nconst Context = createContext<IParamsContext>({} as IParamsContext)\n\n// TODO: abstract the `next/navigation` dependency out from this provider so that it can be used in other contexts\nexport const ParamsProvider: React.FC<{ children?: React.ReactNode }> = ({ children }) => {\n const params = useNextParams()\n return <Context.Provider value={params}>{children}</Context.Provider>\n}\n\nexport const useParams = (): IParamsContext => useContext(Context)\n"],"names":["useParams","useNextParams","React","createContext","useContext","Context","ParamsProvider","children","params","Provider","value"],"mappings":"AAAA;;AAGA,SAASA,aAAaC,aAAa,QAAQ,qBAAoB;AAC/D,OAAOC,SAASC,aAAa,EAAEC,UAAU,QAAQ,QAAO;AAIxD,MAAMC,wBAAUF,cAA8B,CAAC;AAE/C,kHAAkH;AAClH,OAAO,MAAMG,iBAA2D,CAAC,EAAEC,QAAQ,EAAE;IACnF,MAAMC,SAASP;IACf,qBAAO,KAACI,QAAQI,QAAQ;QAACC,OAAOF;kBAASD;;AAC3C,EAAC;AAED,OAAO,MAAMP,YAAY,IAAsBI,WAAWC,SAAQ"}
1
+ {"version":3,"sources":["../../../src/providers/Params/index.tsx"],"sourcesContent":["'use client'\n\nimport { useParams as useNextParams } from 'next/navigation.js'\nimport React, { createContext, useContext } from 'react'\n\nexport type Params = ReturnType<typeof useNextParams>\ninterface IParamsContext extends Params {}\n\nconst Context = createContext<IParamsContext>({} as IParamsContext)\n\n// TODO: abstract the `next/navigation` dependency out from this provider so that it can be used in other contexts\nexport const ParamsProvider: React.FC<{ children?: React.ReactNode }> = ({ children }) => {\n const params = useNextParams()\n return <Context.Provider value={params}>{children}</Context.Provider>\n}\n\nexport const useParams = (): IParamsContext => useContext(Context)\n"],"names":["useParams","useNextParams","React","createContext","useContext","Context","ParamsProvider","children","params","Provider","value"],"mappings":"AAAA;;AAEA,SAASA,aAAaC,aAAa,QAAQ,qBAAoB;AAC/D,OAAOC,SAASC,aAAa,EAAEC,UAAU,QAAQ,QAAO;AAKxD,MAAMC,wBAAUF,cAA8B,CAAC;AAE/C,kHAAkH;AAClH,OAAO,MAAMG,iBAA2D,CAAC,EAAEC,QAAQ,EAAE;IACnF,MAAMC,SAASP;IACf,qBAAO,KAACI,QAAQI,QAAQ;QAACC,OAAOF;kBAASD;;AAC3C,EAAC;AAED,OAAO,MAAMP,YAAY,IAAsBI,WAAWC,SAAQ"}
@@ -1,5 +1,5 @@
1
1
  import type { I18nClient, Language } from '@payloadcms/translations';
2
- import type { ClientConfig, LanguageOptions } from 'payload';
2
+ import type { ClientConfig, LanguageOptions, Permissions, User } from 'payload';
3
3
  import React from 'react';
4
4
  import type { ComponentMap } from '../ComponentMap/buildComponentMap/types.js';
5
5
  import type { Theme } from '../Theme/index.js';
@@ -11,9 +11,11 @@ type Props = {
11
11
  fallbackLang: ClientConfig['i18n']['fallbackLanguage'];
12
12
  languageCode: string;
13
13
  languageOptions: LanguageOptions;
14
+ permissions: Permissions;
14
15
  switchLanguageServerAction?: (lang: string) => Promise<void>;
15
16
  theme: Theme;
16
17
  translations: I18nClient['translations'];
18
+ user: User | null;
17
19
  };
18
20
  export declare const RootProvider: React.FC<Props>;
19
21
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Root/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAK5D,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAA;AAC9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAsB9C,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,EAAE,YAAY,CAAA;IACpB,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAA;IAClC,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAA;IACtD,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,eAAe,CAAA;IAChC,0BAA0B,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,KAAK,EAAE,KAAK,CAAA;IACZ,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,CAAA;CACzC,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwExC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/Root/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAK/E,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAA;AAC9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAsB9C,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,EAAE,YAAY,CAAA;IACpB,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAA;IAClC,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAA;IACtD,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,eAAe,CAAA;IAChC,WAAW,EAAE,WAAW,CAAA;IACxB,0BAA0B,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,KAAK,EAAE,KAAK,CAAA;IACZ,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,CAAA;IACxC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA0ExC,CAAA"}
@@ -23,7 +23,7 @@ import { SearchParamsProvider } from '../SearchParams/index.js';
23
23
  import { ThemeProvider } from '../Theme/index.js';
24
24
  import { ToastContainer } from '../ToastContainer/index.js';
25
25
  import { TranslationProvider } from '../Translation/index.js';
26
- export const RootProvider = ({ children, componentMap, config, dateFNSKey, fallbackLang, languageCode, languageOptions, switchLanguageServerAction, theme, translations })=>{
26
+ export const RootProvider = ({ children, componentMap, config, dateFNSKey, fallbackLang, languageCode, languageOptions, permissions, switchLanguageServerAction, theme, translations, user })=>{
27
27
  return /*#__PURE__*/ _jsxs(Fragment, {
28
28
  children: [
29
29
  /*#__PURE__*/ _jsx(RouteCache, {
@@ -54,6 +54,8 @@ export const RootProvider = ({ children, componentMap, config, dateFNSKey, fallb
54
54
  transTime: 0,
55
55
  zIndex: "var(--z-modal)",
56
56
  children: /*#__PURE__*/ _jsxs(AuthProvider, {
57
+ permissions: permissions,
58
+ user: user,
57
59
  children: [
58
60
  /*#__PURE__*/ _jsx(PreferencesProvider, {
59
61
  children: /*#__PURE__*/ _jsx(ThemeProvider, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/providers/Root/index.tsx"],"sourcesContent":["'use client'\nimport type { I18nClient, Language } from '@payloadcms/translations'\nimport type { ClientConfig, LanguageOptions } from 'payload'\n\nimport { ModalContainer, ModalProvider } from '@faceless-ui/modal'\nimport { ScrollInfoProvider } from '@faceless-ui/scroll-info'\nimport { WindowInfoProvider } from '@faceless-ui/window-info'\nimport React, { Fragment } from 'react'\n\nimport type { ComponentMap } from '../ComponentMap/buildComponentMap/types.js'\nimport type { Theme } from '../Theme/index.js'\n\nimport { LoadingOverlayProvider } from '../../elements/LoadingOverlay/index.js'\nimport { NavProvider } from '../../elements/Nav/context.js'\nimport { StayLoggedInModal } from '../../elements/StayLoggedIn/index.js'\nimport { StepNavProvider } from '../../elements/StepNav/index.js'\nimport { ActionsProvider } from '../Actions/index.js'\nimport { AuthProvider } from '../Auth/index.js'\nimport { ClientFunctionProvider } from '../ClientFunction/index.js'\nimport { ComponentMapProvider } from '../ComponentMap/index.js'\nimport { ConfigProvider } from '../Config/index.js'\nimport { DocumentEventsProvider } from '../DocumentEvents/index.js'\nimport { FieldComponentsProvider } from '../FieldComponents/index.js'\nimport { LocaleProvider } from '../Locale/index.js'\nimport { ParamsProvider } from '../Params/index.js'\nimport { PreferencesProvider } from '../Preferences/index.js'\nimport { RouteCache } from '../RouteCache/index.js'\nimport { SearchParamsProvider } from '../SearchParams/index.js'\nimport { ThemeProvider } from '../Theme/index.js'\nimport { ToastContainer } from '../ToastContainer/index.js'\nimport { TranslationProvider } from '../Translation/index.js'\n\ntype Props = {\n children: React.ReactNode\n componentMap: ComponentMap\n config: ClientConfig\n dateFNSKey: Language['dateFNSKey']\n fallbackLang: ClientConfig['i18n']['fallbackLanguage']\n languageCode: string\n languageOptions: LanguageOptions\n switchLanguageServerAction?: (lang: string) => Promise<void>\n theme: Theme\n translations: I18nClient['translations']\n}\n\nexport const RootProvider: React.FC<Props> = ({\n children,\n componentMap,\n config,\n dateFNSKey,\n fallbackLang,\n languageCode,\n languageOptions,\n switchLanguageServerAction,\n theme,\n translations,\n}) => {\n return (\n <Fragment>\n <RouteCache>\n <ConfigProvider config={config}>\n <ComponentMapProvider componentMap={componentMap}>\n <FieldComponentsProvider>\n <ClientFunctionProvider>\n <TranslationProvider\n dateFNSKey={dateFNSKey}\n fallbackLang={fallbackLang}\n language={languageCode}\n languageOptions={languageOptions}\n switchLanguageServerAction={switchLanguageServerAction}\n translations={translations}\n >\n <WindowInfoProvider\n breakpoints={{\n l: '(max-width: 1440px)',\n m: '(max-width: 1024px)',\n s: '(max-width: 768px)',\n xs: '(max-width: 400px)',\n }}\n >\n <ScrollInfoProvider>\n <SearchParamsProvider>\n <ModalProvider classPrefix=\"payload\" transTime={0} zIndex=\"var(--z-modal)\">\n <AuthProvider>\n <PreferencesProvider>\n <ThemeProvider cookiePrefix={config.cookiePrefix} theme={theme}>\n <ParamsProvider>\n <LocaleProvider>\n <StepNavProvider>\n <LoadingOverlayProvider>\n <DocumentEventsProvider>\n <ActionsProvider>\n <NavProvider>{children}</NavProvider>\n </ActionsProvider>\n </DocumentEventsProvider>\n </LoadingOverlayProvider>\n </StepNavProvider>\n </LocaleProvider>\n </ParamsProvider>\n </ThemeProvider>\n </PreferencesProvider>\n <ModalContainer />\n <StayLoggedInModal />\n </AuthProvider>\n </ModalProvider>\n </SearchParamsProvider>\n </ScrollInfoProvider>\n </WindowInfoProvider>\n </TranslationProvider>\n </ClientFunctionProvider>\n </FieldComponentsProvider>\n </ComponentMapProvider>\n </ConfigProvider>\n </RouteCache>\n <ToastContainer />\n </Fragment>\n )\n}\n"],"names":["ModalContainer","ModalProvider","ScrollInfoProvider","WindowInfoProvider","React","Fragment","LoadingOverlayProvider","NavProvider","StayLoggedInModal","StepNavProvider","ActionsProvider","AuthProvider","ClientFunctionProvider","ComponentMapProvider","ConfigProvider","DocumentEventsProvider","FieldComponentsProvider","LocaleProvider","ParamsProvider","PreferencesProvider","RouteCache","SearchParamsProvider","ThemeProvider","ToastContainer","TranslationProvider","RootProvider","children","componentMap","config","dateFNSKey","fallbackLang","languageCode","languageOptions","switchLanguageServerAction","theme","translations","language","breakpoints","l","m","s","xs","classPrefix","transTime","zIndex","cookiePrefix"],"mappings":"AAAA;;AAIA,SAASA,cAAc,EAAEC,aAAa,QAAQ,qBAAoB;AAClE,SAASC,kBAAkB,QAAQ,2BAA0B;AAC7D,SAASC,kBAAkB,QAAQ,2BAA0B;AAC7D,OAAOC,SAASC,QAAQ,QAAQ,QAAO;AAKvC,SAASC,sBAAsB,QAAQ,yCAAwC;AAC/E,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,eAAe,QAAQ,kCAAiC;AACjE,SAASC,eAAe,QAAQ,sBAAqB;AACrD,SAASC,YAAY,QAAQ,mBAAkB;AAC/C,SAASC,sBAAsB,QAAQ,6BAA4B;AACnE,SAASC,oBAAoB,QAAQ,2BAA0B;AAC/D,SAASC,cAAc,QAAQ,qBAAoB;AACnD,SAASC,sBAAsB,QAAQ,6BAA4B;AACnE,SAASC,uBAAuB,QAAQ,8BAA6B;AACrE,SAASC,cAAc,QAAQ,qBAAoB;AACnD,SAASC,cAAc,QAAQ,qBAAoB;AACnD,SAASC,mBAAmB,QAAQ,0BAAyB;AAC7D,SAASC,UAAU,QAAQ,yBAAwB;AACnD,SAASC,oBAAoB,QAAQ,2BAA0B;AAC/D,SAASC,aAAa,QAAQ,oBAAmB;AACjD,SAASC,cAAc,QAAQ,6BAA4B;AAC3D,SAASC,mBAAmB,QAAQ,0BAAyB;AAe7D,OAAO,MAAMC,eAAgC,CAAC,EAC5CC,QAAQ,EACRC,YAAY,EACZC,MAAM,EACNC,UAAU,EACVC,YAAY,EACZC,YAAY,EACZC,eAAe,EACfC,0BAA0B,EAC1BC,KAAK,EACLC,YAAY,EACb;IACC,qBACE,MAAC9B;;0BACC,KAACe;0BACC,cAAA,KAACN;oBAAec,QAAQA;8BACtB,cAAA,KAACf;wBAAqBc,cAAcA;kCAClC,cAAA,KAACX;sCACC,cAAA,KAACJ;0CACC,cAAA,KAACY;oCACCK,YAAYA;oCACZC,cAAcA;oCACdM,UAAUL;oCACVC,iBAAiBA;oCACjBC,4BAA4BA;oCAC5BE,cAAcA;8CAEd,cAAA,KAAChC;wCACCkC,aAAa;4CACXC,GAAG;4CACHC,GAAG;4CACHC,GAAG;4CACHC,IAAI;wCACN;kDAEA,cAAA,KAACvC;sDACC,cAAA,KAACmB;0DACC,cAAA,KAACpB;oDAAcyC,aAAY;oDAAUC,WAAW;oDAAGC,QAAO;8DACxD,cAAA,MAACjC;;0EACC,KAACQ;0EACC,cAAA,KAACG;oEAAcuB,cAAcjB,OAAOiB,YAAY;oEAAEX,OAAOA;8EACvD,cAAA,KAAChB;kFACC,cAAA,KAACD;sFACC,cAAA,KAACR;0FACC,cAAA,KAACH;8FACC,cAAA,KAACS;kGACC,cAAA,KAACL;sGACC,cAAA,KAACH;0GAAamB;;;;;;;;;;0EAS9B,KAAC1B;0EACD,KAACQ;;;;;;;;;;;;;0BAYvB,KAACe;;;AAGP,EAAC"}
1
+ {"version":3,"sources":["../../../src/providers/Root/index.tsx"],"sourcesContent":["'use client'\nimport type { I18nClient, Language } from '@payloadcms/translations'\nimport type { ClientConfig, LanguageOptions, Permissions, User } from 'payload'\n\nimport { ModalContainer, ModalProvider } from '@faceless-ui/modal'\nimport { ScrollInfoProvider } from '@faceless-ui/scroll-info'\nimport { WindowInfoProvider } from '@faceless-ui/window-info'\nimport React, { Fragment } from 'react'\n\nimport type { ComponentMap } from '../ComponentMap/buildComponentMap/types.js'\nimport type { Theme } from '../Theme/index.js'\n\nimport { LoadingOverlayProvider } from '../../elements/LoadingOverlay/index.js'\nimport { NavProvider } from '../../elements/Nav/context.js'\nimport { StayLoggedInModal } from '../../elements/StayLoggedIn/index.js'\nimport { StepNavProvider } from '../../elements/StepNav/index.js'\nimport { ActionsProvider } from '../Actions/index.js'\nimport { AuthProvider } from '../Auth/index.js'\nimport { ClientFunctionProvider } from '../ClientFunction/index.js'\nimport { ComponentMapProvider } from '../ComponentMap/index.js'\nimport { ConfigProvider } from '../Config/index.js'\nimport { DocumentEventsProvider } from '../DocumentEvents/index.js'\nimport { FieldComponentsProvider } from '../FieldComponents/index.js'\nimport { LocaleProvider } from '../Locale/index.js'\nimport { ParamsProvider } from '../Params/index.js'\nimport { PreferencesProvider } from '../Preferences/index.js'\nimport { RouteCache } from '../RouteCache/index.js'\nimport { SearchParamsProvider } from '../SearchParams/index.js'\nimport { ThemeProvider } from '../Theme/index.js'\nimport { ToastContainer } from '../ToastContainer/index.js'\nimport { TranslationProvider } from '../Translation/index.js'\n\ntype Props = {\n children: React.ReactNode\n componentMap: ComponentMap\n config: ClientConfig\n dateFNSKey: Language['dateFNSKey']\n fallbackLang: ClientConfig['i18n']['fallbackLanguage']\n languageCode: string\n languageOptions: LanguageOptions\n permissions: Permissions\n switchLanguageServerAction?: (lang: string) => Promise<void>\n theme: Theme\n translations: I18nClient['translations']\n user: User | null\n}\n\nexport const RootProvider: React.FC<Props> = ({\n children,\n componentMap,\n config,\n dateFNSKey,\n fallbackLang,\n languageCode,\n languageOptions,\n permissions,\n switchLanguageServerAction,\n theme,\n translations,\n user,\n}) => {\n return (\n <Fragment>\n <RouteCache>\n <ConfigProvider config={config}>\n <ComponentMapProvider componentMap={componentMap}>\n <FieldComponentsProvider>\n <ClientFunctionProvider>\n <TranslationProvider\n dateFNSKey={dateFNSKey}\n fallbackLang={fallbackLang}\n language={languageCode}\n languageOptions={languageOptions}\n switchLanguageServerAction={switchLanguageServerAction}\n translations={translations}\n >\n <WindowInfoProvider\n breakpoints={{\n l: '(max-width: 1440px)',\n m: '(max-width: 1024px)',\n s: '(max-width: 768px)',\n xs: '(max-width: 400px)',\n }}\n >\n <ScrollInfoProvider>\n <SearchParamsProvider>\n <ModalProvider classPrefix=\"payload\" transTime={0} zIndex=\"var(--z-modal)\">\n <AuthProvider permissions={permissions} user={user}>\n <PreferencesProvider>\n <ThemeProvider cookiePrefix={config.cookiePrefix} theme={theme}>\n <ParamsProvider>\n <LocaleProvider>\n <StepNavProvider>\n <LoadingOverlayProvider>\n <DocumentEventsProvider>\n <ActionsProvider>\n <NavProvider>{children}</NavProvider>\n </ActionsProvider>\n </DocumentEventsProvider>\n </LoadingOverlayProvider>\n </StepNavProvider>\n </LocaleProvider>\n </ParamsProvider>\n </ThemeProvider>\n </PreferencesProvider>\n <ModalContainer />\n <StayLoggedInModal />\n </AuthProvider>\n </ModalProvider>\n </SearchParamsProvider>\n </ScrollInfoProvider>\n </WindowInfoProvider>\n </TranslationProvider>\n </ClientFunctionProvider>\n </FieldComponentsProvider>\n </ComponentMapProvider>\n </ConfigProvider>\n </RouteCache>\n <ToastContainer />\n </Fragment>\n )\n}\n"],"names":["ModalContainer","ModalProvider","ScrollInfoProvider","WindowInfoProvider","React","Fragment","LoadingOverlayProvider","NavProvider","StayLoggedInModal","StepNavProvider","ActionsProvider","AuthProvider","ClientFunctionProvider","ComponentMapProvider","ConfigProvider","DocumentEventsProvider","FieldComponentsProvider","LocaleProvider","ParamsProvider","PreferencesProvider","RouteCache","SearchParamsProvider","ThemeProvider","ToastContainer","TranslationProvider","RootProvider","children","componentMap","config","dateFNSKey","fallbackLang","languageCode","languageOptions","permissions","switchLanguageServerAction","theme","translations","user","language","breakpoints","l","m","s","xs","classPrefix","transTime","zIndex","cookiePrefix"],"mappings":"AAAA;;AAIA,SAASA,cAAc,EAAEC,aAAa,QAAQ,qBAAoB;AAClE,SAASC,kBAAkB,QAAQ,2BAA0B;AAC7D,SAASC,kBAAkB,QAAQ,2BAA0B;AAC7D,OAAOC,SAASC,QAAQ,QAAQ,QAAO;AAKvC,SAASC,sBAAsB,QAAQ,yCAAwC;AAC/E,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,eAAe,QAAQ,kCAAiC;AACjE,SAASC,eAAe,QAAQ,sBAAqB;AACrD,SAASC,YAAY,QAAQ,mBAAkB;AAC/C,SAASC,sBAAsB,QAAQ,6BAA4B;AACnE,SAASC,oBAAoB,QAAQ,2BAA0B;AAC/D,SAASC,cAAc,QAAQ,qBAAoB;AACnD,SAASC,sBAAsB,QAAQ,6BAA4B;AACnE,SAASC,uBAAuB,QAAQ,8BAA6B;AACrE,SAASC,cAAc,QAAQ,qBAAoB;AACnD,SAASC,cAAc,QAAQ,qBAAoB;AACnD,SAASC,mBAAmB,QAAQ,0BAAyB;AAC7D,SAASC,UAAU,QAAQ,yBAAwB;AACnD,SAASC,oBAAoB,QAAQ,2BAA0B;AAC/D,SAASC,aAAa,QAAQ,oBAAmB;AACjD,SAASC,cAAc,QAAQ,6BAA4B;AAC3D,SAASC,mBAAmB,QAAQ,0BAAyB;AAiB7D,OAAO,MAAMC,eAAgC,CAAC,EAC5CC,QAAQ,EACRC,YAAY,EACZC,MAAM,EACNC,UAAU,EACVC,YAAY,EACZC,YAAY,EACZC,eAAe,EACfC,WAAW,EACXC,0BAA0B,EAC1BC,KAAK,EACLC,YAAY,EACZC,IAAI,EACL;IACC,qBACE,MAAChC;;0BACC,KAACe;0BACC,cAAA,KAACN;oBAAec,QAAQA;8BACtB,cAAA,KAACf;wBAAqBc,cAAcA;kCAClC,cAAA,KAACX;sCACC,cAAA,KAACJ;0CACC,cAAA,KAACY;oCACCK,YAAYA;oCACZC,cAAcA;oCACdQ,UAAUP;oCACVC,iBAAiBA;oCACjBE,4BAA4BA;oCAC5BE,cAAcA;8CAEd,cAAA,KAACjC;wCACCoC,aAAa;4CACXC,GAAG;4CACHC,GAAG;4CACHC,GAAG;4CACHC,IAAI;wCACN;kDAEA,cAAA,KAACzC;sDACC,cAAA,KAACmB;0DACC,cAAA,KAACpB;oDAAc2C,aAAY;oDAAUC,WAAW;oDAAGC,QAAO;8DACxD,cAAA,MAACnC;wDAAasB,aAAaA;wDAAaI,MAAMA;;0EAC5C,KAAClB;0EACC,cAAA,KAACG;oEAAcyB,cAAcnB,OAAOmB,YAAY;oEAAEZ,OAAOA;8EACvD,cAAA,KAACjB;kFACC,cAAA,KAACD;sFACC,cAAA,KAACR;0FACC,cAAA,KAACH;8FACC,cAAA,KAACS;kGACC,cAAA,KAACL;sGACC,cAAA,KAACH;0GAAamB;;;;;;;;;;0EAS9B,KAAC1B;0EACD,KAACQ;;;;;;;;;;;;;0BAYvB,KAACe;;;AAGP,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"buildFormState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8B,SAAS,EAAE,cAAc,EAAc,MAAM,SAAS,CAAA;AAKhG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAapE,eAAO,MAAM,iBAAiB,QAAS,cAAc,KAAG,cAWvD,CAAA;AAED,eAAO,MAAM,cAAc,YAAmB;IAAE,GAAG,EAAE,cAAc,CAAA;CAAE,KAAG,OAAO,CAAC,SAAS,CAmKxF,CAAA"}
1
+ {"version":3,"file":"buildFormState.d.ts","sourceRoot":"","sources":["../../src/utilities/buildFormState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8B,SAAS,EAAE,cAAc,EAAc,MAAM,SAAS,CAAA;AAKhG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAapE,eAAO,MAAM,iBAAiB,QAAS,cAAc,KAAG,cAWvD,CAAA;AAED,eAAO,MAAM,cAAc,YAAmB;IAAE,GAAG,EAAE,cAAc,CAAA;CAAE,KAAG,OAAO,CAAC,SAAS,CAiLxF,CAAA"}
@@ -87,9 +87,23 @@ export const buildFormState = async ({ req })=>{
87
87
  depth: 0,
88
88
  limit: 1,
89
89
  where: {
90
- key: {
91
- equals: preferencesKey
92
- }
90
+ and: [
91
+ {
92
+ key: {
93
+ equals: preferencesKey
94
+ }
95
+ },
96
+ {
97
+ 'user.relationTo': {
98
+ equals: req.user.collection
99
+ }
100
+ },
101
+ {
102
+ 'user.value': {
103
+ equals: req.user.id
104
+ }
105
+ }
106
+ ]
93
107
  }
94
108
  });
95
109
  if (preferencesResult?.docs?.[0]?.value) docPreferences = preferencesResult.docs[0].value;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/buildFormState.ts"],"sourcesContent":["import type { DocumentPreferences, Field, FormState, PayloadRequest, TypeWithID } from 'payload'\n\nimport { reduceFieldsToValues } from 'payload/shared'\n\nimport type { BuildFormStateArgs } from '../forms/buildStateFromSchema/index.js'\nimport type { FieldSchemaMap } from './buildFieldSchemaMap/types.js'\n\n// eslint-disable-next-line payload/no-imports-from-exports-dir\nimport {} from '../exports/client/index.js'\nimport { buildStateFromSchema } from '../forms/buildStateFromSchema/index.js'\nimport { buildFieldSchemaMap } from './buildFieldSchemaMap/index.js'\n\nlet cached = global._payload_fieldSchemaMap\n\nif (!cached) {\n cached = global._payload_fieldSchemaMap = null\n}\n\nexport const getFieldSchemaMap = (req: PayloadRequest): FieldSchemaMap => {\n if (cached && process.env.NODE_ENV !== 'development') {\n return cached\n }\n\n cached = buildFieldSchemaMap({\n config: req.payload.config,\n i18n: req.i18n,\n })\n\n return cached\n}\n\nexport const buildFormState = async ({ req }: { req: PayloadRequest }): Promise<FormState> => {\n const reqData: BuildFormStateArgs = (req.data || {}) as BuildFormStateArgs\n const { collectionSlug, formState, globalSlug, locale, operation, schemaPath } = reqData\n\n const incomingUserSlug = req.user?.collection\n const adminUserSlug = req.payload.config.admin.user\n\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = req.payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n } else {\n const hasUsers = await req.payload.find({\n collection: adminUserSlug,\n depth: 0,\n limit: 1,\n pagination: false,\n })\n // If there are users, we should not allow access because of /create-first-user\n if (hasUsers.docs.length) {\n throw new Error('Unauthorized')\n }\n }\n\n const fieldSchemaMap = getFieldSchemaMap(req)\n\n const id = collectionSlug ? reqData.id : undefined\n const schemaPathSegments = schemaPath && schemaPath.split('.')\n\n let fieldSchema: Field[]\n\n if (schemaPathSegments.length === 1) {\n if (req.payload.collections[schemaPath]) {\n fieldSchema = req.payload.collections[schemaPath].config.fields\n } else {\n fieldSchema = req.payload.config.globals.find((global) => global.slug === schemaPath)?.fields\n }\n } else if (fieldSchemaMap.has(schemaPath)) {\n fieldSchema = fieldSchemaMap.get(schemaPath)\n }\n\n if (!fieldSchema) {\n throw new Error('Could not find field schema for given path')\n }\n\n let docPreferences = reqData.docPreferences\n let data = reqData.data\n\n const promises: {\n data?: Promise<void>\n preferences?: Promise<void>\n } = {}\n\n // If the request does not include doc preferences,\n // we should fetch them. This is useful for DocumentInfoProvider\n // as it reduces the amount of client-side fetches necessary\n // when we fetch data for the Edit view\n if (!docPreferences) {\n let preferencesKey\n\n if (collectionSlug && id) {\n preferencesKey = `collection-${collectionSlug}-${id}`\n }\n\n if (globalSlug) {\n preferencesKey = `global-${globalSlug}`\n }\n\n if (preferencesKey) {\n const fetchPreferences = async () => {\n const preferencesResult = (await req.payload.find({\n collection: 'payload-preferences',\n depth: 0,\n limit: 1,\n where: {\n key: {\n equals: preferencesKey,\n },\n },\n })) as unknown as { docs: { value: DocumentPreferences }[] }\n\n if (preferencesResult?.docs?.[0]?.value) docPreferences = preferencesResult.docs[0].value\n }\n\n promises.preferences = fetchPreferences()\n }\n }\n\n // If there is a form state,\n // then we can deduce data from that form state\n if (formState) data = reduceFieldsToValues(formState, true)\n\n // If we do not have data at this point,\n // we can fetch it. This is useful for DocumentInfoProvider\n // to reduce the amount of fetches required\n if (!data) {\n const fetchData = async () => {\n let resolvedData: Record<string, unknown> | TypeWithID\n\n if (collectionSlug && id) {\n resolvedData = await req.payload.findByID({\n id,\n collection: collectionSlug,\n depth: 0,\n draft: true,\n fallbackLocale: null,\n locale,\n overrideAccess: false,\n user: req.user,\n })\n }\n\n if (globalSlug && schemaPath === globalSlug) {\n resolvedData = await req.payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n draft: true,\n fallbackLocale: null,\n locale,\n overrideAccess: false,\n user: req.user,\n })\n }\n\n data = resolvedData\n }\n\n promises.data = fetchData()\n }\n\n if (Object.keys(promises).length > 0) {\n await Promise.all(Object.values(promises))\n }\n\n const result = await buildStateFromSchema({\n id,\n collectionSlug,\n data,\n fieldSchema,\n operation,\n preferences: docPreferences || { fields: {} },\n req,\n })\n\n // Maintain form state of auth / upload fields\n if (collectionSlug && formState) {\n if (req.payload.collections[collectionSlug]?.config?.upload && formState.file) {\n result.file = formState.file\n }\n }\n\n return result\n}\n"],"names":["reduceFieldsToValues","buildStateFromSchema","buildFieldSchemaMap","cached","global","_payload_fieldSchemaMap","getFieldSchemaMap","req","process","env","NODE_ENV","config","payload","i18n","buildFormState","reqData","data","collectionSlug","formState","globalSlug","locale","operation","schemaPath","incomingUserSlug","user","collection","adminUserSlug","admin","adminAccessFunction","collections","access","canAccessAdmin","Error","hasUsers","find","depth","limit","pagination","docs","length","fieldSchemaMap","id","undefined","schemaPathSegments","split","fieldSchema","fields","globals","slug","has","get","docPreferences","promises","preferencesKey","fetchPreferences","preferencesResult","where","key","equals","value","preferences","fetchData","resolvedData","findByID","draft","fallbackLocale","overrideAccess","findGlobal","Object","keys","Promise","all","values","result","upload","file"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/buildFormState.ts"],"sourcesContent":["import type { DocumentPreferences, Field, FormState, PayloadRequest, TypeWithID } from 'payload'\n\nimport { reduceFieldsToValues } from 'payload/shared'\n\nimport type { BuildFormStateArgs } from '../forms/buildStateFromSchema/index.js'\nimport type { FieldSchemaMap } from './buildFieldSchemaMap/types.js'\n\n// eslint-disable-next-line payload/no-imports-from-exports-dir\nimport {} from '../exports/client/index.js'\nimport { buildStateFromSchema } from '../forms/buildStateFromSchema/index.js'\nimport { buildFieldSchemaMap } from './buildFieldSchemaMap/index.js'\n\nlet cached = global._payload_fieldSchemaMap\n\nif (!cached) {\n cached = global._payload_fieldSchemaMap = null\n}\n\nexport const getFieldSchemaMap = (req: PayloadRequest): FieldSchemaMap => {\n if (cached && process.env.NODE_ENV !== 'development') {\n return cached\n }\n\n cached = buildFieldSchemaMap({\n config: req.payload.config,\n i18n: req.i18n,\n })\n\n return cached\n}\n\nexport const buildFormState = async ({ req }: { req: PayloadRequest }): Promise<FormState> => {\n const reqData: BuildFormStateArgs = (req.data || {}) as BuildFormStateArgs\n const { collectionSlug, formState, globalSlug, locale, operation, schemaPath } = reqData\n\n const incomingUserSlug = req.user?.collection\n const adminUserSlug = req.payload.config.admin.user\n\n // If we have a user slug, test it against the functions\n if (incomingUserSlug) {\n const adminAccessFunction = req.payload.collections[incomingUserSlug].config.access?.admin\n\n // Run the admin access function from the config if it exists\n if (adminAccessFunction) {\n const canAccessAdmin = await adminAccessFunction({ req })\n\n if (!canAccessAdmin) {\n throw new Error('Unauthorized')\n }\n // Match the user collection to the global admin config\n } else if (adminUserSlug !== incomingUserSlug) {\n throw new Error('Unauthorized')\n }\n } else {\n const hasUsers = await req.payload.find({\n collection: adminUserSlug,\n depth: 0,\n limit: 1,\n pagination: false,\n })\n // If there are users, we should not allow access because of /create-first-user\n if (hasUsers.docs.length) {\n throw new Error('Unauthorized')\n }\n }\n\n const fieldSchemaMap = getFieldSchemaMap(req)\n\n const id = collectionSlug ? reqData.id : undefined\n const schemaPathSegments = schemaPath && schemaPath.split('.')\n\n let fieldSchema: Field[]\n\n if (schemaPathSegments.length === 1) {\n if (req.payload.collections[schemaPath]) {\n fieldSchema = req.payload.collections[schemaPath].config.fields\n } else {\n fieldSchema = req.payload.config.globals.find((global) => global.slug === schemaPath)?.fields\n }\n } else if (fieldSchemaMap.has(schemaPath)) {\n fieldSchema = fieldSchemaMap.get(schemaPath)\n }\n\n if (!fieldSchema) {\n throw new Error('Could not find field schema for given path')\n }\n\n let docPreferences = reqData.docPreferences\n let data = reqData.data\n\n const promises: {\n data?: Promise<void>\n preferences?: Promise<void>\n } = {}\n\n // If the request does not include doc preferences,\n // we should fetch them. This is useful for DocumentInfoProvider\n // as it reduces the amount of client-side fetches necessary\n // when we fetch data for the Edit view\n if (!docPreferences) {\n let preferencesKey\n\n if (collectionSlug && id) {\n preferencesKey = `collection-${collectionSlug}-${id}`\n }\n\n if (globalSlug) {\n preferencesKey = `global-${globalSlug}`\n }\n\n if (preferencesKey) {\n const fetchPreferences = async () => {\n const preferencesResult = (await req.payload.find({\n collection: 'payload-preferences',\n depth: 0,\n limit: 1,\n where: {\n and: [\n {\n key: {\n equals: preferencesKey,\n },\n },\n {\n 'user.relationTo': {\n equals: req.user.collection,\n },\n },\n {\n 'user.value': {\n equals: req.user.id,\n },\n },\n ],\n },\n })) as unknown as { docs: { value: DocumentPreferences }[] }\n\n if (preferencesResult?.docs?.[0]?.value) docPreferences = preferencesResult.docs[0].value\n }\n\n promises.preferences = fetchPreferences()\n }\n }\n\n // If there is a form state,\n // then we can deduce data from that form state\n if (formState) data = reduceFieldsToValues(formState, true)\n\n // If we do not have data at this point,\n // we can fetch it. This is useful for DocumentInfoProvider\n // to reduce the amount of fetches required\n if (!data) {\n const fetchData = async () => {\n let resolvedData: Record<string, unknown> | TypeWithID\n\n if (collectionSlug && id) {\n resolvedData = await req.payload.findByID({\n id,\n collection: collectionSlug,\n depth: 0,\n draft: true,\n fallbackLocale: null,\n locale,\n overrideAccess: false,\n user: req.user,\n })\n }\n\n if (globalSlug && schemaPath === globalSlug) {\n resolvedData = await req.payload.findGlobal({\n slug: globalSlug,\n depth: 0,\n draft: true,\n fallbackLocale: null,\n locale,\n overrideAccess: false,\n user: req.user,\n })\n }\n\n data = resolvedData\n }\n\n promises.data = fetchData()\n }\n\n if (Object.keys(promises).length > 0) {\n await Promise.all(Object.values(promises))\n }\n\n const result = await buildStateFromSchema({\n id,\n collectionSlug,\n data,\n fieldSchema,\n operation,\n preferences: docPreferences || { fields: {} },\n req,\n })\n\n // Maintain form state of auth / upload fields\n if (collectionSlug && formState) {\n if (req.payload.collections[collectionSlug]?.config?.upload && formState.file) {\n result.file = formState.file\n }\n }\n\n return result\n}\n"],"names":["reduceFieldsToValues","buildStateFromSchema","buildFieldSchemaMap","cached","global","_payload_fieldSchemaMap","getFieldSchemaMap","req","process","env","NODE_ENV","config","payload","i18n","buildFormState","reqData","data","collectionSlug","formState","globalSlug","locale","operation","schemaPath","incomingUserSlug","user","collection","adminUserSlug","admin","adminAccessFunction","collections","access","canAccessAdmin","Error","hasUsers","find","depth","limit","pagination","docs","length","fieldSchemaMap","id","undefined","schemaPathSegments","split","fieldSchema","fields","globals","slug","has","get","docPreferences","promises","preferencesKey","fetchPreferences","preferencesResult","where","and","key","equals","value","preferences","fetchData","resolvedData","findByID","draft","fallbackLocale","overrideAccess","findGlobal","Object","keys","Promise","all","values","result","upload","file"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/ui",
3
- "version": "3.0.0-beta.74",
3
+ "version": "3.0.0-beta.76",
4
4
  "homepage": "https://payloadcms.com",
5
5
  "repository": {
6
6
  "type": "git",
@@ -103,7 +103,7 @@
103
103
  "sonner": "^1.5.0",
104
104
  "use-context-selector": "2.0.0",
105
105
  "uuid": "10.0.0",
106
- "@payloadcms/translations": "3.0.0-beta.74"
106
+ "@payloadcms/translations": "3.0.0-beta.76"
107
107
  },
108
108
  "devDependencies": {
109
109
  "@babel/cli": "^7.24.5",
@@ -121,13 +121,13 @@
121
121
  "esbuild": "0.23.0",
122
122
  "esbuild-sass-plugin": "3.3.1",
123
123
  "@payloadcms/eslint-config": "3.0.0-beta.59",
124
- "payload": "3.0.0-beta.74"
124
+ "payload": "3.0.0-beta.76"
125
125
  },
126
126
  "peerDependencies": {
127
- "next": "^15.0.0-canary.53",
128
- "react": "^19.0.0 || ^19.0.0-rc-6230622a1a-20240610",
129
- "react-dom": "^19.0.0 || ^19.0.0-rc-6230622a1a-20240610",
130
- "payload": "3.0.0-beta.74"
127
+ "next": "^15.0.0-canary.104",
128
+ "react": "^19.0.0 || ^19.0.0-rc-06d0b89e-20240801",
129
+ "react-dom": "^19.0.0 || ^19.0.0-rc-06d0b89e-20240801",
130
+ "payload": "3.0.0-beta.76"
131
131
  },
132
132
  "engines": {
133
133
  "node": "^18.20.2 || >=20.9.0"
@@ -1,6 +0,0 @@
1
- import type { PayloadRequest, Permissions } from 'payload';
2
- export declare const HydrateClientUser: React.FC<{
3
- permissions: Permissions;
4
- user: PayloadRequest['user'];
5
- }>;
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/HydrateClientUser/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAM1D,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC;IACvC,WAAW,EAAE,WAAW,CAAA;IACxB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,CASA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/elements/HydrateClientUser/index.tsx"],"sourcesContent":["'use client'\n\nimport type { PayloadRequest, Permissions } from 'payload'\n\nimport { useEffect } from 'react'\n\nimport { useAuth } from '../../providers/Auth/index.js'\n\nexport const HydrateClientUser: React.FC<{\n permissions: Permissions\n user: PayloadRequest['user']\n}> = ({ permissions, user }) => {\n const { setPermissions, setUser } = useAuth()\n\n useEffect(() => {\n setUser(user)\n setPermissions(permissions)\n }, [user, permissions, setUser, setPermissions])\n\n return null\n}\n"],"names":["useEffect","useAuth","HydrateClientUser","permissions","user","setPermissions","setUser"],"mappings":"AAAA;AAIA,SAASA,SAAS,QAAQ,QAAO;AAEjC,SAASC,OAAO,QAAQ,gCAA+B;AAEvD,OAAO,MAAMC,oBAGR,CAAC,EAAEC,WAAW,EAAEC,IAAI,EAAE;IACzB,MAAM,EAAEC,cAAc,EAAEC,OAAO,EAAE,GAAGL;IAEpCD,UAAU;QACRM,QAAQF;QACRC,eAAeF;IACjB,GAAG;QAACC;QAAMD;QAAaG;QAASD;KAAe;IAE/C,OAAO;AACT,EAAC"}