112 lines
4.3 KiB
JavaScript
112 lines
4.3 KiB
JavaScript
/*
|
||
Парус 8 - Панели мониторинга - ТОиР - Гаражка
|
||
Дополнительная разметка и вёрстка клиентских элементов
|
||
*/
|
||
|
||
//---------------------
|
||
//Подключение библиотек
|
||
//---------------------
|
||
|
||
import React from "react"; //Классы React
|
||
import { Icon, Stack, Link, Typography } from "@mui/material"; //Интерфейсные компоненты
|
||
import { hasValue, formatDateRF } from "../../core/utils"; //Вспомогательные функции
|
||
|
||
//---------
|
||
//Константы
|
||
//---------
|
||
|
||
//Маска разделителя
|
||
const SMASK_SEPARATE = "<|>";
|
||
|
||
//-----------
|
||
//Тело модуля
|
||
//-----------
|
||
|
||
//Формирование значения для колонки "Состояние"
|
||
const formatStateValue = (value, addText = false) => {
|
||
const [text, icon] = value == 0 ? ["На линии", "done"] : value == 1 ? ["Ремонт", "build"] : ["Не определен", "question_mark"];
|
||
return (
|
||
<Stack direction="row" gap={0.5} alignItems="center" justifyContent="center">
|
||
<Icon title={text}>{icon}</Icon>
|
||
{addText == true ? text : null}
|
||
</Stack>
|
||
);
|
||
};
|
||
|
||
//Формирование списка значений
|
||
const formatListValue = value => {
|
||
//Считываем массив значений
|
||
const listValues = hasValue(value) ? value.split(SMASK_SEPARATE) : [];
|
||
//Формируем список значений
|
||
return (
|
||
<>
|
||
{listValues.length !== 0 ? (
|
||
<Stack direction="column" gap={0.5} alignItems="flex-start" justifyContent="center">
|
||
{listValues.map((el, index) => {
|
||
return <Typography variant="body2" key={index}>{`${el}`}</Typography>;
|
||
})}
|
||
</Stack>
|
||
) : null}
|
||
</>
|
||
);
|
||
};
|
||
|
||
//Формирование значения для колонки "Документ ремонта"
|
||
const formatRepairDocValue = (value, onRepairSheetOpen) => {
|
||
//Считываем массив документов
|
||
const listDocs = hasValue(value) ? value.split(SMASK_SEPARATE) : [];
|
||
//Формируем список документов с ссылкой
|
||
return (
|
||
<>
|
||
{listDocs.length !== 0 ? (
|
||
<Stack direction="column" gap={0.5} alignItems="flex-start" justifyContent="center">
|
||
{listDocs.map((el, index) => {
|
||
//Считываем рег. номер
|
||
const rn = el.match(/<(.*?)>/)[1];
|
||
//Считываем информацию о документе
|
||
const docInfo = el.replace(`<${rn}>`, "");
|
||
//Формируем ссылку на документ
|
||
return (
|
||
<Link
|
||
component="button"
|
||
align="left"
|
||
variant="body2"
|
||
underline="hover"
|
||
onClick={() => onRepairSheetOpen({ nRn: rn })}
|
||
key={index}
|
||
>
|
||
{docInfo}
|
||
</Link>
|
||
);
|
||
})}
|
||
</Stack>
|
||
) : null}
|
||
</>
|
||
);
|
||
};
|
||
|
||
//Форматирование значений колонок
|
||
export const valueFormatter = ({ value, columnDef, onRepairSheetOpen }) => {
|
||
switch (columnDef.name) {
|
||
case "NSTATE":
|
||
return formatStateValue(value, false);
|
||
case "SDAMTYPE_NAME":
|
||
return formatListValue(value);
|
||
case "SEQDAMCTRL_NOTE":
|
||
return formatListValue(value);
|
||
case "SDRIVER":
|
||
return formatListValue(value);
|
||
case "SREPAIR_DOC":
|
||
return formatRepairDocValue(value, onRepairSheetOpen);
|
||
}
|
||
return value;
|
||
};
|
||
|
||
//Форматирование фильтров панелей для фильтров таблицы
|
||
export const formatFilterValues = filter => {
|
||
return [
|
||
{ name: "DDATE", from: formatDateRF(filter.dDate), to: formatDateRF(filter.dDate) },
|
||
{ name: "SCUSTOMERDEPT_FILTER", from: filter.sCustomerDept, to: "" }
|
||
];
|
||
};
|