Files
manage/src/hooks/resource/useResource.js
2025-01-15 15:31:08 +08:00

105 lines
3.1 KiB
JavaScript

import { useState, useCallback } from "react";
import { message } from "antd";
import { resourceService } from "@/services/supabase/resource";
export const useResources = (initialPagination, initialSorter, type) => {
const [resources, setResources] = useState([]);
const [loading, setLoading] = useState(false);
const [total, setTotal] = useState(0);
const [currentPagination, setCurrentPagination] = useState(initialPagination);
const [currentSorter, setCurrentSorter] = useState(initialSorter);
const fetchResources = useCallback(
async (params = {}) => {
try {
setLoading(true);
const newPagination = {
current: params.current || currentPagination.current,
pageSize: params.pageSize || currentPagination.pageSize,
};
const newSorter = {
field: params.field || currentSorter.field,
order: params.order || currentSorter.order,
};
setCurrentPagination(newPagination);
setCurrentSorter(newSorter);
const { data, total: newTotal } = await resourceService.getResources({
page: newPagination.current,
pageSize: newPagination.pageSize,
orderBy: newSorter.field,
ascending: newSorter.order === "ascend",
type: type,
...(params?.search ? { searchQuery: params.search } : {}),
...(params?.searchQuery ? {searchQuery:params.searchQuery} : {}),
});
setResources(data || []);
setTotal(newTotal || 0);
return { data, total: newTotal };
} catch (error) {
console.error("获取列表失败:", error);
message.error("获取列表失败");
} finally {
setLoading(false);
}
},
[currentPagination, currentSorter]
);
const createResource = async (values) => {
try {
const newResource = await resourceService.createResource(values);
await fetchResources({ current: 1 });
message.success("创建成功");
return newResource;
} catch (error) {
message.error("创建失败");
throw error;
}
};
const updateResource = async (id, values) => {
try {
const updatedResource = await resourceService.updateResource(id, values);
await fetchResources({ current: currentPagination.current });
message.success("更新成功");
return updatedResource;
} catch (error) {
message.error("更新失败");
throw error;
}
};
const deleteResource = async (id) => {
try {
const data= await resourceService.deleteResource(id, type);
if(data?.length>0){
const newCurrent =
resources.length === 1 && currentPagination.current > 1
? currentPagination.current - 1
: currentPagination.current;
await fetchResources({ current: newCurrent });
message.success("删除成功");
}else{
throw new Error("暂无权限");
}
} catch (error) {
throw error;
}
};
return {
resources,
loading,
total,
currentPagination,
currentSorter,
fetchResources,
createResource,
updateResource,
deleteResource,
};
};