mirror of
https://github.com/supabase/supabase.git
synced 2026-07-05 04:14:46 +08:00
49 lines
1.2 KiB
TypeScript
49 lines
1.2 KiB
TypeScript
import AwesomeDebouncePromise from 'awesome-debounce-promise'
|
|
import { InitialStateType } from '../store/reducers'
|
|
import { Sort, Filter } from '../types'
|
|
|
|
export async function fetchCount(
|
|
state: InitialStateType,
|
|
dispatch: (value: unknown) => void,
|
|
filters: Filter[]
|
|
) {
|
|
if (!state.rowService) return
|
|
|
|
const { data, error } = await state.rowService.count(filters)
|
|
if (error) {
|
|
// TODO: handle fetch rows count error
|
|
} else {
|
|
dispatch({
|
|
type: 'SET_ROWS_COUNT',
|
|
payload: data ?? 0,
|
|
})
|
|
}
|
|
}
|
|
|
|
export async function fetchPage(
|
|
state: InitialStateType,
|
|
dispatch: (value: unknown) => void,
|
|
sorts: Sort[],
|
|
filters: Filter[]
|
|
) {
|
|
if (!state.rowService) return
|
|
dispatch({ type: 'SET_IS_LOADING', payload: { isLoading: true } })
|
|
|
|
const { data, error } = await state.rowService.fetchPage(
|
|
state.page,
|
|
state.rowsPerPage,
|
|
filters,
|
|
sorts
|
|
)
|
|
if (error) {
|
|
// TODO: handle fetch rows data error
|
|
} else {
|
|
dispatch({
|
|
type: 'SET_ROWS',
|
|
payload: { rows: data?.rows ?? [] },
|
|
})
|
|
}
|
|
dispatch({ type: 'SET_IS_LOADING', payload: { isLoading: false } })
|
|
}
|
|
export const refreshPageDebounced = AwesomeDebouncePromise(fetchPage, 500)
|