diff --git a/src/components/dialog/faultEvent/FaultEventCreation.tsx b/src/components/dialog/faultEvent/FaultEventCreation.tsx index 9c31117f..c57df0c3 100644 --- a/src/components/dialog/faultEvent/FaultEventCreation.tsx +++ b/src/components/dialog/faultEvent/FaultEventCreation.tsx @@ -8,7 +8,7 @@ import { useReusableFaultEvents } from "@hooks/useReusableFaultEvents"; import ControlledAutocomplete from "@components/materialui/ControlledAutocomplete"; import { MouseEvent, useEffect, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; -import { asArray } from "@utils/utils"; +import { asArray, updateEventsType } from "@utils/utils"; interface Props { useFormMethods: any; @@ -50,6 +50,7 @@ const FaultEventCreation = ({ useFormMethods, isRootEvent, eventValue, isEditedE }, [selectedEvent]); const [filteredOptions, setFilteredOptions] = useState([{}]); + const updatedFHAEventTypes = updateEventsType(faultEvents, "fha-fault-event", EventType.EXTERNAL); const handleFilterOptions = (inputValue) => { const filtered = faultEvents.filter((option) => option.name.toLowerCase().includes(inputValue.toLowerCase())); @@ -74,7 +75,7 @@ const FaultEventCreation = ({ useFormMethods, isRootEvent, eventValue, isEditedE setSelectedEvent(data)} onInputChangeCallback={handleFilterOptions} onCreateEventClick={handleOnCreateEventClick} @@ -86,7 +87,7 @@ const FaultEventCreation = ({ useFormMethods, isRootEvent, eventValue, isEditedE defaultValue={defaultValue} /> - {!selectedEvent && !isRootEvent && ( + {!selectedEvent && !isRootEvent && eventTypeWatch !== EventType.EXTERNAL && ( {t("newFtaModal.type")} )} + + ); + } + function renderEventForm() { + return ( + <> {eventTypeWatch === EventType.INTERMEDIATE && (
@@ -152,62 +159,56 @@ const FaultEventCreation = ({ useFormMethods, isRootEvent, eventValue, isEditedE
)} - - ); - } - function renderEventForm() { - if (!showCreateEvent) { - return; - } - return ( - <> - {eventTypeWatch !== EventType.INTERMEDIATE && !isRootEvent && isEditedEvent && ( - <> - {/*TODO: sort out default value UI bug*/} - + {eventTypeWatch !== EventType.INTERMEDIATE && + eventTypeWatch !== EventType.EXTERNAL && + !isRootEvent && + isEditedEvent && ( + <> + {/*TODO: sort out default value UI bug*/} + - {/* Probability field */} - + {/* Probability field */} + - {(gateTypeWatch === GateType.PRIORITY_AND || !gateTypeWatch) && - eventTypeWatch === EventType.INTERMEDIATE && - gateTypeWatch === GateType.PRIORITY_AND && ( - - )} - - )} + {(gateTypeWatch === GateType.PRIORITY_AND || !gateTypeWatch) && + eventTypeWatch === EventType.INTERMEDIATE && + gateTypeWatch === GateType.PRIORITY_AND && ( + + )} + + )} ); } diff --git a/src/components/editor/faultTree/menu/faultEvent/FaultEventMenu.tsx b/src/components/editor/faultTree/menu/faultEvent/FaultEventMenu.tsx index 512b2bcf..ab5c4653 100644 --- a/src/components/editor/faultTree/menu/faultEvent/FaultEventMenu.tsx +++ b/src/components/editor/faultTree/menu/faultEvent/FaultEventMenu.tsx @@ -228,15 +228,20 @@ const FaultEventMenu = ({ shapeToolData, onEventUpdated, refreshTree, rootIri }: return ( - - - - + {shapeToolData && shapeToolData.iri !== rootIri && ( + + + + )} {/* TODO: Finish for other nodes. Will be refactored. */} {/* ROOT NODE */} {shapeToolData && shapeToolData.iri === rootIri && ( <> + + Event name: + {shapeToolData.name} + {basedFailureRate && ( diff --git a/src/services/faultEventService.tsx b/src/services/faultEventService.tsx index 8f6ad589..77a99456 100644 --- a/src/services/faultEventService.tsx +++ b/src/services/faultEventService.tsx @@ -114,6 +114,7 @@ export const eventFromHookFormValues = (values: any): FaultEvent => { console.log(`Using existing event -${values.existingEvent.iri}`); faultEvent.name = values.existingEvent.name; faultEvent.supertypes = [values.existingEvent]; + faultEvent.eventType = values.existingEvent.eventType; } faultEvent.gateType = faultEvent.eventType === EventType.INTERMEDIATE ? values.gateType : null; diff --git a/src/utils/utils.tsx b/src/utils/utils.tsx index cb55ed00..c6b35025 100644 --- a/src/utils/utils.tsx +++ b/src/utils/utils.tsx @@ -1,6 +1,7 @@ import { AbstractModel } from "@models/abstractModel"; import { FaultTree } from "@models/faultTreeModel"; import { System } from "@models/systemModel"; +import { FaultEvent } from "@models/eventModel"; export const getCircularReplacer = () => { const seen = new WeakSet(); @@ -77,11 +78,9 @@ export const getModifiedSystemsList = (systems: System[], selected: string | nul getModifiedList(systems, selected); export const getModifiedFaultTreesList = (faultTrees: FaultTree[], selected: string | null) => { - if(!faultTrees || !selected) - return faultTrees; - return faultTrees.filter(f => f?.system?.iri == selected); -} - + if (!faultTrees || !selected) return faultTrees; + return faultTrees.filter((f) => f?.system?.iri == selected); +}; export const formatDate = (dateString: string) => { if (!dateString) return "-"; @@ -98,3 +97,19 @@ export const formatDate = (dateString: string) => { return date.toLocaleString("en-US", options); }; + +/** + * Updates the eventType of events in an array if a specific substring is found in its IRI. + * + * @param {Array} events - The array of event objects to be processed. + * @param {string} substring - The substring to search for within the specified key's value. + * @param {string} newValue - The new value to set for eventType if the substring is found. + * @returns {Array} A new array of event objects with updated eventType values where applicable. + * + */ +export const updateEventsType = (events: FaultEvent[], substring: string, newValue: string) => { + return events.map((event) => ({ + ...event, + eventType: event.iri.includes(substring) ? newValue : event.eventType, + })); +};