import {SetterTransformMethod} from "./types"; export const toggleTransform: () => SetterTransformMethod void }> = () => { return ({setter}) => { return { toggle: () => { setter((prev) => !prev) }, set: setter, } } } type OpenLike = { isOpen: boolean } export type DialogValue = { state?: T, } & OpenLike type DialogMethods = { close: () => void; open: (state: R | undefined) => void; setState: (state: R) => void; } export const dialogTransform = (): SetterTransformMethod, DialogMethods> => { return ({setter}) => { return { close: () => { const newValue = { isOpen: false, } setter(newValue) }, open: (state: R | undefined) => { const newValue = { isOpen: true, state, } setter(newValue) }, setState: (newState) => { setter((prev: DialogValue) => { return { state: newState, isOpen: prev.isOpen, } }) } } } } type PageLike = { page: number, size: number, } export type PageMethods = { next: () => void; prev: () => void; setPage: (page: number) => void; setSize: (size: number) => void; } export const pageTransform = (): SetterTransformMethod => { return ({setter}) => { return { next: () => { setter((prev) => { return { page: prev.page + 1, size: prev.size, } }) }, prev: () => { setter((prev) => { return { page: prev.page - 1, size: prev.size, } }) }, setPage: (page: number) => { setter((prev) => { return { page, size: prev.size, } }) }, setSize: (size: number) => { setter((prev) => { return { page: prev.page, size, } }) } } } }