diff --git a/src/pages/WellOperations/WellOperationsEditor.jsx b/src/pages/WellOperations/WellOperationsEditor.jsx
index 9ea77c4..49da840 100644
--- a/src/pages/WellOperations/WellOperationsEditor.jsx
+++ b/src/pages/WellOperations/WellOperationsEditor.jsx
@@ -27,8 +27,9 @@ const basePageSize = 160
const dayRender = makeNumericRender(2)
const dayWithoutNptRender = (_, row) => dayRender((row.day ?? 0) - (row.nptHours ?? 0) / 24)
-const defaultColumns = [
- makeSelectColumn('Конструкция секции', 'idWellSectionType', [], undefined, {
+const generateColumns = (showNpt = false, categories = [], sectionTypes = []) => [
+ makeSelectColumn('Конструкция секции', 'idWellSectionType', sectionTypes, undefined, {
+ sorter: makeNumericSorter('idWellSectionType'),
editable: true,
width: 160,
formItemRules: [() => ({
@@ -39,7 +40,11 @@ const defaultColumns = [
}
})],
}),
- makeSelectColumn('Операция', 'idCategory', [], undefined, { editable: true, width: 200 }),
+ makeSelectColumn('Операция', 'idCategory', categories, undefined, {
+ sorter: makeNumericSorter('idCategory'),
+ editable: true,
+ width: 200,
+ }),
makeTextColumn('Доп. инфо', 'categoryInfo', null, null, null, { editable: true, width: 300, input: }),
makeColumn('Глубина забоя на начало, м', 'depthStart', makeNumericColumnOptions(2, 'depthStart')),
makeColumn('Глубина забоя при завершении, м', 'depthEnd', makeNumericColumnOptions(2, 'depthEnd')),
@@ -49,16 +54,21 @@ const defaultColumns = [
initialValue: moment().format(),
}),
makeNumericColumn('День', 'day', null, null, dayRender, 80),
+ showNpt && makeNumericColumn('День без НПВ', 'dayWithoutNpt', null, null, dayWithoutNptRender, 80),
makeColumn('Часы', 'durationHours', { ...makeNumericColumnOptions(2, 'durationHours'), width: 70 }),
makeTextColumn('Комментарий', 'comment', null, null, null, { editable: true, input: }),
-]
+].filter(Boolean)
export const WellOperationsEditor = memo(({ idWell, idType, showNpt, ...other }) => {
const [pageNumAndPageSize, setPageNumAndPageSize] = useState({ current: 1, pageSize: basePageSize })
const [paginationTotal, setPaginationTotal] = useState(0)
const [operations, setOperations] = useState([])
const [showLoader, setShowLoader] = useState(false)
- const [columns, setColumns] = useState(defaultColumns)
+
+ const [categories, setCategories] = useState([])
+ const [sectionTypes, setSectionTypes] = useState([])
+
+ const columns = useMemo(() => generateColumns(showNpt, categories, sectionTypes), [showNpt, categories, sectionTypes])
const location = useLocation()
const selectedIds = useMemo(() => {
@@ -66,56 +76,19 @@ export const WellOperationsEditor = memo(({ idWell, idType, showNpt, ...other })
return arrayOrDefault(query.get('selectedId')?.split(',')?.map(parseInt))
}, [location])
- // useEffect(() => {
- // setColumns((preColumns) => preColumns.find(()))
- // }, [showNpt])
-
useEffect(() => invokeWebApiWrapperAsync(
async () => {
- let categories = arrayOrDefault(await WellOperationService.getCategories(idWell))
- categories = categories.map((item) => ({ value: item.id, label: item.name }))
+ const categories = arrayOrDefault(await WellOperationService.getCategories(idWell))
+ setCategories(categories.map((item) => ({ value: item.id, label: item.name })))
- let sectionTypes = await WellOperationService.getSectionTypes(idWell) ?? {}
- sectionTypes = Object.entries(sectionTypes).map(([id, label]) => ({ value: parseInt(id), label }))
-
- setColumns(preColumns => [
- makeSelectColumn('Конструкция секции', 'idWellSectionType', sectionTypes, undefined, {
- editable: true,
- width: 160,
- sorter: makeNumericSorter('idWellSectionType'),
- }),
- makeSelectColumn('Операция', 'idCategory', categories, undefined, {
- editable: true,
- width: 200,
- sorter: makeNumericSorter('idCategory'),
- }),
- ...preColumns.slice(2),
- ])
+ const sectionTypes = Object.entries(await WellOperationService.getSectionTypes(idWell) ?? {})
+ setSectionTypes(sectionTypes.map(([id, label]) => ({ value: parseInt(id), label })))
},
setShowLoader,
'Не удалось загрузить список операций по скважине',
'Получение списка операций по скважине'
), [idWell])
- useEffect(() => invokeWebApiWrapperAsync(
- async() => {
- setColumns((preColumns) => {
- if (!!preColumns.find((col) => col.key === 'dayWithoutNpt') === showNpt)
- return preColumns
- const newColumns = preColumns.slice(0, 7)
- if (showNpt)
- newColumns.push(
- makeNumericColumn('День без НПВ', 'dayWithoutNpt', null, null, dayWithoutNptRender, 80),
- ...preColumns.slice(7)
- )
- else newColumns.push(...preColumns.slice(8))
- return newColumns
- })
- },
- setShowLoader,
- 'Не удалось добавить стоблец "День без НПВ"'
- ), [showNpt])
-
const updateOperations = useCallback(() => invokeWebApiWrapperAsync(
async () => {
const skip = ((pageNumAndPageSize.current - 1) * pageNumAndPageSize.pageSize) || 0