|
| 1 | +import DivisionIcon from '@assets/icons/division.svg?component'; |
| 2 | +import MinusIcon from '@assets/icons/minus.svg?component'; |
| 3 | +import MultiplicationIcon from '@assets/icons/multiplication.svg?component'; |
| 4 | +import PlusIcon from '@assets/icons/plus.svg?component'; |
| 5 | +import ACAtom, { |
| 6 | + ACAtomDefaultValuesWithParams, |
| 7 | + ACInstance, |
| 8 | +} from '@atoms/ACTaskAtom'; |
| 9 | +import { |
| 10 | + GetMainTaskDeps_taskInfo_TaskInfo_data_result_ACTaskResult_ACs_attributes, |
| 11 | + GetMainTaskDeps_taskInfo_TaskInfo_data_result_ACTaskResult_ACs_intervals, |
| 12 | + GetMainTaskDeps_taskInfo_TaskInfo_data_result_ACTaskResult_ACs_outliers, |
| 13 | + Operation, |
| 14 | +} from '@graphql/operations/queries/__generated__/GetMainTaskDeps'; |
| 15 | +import cn from 'classnames'; |
| 16 | +import { useAtom } from 'jotai'; |
| 17 | +import { FC } from 'react'; |
| 18 | +import CollapsableView from '../CollapsableView'; |
| 19 | +import styles from './ACInstance.module.scss'; |
| 20 | + |
| 21 | +type Props = { |
| 22 | + id: string; |
| 23 | + attributes: GetMainTaskDeps_taskInfo_TaskInfo_data_result_ACTaskResult_ACs_attributes; |
| 24 | + operation: Operation; |
| 25 | + outliers: GetMainTaskDeps_taskInfo_TaskInfo_data_result_ACTaskResult_ACs_outliers; |
| 26 | + intervals: GetMainTaskDeps_taskInfo_TaskInfo_data_result_ACTaskResult_ACs_intervals; |
| 27 | +}; |
| 28 | + |
| 29 | +export const operationIcons = { |
| 30 | + [Operation.ADDITION]: PlusIcon, |
| 31 | + [Operation.MULTIPLICATION]: MultiplicationIcon, |
| 32 | + [Operation.DIVISION]: DivisionIcon, |
| 33 | + [Operation.SUBTRACTION]: MinusIcon, |
| 34 | +}; |
| 35 | + |
| 36 | +const ACInstance: FC<Props> = ({ |
| 37 | + id, |
| 38 | + attributes, |
| 39 | + operation, |
| 40 | + outliers, |
| 41 | + intervals, |
| 42 | +}) => { |
| 43 | + const [atom, setAtom] = useAtom(ACAtom); |
| 44 | + const handleSelect = () => { |
| 45 | + const instance: ACInstance = { |
| 46 | + id: id, |
| 47 | + attribute1: attributes.attr1, |
| 48 | + attribute2: attributes.attr2, |
| 49 | + intervals: intervals.intervals, |
| 50 | + outliers: outliers.outliers, |
| 51 | + }; |
| 52 | + setAtom({ ...ACAtomDefaultValuesWithParams(atom.taskID, instance) }); |
| 53 | + }; |
| 54 | + |
| 55 | + const OperationIcon = operationIcons[operation as Operation]; |
| 56 | + |
| 57 | + const isSelected = atom.instanceSelected?.id === id; |
| 58 | + |
| 59 | + return ( |
| 60 | + <div |
| 61 | + className={cn(styles.containerOuter, isSelected && styles.selected)} |
| 62 | + onClick={handleSelect} |
| 63 | + > |
| 64 | + <div className={styles.containerInner}> |
| 65 | + Operation |
| 66 | + <div className={styles.attributes}> |
| 67 | + <div className={styles.attr}>{attributes.attr1}</div> |
| 68 | + <OperationIcon className={styles.icons}/> |
| 69 | + |
| 70 | + <div className={styles.attr}>{attributes.attr2}</div> |
| 71 | + </div> |
| 72 | + </div> |
| 73 | + <CollapsableView |
| 74 | + title="Intervals" |
| 75 | + output={intervals.intervals.map((elem) => `[${elem[0]}, ${elem[1]}]`)} |
| 76 | + amount={intervals.amount} |
| 77 | + /> |
| 78 | + <CollapsableView |
| 79 | + title="Outliers" |
| 80 | + output={outliers.outliers.map((elem) => elem.toString())} |
| 81 | + /> |
| 82 | + </div> |
| 83 | + ); |
| 84 | +}; |
| 85 | + |
| 86 | +export default ACInstance; |
0 commit comments