kanban-app/frontend/src/hooks/useListMutations.ts
2026-02-27 22:38:38 +03:00

86 lines
2.5 KiB
TypeScript

import { useApi } from './useApi';
import { useLoader } from '../context/loaders/useLoader';
import { useToast } from '../context/toasts/useToast';
export function useListMutations(boardId: number, onUpdate: () => void) {
const { createList, updateList, deleteList } = useApi();
const { withLoader } = useLoader();
const { addNotification } = useToast();
const createNewList = async (name: string, pos: number) => {
try {
const data = await withLoader(() => createList(boardId, { name, pos }), 'Creating list...');
onUpdate();
addNotification({
type: 'success',
title: 'List Created',
message: `List "${data.name}" created successfully.`,
duration: 3000,
});
return data;
} catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to create list';
addNotification({
type: 'error',
title: 'Error Creating List',
message: errorMessage,
duration: 5000,
});
throw err;
}
};
const updateExistingList = async (listId: number, data: { name: string; pos: number }) => {
try {
const updated = await withLoader(
() => updateList(listId, { ...data, closed: false }),
'Updating list...'
);
onUpdate(); // Refresh board data after update
addNotification({
type: 'success',
title: 'List Updated',
message: `List "${updated.name}" updated successfully.`,
duration: 3000,
});
return updated;
} catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to update list';
addNotification({
type: 'error',
title: 'Error Updating List',
message: errorMessage,
duration: 5000,
});
throw err;
}
};
const removeList = async (listId: number) => {
try {
await withLoader(() => deleteList(listId), 'Deleting list...');
addNotification({
type: 'success',
title: 'List Deleted',
message: 'List deleted successfully.',
duration: 3000,
});
onUpdate(); // Refresh board data after delete
} catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to delete list';
addNotification({
type: 'error',
title: 'Error Deleting List',
message: errorMessage,
duration: 5000,
});
throw err;
}
};
return {
createList: createNewList,
updateList: updateExistingList,
deleteList: removeList,
};
}