32 lines
882 B
TypeScript
32 lines
882 B
TypeScript
import { useState } from 'react';
|
|
|
|
export function useStarToggle() {
|
|
const [updatingStars, setUpdatingStars] = useState<Set<string>>(new Set());
|
|
|
|
const toggleStar = async (recordId: string) => {
|
|
if (updatingStars.has(recordId)) return null;
|
|
|
|
try {
|
|
setUpdatingStars(prev => new Set(prev).add(recordId));
|
|
const response = await fetch(`/api/records/${recordId}/star`, {
|
|
method: 'PATCH'
|
|
});
|
|
|
|
if (!response.ok) throw new Error('切换星标状态失败');
|
|
const data = await response.json();
|
|
return data.isStarred as boolean;
|
|
} catch (error) {
|
|
console.error('切换星标状态失败:', error);
|
|
return null;
|
|
} finally {
|
|
setUpdatingStars(prev => {
|
|
const newSet = new Set(prev);
|
|
newSet.delete(recordId);
|
|
return newSet;
|
|
});
|
|
}
|
|
};
|
|
|
|
return { updatingStars, toggleStar };
|
|
}
|