UNPKG

query-harbor

Version:

A React Query utility package for efficient data fetching and caching

2 lines (1 loc) 6.17 kB
(function(p,T){typeof exports=="object"&&typeof module<"u"?T(exports,require("@tanstack/react-query"),require("react-cookie"),require("axios")):typeof define=="function"&&define.amd?define(["exports","@tanstack/react-query","react-cookie","axios"],T):(p=typeof globalThis<"u"?globalThis:p||self,T(p.QueryHarbor={},p.ReactQuery,p.ReactCookie,p.axios))})(this,function(p,T,O,P){"use strict";const D=({cookieName:n})=>{const[i,a,w]=O.useCookies([n]);return{cookie:i,setCookie:a,removeCookie:w}},z=async({action:n,url:i,data:a,headers:w,baseURL:l})=>{const d=l?P.create({baseURL:l}):P;if(l&&d!==P){const g=l.endsWith("/")&&i.startsWith("/")?`${l}${i.slice(1)}`:`${l}${i}`,o={headers:w};switch(n){case"GET":return await P.get(g,o);case"POST":return await P.post(g,a,o);case"PUT":return await P.put(g,a,o);case"DELETE":return await P.delete(g,{...o,data:a});default:throw new Error(`Invalid action: ${n}`)}}const f={headers:w};switch(n){case"GET":return await d.get(i,f);case"POST":return await d.post(i,a,f);case"PUT":return await d.put(i,a,f);case"DELETE":return await d.delete(i,{...f,data:a});default:throw new Error(`Invalid action: ${n}`)}},I=async({action:n,url:i,data:a,headers:w,baseURL:l})=>{var d,f,g,o,m,t,$,s,C,c;try{const r=await z({action:n,url:i,data:a,headers:w,baseURL:l});return r.status>=200&&r.status<=299?{status:!0,data:r.data,message:r.data.message||"Success",statusCode:r.status}:{status:!1,error:"API Failed",message:"API Failed",statusCode:r.status}}catch(r){return P.isAxiosError(r)?((d=r.response)==null||d.status,r.message==="Network Error"?{status:!1,error:"Network Error",message:"Network Error"}:{status:!1,type:(g=(f=r.response)==null?void 0:f.data)==null?void 0:g.type,message:((m=(o=r.response)==null?void 0:o.data)==null?void 0:m.message)||"An error occurred",error:(($=(t=r.response)==null?void 0:t.data)==null?void 0:$.error)||"Unknown error",statusCode:(s=r.response)==null?void 0:s.status,errorType:(c=(C=r.response)==null?void 0:C.data)==null?void 0:c.errorType}):{status:!1,error:"API Failed",message:"An unexpected error occurred"}}},B=({url:n,baseUrl:i,queryKey:a,method:w,data:l,enabled:d=!0,staleTime:f=3e5,refetchOnWindowFocus:g=!1,select:o})=>{const m=T.useQueryClient(),{cookie:t}=D({cookieName:"accessToken"});let $={};t!=null&&t.accessToken&&($={Authorization:`Bearer ${t.accessToken}`});const s=T.useQuery({queryKey:a,queryFn:async()=>{try{const c=await I({action:w,url:n,data:l,headers:$});return c!=null&&c.data?c.data:{totalCount:0,data:[]}}catch(c){throw console.error("Query Error:",c),c}},enabled:d,staleTime:f,refetchOnWindowFocus:g,select:o});return{refetchQuery:()=>{m.invalidateQueries({queryKey:a})},queryData:s.data,isLoading:s.isLoading,isError:s.isError,error:s.error}},H=({url:n,queriesToInvalidate:i,method:a,data:w={},isFormData:l=!1,excludedIndexKeys:d=[],onMutationSuccess:f})=>{const g=T.useQueryClient(),{cookie:o}=D({cookieName:"accessToken"});let m={};o!=null&&o.accessToken&&(m={Authorization:`Bearer ${o==null?void 0:o.accessToken}`});const t=T.useMutation({mutationFn:async({isPriorityDataAvailable:s,priorityData:C,url:c=n})=>{const r=s?C:w;if(l){let x=new FormData;const v=(h,e,u="",Q={})=>{if(e==null)return;const{excludedIndexKeys:k=[]}=Q;Array.isArray(e)?e.forEach((y,E)=>{const S=k.includes(u)?u:u?`${u}[${E}]`:`${E}`;y instanceof File?h.append(u,y):typeof y=="object"&&y!==null?v(h,y,S,Q):h.append(S,y)}):typeof e=="object"&&e!==null?e instanceof File?h.append(u,e):Object.keys(e).forEach(y=>{const E=e[y],N=u?`${u}[${y}]`:y;v(h,E,N,Q)}):e!==""&&e!==void 0&&e!==null&&h.append(u,e)},q={excludedIndexKeys:d};Object.keys(r).forEach(h=>{v(x,r[h],h,q)});const{status:A,message:M,data:F}=await I({action:a,url:n,data:x,headers:m});if(A)return{data:F};throw new Error(M||"Something went wrong!")}else{const{status:x,message:v,data:q}=await I({action:a,url:c,data:r,headers:m});if(x)return{data:q};throw new Error(v||"Something went wrong!")}},onSuccess:({data:s})=>{i&&g.invalidateQueries({queryKey:i}),f&&f(s)},onError:s=>(console.error("Mutation Error:",s),{type:"Error",message:(s==null?void 0:s.message)||"Something went wrong!",errorType:s==null?void 0:s.errorType})});return{runMutation:({isPriorityDataAvailable:s,priorityData:C,url:c}={})=>{try{t.mutate({isPriorityDataAvailable:s,priorityData:C,url:c})}catch(r){console.error("Mutation Execution Error:",r)}},mutationLoading:t.isPending,mutationData:t.data,mutationError:t.error?{type:"Error",message:t.error.message,errorType:t.error.errorType}:void 0,isMutationSucceeded:t.isSuccess}},W=({url:n,queryKey:i,method:a,data:w,enabled:l=!0,staleTime:d=3e5,responseDataKey:f="data"})=>{var r,x,v,q,A,M,F,h;const g=T.useQueryClient(),{cookie:o}=D({cookieName:"accessToken"}),m=o!=null&&o.accessToken?{Authorization:`Bearer ${o.accessToken}`}:void 0,t=T.useInfiniteQuery({queryKey:i,initialPageParam:1,queryFn:async({pageParam:e=1})=>{try{let u="";a==="GET"&&(u=n!=null&&n.includes("?")?`&page=${e}`:`?page=${e}`);const Q=await I({action:a,url:`${n}${u}`,data:{...w,page:e},headers:m});if(Q.status&&Q.data){const k=Q.data,y=k[f]||[],E=k.pagination,N=k.totalCount,S=k.limit,G=k.page,b=k.totalPages,{data:L,...j}=k;return E?{data:y,nextPage:E.page<E.totalPages?E.page+1:void 0,hasMore:E.page<E.totalPages,totalCount:E.totalCount,otherData:j}:{data:y,nextPage:G<b?G+1:void 0,hasMore:G<b,totalCount:N,otherData:j}}return{totalCount:0,data:[],hasMore:!1}}catch(u){throw console.error("Query Error:",u),u}},getNextPageParam:e=>e!=null&&e.hasMore?e.nextPage:void 0,enabled:l,staleTime:d,refetchOnWindowFocus:!1}),$=()=>g.invalidateQueries({queryKey:i}),s=((x=(r=t.data)==null?void 0:r.pages)==null?void 0:x.flatMap(e=>e==null?void 0:e.data))??[],C=((A=(q=(v=t.data)==null?void 0:v.pages)==null?void 0:q[0])==null?void 0:A.totalCount)??0,c=((h=(F=(M=t.data)==null?void 0:M.pages)==null?void 0:F[0])==null?void 0:h.otherData)??{};return{refetchQuery:$,queryData:s,isLoading:t.isLoading,isError:t.isError,error:t.error,fetchNextPage:t.fetchNextPage,hasNextPage:t.hasNextPage,totalCount:C,otherData:c}};p.useCookie=D,p.useGlobalInfiniteQuery=W,p.useGlobalMutation=H,p.useGlobalQuery=B,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"})});