Merge pull request #10532 from gitstart/fix/table-filter-on-column-rename

fix: Table View no longer returns values when filter is applied on renamed column
This commit is contained in:
Joshen Lim authored and GitHub committed 2023-03-31 23:11:06 +08:00
commit dfe1d4ccca
1 file changed
+32 -1
@@ -5,7 +5,7 @@ import { Dictionary } from 'components/grid'
import { Modal } from 'ui'
import type { PostgresTable, PostgresColumn } from '@supabase/postgres-meta'
import { useStore } from 'hooks'
import { useStore, useUrlState } from 'hooks'
import { entityTypeKeys } from 'data/entity-types/keys'
import { useTableRowCreateMutation } from 'data/table-rows/table-row-create-mutation'
import { useTableRowUpdateMutation } from 'data/table-rows/table-row-update-mutation'
@@ -66,6 +66,7 @@ const SidePanelEditor = ({
onTableCreated = noop,
onColumnSaved = noop,
}: SidePanelEditorProps) => {
const [_, setParams] = useUrlState({ arrayKeys: ['filter', 'sort'] })
const { meta, ui } = useStore()
const queryClient = useQueryClient()
@@ -263,6 +264,14 @@ const SidePanelEditor = ({
if (response?.error) {
ui.setNotification({ category: 'error', message: response.error.message })
} else {
if (
!isNewRecord &&
payload.name &&
selectedColumnToEdit &&
selectedColumnToEdit.name !== payload.name
) {
reAddRenamedColumnSortAndFilter(selectedColumnToEdit.name, payload.name)
}
queryClient.invalidateQueries(sqlKeys.query(project?.ref, ['foreign-key-constraints']))
await Promise.all([
meta.tables.loadById(selectedTable!.id),
@@ -283,6 +292,28 @@ const SidePanelEditor = ({
resolve()
}
/**
* Adds the renamed column's filter and/or sort rules.
*/
const reAddRenamedColumnSortAndFilter = (oldColumnName: string, newColumnName: string) => {
setParams((prevParams) => {
const existingFilters = (prevParams?.filter ?? []) as string[]
const existingSorts = (prevParams?.sort ?? []) as string[]
return {
...prevParams,
filter: existingFilters.map((filter: string) => {
const [column] = filter.split(':')
return column === oldColumnName ? filter.replace(column, newColumnName) : filter
}),
sort: existingSorts.map((sort: string) => {
const [column] = sort.split(':')
return column === oldColumnName ? sort.replace(column, newColumnName) : sort
}),
}
})
}
const saveTable = async (
payload: any,
columns: ColumnField[],