105 lines
3.1 KiB
JavaScript
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,
|
|
};
|
|
};
|