forked from ddrilling/asb_cloud_front
Улучшена работа FunctionalValue
This commit is contained in:
parent
1b6768be90
commit
c9a17b8de9
@ -8,7 +8,7 @@ import { BasePluginSettings } from './base'
|
|||||||
|
|
||||||
export type D3ContextMenuSettings = {
|
export type D3ContextMenuSettings = {
|
||||||
/** Метод или объект отрисовки пунктов выпадающего меню */
|
/** Метод или объект отрисовки пунктов выпадающего меню */
|
||||||
overlay?: FunctionalValue<ReactElement | null, [SVGSVGElement | null]>
|
overlay?: FunctionalValue<(svg: SVGSVGElement | null) => ReactElement | null>
|
||||||
/** Название графика для загрузки */
|
/** Название графика для загрузки */
|
||||||
downloadFilename?: string
|
downloadFilename?: string
|
||||||
/** Событие, вызываемое при нажатий кнопки "Обновить" */
|
/** Событие, вызываемое при нажатий кнопки "Обновить" */
|
||||||
|
@ -55,7 +55,7 @@ const parseApiEror = (err: unknown, actionName?: string) => {
|
|||||||
export const invokeWebApiWrapperAsync = async (
|
export const invokeWebApiWrapperAsync = async (
|
||||||
funcAsync: asyncFunction,
|
funcAsync: asyncFunction,
|
||||||
setShowLoader?: Dispatch<SetStateAction<boolean>>,
|
setShowLoader?: Dispatch<SetStateAction<boolean>>,
|
||||||
errorNotifyText?: FunctionalValue<ReactNode, [unknown]>,
|
errorNotifyText?: FunctionalValue<(err: unknown) => ReactNode>,
|
||||||
actionName?: string,
|
actionName?: string,
|
||||||
) => {
|
) => {
|
||||||
setShowLoader?.(true)
|
setShowLoader?.(true)
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
import { useMemo } from 'react'
|
import { useMemo } from 'react'
|
||||||
|
|
||||||
|
import { ArgumentTypes } from '@utils/types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Значение типа может быть представлено непосредственно значением либо функцией его возвращаюшей
|
* Значение типа может быть представлено непосредственно значением либо функцией его возвращаюшей
|
||||||
*/
|
*/
|
||||||
export type FunctionalValue<T, P extends Array<any> = []> = T | ((...props: P) => T)
|
export type ReturnType<T> = T extends (...args: any) => infer R ? R : any
|
||||||
|
export type FunctionalValue<F extends Function> = ReturnType<F> | F
|
||||||
|
|
||||||
export const getFunctionalValue = <T, P extends Array<any>>(value: FunctionalValue<T, P>) => value instanceof Function ? value : () => value
|
export const getFunctionalValue = <F extends Function>(value: FunctionalValue<F>) => value instanceof Function ? value : ((...args: ArgumentTypes<F>) => value) as unknown as F
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Облегчает работу со значениями, которые могут быть представлены функциям.
|
* Облегчает работу со значениями, которые могут быть представлены функциям.
|
||||||
@ -13,7 +16,7 @@ export const getFunctionalValue = <T, P extends Array<any>>(value: FunctionalVal
|
|||||||
* @param value Значение или функция его возвращающая
|
* @param value Значение или функция его возвращающая
|
||||||
* @returns Функция, вызов которой вернёт искомое значение
|
* @returns Функция, вызов которой вернёт искомое значение
|
||||||
*/
|
*/
|
||||||
export const useFunctionalValue = <T, P extends Array<any>>(value: FunctionalValue<T, P>) => {
|
export const useFunctionalValue = <F extends Function>(value: FunctionalValue<F>) => {
|
||||||
const fun = useMemo(() => getFunctionalValue(value), [value])
|
const fun = useMemo(() => getFunctionalValue(value), [value])
|
||||||
return fun
|
return fun
|
||||||
}
|
}
|
||||||
|
@ -7,3 +7,5 @@
|
|||||||
* @returns Общий тип с полным `T` и несовпадающими полями из `R`
|
* @returns Общий тип с полным `T` и несовпадающими полями из `R`
|
||||||
*/
|
*/
|
||||||
export type OmitExtends<T, R> = T & Omit<R, keyof T>
|
export type OmitExtends<T, R> = T & Omit<R, keyof T>
|
||||||
|
|
||||||
|
export type ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never
|
||||||
|
Loading…
Reference in New Issue
Block a user