From 62583fbe1c564f18eeaa11bb7e106ed981145d17 Mon Sep 17 00:00:00 2001 From: karishmas6 Date: Mon, 24 Jun 2024 22:36:35 +0530 Subject: [PATCH] feat: display pair --- src/components/molecules/Pair.tsx | 181 ++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 src/components/molecules/Pair.tsx diff --git a/src/components/molecules/Pair.tsx b/src/components/molecules/Pair.tsx new file mode 100644 index 00000000..7f501719 --- /dev/null +++ b/src/components/molecules/Pair.tsx @@ -0,0 +1,181 @@ +import React, { FC, useState } from 'react'; +import { Stack, Button, IconButton, Tooltip, Chip, Badge } from "@mui/material"; +import { AddPair, deletePair, UpdatePair } from "../../api/workflow"; +import { WorkflowFile } from "@wbr-project/wbr-interpret"; +import { ClearButton } from "../atoms/buttons/ClearButton"; +import { GenericModal } from "../atoms/GenericModal"; +import { PairEditForm } from "./PairEditForm"; +import { PairDisplayDiv } from "../atoms/PairDisplayDiv"; +import { EditButton } from "../atoms/buttons/EditButton"; +import { BreakpointButton } from "../atoms/buttons/BreakpointButton"; +import VisibilityIcon from '@mui/icons-material/Visibility'; +import styled from "styled-components"; +import { LoadingButton } from "@mui/lab"; + +type WhereWhatPair = WorkflowFile["workflow"][number]; + + +interface PairProps { + handleBreakpoint: () => void; + isActive: boolean; + index: number; + pair: WhereWhatPair; + updateWorkflow: (workflow: WorkflowFile) => void; + numberOfPairs: number; + handleSelectPairForEdit: (pair: WhereWhatPair, index: number) => void; +} + + +export const Pair: FC = ( + { + handleBreakpoint, isActive, index, + pair, updateWorkflow, numberOfPairs, + handleSelectPairForEdit + }) => { + const [open, setOpen] = useState(false); + const [edit, setEdit] = useState(false); + const [breakpoint, setBreakpoint] = useState(false); + + const enableEdit = () => setEdit(true); + const disableEdit = () => setEdit(false); + + const handleOpen = () => setOpen(true); + const handleClose = () => { + setOpen(false); + disableEdit(); + } + + const handleDelete = () => { + deletePair(index - 1).then((updatedWorkflow) => { + updateWorkflow(updatedWorkflow); + }).catch((error) => { + console.error(error); + }); + }; + + const handleEdit = (pair: WhereWhatPair, newIndex: number) => { + if (newIndex !== index){ + AddPair((newIndex - 1), pair).then((updatedWorkflow) => { + updateWorkflow(updatedWorkflow); + }).catch((error) => { + console.error(error); + }); + } else { + UpdatePair((index - 1), pair).then((updatedWorkflow) => { + updateWorkflow(updatedWorkflow); + }).catch((error) => { + console.error(error); + }); + } + handleClose(); + }; + + const handleBreakpointClick = () => { + setBreakpoint(!breakpoint); + handleBreakpoint(); + }; + + return ( + + +
+ {isActive ? + : breakpoint ? + : + } +
+ + + + + +
+ +
+
+ + +
+ { + enableEdit(); + handleOpen(); + }} + /> +
+
+ +
+ +
+
+
+
+ + { edit + ? + + : +
+ +
+ } +
+
+ ); +}; + +interface ViewButtonProps { + handleClick: () => void; +} + +const ViewButton = ({handleClick}: ViewButtonProps) => { + return ( + + + + ); +} + + +const PairWrapper = styled.div<{ isActive: boolean }>` + background-color: ${({ isActive }) => isActive ? 'rgba(255, 0, 0, 0.1)' : 'transparent' }; + border: ${({ isActive }) => isActive ? 'solid 2px red' : 'none' }; + display: flex; + flex-direction: row; + flex-grow: 1; + width: 98%; + color: gray; + &:hover { + color: dimgray; + background: ${({ isActive }) => isActive ? 'rgba(255, 0, 0, 0.1)' : 'transparent' }; + } +`;