56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
import { BlogData } from "@/schema/blog";
|
|
import { FetchBlogParams, FetchRecentBlogParams } from "@/schema/services/blog";
|
|
import { useState } from "react";
|
|
import { fetchBlogREST, fetchRecentBlogREST } from "../rest/blog";
|
|
|
|
export function useBlogQuery() {
|
|
const [data, setData] = useState<BlogData[]>([]);
|
|
const [isFetching, setFetching] = useState(false);
|
|
const [hasNext, setHasNext] = useState(false);
|
|
|
|
async function _fetch(params: FetchBlogParams = {}) {
|
|
setFetching(true);
|
|
const res = await fetchBlogREST(params);
|
|
setFetching(false);
|
|
|
|
if (Array.isArray(res?.formattedData)) {
|
|
if (!!params.page && params.page > 1) {
|
|
setData((currentData) => {
|
|
return [...currentData, ...res.formattedData];
|
|
});
|
|
} else {
|
|
setData(res.formattedData);
|
|
}
|
|
}
|
|
setHasNext(res?.hasNextPage ?? false);
|
|
}
|
|
|
|
return {
|
|
_fetch,
|
|
data,
|
|
isFetching,
|
|
hasNext,
|
|
};
|
|
}
|
|
|
|
export function useRecentBlogQuery() {
|
|
const [data, setData] = useState<BlogData[]>([]);
|
|
const [isFetching, setFetching] = useState(false);
|
|
|
|
async function _fetch(params: FetchRecentBlogParams) {
|
|
setFetching(true);
|
|
const res = await fetchRecentBlogREST(params);
|
|
setFetching(false);
|
|
|
|
if (Array.isArray(res?.formattedData)) {
|
|
setData(res.formattedData);
|
|
}
|
|
}
|
|
|
|
return {
|
|
_fetch,
|
|
data,
|
|
isFetching,
|
|
};
|
|
}
|