Skip to content

Commit

Permalink
Simplify react query state
Browse files Browse the repository at this point in the history
  • Loading branch information
Jean Dessane committed May 11, 2021
1 parent 260651e commit fb5bd65
Show file tree
Hide file tree
Showing 12 changed files with 148 additions and 252 deletions.
14 changes: 13 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 0 additions & 14 deletions src/QueryStateProvider.tsx

This file was deleted.

1 change: 1 addition & 0 deletions src/_internal/isClientSide.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const isClientSide: boolean = typeof document === 'object'
45 changes: 45 additions & 0 deletions src/_internal/parseQueryString.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { isEmpty, mapValues, pickBy, isNil } from 'lodash'

export const parseUrlString = (filter: any): any => {
if (filter instanceof Date) {
return filter.toISOString()
}
if (Array.isArray(filter)) {
if (filter.length === 0) {
return undefined
}
return filter.map(parseUrlString)
}
if (typeof filter === 'object') {
if (isEmpty(filter)) {
return undefined
}
if (filter['0']) {
return Object.values(filter)
}
return parseQueryString(filter)
}
if (filter === 'true') {
return true
}
if (filter === 'false') {
return false
}
try {
const numberInput = Number(filter.trim())
if (!isNaN(numberInput)) {
return Math.round(numberInput)
}
} catch (e) {
//
}
return filter
}

export const parseQueryString = <FiltersType>(filters: any) => {
const state = pickBy(mapValues(filters, parseUrlString), (el) => !isNil(el))
if (isEmpty(state)) {
return undefined
}
return state
}
64 changes: 0 additions & 64 deletions src/cleanQueryState.ts

This file was deleted.

6 changes: 2 additions & 4 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
export { default as useQueryState } from './useQueryState'
export { default as cleanQueryState } from './cleanQueryState'
export { default as QueryStateProvider } from './QueryStateProvider'
export { UseQueryStateOptions, UrlOptions } from './types'
export { useQueryState } from './useQueryState'
export { UseQueryStateOptions } from './types'
5 changes: 0 additions & 5 deletions src/queryState.context.ts

This file was deleted.

32 changes: 19 additions & 13 deletions src/types.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
export type UrlOptions = {
shouldUseGetRoot?: boolean
persist?: boolean
persistInitial?: boolean
}

export type UseQueryStateOptions<FiltersType> = {
export type UseQueryStateOptions<FiltersType extends object> = {
/**
* Default value used in state
* @default {}
*/
defaultValue?: FiltersType
customClean?: (filter: any, key?: string | number) => any | void
url?: UrlOptions
value?: FiltersType
onChange?: (groupName: string, value: FiltersType) => void
persistValue?: (groupName: string, value: FiltersType) => void
groupName?: string
/**
* Persist state in query url
* @default true
*/
persist?: boolean
/**
* If provided, state is persisted in session storage with the key provided
*/
cacheKey?: string
/**
* Overwrites default parse url function
* @param url
*/
parseSearch?: (search: string) => object | undefined
}
34 changes: 0 additions & 34 deletions src/usePersistUrlFilters.ts

This file was deleted.

Loading

0 comments on commit fb5bd65

Please sign in to comment.