Форма добавления категории перенесена в заголовок блока программы бурения

Кнопка сброса ошибки перенесена после статуса
This commit is contained in:
Александр Сироткин 2022-02-24 18:53:06 +05:00
parent 0e4c7c6959
commit 6b6020758b
2 changed files with 57 additions and 41 deletions

View File

@ -1,12 +1,18 @@
import { Button, Select } from 'antd' import { Form, Select } from 'antd'
import { FileAddOutlined } from '@ant-design/icons' import { FileAddOutlined } from '@ant-design/icons'
import { memo, useCallback, useEffect, useState } from 'react' import { memo, useCallback, useEffect, useState } from 'react'
import { DrillingProgramService } from '@api' import Poprompt from '@components/Poprompt'
import { invokeWebApiWrapperAsync } from '@components/factory' import { invokeWebApiWrapperAsync } from '@components/factory'
import { DrillingProgramService } from '@api'
import '@styles/drilling_program.less' import '@styles/drilling_program.less'
const catSelectorRules = [{
required: true,
message: 'Пожалуйста, выберите категории'
}]
export const CategoryAdder = memo(({ categories, idWell, onUpdate, className, ...other }) => { export const CategoryAdder = memo(({ categories, idWell, onUpdate, className, ...other }) => {
const [options, setOptions] = useState([]) const [options, setOptions] = useState([])
const [value, setValue] = useState([]) const [value, setValue] = useState([])
@ -24,37 +30,47 @@ export const CategoryAdder = memo(({ categories, idWell, onUpdate, className, ..
`Не удалось установить список доступных категорий для добавления` `Не удалось установить список доступных категорий для добавления`
), [categories]) ), [categories])
const onAddClick = useCallback(() => invokeWebApiWrapperAsync( const onFinish = useCallback(({ categories }) => invokeWebApiWrapperAsync(
async () => { async () => {
await DrillingProgramService.addParts(idWell, value) if (!categories) return
await DrillingProgramService.addParts(idWell, categories)
setValue([]) setValue([])
onUpdate?.() onUpdate?.()
}, },
setShowLoader, setShowLoader,
`Не удалось добавить новые категорий программы бурения`, `Не удалось добавить новые категорий программы бурения`,
`Добавление категорий программы бурения` `Добавление категорий программы бурения`
), [onUpdate, idWell, value]) ), [onUpdate, idWell])
return ( return (
<div className={`category_adder ${className ?? ''}`} {...other}> <Poprompt
<Select buttonProps={{
allowClear icon: <FileAddOutlined />,
className={'adder_select'} loading: showLoader,
mode={'multiple'} }}
options={options} placement={'topLeft'}
value={value} text={'Добавить категорию'}
onChange={setValue} onDone={onFinish}
loading={showCatLoader} {...other}
/> >
<Button <Form.Item
onClick={onAddClick} name={'categories'}
loading={showLoader} label={'Категории:'}
icon={<FileAddOutlined />} className={`category_adder ${className ?? ''}`}
disabled={!value || value.length <= 0} rules={catSelectorRules}
> >
Добавить <Select
</Button> style={{ width: '300px' }}
</div> allowClear
className={'adder_select'}
mode={'multiple'}
options={options}
value={value}
onChange={setValue}
loading={showCatLoader}
/>
</Form.Item>
</Poprompt>
) )
}) })

View File

@ -1,4 +1,4 @@
import { Button, Layout } from 'antd' import { Button, Layout, Menu } from 'antd'
import { import {
CheckOutlined, CheckOutlined,
CloseOutlined, CloseOutlined,
@ -57,8 +57,6 @@ export const DrillingProgram = memo(({ idWell }) => {
const state = stateString[stateId] const state = stateString[stateId]
const StateIcon = state.icon const StateIcon = state.icon
console.log(parts)
const updateData = useCallback(async () => await invokeWebApiWrapperAsync( const updateData = useCallback(async () => await invokeWebApiWrapperAsync(
async () => { async () => {
const data = await DrillingProgramService.getState(idWell) const data = await DrillingProgramService.getState(idWell)
@ -100,13 +98,11 @@ export const DrillingProgram = memo(({ idWell }) => {
<h3>Программа бурения</h3> <h3>Программа бурения</h3>
{permissionToEdit && ( {permissionToEdit && (
<div> <div>
<Button <CategoryAdder
icon={<ReloadOutlined />} idWell={idWell}
disabled={[idStateNotInitialized, idStateApproving, idStateUnknown].includes(stateId)} categories={categories}
loading={stateId === idStateCreating} onUpdate={updateData}
> />
Сформировать заново
</Button>
</div> </div>
)} )}
</div> </div>
@ -117,10 +113,20 @@ export const DrillingProgram = memo(({ idWell }) => {
<div className={'m-10'}>Размер: {program?.size}</div> <div className={'m-10'}>Размер: {program?.size}</div>
<div className={'m-10'}>Загружен: {formatDate(program?.uploadDate)}</div> <div className={'m-10'}>Загружен: {formatDate(program?.uploadDate)}</div>
</> </>
) : stateId === idStateError ? (
<>
<h3 className={'program_status error'}>
<StateIcon className={'m-10'} />
{error?.message ?? state.text}
</h3>
<Button icon={<ReloadOutlined />}>
Сбросить статус ошибки
</Button>
</>
) : ( ) : (
<h3 className={`program_status ${stateId === idStateError ? 'error' : ''}`}> <h3 className={'program_status'}>
<StateIcon className={'m-10'} /> <StateIcon className={'m-10'} />
{(stateId === idStateError && error?.message) ? error.message : state.text} {state.text}
</h3> </h3>
)} )}
</div> </div>
@ -139,12 +145,6 @@ export const DrillingProgram = memo(({ idWell }) => {
{permissionToEdit && ( {permissionToEdit && (
<> <>
<CategoryAdder
idWell={idWell}
categories={categories}
onUpdate={updateData}
/>
<CategoryEditor <CategoryEditor
idWell={idWell} idWell={idWell}
visible={editorVisible} visible={editorVisible}