ece-docs-components 1.0.104 → 1.0.105
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Modal.js +66 -29
- package/dist/cjs/components/Modal.js.map +1 -1
- package/dist/cjs/components/NoteBox.js +83 -74
- package/dist/cjs/components/NoteBox.js.map +1 -1
- package/dist/cjs/helpers/variableProcessing.js +2 -0
- package/dist/cjs/helpers/variableProcessing.js.map +1 -1
- package/dist/cjs/types/variable.js +11 -5
- package/dist/cjs/types/variable.js.map +1 -1
- package/dist/esm/_virtual/index8.js +2 -2
- package/dist/esm/_virtual/index9.js +2 -2
- package/dist/esm/components/Modal.d.ts +5 -11
- package/dist/esm/components/Modal.js +67 -30
- package/dist/esm/components/Modal.js.map +1 -1
- package/dist/esm/components/NoteBox.d.ts +1 -1
- package/dist/esm/components/NoteBox.js +83 -74
- package/dist/esm/components/NoteBox.js.map +1 -1
- package/dist/esm/helpers/variableProcessing.js +2 -0
- package/dist/esm/helpers/variableProcessing.js.map +1 -1
- package/dist/esm/node_modules/domhandler/lib/index.js +1 -1
- package/dist/esm/node_modules/domutils/lib/index.js +1 -1
- package/dist/esm/node_modules/entities/lib/generated/decode-data-html.js +1 -1
- package/dist/esm/node_modules/entities/lib/generated/decode-data-xml.js +1 -1
- package/dist/esm/node_modules/html-dom-parser/lib/index.js +1 -1
- package/dist/esm/node_modules/htmlparser2/node_modules/entities/dist/commonjs/generated/decode-data-html.js +1 -1
- package/dist/esm/node_modules/htmlparser2/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +1 -1
- package/dist/esm/node_modules/style-to-object/cjs/index.js +1 -1
- package/dist/esm/types/variable.d.ts +39 -4
- package/dist/esm/types/variable.js +12 -6
- package/dist/esm/types/variable.js.map +1 -1
- package/package.json +3 -2
|
@@ -33,25 +33,36 @@ const NavButton = material.styled(material.IconButton)(({ theme }) => ({
|
|
|
33
33
|
borderColor: theme.palette.dark.main, // Keep border dark
|
|
34
34
|
},
|
|
35
35
|
}));
|
|
36
|
-
const Modal = ({ isOpen, onClose,
|
|
37
|
-
const variableState = variableProcessing.mapStatusToVariableState(
|
|
38
|
-
const variableReqType = variableProcessing.mapRequirementTypeToState(requirementType);
|
|
39
|
-
const [textValue, setTextValue] = React.useState(value);
|
|
36
|
+
const Modal = ({ isOpen, onClose, onSave, onSubmit, successMessage, errorMessage, onDeclineWording, onPrevious, onNext, currentPage = 1, totalPages = 1, isLoading, variable: variable$1, isLeafOrganisation, }) => {
|
|
37
|
+
const variableState = variableProcessing.mapStatusToVariableState(variable$1.state);
|
|
38
|
+
const variableReqType = variableProcessing.mapRequirementTypeToState(variable$1.requirementType);
|
|
39
|
+
const [textValue, setTextValue] = React.useState(variable$1.value);
|
|
40
40
|
const [customValue, setCustomValue] = React.useState("");
|
|
41
|
-
const [useDefaultValue, setUseDefaultValue] = React.useState(
|
|
41
|
+
const [useDefaultValue, setUseDefaultValue] = React.useState(variable$1.useDefault ?? false);
|
|
42
|
+
const [isChildEditable, setIsChildEditable] = React.useState(variable$1.isChildEditable ?? false);
|
|
42
43
|
const [isSaving, setIsSaving] = React.useState(false);
|
|
43
44
|
const [isSubmitting, setIsSubmitting] = React.useState(false);
|
|
44
45
|
const theme = material.useTheme();
|
|
45
46
|
const toDisplay = (str) => str?.replace(/\\n/g, "\n") ?? "";
|
|
46
47
|
const toStorage = (str) => str?.replace(/\r?\n/g, "\\n") ?? "";
|
|
48
|
+
const displayValue = toDisplay(variable$1.value);
|
|
49
|
+
const displayDefault = toDisplay(variable$1.defaultValue ?? "");
|
|
50
|
+
const originalUseDefaultValue = (variable$1.useDefault ?? false) || displayValue === displayDefault;
|
|
51
|
+
const originalIsChildEditable = variable$1.isChildEditable ?? false;
|
|
52
|
+
const isSettingsDirty = isChildEditable !== originalIsChildEditable;
|
|
53
|
+
const isDefaultSelectionDirty = useDefaultValue !== originalUseDefaultValue;
|
|
54
|
+
const isTextDirty = !useDefaultValue && textValue !== displayValue;
|
|
47
55
|
React.useEffect(() => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const isUsingDefault = useDefault || displayValue === displayDefault;
|
|
51
|
-
setUseDefaultValue(isUsingDefault);
|
|
56
|
+
setIsChildEditable(originalIsChildEditable);
|
|
57
|
+
setUseDefaultValue(originalUseDefaultValue);
|
|
52
58
|
setTextValue(displayValue);
|
|
53
|
-
setCustomValue(
|
|
54
|
-
}, [
|
|
59
|
+
setCustomValue(originalUseDefaultValue ? "" : displayValue);
|
|
60
|
+
}, [
|
|
61
|
+
displayValue,
|
|
62
|
+
originalIsChildEditable,
|
|
63
|
+
originalUseDefaultValue,
|
|
64
|
+
variable$1._id,
|
|
65
|
+
]);
|
|
55
66
|
React.useEffect(() => {
|
|
56
67
|
if (!isOpen) {
|
|
57
68
|
setIsSaving(false);
|
|
@@ -78,14 +89,33 @@ const Modal = ({ isOpen, onClose, variableId, status, requirementType, descripti
|
|
|
78
89
|
const checked = event.target.checked;
|
|
79
90
|
if (checked) {
|
|
80
91
|
setCustomValue(textValue);
|
|
81
|
-
setTextValue(toDisplay(defaultValue));
|
|
92
|
+
setTextValue(toDisplay(variable$1.defaultValue ?? ""));
|
|
82
93
|
}
|
|
83
94
|
else {
|
|
84
95
|
setTextValue(customValue || "");
|
|
85
96
|
}
|
|
86
97
|
setUseDefaultValue(checked);
|
|
87
98
|
};
|
|
99
|
+
const handleIsChildEditableHandler = (event) => {
|
|
100
|
+
const checked = event.target.checked;
|
|
101
|
+
setIsChildEditable(checked);
|
|
102
|
+
};
|
|
88
103
|
const canSubmitSave = isLoading || variableState === variable.VariableState.Pending;
|
|
104
|
+
const cannotEdit = canSubmitSave || variableState === variable.VariableState.Declined;
|
|
105
|
+
const isBlankInvalid = variable$1.canBeBlank === false && textValue.trim().length <= 0;
|
|
106
|
+
const submitButtonLabel = useDefaultValue
|
|
107
|
+
? variable$1.useDefault && !isDefaultSelectionDirty
|
|
108
|
+
? isSettingsDirty
|
|
109
|
+
? "Save changes"
|
|
110
|
+
: "Default already accepted"
|
|
111
|
+
: "Accept Default"
|
|
112
|
+
: isTextDirty
|
|
113
|
+
? "Submit for review"
|
|
114
|
+
: "Save changes";
|
|
115
|
+
const isSubmitDisabled = canSubmitSave ||
|
|
116
|
+
isBlankInvalid ||
|
|
117
|
+
(useDefaultValue && variable$1.useDefault && !isSettingsDirty) ||
|
|
118
|
+
(!useDefaultValue && !isTextDirty && !isSettingsDirty);
|
|
89
119
|
const statusConfig = {
|
|
90
120
|
[variable.VariableState.Pending]: { color: "#EBC7FF", label: "Pending" },
|
|
91
121
|
[variable.VariableState.Draft]: { color: "#4D3019", label: "Draft" },
|
|
@@ -95,6 +125,7 @@ const Modal = ({ isOpen, onClose, variableId, status, requirementType, descripti
|
|
|
95
125
|
label: "Action Required",
|
|
96
126
|
},
|
|
97
127
|
[variable.VariableState.Accepted]: { color: "#DBF59A", label: "Accepted" },
|
|
128
|
+
[variable.VariableState.Rejected]: { color: "#4D3019", label: "Rejected" },
|
|
98
129
|
[variable.VariableState.NotStarted]: { color: "#000000ff", label: "Not Started" },
|
|
99
130
|
};
|
|
100
131
|
const reqTypeConfig = {
|
|
@@ -111,21 +142,22 @@ const Modal = ({ isOpen, onClose, variableId, status, requirementType, descripti
|
|
|
111
142
|
label: "Optional",
|
|
112
143
|
},
|
|
113
144
|
};
|
|
114
|
-
const statusStyle =
|
|
115
|
-
|
|
116
|
-
|
|
145
|
+
const statusStyle = statusConfig[variable$1.state] ?? {
|
|
146
|
+
color: "#ccc",
|
|
147
|
+
label: "Unknown",
|
|
148
|
+
};
|
|
117
149
|
const requirementTypeStyle = variableReqType
|
|
118
150
|
? reqTypeConfig[variableReqType]
|
|
119
151
|
: { color: "#ccc", label: "Unknown" };
|
|
120
152
|
const handleSave = () => {
|
|
121
153
|
setIsSaving(true);
|
|
122
154
|
const payloadValue = toStorage(textValue);
|
|
123
|
-
onSave?.(payloadValue, useDefaultValue);
|
|
155
|
+
onSave?.(payloadValue, useDefaultValue, isChildEditable);
|
|
124
156
|
};
|
|
125
157
|
const handleSubmit = () => {
|
|
126
158
|
setIsSubmitting(true);
|
|
127
159
|
const payloadValue = toStorage(textValue);
|
|
128
|
-
onSubmit?.(payloadValue, useDefaultValue);
|
|
160
|
+
onSubmit?.(payloadValue, useDefaultValue, isChildEditable);
|
|
129
161
|
};
|
|
130
162
|
return (jsxRuntime.jsxs(StyledDialog, { open: isOpen, onClose: onClose, maxWidth: "md", fullWidth: true, children: [jsxRuntime.jsx(material.IconButton, { onClick: onClose, disabled: isLoading, sx: {
|
|
131
163
|
position: "absolute",
|
|
@@ -156,16 +188,16 @@ const Modal = ({ isOpen, onClose, variableId, status, requirementType, descripti
|
|
|
156
188
|
py: 1,
|
|
157
189
|
borderRadius: 0,
|
|
158
190
|
px: 2,
|
|
159
|
-
} }))] }), jsxRuntime.jsx(material.Typography, { sx: { mb: 3, lineHeight: 1.6, whiteSpace: "pre-line" }, children: index.default(
|
|
191
|
+
} }))] }), jsxRuntime.jsx(material.Typography, { sx: { mb: 3, lineHeight: 1.6, whiteSpace: "pre-line" }, children: index.default(variable$1.customerHelpText) }), variableState === variable.VariableState.ActionRequired &&
|
|
192
|
+
variable$1.feedback && (jsxRuntime.jsx(Alert.Alert, { variant: "error", icon: jsxRuntime.jsx(iconsMaterial.InfoOutlineRounded, { sx: { fontSize: 20 } }), sx: {
|
|
160
193
|
mb: 2,
|
|
161
|
-
}, children:
|
|
194
|
+
}, children: variable$1.feedback })), variableState !== variable.VariableState.ActionRequired &&
|
|
195
|
+
variable$1.feedback && (jsxRuntime.jsx(Alert.Alert, { variant: "info", icon: jsxRuntime.jsx(iconsMaterial.ArticleRounded, { sx: { fontSize: 20, color: theme.palette.text.primary } }), sx: {
|
|
162
196
|
mb: 2,
|
|
163
197
|
backgroundColor: "#00000000",
|
|
164
198
|
borderColor: "#acacacff",
|
|
165
199
|
color: theme.palette.text.primary,
|
|
166
|
-
}, children:
|
|
167
|
-
canSubmitSave ||
|
|
168
|
-
variableState === variable.VariableState.Declined, sx: {
|
|
200
|
+
}, children: variable$1.feedback })), jsxRuntime.jsx(material.TextField, { multiline: true, rows: 6, fullWidth: true, value: textValue, onChange: (e) => setTextValue(e.target.value), disabled: useDefaultValue || cannotEdit, sx: {
|
|
169
201
|
mb: 2,
|
|
170
202
|
"& .MuiOutlinedInput-root": {
|
|
171
203
|
backgroundColor: useDefaultValue || canSubmitSave
|
|
@@ -173,12 +205,17 @@ const Modal = ({ isOpen, onClose, variableId, status, requirementType, descripti
|
|
|
173
205
|
: "#fff",
|
|
174
206
|
borderRadius: 2,
|
|
175
207
|
},
|
|
176
|
-
} }), jsxRuntime.jsx(material.FormControlLabel, { control: jsxRuntime.jsx(material.Checkbox, { checked: useDefaultValue, disabled:
|
|
208
|
+
} }), jsxRuntime.jsx(material.FormControlLabel, { control: jsxRuntime.jsx(material.Checkbox, { checked: useDefaultValue, disabled: cannotEdit, onChange: handleUseDefaultValueChange, sx: {
|
|
209
|
+
color: theme.palette.primary.main,
|
|
210
|
+
"&.Mui-checked": {
|
|
211
|
+
color: theme.palette.primary.main,
|
|
212
|
+
},
|
|
213
|
+
} }), label: "Use Default Wording", sx: { mb: 3 } }), !isLeafOrganisation && variable$1.scope === variable.VariableScope.Network ? (jsxRuntime.jsx(material.FormControlLabel, { control: jsxRuntime.jsx(material.Checkbox, { checked: isChildEditable, disabled: cannotEdit, onChange: handleIsChildEditableHandler, sx: {
|
|
177
214
|
color: theme.palette.primary.main,
|
|
178
215
|
"&.Mui-checked": {
|
|
179
216
|
color: theme.palette.primary.main,
|
|
180
217
|
},
|
|
181
|
-
} }), label: "
|
|
218
|
+
} }), label: "Is Child Editable", sx: { mb: 3 } })) : (jsxRuntime.jsx(jsxRuntime.Fragment, {})), jsxRuntime.jsxs(material.Box, { sx: {
|
|
182
219
|
display: "flex",
|
|
183
220
|
flexDirection: { xs: "column", sm: "row" },
|
|
184
221
|
alignItems: { xs: "stretch", sm: "center" },
|
|
@@ -187,12 +224,12 @@ const Modal = ({ isOpen, onClose, variableId, status, requirementType, descripti
|
|
|
187
224
|
pt: 3,
|
|
188
225
|
borderTop: "1px solid",
|
|
189
226
|
borderColor: "divider",
|
|
190
|
-
}, children: [variableState !== variable.VariableState.Declined ? (jsxRuntime.jsxs(material.Box, { sx: { display: "flex", gap: 1.5, flexWrap: "wrap" }, children: [useDefaultValue
|
|
227
|
+
}, children: [variableState !== variable.VariableState.Declined ? (jsxRuntime.jsxs(material.Box, { sx: { display: "flex", gap: 1.5, flexWrap: "wrap" }, children: [!useDefaultValue && (jsxRuntime.jsx(Button.Button, { onClick: handleSave, variant: "outline", size: "md", disabled: !isTextDirty || canSubmitSave || isBlankInvalid, children: isSaving ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(material.CircularProgress, { size: 20 }), jsxRuntime.jsx(material.Typography, { sx: { paddingLeft: 2 }, children: "Saving..." })] })) : ("Save as Draft") })), jsxRuntime.jsx(Button.Button, { onClick: handleSubmit, variant: "outline", size: "md", disabled: isSubmitDisabled, sx: {
|
|
191
228
|
backgroundColor: theme.palette.primary.main + "52",
|
|
192
229
|
"&:hover": {
|
|
193
230
|
backgroundColor: theme.palette.primary.main + "80",
|
|
194
231
|
},
|
|
195
|
-
}, children: isSubmitting ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(material.CircularProgress, { size: 20 }), jsxRuntime.jsx(material.Typography, { sx: { paddingLeft: 2 }, children: "Submitting..." })] })) :
|
|
232
|
+
}, children: isSubmitting ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(material.CircularProgress, { size: 20 }), jsxRuntime.jsx(material.Typography, { sx: { paddingLeft: 2 }, children: "Submitting..." })] })) : (submitButtonLabel) }), variableReqType === variable.RequirementType.Optional && (jsxRuntime.jsx(Button.Button, { onClick: onDeclineWording, variant: "outline", size: "md", sx: {
|
|
196
233
|
backgroundColor: "#ff464652",
|
|
197
234
|
"&:hover": {
|
|
198
235
|
backgroundColor: "#ff464680", // Darker purple on hover
|
|
@@ -200,11 +237,11 @@ const Modal = ({ isOpen, onClose, variableId, status, requirementType, descripti
|
|
|
200
237
|
}, disabled: canSubmitSave, children: "Decline wording" }))] })) : (jsxRuntime.jsx(material.Box, { sx: { display: "flex", gap: 1.5, flexWrap: "wrap" }, children: jsxRuntime.jsx(Button.Button, { onClick: () => {
|
|
201
238
|
setIsSubmitting(true);
|
|
202
239
|
// Pass the default value and true directly to onSubmit
|
|
203
|
-
const payloadValue = toStorage(toDisplay(defaultValue));
|
|
240
|
+
const payloadValue = toStorage(toDisplay(variable$1.defaultValue ?? ""));
|
|
204
241
|
setCustomValue(textValue);
|
|
205
|
-
setTextValue(toDisplay(defaultValue));
|
|
242
|
+
setTextValue(toDisplay(variable$1.defaultValue ?? ""));
|
|
206
243
|
setUseDefaultValue(true);
|
|
207
|
-
onSubmit?.(payloadValue, true);
|
|
244
|
+
onSubmit?.(payloadValue, true, isChildEditable);
|
|
208
245
|
}, variant: "outline", size: "md", disabled: canSubmitSave, sx: {
|
|
209
246
|
backgroundColor: "#ff464652",
|
|
210
247
|
"&:hover": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sources":["../../../../src/components/Modal.tsx"],"sourcesContent":["import React, { use, useEffect, useState } from \"react\";\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n IconButton,\r\n Box,\r\n Typography,\r\n TextField,\r\n Checkbox,\r\n FormControlLabel,\r\n Alert as MuiAlert,\r\n Chip,\r\n styled,\r\n CircularProgress,\r\n useTheme,\r\n} from \"@mui/material\";\r\nimport { Button } from \"./Button\";\r\nimport {\r\n ArrowBackIosRounded,\r\n ArrowForwardIosRounded,\r\n ArticleRounded,\r\n CloseRounded,\r\n ErrorOutlineRounded,\r\n InfoOutlineRounded,\r\n StickyNote2Rounded,\r\n} from \"@mui/icons-material\";\r\nimport { Alert } from \"./Alert\";\r\nimport { toast } from \"react-toastify\";\r\nimport parse from \"html-react-parser\";\r\nimport { VariableState, RequirementType } from \"../types/variable\";\r\nimport {\r\n mapRequirementTypeToState,\r\n mapStatusToVariableState,\r\n} from \"../helpers/variableProcessing\";\r\n\r\ninterface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n variableId: string;\r\n status: string;\r\n requirementType: string;\r\n description: string;\r\n value: string;\r\n defaultValue: string;\r\n note?: string;\r\n onSave?: (fieldValue: string, defaultChecked: boolean) => void;\r\n onSubmit?: (fieldValue: string, defaultChecked: boolean) => void;\r\n successMessage?: string;\r\n errorMessage?: string;\r\n onDeclineWording?: () => void;\r\n onPrevious?: () => void;\r\n onNext?: () => void;\r\n currentPage?: number;\r\n totalPages?: number;\r\n isLoading: boolean;\r\n useDefault: boolean;\r\n canBeBlank?: boolean;\r\n}\r\n\r\nconst StyledDialog = styled(Dialog)(({ theme }) => ({\r\n \"& .MuiDialog-paper\": {\r\n color: theme.palette.background.default,\r\n borderRadius: theme.shape.borderRadius,\r\n maxWidth: \"896px\",\r\n width: \"100%\",\r\n maxHeight: \"90vh\",\r\n },\r\n}));\r\n\r\nconst NavButton = styled(IconButton)(({ theme }) => ({\r\n width: \"40px\",\r\n height: \"40px\",\r\n borderRadius: 999,\r\n border: `2px solid ${theme.palette.dark.main}`,\r\n backgroundColor: \"#fff\",\r\n padding: theme.spacing(1, 2),\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.grey[100], // Changed from dark.main to grey[100]\r\n color: theme.palette.dark.main, // Keep text dark instead of light\r\n borderColor: theme.palette.dark.main, // Keep border dark\r\n },\r\n}));\r\n\r\nexport const Modal: React.FC<ModalProps> = ({\r\n isOpen,\r\n onClose,\r\n variableId,\r\n status,\r\n requirementType,\r\n description,\r\n value,\r\n defaultValue,\r\n note,\r\n onSave,\r\n onSubmit,\r\n successMessage,\r\n errorMessage,\r\n onDeclineWording,\r\n onPrevious,\r\n onNext,\r\n currentPage = 1,\r\n totalPages = 1,\r\n isLoading,\r\n useDefault,\r\n canBeBlank,\r\n}) => {\r\n const variableState = mapStatusToVariableState(status);\r\n const variableReqType = mapRequirementTypeToState(requirementType);\r\n\r\n const [textValue, setTextValue] = useState(value);\r\n const [customValue, setCustomValue] = useState(\"\");\r\n\r\n const [useDefaultValue, setUseDefaultValue] = useState(true);\r\n const [isSaving, setIsSaving] = useState(false);\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n\r\n const theme = useTheme();\r\n\r\n const toDisplay = (str: string) => str?.replace(/\\\\n/g, \"\\n\") ?? \"\";\r\n const toStorage = (str: string) => str?.replace(/\\r?\\n/g, \"\\\\n\") ?? \"\";\r\n\r\n useEffect(() => {\r\n const displayValue = toDisplay(value);\r\n const displayDefault = toDisplay(defaultValue);\r\n\r\n const isUsingDefault = useDefault || displayValue === displayDefault;\r\n\r\n setUseDefaultValue(isUsingDefault);\r\n setTextValue(displayValue);\r\n setCustomValue(isUsingDefault ? \"\" : displayValue);\r\n }, [variableId, value, defaultValue]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n setIsSaving(false);\r\n setIsSubmitting(false);\r\n }\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n if (successMessage && successMessage !== \"\") {\r\n toast.success(successMessage);\r\n }\r\n }, [successMessage]);\r\n\r\n useEffect(() => {\r\n if (errorMessage && errorMessage !== \"\") {\r\n toast.error(errorMessage);\r\n }\r\n }, [errorMessage]);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n setIsSaving(false);\r\n setIsSubmitting(false);\r\n }\r\n }, [isLoading]);\r\n\r\n const handleUseDefaultValueChange = (\r\n event: React.ChangeEvent<HTMLInputElement>,\r\n ) => {\r\n const checked = event.target.checked;\r\n\r\n if (checked) {\r\n setCustomValue(textValue);\r\n setTextValue(toDisplay(defaultValue));\r\n } else {\r\n setTextValue(customValue || \"\");\r\n }\r\n\r\n setUseDefaultValue(checked);\r\n };\r\n\r\n const canSubmitSave = isLoading || variableState === VariableState.Pending;\r\n\r\n const statusConfig = {\r\n [VariableState.Pending]: { color: \"#EBC7FF\", label: \"Pending\" },\r\n [VariableState.Draft]: { color: \"#4D3019\", label: \"Draft\" },\r\n [VariableState.Declined]: { color: \"#4D3019\", label: \"Declined\" },\r\n [VariableState.ActionRequired]: {\r\n color: \"#FFBCB3\",\r\n label: \"Action Required\",\r\n },\r\n [VariableState.Accepted]: { color: \"#DBF59A\", label: \"Accepted\" },\r\n [VariableState.NotStarted]: { color: \"#000000ff\", label: \"Not Started\" },\r\n };\r\n\r\n const reqTypeConfig = {\r\n Default: {\r\n color: \"#F5A623\",\r\n highlight: \"#f3bf6bff\",\r\n highlightSelected: \"#F5A623\",\r\n label: \"Mandatory\",\r\n },\r\n Optional: {\r\n color: \"#F5D76E\",\r\n highlight: \"#f3e2a5ff\",\r\n highlightSelected: \"#F5D76E\",\r\n label: \"Optional\",\r\n },\r\n };\r\n\r\n const statusStyle = variableState\r\n ? statusConfig[variableState]\r\n : { color: \"#ccc\", label: \"Unknown\" };\r\n const requirementTypeStyle = variableReqType\r\n ? reqTypeConfig[variableReqType]\r\n : { color: \"#ccc\", label: \"Unknown\" };\r\n\r\n const handleSave = () => {\r\n setIsSaving(true);\r\n const payloadValue = toStorage(textValue);\r\n onSave?.(payloadValue, useDefaultValue);\r\n };\r\n\r\n const handleSubmit = () => {\r\n setIsSubmitting(true);\r\n const payloadValue = toStorage(textValue);\r\n onSubmit?.(payloadValue, useDefaultValue);\r\n };\r\n\r\n return (\r\n <StyledDialog open={isOpen} onClose={onClose} maxWidth=\"md\" fullWidth>\r\n <IconButton\r\n onClick={onClose}\r\n disabled={isLoading}\r\n sx={{\r\n position: \"absolute\",\r\n top: 16,\r\n right: 16,\r\n zIndex: 1,\r\n }}\r\n >\r\n <CloseRounded sx={{ fontSize: 24 }} />\r\n </IconButton>\r\n\r\n <DialogContent sx={{ p: { xs: 3, sm: 4, md: 6 } }}>\r\n {/* Status Chip */}\r\n <Box sx={{ mb: 3 }}>\r\n <Chip\r\n label={requirementTypeStyle.label.toUpperCase()}\r\n sx={{\r\n mr: 3,\r\n border: \"3px solid\",\r\n backgroundColor: requirementTypeStyle.color,\r\n borderColor: requirementTypeStyle.color,\r\n color: theme.palette.text.primary,\r\n fontWeight: 600,\r\n fontSize: \"0.875rem\",\r\n height: \"auto\",\r\n py: 1,\r\n borderRadius: 0,\r\n px: 2,\r\n }}\r\n />\r\n {variableState !== VariableState.NotStarted && (\r\n <Chip\r\n label={statusStyle.label.toUpperCase()}\r\n sx={{\r\n mr: 3,\r\n border: \"3px solid\",\r\n backgroundColor: theme.palette.background.paper,\r\n borderColor: statusStyle.color,\r\n color: theme.palette.text.primary,\r\n fontWeight: 600,\r\n fontSize: \"0.875rem\",\r\n height: \"auto\",\r\n py: 1,\r\n borderRadius: 0,\r\n px: 2,\r\n }}\r\n />\r\n )}\r\n </Box>\r\n\r\n {/* Description */}\r\n <Typography sx={{ mb: 3, lineHeight: 1.6, whiteSpace: \"pre-line\" }}>\r\n {parse(description)}\r\n </Typography>\r\n\r\n {/* Error Alert with Custom Icon */}\r\n {variableState === VariableState.ActionRequired && note && (\r\n <Alert\r\n variant=\"error\"\r\n icon={<InfoOutlineRounded sx={{ fontSize: 20 }} />}\r\n sx={{\r\n mb: 2,\r\n }}\r\n >\r\n {note}\r\n </Alert>\r\n )}\r\n\r\n {/* Info Alert with Custom Background and Icon */}\r\n {variableState !== VariableState.ActionRequired && note && (\r\n <Alert\r\n variant=\"info\"\r\n icon={\r\n <ArticleRounded\r\n sx={{ fontSize: 20, color: theme.palette.text.primary }}\r\n />\r\n }\r\n sx={{\r\n mb: 2,\r\n backgroundColor: \"#00000000\",\r\n borderColor: \"#acacacff\",\r\n color: theme.palette.text.primary,\r\n }}\r\n >\r\n {note}\r\n </Alert>\r\n )}\r\n\r\n {/* Text Field */}\r\n <TextField\r\n multiline\r\n rows={6}\r\n fullWidth\r\n value={textValue}\r\n onChange={(e) => setTextValue(e.target.value)}\r\n disabled={\r\n useDefaultValue ||\r\n canSubmitSave ||\r\n variableState === VariableState.Declined\r\n }\r\n sx={{\r\n mb: 2,\r\n \"& .MuiOutlinedInput-root\": {\r\n backgroundColor:\r\n useDefaultValue || canSubmitSave\r\n ? \"rgba(0, 0, 0, 0.05)\"\r\n : \"#fff\",\r\n borderRadius: 2,\r\n },\r\n }}\r\n />\r\n\r\n {/* Checkbox */}\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={useDefaultValue}\r\n disabled={\r\n canSubmitSave || variableState === VariableState.Declined\r\n }\r\n onChange={handleUseDefaultValueChange}\r\n sx={{\r\n color: theme.palette.primary.main,\r\n \"&.Mui-checked\": {\r\n color: theme.palette.primary.main,\r\n },\r\n }}\r\n />\r\n }\r\n label=\"Use Default Wording\"\r\n sx={{ mb: 3 }}\r\n />\r\n\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: { xs: \"column\", sm: \"row\" },\r\n alignItems: { xs: \"stretch\", sm: \"center\" },\r\n justifyContent: \"space-between\",\r\n gap: 2,\r\n pt: 3,\r\n borderTop: \"1px solid\",\r\n borderColor: \"divider\",\r\n }}\r\n >\r\n {variableState !== VariableState.Declined ? (\r\n <Box sx={{ display: \"flex\", gap: 1.5, flexWrap: \"wrap\" }}>\r\n {useDefaultValue === false ? (\r\n <Button\r\n onClick={handleSave}\r\n variant=\"outline\"\r\n size=\"md\"\r\n disabled={canSubmitSave}\r\n >\r\n {isSaving ? (\r\n <>\r\n <CircularProgress size={20} />\r\n <Typography sx={{ paddingLeft: 2 }}>Saving...</Typography>\r\n </>\r\n ) : (\r\n \"Save\"\r\n )}\r\n </Button>\r\n ) : (\r\n <></>\r\n )}\r\n <Button\r\n onClick={handleSubmit}\r\n variant=\"outline\"\r\n size=\"md\"\r\n disabled={canSubmitSave || (useDefaultValue && useDefault) || (canBeBlank === false && textValue.trim().length <= 0)}\r\n sx={{\r\n backgroundColor: theme.palette.primary.main + \"52\",\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.primary.main + \"80\",\r\n },\r\n }}\r\n >\r\n {isSubmitting ? (\r\n <>\r\n <CircularProgress size={20} />\r\n <Typography sx={{ paddingLeft: 2 }}>\r\n Submitting...\r\n </Typography>\r\n </>\r\n ) : useDefaultValue && useDefault ? (\r\n \"Default already Accepted\"\r\n ) : useDefaultValue === false ? (\r\n \"Submit for review\"\r\n ) : (\r\n \"Submit\"\r\n )}\r\n </Button>\r\n {variableReqType === RequirementType.Optional && (\r\n <Button\r\n onClick={onDeclineWording}\r\n variant=\"outline\"\r\n size=\"md\"\r\n sx={{\r\n backgroundColor: \"#ff464652\",\r\n \"&:hover\": {\r\n backgroundColor: \"#ff464680\", // Darker purple on hover\r\n },\r\n }}\r\n disabled={canSubmitSave}\r\n >\r\n Decline wording\r\n </Button>\r\n )}\r\n </Box>\r\n ) : (\r\n <Box sx={{ display: \"flex\", gap: 1.5, flexWrap: \"wrap\" }}>\r\n <Button\r\n onClick={() => {\r\n setIsSubmitting(true);\r\n // Pass the default value and true directly to onSubmit\r\n const payloadValue = toStorage(toDisplay(defaultValue));\r\n setCustomValue(textValue);\r\n setTextValue(toDisplay(defaultValue));\r\n setUseDefaultValue(true);\r\n onSubmit?.(payloadValue, true);\r\n }}\r\n variant=\"outline\"\r\n size=\"md\"\r\n disabled={canSubmitSave}\r\n sx={{\r\n backgroundColor: \"#ff464652\",\r\n \"&:hover\": {\r\n backgroundColor: \"#ff464680\",\r\n },\r\n }}\r\n >\r\n {isSubmitting ? (\r\n <>\r\n <CircularProgress size={20} />\r\n <Typography sx={{ paddingLeft: 2 }}>\r\n Restoring...\r\n </Typography>\r\n </>\r\n ) : (\r\n \"Restore wording\"\r\n )}\r\n </Button>\r\n </Box>\r\n )}\r\n {/* Navigation */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 1.5,\r\n justifyContent: { xs: \"space-between\", sm: \"flex-end\" },\r\n }}\r\n >\r\n {currentPage !== 1 && (\r\n <NavButton\r\n onClick={onPrevious}\r\n aria-label=\"Previous\"\r\n disabled={isLoading}\r\n >\r\n <ArrowBackIosRounded\r\n sx={{ fontSize: 20, color: theme.palette.text.primary }}\r\n />\r\n </NavButton>\r\n )}\r\n {currentPage !== totalPages && (\r\n <NavButton\r\n onClick={onNext}\r\n aria-label=\"Next\"\r\n disabled={isLoading}\r\n >\r\n <ArrowForwardIosRounded\r\n sx={{ fontSize: 20, color: theme.palette.text.primary }}\r\n />\r\n </NavButton>\r\n )}\r\n <Typography fontWeight={500} fontSize=\"1.125rem\">\r\n {currentPage}/{totalPages}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n </DialogContent>\r\n </StyledDialog>\r\n );\r\n};\r\n"],"names":["styled","Dialog","IconButton","mapStatusToVariableState","mapRequirementTypeToState","useState","useTheme","useEffect","toast","VariableState","_jsxs","_jsx","CloseRounded","DialogContent","Box","Chip","Typography","parse","Alert","InfoOutlineRounded","ArticleRounded","TextField","FormControlLabel","Checkbox","Button","_Fragment","CircularProgress","RequirementType","ArrowBackIosRounded","ArrowForwardIosRounded"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../../../src/components/Modal.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n IconButton,\r\n Box,\r\n Typography,\r\n TextField,\r\n Checkbox,\r\n FormControlLabel,\r\n Alert as MuiAlert,\r\n Chip,\r\n styled,\r\n CircularProgress,\r\n useTheme,\r\n} from \"@mui/material\";\r\nimport { Button } from \"./Button\";\r\nimport {\r\n ArrowBackIosRounded,\r\n ArrowForwardIosRounded,\r\n ArticleRounded,\r\n CloseRounded,\r\n ErrorOutlineRounded,\r\n InfoOutlineRounded,\r\n StickyNote2Rounded,\r\n} from \"@mui/icons-material\";\r\nimport { Alert } from \"./Alert\";\r\nimport { toast } from \"react-toastify\";\r\nimport parse from \"html-react-parser\";\r\nimport {\r\n VariableState,\r\n RequirementType,\r\n Variable,\r\n VariableScope,\r\n} from \"../types/variable\";\r\nimport {\r\n mapRequirementTypeToState,\r\n mapStatusToVariableState,\r\n} from \"../helpers/variableProcessing\";\r\n\r\ninterface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n onSave?: (\r\n fieldValue: string,\r\n defaultChecked: boolean,\r\n isChildEditable: boolean,\r\n ) => void;\r\n onSubmit?: (\r\n fieldValue: string,\r\n defaultChecked: boolean,\r\n isChildEditable: boolean,\r\n ) => void;\r\n successMessage?: string;\r\n errorMessage?: string;\r\n onDeclineWording?: () => void;\r\n onPrevious?: () => void;\r\n onNext?: () => void;\r\n currentPage?: number;\r\n totalPages?: number;\r\n isLoading: boolean;\r\n variable: Variable;\r\n isLeafOrganisation: boolean;\r\n}\r\n\r\nconst StyledDialog = styled(Dialog)(({ theme }) => ({\r\n \"& .MuiDialog-paper\": {\r\n color: theme.palette.background.default,\r\n borderRadius: theme.shape.borderRadius,\r\n maxWidth: \"896px\",\r\n width: \"100%\",\r\n maxHeight: \"90vh\",\r\n },\r\n}));\r\n\r\nconst NavButton = styled(IconButton)(({ theme }) => ({\r\n width: \"40px\",\r\n height: \"40px\",\r\n borderRadius: 999,\r\n border: `2px solid ${theme.palette.dark.main}`,\r\n backgroundColor: \"#fff\",\r\n padding: theme.spacing(1, 2),\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.grey[100], // Changed from dark.main to grey[100]\r\n color: theme.palette.dark.main, // Keep text dark instead of light\r\n borderColor: theme.palette.dark.main, // Keep border dark\r\n },\r\n}));\r\n\r\nexport const Modal: React.FC<ModalProps> = ({\r\n isOpen,\r\n onClose,\r\n onSave,\r\n onSubmit,\r\n successMessage,\r\n errorMessage,\r\n onDeclineWording,\r\n onPrevious,\r\n onNext,\r\n currentPage = 1,\r\n totalPages = 1,\r\n isLoading,\r\n variable,\r\n isLeafOrganisation,\r\n}) => {\r\n const variableState = mapStatusToVariableState(variable.state);\r\n const variableReqType = mapRequirementTypeToState(variable.requirementType);\r\n\r\n const [textValue, setTextValue] = useState(variable.value);\r\n const [customValue, setCustomValue] = useState(\"\");\r\n\r\n const [useDefaultValue, setUseDefaultValue] = useState(\r\n variable.useDefault ?? false,\r\n );\r\n const [isChildEditable, setIsChildEditable] = useState(\r\n variable.isChildEditable ?? false,\r\n );\r\n\r\n const [isSaving, setIsSaving] = useState(false);\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n\r\n const theme = useTheme();\r\n\r\n const toDisplay = (str: string) => str?.replace(/\\\\n/g, \"\\n\") ?? \"\";\r\n const toStorage = (str: string) => str?.replace(/\\r?\\n/g, \"\\\\n\") ?? \"\";\r\n const displayValue = toDisplay(variable.value);\r\n const displayDefault = toDisplay(variable.defaultValue ?? \"\");\r\n const originalUseDefaultValue =\r\n (variable.useDefault ?? false) || displayValue === displayDefault;\r\n const originalIsChildEditable = variable.isChildEditable ?? false;\r\n\r\n const isSettingsDirty = isChildEditable !== originalIsChildEditable;\r\n const isDefaultSelectionDirty = useDefaultValue !== originalUseDefaultValue;\r\n const isTextDirty = !useDefaultValue && textValue !== displayValue;\r\n\r\n useEffect(() => {\r\n setIsChildEditable(originalIsChildEditable);\r\n setUseDefaultValue(originalUseDefaultValue);\r\n setTextValue(displayValue);\r\n setCustomValue(originalUseDefaultValue ? \"\" : displayValue);\r\n }, [\r\n displayValue,\r\n originalIsChildEditable,\r\n originalUseDefaultValue,\r\n variable._id,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n setIsSaving(false);\r\n setIsSubmitting(false);\r\n }\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n if (successMessage && successMessage !== \"\") {\r\n toast.success(successMessage);\r\n }\r\n }, [successMessage]);\r\n\r\n useEffect(() => {\r\n if (errorMessage && errorMessage !== \"\") {\r\n toast.error(errorMessage);\r\n }\r\n }, [errorMessage]);\r\n\r\n useEffect(() => {\r\n if (!isLoading) {\r\n setIsSaving(false);\r\n setIsSubmitting(false);\r\n }\r\n }, [isLoading]);\r\n\r\n const handleUseDefaultValueChange = (\r\n event: React.ChangeEvent<HTMLInputElement>,\r\n ) => {\r\n const checked = event.target.checked;\r\n\r\n if (checked) {\r\n setCustomValue(textValue);\r\n setTextValue(toDisplay(variable.defaultValue ?? \"\"));\r\n } else {\r\n setTextValue(customValue || \"\");\r\n }\r\n\r\n setUseDefaultValue(checked);\r\n };\r\n\r\n const handleIsChildEditableHandler = (\r\n event: React.ChangeEvent<HTMLInputElement>,\r\n ) => {\r\n const checked = event.target.checked;\r\n setIsChildEditable(checked);\r\n };\r\n\r\n const canSubmitSave = isLoading || variableState === VariableState.Pending;\r\n const cannotEdit = canSubmitSave || variableState === VariableState.Declined;\r\n const isBlankInvalid =\r\n variable.canBeBlank === false && textValue.trim().length <= 0;\r\n const submitButtonLabel = useDefaultValue\r\n ? variable.useDefault && !isDefaultSelectionDirty\r\n ? isSettingsDirty\r\n ? \"Save changes\"\r\n : \"Default already accepted\"\r\n : \"Accept Default\"\r\n : isTextDirty\r\n ? \"Submit for review\"\r\n : \"Save changes\";\r\n const isSubmitDisabled =\r\n canSubmitSave ||\r\n isBlankInvalid ||\r\n (useDefaultValue && variable.useDefault && !isSettingsDirty) ||\r\n (!useDefaultValue && !isTextDirty && !isSettingsDirty);\r\n\r\n const statusConfig = {\r\n [VariableState.Pending]: { color: \"#EBC7FF\", label: \"Pending\" },\r\n [VariableState.Draft]: { color: \"#4D3019\", label: \"Draft\" },\r\n [VariableState.Declined]: { color: \"#4D3019\", label: \"Declined\" },\r\n [VariableState.ActionRequired]: {\r\n color: \"#FFBCB3\",\r\n label: \"Action Required\",\r\n },\r\n [VariableState.Accepted]: { color: \"#DBF59A\", label: \"Accepted\" },\r\n [VariableState.Rejected]: { color: \"#4D3019\", label: \"Rejected\" },\r\n [VariableState.NotStarted]: { color: \"#000000ff\", label: \"Not Started\" },\r\n };\r\n\r\n const reqTypeConfig = {\r\n Default: {\r\n color: \"#F5A623\",\r\n highlight: \"#f3bf6bff\",\r\n highlightSelected: \"#F5A623\",\r\n label: \"Mandatory\",\r\n },\r\n Optional: {\r\n color: \"#F5D76E\",\r\n highlight: \"#f3e2a5ff\",\r\n highlightSelected: \"#F5D76E\",\r\n label: \"Optional\",\r\n },\r\n };\r\n\r\n const statusStyle = statusConfig[variable.state] ?? {\r\n color: \"#ccc\",\r\n label: \"Unknown\",\r\n };\r\n const requirementTypeStyle = variableReqType\r\n ? reqTypeConfig[variableReqType]\r\n : { color: \"#ccc\", label: \"Unknown\" };\r\n\r\n const handleSave = () => {\r\n setIsSaving(true);\r\n const payloadValue = toStorage(textValue);\r\n onSave?.(payloadValue, useDefaultValue, isChildEditable);\r\n };\r\n\r\n const handleSubmit = () => {\r\n setIsSubmitting(true);\r\n const payloadValue = toStorage(textValue);\r\n onSubmit?.(payloadValue, useDefaultValue, isChildEditable);\r\n };\r\n\r\n return (\r\n <StyledDialog open={isOpen} onClose={onClose} maxWidth=\"md\" fullWidth>\r\n <IconButton\r\n onClick={onClose}\r\n disabled={isLoading}\r\n sx={{\r\n position: \"absolute\",\r\n top: 16,\r\n right: 16,\r\n zIndex: 1,\r\n }}\r\n >\r\n <CloseRounded sx={{ fontSize: 24 }} />\r\n </IconButton>\r\n\r\n <DialogContent sx={{ p: { xs: 3, sm: 4, md: 6 } }}>\r\n {/* Status Chip */}\r\n <Box sx={{ mb: 3 }}>\r\n <Chip\r\n label={requirementTypeStyle.label.toUpperCase()}\r\n sx={{\r\n mr: 3,\r\n border: \"3px solid\",\r\n backgroundColor: requirementTypeStyle.color,\r\n borderColor: requirementTypeStyle.color,\r\n color: theme.palette.text.primary,\r\n fontWeight: 600,\r\n fontSize: \"0.875rem\",\r\n height: \"auto\",\r\n py: 1,\r\n borderRadius: 0,\r\n px: 2,\r\n }}\r\n />\r\n {variableState !== VariableState.NotStarted && (\r\n <Chip\r\n label={statusStyle.label.toUpperCase()}\r\n sx={{\r\n mr: 3,\r\n border: \"3px solid\",\r\n backgroundColor: theme.palette.background.paper,\r\n borderColor: statusStyle.color,\r\n color: theme.palette.text.primary,\r\n fontWeight: 600,\r\n fontSize: \"0.875rem\",\r\n height: \"auto\",\r\n py: 1,\r\n borderRadius: 0,\r\n px: 2,\r\n }}\r\n />\r\n )}\r\n </Box>\r\n\r\n {/* Description */}\r\n <Typography sx={{ mb: 3, lineHeight: 1.6, whiteSpace: \"pre-line\" }}>\r\n {parse(variable.customerHelpText)}\r\n </Typography>\r\n\r\n {/* Error Alert with Custom Icon */}\r\n {variableState === VariableState.ActionRequired &&\r\n variable.feedback && (\r\n <Alert\r\n variant=\"error\"\r\n icon={<InfoOutlineRounded sx={{ fontSize: 20 }} />}\r\n sx={{\r\n mb: 2,\r\n }}\r\n >\r\n {variable.feedback}\r\n </Alert>\r\n )}\r\n\r\n {/* Info Alert with Custom Background and Icon */}\r\n {variableState !== VariableState.ActionRequired &&\r\n variable.feedback && (\r\n <Alert\r\n variant=\"info\"\r\n icon={\r\n <ArticleRounded\r\n sx={{ fontSize: 20, color: theme.palette.text.primary }}\r\n />\r\n }\r\n sx={{\r\n mb: 2,\r\n backgroundColor: \"#00000000\",\r\n borderColor: \"#acacacff\",\r\n color: theme.palette.text.primary,\r\n }}\r\n >\r\n {variable.feedback}\r\n </Alert>\r\n )}\r\n\r\n {/* Text Field */}\r\n <TextField\r\n multiline\r\n rows={6}\r\n fullWidth\r\n value={textValue}\r\n onChange={(e) => setTextValue(e.target.value)}\r\n disabled={useDefaultValue || cannotEdit}\r\n sx={{\r\n mb: 2,\r\n \"& .MuiOutlinedInput-root\": {\r\n backgroundColor:\r\n useDefaultValue || canSubmitSave\r\n ? \"rgba(0, 0, 0, 0.05)\"\r\n : \"#fff\",\r\n borderRadius: 2,\r\n },\r\n }}\r\n />\r\n\r\n {/* Checkbox */}\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={useDefaultValue}\r\n disabled={cannotEdit}\r\n onChange={handleUseDefaultValueChange}\r\n sx={{\r\n color: theme.palette.primary.main,\r\n \"&.Mui-checked\": {\r\n color: theme.palette.primary.main,\r\n },\r\n }}\r\n />\r\n }\r\n label=\"Use Default Wording\"\r\n sx={{ mb: 3 }}\r\n />\r\n\r\n {/* Checkbox */}\r\n {!isLeafOrganisation && variable.scope === VariableScope.Network ? (\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={isChildEditable}\r\n disabled={cannotEdit}\r\n onChange={handleIsChildEditableHandler}\r\n sx={{\r\n color: theme.palette.primary.main,\r\n \"&.Mui-checked\": {\r\n color: theme.palette.primary.main,\r\n },\r\n }}\r\n />\r\n }\r\n label=\"Is Child Editable\"\r\n sx={{ mb: 3 }}\r\n />\r\n ) : (\r\n <></>\r\n )}\r\n\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: { xs: \"column\", sm: \"row\" },\r\n alignItems: { xs: \"stretch\", sm: \"center\" },\r\n justifyContent: \"space-between\",\r\n gap: 2,\r\n pt: 3,\r\n borderTop: \"1px solid\",\r\n borderColor: \"divider\",\r\n }}\r\n >\r\n {variableState !== VariableState.Declined ? (\r\n <Box sx={{ display: \"flex\", gap: 1.5, flexWrap: \"wrap\" }}>\r\n {!useDefaultValue && (\r\n <Button\r\n onClick={handleSave}\r\n variant=\"outline\"\r\n size=\"md\"\r\n disabled={!isTextDirty || canSubmitSave || isBlankInvalid}\r\n >\r\n {isSaving ? (\r\n <>\r\n <CircularProgress size={20} />\r\n <Typography sx={{ paddingLeft: 2 }}>Saving...</Typography>\r\n </>\r\n ) : (\r\n \"Save as Draft\"\r\n )}\r\n </Button>\r\n )}\r\n <Button\r\n onClick={handleSubmit}\r\n variant=\"outline\"\r\n size=\"md\"\r\n disabled={isSubmitDisabled}\r\n sx={{\r\n backgroundColor: theme.palette.primary.main + \"52\",\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.primary.main + \"80\",\r\n },\r\n }}\r\n >\r\n {isSubmitting ? (\r\n <>\r\n <CircularProgress size={20} />\r\n <Typography sx={{ paddingLeft: 2 }}>\r\n Submitting...\r\n </Typography>\r\n </>\r\n ) : (\r\n submitButtonLabel\r\n )}\r\n </Button>\r\n {variableReqType === RequirementType.Optional && (\r\n <Button\r\n onClick={onDeclineWording}\r\n variant=\"outline\"\r\n size=\"md\"\r\n sx={{\r\n backgroundColor: \"#ff464652\",\r\n \"&:hover\": {\r\n backgroundColor: \"#ff464680\", // Darker purple on hover\r\n },\r\n }}\r\n disabled={canSubmitSave}\r\n >\r\n Decline wording\r\n </Button>\r\n )}\r\n </Box>\r\n ) : (\r\n <Box sx={{ display: \"flex\", gap: 1.5, flexWrap: \"wrap\" }}>\r\n <Button\r\n onClick={() => {\r\n setIsSubmitting(true);\r\n // Pass the default value and true directly to onSubmit\r\n const payloadValue = toStorage(\r\n toDisplay(variable.defaultValue ?? \"\"),\r\n );\r\n setCustomValue(textValue);\r\n setTextValue(toDisplay(variable.defaultValue ?? \"\"));\r\n setUseDefaultValue(true);\r\n onSubmit?.(payloadValue, true, isChildEditable);\r\n }}\r\n variant=\"outline\"\r\n size=\"md\"\r\n disabled={canSubmitSave}\r\n sx={{\r\n backgroundColor: \"#ff464652\",\r\n \"&:hover\": {\r\n backgroundColor: \"#ff464680\",\r\n },\r\n }}\r\n >\r\n {isSubmitting ? (\r\n <>\r\n <CircularProgress size={20} />\r\n <Typography sx={{ paddingLeft: 2 }}>\r\n Restoring...\r\n </Typography>\r\n </>\r\n ) : (\r\n \"Restore wording\"\r\n )}\r\n </Button>\r\n </Box>\r\n )}\r\n {/* Navigation */}\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 1.5,\r\n justifyContent: { xs: \"space-between\", sm: \"flex-end\" },\r\n }}\r\n >\r\n {currentPage !== 1 && (\r\n <NavButton\r\n onClick={onPrevious}\r\n aria-label=\"Previous\"\r\n disabled={isLoading}\r\n >\r\n <ArrowBackIosRounded\r\n sx={{ fontSize: 20, color: theme.palette.text.primary }}\r\n />\r\n </NavButton>\r\n )}\r\n {currentPage !== totalPages && (\r\n <NavButton\r\n onClick={onNext}\r\n aria-label=\"Next\"\r\n disabled={isLoading}\r\n >\r\n <ArrowForwardIosRounded\r\n sx={{ fontSize: 20, color: theme.palette.text.primary }}\r\n />\r\n </NavButton>\r\n )}\r\n <Typography fontWeight={500} fontSize=\"1.125rem\">\r\n {currentPage}/{totalPages}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n </DialogContent>\r\n </StyledDialog>\r\n );\r\n};\r\n"],"names":["styled","Dialog","IconButton","variable","mapStatusToVariableState","mapRequirementTypeToState","useState","useTheme","useEffect","toast","VariableState","_jsxs","_jsx","CloseRounded","DialogContent","Box","Chip","Typography","parse","Alert","InfoOutlineRounded","ArticleRounded","TextField","FormControlLabel","Checkbox","VariableScope","_Fragment","Button","CircularProgress","RequirementType","ArrowBackIosRounded","ArrowForwardIosRounded"],"mappings":"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"}
|
|
@@ -11,91 +11,97 @@ var variableProcessing = require('../helpers/variableProcessing.js');
|
|
|
11
11
|
// Status based color configs (from Modal)
|
|
12
12
|
const statusConfig = {
|
|
13
13
|
Accepted: {
|
|
14
|
-
highlight:
|
|
15
|
-
highlightSelected:
|
|
16
|
-
label:
|
|
14
|
+
highlight: "#EDF9CD",
|
|
15
|
+
highlightSelected: "#DBF59A",
|
|
16
|
+
label: "Accepted",
|
|
17
17
|
},
|
|
18
18
|
Pending: {
|
|
19
|
-
highlight:
|
|
20
|
-
highlightSelected:
|
|
21
|
-
label:
|
|
22
|
-
alertVariant:
|
|
19
|
+
highlight: "#F5E2FF",
|
|
20
|
+
highlightSelected: "#EBC7FF",
|
|
21
|
+
label: "Pending",
|
|
22
|
+
alertVariant: "info",
|
|
23
23
|
},
|
|
24
|
-
|
|
25
|
-
highlight:
|
|
26
|
-
highlightSelected:
|
|
27
|
-
label:
|
|
28
|
-
alertVariant:
|
|
24
|
+
"Action Required": {
|
|
25
|
+
highlight: "#FBEEEE",
|
|
26
|
+
highlightSelected: "#FFBCB3",
|
|
27
|
+
label: "ActionRequired",
|
|
28
|
+
alertVariant: "error",
|
|
29
29
|
},
|
|
30
|
-
|
|
31
|
-
highlight:
|
|
32
|
-
highlightSelected:
|
|
33
|
-
label:
|
|
30
|
+
Declined: {
|
|
31
|
+
highlight: "#FFF6D1",
|
|
32
|
+
highlightSelected: "#FDE58E",
|
|
33
|
+
label: "Declined",
|
|
34
34
|
},
|
|
35
|
-
|
|
36
|
-
highlight:
|
|
37
|
-
highlightSelected:
|
|
38
|
-
label:
|
|
35
|
+
"Not Started": {
|
|
36
|
+
highlight: "#f8c97cff",
|
|
37
|
+
highlightSelected: "#F5A623",
|
|
38
|
+
label: "Not Started",
|
|
39
|
+
},
|
|
40
|
+
Rejected: {
|
|
41
|
+
highlight: "#FBEEEE",
|
|
42
|
+
highlightSelected: "#FFBCB3",
|
|
43
|
+
label: "ActionRequired",
|
|
44
|
+
alertVariant: "error",
|
|
39
45
|
},
|
|
40
46
|
Draft: {
|
|
41
|
-
highlight:
|
|
42
|
-
highlightSelected:
|
|
43
|
-
label:
|
|
47
|
+
highlight: "#FFEACD",
|
|
48
|
+
highlightSelected: "#FFC365",
|
|
49
|
+
label: "Draft",
|
|
44
50
|
},
|
|
45
51
|
};
|
|
46
52
|
const NoteContainer = material.styled(material.Box)({
|
|
47
|
-
position:
|
|
48
|
-
display:
|
|
49
|
-
maxWidth:
|
|
53
|
+
position: "relative",
|
|
54
|
+
display: "inline",
|
|
55
|
+
maxWidth: "100%",
|
|
50
56
|
});
|
|
51
57
|
// Uses highlight colors driven by status exclusively
|
|
52
58
|
const HighlightWrapper = material.styled(material.Box, {
|
|
53
|
-
shouldForwardProp: (prop) => prop !==
|
|
54
|
-
prop !==
|
|
55
|
-
prop !==
|
|
59
|
+
shouldForwardProp: (prop) => prop !== "isHovered" &&
|
|
60
|
+
prop !== "highlightColor" &&
|
|
61
|
+
prop !== "highlightSelectedColor",
|
|
56
62
|
})(({ isHovered, highlightColor, highlightSelectedColor }) => ({
|
|
57
|
-
position:
|
|
58
|
-
display:
|
|
59
|
-
maxWidth:
|
|
60
|
-
|
|
63
|
+
position: "relative",
|
|
64
|
+
display: "inline",
|
|
65
|
+
maxWidth: "100%",
|
|
66
|
+
"&:hover .edit-button": {
|
|
61
67
|
opacity: 1,
|
|
62
68
|
},
|
|
63
|
-
|
|
69
|
+
"& .highlight-span": {
|
|
64
70
|
background: isHovered ? highlightSelectedColor : highlightColor,
|
|
65
|
-
padding:
|
|
66
|
-
borderBottom:
|
|
67
|
-
boxDecorationBreak:
|
|
68
|
-
WebkitBoxDecorationBreak:
|
|
69
|
-
transition:
|
|
70
|
-
cursor:
|
|
71
|
-
fontSize:
|
|
72
|
-
wordWrap:
|
|
73
|
-
overflowWrap:
|
|
74
|
-
display:
|
|
75
|
-
color:
|
|
71
|
+
padding: "2px 4px",
|
|
72
|
+
borderBottom: "2px solid rgba(77, 48, 25, 0.3)",
|
|
73
|
+
boxDecorationBreak: "clone",
|
|
74
|
+
WebkitBoxDecorationBreak: "clone",
|
|
75
|
+
transition: "background 0.2s ease",
|
|
76
|
+
cursor: "pointer",
|
|
77
|
+
fontSize: "1rem",
|
|
78
|
+
wordWrap: "break-word",
|
|
79
|
+
overflowWrap: "break-word",
|
|
80
|
+
display: "inline",
|
|
81
|
+
color: "#4D3019",
|
|
76
82
|
},
|
|
77
83
|
}));
|
|
78
84
|
const EditButton = material.styled(material.IconButton)(({ theme }) => ({
|
|
79
85
|
top: 0,
|
|
80
86
|
right: 0,
|
|
81
|
-
transform:
|
|
82
|
-
position:
|
|
87
|
+
transform: "translate(-50%, -50%)",
|
|
88
|
+
position: "relative",
|
|
83
89
|
width: 20,
|
|
84
90
|
height: 20,
|
|
85
91
|
marginRight: -20,
|
|
86
|
-
borderRadius: (typeof theme.shape.borderRadius ===
|
|
92
|
+
borderRadius: (typeof theme.shape.borderRadius === "string"
|
|
87
93
|
? parseInt(theme.shape.borderRadius, 10)
|
|
88
94
|
: theme.shape.borderRadius || 4) * 2,
|
|
89
|
-
backgroundColor:
|
|
95
|
+
backgroundColor: "#4D3019",
|
|
90
96
|
opacity: 0,
|
|
91
|
-
transition:
|
|
92
|
-
boxShadow:
|
|
93
|
-
|
|
94
|
-
backgroundColor:
|
|
95
|
-
transform:
|
|
97
|
+
transition: "all 0.2s ease",
|
|
98
|
+
boxShadow: "0 1px 3px rgba(0,0,0,0.12)",
|
|
99
|
+
"&:hover": {
|
|
100
|
+
backgroundColor: "#4D3019",
|
|
101
|
+
transform: "translate(-50%, -50%) scale(1.1)",
|
|
96
102
|
},
|
|
97
103
|
}));
|
|
98
|
-
const NoteBox = ({ status, requirementType, label, note, children, className =
|
|
104
|
+
const NoteBox = ({ status, requirementType, label, note, children, className = "", onEditClick, }) => {
|
|
99
105
|
const [isHovered, setIsHovered] = React.useState(false);
|
|
100
106
|
// Map current status
|
|
101
107
|
const variableState = variableProcessing.mapStatusToVariableState(status);
|
|
@@ -103,39 +109,42 @@ const NoteBox = ({ status, requirementType, label, note, children, className = '
|
|
|
103
109
|
const style = variableState
|
|
104
110
|
? statusConfig[variableState]
|
|
105
111
|
: {
|
|
106
|
-
highlight:
|
|
107
|
-
highlightSelected:
|
|
112
|
+
highlight: "#EEE",
|
|
113
|
+
highlightSelected: "#DDD"};
|
|
108
114
|
const reqTypeConfig = {
|
|
109
115
|
Default: {
|
|
110
|
-
color:
|
|
111
|
-
highlight:
|
|
112
|
-
highlightSelected:
|
|
113
|
-
label:
|
|
116
|
+
color: "#F5A623",
|
|
117
|
+
highlight: "#f3bf6bff",
|
|
118
|
+
highlightSelected: "#F5A623",
|
|
119
|
+
label: "Mandatory",
|
|
114
120
|
},
|
|
115
121
|
Optional: {
|
|
116
|
-
color:
|
|
117
|
-
highlight:
|
|
118
|
-
highlightSelected:
|
|
119
|
-
label:
|
|
122
|
+
color: "#F5D76E",
|
|
123
|
+
highlight: "#f3e2a5ff",
|
|
124
|
+
highlightSelected: "#F5D76E",
|
|
125
|
+
label: "Optional",
|
|
120
126
|
},
|
|
121
127
|
};
|
|
122
|
-
const requirementTypeStyle = requirementTypeState
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
128
|
+
const requirementTypeStyle = requirementTypeState
|
|
129
|
+
? reqTypeConfig[requirementTypeState]
|
|
130
|
+
: {
|
|
131
|
+
highlight: "#EEE",
|
|
132
|
+
highlightSelected: "#DDD"};
|
|
133
|
+
return (jsxRuntime.jsxs(NoteContainer, { className: className, children: [variableState && style.alertVariant && note && (jsxRuntime.jsx(Alert.Alert, { variant: style.alertVariant, sx: { mb: 1 }, children: note })), jsxRuntime.jsxs(HighlightWrapper, { isHovered: isHovered, highlightColor: variableState === variable.VariableState.NotStarted
|
|
134
|
+
? requirementTypeStyle.highlight
|
|
135
|
+
: style.highlight, highlightSelectedColor: variableState === variable.VariableState.NotStarted
|
|
136
|
+
? requirementTypeStyle.highlightSelected
|
|
137
|
+
: style.highlightSelected, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), onClick: (e) => {
|
|
127
138
|
e.stopPropagation();
|
|
128
139
|
if (onEditClick) {
|
|
129
140
|
onEditClick();
|
|
130
141
|
}
|
|
131
|
-
}, children: [jsxRuntime.jsx("span", { className: "highlight-span", style: { display:
|
|
142
|
+
}, children: [jsxRuntime.jsx("span", { className: "highlight-span", style: { display: "inline" }, children: children }), jsxRuntime.jsx(EditButton, { className: "edit-button", onClick: (e) => {
|
|
132
143
|
e.stopPropagation();
|
|
133
144
|
if (onEditClick) {
|
|
134
145
|
onEditClick();
|
|
135
146
|
}
|
|
136
|
-
}, size: "small", children: variableState === variable.VariableState.Accepted
|
|
137
|
-
? jsxRuntime.jsx(iconsMaterial.CheckRounded, { sx: { fontSize: 14, color: "#FFFFFF", strokeWidth: 2 } })
|
|
138
|
-
: jsxRuntime.jsx(iconsMaterial.EditRounded, { sx: { fontSize: 14, color: "#FFFFFF", strokeWidth: 2 } }) })] })] }));
|
|
147
|
+
}, size: "small", children: variableState === variable.VariableState.Accepted ? (jsxRuntime.jsx(iconsMaterial.CheckRounded, { sx: { fontSize: 14, color: "#FFFFFF", strokeWidth: 2 } })) : (jsxRuntime.jsx(iconsMaterial.EditRounded, { sx: { fontSize: 14, color: "#FFFFFF", strokeWidth: 2 } })) })] })] }));
|
|
139
148
|
};
|
|
140
149
|
|
|
141
150
|
exports.NoteBox = NoteBox;
|