@payloadcms/ui 3.26.0-canary.bbb3083 → 3.27.0-canary.5adb764
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.
- package/dist/elements/AnimateHeight/index.scss +7 -5
- package/dist/elements/AppHeader/index.d.ts.map +1 -1
- package/dist/elements/AppHeader/index.js +1 -1
- package/dist/elements/AppHeader/index.js.map +1 -1
- package/dist/elements/BulkUpload/EditForm/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/EditForm/index.js +1 -1
- package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.js +37 -21
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
- package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
- package/dist/elements/DeleteDocument/index.js +1 -1
- package/dist/elements/DeleteDocument/index.js.map +1 -1
- package/dist/elements/DocumentControls/index.d.ts.map +1 -1
- package/dist/elements/DocumentControls/index.js +1 -1
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
- package/dist/elements/DuplicateDocument/index.js +1 -1
- package/dist/elements/DuplicateDocument/index.js.map +1 -1
- package/dist/elements/FieldSelect/index.js +1 -1
- package/dist/elements/FieldSelect/index.js.map +1 -1
- package/dist/elements/Localizer/index.d.ts.map +1 -1
- package/dist/elements/Localizer/index.js +36 -24
- package/dist/elements/Localizer/index.js.map +1 -1
- package/dist/elements/Logout/index.d.ts.map +1 -1
- package/dist/elements/Logout/index.js +1 -1
- package/dist/elements/Logout/index.js.map +1 -1
- package/dist/elements/Nav/context.d.ts.map +1 -1
- package/dist/elements/Nav/context.js +8 -1
- package/dist/elements/Nav/context.js.map +1 -1
- package/dist/elements/PublishButton/index.js +1 -0
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/RelationshipTable/index.d.ts +1 -1
- package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
- package/dist/elements/RelationshipTable/index.js +4 -11
- package/dist/elements/RelationshipTable/index.js.map +1 -1
- package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
- package/dist/elements/StayLoggedIn/index.js +1 -1
- package/dist/elements/StayLoggedIn/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +1 -2
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/TableColumns/context.d.ts +4 -0
- package/dist/elements/TableColumns/context.d.ts.map +1 -0
- package/dist/elements/TableColumns/context.js +4 -0
- package/dist/elements/TableColumns/context.js.map +1 -0
- package/dist/elements/TableColumns/index.d.ts +3 -31
- package/dist/elements/TableColumns/index.d.ts.map +1 -1
- package/dist/elements/TableColumns/index.js +49 -164
- package/dist/elements/TableColumns/index.js.map +1 -1
- package/dist/elements/TableColumns/types.d.ts +52 -0
- package/dist/elements/TableColumns/types.d.ts.map +1 -0
- package/dist/elements/TableColumns/types.js +2 -0
- package/dist/elements/TableColumns/types.js.map +1 -0
- package/dist/elements/WhereBuilder/Condition/index.d.ts +2 -5
- package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/Condition/index.js +7 -7
- package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
- package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/index.js +22 -31
- package/dist/elements/WhereBuilder/index.js.map +1 -1
- package/dist/elements/WhereBuilder/types.d.ts +6 -2
- package/dist/elements/WhereBuilder/types.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/types.js.map +1 -1
- package/dist/exports/client/index.js +23 -23
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/shared/index.js +2 -2
- package/dist/exports/shared/index.js.map +3 -3
- package/dist/fields/Upload/HasMany/index.d.ts.map +1 -1
- package/dist/fields/Upload/HasMany/index.js +12 -4
- package/dist/fields/Upload/HasMany/index.js.map +1 -1
- package/dist/fields/Upload/HasOne/index.d.ts.map +1 -1
- package/dist/fields/Upload/HasOne/index.js +15 -5
- package/dist/fields/Upload/HasOne/index.js.map +1 -1
- package/dist/fields/Upload/RelationshipContent/index.d.ts +1 -0
- package/dist/fields/Upload/RelationshipContent/index.d.ts.map +1 -1
- package/dist/fields/Upload/RelationshipContent/index.js +13 -11
- package/dist/fields/Upload/RelationshipContent/index.js.map +1 -1
- package/dist/forms/Form/index.d.ts.map +1 -1
- package/dist/forms/Form/index.js +3 -1
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/types.d.ts +4 -0
- package/dist/forms/Form/types.d.ts.map +1 -1
- package/dist/forms/Form/types.js.map +1 -1
- package/dist/graphics/Account/index.d.ts.map +1 -1
- package/dist/graphics/Account/index.js +1 -1
- package/dist/graphics/Account/index.js.map +1 -1
- package/dist/providers/Auth/index.d.ts.map +1 -1
- package/dist/providers/Auth/index.js +1 -1
- package/dist/providers/Auth/index.js.map +1 -1
- package/dist/providers/ListQuery/context.d.ts +4 -0
- package/dist/providers/ListQuery/context.d.ts.map +1 -0
- package/dist/providers/ListQuery/context.js +4 -0
- package/dist/providers/ListQuery/context.js.map +1 -0
- package/dist/providers/ListQuery/index.d.ts +2 -27
- package/dist/providers/ListQuery/index.d.ts.map +1 -1
- package/dist/providers/ListQuery/index.js +51 -37
- package/dist/providers/ListQuery/index.js.map +1 -1
- package/dist/providers/ListQuery/types.d.ts +33 -0
- package/dist/providers/ListQuery/types.d.ts.map +1 -0
- package/dist/providers/ListQuery/types.js +2 -0
- package/dist/providers/ListQuery/types.js.map +1 -0
- package/dist/providers/RouteTransition/ProgressBar/index.scss +19 -17
- package/dist/styles.css +1 -1
- package/dist/utilities/copyDataFromLocale.d.ts.map +1 -1
- package/dist/utilities/copyDataFromLocale.js +6 -2
- package/dist/utilities/copyDataFromLocale.js.map +1 -1
- package/dist/utilities/formatAdminURL.d.ts +1 -7
- package/dist/utilities/formatAdminURL.d.ts.map +1 -1
- package/dist/utilities/formatAdminURL.js +1 -18
- package/dist/utilities/formatAdminURL.js.map +1 -1
- package/dist/utilities/handleBackToDashboard.js +1 -1
- package/dist/utilities/handleBackToDashboard.js.map +1 -1
- package/dist/utilities/handleFormStateLocking.d.ts.map +1 -1
- package/dist/utilities/handleFormStateLocking.js +4 -2
- package/dist/utilities/handleFormStateLocking.js.map +1 -1
- package/dist/utilities/handleGoBack.js +1 -1
- package/dist/utilities/handleGoBack.js.map +1 -1
- package/dist/views/Edit/SetDocumentStepNav/index.js +1 -1
- package/dist/views/Edit/SetDocumentStepNav/index.js.map +1 -1
- package/dist/views/Edit/index.d.ts.map +1 -1
- package/dist/views/Edit/index.js +1 -1
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +0 -7
- package/dist/views/List/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useModal","usePathname","useRouter","qs","React","createContext","useCallback","useContext","useEffect","useState","toast","stayLoggedInModalSlug","useDebounce","useTranslation","requests","formatAdminURL","useConfig","useRouteTransition","Context","maxTimeoutTime","AuthProvider","children","permissions","initialPermissions","user","initialUser","setUserInMemory","tokenInMemory","setTokenInMemory","tokenExpiration","setTokenExpiration","pathname","router","config","admin","routes","inactivity","logoutInactivityRoute","userSlug","adminRoute","api","apiRoute","serverURL","setPermissions","i18n","closeAllModals","openModal","lastLocationChange","setLastLocationChange","debouncedLocationChange","refreshTokenTimeoutRef","useRef","startRouteTransition","id","redirectToInactivityRoute","replace","path","window","location","startsWith","encodeURIComponent","revokeTokenAndExpire","undefined","clearTimeout","current","setNewUser","userResponse","token","exp","refreshCookie","forceRefresh","now","Math","round","Date","getTime","remainingTime","setTimeout","refresh","request","post","headers","language","status","json","e","error","message","refreshCookieAsync","skipSetUser","logOut","collection","refreshPermissions","locale","params","stringify","addQueryPrefix","get","Error","fetchFullUser","credentials","reminder","forceLogOut","remindInTimeFromNow","max","min","forceLogOutInTimeFromNow","_jsx","Provider","value","setUser","useAuth"],"sources":["../../../src/providers/Auth/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientUser, SanitizedPermissions, User } 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'\nimport { useRouteTransition } from '../RouteTransition/index.js'\n\nexport type UserWithToken<T = ClientUser> = {\n exp: number\n token: string\n user: T\n}\n\nexport type AuthContext<T = ClientUser> = {\n fetchFullUser: () => Promise<null | User>\n logOut: () => Promise<boolean>\n permissions?: SanitizedPermissions\n refreshCookie: (forceRefresh?: boolean) => void\n refreshCookieAsync: () => Promise<ClientUser>\n refreshPermissions: () => Promise<void>\n setPermissions: (permissions: SanitizedPermissions) => void\n setUser: (user: null | UserWithToken<T>) => void\n strategy?: string\n token?: string\n tokenExpiration?: number\n user?: null | T\n}\n\nconst Context = createContext({} as AuthContext)\n\nconst maxTimeoutTime = 2147483647\n\ntype Props = {\n children: React.ReactNode\n permissions?: SanitizedPermissions\n user?: ClientUser | null\n}\n\nexport function AuthProvider({\n children,\n permissions: initialPermissions,\n user: initialUser,\n}: Props) {\n const [user, setUserInMemory] = 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<SanitizedPermissions>(initialPermissions)\n\n const { i18n } = useTranslation()\n const { closeAllModals, openModal } = useModal()\n const [lastLocationChange, setLastLocationChange] = useState(0)\n const debouncedLocationChange = useDebounce(lastLocationChange, 10000)\n const refreshTokenTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n const { startRouteTransition } = useRouteTransition()\n\n const id = user?.id\n\n const redirectToInactivityRoute = useCallback(() => {\n startRouteTransition(() =>\n router.replace(\n formatAdminURL({\n adminRoute,\n path: `${logoutInactivityRoute}${window.location.pathname.startsWith(adminRoute) ? `?redirect=${encodeURIComponent(window.location.pathname)}` : ''}`,\n }),\n ),\n )\n\n closeAllModals()\n }, [router, adminRoute, logoutInactivityRoute, closeAllModals, startRouteTransition])\n\n const revokeTokenAndExpire = useCallback(() => {\n setTokenInMemory(undefined)\n setTokenExpiration(undefined)\n clearTimeout(refreshTokenTimeoutRef.current)\n }, [])\n\n const setNewUser = useCallback(\n (userResponse: null | UserWithToken) => {\n if (userResponse?.user) {\n setUserInMemory(userResponse.user)\n setTokenInMemory(userResponse.token)\n setTokenExpiration(userResponse.exp)\n } else {\n setUserInMemory(null)\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 refreshTokenTimeoutRef.current = setTimeout(() => {\n async function refresh() {\n try {\n const request = await requests.post(\n `${serverURL}${apiRoute}/${userSlug}/refresh-token?refresh`,\n {\n headers: {\n 'Accept-Language': i18n.language,\n },\n },\n )\n\n if (request.status === 200) {\n const json = await request.json()\n setNewUser(json)\n } else {\n setNewUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(e.message)\n }\n }\n\n void refresh()\n }, 1000)\n }\n\n return () => {\n clearTimeout(refreshTokenTimeoutRef.current)\n }\n },\n [\n apiRoute,\n i18n.language,\n redirectToInactivityRoute,\n serverURL,\n setNewUser,\n tokenExpiration,\n userSlug,\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 setNewUser(json)\n }\n return json.user\n }\n\n setNewUser(null)\n redirectToInactivityRoute()\n return null\n } catch (e) {\n toast.error(`Refreshing token failed: ${e.message}`)\n return null\n }\n },\n [apiRoute, i18n.language, redirectToInactivityRoute, serverURL, setNewUser, userSlug],\n )\n\n const logOut = useCallback(async () => {\n try {\n await requests.post(`${serverURL}${apiRoute}/${user.collection}/logout`)\n setNewUser(null)\n revokeTokenAndExpire()\n return true\n } catch (e) {\n toast.error(`Logging out failed: ${e.message}`)\n return false\n }\n }, [apiRoute, revokeTokenAndExpire, serverURL, setNewUser, user])\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: SanitizedPermissions = 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 credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: UserWithToken = await request.json()\n const user = null\n\n setNewUser(json)\n return user\n }\n } catch (e) {\n toast.error(`Fetching user failed: ${e.message}`)\n }\n\n return null\n }, [serverURL, apiRoute, userSlug, i18n.language, setNewUser])\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 let forceLogOut: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n const remindInTimeFromNow = Math.max(Math.min((remainingTime - 60) * 1000, maxTimeoutTime), 0)\n const forceLogOutInTimeFromNow = Math.max(Math.min(remainingTime * 1000, maxTimeoutTime), 0)\n\n if (!user) {\n clearTimeout(reminder)\n clearTimeout(forceLogOut)\n return\n }\n\n if (remainingTime > 0) {\n reminder = setTimeout(() => {\n openModal(stayLoggedInModalSlug)\n }, remindInTimeFromNow)\n\n forceLogOut = setTimeout(() => {\n setNewUser(null)\n redirectToInactivityRoute()\n }, forceLogOutInTimeFromNow)\n }\n\n return () => {\n if (reminder) {\n clearTimeout(reminder)\n }\n if (forceLogOut) {\n clearTimeout(forceLogOut)\n }\n }\n }, [tokenExpiration, openModal, i18n, setNewUser, user, redirectToInactivityRoute])\n\n return (\n <Context.Provider\n value={{\n fetchFullUser,\n logOut,\n permissions,\n refreshCookie,\n refreshCookieAsync,\n refreshPermissions,\n setPermissions,\n setUser: setNewUser,\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"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useModal","usePathname","useRouter","formatAdminURL","qs","React","createContext","useCallback","useContext","useEffect","useState","toast","stayLoggedInModalSlug","useDebounce","useTranslation","requests","useConfig","useRouteTransition","Context","maxTimeoutTime","AuthProvider","children","permissions","initialPermissions","user","initialUser","setUserInMemory","tokenInMemory","setTokenInMemory","tokenExpiration","setTokenExpiration","pathname","router","config","admin","routes","inactivity","logoutInactivityRoute","userSlug","adminRoute","api","apiRoute","serverURL","setPermissions","i18n","closeAllModals","openModal","lastLocationChange","setLastLocationChange","debouncedLocationChange","refreshTokenTimeoutRef","useRef","startRouteTransition","id","redirectToInactivityRoute","replace","path","window","location","startsWith","encodeURIComponent","revokeTokenAndExpire","undefined","clearTimeout","current","setNewUser","userResponse","token","exp","refreshCookie","forceRefresh","now","Math","round","Date","getTime","remainingTime","setTimeout","refresh","request","post","headers","language","status","json","e","error","message","refreshCookieAsync","skipSetUser","logOut","collection","refreshPermissions","locale","params","stringify","addQueryPrefix","get","Error","fetchFullUser","credentials","reminder","forceLogOut","remindInTimeFromNow","max","min","forceLogOutInTimeFromNow","_jsx","Provider","value","setUser","useAuth"],"sources":["../../../src/providers/Auth/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientUser, SanitizedPermissions, User } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { usePathname, useRouter } from 'next/navigation.js'\nimport { formatAdminURL } from 'payload/shared'\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 { useConfig } from '../Config/index.js'\nimport { useRouteTransition } from '../RouteTransition/index.js'\n\nexport type UserWithToken<T = ClientUser> = {\n exp: number\n token: string\n user: T\n}\n\nexport type AuthContext<T = ClientUser> = {\n fetchFullUser: () => Promise<null | User>\n logOut: () => Promise<boolean>\n permissions?: SanitizedPermissions\n refreshCookie: (forceRefresh?: boolean) => void\n refreshCookieAsync: () => Promise<ClientUser>\n refreshPermissions: () => Promise<void>\n setPermissions: (permissions: SanitizedPermissions) => void\n setUser: (user: null | UserWithToken<T>) => void\n strategy?: string\n token?: string\n tokenExpiration?: number\n user?: null | T\n}\n\nconst Context = createContext({} as AuthContext)\n\nconst maxTimeoutTime = 2147483647\n\ntype Props = {\n children: React.ReactNode\n permissions?: SanitizedPermissions\n user?: ClientUser | null\n}\n\nexport function AuthProvider({\n children,\n permissions: initialPermissions,\n user: initialUser,\n}: Props) {\n const [user, setUserInMemory] = 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<SanitizedPermissions>(initialPermissions)\n\n const { i18n } = useTranslation()\n const { closeAllModals, openModal } = useModal()\n const [lastLocationChange, setLastLocationChange] = useState(0)\n const debouncedLocationChange = useDebounce(lastLocationChange, 10000)\n const refreshTokenTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>(null)\n const { startRouteTransition } = useRouteTransition()\n\n const id = user?.id\n\n const redirectToInactivityRoute = useCallback(() => {\n startRouteTransition(() =>\n router.replace(\n formatAdminURL({\n adminRoute,\n path: `${logoutInactivityRoute}${window.location.pathname.startsWith(adminRoute) ? `?redirect=${encodeURIComponent(window.location.pathname)}` : ''}`,\n }),\n ),\n )\n\n closeAllModals()\n }, [router, adminRoute, logoutInactivityRoute, closeAllModals, startRouteTransition])\n\n const revokeTokenAndExpire = useCallback(() => {\n setTokenInMemory(undefined)\n setTokenExpiration(undefined)\n clearTimeout(refreshTokenTimeoutRef.current)\n }, [])\n\n const setNewUser = useCallback(\n (userResponse: null | UserWithToken) => {\n if (userResponse?.user) {\n setUserInMemory(userResponse.user)\n setTokenInMemory(userResponse.token)\n setTokenExpiration(userResponse.exp)\n } else {\n setUserInMemory(null)\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 refreshTokenTimeoutRef.current = setTimeout(() => {\n async function refresh() {\n try {\n const request = await requests.post(\n `${serverURL}${apiRoute}/${userSlug}/refresh-token?refresh`,\n {\n headers: {\n 'Accept-Language': i18n.language,\n },\n },\n )\n\n if (request.status === 200) {\n const json = await request.json()\n setNewUser(json)\n } else {\n setNewUser(null)\n redirectToInactivityRoute()\n }\n } catch (e) {\n toast.error(e.message)\n }\n }\n\n void refresh()\n }, 1000)\n }\n\n return () => {\n clearTimeout(refreshTokenTimeoutRef.current)\n }\n },\n [\n apiRoute,\n i18n.language,\n redirectToInactivityRoute,\n serverURL,\n setNewUser,\n tokenExpiration,\n userSlug,\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 setNewUser(json)\n }\n return json.user\n }\n\n setNewUser(null)\n redirectToInactivityRoute()\n return null\n } catch (e) {\n toast.error(`Refreshing token failed: ${e.message}`)\n return null\n }\n },\n [apiRoute, i18n.language, redirectToInactivityRoute, serverURL, setNewUser, userSlug],\n )\n\n const logOut = useCallback(async () => {\n try {\n await requests.post(`${serverURL}${apiRoute}/${user.collection}/logout`)\n setNewUser(null)\n revokeTokenAndExpire()\n return true\n } catch (e) {\n toast.error(`Logging out failed: ${e.message}`)\n return false\n }\n }, [apiRoute, revokeTokenAndExpire, serverURL, setNewUser, user])\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: SanitizedPermissions = 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 credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (request.status === 200) {\n const json: UserWithToken = await request.json()\n const user = null\n\n setNewUser(json)\n return user\n }\n } catch (e) {\n toast.error(`Fetching user failed: ${e.message}`)\n }\n\n return null\n }, [serverURL, apiRoute, userSlug, i18n.language, setNewUser])\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 let forceLogOut: ReturnType<typeof setTimeout>\n const now = Math.round(new Date().getTime() / 1000)\n const remainingTime = typeof tokenExpiration === 'number' ? tokenExpiration - now : 0\n const remindInTimeFromNow = Math.max(Math.min((remainingTime - 60) * 1000, maxTimeoutTime), 0)\n const forceLogOutInTimeFromNow = Math.max(Math.min(remainingTime * 1000, maxTimeoutTime), 0)\n\n if (!user) {\n clearTimeout(reminder)\n clearTimeout(forceLogOut)\n return\n }\n\n if (remainingTime > 0) {\n reminder = setTimeout(() => {\n openModal(stayLoggedInModalSlug)\n }, remindInTimeFromNow)\n\n forceLogOut = setTimeout(() => {\n setNewUser(null)\n redirectToInactivityRoute()\n }, forceLogOutInTimeFromNow)\n }\n\n return () => {\n if (reminder) {\n clearTimeout(reminder)\n }\n if (forceLogOut) {\n clearTimeout(forceLogOut)\n }\n }\n }, [tokenExpiration, openModal, i18n, setNewUser, user, redirectToInactivityRoute])\n\n return (\n <Context.Provider\n value={{\n fetchFullUser,\n logOut,\n permissions,\n refreshCookie,\n refreshCookieAsync,\n refreshPermissions,\n setPermissions,\n setUser: setNewUser,\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"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/providers/ListQuery/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,eAAO,MAAM,gBAAgB,4CAAyC,CAAA;AAEtE,eAAO,MAAM,YAAY,QAAO,iBAAiD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","names":["createContext","useContext","ListQueryContext","useListQuery"],"sources":["../../../src/providers/ListQuery/context.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\n\nimport type { IListQueryContext } from './types.js'\n\nexport const ListQueryContext = createContext({} as IListQueryContext)\n\nexport const useListQuery = (): IListQueryContext => useContext(ListQueryContext)\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ;AAI1C,OAAO,MAAMC,gBAAA,GAAmBF,aAAA,CAAc,CAAC;AAE/C,OAAO,MAAMG,YAAA,GAAeA,CAAA,KAAyBF,UAAA,CAAWC,gBAAA","ignoreList":[]}
|
|
@@ -1,30 +1,5 @@
|
|
|
1
|
-
import type { ListQuery, PaginatedDocs, Sort, Where } from 'payload';
|
|
2
1
|
import React from 'react';
|
|
3
|
-
type
|
|
4
|
-
|
|
5
|
-
handlePerPageChange?: (limit: number) => Promise<void>;
|
|
6
|
-
handleSearchChange?: (search: string) => Promise<void>;
|
|
7
|
-
handleSortChange?: (sort: string) => Promise<void>;
|
|
8
|
-
handleWhereChange?: (where: Where) => Promise<void>;
|
|
9
|
-
};
|
|
10
|
-
export type ListQueryProps = {
|
|
11
|
-
readonly children: React.ReactNode;
|
|
12
|
-
readonly collectionSlug?: string;
|
|
13
|
-
readonly data: PaginatedDocs;
|
|
14
|
-
readonly defaultLimit?: number;
|
|
15
|
-
readonly defaultSort?: Sort;
|
|
16
|
-
readonly modifySearchParams?: boolean;
|
|
17
|
-
readonly onQueryChange?: (query: ListQuery) => void;
|
|
18
|
-
readonly preferenceKey?: string;
|
|
19
|
-
};
|
|
20
|
-
export type ListQueryContext = {
|
|
21
|
-
data: PaginatedDocs;
|
|
22
|
-
defaultLimit?: number;
|
|
23
|
-
defaultSort?: Sort;
|
|
24
|
-
query: ListQuery;
|
|
25
|
-
refineListData: (args: ListQuery) => Promise<void>;
|
|
26
|
-
} & ContextHandlers;
|
|
27
|
-
export declare const useListQuery: () => ListQueryContext;
|
|
2
|
+
import type { ListQueryProps } from './types.js';
|
|
3
|
+
export { useListQuery } from './context.js';
|
|
28
4
|
export declare const ListQueryProvider: React.FC<ListQueryProps>;
|
|
29
|
-
export {};
|
|
30
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/ListQuery/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/ListQuery/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAQhD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAkLtD,CAAA"}
|
|
@@ -2,20 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
4
|
import { useRouter, useSearchParams } from 'next/navigation.js';
|
|
5
|
-
import { isNumber } from 'payload/shared';
|
|
5
|
+
import { isNumber, transformColumnsToSearchParams } from 'payload/shared';
|
|
6
6
|
import * as qs from 'qs-esm';
|
|
7
|
-
import React, {
|
|
7
|
+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
8
8
|
import { useListDrawerContext } from '../../elements/ListDrawer/Provider.js';
|
|
9
|
+
import { useEffectEvent } from '../../hooks/useEffectEvent.js';
|
|
10
|
+
import { useRouteTransition } from '../../providers/RouteTransition/index.js';
|
|
9
11
|
import { parseSearchParams } from '../../utilities/parseSearchParams.js';
|
|
10
|
-
|
|
11
|
-
export
|
|
12
|
-
return useContext(Context);
|
|
13
|
-
};
|
|
12
|
+
import { ListQueryContext } from './context.js';
|
|
13
|
+
export { useListQuery } from './context.js';
|
|
14
14
|
export const ListQueryProvider = ({
|
|
15
15
|
children,
|
|
16
|
+
columns,
|
|
16
17
|
data,
|
|
17
18
|
defaultLimit,
|
|
18
19
|
defaultSort,
|
|
20
|
+
listPreferences,
|
|
19
21
|
modifySearchParams,
|
|
20
22
|
onQueryChange: onQueryChangeFromProps
|
|
21
23
|
}) => {
|
|
@@ -23,6 +25,9 @@ export const ListQueryProvider = ({
|
|
|
23
25
|
|
|
24
26
|
const router = useRouter();
|
|
25
27
|
const rawSearchParams = useSearchParams();
|
|
28
|
+
const {
|
|
29
|
+
startRouteTransition
|
|
30
|
+
} = useRouteTransition();
|
|
26
31
|
const searchParams = useMemo(() => parseSearchParams(rawSearchParams), [rawSearchParams]);
|
|
27
32
|
const {
|
|
28
33
|
onQueryChange
|
|
@@ -34,13 +39,6 @@ export const ListQueryProvider = ({
|
|
|
34
39
|
return {};
|
|
35
40
|
}
|
|
36
41
|
});
|
|
37
|
-
const currentQueryRef = React.useRef(currentQuery);
|
|
38
|
-
// If the search params change externally, update the current query
|
|
39
|
-
useEffect(() => {
|
|
40
|
-
if (modifySearchParams) {
|
|
41
|
-
setCurrentQuery(searchParams);
|
|
42
|
-
}
|
|
43
|
-
}, [searchParams, modifySearchParams]);
|
|
44
42
|
const refineListData = useCallback(
|
|
45
43
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
46
44
|
async query => {
|
|
@@ -49,6 +47,7 @@ export const ListQueryProvider = ({
|
|
|
49
47
|
page = '1';
|
|
50
48
|
}
|
|
51
49
|
const newQuery = {
|
|
50
|
+
columns: 'columns' in query ? query.columns : currentQuery.columns,
|
|
52
51
|
limit: 'limit' in query ? query.limit : currentQuery?.limit ?? String(defaultLimit),
|
|
53
52
|
page,
|
|
54
53
|
search: 'search' in query ? query.search : currentQuery?.search,
|
|
@@ -56,15 +55,18 @@ export const ListQueryProvider = ({
|
|
|
56
55
|
where: 'where' in query ? query.where : currentQuery?.where
|
|
57
56
|
};
|
|
58
57
|
if (modifySearchParams) {
|
|
59
|
-
router.replace(`${qs.stringify(
|
|
58
|
+
startRouteTransition(() => router.replace(`${qs.stringify({
|
|
59
|
+
...newQuery,
|
|
60
|
+
columns: JSON.stringify(newQuery.columns)
|
|
61
|
+
}, {
|
|
60
62
|
addQueryPrefix: true
|
|
61
|
-
})}`);
|
|
63
|
+
})}`));
|
|
62
64
|
} else if (typeof onQueryChange === 'function' || typeof onQueryChangeFromProps === 'function') {
|
|
63
65
|
const onChangeFn = onQueryChange || onQueryChangeFromProps;
|
|
64
66
|
onChangeFn(newQuery);
|
|
65
67
|
}
|
|
66
68
|
setCurrentQuery(newQuery);
|
|
67
|
-
}, [currentQuery?.
|
|
69
|
+
}, [currentQuery?.columns, currentQuery?.limit, currentQuery?.page, currentQuery?.search, currentQuery?.sort, currentQuery?.where, startRouteTransition, defaultLimit, defaultSort, modifySearchParams, onQueryChange, onQueryChangeFromProps, router]);
|
|
68
70
|
const handlePageChange = useCallback(async arg => {
|
|
69
71
|
await refineListData({
|
|
70
72
|
page: String(arg)
|
|
@@ -92,32 +94,44 @@ export const ListQueryProvider = ({
|
|
|
92
94
|
where: arg_3
|
|
93
95
|
});
|
|
94
96
|
}, [refineListData]);
|
|
97
|
+
const syncQuery = useEffectEvent(() => {
|
|
98
|
+
let shouldUpdateQueryString = false;
|
|
99
|
+
const newQuery_0 = {
|
|
100
|
+
...(currentQuery || {})
|
|
101
|
+
};
|
|
102
|
+
// Allow the URL to override the default limit
|
|
103
|
+
if (isNumber(defaultLimit) && !('limit' in currentQuery)) {
|
|
104
|
+
newQuery_0.limit = String(defaultLimit);
|
|
105
|
+
shouldUpdateQueryString = true;
|
|
106
|
+
}
|
|
107
|
+
// Allow the URL to override the default sort
|
|
108
|
+
if (defaultSort && !('sort' in currentQuery)) {
|
|
109
|
+
newQuery_0.sort = defaultSort;
|
|
110
|
+
shouldUpdateQueryString = true;
|
|
111
|
+
}
|
|
112
|
+
// Only modify columns if they originated from preferences
|
|
113
|
+
// We can assume they did if `listPreferences.columns` is defined
|
|
114
|
+
if (columns && listPreferences?.columns && !('columns' in currentQuery)) {
|
|
115
|
+
newQuery_0.columns = transformColumnsToSearchParams(columns);
|
|
116
|
+
shouldUpdateQueryString = true;
|
|
117
|
+
}
|
|
118
|
+
if (shouldUpdateQueryString) {
|
|
119
|
+
setCurrentQuery(newQuery_0);
|
|
120
|
+
// Do not use router.replace here to avoid re-rendering on initial load
|
|
121
|
+
window.history.replaceState(null, '', `?${qs.stringify({
|
|
122
|
+
...newQuery_0,
|
|
123
|
+
columns: JSON.stringify(newQuery_0.columns)
|
|
124
|
+
})}`);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
95
127
|
// If `defaultLimit` or `defaultSort` are updated externally, update the query
|
|
96
128
|
// I.e. when HMR runs, these properties may be different
|
|
97
129
|
useEffect(() => {
|
|
98
130
|
if (modifySearchParams) {
|
|
99
|
-
|
|
100
|
-
const newQuery_0 = {
|
|
101
|
-
...(currentQueryRef.current || {})
|
|
102
|
-
};
|
|
103
|
-
// Allow the URL to override the default limit
|
|
104
|
-
if (isNumber(defaultLimit) && !('limit' in currentQueryRef.current)) {
|
|
105
|
-
newQuery_0.limit = String(defaultLimit);
|
|
106
|
-
shouldUpdateQueryString = true;
|
|
107
|
-
}
|
|
108
|
-
// Allow the URL to override the default sort
|
|
109
|
-
if (defaultSort && !('sort' in currentQueryRef.current)) {
|
|
110
|
-
newQuery_0.sort = defaultSort;
|
|
111
|
-
shouldUpdateQueryString = true;
|
|
112
|
-
}
|
|
113
|
-
if (shouldUpdateQueryString) {
|
|
114
|
-
setCurrentQuery(newQuery_0);
|
|
115
|
-
// Do not use router.replace here to avoid re-rendering on initial load
|
|
116
|
-
window.history.replaceState(null, '', `?${qs.stringify(newQuery_0)}`);
|
|
117
|
-
}
|
|
131
|
+
syncQuery();
|
|
118
132
|
}
|
|
119
|
-
}, [defaultSort, defaultLimit,
|
|
120
|
-
return /*#__PURE__*/_jsx(
|
|
133
|
+
}, [defaultSort, defaultLimit, modifySearchParams, columns]);
|
|
134
|
+
return /*#__PURE__*/_jsx(ListQueryContext.Provider, {
|
|
121
135
|
value: {
|
|
122
136
|
data,
|
|
123
137
|
handlePageChange,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useRouter","useSearchParams","isNumber","qs","React","createContext","useCallback","useContext","useEffect","useMemo","useState","useListDrawerContext","parseSearchParams","Context","useListQuery","ListQueryProvider","children","data","defaultLimit","defaultSort","modifySearchParams","onQueryChange","onQueryChangeFromProps","router","rawSearchParams","searchParams","currentQuery","setCurrentQuery","currentQueryRef","useRef","refineListData","query","page","newQuery","limit","String","search","sort","where","replace","stringify","addQueryPrefix","onChangeFn","handlePageChange","arg","handlePerPageChange","handleSearchChange","undefined","handleSortChange","handleWhereChange","shouldUpdateQueryString","current","window","history","replaceState","_jsx","Provider","value"],"sources":["../../../src/providers/ListQuery/index.tsx"],"sourcesContent":["'use client'\nimport type { ListQuery, PaginatedDocs, Sort, Where } from 'payload'\n\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { isNumber } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'\n\nimport { useListDrawerContext } from '../../elements/ListDrawer/Provider.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\n\ntype ContextHandlers = {\n handlePageChange?: (page: number) => Promise<void>\n handlePerPageChange?: (limit: number) => Promise<void>\n handleSearchChange?: (search: string) => Promise<void>\n handleSortChange?: (sort: string) => Promise<void>\n handleWhereChange?: (where: Where) => Promise<void>\n}\n\nexport type ListQueryProps = {\n readonly children: React.ReactNode\n readonly collectionSlug?: string\n readonly data: PaginatedDocs\n readonly defaultLimit?: number\n readonly defaultSort?: Sort\n readonly modifySearchParams?: boolean\n readonly onQueryChange?: (query: ListQuery) => void\n readonly preferenceKey?: string\n}\n\nexport type ListQueryContext = {\n data: PaginatedDocs\n defaultLimit?: number\n defaultSort?: Sort\n query: ListQuery\n refineListData: (args: ListQuery) => Promise<void>\n} & ContextHandlers\n\nconst Context = createContext({} as ListQueryContext)\n\nexport const useListQuery = (): ListQueryContext => useContext(Context)\n\nexport const ListQueryProvider: React.FC<ListQueryProps> = ({\n children,\n data,\n defaultLimit,\n defaultSort,\n modifySearchParams,\n onQueryChange: onQueryChangeFromProps,\n}) => {\n 'use no memo'\n const router = useRouter()\n const rawSearchParams = useSearchParams()\n const searchParams = useMemo(() => parseSearchParams(rawSearchParams), [rawSearchParams])\n\n const { onQueryChange } = useListDrawerContext()\n\n const [currentQuery, setCurrentQuery] = useState<ListQuery>(() => {\n if (modifySearchParams) {\n return searchParams\n } else {\n return {}\n }\n })\n\n const currentQueryRef = React.useRef(currentQuery)\n\n // If the search params change externally, update the current query\n useEffect(() => {\n if (modifySearchParams) {\n setCurrentQuery(searchParams)\n }\n }, [searchParams, modifySearchParams])\n\n const refineListData = useCallback(\n // eslint-disable-next-line @typescript-eslint/require-await\n async (query: ListQuery) => {\n let page = 'page' in query ? query.page : currentQuery?.page\n\n if ('where' in query || 'search' in query) {\n page = '1'\n }\n\n const newQuery: ListQuery = {\n limit: 'limit' in query ? query.limit : (currentQuery?.limit ?? String(defaultLimit)),\n page,\n search: 'search' in query ? query.search : currentQuery?.search,\n sort: 'sort' in query ? query.sort : ((currentQuery?.sort as string) ?? defaultSort),\n where: 'where' in query ? query.where : currentQuery?.where,\n }\n\n if (modifySearchParams) {\n router.replace(`${qs.stringify(newQuery, { addQueryPrefix: true })}`)\n } else if (\n typeof onQueryChange === 'function' ||\n typeof onQueryChangeFromProps === 'function'\n ) {\n const onChangeFn = onQueryChange || onQueryChangeFromProps\n onChangeFn(newQuery)\n }\n\n setCurrentQuery(newQuery)\n },\n [\n currentQuery?.page,\n currentQuery?.limit,\n currentQuery?.search,\n currentQuery?.sort,\n currentQuery?.where,\n defaultLimit,\n defaultSort,\n modifySearchParams,\n onQueryChange,\n onQueryChangeFromProps,\n router,\n ],\n )\n\n const handlePageChange = useCallback(\n async (arg: number) => {\n await refineListData({ page: String(arg) })\n },\n [refineListData],\n )\n\n const handlePerPageChange = React.useCallback(\n async (arg: number) => {\n await refineListData({ limit: String(arg), page: '1' })\n },\n [refineListData],\n )\n\n const handleSearchChange = useCallback(\n async (arg: string) => {\n const search = arg === '' ? undefined : arg\n await refineListData({ search })\n },\n [refineListData],\n )\n\n const handleSortChange = useCallback(\n async (arg: string) => {\n await refineListData({ sort: arg })\n },\n [refineListData],\n )\n\n const handleWhereChange = useCallback(\n async (arg: Where) => {\n await refineListData({ where: arg })\n },\n [refineListData],\n )\n\n // If `defaultLimit` or `defaultSort` are updated externally, update the query\n // I.e. when HMR runs, these properties may be different\n useEffect(() => {\n if (modifySearchParams) {\n let shouldUpdateQueryString = false\n const newQuery = { ...(currentQueryRef.current || {}) }\n\n // Allow the URL to override the default limit\n if (isNumber(defaultLimit) && !('limit' in currentQueryRef.current)) {\n newQuery.limit = String(defaultLimit)\n shouldUpdateQueryString = true\n }\n\n // Allow the URL to override the default sort\n if (defaultSort && !('sort' in currentQueryRef.current)) {\n newQuery.sort = defaultSort\n shouldUpdateQueryString = true\n }\n\n if (shouldUpdateQueryString) {\n setCurrentQuery(newQuery)\n // Do not use router.replace here to avoid re-rendering on initial load\n window.history.replaceState(null, '', `?${qs.stringify(newQuery)}`)\n }\n }\n }, [defaultSort, defaultLimit, router, modifySearchParams])\n\n return (\n <Context.Provider\n value={{\n data,\n handlePageChange,\n handlePerPageChange,\n handleSearchChange,\n handleSortChange,\n handleWhereChange,\n query: currentQuery,\n refineListData,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useRouter","useSearchParams","isNumber","transformColumnsToSearchParams","qs","React","useCallback","useEffect","useMemo","useState","useListDrawerContext","useEffectEvent","useRouteTransition","parseSearchParams","ListQueryContext","useListQuery","ListQueryProvider","children","columns","data","defaultLimit","defaultSort","listPreferences","modifySearchParams","onQueryChange","onQueryChangeFromProps","router","rawSearchParams","startRouteTransition","searchParams","currentQuery","setCurrentQuery","refineListData","query","page","newQuery","limit","String","search","sort","where","replace","stringify","JSON","addQueryPrefix","onChangeFn","handlePageChange","arg","handlePerPageChange","handleSearchChange","undefined","handleSortChange","handleWhereChange","syncQuery","shouldUpdateQueryString","window","history","replaceState","_jsx","Provider","value"],"sources":["../../../src/providers/ListQuery/index.tsx"],"sourcesContent":["'use client'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { type ListQuery, type Where } from 'payload'\nimport { isNumber, transformColumnsToSearchParams } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { ListQueryProps } from './types.js'\n\nimport { useListDrawerContext } from '../../elements/ListDrawer/Provider.js'\nimport { useEffectEvent } from '../../hooks/useEffectEvent.js'\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { ListQueryContext } from './context.js'\n\nexport { useListQuery } from './context.js'\n\nexport const ListQueryProvider: React.FC<ListQueryProps> = ({\n children,\n columns,\n data,\n defaultLimit,\n defaultSort,\n listPreferences,\n modifySearchParams,\n onQueryChange: onQueryChangeFromProps,\n}) => {\n 'use no memo'\n const router = useRouter()\n const rawSearchParams = useSearchParams()\n const { startRouteTransition } = useRouteTransition()\n\n const searchParams = useMemo<ListQuery>(\n () => parseSearchParams(rawSearchParams),\n [rawSearchParams],\n )\n\n const { onQueryChange } = useListDrawerContext()\n\n const [currentQuery, setCurrentQuery] = useState<ListQuery>(() => {\n if (modifySearchParams) {\n return searchParams\n } else {\n return {}\n }\n })\n\n const refineListData = useCallback(\n // eslint-disable-next-line @typescript-eslint/require-await\n async (query: ListQuery) => {\n let page = 'page' in query ? query.page : currentQuery?.page\n\n if ('where' in query || 'search' in query) {\n page = '1'\n }\n\n const newQuery: ListQuery = {\n columns: 'columns' in query ? query.columns : currentQuery.columns,\n limit: 'limit' in query ? query.limit : (currentQuery?.limit ?? String(defaultLimit)),\n page,\n search: 'search' in query ? query.search : currentQuery?.search,\n sort: 'sort' in query ? query.sort : ((currentQuery?.sort as string) ?? defaultSort),\n where: 'where' in query ? query.where : currentQuery?.where,\n }\n\n if (modifySearchParams) {\n startRouteTransition(() =>\n router.replace(\n `${qs.stringify(\n { ...newQuery, columns: JSON.stringify(newQuery.columns) },\n { addQueryPrefix: true },\n )}`,\n ),\n )\n } else if (\n typeof onQueryChange === 'function' ||\n typeof onQueryChangeFromProps === 'function'\n ) {\n const onChangeFn = onQueryChange || onQueryChangeFromProps\n onChangeFn(newQuery)\n }\n\n setCurrentQuery(newQuery)\n },\n [\n currentQuery?.columns,\n currentQuery?.limit,\n currentQuery?.page,\n currentQuery?.search,\n currentQuery?.sort,\n currentQuery?.where,\n startRouteTransition,\n defaultLimit,\n defaultSort,\n modifySearchParams,\n onQueryChange,\n onQueryChangeFromProps,\n router,\n ],\n )\n\n const handlePageChange = useCallback(\n async (arg: number) => {\n await refineListData({ page: String(arg) })\n },\n [refineListData],\n )\n\n const handlePerPageChange = React.useCallback(\n async (arg: number) => {\n await refineListData({ limit: String(arg), page: '1' })\n },\n [refineListData],\n )\n\n const handleSearchChange = useCallback(\n async (arg: string) => {\n const search = arg === '' ? undefined : arg\n await refineListData({ search })\n },\n [refineListData],\n )\n\n const handleSortChange = useCallback(\n async (arg: string) => {\n await refineListData({ sort: arg })\n },\n [refineListData],\n )\n\n const handleWhereChange = useCallback(\n async (arg: Where) => {\n await refineListData({ where: arg })\n },\n [refineListData],\n )\n\n const syncQuery = useEffectEvent(() => {\n let shouldUpdateQueryString = false\n const newQuery = { ...(currentQuery || {}) }\n\n // Allow the URL to override the default limit\n if (isNumber(defaultLimit) && !('limit' in currentQuery)) {\n newQuery.limit = String(defaultLimit)\n shouldUpdateQueryString = true\n }\n\n // Allow the URL to override the default sort\n if (defaultSort && !('sort' in currentQuery)) {\n newQuery.sort = defaultSort\n shouldUpdateQueryString = true\n }\n\n // Only modify columns if they originated from preferences\n // We can assume they did if `listPreferences.columns` is defined\n if (columns && listPreferences?.columns && !('columns' in currentQuery)) {\n newQuery.columns = transformColumnsToSearchParams(columns)\n shouldUpdateQueryString = true\n }\n\n if (shouldUpdateQueryString) {\n setCurrentQuery(newQuery)\n // Do not use router.replace here to avoid re-rendering on initial load\n window.history.replaceState(\n null,\n '',\n `?${qs.stringify({ ...newQuery, columns: JSON.stringify(newQuery.columns) })}`,\n )\n }\n })\n\n // If `defaultLimit` or `defaultSort` are updated externally, update the query\n // I.e. when HMR runs, these properties may be different\n useEffect(() => {\n if (modifySearchParams) {\n syncQuery()\n }\n }, [defaultSort, defaultLimit, modifySearchParams, columns])\n\n return (\n <ListQueryContext.Provider\n value={{\n data,\n handlePageChange,\n handlePerPageChange,\n handleSearchChange,\n handleSortChange,\n handleWhereChange,\n query: currentQuery,\n refineListData,\n }}\n >\n {children}\n </ListQueryContext.Provider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ColumnPreference, ListPreferences, ListQuery, PaginatedDocs, Sort, Where } from 'payload';
|
|
2
|
+
type ContextHandlers = {
|
|
3
|
+
handlePageChange?: (page: number) => Promise<void>;
|
|
4
|
+
handlePerPageChange?: (limit: number) => Promise<void>;
|
|
5
|
+
handleSearchChange?: (search: string) => Promise<void>;
|
|
6
|
+
handleSortChange?: (sort: string) => Promise<void>;
|
|
7
|
+
handleWhereChange?: (where: Where) => Promise<void>;
|
|
8
|
+
};
|
|
9
|
+
export type OnListQueryChange = (query: ListQuery) => void;
|
|
10
|
+
export type ListQueryProps = {
|
|
11
|
+
readonly children: React.ReactNode;
|
|
12
|
+
readonly collectionSlug?: string;
|
|
13
|
+
readonly columns?: ColumnPreference[];
|
|
14
|
+
readonly data: PaginatedDocs;
|
|
15
|
+
readonly defaultLimit?: number;
|
|
16
|
+
readonly defaultSort?: Sort;
|
|
17
|
+
readonly listPreferences?: ListPreferences;
|
|
18
|
+
readonly modifySearchParams?: boolean;
|
|
19
|
+
readonly onQueryChange?: OnListQueryChange;
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated
|
|
22
|
+
*/
|
|
23
|
+
readonly preferenceKey?: string;
|
|
24
|
+
};
|
|
25
|
+
export type IListQueryContext = {
|
|
26
|
+
data: PaginatedDocs;
|
|
27
|
+
defaultLimit?: number;
|
|
28
|
+
defaultSort?: Sort;
|
|
29
|
+
query: ListQuery;
|
|
30
|
+
refineListData: (args: ListQuery) => Promise<void>;
|
|
31
|
+
} & ContextHandlers;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/ListQuery/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,aAAa,EACb,IAAI,EACJ,KAAK,EACN,MAAM,SAAS,CAAA;AAEhB,KAAK,eAAe,GAAG;IACrB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACpD,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAA;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAA;IAC1C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAA;IAC1C;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,aAAa,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,IAAI,CAAA;IAClB,KAAK,EAAE,SAAS,CAAA;IAChB,cAAc,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACnD,GAAG,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../src/providers/ListQuery/types.ts"],"sourcesContent":["import type {\n ColumnPreference,\n ListPreferences,\n ListQuery,\n PaginatedDocs,\n Sort,\n Where,\n} from 'payload'\n\ntype ContextHandlers = {\n handlePageChange?: (page: number) => Promise<void>\n handlePerPageChange?: (limit: number) => Promise<void>\n handleSearchChange?: (search: string) => Promise<void>\n handleSortChange?: (sort: string) => Promise<void>\n handleWhereChange?: (where: Where) => Promise<void>\n}\n\nexport type OnListQueryChange = (query: ListQuery) => void\n\nexport type ListQueryProps = {\n readonly children: React.ReactNode\n readonly collectionSlug?: string\n readonly columns?: ColumnPreference[]\n readonly data: PaginatedDocs\n readonly defaultLimit?: number\n readonly defaultSort?: Sort\n readonly listPreferences?: ListPreferences\n readonly modifySearchParams?: boolean\n readonly onQueryChange?: OnListQueryChange\n /**\n * @deprecated\n */\n readonly preferenceKey?: string\n}\n\nexport type IListQueryContext = {\n data: PaginatedDocs\n defaultLimit?: number\n defaultSort?: Sort\n query: ListQuery\n refineListData: (args: ListQuery) => Promise<void>\n} & ContextHandlers\n"],"mappings":"AAmCA","ignoreList":[]}
|
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
@layer payload-default {
|
|
2
|
+
.progress-bar {
|
|
3
|
+
position: fixed;
|
|
4
|
+
top: 0;
|
|
5
|
+
left: 0;
|
|
6
|
+
width: 100%;
|
|
7
|
+
height: 2px;
|
|
8
|
+
z-index: 9999;
|
|
9
|
+
opacity: 1;
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
&__progress {
|
|
12
|
+
height: 100%;
|
|
13
|
+
background-color: var(--theme-elevation-1000);
|
|
14
|
+
transition: width ease-in var(--transition-duration);
|
|
15
|
+
}
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
&--fade-out {
|
|
18
|
+
opacity: 0;
|
|
19
|
+
transition: opacity linear var(--transition-duration);
|
|
20
|
+
transition-delay: var(--transition-duration);
|
|
21
|
+
}
|
|
20
22
|
}
|
|
21
23
|
}
|