ConceptPortal-public/rsconcept/frontend/src/pages/RSFormPage/elements/StatusBar.tsx

40 lines
1.4 KiB
TypeScript
Raw Normal View History

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-21 14:58:01 +03:00
import { colorbgCstStatus } from '../../../utils/color';
import { describeExpressionStatus, labelExpressionStatus } from '../../../utils/labels';
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]);
return (
2023-09-21 14:58:01 +03:00
<div title={describeExpressionStatus(status)}
2023-10-23 18:22:55 +03:00
className='inline-flex items-center justify-center w-full h-full text-sm font-semibold align-middle border select-none small-caps'
2023-09-21 14:58:01 +03:00
style={{backgroundColor: colorbgCstStatus(status, colors)}}
2023-08-27 00:19:19 +03:00
>
2023-10-02 23:43:29 +03:00
{labelExpressionStatus(status)}
2023-07-20 17:11:03 +03:00
</div>
)
}
2023-07-25 20:27:29 +03:00
export default StatusBar;