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

Кнопка сброса ошибки перенесена после статуса
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,20 +30,37 @@ 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
buttonProps={{
icon: <FileAddOutlined />,
loading: showLoader,
}}
placement={'topLeft'}
text={'Добавить категорию'}
onDone={onFinish}
{...other}
>
<Form.Item
name={'categories'}
label={'Категории:'}
className={`category_adder ${className ?? ''}`}
rules={catSelectorRules}
>
<Select <Select
style={{ width: '300px' }}
allowClear allowClear
className={'adder_select'} className={'adder_select'}
mode={'multiple'} mode={'multiple'}
@ -46,15 +69,8 @@ export const CategoryAdder = memo(({ categories, idWell, onUpdate, className, ..
onChange={setValue} onChange={setValue}
loading={showCatLoader} loading={showCatLoader}
/> />
<Button </Form.Item>
onClick={onAddClick} </Poprompt>
loading={showLoader}
icon={<FileAddOutlined />}
disabled={!value || value.length <= 0}
>
Добавить
</Button>
</div>
) )
}) })

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 ${stateId === idStateError ? 'error' : ''}`}> <>
<h3 className={'program_status error'}>
<StateIcon className={'m-10'} /> <StateIcon className={'m-10'} />
{(stateId === idStateError && error?.message) ? error.message : state.text} {error?.message ?? state.text}
</h3>
<Button icon={<ReloadOutlined />}>
Сбросить статус ошибки
</Button>
</>
) : (
<h3 className={'program_status'}>
<StateIcon className={'m-10'} />
{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}