@atomic-solutions/wordpress-react 0.1.0 → 0.2.0
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/{chunk-3MTIYB4V.js → chunk-5PIK3BB6.js} +7 -5
- package/dist/chunk-5PIK3BB6.js.map +1 -0
- package/dist/hooks/index.cjs +6 -4
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.d.cts +5 -1815
- package/dist/hooks/index.d.ts +5 -1815
- package/dist/hooks/index.js +1 -1
- package/dist/index-Cc8n-JUw.d.cts +1822 -0
- package/dist/index-KQf_Lfz0.d.ts +1822 -0
- package/dist/index.cjs +6 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-3MTIYB4V.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -124,7 +124,7 @@ var usePosts = (params, options) => {
|
|
|
124
124
|
...options
|
|
125
125
|
});
|
|
126
126
|
};
|
|
127
|
-
var useInfinitePosts = (params) => {
|
|
127
|
+
var useInfinitePosts = (params, options) => {
|
|
128
128
|
const client = useWordPressClient();
|
|
129
129
|
const queryKeys2 = useWordPressQueryKeys();
|
|
130
130
|
return (0, import_react_query.useInfiniteQuery)({
|
|
@@ -133,8 +133,9 @@ var useInfinitePosts = (params) => {
|
|
|
133
133
|
initialPageParam: 1,
|
|
134
134
|
getNextPageParam: (lastPage) => lastPage.pagination.hasNextPage ? lastPage.pagination.nextPage : void 0,
|
|
135
135
|
getPreviousPageParam: (firstPage) => firstPage.pagination.hasPrevPage ? firstPage.pagination.prevPage : void 0,
|
|
136
|
-
staleTime: 1e3 * 60 * 60
|
|
136
|
+
staleTime: 1e3 * 60 * 60,
|
|
137
137
|
// 1 hour
|
|
138
|
+
...options
|
|
138
139
|
});
|
|
139
140
|
};
|
|
140
141
|
var usePost = (id, options) => {
|
|
@@ -175,7 +176,7 @@ var useCategories = (params, options) => {
|
|
|
175
176
|
...options
|
|
176
177
|
});
|
|
177
178
|
};
|
|
178
|
-
var useInfiniteCategories = (params) => {
|
|
179
|
+
var useInfiniteCategories = (params, options) => {
|
|
179
180
|
const client = useWordPressClient();
|
|
180
181
|
const queryKeys2 = useWordPressQueryKeys();
|
|
181
182
|
return (0, import_react_query2.useInfiniteQuery)({
|
|
@@ -186,8 +187,9 @@ var useInfiniteCategories = (params) => {
|
|
|
186
187
|
getPreviousPageParam: (firstPage) => firstPage.pagination.hasPrevPage ? firstPage.pagination.prevPage : void 0,
|
|
187
188
|
staleTime: 1e3 * 60 * 60 * 24 * 7,
|
|
188
189
|
// 1 week
|
|
189
|
-
gcTime: 1e3 * 60 * 60 * 24 * 30
|
|
190
|
+
gcTime: 1e3 * 60 * 60 * 24 * 30,
|
|
190
191
|
// 30 days
|
|
192
|
+
...options
|
|
191
193
|
});
|
|
192
194
|
};
|
|
193
195
|
var useCategory = (id, options) => {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/provider/WordPressProvider.tsx","../src/provider/WordPressContext.ts","../src/hooks/useWordPressClient.ts","../src/hooks/queryKeys.ts","../src/hooks/posts.ts","../src/hooks/categories.ts","../src/hooks/media.ts","../src/hooks/users.ts","../src/hooks/auth.ts"],"sourcesContent":["/**\n * @atomic-solutions/react-wordpress\n *\n * React Query hooks and provider for WordPress REST API\n */\n\n// ============================================================================\n// Provider\n// ============================================================================\n\nexport { WordPressProvider } from './provider/WordPressProvider';\nexport type { WordPressProviderProps } from './provider/WordPressProvider';\nexport { WordPressContext, type WordPressContextValue } from './provider/WordPressContext';\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\nexport { useWordPressClient, useWordPressQueryKeys } from './hooks/useWordPressClient';\nexport { createQueryKeys, type QueryKeys } from './hooks/queryKeys';\n\n// Post hooks\nexport { usePosts, useInfinitePosts, usePost, usePostBySlug } from './hooks/posts';\n\n// Category hooks\nexport { useCategories, useInfiniteCategories, useCategory } from './hooks/categories';\n\n// Media hooks\nexport { useMediaItem } from './hooks/media';\n\n// User hooks\nexport { useCurrentUser, useUser } from './hooks/users';\n\n// Auth hooks\nexport { useLogin, useValidateToken } from './hooks/auth';\n\n// ============================================================================\n// Re-export types from wordpress-utils for convenience\n// ============================================================================\n\nexport type {\n WordPressConfig,\n WordPressClient,\n JwtTokenAdapter,\n PostsAPI,\n CategoriesAPI,\n MediaAPI,\n UsersAPI,\n AuthAPI,\n} from '@atomic-solutions/wordpress-api-client';\n\nexport type {\n // Base types\n RenderedContent,\n Guid,\n PostStatus,\n HalLinks,\n HalLinkItem,\n WordPressBase,\n PaginationParams,\n // Post types\n Post,\n PostsList,\n PostParams,\n EmbeddedPost,\n EmbeddedPostsList,\n // Category types\n Category,\n CategoriesList,\n CategoryParams,\n Tag,\n TagsList,\n // Media types\n Media,\n MediaList,\n MediaDetails,\n MediaSize,\n MediaSizes,\n ImageMeta,\n // User types\n User,\n UsersList,\n CurrentUser,\n AvatarUrls,\n // Auth types\n JwtLoginInput,\n JwtTokenResponse,\n JwtValidateResponse,\n JwtErrorResponse,\n} from '@atomic-solutions/wordpress-api-client';\n\nexport type {\n PaginatedResponse,\n Pagination,\n PaginationMeta,\n} from '@atomic-solutions/wordpress-api-client';\n","/**\n * WordPress client provider\n */\n\nimport React, { useMemo, type ReactNode } from 'react';\nimport { type WordPressClient } from '@atomic-solutions/wordpress-api-client';\n\nimport type { QueryKeys } from '../hooks/queryKeys';\nimport { WordPressContext } from './WordPressContext';\n\n/**\n * Base props shared by both provider modes\n */\ninterface WordPressProviderBaseProps {\n /** Query keys instance created with createQueryKeys() */\n queryKeys: QueryKeys;\n\n /** Child components */\n children: ReactNode;\n}\n\n/**\n * Provider props when using config (provider creates client)\n */\ninterface WordPressProviderWithConfig extends WordPressProviderBaseProps {\n client: WordPressClient;\n}\n\n/**\n * WordPress provider props - either config OR client (mutually exclusive)\n */\nexport type WordPressProviderProps = WordPressProviderWithConfig;\n\n/**\n * Provider component for WordPress client and query keys\n *\n * @example\n * ```tsx\n * import { WordPressProvider, createQueryKeys } from '@atomic-solutions/react-wordpress';\n *\n * const queryKeys = createQueryKeys(['my-app']);\n * const client = createClient({ baseURL: '...' });\n * ```\n */\nexport const WordPressProvider: React.FC<WordPressProviderProps> = ({\n queryKeys,\n children,\n client,\n}) => {\n const contextValue = useMemo(() => ({ client, queryKeys }), [client, queryKeys]);\n\n if (!contextValue.client && !contextValue.queryKeys) {\n return children;\n }\n\n return <WordPressContext.Provider value={contextValue}>{children}</WordPressContext.Provider>;\n};\n","/**\n * WordPress client context\n */\n\nimport { createContext } from 'react';\nimport type { WordPressClient } from '@atomic-solutions/wordpress-api-client';\n\nimport type { QueryKeys } from '../hooks/queryKeys';\n\n/**\n * WordPress context value\n */\nexport interface WordPressContextValue {\n client: WordPressClient;\n queryKeys: QueryKeys;\n}\n\n/**\n * React context for WordPress client and query keys\n */\nexport const WordPressContext = createContext<WordPressContextValue | null>(null);\n","/**\n * Hook for accessing WordPress client and query keys from context\n */\n\nimport { useContext } from 'react';\nimport type { WordPressClient } from '@atomic-solutions/wordpress-api-client';\n\nimport { WordPressContext } from '../provider/WordPressContext';\nimport type { QueryKeys } from './queryKeys';\n\n/**\n * Hook to access the WordPress client from context\n *\n * Must be used within a WordPressProvider\n *\n * @returns WordPress client instance\n * @throws Error if used outside WordPressProvider\n *\n * @example\n * ```tsx\n * const MyComponent = () => {\n * const client = useWordPressClient();\n *\n * const handleFetchPosts = async () => {\n * const posts = await client.posts.list({ per_page: 10 });\n * console.log(posts);\n * };\n *\n * return <button onClick={handleFetchPosts}>Fetch Posts</button>;\n * };\n * ```\n */\nexport const useWordPressClient = (): WordPressClient => {\n const context = useContext(WordPressContext);\n\n if (!context) {\n throw new Error('useWordPressClient must be used within a WordPressProvider');\n }\n\n return context.client;\n};\n\n/**\n * Hook to access WordPress query keys from context\n *\n * Must be used within a WordPressProvider\n *\n * @returns Query keys instance\n * @throws Error if used outside WordPressProvider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const queryKeys = useWordPressQueryKeys();\n * const queryClient = useQueryClient();\n *\n * const handleInvalidate = () => {\n * queryClient.invalidateQueries({ queryKey: queryKeys.posts.all });\n * };\n *\n * return <button onClick={handleInvalidate}>Refresh Posts</button>;\n * }\n * ```\n */\nexport const useWordPressQueryKeys = (): QueryKeys => {\n const context = useContext(WordPressContext);\n\n if (!context) {\n throw new Error('useWordPressQueryKeys must be used within a WordPressProvider');\n }\n\n return context.queryKeys;\n};\n","/**\n * React Query key factory\n */\n\nimport type { CategoryParams, PostParams } from '@atomic-solutions/wordpress-api-client';\n\n/**\n * Query keys for WordPress API\n */\nexport interface QueryKeys {\n /** All WordPress queries */\n all: readonly string[];\n\n /** Posts queries */\n posts: {\n all: readonly unknown[];\n lists: () => readonly unknown[];\n list: (params?: PostParams) => readonly unknown[];\n details: () => readonly unknown[];\n detail: (id: number) => readonly unknown[];\n bySlug: (slug: string) => readonly unknown[];\n };\n\n /** Categories queries */\n categories: {\n all: readonly unknown[];\n lists: () => readonly unknown[];\n list: (params?: CategoryParams) => readonly unknown[];\n details: () => readonly unknown[];\n detail: (id: number) => readonly unknown[];\n };\n\n /** Media queries */\n media: {\n all: readonly unknown[];\n details: () => readonly unknown[];\n detail: (id: number) => readonly unknown[];\n };\n\n /** Users queries */\n users: {\n all: readonly unknown[];\n me: () => readonly unknown[];\n detail: (id: number) => readonly unknown[];\n };\n}\n\n/**\n * Create query keys factory with optional prefix\n *\n * @param prefix - Optional prefix for all query keys\n * @returns Query keys factory\n */\nexport const createQueryKeys = (prefix: string[] = ['wordpress']): QueryKeys => {\n return {\n all: prefix,\n\n posts: {\n all: [...prefix, 'posts'] as const,\n lists: () => [...prefix, 'posts', 'list'] as const,\n list: (params?: PostParams) => [...prefix, 'posts', 'list', params] as const,\n details: () => [...prefix, 'posts', 'detail'] as const,\n detail: (id: number) => [...prefix, 'posts', 'detail', id] as const,\n bySlug: (slug: string) => [...prefix, 'posts', 'slug', slug] as const,\n },\n\n categories: {\n all: [...prefix, 'categories'] as const,\n lists: () => [...prefix, 'categories', 'list'] as const,\n list: (params?: CategoryParams) => [...prefix, 'categories', 'list', params] as const,\n details: () => [...prefix, 'categories', 'detail'] as const,\n detail: (id: number) => [...prefix, 'categories', 'detail', id] as const,\n },\n\n media: {\n all: [...prefix, 'media'] as const,\n details: () => [...prefix, 'media', 'detail'] as const,\n detail: (id: number) => [...prefix, 'media', 'detail', id] as const,\n },\n\n users: {\n all: [...prefix, 'users'] as const,\n me: () => [...prefix, 'users', 'me'] as const,\n detail: (id: number) => [...prefix, 'users', 'detail', id] as const,\n },\n };\n};\n\nexport const queryKeys = createQueryKeys();\n","/**\n * Posts React Query hooks\n */\n\nimport type { PaginatedResponse, Post, PostParams } from '@atomic-solutions/wordpress-api-client';\nimport { useInfiniteQuery, useQuery, type UseQueryOptions } from '@tanstack/react-query';\n\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\ntype UsePostsOptions = Omit<\n UseQueryOptions<PaginatedResponse<Post>, Error>,\n 'queryKey' | 'queryFn'\n>;\n\ntype UsePostOptions = Omit<UseQueryOptions<Post, Error>, 'queryKey' | 'queryFn'>;\n\n/**\n * Hook for fetching paginated posts\n *\n * @param params - Post query parameters\n * @param options - React Query options\n */\nexport const usePosts = (params?: PostParams, options?: UsePostsOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.posts.list(params),\n queryFn: () => client.posts.list(params),\n staleTime: 1000 * 60 * 60, // 1 hour\n ...options,\n });\n};\n\n/**\n * Hook for infinite scrolling posts\n *\n * @param params - Base post query parameters (page will be managed automatically)\n */\nexport const useInfinitePosts = (params?: Omit<PostParams, 'page'>) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useInfiniteQuery({\n queryKey: queryKeys.posts.lists(),\n queryFn: ({ pageParam = 1 }) => client.posts.list({ ...params, page: pageParam as number }),\n initialPageParam: 1,\n getNextPageParam: (lastPage) =>\n lastPage.pagination.hasNextPage ? lastPage.pagination.nextPage : undefined,\n getPreviousPageParam: (firstPage) =>\n firstPage.pagination.hasPrevPage ? firstPage.pagination.prevPage : undefined,\n staleTime: 1000 * 60 * 60, // 1 hour\n });\n};\n\n/**\n * Hook for fetching a single post by ID\n *\n * @param id - Post ID\n * @param options - React Query options\n */\nexport const usePost = (id: number, options?: UsePostOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.posts.detail(id),\n queryFn: () => client.posts.get(id),\n staleTime: 1000 * 60 * 60, // 1 hour\n enabled: id > 0,\n ...options,\n });\n};\n\ntype UsePostBySlugOptions = Omit<\n UseQueryOptions<Post | null, Error>,\n 'queryKey' | 'queryFn' | 'enabled'\n>;\n\n/**\n * Hook for fetching a single post by slug\n *\n * @param slug - Post slug\n * @param options - React Query options\n */\nexport const usePostBySlug = (slug: string, options?: UsePostBySlugOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.posts.bySlug(slug),\n queryFn: () => client.posts.getBySlug(slug),\n staleTime: 1000 * 60 * 60, // 1 hour\n enabled: !!slug,\n ...options,\n });\n};\n","/**\n * Categories React Query hooks\n */\n\nimport type {\n Category,\n CategoryParams,\n PaginatedResponse,\n} from '@atomic-solutions/wordpress-api-client';\nimport { useInfiniteQuery, useQuery, type UseQueryOptions } from '@tanstack/react-query';\n\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\ntype UseCategoriesOptions = Omit<\n UseQueryOptions<PaginatedResponse<Category>, Error>,\n 'queryKey' | 'queryFn'\n>;\n\ntype UseCategoryOptions = Omit<UseQueryOptions<Category, Error>, 'queryKey' | 'queryFn'>;\n\n/**\n * Hook for fetching paginated categories\n *\n * @param params - Category query parameters\n * @param options - React Query options\n */\nexport const useCategories = (params?: CategoryParams, options?: UseCategoriesOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.categories.list(params),\n queryFn: () => client.categories.list(params),\n staleTime: 1000 * 60 * 60 * 24 * 7, // 1 week\n ...options,\n });\n};\n\n/**\n * Hook for infinite scrolling categories\n *\n * @param params - Base category query parameters\n */\nexport const useInfiniteCategories = (params?: Omit<CategoryParams, 'page'>) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useInfiniteQuery({\n queryKey: queryKeys.categories.lists(),\n queryFn: ({ pageParam = 1 }) =>\n client.categories.list({ ...params, page: pageParam as number }),\n initialPageParam: 1,\n getNextPageParam: (lastPage) =>\n lastPage.pagination.hasNextPage ? lastPage.pagination.nextPage : undefined,\n getPreviousPageParam: (firstPage) =>\n firstPage.pagination.hasPrevPage ? firstPage.pagination.prevPage : undefined,\n staleTime: 1000 * 60 * 60 * 24 * 7, // 1 week\n gcTime: 1000 * 60 * 60 * 24 * 30, // 30 days\n });\n};\n\n/**\n * Hook for fetching a single category by ID\n *\n * @param id - Category ID\n * @param options - React Query options\n */\nexport const useCategory = (id: number, options?: UseCategoryOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.categories.detail(id),\n queryFn: () => client.categories.get(id),\n staleTime: 1000 * 60 * 60 * 24 * 7, // 1 week\n enabled: id > 0,\n ...options,\n });\n};\n","/**\n * Media React Query hooks\n */\n\nimport type { Media } from '@atomic-solutions/wordpress-api-client';\nimport { useQuery, type UseQueryOptions } from '@tanstack/react-query';\n\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\ntype UseMediaItemOptions = Omit<UseQueryOptions<Media, Error>, 'queryKey' | 'queryFn'>;\n\n/**\n * Hook for fetching a single media item by ID\n *\n * @param id - Media item ID\n * @param options - React Query options\n */\nexport const useMediaItem = (id: number | undefined, options?: UseMediaItemOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.media.detail(id || 0),\n queryFn: () => client.media.get(id!),\n staleTime: 1000 * 60 * 60 * 24, // 1 day\n gcTime: 1000 * 60 * 60 * 24 * 7, // 1 week\n enabled: !!id && id > 0,\n ...options,\n });\n};\n","/**\n * Users React Query hooks\n */\n\nimport type { CurrentUser, User } from '@atomic-solutions/wordpress-api-client';\nimport { useQuery, type UseQueryOptions } from '@tanstack/react-query';\n\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\ntype UseCurrentUserOptions = Omit<UseQueryOptions<CurrentUser, Error>, 'queryKey' | 'queryFn'>;\n\ntype UseUserOptions = Omit<UseQueryOptions<User, Error>, 'queryKey' | 'queryFn'>;\n\n/**\n * Hook for fetching current authenticated user\n *\n * Requires JWT token to be configured\n *\n * @param options - React Query options\n */\nexport const useCurrentUser = (options?: UseCurrentUserOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.users.me(),\n queryFn: () => client.users.me(),\n staleTime: 1000 * 60 * 5, // 5 minutes\n retry: false, // Don't retry auth failures\n ...options,\n });\n};\n\n/**\n * Hook for fetching a user by ID\n *\n * @param id - User ID\n * @param options - React Query options\n */\nexport const useUser = (id: number, options?: UseUserOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.users.detail(id),\n queryFn: () => client.users.get(id),\n staleTime: 1000 * 60 * 60, // 1 hour\n enabled: id > 0,\n ...options,\n });\n};\n","/**\n * Auth React Query hooks\n */\n\nimport type { JwtLoginInput, JwtTokenResponse } from '@atomic-solutions/wordpress-api-client';\nimport { useMutation, useQueryClient, type UseMutationOptions } from '@tanstack/react-query';\n\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\ntype UseLoginOptions = Omit<\n UseMutationOptions<JwtTokenResponse, Error, JwtLoginInput>,\n 'mutationFn'\n>;\n\n/**\n * Hook for logging in with username/password\n *\n * Returns JWT token on success\n *\n * @param options - React Query mutation options\n *\n * @example\n * ```tsx\n * const { mutate: login, isPending } = useLogin({\n * onSuccess: (data) => {\n * // Save token to storage\n * AsyncStorage.setItem('wp_jwt_token', data.token);\n * },\n * onError: (error) => {\n * // Handle login error\n * Alert.alert('Error', error.message);\n * },\n * });\n *\n * login({ username: 'user', password: 'pass' });\n * ```\n */\nexport const useLogin = (options?: UseLoginOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (input: JwtLoginInput) => client.auth.login(input),\n onSuccess: () => {\n // Invalidate user queries after login\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all });\n },\n ...options,\n });\n};\n\n/**\n * Hook for validating current JWT token\n *\n * @param options - React Query mutation options\n */\nexport const useValidateToken = (\n options?: Omit<UseMutationOptions<boolean, Error, void>, 'mutationFn'>\n) => {\n const client = useWordPressClient();\n\n return useMutation({\n mutationFn: () => client.auth.validateToken(),\n ...options,\n });\n};\n"],"mappings":"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","names":["import_react","queryKeys","import_react","queryKeys","import_react_query","queryKeys","import_react_query","queryKeys","import_react_query","queryKeys","import_react_query","queryKeys"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/provider/WordPressProvider.tsx","../src/provider/WordPressContext.ts","../src/hooks/useWordPressClient.ts","../src/hooks/queryKeys.ts","../src/hooks/posts.ts","../src/hooks/categories.ts","../src/hooks/media.ts","../src/hooks/users.ts","../src/hooks/auth.ts"],"sourcesContent":["/**\n * @atomic-solutions/react-wordpress\n *\n * React Query hooks and provider for WordPress REST API\n */\n\n// ============================================================================\n// Provider\n// ============================================================================\n\nexport { WordPressProvider } from './provider/WordPressProvider';\nexport type { WordPressProviderProps } from './provider/WordPressProvider';\nexport { WordPressContext, type WordPressContextValue } from './provider/WordPressContext';\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\nexport type { QueryOptions, MutationOptions, InfiniteQueryOptions } from './types';\n\nexport { useWordPressClient, useWordPressQueryKeys } from './hooks/useWordPressClient';\nexport { createQueryKeys, type QueryKeys } from './hooks/queryKeys';\n\n// Post hooks\nexport { usePosts, useInfinitePosts, usePost, usePostBySlug } from './hooks/posts';\n\n// Category hooks\nexport { useCategories, useInfiniteCategories, useCategory } from './hooks/categories';\n\n// Media hooks\nexport { useMediaItem } from './hooks/media';\n\n// User hooks\nexport { useCurrentUser, useUser } from './hooks/users';\n\n// Auth hooks\nexport { useLogin, useValidateToken } from './hooks/auth';\n\n// ============================================================================\n// Re-export types from wordpress-utils for convenience\n// ============================================================================\n\nexport type {\n WordPressConfig,\n WordPressClient,\n JwtTokenAdapter,\n PostsAPI,\n CategoriesAPI,\n MediaAPI,\n UsersAPI,\n AuthAPI,\n} from '@atomic-solutions/wordpress-api-client';\n\nexport type {\n // Base types\n RenderedContent,\n Guid,\n PostStatus,\n HalLinks,\n HalLinkItem,\n WordPressBase,\n PaginationParams,\n // Post types\n Post,\n PostsList,\n PostParams,\n EmbeddedPost,\n EmbeddedPostsList,\n // Category types\n Category,\n CategoriesList,\n CategoryParams,\n Tag,\n TagsList,\n // Media types\n Media,\n MediaList,\n MediaDetails,\n MediaSize,\n MediaSizes,\n ImageMeta,\n // User types\n User,\n UsersList,\n CurrentUser,\n AvatarUrls,\n // Auth types\n JwtLoginInput,\n JwtTokenResponse,\n JwtValidateResponse,\n JwtErrorResponse,\n} from '@atomic-solutions/wordpress-api-client';\n\nexport type {\n PaginatedResponse,\n Pagination,\n PaginationMeta,\n} from '@atomic-solutions/wordpress-api-client';\n","/**\n * WordPress client provider\n */\n\nimport React, { useMemo, type ReactNode } from 'react';\nimport { type WordPressClient } from '@atomic-solutions/wordpress-api-client';\n\nimport type { QueryKeys } from '../hooks/queryKeys';\nimport { WordPressContext } from './WordPressContext';\n\n/**\n * Base props shared by both provider modes\n */\ninterface WordPressProviderBaseProps {\n /** Query keys instance created with createQueryKeys() */\n queryKeys: QueryKeys;\n\n /** Child components */\n children: ReactNode;\n}\n\n/**\n * Provider props when using config (provider creates client)\n */\ninterface WordPressProviderWithConfig extends WordPressProviderBaseProps {\n client: WordPressClient;\n}\n\n/**\n * WordPress provider props - either config OR client (mutually exclusive)\n */\nexport type WordPressProviderProps = WordPressProviderWithConfig;\n\n/**\n * Provider component for WordPress client and query keys\n *\n * @example\n * ```tsx\n * import { WordPressProvider, createQueryKeys } from '@atomic-solutions/react-wordpress';\n *\n * const queryKeys = createQueryKeys(['my-app']);\n * const client = createClient({ baseURL: '...' });\n * ```\n */\nexport const WordPressProvider: React.FC<WordPressProviderProps> = ({\n queryKeys,\n children,\n client,\n}) => {\n const contextValue = useMemo(() => ({ client, queryKeys }), [client, queryKeys]);\n\n if (!contextValue.client && !contextValue.queryKeys) {\n return children;\n }\n\n return <WordPressContext.Provider value={contextValue}>{children}</WordPressContext.Provider>;\n};\n","/**\n * WordPress client context\n */\n\nimport { createContext } from 'react';\nimport type { WordPressClient } from '@atomic-solutions/wordpress-api-client';\n\nimport type { QueryKeys } from '../hooks/queryKeys';\n\n/**\n * WordPress context value\n */\nexport interface WordPressContextValue {\n client: WordPressClient;\n queryKeys: QueryKeys;\n}\n\n/**\n * React context for WordPress client and query keys\n */\nexport const WordPressContext = createContext<WordPressContextValue | null>(null);\n","/**\n * Hook for accessing WordPress client and query keys from context\n */\n\nimport { useContext } from 'react';\nimport type { WordPressClient } from '@atomic-solutions/wordpress-api-client';\n\nimport { WordPressContext } from '../provider/WordPressContext';\nimport type { QueryKeys } from './queryKeys';\n\n/**\n * Hook to access the WordPress client from context\n *\n * Must be used within a WordPressProvider\n *\n * @returns WordPress client instance\n * @throws Error if used outside WordPressProvider\n *\n * @example\n * ```tsx\n * const MyComponent = () => {\n * const client = useWordPressClient();\n *\n * const handleFetchPosts = async () => {\n * const posts = await client.posts.list({ per_page: 10 });\n * console.log(posts);\n * };\n *\n * return <button onClick={handleFetchPosts}>Fetch Posts</button>;\n * };\n * ```\n */\nexport const useWordPressClient = (): WordPressClient => {\n const context = useContext(WordPressContext);\n\n if (!context) {\n throw new Error('useWordPressClient must be used within a WordPressProvider');\n }\n\n return context.client;\n};\n\n/**\n * Hook to access WordPress query keys from context\n *\n * Must be used within a WordPressProvider\n *\n * @returns Query keys instance\n * @throws Error if used outside WordPressProvider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const queryKeys = useWordPressQueryKeys();\n * const queryClient = useQueryClient();\n *\n * const handleInvalidate = () => {\n * queryClient.invalidateQueries({ queryKey: queryKeys.posts.all });\n * };\n *\n * return <button onClick={handleInvalidate}>Refresh Posts</button>;\n * }\n * ```\n */\nexport const useWordPressQueryKeys = (): QueryKeys => {\n const context = useContext(WordPressContext);\n\n if (!context) {\n throw new Error('useWordPressQueryKeys must be used within a WordPressProvider');\n }\n\n return context.queryKeys;\n};\n","/**\n * React Query key factory\n */\n\nimport type { CategoryParams, PostParams } from '@atomic-solutions/wordpress-api-client';\n\n/**\n * Query keys for WordPress API\n */\nexport interface QueryKeys {\n /** All WordPress queries */\n all: readonly string[];\n\n /** Posts queries */\n posts: {\n all: readonly unknown[];\n lists: () => readonly unknown[];\n list: (params?: PostParams) => readonly unknown[];\n details: () => readonly unknown[];\n detail: (id: number) => readonly unknown[];\n bySlug: (slug: string) => readonly unknown[];\n };\n\n /** Categories queries */\n categories: {\n all: readonly unknown[];\n lists: () => readonly unknown[];\n list: (params?: CategoryParams) => readonly unknown[];\n details: () => readonly unknown[];\n detail: (id: number) => readonly unknown[];\n };\n\n /** Media queries */\n media: {\n all: readonly unknown[];\n details: () => readonly unknown[];\n detail: (id: number) => readonly unknown[];\n };\n\n /** Users queries */\n users: {\n all: readonly unknown[];\n me: () => readonly unknown[];\n detail: (id: number) => readonly unknown[];\n };\n}\n\n/**\n * Create query keys factory with optional prefix\n *\n * @param prefix - Optional prefix for all query keys\n * @returns Query keys factory\n */\nexport const createQueryKeys = (prefix: string[] = ['wordpress']): QueryKeys => {\n return {\n all: prefix,\n\n posts: {\n all: [...prefix, 'posts'] as const,\n lists: () => [...prefix, 'posts', 'list'] as const,\n list: (params?: PostParams) => [...prefix, 'posts', 'list', params] as const,\n details: () => [...prefix, 'posts', 'detail'] as const,\n detail: (id: number) => [...prefix, 'posts', 'detail', id] as const,\n bySlug: (slug: string) => [...prefix, 'posts', 'slug', slug] as const,\n },\n\n categories: {\n all: [...prefix, 'categories'] as const,\n lists: () => [...prefix, 'categories', 'list'] as const,\n list: (params?: CategoryParams) => [...prefix, 'categories', 'list', params] as const,\n details: () => [...prefix, 'categories', 'detail'] as const,\n detail: (id: number) => [...prefix, 'categories', 'detail', id] as const,\n },\n\n media: {\n all: [...prefix, 'media'] as const,\n details: () => [...prefix, 'media', 'detail'] as const,\n detail: (id: number) => [...prefix, 'media', 'detail', id] as const,\n },\n\n users: {\n all: [...prefix, 'users'] as const,\n me: () => [...prefix, 'users', 'me'] as const,\n detail: (id: number) => [...prefix, 'users', 'detail', id] as const,\n },\n };\n};\n\nexport const queryKeys = createQueryKeys();\n","/**\n * Posts React Query hooks\n */\n\nimport type { PaginatedResponse, Post, PostParams } from '@atomic-solutions/wordpress-api-client';\nimport { useInfiniteQuery, useQuery } from '@tanstack/react-query';\n\nimport type { InfiniteQueryOptions, QueryOptions } from '../types';\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\n/**\n * Hook for fetching paginated posts\n *\n * @param params - Post query parameters\n * @param options - React Query options\n */\nexport const usePosts = (params?: PostParams, options?: QueryOptions<PaginatedResponse<Post>>) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.posts.list(params),\n queryFn: () => client.posts.list(params),\n staleTime: 1000 * 60 * 60, // 1 hour\n ...options,\n });\n};\n\n/**\n * Hook for infinite scrolling posts\n *\n * @param params - Base post query parameters (page will be managed automatically)\n */\nexport const useInfinitePosts = (\n params?: Omit<PostParams, 'page'>,\n options?: InfiniteQueryOptions<PaginatedResponse<Post>>\n) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useInfiniteQuery({\n queryKey: queryKeys.posts.lists(),\n queryFn: ({ pageParam = 1 }) => client.posts.list({ ...params, page: pageParam as number }),\n initialPageParam: 1,\n getNextPageParam: (lastPage) =>\n lastPage.pagination.hasNextPage ? lastPage.pagination.nextPage : undefined,\n getPreviousPageParam: (firstPage) =>\n firstPage.pagination.hasPrevPage ? firstPage.pagination.prevPage : undefined,\n staleTime: 1000 * 60 * 60, // 1 hour\n ...options,\n });\n};\n\n/**\n * Hook for fetching a single post by ID\n *\n * @param id - Post ID\n * @param options - React Query options\n */\nexport const usePost = (id: number, options?: QueryOptions<Post>) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.posts.detail(id),\n queryFn: () => client.posts.get(id),\n staleTime: 1000 * 60 * 60, // 1 hour\n enabled: id > 0,\n ...options,\n });\n};\n\n/**\n * Hook for fetching a single post by slug\n *\n * @param slug - Post slug\n * @param options - React Query options (`enabled` is derived from slug and cannot be overridden)\n */\nexport const usePostBySlug = (\n slug: string,\n options?: Omit<QueryOptions<Post | null>, 'enabled'>\n) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.posts.bySlug(slug),\n queryFn: () => client.posts.getBySlug(slug),\n staleTime: 1000 * 60 * 60, // 1 hour\n enabled: !!slug,\n ...options,\n });\n};\n","/**\n * Categories React Query hooks\n */\n\nimport type {\n Category,\n CategoryParams,\n PaginatedResponse,\n} from '@atomic-solutions/wordpress-api-client';\nimport { useInfiniteQuery, useQuery } from '@tanstack/react-query';\n\nimport type { InfiniteQueryOptions, QueryOptions } from '../types';\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\n/**\n * Hook for fetching paginated categories\n *\n * @param params - Category query parameters\n * @param options - React Query options\n */\nexport const useCategories = (\n params?: CategoryParams,\n options?: QueryOptions<PaginatedResponse<Category>>\n) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.categories.list(params),\n queryFn: () => client.categories.list(params),\n staleTime: 1000 * 60 * 60 * 24 * 7, // 1 week\n ...options,\n });\n};\n\n/**\n * Hook for infinite scrolling categories\n *\n * @param params - Base category query parameters\n */\nexport const useInfiniteCategories = (\n params?: Omit<CategoryParams, 'page'>,\n options?: InfiniteQueryOptions<PaginatedResponse<Category>>\n) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useInfiniteQuery({\n queryKey: queryKeys.categories.lists(),\n queryFn: ({ pageParam = 1 }) =>\n client.categories.list({ ...params, page: pageParam as number }),\n initialPageParam: 1,\n getNextPageParam: (lastPage) =>\n lastPage.pagination.hasNextPage ? lastPage.pagination.nextPage : undefined,\n getPreviousPageParam: (firstPage) =>\n firstPage.pagination.hasPrevPage ? firstPage.pagination.prevPage : undefined,\n staleTime: 1000 * 60 * 60 * 24 * 7, // 1 week\n gcTime: 1000 * 60 * 60 * 24 * 30, // 30 days\n ...options,\n });\n};\n\n/**\n * Hook for fetching a single category by ID\n *\n * @param id - Category ID\n * @param options - React Query options\n */\nexport const useCategory = (id: number, options?: QueryOptions<Category>) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.categories.detail(id),\n queryFn: () => client.categories.get(id),\n staleTime: 1000 * 60 * 60 * 24 * 7, // 1 week\n enabled: id > 0,\n ...options,\n });\n};\n","/**\n * Media React Query hooks\n */\n\nimport type { Media } from '@atomic-solutions/wordpress-api-client';\nimport { useQuery } from '@tanstack/react-query';\n\nimport type { QueryOptions } from '../types';\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\n/**\n * Hook for fetching a single media item by ID\n *\n * @param id - Media item ID\n * @param options - React Query options\n */\nexport const useMediaItem = (id: number | undefined, options?: QueryOptions<Media>) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.media.detail(id || 0),\n queryFn: () => client.media.get(id!),\n staleTime: 1000 * 60 * 60 * 24, // 1 day\n gcTime: 1000 * 60 * 60 * 24 * 7, // 1 week\n enabled: !!id && id > 0,\n ...options,\n });\n};\n","/**\n * Users React Query hooks\n */\n\nimport type { CurrentUser, User } from '@atomic-solutions/wordpress-api-client';\nimport { useQuery } from '@tanstack/react-query';\n\nimport type { QueryOptions } from '../types';\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\n/**\n * Hook for fetching current authenticated user\n *\n * Requires JWT token to be configured\n *\n * @param options - React Query options\n */\nexport const useCurrentUser = (options?: QueryOptions<CurrentUser>) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.users.me(),\n queryFn: () => client.users.me(),\n staleTime: 1000 * 60 * 5, // 5 minutes\n retry: false, // Don't retry auth failures\n ...options,\n });\n};\n\n/**\n * Hook for fetching a user by ID\n *\n * @param id - User ID\n * @param options - React Query options\n */\nexport const useUser = (id: number, options?: QueryOptions<User>) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.users.detail(id),\n queryFn: () => client.users.get(id),\n staleTime: 1000 * 60 * 60, // 1 hour\n enabled: id > 0,\n ...options,\n });\n};\n","/**\n * Auth React Query hooks\n */\n\nimport type { JwtLoginInput, JwtTokenResponse } from '@atomic-solutions/wordpress-api-client';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\n\nimport type { MutationOptions } from '../types';\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\n/**\n * Hook for logging in with username/password\n *\n * Returns JWT token on success\n *\n * @param options - React Query mutation options\n *\n * @example\n * ```tsx\n * const { mutate: login, isPending } = useLogin({\n * onSuccess: (data) => {\n * // Save token to storage\n * AsyncStorage.setItem('wp_jwt_token', data.token);\n * },\n * onError: (error) => {\n * // Handle login error\n * Alert.alert('Error', error.message);\n * },\n * });\n *\n * login({ username: 'user', password: 'pass' });\n * ```\n */\nexport const useLogin = (options?: MutationOptions<JwtTokenResponse, Error, JwtLoginInput>) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (input: JwtLoginInput) => client.auth.login(input),\n onSuccess: () => {\n // Invalidate user queries after login\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all });\n },\n ...options,\n });\n};\n\n/**\n * Hook for validating current JWT token\n *\n * @param options - React Query mutation options\n */\nexport const useValidateToken = (options?: MutationOptions<boolean, Error, void>) => {\n const client = useWordPressClient();\n\n return useMutation({\n mutationFn: () => client.auth.validateToken(),\n ...options,\n });\n};\n"],"mappings":"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","names":["import_react","queryKeys","import_react","queryKeys","import_react_query","queryKeys","import_react_query","queryKeys","import_react_query","queryKeys","import_react_query","queryKeys"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { W as WordPressContext, a as WordPressContextValue, b as WordPressProvider, c as WordPressProviderProps } from './index-BgFRJIdn.cjs';
|
|
2
|
-
export { useCategories, useCategory, useCurrentUser, useInfiniteCategories, useInfinitePosts, useLogin, useMediaItem, usePost, usePostBySlug, usePosts, useUser, useValidateToken, useWordPressClient, useWordPressQueryKeys } from './
|
|
2
|
+
export { I as InfiniteQueryOptions, M as MutationOptions, Q as QueryOptions, u as useCategories, a as useCategory, b as useCurrentUser, c as useInfiniteCategories, d as useInfinitePosts, e as useLogin, f as useMediaItem, g as usePost, h as usePostBySlug, i as usePosts, j as useUser, k as useValidateToken, l as useWordPressClient, m as useWordPressQueryKeys } from './index-Cc8n-JUw.cjs';
|
|
3
3
|
export { Q as QueryKeys, c as createQueryKeys } from './queryKeys-ByTaglNR.cjs';
|
|
4
4
|
export { AuthAPI, AvatarUrls, CategoriesAPI, CategoriesList, Category, CategoryParams, CurrentUser, EmbeddedPost, EmbeddedPostsList, Guid, HalLinkItem, HalLinks, ImageMeta, JwtErrorResponse, JwtLoginInput, JwtTokenAdapter, JwtTokenResponse, JwtValidateResponse, Media, MediaAPI, MediaDetails, MediaList, MediaSize, MediaSizes, PaginatedResponse, Pagination, PaginationMeta, PaginationParams, Post, PostParams, PostStatus, PostsAPI, PostsList, RenderedContent, Tag, TagsList, User, UsersAPI, UsersList, WordPressBase, WordPressClient, WordPressConfig } from '@atomic-solutions/wordpress-api-client';
|
|
5
5
|
import 'react';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { W as WordPressContext, a as WordPressContextValue, b as WordPressProvider, c as WordPressProviderProps } from './index-CtTu7gRa.js';
|
|
2
|
-
export { useCategories, useCategory, useCurrentUser, useInfiniteCategories, useInfinitePosts, useLogin, useMediaItem, usePost, usePostBySlug, usePosts, useUser, useValidateToken, useWordPressClient, useWordPressQueryKeys } from './
|
|
2
|
+
export { I as InfiniteQueryOptions, M as MutationOptions, Q as QueryOptions, u as useCategories, a as useCategory, b as useCurrentUser, c as useInfiniteCategories, d as useInfinitePosts, e as useLogin, f as useMediaItem, g as usePost, h as usePostBySlug, i as usePosts, j as useUser, k as useValidateToken, l as useWordPressClient, m as useWordPressQueryKeys } from './index-KQf_Lfz0.js';
|
|
3
3
|
export { Q as QueryKeys, c as createQueryKeys } from './queryKeys-ByTaglNR.js';
|
|
4
4
|
export { AuthAPI, AvatarUrls, CategoriesAPI, CategoriesList, Category, CategoryParams, CurrentUser, EmbeddedPost, EmbeddedPostsList, Guid, HalLinkItem, HalLinks, ImageMeta, JwtErrorResponse, JwtLoginInput, JwtTokenAdapter, JwtTokenResponse, JwtValidateResponse, Media, MediaAPI, MediaDetails, MediaList, MediaSize, MediaSizes, PaginatedResponse, Pagination, PaginationMeta, PaginationParams, Post, PostParams, PostStatus, PostsAPI, PostsList, RenderedContent, Tag, TagsList, User, UsersAPI, UsersList, WordPressBase, WordPressClient, WordPressConfig } from '@atomic-solutions/wordpress-api-client';
|
|
5
5
|
import 'react';
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/useWordPressClient.ts","../src/hooks/queryKeys.ts","../src/hooks/posts.ts","../src/hooks/categories.ts","../src/hooks/media.ts","../src/hooks/users.ts","../src/hooks/auth.ts"],"sourcesContent":["/**\n * Hook for accessing WordPress client and query keys from context\n */\n\nimport { useContext } from 'react';\nimport type { WordPressClient } from '@atomic-solutions/wordpress-api-client';\n\nimport { WordPressContext } from '../provider/WordPressContext';\nimport type { QueryKeys } from './queryKeys';\n\n/**\n * Hook to access the WordPress client from context\n *\n * Must be used within a WordPressProvider\n *\n * @returns WordPress client instance\n * @throws Error if used outside WordPressProvider\n *\n * @example\n * ```tsx\n * const MyComponent = () => {\n * const client = useWordPressClient();\n *\n * const handleFetchPosts = async () => {\n * const posts = await client.posts.list({ per_page: 10 });\n * console.log(posts);\n * };\n *\n * return <button onClick={handleFetchPosts}>Fetch Posts</button>;\n * };\n * ```\n */\nexport const useWordPressClient = (): WordPressClient => {\n const context = useContext(WordPressContext);\n\n if (!context) {\n throw new Error('useWordPressClient must be used within a WordPressProvider');\n }\n\n return context.client;\n};\n\n/**\n * Hook to access WordPress query keys from context\n *\n * Must be used within a WordPressProvider\n *\n * @returns Query keys instance\n * @throws Error if used outside WordPressProvider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const queryKeys = useWordPressQueryKeys();\n * const queryClient = useQueryClient();\n *\n * const handleInvalidate = () => {\n * queryClient.invalidateQueries({ queryKey: queryKeys.posts.all });\n * };\n *\n * return <button onClick={handleInvalidate}>Refresh Posts</button>;\n * }\n * ```\n */\nexport const useWordPressQueryKeys = (): QueryKeys => {\n const context = useContext(WordPressContext);\n\n if (!context) {\n throw new Error('useWordPressQueryKeys must be used within a WordPressProvider');\n }\n\n return context.queryKeys;\n};\n","/**\n * React Query key factory\n */\n\nimport type { CategoryParams, PostParams } from '@atomic-solutions/wordpress-api-client';\n\n/**\n * Query keys for WordPress API\n */\nexport interface QueryKeys {\n /** All WordPress queries */\n all: readonly string[];\n\n /** Posts queries */\n posts: {\n all: readonly unknown[];\n lists: () => readonly unknown[];\n list: (params?: PostParams) => readonly unknown[];\n details: () => readonly unknown[];\n detail: (id: number) => readonly unknown[];\n bySlug: (slug: string) => readonly unknown[];\n };\n\n /** Categories queries */\n categories: {\n all: readonly unknown[];\n lists: () => readonly unknown[];\n list: (params?: CategoryParams) => readonly unknown[];\n details: () => readonly unknown[];\n detail: (id: number) => readonly unknown[];\n };\n\n /** Media queries */\n media: {\n all: readonly unknown[];\n details: () => readonly unknown[];\n detail: (id: number) => readonly unknown[];\n };\n\n /** Users queries */\n users: {\n all: readonly unknown[];\n me: () => readonly unknown[];\n detail: (id: number) => readonly unknown[];\n };\n}\n\n/**\n * Create query keys factory with optional prefix\n *\n * @param prefix - Optional prefix for all query keys\n * @returns Query keys factory\n */\nexport const createQueryKeys = (prefix: string[] = ['wordpress']): QueryKeys => {\n return {\n all: prefix,\n\n posts: {\n all: [...prefix, 'posts'] as const,\n lists: () => [...prefix, 'posts', 'list'] as const,\n list: (params?: PostParams) => [...prefix, 'posts', 'list', params] as const,\n details: () => [...prefix, 'posts', 'detail'] as const,\n detail: (id: number) => [...prefix, 'posts', 'detail', id] as const,\n bySlug: (slug: string) => [...prefix, 'posts', 'slug', slug] as const,\n },\n\n categories: {\n all: [...prefix, 'categories'] as const,\n lists: () => [...prefix, 'categories', 'list'] as const,\n list: (params?: CategoryParams) => [...prefix, 'categories', 'list', params] as const,\n details: () => [...prefix, 'categories', 'detail'] as const,\n detail: (id: number) => [...prefix, 'categories', 'detail', id] as const,\n },\n\n media: {\n all: [...prefix, 'media'] as const,\n details: () => [...prefix, 'media', 'detail'] as const,\n detail: (id: number) => [...prefix, 'media', 'detail', id] as const,\n },\n\n users: {\n all: [...prefix, 'users'] as const,\n me: () => [...prefix, 'users', 'me'] as const,\n detail: (id: number) => [...prefix, 'users', 'detail', id] as const,\n },\n };\n};\n\nexport const queryKeys = createQueryKeys();\n","/**\n * Posts React Query hooks\n */\n\nimport type { PaginatedResponse, Post, PostParams } from '@atomic-solutions/wordpress-api-client';\nimport { useInfiniteQuery, useQuery, type UseQueryOptions } from '@tanstack/react-query';\n\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\ntype UsePostsOptions = Omit<\n UseQueryOptions<PaginatedResponse<Post>, Error>,\n 'queryKey' | 'queryFn'\n>;\n\ntype UsePostOptions = Omit<UseQueryOptions<Post, Error>, 'queryKey' | 'queryFn'>;\n\n/**\n * Hook for fetching paginated posts\n *\n * @param params - Post query parameters\n * @param options - React Query options\n */\nexport const usePosts = (params?: PostParams, options?: UsePostsOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.posts.list(params),\n queryFn: () => client.posts.list(params),\n staleTime: 1000 * 60 * 60, // 1 hour\n ...options,\n });\n};\n\n/**\n * Hook for infinite scrolling posts\n *\n * @param params - Base post query parameters (page will be managed automatically)\n */\nexport const useInfinitePosts = (params?: Omit<PostParams, 'page'>) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useInfiniteQuery({\n queryKey: queryKeys.posts.lists(),\n queryFn: ({ pageParam = 1 }) => client.posts.list({ ...params, page: pageParam as number }),\n initialPageParam: 1,\n getNextPageParam: (lastPage) =>\n lastPage.pagination.hasNextPage ? lastPage.pagination.nextPage : undefined,\n getPreviousPageParam: (firstPage) =>\n firstPage.pagination.hasPrevPage ? firstPage.pagination.prevPage : undefined,\n staleTime: 1000 * 60 * 60, // 1 hour\n });\n};\n\n/**\n * Hook for fetching a single post by ID\n *\n * @param id - Post ID\n * @param options - React Query options\n */\nexport const usePost = (id: number, options?: UsePostOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.posts.detail(id),\n queryFn: () => client.posts.get(id),\n staleTime: 1000 * 60 * 60, // 1 hour\n enabled: id > 0,\n ...options,\n });\n};\n\ntype UsePostBySlugOptions = Omit<\n UseQueryOptions<Post | null, Error>,\n 'queryKey' | 'queryFn' | 'enabled'\n>;\n\n/**\n * Hook for fetching a single post by slug\n *\n * @param slug - Post slug\n * @param options - React Query options\n */\nexport const usePostBySlug = (slug: string, options?: UsePostBySlugOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.posts.bySlug(slug),\n queryFn: () => client.posts.getBySlug(slug),\n staleTime: 1000 * 60 * 60, // 1 hour\n enabled: !!slug,\n ...options,\n });\n};\n","/**\n * Categories React Query hooks\n */\n\nimport type {\n Category,\n CategoryParams,\n PaginatedResponse,\n} from '@atomic-solutions/wordpress-api-client';\nimport { useInfiniteQuery, useQuery, type UseQueryOptions } from '@tanstack/react-query';\n\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\ntype UseCategoriesOptions = Omit<\n UseQueryOptions<PaginatedResponse<Category>, Error>,\n 'queryKey' | 'queryFn'\n>;\n\ntype UseCategoryOptions = Omit<UseQueryOptions<Category, Error>, 'queryKey' | 'queryFn'>;\n\n/**\n * Hook for fetching paginated categories\n *\n * @param params - Category query parameters\n * @param options - React Query options\n */\nexport const useCategories = (params?: CategoryParams, options?: UseCategoriesOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.categories.list(params),\n queryFn: () => client.categories.list(params),\n staleTime: 1000 * 60 * 60 * 24 * 7, // 1 week\n ...options,\n });\n};\n\n/**\n * Hook for infinite scrolling categories\n *\n * @param params - Base category query parameters\n */\nexport const useInfiniteCategories = (params?: Omit<CategoryParams, 'page'>) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useInfiniteQuery({\n queryKey: queryKeys.categories.lists(),\n queryFn: ({ pageParam = 1 }) =>\n client.categories.list({ ...params, page: pageParam as number }),\n initialPageParam: 1,\n getNextPageParam: (lastPage) =>\n lastPage.pagination.hasNextPage ? lastPage.pagination.nextPage : undefined,\n getPreviousPageParam: (firstPage) =>\n firstPage.pagination.hasPrevPage ? firstPage.pagination.prevPage : undefined,\n staleTime: 1000 * 60 * 60 * 24 * 7, // 1 week\n gcTime: 1000 * 60 * 60 * 24 * 30, // 30 days\n });\n};\n\n/**\n * Hook for fetching a single category by ID\n *\n * @param id - Category ID\n * @param options - React Query options\n */\nexport const useCategory = (id: number, options?: UseCategoryOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.categories.detail(id),\n queryFn: () => client.categories.get(id),\n staleTime: 1000 * 60 * 60 * 24 * 7, // 1 week\n enabled: id > 0,\n ...options,\n });\n};\n","/**\n * Media React Query hooks\n */\n\nimport type { Media } from '@atomic-solutions/wordpress-api-client';\nimport { useQuery, type UseQueryOptions } from '@tanstack/react-query';\n\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\ntype UseMediaItemOptions = Omit<UseQueryOptions<Media, Error>, 'queryKey' | 'queryFn'>;\n\n/**\n * Hook for fetching a single media item by ID\n *\n * @param id - Media item ID\n * @param options - React Query options\n */\nexport const useMediaItem = (id: number | undefined, options?: UseMediaItemOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.media.detail(id || 0),\n queryFn: () => client.media.get(id!),\n staleTime: 1000 * 60 * 60 * 24, // 1 day\n gcTime: 1000 * 60 * 60 * 24 * 7, // 1 week\n enabled: !!id && id > 0,\n ...options,\n });\n};\n","/**\n * Users React Query hooks\n */\n\nimport type { CurrentUser, User } from '@atomic-solutions/wordpress-api-client';\nimport { useQuery, type UseQueryOptions } from '@tanstack/react-query';\n\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\ntype UseCurrentUserOptions = Omit<UseQueryOptions<CurrentUser, Error>, 'queryKey' | 'queryFn'>;\n\ntype UseUserOptions = Omit<UseQueryOptions<User, Error>, 'queryKey' | 'queryFn'>;\n\n/**\n * Hook for fetching current authenticated user\n *\n * Requires JWT token to be configured\n *\n * @param options - React Query options\n */\nexport const useCurrentUser = (options?: UseCurrentUserOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.users.me(),\n queryFn: () => client.users.me(),\n staleTime: 1000 * 60 * 5, // 5 minutes\n retry: false, // Don't retry auth failures\n ...options,\n });\n};\n\n/**\n * Hook for fetching a user by ID\n *\n * @param id - User ID\n * @param options - React Query options\n */\nexport const useUser = (id: number, options?: UseUserOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n\n return useQuery({\n queryKey: queryKeys.users.detail(id),\n queryFn: () => client.users.get(id),\n staleTime: 1000 * 60 * 60, // 1 hour\n enabled: id > 0,\n ...options,\n });\n};\n","/**\n * Auth React Query hooks\n */\n\nimport type { JwtLoginInput, JwtTokenResponse } from '@atomic-solutions/wordpress-api-client';\nimport { useMutation, useQueryClient, type UseMutationOptions } from '@tanstack/react-query';\n\nimport { useWordPressClient, useWordPressQueryKeys } from './useWordPressClient';\n\ntype UseLoginOptions = Omit<\n UseMutationOptions<JwtTokenResponse, Error, JwtLoginInput>,\n 'mutationFn'\n>;\n\n/**\n * Hook for logging in with username/password\n *\n * Returns JWT token on success\n *\n * @param options - React Query mutation options\n *\n * @example\n * ```tsx\n * const { mutate: login, isPending } = useLogin({\n * onSuccess: (data) => {\n * // Save token to storage\n * AsyncStorage.setItem('wp_jwt_token', data.token);\n * },\n * onError: (error) => {\n * // Handle login error\n * Alert.alert('Error', error.message);\n * },\n * });\n *\n * login({ username: 'user', password: 'pass' });\n * ```\n */\nexport const useLogin = (options?: UseLoginOptions) => {\n const client = useWordPressClient();\n const queryKeys = useWordPressQueryKeys();\n const queryClient = useQueryClient();\n\n return useMutation({\n mutationFn: (input: JwtLoginInput) => client.auth.login(input),\n onSuccess: () => {\n // Invalidate user queries after login\n queryClient.invalidateQueries({ queryKey: queryKeys.users.all });\n },\n ...options,\n });\n};\n\n/**\n * Hook for validating current JWT token\n *\n * @param options - React Query mutation options\n */\nexport const useValidateToken = (\n options?: Omit<UseMutationOptions<boolean, Error, void>, 'mutationFn'>\n) => {\n const client = useWordPressClient();\n\n return useMutation({\n mutationFn: () => client.auth.validateToken(),\n ...options,\n });\n};\n"],"mappings":"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","names":["queryKeys","useInfiniteQuery","useQuery","queryKeys","useQuery","useInfiniteQuery","useQuery","queryKeys","useQuery","useQuery","queryKeys","useQuery","queryKeys"]}
|