import { showSuccessToast } from "@/src/features/notifications/showSuccessToast"; import { api } from "@/src/utils/api"; import { copyTextToClipboard } from "@/src/utils/clipboard"; type UseViewMutationsProps = { handleSetViewId: (viewId: string | null) => void; }; export const useViewMutations = ({ handleSetViewId, }: UseViewMutationsProps) => { const utils = api.useUtils(); const createMutation = api.TableViewPresets.create.useMutation({ onSuccess: (data) => { utils.TableViewPresets.getByTableName.invalidate(); handleSetViewId(data.view.id); }, }); const updateConfigMutation = api.TableViewPresets.update.useMutation({ onSuccess: (data) => { showSuccessToast({ title: "View updated", description: `${data.view.name} has been updated to reflect your current table state`, }); }, }); const updateNameMutation = api.TableViewPresets.updateName.useMutation({ onSuccess: () => { utils.TableViewPresets.getByTableName.invalidate(); }, }); const deleteMutation = api.TableViewPresets.delete.useMutation({ onSuccess: () => { utils.TableViewPresets.getByTableName.invalidate(); handleSetViewId(null); }, }); const generatePermalinkMutation = api.TableViewPresets.generatePermalink.useMutation({ onSuccess: (data) => { copyTextToClipboard(data); showSuccessToast({ title: "Permalink copied to clipboard", description: "You can now share the permalink with others", }); }, }); return { createMutation, updateConfigMutation, updateNameMutation, deleteMutation, generatePermalinkMutation, }; };