From 2e98b7945df0d6a05bfd292a9517dc36e2d15672 Mon Sep 17 00:00:00 2001 From: vinibispo Date: Mon, 8 May 2023 09:01:58 -0300 Subject: [PATCH 1/7] docs: adding basic documentation --- docs/api-reference.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 docs/api-reference.md diff --git a/docs/api-reference.md b/docs/api-reference.md new file mode 100644 index 0000000..b000680 --- /dev/null +++ b/docs/api-reference.md @@ -0,0 +1,8 @@ +# API Reference +--- +- [`ReactQuery.Provider.createClient(...)`](#reactqueryprovidercreateclient) + + +### `ReactQuery.Provider.createClient(...)` + +The function responsible to create the query client From d4894f6883ad6c6d0b6a8585a868df75e7f47b0d Mon Sep 17 00:00:00 2001 From: vinibispo Date: Tue, 9 May 2023 08:49:14 -0300 Subject: [PATCH 2/7] docs: adding ReactQuery.Provider.make docs --- docs/api-reference.md | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/docs/api-reference.md b/docs/api-reference.md index b000680..e7e5894 100644 --- a/docs/api-reference.md +++ b/docs/api-reference.md @@ -1,8 +1,37 @@ # API Reference --- -- [`ReactQuery.Provider.createClient(...)`](#reactqueryprovidercreateclient) +- [`ReactQuery.Provider.createClient()`](#reactqueryprovidercreateclient) +- [`ReactQuery.Provider.make()`](#reactqueryprovidermake) -### `ReactQuery.Provider.createClient(...)` +### `ReactQuery.Provider.createClient()` The function responsible to create the query client + +Definition: + +```rescript +module Provider = { + let createClient: unit => queryClientValue +} +``` +Usage: +```rescript +let client = ReactQuery.Provider.createClient() +``` + +### `ReactQuery.Provider.make()` + +The React Context Provider responsible to hold all the react-query context + +Definition: + +```rescript +module Provider = { + let make: ( + ~client: queryClientValue, + ~contextSharing: bool, + ~children: React.element + ) => React.element +} +``` From 174564ee41ac2c83e2604235357610389cd9a3cd Mon Sep 17 00:00:00 2001 From: vinibispo Date: Tue, 9 May 2023 08:49:14 -0300 Subject: [PATCH 3/7] docs: adding ReactQuery.Provider.make docs --- docs/api-reference.md | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/docs/api-reference.md b/docs/api-reference.md index e7e5894..a2e7b5f 100644 --- a/docs/api-reference.md +++ b/docs/api-reference.md @@ -11,13 +11,13 @@ The function responsible to create the query client Definition: ```rescript -module Provider = { - let createClient: unit => queryClientValue -} + module Provider = { + let createClient: unit => queryClientValue + } ``` Usage: ```rescript -let client = ReactQuery.Provider.createClient() + let client = ReactQuery.Provider.createClient() ``` ### `ReactQuery.Provider.make()` @@ -27,11 +27,17 @@ The React Context Provider responsible to hold all the react-query context Definition: ```rescript -module Provider = { - let make: ( - ~client: queryClientValue, - ~contextSharing: bool, - ~children: React.element - ) => React.element -} + module Provider = { + let make: ( + ~client: queryClientValue, + ~contextSharing: bool, + ~children: React.element + ) => React.element + } +``` + +Usage: + +```rescript + children ``` From 953c57cb243e652d126b8771d95ed437b7a289e0 Mon Sep 17 00:00:00 2001 From: vinibispo Date: Tue, 9 May 2023 19:38:53 -0300 Subject: [PATCH 4/7] docs: removing namespace ReactQuery, and adding a bunch of hooks --- docs/api-reference.md | 97 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 90 insertions(+), 7 deletions(-) diff --git a/docs/api-reference.md b/docs/api-reference.md index a2e7b5f..0c09479 100644 --- a/docs/api-reference.md +++ b/docs/api-reference.md @@ -1,10 +1,14 @@ # API Reference --- -- [`ReactQuery.Provider.createClient()`](#reactqueryprovidercreateclient) -- [`ReactQuery.Provider.make()`](#reactqueryprovidermake) +- [`Provider.createClient()`](#providercreateclient) +- [`Provider.make()`](#providermake) +- [`DevTools.make(...)`](#devtoolsmake) +- [`useQueryClient`](#usequeryclient) +- [`useQuery`](#usequery) +- [`useMutation`](#usemutation) -### `ReactQuery.Provider.createClient()` +### `Provider.createClient()` The function responsible to create the query client @@ -17,10 +21,10 @@ Definition: ``` Usage: ```rescript - let client = ReactQuery.Provider.createClient() + let client = Provider.createClient() ``` -### `ReactQuery.Provider.make()` +### `Provider.make()` The React Context Provider responsible to hold all the react-query context @@ -30,7 +34,7 @@ Definition: module Provider = { let make: ( ~client: queryClientValue, - ~contextSharing: bool, + ~contextSharing: bool=?, ~children: React.element ) => React.element } @@ -39,5 +43,84 @@ Definition: Usage: ```rescript - children + children +``` + +### `DevTools.make(...)` + +The React Query DevTools Provider, which is responsible to initialize the React Query devtools + +Definition: + +```rescript + module DevTools = { + let make: (~initialIsOpen: bool=?) => React.element + } +``` + +Usage: + +```rescript + +``` + +### `useQueryClient()` + +The queryClient fetched from a hook + +Definition: + +```rescript + let useQueryClient: unit => queryClient<'queryKey, 'queryData, 'queryError, 'pageParams> +``` + +Usage: + +```rescript + let queryClient = useQueryClient() +``` + +### `useQuery` + +The hook responsible to get loading, error, and data when fetching data from an api + +Definition: + +```rescript + let useQuery: queryOptions<'queryKey, 'queryData, 'queryError, 'pageParam> => queryResult< + 'queryError, + 'queryData, + > +``` + +Usage: + +```rescript + let queryResult = useQuery({ + queryKey: ["articles"], + queryFn: () => fetchArticles() + }) +``` + + +### `useMutation` + +Definition: + +```rescript + let useMutation: mutationOptions< + 'mutationVariables, + 'mutationData, + 'mutationError, + 'unknown, + > => mutationResult<'mutationVariables, 'mutationData, 'mutationError, 'unknown> +``` + +Usage: + +```rescript + let mutationResult = useMutation({ + mutationKey: ["articles"], + mutationFn: () => addArticle(article) + }) ``` From 8de3ae7c9db6e0e8de20af397b0c4290343f6b93 Mon Sep 17 00:00:00 2001 From: vinibispo Date: Wed, 10 May 2023 09:10:40 -0300 Subject: [PATCH 5/7] docs: add docs for types queryClient, queryOptions, and mutationOptions --- docs/api-reference.md | 157 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) diff --git a/docs/api-reference.md b/docs/api-reference.md index 0c09479..310a4f1 100644 --- a/docs/api-reference.md +++ b/docs/api-reference.md @@ -4,8 +4,11 @@ - [`Provider.make()`](#providermake) - [`DevTools.make(...)`](#devtoolsmake) - [`useQueryClient`](#usequeryclient) +- [`queryClient`](#queryclient) - [`useQuery`](#usequery) +- [`queryOptions`](#queryoptions) - [`useMutation`](#usemutation) +- [`mutationOptions`](#mutationoptions) ### `Provider.createClient()` @@ -80,6 +83,67 @@ Usage: let queryClient = useQueryClient() ``` +### `queryClient` +Type responsible for the return of the useQueryClient hook + +Definition: +```rescript + type queryClient<'queryKey, 'queryData, 'queryError, 'pageParams> = { + fetchQuery: fetchQueryOptions<'queryKey, 'queryData, 'queryError, 'pageParams> => Js.Promise.t< + 'queryData, + >, + fetchInfiniteQuery: fetchQueryOptions< + 'queryKey, + 'queryData, + 'queryError, + 'pageParams, + > => Js.Promise.t>, + prefetchQuery: fetchQueryOptions<'queryKey, 'queryData, 'queryError, 'pageParams> => Js.Promise.t< + unit, + >, + prefetchInfiniteQuery: fetchQueryOptions< + 'queryKey, + 'queryData, + 'queryError, + 'pageParams, + > => Js.Promise.t, + getQueryData: 'queryKey => option<'queryData>, + setQueryData: ('queryKey, option<'queryData>) => 'queryData, + getQueryState: ( + 'queryKey, + ReactQuery_Types.queryFilter<'queryKey>, + ) => queryState<'queryData, 'queryError>, + setQueriesData: ( + ReactQuery_Types.queryDataKeyOrFilterValue<'queryKey>, + option<'queryData> => 'queryData, + ) => unit, + invalidateQueries: ( + option>, + option, + ) => Js.Promise.t, + refetchQueries: ( + option>, + option, + ) => Js.Promise.t, + cancelQueries: option> => Js.Promise.t, + removeQueries: option> => Js.Promise.t, + resetQueries: ( + option>, + option, + ) => Js.Promise.t, + isFetching: option> => bool, + isMutating: option> => bool, + clear: unit => unit, + } +``` + +Usage: + +```rescript + let queryClient = useQueryClient() + queryClient.fetchQuery(fetchQueryOptions(~queryKey=["articles"], ~retryOnMount=true)) +``` + ### `useQuery` The hook responsible to get loading, error, and data when fetching data from an api @@ -102,9 +166,59 @@ Usage: }) ``` +### `queryOptions` +Type responsible for hold parameters for the useQuery hook + +Definition: +```rescript + type queryOptions<'queryKey, 'queryData, 'queryError, 'pageParam> = { + queryKey?: array<'queryKey>, + queryFn?: ReactQuery_Types.queryFunctionContext, 'pageParam> => Js.Promise.t< + 'queryData, + >, + enabled?: bool, + retry?: ReactQuery_Types.retryValue<'queryError>, + retryOnMount?: bool, + retryDelay?: ReactQuery_Types.retryDelayValue<'queryError>, + staleTime?: ReactQuery_Types.timeValue, + queryKeyHashFn?: array<'queryKey> => string, + refetchInterval?: ReactQuery_Types.refetchIntervalValue, + refetchIntervalInBackground?: bool, + refetchOnMount?: ReactQuery_Types.boolOrAlwaysValue, + refetchOnWindowFocus?: ReactQuery_Types.boolOrAlwaysValue, + refetchOnReconnect?: ReactQuery_Types.boolOrAlwaysValue, + notifyOnChangeProps?: ReactQuery_Types.notifyOnChangePropsValue, + notifyOnChangePropsExclusions?: array, + onSuccess?: 'queryData => unit, + onError?: 'queryError => unit, + onSettled?: ('queryData, 'queryError) => unit, + select?: 'queryData => 'queryData, + suspense?: bool, + keepPreviousData?: bool, + structuralSharing?: bool, + useErrorBoundary?: bool, + initialData?: 'queryData => 'queryData, + initialDataUpdatedAt?: unit => int, + placeholderData?: unit => 'queryData, + } +``` + +Usage: + +```rescript + let queryOptions = { + queryKey: ["articles"], + queryFn: () => fetchArticles() + } + let queryResult = useQuery(queryOptions) + +``` + ### `useMutation` +The hook responsible to mutate a query, when update/create/delete anything + Definition: ```rescript @@ -124,3 +238,46 @@ Usage: mutationFn: () => addArticle(article) }) ``` + +### `mutationOptions` +Type responsible for hold the parameters for the useMutation hook + +Definition: + +```rescript + type mutationOptions<'mutationVariables, 'mutationData, 'mutationError, 'unknown> = { + mutationKey: array, + mutationFn: 'mutationVariables => Js.Promise.t<'mutationData>, + onMutate?: 'mutationVariables => Js.Promise.t, + onSuccess?: ( + 'mutationData, + 'mutationVariables, + Js.Nullable.t, + ) => Js.Promise.t<'unknown>, + onError?: ( + 'mutationError, + 'mutationVariables, + Js.Nullable.t, + ) => Js.Promise.t<'unknown>, + onSettled?: ( + 'mutationData, + 'mutationError, + 'mutationVariables, + Js.Nullable.t, + ) => Js.Promise.t<'unknown>, + retry?: ReactQuery_Types.retryValue<'mutationError>, + retryDelay?: ReactQuery_Types.retryDelayValue<'mutationError>, + useErrorBoundary?: bool, + } +``` + +Usage: + +```rescript + let mutationOptions = { + mutationKey: ["articles"], + mutationFn: () => addArticle(article) + } + + let mutationResult = useMutation(mutationOptions) +``` From 63b00b173c68de5b5d28a7b956055d908989f459 Mon Sep 17 00:00:00 2001 From: vinibispo Date: Wed, 10 May 2023 11:12:41 -0300 Subject: [PATCH 6/7] chore: get rid of deriving decorator --- docs/api-reference.md | 2 +- src/ReactQuery_Client.res | 94 +++++++++++++++++++-------------------- src/ReactQuery_Types.res | 13 +++--- 3 files changed, 53 insertions(+), 56 deletions(-) diff --git a/docs/api-reference.md b/docs/api-reference.md index 310a4f1..cbcf29a 100644 --- a/docs/api-reference.md +++ b/docs/api-reference.md @@ -141,7 +141,7 @@ Usage: ```rescript let queryClient = useQueryClient() - queryClient.fetchQuery(fetchQueryOptions(~queryKey=["articles"], ~retryOnMount=true)) + queryClient.fetchQuery({queryKey: ["articles"], retryOnMount: true}) ``` ### `useQuery` diff --git a/src/ReactQuery_Client.res b/src/ReactQuery_Client.res index 7b35607..ced3167 100644 --- a/src/ReactQuery_Client.res +++ b/src/ReactQuery_Client.res @@ -39,43 +39,41 @@ type getNextPageParamFunction<'data> = { allPages: array<'data>, } -@deriving(abstract) type queryObserverOptions<'error, 'data, 'queryData, 'queryKey, 'pageParam> = { - @optional retry: ReactQuery_Types.retryValue<'error>, - @optional retryDelay: ReactQuery_Types.retryValue<'error>, - @optional cacheTime: int, - @optional isDataEqual: (option<'data>, 'data) => bool, - @optional + retry?: ReactQuery_Types.retryValue<'error>, + retryDelay?: ReactQuery_Types.retryValue<'error>, + cacheTime?: int, + isDataEqual?: (option<'data>, 'data) => bool, queryFn: ReactQuery_Types.queryFunctionContext<'queryKey, 'pageParam> => Js.Promise.t<'queryData>, - @optional queryHash: string, - @optional queryKey: 'queryKey, - @optional queryKeyHashFn: 'queryKey => string, - @optional initialData: unit => 'data, - @optional initialDataUpdatedAt: unit => option, - @optional behavior: queryBehavior, // Revisar context type - @optional structuralSharing: bool, - @optional getPreviousPageParam: getPreviousPageParamFunction<'data>, - @optional getNextPageParam: getNextPageParamFunction<'data>, - @optional _defaulted: bool, - @optional enabled: bool, - @optional staleTime: int, - @optional refetchInterval: ReactQuery_Types.refetchIntervalValue, - @optional refetchIntervalInBackground: bool, - @optional refetchOnWindowFocus: ReactQuery_Types.boolOrAlwaysValue, - @optional refetchOnReconnect: ReactQuery_Types.boolOrAlwaysValue, - @optional refetchOnMount: ReactQuery_Types.boolOrAlwaysValue, - @optional retryOnMount: bool, - @optional notifyOnChangeProps: array, - @optional notifyOnChangePropsExclusions: array, - @optional onSuccess: 'data => unit, - @optional onError: 'error => unit, - @optional onSettled: (option<'data>, option<'error>) => unit, - @optional useErrorBoundary: bool, - @optional select: 'queryData => 'data, - @optional suspense: bool, - @optional keepPreviousData: bool, - @optional placeholderData: ReactQuery_Types.placeholderDataValue, - @optional optimisticResults: bool, + queryHash?: string, + queryKey?: 'queryKey, + queryKeyHashFn?: 'queryKey => string, + initialData?: unit => 'data, + initialDataUpdatedAt?: unit => option, + behavior?: queryBehavior, // Revisar context type + structuralSharing?: bool, + getPreviousPageParam?: getPreviousPageParamFunction<'data>, + getNextPageParam?: getNextPageParamFunction<'data>, + _defaulted?: bool, + enabled?: bool, + staleTime?: int, + refetchInterval?: ReactQuery_Types.refetchIntervalValue, + refetchIntervalInBackground?: bool, + refetchOnWindowFocus?: ReactQuery_Types.boolOrAlwaysValue, + refetchOnReconnect?: ReactQuery_Types.boolOrAlwaysValue, + refetchOnMount?: ReactQuery_Types.boolOrAlwaysValue, + retryOnMount?: bool, + notifyOnChangeProps?: array, + notifyOnChangePropsExclusions?: array, + onSuccess?: 'data => unit, + onError?: 'error => unit, + onSettled?: (option<'data>, option<'error>) => unit, + useErrorBoundary?: bool, + select?: 'queryData => 'data, + suspense?: bool, + keepPreviousData?: bool, + placeholderData?: ReactQuery_Types.placeholderDataValue, + optimisticResults?: bool, } type defaultOptions<'error, 'data, 'queryData, 'queryKey, 'pageParam> = { @@ -118,20 +116,20 @@ type queryState<'queryData, 'queryError> = { status: ReactQuery_Types.queryStatus, } -@deriving(abstract) type fetchQueryOptions<'queryKey, 'queryData, 'queryError, 'pageParam> = { - @optional queryKey: 'queryKey, - @optional - queryFn: ReactQuery_Types.queryFunctionContext<'queryKey, 'pageParam> => Js.Promise.t<'queryData>, - @optional retry: ReactQuery_Types.retryValue<'queryError>, - @optional retryOnMount: bool, - @optional retryDelay: ReactQuery_Types.retryDelayValue<'queryError>, - @optional staleTime: ReactQuery_Types.timeValue, - @optional queryKeyHashFn: 'queryKey => string, - @optional refetchOnMount: ReactQuery_Types.boolOrAlwaysValue, - @optional structuralSharing: bool, - @optional initialData: 'queryData => 'queryData, - @optional initialDataUpdatedAt: unit => int, + queryKey?: 'queryKey, + queryFn?: ReactQuery_Types.queryFunctionContext<'queryKey, 'pageParam> => Js.Promise.t< + 'queryData, + >, + retry?: ReactQuery_Types.retryValue<'queryError>, + retryOnMount?: bool, + retryDelay?: ReactQuery_Types.retryDelayValue<'queryError>, + staleTime?: ReactQuery_Types.timeValue, + queryKeyHashFn?: 'queryKey => string, + refetchOnMount?: ReactQuery_Types.boolOrAlwaysValue, + structuralSharing?: bool, + initialData?: 'queryData => 'queryData, + initialDataUpdatedAt?: unit => int, } type queryClient<'queryKey, 'queryData, 'queryError, 'pageParams> = { diff --git a/src/ReactQuery_Types.res b/src/ReactQuery_Types.res index 97d1901..c76e8d8 100644 --- a/src/ReactQuery_Types.res +++ b/src/ReactQuery_Types.res @@ -32,14 +32,13 @@ type placeholderData<'queryData, 'queryResult> = [ | #function(unit => option<'queryResult>) ] -@deriving(abstract) type queryFilter<'queryKey> = { - @optional exact: bool, - @optional @as("type") type_: [#active | #inactive | #all], - @optional stale: bool, - @optional fetching: bool, - @optional predicate: query => bool, - @optional queryKey: 'queryKey, + exact?: bool, + @as("type") type_?: [#active | #inactive | #all], + stale?: bool, + fetching?: bool, + predicate?: query => bool, + queryKey?: 'queryKey, } type queryDataKeyOrFilter<'queryKey> = [#keys('queryKey) | #filters(queryFilter<'queryKey>)] From 5f07eb35963122decd926fc5da7c9f53a111aa25 Mon Sep 17 00:00:00 2001 From: rescriptbr-admin Date: Wed, 10 May 2023 14:53:11 +0000 Subject: [PATCH 7/7] v1.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 521b630..b41b264 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@rescriptbr/react-query", - "version": "1.0.1", + "version": "1.1.0", "main": "index.js", "license": "MIT", "keywoprds": [