forked from ddrilling/asb_cloud_front
86 lines
2.7 KiB
TypeScript
86 lines
2.7 KiB
TypeScript
import { Dispatch, SetStateAction } from "react"
|
||
import notify from "./notify"
|
||
|
||
export const RegExpIsFloat = /^[-+]?\d+\.?\d?$/
|
||
|
||
/*
|
||
other - объект с дополнительными свойствами колонки
|
||
поддерживаются все базовые свойства из описания https://ant.design/components/table/#Column
|
||
плю дополнительные для колонок EditableTable:
|
||
editable - редактируемая колонка, bool
|
||
input - react компонента редактора (<Input/>, <InputNumber/>, <DatePicker/>...)
|
||
isRequired - значение может быть пустым,
|
||
formItemClass - css класс для <FormItem/>, если требуется
|
||
formItemRules - массив правил валидации значений https://ant.design/components/form/#Rule,
|
||
initialValue - дефолтное значение при добавлении новой строки
|
||
*/
|
||
export const makeColumn = (title:string, key:string, other?:any) => ({
|
||
title: title,
|
||
key: key,
|
||
dataIndex: key,
|
||
...other,
|
||
})
|
||
|
||
export const makeColumnsPlanFact = (title:string, key:string|string[], columsOther?:any|any[], gruopOther?:any) =>
|
||
{
|
||
let keyPlanLocal = key
|
||
let keyFactLocal = key
|
||
|
||
if(key instanceof Array){
|
||
keyPlanLocal = key[0]
|
||
keyFactLocal = key[1]
|
||
}else{
|
||
keyPlanLocal = key + 'Plan'
|
||
keyFactLocal = key + 'Fact'
|
||
}
|
||
|
||
let columsOtherLoacl :any[2]
|
||
if(columsOther instanceof Array)
|
||
columsOtherLoacl = [columsOther[0], columsOther[1]]
|
||
else
|
||
columsOtherLoacl = [columsOther, columsOther]
|
||
|
||
return {
|
||
title: title,
|
||
...gruopOther,
|
||
children: [
|
||
makeColumn('план', keyPlanLocal, columsOtherLoacl[0]),
|
||
makeColumn('факт', keyFactLocal, columsOtherLoacl[1]),
|
||
]
|
||
}
|
||
}
|
||
|
||
type PaginationContainer = {
|
||
skip?: number;
|
||
take?: number;
|
||
count?: number;
|
||
items?: any[] | null;
|
||
}
|
||
|
||
type asyncFunction = (...args:any) => Promise<any|void>;
|
||
|
||
export const makePaginationObject = (paginationContainer:PaginationContainer, ...other:any) => {
|
||
let page = 1 + Math.floor((paginationContainer.skip??0) /(paginationContainer.take??1));
|
||
return {
|
||
...other,
|
||
pageSize: paginationContainer.take,
|
||
total: paginationContainer.count ?? paginationContainer.items?.length ?? 0,
|
||
current: page,
|
||
}
|
||
}
|
||
|
||
export const updateFromWebApiWrapperAsync = async (funcAsync: asyncFunction, setShowLoader: Dispatch<SetStateAction<boolean>>, errorNotifyText: string) => {
|
||
if(setShowLoader)
|
||
setShowLoader(true)
|
||
try{
|
||
await funcAsync()
|
||
} catch (ex) {
|
||
if(process.env.NODE_ENV === 'development')
|
||
console.log(ex)
|
||
if(errorNotifyText)
|
||
notify(errorNotifyText, 'error')
|
||
} finally{
|
||
if(setShowLoader)
|
||
setShowLoader(false)
|
||
}
|
||
} |