forked from ddrilling/asb_cloud_front
Исправлен тип пропсов в типе FunctionalValue
This commit is contained in:
parent
d5e827532d
commit
c07b2ef5b9
@ -1,35 +1,36 @@
|
||||
import { notification } from 'antd'
|
||||
import { ArgsProps } from 'antd/lib/notification'
|
||||
import { Dispatch, ReactNode, SetStateAction } from 'react'
|
||||
|
||||
import { isDev } from '@utils'
|
||||
import { FunctionalValue, getFunctionalValue, isDev } from '@utils'
|
||||
import { getUserToken } from '@utils'
|
||||
import { ApiError, FileInfoDto } from '@api'
|
||||
|
||||
const notificationTypeDictionary = new Map([
|
||||
['error' , { notifyInstance: notification.error , caption: 'Ошибка' }],
|
||||
['warning', { notifyInstance: notification.warning, caption: 'Предупреждение' }],
|
||||
['info' , { notifyInstance: notification.info , caption: 'Инфо' }],
|
||||
['open' , { notifyInstance: notification.info , caption: '' }],
|
||||
])
|
||||
|
||||
export type NotifyType = 'error' | 'warning' | 'info'
|
||||
|
||||
const notifyTypes: Record<NotifyType | 'defualt', ArgsProps & { instance: (args: ArgsProps) => void }> = {
|
||||
error: { instance: notification.error, message: 'Ошибка' },
|
||||
warning: { instance: notification.warning, message: 'Предупреждение' },
|
||||
info: { instance: notification.info, message: 'Инфо' },
|
||||
defualt: { instance: notification.info, message: '' },
|
||||
}
|
||||
|
||||
/**
|
||||
* Вызов оповещений всплывающим окошком.
|
||||
* @param body string или ReactNode
|
||||
* @param notifyType для параметра типа. Допустимые значение 'error', 'warning', 'info'
|
||||
* @param other прочие возможные аргументы уведомления
|
||||
*/
|
||||
export const notify = (body: ReactNode, notifyType: NotifyType = 'info', other?: any) => {
|
||||
export const notify = (body?: ReactNode, notifyType: NotifyType = 'info', other?: ArgsProps) => {
|
||||
if (!body) return
|
||||
|
||||
const instance = notificationTypeDictionary.get(notifyType) ??
|
||||
notificationTypeDictionary.get('open')
|
||||
const instance = notifyTypes[notifyType] ?? notifyTypes.defualt
|
||||
|
||||
instance?.notifyInstance({
|
||||
instance?.instance({
|
||||
description: body,
|
||||
message: instance.caption,
|
||||
placement: 'bottomRight',
|
||||
duration: 10,
|
||||
...instance,
|
||||
...other
|
||||
})
|
||||
}
|
||||
@ -39,7 +40,7 @@ type asyncFunction = (...args: any) => Promise<any|void>
|
||||
export const invokeWebApiWrapperAsync = async (
|
||||
funcAsync: asyncFunction,
|
||||
setShowLoader?: Dispatch<SetStateAction<boolean>>,
|
||||
errorNotifyText?: ReactNode | ((ex: unknown) => ReactNode),
|
||||
errorNotifyText?: FunctionalValue<ReactNode, [unknown]>,
|
||||
actionName?: string,
|
||||
) => {
|
||||
setShowLoader?.(true)
|
||||
@ -53,10 +54,8 @@ export const invokeWebApiWrapperAsync = async (
|
||||
notify(`Недостаточно прав для выполнения действия "${actionName}"`, 'error')
|
||||
else
|
||||
notify('Недостаточно прав для выполнения действия', 'error')
|
||||
} else if(errorNotifyText) {
|
||||
if (typeof errorNotifyText === 'function')
|
||||
notify(errorNotifyText(ex), 'error')
|
||||
else notify(errorNotifyText, 'error')
|
||||
} else {
|
||||
notify(getFunctionalValue(errorNotifyText)(ex), 'error')
|
||||
}
|
||||
} finally {
|
||||
setShowLoader?.(false)
|
||||
|
@ -3,9 +3,9 @@ import { useMemo } from 'react'
|
||||
/**
|
||||
* Значение типа может быть представлено непосредственно значением либо функцией его возвращаюшей
|
||||
*/
|
||||
export type FunctionalValue<T, P extends [] = []> = T | ((...props: P) => T)
|
||||
export type FunctionalValue<T, P extends Array<any> = []> = T | ((...props: P) => T)
|
||||
|
||||
export const getFunctionalValue = <T, P extends []>(value: FunctionalValue<T, P>) => value instanceof Function ? value : () => value
|
||||
export const getFunctionalValue = <T, P extends Array<any>>(value: FunctionalValue<T, P>) => value instanceof Function ? value : () => value
|
||||
|
||||
/**
|
||||
* Облегчает работу со значениями, которые могут быть представлены функциям.
|
||||
@ -13,7 +13,7 @@ export const getFunctionalValue = <T, P extends []>(value: FunctionalValue<T, P>
|
||||
* @param value Значение или функция его возвращающая
|
||||
* @returns Функция, вызов которой вернёт искомое значение
|
||||
*/
|
||||
export const useFunctionalValue = <T, P extends []>(value: FunctionalValue<T, P>) => {
|
||||
export const useFunctionalValue = <T, P extends Array<any>>(value: FunctionalValue<T, P>) => {
|
||||
const fun = useMemo(() => getFunctionalValue(value), [value])
|
||||
return fun
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user