From e43bfb6e982fc31d3c8c0465b490e7dfa45cfcd8 Mon Sep 17 00:00:00 2001 From: Vishnu <vishnu@hexrfactory.com> Date: Wed, 23 Apr 2025 18:25:55 +0530 Subject: [PATCH] feat: Add Trigger component and integrate it into EventProperties; refactor PickAndPlaceAction for improved structure --- .../eventProperties/EventProperties.tsx | 6 +- .../actions/PickAndPlaceAction.tsx | 16 ++- .../eventProperties/trigger/Trigger.tsx | 110 +++++++++++++++++- 3 files changed, 119 insertions(+), 13 deletions(-) diff --git a/app/src/components/layout/sidebarRight/properties/eventProperties/EventProperties.tsx b/app/src/components/layout/sidebarRight/properties/eventProperties/EventProperties.tsx index e7444a0..c3ec6e7 100644 --- a/app/src/components/layout/sidebarRight/properties/eventProperties/EventProperties.tsx +++ b/app/src/components/layout/sidebarRight/properties/eventProperties/EventProperties.tsx @@ -18,6 +18,7 @@ import TravelAction from "./actions/TravelAction"; import PickAndPlaceAction from "./actions/PickAndPlaceAction"; import ProcessAction from "./actions/ProcessAction"; import StorageAction from "./actions/StorageAction"; +import Trigger from "./trigger/Trigger"; interface EventPropertiesProps { assetType: string; @@ -194,11 +195,14 @@ const EventProperties: React.FC<EventPropertiesProps> = ({ {activeOption === "swap" && <SwapAction />} {/* done */} {activeOption === "despawn" && <DespawnAction />} {/* done */} {activeOption === "travel" && <TravelAction />} {/* done */} - {activeOption === "pickAndPlace" && <PickAndPlaceAction />} + {activeOption === "pickAndPlace" && <PickAndPlaceAction />} {/* done */} {activeOption === "process" && <ProcessAction />} {/* done */} {activeOption === "store" && <StorageAction />} {/* done */} </div> </div> + <div className="tirgger"> + <Trigger /> + </div> </div> ); }; diff --git a/app/src/components/layout/sidebarRight/properties/eventProperties/actions/PickAndPlaceAction.tsx b/app/src/components/layout/sidebarRight/properties/eventProperties/actions/PickAndPlaceAction.tsx index 0c3228f..9574669 100644 --- a/app/src/components/layout/sidebarRight/properties/eventProperties/actions/PickAndPlaceAction.tsx +++ b/app/src/components/layout/sidebarRight/properties/eventProperties/actions/PickAndPlaceAction.tsx @@ -1,9 +1,13 @@ -import React from 'react' +import React from "react"; +import EyeDropInput from "../../../../../ui/inputs/EyeDropInput"; -const PickAndPlaceAction:React.FC = () => { +const PickAndPlaceAction: React.FC = () => { return ( - <div>PickAndPlaceAction</div> - ) -} + <> + <EyeDropInput label="Pick Point" value="na" onChange={() => {}} /> + <EyeDropInput label="Unload Point" value="na" onChange={() => {}} /> + </> + ); +}; -export default PickAndPlaceAction \ No newline at end of file +export default PickAndPlaceAction; diff --git a/app/src/components/layout/sidebarRight/properties/eventProperties/trigger/Trigger.tsx b/app/src/components/layout/sidebarRight/properties/eventProperties/trigger/Trigger.tsx index 6812257..f287b63 100644 --- a/app/src/components/layout/sidebarRight/properties/eventProperties/trigger/Trigger.tsx +++ b/app/src/components/layout/sidebarRight/properties/eventProperties/trigger/Trigger.tsx @@ -1,9 +1,107 @@ -import React from 'react' +import React, { useState } from "react"; +import { AddIcon, RemoveIcon } from "../../../../../icons/ExportCommonIcons"; +import LabledDropdown from "../../../../../ui/inputs/LabledDropdown"; + +const Trigger: React.FC = () => { + // State to hold the list of triggers + const [triggers, setTriggers] = useState<string[]>([]); + const [activeOption, setActiveOption] = useState("onComplete"); + + // States for dropdowns + const [triggeredModel, setTriggeredModel] = useState<string[]>([]); + const [triggeredPoint, setTriggeredPoint] = useState<string[]>([]); + const [triggeredAction, setTriggeredAction] = useState<string[]>([]); + + // Function to handle adding a new trigger + const addTrigger = (): void => { + const newTrigger = `Trigger ${triggers.length + 1}`; + setTriggers([...triggers, newTrigger]); // Add new trigger to the state + + // Initialize the states for the new trigger + setTriggeredModel([...triggeredModel, ""]); + setTriggeredPoint([...triggeredPoint, ""]); + setTriggeredAction([...triggeredAction, ""]); + }; + + // Function to handle removing a trigger + const removeTrigger = (index: number): void => { + setTriggers(triggers.filter((_, i) => i !== index)); // Remove trigger by index + setTriggeredModel(triggeredModel.filter((_, i) => i !== index)); + setTriggeredPoint(triggeredPoint.filter((_, i) => i !== index)); + setTriggeredAction(triggeredAction.filter((_, i) => i !== index)); + }; -const Trigger = () => { return ( - <div>Trigger</div> - ) -} + <div className="trigger-wrapper"> + <div className="header"> + <div className="title">Trigger</div> + <div + className="add-button" + onClick={addTrigger} + style={{ cursor: "pointer" }} + > + <AddIcon /> Add + </div> + </div> + <div className="trigger-list"> + {/* Map over triggers and render them */} + {triggers.map((trigger, index) => ( + <div key={index} className="trigger-item"> + <div className="trigger-name"> + {trigger} + <div + className="remove-button" + onClick={() => removeTrigger(index)} + style={{ cursor: "pointer" }} + > + <RemoveIcon /> + </div> + </div> + <LabledDropdown + defaultOption={activeOption} + options={["onComplete", "onStart", "onStop", "delay"]} + onSelect={(option) => setActiveOption(option)} + /> + <div className="trigger-options"> + <div> + <LabledDropdown + defaultOption={triggeredModel[index] || "Select Model"} + options={["Model 1", "Model 2", "Model 3"]} + onSelect={(option) => { + const newModel = [...triggeredModel]; + newModel[index] = option; + setTriggeredModel(newModel); + }} + /> + </div> + <div> + <LabledDropdown + defaultOption={triggeredPoint[index] || "Select Point"} + options={["Point 1", "Point 2", "Point 3"]} + onSelect={(option) => { + const newPoint = [...triggeredPoint]; + newPoint[index] = option; + setTriggeredPoint(newPoint); + }} + /> + </div> + <div> + <LabledDropdown + defaultOption={triggeredAction[index] || "Select Action"} + options={["Action 1", "Action 2", "Action 3"]} + onSelect={(option) => { + const newAction = [...triggeredAction]; + newAction[index] = option; + setTriggeredAction(newAction); + }} + /> + </div> + </div> + </div> + ))} + </div> + </div> + ); +}; -export default Trigger \ No newline at end of file +export default Trigger;