Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: content wiping out in description in subactivity card is now fixed #843

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions components/DurationComponent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { ChangeEvent, useEffect, useState } from "react";
import { sortSearch } from "@/utils/sortSearch";

type DurationComponent = {
selectedNode: NodeDataCommon;
selectedNode: NodeDataCommon | undefined;
onChangeDuration: (e: {
duration: number | null;
unit: string | null;
Expand All @@ -23,16 +23,18 @@ export function DurationComponent({
disabled,
}: DurationComponent) {
const [duration, setDuration] = useState<number | null>(
selectedNode.duration
selectedNode?.duration ?? null
);
const [unit, setUnit] = useState<string | null>(selectedNode.unit);
const [unit, setUnit] = useState<string | null>(selectedNode?.unit ?? null);
const [unitSearchInput, setUnitSearchInput] = useState("");

const timeDefinitionDisplayNames = getTimeDefinitionDisplayNames();

useEffect(() => {
setDuration(selectedNode.duration);
setUnit(selectedNode.unit);
if (selectedNode) {
setDuration(selectedNode.duration);
setUnit(selectedNode.unit);
}
}, [selectedNode]);

const parseValue = (value: string) =>
Expand Down
3 changes: 2 additions & 1 deletion components/canvas/ChoiceNode.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ export const ChoiceNode = ({
const { addNode, isNodeButtonDisabled } = useNodeAdd();
const connectionNodeId = useStore((state) => state.connectionNodeId);
const lastChild = children[children?.length - 1];
const isEditingNode = useIsEditingNode(selected);
const { isEditingNode, editNodeData } = useIsEditingNode(selected, data);

useEffect(() => {
setHovering(false);
Expand Down Expand Up @@ -183,6 +183,7 @@ export const ChoiceNode = ({
includeRole={false}
includeDuration={false}
includeEstimate={false}
editNodeData={editNodeData}
/>
{renderNodeButtons()}
</div>
Expand Down
8 changes: 5 additions & 3 deletions components/canvas/EditableNodeTooltipSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ type EditableNodeTooltipSectionProps = {
isEditing?: boolean;
variant: "description" | "duration" | "role";
nodeData: NodeDataCommon;
editNodeData: NodeDataCommon | undefined;
};

export const EditableNodeTooltipSection = ({
Expand All @@ -25,6 +26,7 @@ export const EditableNodeTooltipSection = ({
isEditing,
variant = "description",
nodeData,
editNodeData,
}: EditableNodeTooltipSectionProps) => {
const { patchDescription, patchDuration, patchRole } =
useNodeUpdate(nodeData);
Expand All @@ -39,7 +41,7 @@ export const EditableNodeTooltipSection = ({
case "duration":
return (
<DurationComponent
selectedNode={nodeData}
selectedNode={editNodeData}
onChangeDuration={({ duration, unit }) =>
patchDuration(duration, unit)
}
Expand All @@ -49,7 +51,7 @@ export const EditableNodeTooltipSection = ({
case "role":
return (
<NodeInput
initialValue={text}
initialValue={editNodeData?.role}
id={`${nodeData.id}-role`}
onChange={(e: ChangeEvent<HTMLInputElement>) =>
patchRole(e.target.value)
Expand All @@ -61,7 +63,7 @@ export const EditableNodeTooltipSection = ({
return (
<MarkdownEditor
canEdit={nodeData.userCanEdit}
defaultText={text || ""}
defaultText={editNodeData?.description || ""}
label={"Description"}
onChange={patchDescription}
/>
Expand Down
3 changes: 2 additions & 1 deletion components/canvas/GenericNode.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export const GenericNode = ({
const [hovering, setHovering] = useState(false);
const [hoveringShape, setHoveringShape] = useState(false);
const { addNode, isNodeButtonDisabled } = useNodeAdd();
const isEditingNode = useIsEditingNode(selected);
const { isEditingNode, editNodeData } = useIsEditingNode(selected, data);

const handleQIPRContainerOnClick = useQIPRContainerOnClick(data);
const shouldDisplayQIPR = useShouldDisplayQIPR(tasks, hovering, selected);
Expand Down Expand Up @@ -120,6 +120,7 @@ export const GenericNode = ({
includeRole={false}
includeDuration={false}
includeEstimate={false}
editNodeData={editNodeData}
/>
{renderNodeButtons()}
</div>
Expand Down
3 changes: 2 additions & 1 deletion components/canvas/MainActivityNode.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export const MainActivityNode = ({
const [hoveringShape, setHoveringShape] = useState(false);
const { addNode, isNodeButtonDisabled } = useNodeAdd();

const isEditingNode = useIsEditingNode(selected);
const { isEditingNode, editNodeData } = useIsEditingNode(selected, data);

const handleQIPRContainerOnClick = useQIPRContainerOnClick(data);
const shouldDisplayQIPR = useShouldDisplayQIPR(tasks, hovering, selected);
Expand Down Expand Up @@ -158,6 +158,7 @@ export const MainActivityNode = ({
includeDuration={false}
includeEstimate
estimate={formattedDurationSum}
editNodeData={editNodeData}
/>
{renderNodeButtons()}
</div>
Expand Down
8 changes: 6 additions & 2 deletions components/canvas/NodeInput.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import { TextField, TextFieldProps } from "@equinor/eds-core-react";
import { ChangeEvent, useState } from "react";
import { ChangeEvent, useEffect, useState } from "react";

export type NodeInputProps = Omit<TextFieldProps, "value"> & {
initialValue?: string;
initialValue?: string | null;
};

export const NodeInput = (props: NodeInputProps) => {
const [value, setValue] = useState(props.initialValue || "");
useEffect(() => {
if (props.initialValue) setValue(props.initialValue);
}, [props.initialValue]);

return (
<TextField
{...(props as TextFieldProps)}
Expand Down
6 changes: 6 additions & 0 deletions components/canvas/NodeTooltip.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ type NodeTooltipProps = Pick<NodeTooltipContainerProps, "position"> & {
nodeData: NodeDataCommon;
isHovering?: boolean;
isEditing?: boolean;
editNodeData: NodeDataCommon | undefined;
} & Field<"includeDescription", "description"> &
Field<"includeDuration", "duration"> &
Field<"includeEstimate", "estimate"> &
Expand All @@ -64,6 +65,7 @@ export const NodeTooltip = ({
isEditing,
position,
nodeData,
editNodeData,
}: NodeTooltipProps) => {
const editingStyle = { minWidth: "300px" };
const tooltipStyle = isEditing ? editingStyle : undefined;
Expand All @@ -85,6 +87,7 @@ export const NodeTooltip = ({
text={description}
variant="description"
isEditing={isEditing}
editNodeData={editNodeData}
/>
)}
{shouldDisplayRole && (
Expand All @@ -94,6 +97,7 @@ export const NodeTooltip = ({
text={role}
variant="role"
isEditing={isEditing}
editNodeData={editNodeData}
/>
)}
{shouldDisplayDuration && (
Expand All @@ -103,6 +107,7 @@ export const NodeTooltip = ({
nodeData={nodeData}
text={duration}
isEditing={isEditing}
editNodeData={editNodeData}
/>
)}
{shouldDisplayEstimate && (
Expand All @@ -111,6 +116,7 @@ export const NodeTooltip = ({
text={estimate}
variant="duration"
nodeData={nodeData}
editNodeData={editNodeData}
/>
)}
</NodeTooltipContainer>
Expand Down
3 changes: 2 additions & 1 deletion components/canvas/SubActivityNode.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export const SubActivityNode = ({
const [hoveringShape, setHoveringShape] = useState(false);
const connectionNodeId = useStore((state) => state.connectionNodeId);
const { addNode, isNodeButtonDisabled } = useNodeAdd();
const isEditingNode = useIsEditingNode(selected);
const { isEditingNode, editNodeData } = useIsEditingNode(selected, data);

const handleQIPRContainerOnClick = useQIPRContainerOnClick(data);
const shouldDisplayQIPR = useShouldDisplayQIPR(tasks, hovering, selected);
Expand Down Expand Up @@ -198,6 +198,7 @@ export const SubActivityNode = ({
includeDuration
duration={formatDuration(duration, unit)}
includeEstimate={false}
editNodeData={editNodeData}
/>
{renderNodeButtons()}
</div>
Expand Down
3 changes: 2 additions & 1 deletion components/canvas/WaitingNode.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ export const WaitingNode = ({
const [hoveringShape, setHoveringShape] = useState(false);
const connectionNodeId = useStore((state) => state.connectionNodeId);
const { addNode, isNodeButtonDisabled } = useNodeAdd();
const isEditingNode = useIsEditingNode(selected);
const { isEditingNode, editNodeData } = useIsEditingNode(selected, data);

const handleQIPRContainerOnClick = useQIPRContainerOnClick(data);
const shouldDisplayQIPR = useShouldDisplayQIPR(tasks, hovering, selected);
Expand Down Expand Up @@ -194,6 +194,7 @@ export const WaitingNode = ({
includeDuration
duration={formatDuration(duration, unit)}
includeEstimate={false}
editNodeData={editNodeData}
/>
{renderNodeButtons()}
</div>
Expand Down
19 changes: 17 additions & 2 deletions components/canvas/hooks/useIsEditingNode.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,21 @@
import { NodeDataCommon } from "@/types/NodeData";
import { useCanvasType } from "./useCanvasType";
import { useEffect, useState } from "react";

export const useIsEditingNode = (selected: boolean) => {
export const useIsEditingNode = (selected: boolean, data: NodeDataCommon) => {
const [editNodeData, seteditNodeData] = useState<NodeDataCommon | undefined>(
undefined
);
const canvasType = useCanvasType();
return canvasType === "main" && selected;
const isEditingNode = canvasType === "main" && selected;
useEffect(() => {
if (isEditingNode) {
seteditNodeData(data);
}
}, [isEditingNode]);
return {
editNodeData,
seteditNodeData,
isEditingNode,
};
};
Loading