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 { notification } from 'antd'
|
||||||
|
import { ArgsProps } from 'antd/lib/notification'
|
||||||
import { Dispatch, ReactNode, SetStateAction } from 'react'
|
import { Dispatch, ReactNode, SetStateAction } from 'react'
|
||||||
|
|
||||||
import { isDev } from '@utils'
|
import { FunctionalValue, getFunctionalValue, isDev } from '@utils'
|
||||||
import { getUserToken } from '@utils'
|
import { getUserToken } from '@utils'
|
||||||
import { ApiError, FileInfoDto } from '@api'
|
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'
|
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 body string или ReactNode
|
||||||
* @param notifyType для параметра типа. Допустимые значение 'error', 'warning', 'info'
|
* @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
|
if (!body) return
|
||||||
|
|
||||||
const instance = notificationTypeDictionary.get(notifyType) ??
|
const instance = notifyTypes[notifyType] ?? notifyTypes.defualt
|
||||||
notificationTypeDictionary.get('open')
|
|
||||||
|
|
||||||
instance?.notifyInstance({
|
instance?.instance({
|
||||||
description: body,
|
description: body,
|
||||||
message: instance.caption,
|
|
||||||
placement: 'bottomRight',
|
placement: 'bottomRight',
|
||||||
duration: 10,
|
duration: 10,
|
||||||
|
...instance,
|
||||||
...other
|
...other
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -39,7 +40,7 @@ type asyncFunction = (...args: any) => Promise<any|void>
|
|||||||
export const invokeWebApiWrapperAsync = async (
|
export const invokeWebApiWrapperAsync = async (
|
||||||
funcAsync: asyncFunction,
|
funcAsync: asyncFunction,
|
||||||
setShowLoader?: Dispatch<SetStateAction<boolean>>,
|
setShowLoader?: Dispatch<SetStateAction<boolean>>,
|
||||||
errorNotifyText?: ReactNode | ((ex: unknown) => ReactNode),
|
errorNotifyText?: FunctionalValue<ReactNode, [unknown]>,
|
||||||
actionName?: string,
|
actionName?: string,
|
||||||
) => {
|
) => {
|
||||||
setShowLoader?.(true)
|
setShowLoader?.(true)
|
||||||
@ -53,10 +54,8 @@ export const invokeWebApiWrapperAsync = async (
|
|||||||
notify(`Недостаточно прав для выполнения действия "${actionName}"`, 'error')
|
notify(`Недостаточно прав для выполнения действия "${actionName}"`, 'error')
|
||||||
else
|
else
|
||||||
notify('Недостаточно прав для выполнения действия', 'error')
|
notify('Недостаточно прав для выполнения действия', 'error')
|
||||||
} else if(errorNotifyText) {
|
} else {
|
||||||
if (typeof errorNotifyText === 'function')
|
notify(getFunctionalValue(errorNotifyText)(ex), 'error')
|
||||||
notify(errorNotifyText(ex), 'error')
|
|
||||||
else notify(errorNotifyText, 'error')
|
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
setShowLoader?.(false)
|
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 Значение или функция его возвращающая
|
* @param value Значение или функция его возвращающая
|
||||||
* @returns Функция, вызов которой вернёт искомое значение
|
* @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])
|
const fun = useMemo(() => getFunctionalValue(value), [value])
|
||||||
return fun
|
return fun
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user