Files
supabase/apps/studio/components/grid/hooks/useSaveTableEditorState.ts
Jonathan Summers-Muir 21bbc93afa Chore/table editor filter sorts logic moved to hooks (#35138)
* init

* update Popovers to use new hooks

* Update Header.tsx

* made primitive components for filter and sorts

* Delete FilterPopoverWrapper.tsx

* Delete SortPopoverWrapper.tsx

* remove

* Create README.md

* Update README.md

* fix sort popover issues

* Update SupabaseGrid.tsx

* move DeleteConfirmationDialogs into context

* fix issue with

* more stuff for alaister

* fix ts and tables pages

* First round of clean up

* Update README.md

* Smol fix

* Fix issues identified

* Smol fix

* Fix updating table name in database/tables not invalidating

* Improve SQL editor invalidation logic

* Add fix to reopen last opened table when landing on table editor

* Smol fix

---------

Co-authored-by: Alaister Young <a@alaisteryoung.com>
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-04-30 14:19:21 +08:00

59 lines
1.8 KiB
TypeScript

import { useCallback } from 'react'
import { saveTableEditorStateToLocalStorage } from 'components/grid/SupabaseGrid.utils'
import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext'
import { useTableEditorTableStateSnapshot } from 'state/table-editor-table'
/**
* Hook for saving state and triggering side effects.
*/
export function useSaveTableEditorState() {
const { project } = useProjectContext()
const snap = useTableEditorTableStateSnapshot()
const saveDataAndTriggerSideEffects = useCallback(
(dataToSave: { filters?: string[]; sorts?: string[] }) => {
const projectRef = project?.ref
if (!projectRef) {
return console.warn(
'[useSaveTableEditorState] ProjectRef missing, cannot save or trigger side effects.'
)
}
try {
snap.setPage(1)
snap.setEnforceExactCount(false)
const tableName = snap.table?.name
const schema = snap.table?.schema
if (tableName) {
saveTableEditorStateToLocalStorage({
projectRef,
tableName,
schema,
...dataToSave,
})
} else {
console.warn('[useSaveTableEditorState] Table name missing, skipping localStorage save.')
}
} catch (error) {
console.error('[useSaveTableEditorState] Error during interaction with snapshot:', error)
}
},
[snap, project]
)
const saveFiltersAndTriggerSideEffects = useCallback(
(urlFilters: string[]) => saveDataAndTriggerSideEffects({ filters: urlFilters }),
[saveDataAndTriggerSideEffects]
)
const saveSortsAndTriggerSideEffects = useCallback(
(urlSorts: string[]) => saveDataAndTriggerSideEffects({ sorts: urlSorts }),
[saveDataAndTriggerSideEffects]
)
return { saveFiltersAndTriggerSideEffects, saveSortsAndTriggerSideEffects }
}