Skip to content

Commit

Permalink
Merge pull request #396 from kbss-cvut/improve-event-update
Browse files Browse the repository at this point in the history
Improved event update
  • Loading branch information
LaChope committed Jun 17, 2024
2 parents 4d2a3c2 + 6fc3c77 commit 172b1fd
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 65 deletions.
113 changes: 57 additions & 56 deletions src/components/dialog/faultEvent/FaultEventCreation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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()));
Expand All @@ -74,7 +75,7 @@ const FaultEventCreation = ({ useFormMethods, isRootEvent, eventValue, isEditedE
<ControlledAutocomplete
control={control}
name="event"
options={faultEvents}
options={isRootEvent ? faultEvents : updatedFHAEventTypes}
onChangeCallback={(data: any) => setSelectedEvent(data)}
onInputChangeCallback={handleFilterOptions}
onCreateEventClick={handleOnCreateEventClick}
Expand All @@ -86,7 +87,7 @@ const FaultEventCreation = ({ useFormMethods, isRootEvent, eventValue, isEditedE
defaultValue={defaultValue}
/>

{!selectedEvent && !isRootEvent && (
{!selectedEvent && !isRootEvent && eventTypeWatch !== EventType.EXTERNAL && (
<FormControl disabled={existingEventSelected} className={classes.formControl}>
<InputLabel id="event-type-select-label">{t("newFtaModal.type")}</InputLabel>
<Controller
Expand Down Expand Up @@ -120,7 +121,13 @@ const FaultEventCreation = ({ useFormMethods, isRootEvent, eventValue, isEditedE
/>
</FormControl>
)}
</>
);
}

function renderEventForm() {
return (
<>
{eventTypeWatch === EventType.INTERMEDIATE && (
<div className={classes.formControlDiv}>
<FormControl className={classes.formControl}>
Expand Down Expand Up @@ -152,62 +159,56 @@ const FaultEventCreation = ({ useFormMethods, isRootEvent, eventValue, isEditedE
</FormControl>
</div>
)}
</>
);
}

function renderEventForm() {
if (!showCreateEvent) {
return;
}
return (
<>
{eventTypeWatch !== EventType.INTERMEDIATE && !isRootEvent && isEditedEvent && (
<>
{/*TODO: sort out default value UI bug*/}
<TextField
margin="dense"
label={t("newFtaModal.description")}
fullWidth
error={!!errors.description}
helperText={errors.description?.message}
defaultValue=""
disabled={existingEventSelected}
{...register("description")}
/>
{eventTypeWatch !== EventType.INTERMEDIATE &&
eventTypeWatch !== EventType.EXTERNAL &&
!isRootEvent &&
isEditedEvent && (
<>
{/*TODO: sort out default value UI bug*/}
<TextField
margin="dense"
label={t("newFtaModal.description")}
fullWidth
error={!!errors.description}
helperText={errors.description?.message}
defaultValue=""
disabled={existingEventSelected}
{...register("description")}
/>

{/* Probability field */}
<TextField
label={t("newFtaModal.probability")}
type="number"
min={0}
max={1}
step={0.01}
error={!!errors.probability}
helperText={errors.probability?.message}
className={classes.probability}
defaultValue=""
{...register("probability")}
/>
{/* Probability field */}
<TextField
label={t("newFtaModal.probability")}
type="number"
min={0}
max={1}
step={0.01}
error={!!errors.probability}
helperText={errors.probability?.message}
className={classes.probability}
defaultValue=""
{...register("probability")}
/>

{(gateTypeWatch === GateType.PRIORITY_AND || !gateTypeWatch) &&
eventTypeWatch === EventType.INTERMEDIATE &&
gateTypeWatch === GateType.PRIORITY_AND && (
<TextField
label="Sequence Probability"
type="number"
min={0}
max={1}
step={0.01}
error={!!errors.sequenceProbability}
helperText={errors.sequenceProbability?.message}
className={classes.sequenceProbability}
defaultValue=""
{...register("sequenceProbability")}
/>
)}
</>
)}
{(gateTypeWatch === GateType.PRIORITY_AND || !gateTypeWatch) &&
eventTypeWatch === EventType.INTERMEDIATE &&
gateTypeWatch === GateType.PRIORITY_AND && (
<TextField
label="Sequence Probability"
type="number"
min={0}
max={1}
step={0.01}
error={!!errors.sequenceProbability}
helperText={errors.sequenceProbability?.message}
className={classes.sequenceProbability}
defaultValue=""
{...register("sequenceProbability")}
/>
)}
</>
)}
</>
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,15 +228,20 @@ const FaultEventMenu = ({ shapeToolData, onEventUpdated, refreshTree, rootIri }:

return (
<Box paddingLeft={2} marginRight={2}>
<ReusableFaultEventsProvider systemUri={selectedSystem?.iri}>
<FaultEventShapeToolPane data={shapeToolData} onEventUpdated={onEventUpdated} refreshTree={refreshTree} />
</ReusableFaultEventsProvider>

{shapeToolData && shapeToolData.iri !== rootIri && (
<ReusableFaultEventsProvider systemUri={selectedSystem?.iri}>
<FaultEventShapeToolPane data={shapeToolData} onEventUpdated={onEventUpdated} refreshTree={refreshTree} />
</ReusableFaultEventsProvider>
)}
{/* TODO: Finish for other nodes. Will be refactored. */}

{/* ROOT NODE */}
{shapeToolData && shapeToolData.iri === rootIri && (
<>
<Typography>
<span className={classes.label}>Event name:</span>
{shapeToolData.name}
</Typography>
{basedFailureRate && (
<Box className={classes.labelRow}>
<Typography>
Expand Down
1 change: 1 addition & 0 deletions src/services/faultEventService.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
25 changes: 20 additions & 5 deletions src/utils/utils.tsx
Original file line number Diff line number Diff line change
@@ -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();
Expand Down Expand Up @@ -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 "-";
Expand All @@ -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<FaultEvent>} 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<FaultEvent>} 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,
}));
};

0 comments on commit 172b1fd

Please sign in to comment.