2023-07-20 17:11:03 +03:00
|
|
|
|
import { useMemo } from 'react';
|
2023-07-25 20:27:29 +03:00
|
|
|
|
|
2023-08-27 00:19:19 +03:00
|
|
|
|
import { useConceptTheme } from '../../../context/ThemeContext';
|
2023-09-11 20:31:54 +03:00
|
|
|
|
import { ExpressionStatus } from '../../../models/rsform';
|
|
|
|
|
import { type IConstituenta, inferStatus } from '../../../models/rsform';
|
|
|
|
|
import { IExpressionParse, ParsingStatus } from '../../../models/rslang';
|
2023-09-09 20:36:55 +03:00
|
|
|
|
import { getCstStatusBgColor, mapStatusInfo } from '../../../utils/staticUI';
|
2023-07-20 17:11:03 +03:00
|
|
|
|
|
|
|
|
|
interface StatusBarProps {
|
|
|
|
|
isModified?: boolean
|
2023-07-29 03:31:21 +03:00
|
|
|
|
parseData?: IExpressionParse
|
2023-07-20 17:11:03 +03:00
|
|
|
|
constituenta?: IConstituenta
|
|
|
|
|
}
|
|
|
|
|
|
2023-07-25 20:27:29 +03:00
|
|
|
|
function StatusBar({ isModified, constituenta, parseData }: StatusBarProps) {
|
2023-08-27 00:19:19 +03:00
|
|
|
|
const { colors } = useConceptTheme();
|
2023-07-20 17:11:03 +03:00
|
|
|
|
const status = useMemo(() => {
|
|
|
|
|
if (isModified) {
|
|
|
|
|
return ExpressionStatus.UNKNOWN;
|
|
|
|
|
}
|
|
|
|
|
if (parseData) {
|
2023-07-25 20:27:29 +03:00
|
|
|
|
const parse = parseData.parseResult ? ParsingStatus.VERIFIED : ParsingStatus.INCORRECT;
|
|
|
|
|
return inferStatus(parse, parseData.valueClass);
|
2023-07-20 17:11:03 +03:00
|
|
|
|
}
|
|
|
|
|
return inferStatus(constituenta?.parse?.status, constituenta?.parse?.valueClass);
|
|
|
|
|
}, [isModified, constituenta, parseData]);
|
|
|
|
|
|
2023-07-31 22:38:58 +03:00
|
|
|
|
const data = mapStatusInfo.get(status)!;
|
2023-07-20 17:11:03 +03:00
|
|
|
|
return (
|
|
|
|
|
<div title={data.tooltip}
|
2023-08-27 00:19:19 +03:00
|
|
|
|
className='text-sm h-[1.6rem] w-[10rem] font-semibold inline-flex border items-center select-none justify-center align-middle'
|
2023-09-09 20:36:55 +03:00
|
|
|
|
style={{backgroundColor: getCstStatusBgColor(status, colors)}}
|
2023-08-27 00:19:19 +03:00
|
|
|
|
>
|
2023-08-08 23:04:21 +03:00
|
|
|
|
Статус: [ {data.text} ]
|
2023-07-20 17:11:03 +03:00
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
2023-07-25 20:27:29 +03:00
|
|
|
|
export default StatusBar;
|