diff --git a/apps/backend/src/middleware/requests.ts b/apps/backend/src/middleware/requests.ts index d182c301..8775d74f 100644 --- a/apps/backend/src/middleware/requests.ts +++ b/apps/backend/src/middleware/requests.ts @@ -1,5 +1,5 @@ import { NextFunction, Request, Response } from 'express' -import _ from 'lodash' +import omit from 'lodash/omit' /** * Removes attributes from a request's body. So if "_id" is passed in, "_id" will be removed @@ -21,4 +21,4 @@ export const removeRequestAttributes = export const removeAttributesFrom = ( obj: T, attributes: K[] -): Omit => _.omit(obj, attributes) +): Omit => omit(obj, attributes) diff --git a/apps/backend/src/routes/api/patients.ts b/apps/backend/src/routes/api/patients.ts index d4ae5984..6a94180f 100644 --- a/apps/backend/src/routes/api/patients.ts +++ b/apps/backend/src/routes/api/patients.ts @@ -1,7 +1,8 @@ import express, { Response } from 'express'; import mongoose from 'mongoose'; -import _ from 'lodash'; +import pick from 'lodash/pick' +import assign from 'lodash/assign' import { uploadFile, downloadFile, @@ -100,7 +101,7 @@ router.get( stepData = stepData.toObject(); // Filter out fields that the user cannot view - stepData = _.pick(stepData, readableFields); + stepData = pick(stepData, readableFields); // Update the patient data patientData.set(step.key, stepData, { strict: false }); @@ -162,7 +163,7 @@ router.put( return sendResponse(res, 404, `Patient "${id}" not found`); // Copy over the attributes from the request - _.assign(patient, req.body); + assign(patient, req.body); patient.lastEdited = new Date(); patient.lastEditedBy = req.user.name; @@ -364,7 +365,7 @@ router.post( // Filter out request fields that the user cannot write const writableFields = await getWritableFields(req.user, stepKey); - req.body = _.pick(req.body, writableFields); + req.body = pick(req.body, writableFields); // Find the patient's step data let Model; @@ -458,7 +459,7 @@ const updatePatientStepData = async (patientId: string, StepModel: typeof mongoo return newStepDataModel.save(); } - patientStepData = _.assign(patientStepData, data); + patientStepData = assign(patientStepData, data); return patientStepData.save(); }; diff --git a/apps/backend/src/routes/api/public.ts b/apps/backend/src/routes/api/public.ts index 6793bb2f..fc075106 100644 --- a/apps/backend/src/routes/api/public.ts +++ b/apps/backend/src/routes/api/public.ts @@ -1,5 +1,5 @@ import express, { Response } from 'express'; -import _ from 'lodash'; + import { sendResponse, } from '../../utils/response'; diff --git a/apps/backend/src/utils/initDb.ts b/apps/backend/src/utils/initDb.ts index dcf07c34..7e6e2475 100644 --- a/apps/backend/src/utils/initDb.ts +++ b/apps/backend/src/utils/initDb.ts @@ -9,7 +9,7 @@ import { Step, StepStatus, } from '@3dp4me/types' -import _ from 'lodash' +import cloneDeep from 'lodash/cloneDeep' import log from 'loglevel' import mongoose, { SchemaDefinitionProperty } from 'mongoose' import encrypt from 'mongoose-encryption' @@ -265,5 +265,5 @@ const generateFieldsFromMetadata = (fieldsMetadata: Field[], baseSchema = {}) => } }) - return Object.assign(_.cloneDeep(baseSchema), ...generatedSchema) + return Object.assign(cloneDeep(baseSchema), ...generatedSchema) } diff --git a/apps/backend/src/utils/keyUtils.ts b/apps/backend/src/utils/keyUtils.ts index 27e5f304..6bf734c9 100644 --- a/apps/backend/src/utils/keyUtils.ts +++ b/apps/backend/src/utils/keyUtils.ts @@ -1,5 +1,5 @@ import { ReservedStep } from '@3dp4me/types' -import _ from 'lodash' +import camelCase from 'lodash/camelCase' /* Returns a string of specified length composed of random alphanumeric characters */ const randomAlphanumeric = (length: number) => { @@ -18,7 +18,7 @@ const generateKeyWithCamelCase = (input: string) => { return randomAlphanumeric(10) } - return _.camelCase(input) + return camelCase(input) } const checkKeyCollision = (newKey: string, otherKeys: string[]) => diff --git a/apps/backend/src/utils/stepUtils.ts b/apps/backend/src/utils/stepUtils.ts index a96580c4..8276d8a7 100644 --- a/apps/backend/src/utils/stepUtils.ts +++ b/apps/backend/src/utils/stepUtils.ts @@ -1,5 +1,6 @@ import { Field, ReservedStep, Step } from '@3dp4me/types' -import _ from 'lodash' +import cloneDeep from 'lodash/cloneDeep' +import assign from 'lodash/assign' import { ClientSession, HydratedDocument, PipelineStage } from 'mongoose' import { removeAttributesFrom } from '../middleware/requests' @@ -191,7 +192,7 @@ const updateElementNumbers = ( // number for the field that it is pointing at. The elements in deletedElements get priority, // meaning they always keep the same field number. - const updatedElements = _.cloneDeep(goodElements) + const updatedElements = cloneDeep(goodElements) let currElementNumber = 0 let deletedElementPointer = 0 @@ -218,7 +219,7 @@ const updateElementNumbers = ( } const updateFieldKeys = (fields: Field[]) => { - const clonedFields = _.cloneDeep(fields) + const clonedFields = cloneDeep(fields) const currentFieldKeys = clonedFields.map((field) => field.key ?? '') for (let i = 0; i < clonedFields.length; i++) { @@ -253,8 +254,8 @@ const updateFieldInTransaction = async ( session: ClientSession, level: number ) => { - const savedFields = _.cloneDeep(fieldsInDB) - let updatedFields = _.cloneDeep(fieldsFromRequest) + const savedFields = cloneDeep(fieldsInDB) + let updatedFields = cloneDeep(fieldsFromRequest) const addedFields = await getAddedFields(session, savedFields, updatedFields) @@ -425,7 +426,7 @@ const updateStepInTransaction = async ( return abortAndError(session, 'Step not found on final update') } - _.assign(step, strippedBody) + assign(step, strippedBody) await step.save({ session, validateBeforeSave: false }) // Return the model so that we can do validation later diff --git a/apps/frontend/src/components/CreateFieldModal/CreateFieldModal.tsx b/apps/frontend/src/components/CreateFieldModal/CreateFieldModal.tsx index 3b308b73..1619c584 100644 --- a/apps/frontend/src/components/CreateFieldModal/CreateFieldModal.tsx +++ b/apps/frontend/src/components/CreateFieldModal/CreateFieldModal.tsx @@ -13,7 +13,8 @@ import Checkbox from '@mui/material/Checkbox' import FormControl from '@mui/material/FormControl' import Modal from '@mui/material/Modal' import NativeSelect from '@mui/material/NativeSelect' -import _ from 'lodash' +import cloneDeep from 'lodash/cloneDeep' +import clone from 'lodash/clone' import React, { ChangeEventHandler, ReactNode, useState } from 'react' import { trackPromise } from 'react-promise-tracker' @@ -65,20 +66,20 @@ const CreateFieldModal = ({ } const addOption = () => { - const updatedOptions = _.cloneDeep(options) + const updatedOptions = cloneDeep(options) updatedOptions.push({ EN: '', AR: '' }) setOptions(updatedOptions) } const updateOptionField = (index: number, val: string, language: Language) => { - const updatedOptions = _.cloneDeep(options) + const updatedOptions = cloneDeep(options) updatedOptions[index][language] = val setOptions(updatedOptions) } const moveOption = (currIndex: number, newIndex: number) => { if (newIndex >= 0 && newIndex < options.length) { - const updatedOptions = _.cloneDeep(options) + const updatedOptions = cloneDeep(options) const removedChoice = updatedOptions.splice(currIndex, 1)[0] updatedOptions.splice(newIndex, 0, removedChoice) setOptions(updatedOptions) @@ -86,7 +87,7 @@ const CreateFieldModal = ({ } const deleteOption = (index: number) => { - const updatedOptions = _.cloneDeep(options) + const updatedOptions = cloneDeep(options) updatedOptions.splice(index, 1) setOptions(updatedOptions) } @@ -120,7 +121,7 @@ const CreateFieldModal = ({ } const updateDisplayName = (value: string, language: Language) => { - const updatedDisplayName = _.clone(displayName) + const updatedDisplayName = clone(displayName) updatedDisplayName[language] = value setDisplayName(updatedDisplayName) diff --git a/apps/frontend/src/components/CreateStepModal/CreateStepModal.tsx b/apps/frontend/src/components/CreateStepModal/CreateStepModal.tsx index 8d2cb84e..c590d47f 100644 --- a/apps/frontend/src/components/CreateStepModal/CreateStepModal.tsx +++ b/apps/frontend/src/components/CreateStepModal/CreateStepModal.tsx @@ -3,7 +3,7 @@ import './CreateStepModal.scss' import { BaseStep, Field, Language } from '@3dp4me/types' import Button from '@mui/material/Button' import Modal from '@mui/material/Modal' -import _ from 'lodash' +import clone from 'lodash/clone' import { useState } from 'react' import { useErrorWrap } from '../../hooks/useErrorWrap' @@ -36,7 +36,7 @@ const CreateStepModal = ({ setSelectedRoles(roleIds) } const updateDisplayName = (value: string, language: Language) => { - const updatedDisplayName = _.clone(displayName) + const updatedDisplayName = clone(displayName) updatedDisplayName[language] = value setDisplayName(updatedDisplayName) diff --git a/apps/frontend/src/components/EditFieldModal/EditFieldModal.tsx b/apps/frontend/src/components/EditFieldModal/EditFieldModal.tsx index 29005ded..453cb890 100644 --- a/apps/frontend/src/components/EditFieldModal/EditFieldModal.tsx +++ b/apps/frontend/src/components/EditFieldModal/EditFieldModal.tsx @@ -7,7 +7,8 @@ import FormControl from '@mui/material/FormControl' import FormControlLabel from '@mui/material/FormControlLabel' import Modal from '@mui/material/Modal' import NativeSelect from '@mui/material/NativeSelect' -import _ from 'lodash' +import cloneDeep from 'lodash/cloneDeep' +import clone from 'lodash/clone' import React, { ChangeEvent, ReactNode, useEffect, useState } from 'react' import swal from 'sweetalert' @@ -71,20 +72,20 @@ const EditFieldModal = ({ } const addOption = () => { - const updatedOptions = _.cloneDeep(options) + const updatedOptions = cloneDeep(options) updatedOptions.push({ EN: '', AR: '' }) setOptions(updatedOptions) } const updateOptionField = (index: number, val: string, language: Language) => { - const updatedOptions = _.cloneDeep(options) + const updatedOptions = cloneDeep(options) updatedOptions[index][language] = val setOptions(updatedOptions) } const moveOption = (currIndex: number, newIndex: number) => { if (newIndex >= 0 && newIndex < options.length) { - const updatedOptions = _.cloneDeep(options) + const updatedOptions = cloneDeep(options) const removedChoice = updatedOptions.splice(currIndex, 1)[0] updatedOptions.splice(newIndex, 0, removedChoice) setOptions(updatedOptions) @@ -92,7 +93,7 @@ const EditFieldModal = ({ } const deleteOption = (index: number) => { - const updatedOptions = _.cloneDeep(options) + const updatedOptions = cloneDeep(options) updatedOptions.splice(index, 1) setOptions(updatedOptions) } @@ -126,7 +127,7 @@ const EditFieldModal = ({ } const updateDisplayName = (value: string, language: Language) => { - const updatedDisplayName = _.clone(displayName) + const updatedDisplayName = clone(displayName) updatedDisplayName[language] = value setDisplayName(updatedDisplayName) diff --git a/apps/frontend/src/components/EditRoleModal/EditRoleModal.tsx b/apps/frontend/src/components/EditRoleModal/EditRoleModal.tsx index 3ad9d1c2..160ee31b 100644 --- a/apps/frontend/src/components/EditRoleModal/EditRoleModal.tsx +++ b/apps/frontend/src/components/EditRoleModal/EditRoleModal.tsx @@ -10,7 +10,7 @@ import FormControl from '@mui/material/FormControl' import InputLabel from '@mui/material/InputLabel' import Modal from '@mui/material/Modal' import Select, { SelectChangeEvent } from '@mui/material/Select' -import _ from 'lodash' +import cloneDeep from 'lodash/cloneDeep' import React, { useEffect, useState } from 'react' import { trackPromise } from 'react-promise-tracker' import swal from 'sweetalert' @@ -49,11 +49,11 @@ const EditRoleModal = ({ allRoles, }: EditRoleModalProps) => { const [translations, selectedLang] = useTranslations() - const [userData, setUserData] = useState(_.cloneDeep(userInfo)) + const [userData, setUserData] = useState(cloneDeep(userInfo)) const errorWrap = useErrorWrap() useEffect(() => { - setUserData(_.cloneDeep(userInfo)) + setUserData(cloneDeep(userInfo)) }, [userInfo]) const onRolesChange = (id: string, roles: string[]) => { diff --git a/apps/frontend/src/components/EditStepModal/EditStepModal.tsx b/apps/frontend/src/components/EditStepModal/EditStepModal.tsx index 292bb664..646c14ae 100644 --- a/apps/frontend/src/components/EditStepModal/EditStepModal.tsx +++ b/apps/frontend/src/components/EditStepModal/EditStepModal.tsx @@ -4,7 +4,7 @@ import { Language, Step, TranslatedString } from '@3dp4me/types' import Button from '@mui/material/Button' import FormControlLabel from '@mui/material/FormControlLabel' import Modal from '@mui/material/Modal' -import _ from 'lodash' +import clone from 'lodash/clone' import React, { useEffect, useState } from 'react' import swal from 'sweetalert' @@ -56,7 +56,7 @@ const EditStepModal = ({ setSelectedRoles(roles) } const updateDisplayName = (value: string, language: Language) => { - const updatedDisplayName = _.clone(displayName) + const updatedDisplayName = clone(displayName) updatedDisplayName[language] = value setDisplayName(updatedDisplayName) diff --git a/apps/frontend/src/components/Fields/FieldGroup/FieldGroup.tsx b/apps/frontend/src/components/Fields/FieldGroup/FieldGroup.tsx index 714f3c6b..8e049584 100644 --- a/apps/frontend/src/components/Fields/FieldGroup/FieldGroup.tsx +++ b/apps/frontend/src/components/Fields/FieldGroup/FieldGroup.tsx @@ -3,7 +3,7 @@ import '../Fields.scss' import { Field } from '@3dp4me/types' -import _ from 'lodash' +import cloneDeep from 'lodash/cloneDeep' import swal from 'sweetalert' import { useTranslations } from '../../../hooks/useTranslations' @@ -75,7 +75,7 @@ const FieldGroup = (props: FieldGroupProps) => { } const doRemoveGroup = (groupNumber: number) => { - const newData = _.cloneDeep(props.value) + const newData = cloneDeep(props.value) newData.splice(groupNumber, 1) props.handleSimpleUpdate(props.metadata.key, newData) } diff --git a/apps/frontend/src/components/ManagePatientModal/ManagePatientModal.tsx b/apps/frontend/src/components/ManagePatientModal/ManagePatientModal.tsx index f0c8e693..80566316 100644 --- a/apps/frontend/src/components/ManagePatientModal/ManagePatientModal.tsx +++ b/apps/frontend/src/components/ManagePatientModal/ManagePatientModal.tsx @@ -4,7 +4,7 @@ import { Language, Nullish, Patient, PatientTagsField, ReservedStep, Step } from import CloseIcon from '@mui/icons-material/Close' import Button from '@mui/material/Button' import Modal from '@mui/material/Modal' -import _ from 'lodash' +import cloneDeep from 'lodash/cloneDeep' import React, { useEffect, useState } from 'react' import swal from 'sweetalert' @@ -44,10 +44,10 @@ const ManagePatientModal = ({ onUploadProfilePicture, }: ManagePatientModalProps) => { const [translations, selectedLang] = useTranslations() - const [updatedPatientData, setUpdatedPatientData] = useState(_.cloneDeep(patientData)) + const [updatedPatientData, setUpdatedPatientData] = useState(cloneDeep(patientData)) useEffect(() => { - setUpdatedPatientData(_.cloneDeep(patientData)) + setUpdatedPatientData(cloneDeep(patientData)) }, [patientData]) const onFieldUpdate = (key: string, value: string) => { @@ -222,7 +222,7 @@ const ManagePatientModal = ({ ReservedStep.Root ] as Nullish if (root) { - onStepSave(ReservedStep.Root, _.cloneDeep(root)) + onStepSave(ReservedStep.Root, cloneDeep(root)) } }} > diff --git a/apps/frontend/src/components/ManageRoleModal/ManageRoleModal.tsx b/apps/frontend/src/components/ManageRoleModal/ManageRoleModal.tsx index fd678629..6c6c11f3 100644 --- a/apps/frontend/src/components/ManageRoleModal/ManageRoleModal.tsx +++ b/apps/frontend/src/components/ManageRoleModal/ManageRoleModal.tsx @@ -3,7 +3,7 @@ import './ManageRoleModal.scss' import { Nullish, PatientTagsField, Role } from '@3dp4me/types' import Button from '@mui/material/Button' import Modal from '@mui/material/Modal' -import _ from 'lodash' +import cloneDeep from 'lodash/cloneDeep' import { useEffect, useState } from 'react' import { trackPromise } from 'react-promise-tracker' import swal from 'sweetalert' @@ -46,7 +46,7 @@ const ManageRoleModal = ({ }) useEffect(() => { - setRole(_.cloneDeep(roleInfo)) + setRole(cloneDeep(roleInfo)) }, [roleInfo]) const onDelete = async () => { diff --git a/apps/frontend/src/components/StepContent/StepContent.tsx b/apps/frontend/src/components/StepContent/StepContent.tsx index 48e061cb..b60b64f0 100644 --- a/apps/frontend/src/components/StepContent/StepContent.tsx +++ b/apps/frontend/src/components/StepContent/StepContent.tsx @@ -6,7 +6,8 @@ import Button from '@mui/material/Button' import CircularProgress from '@mui/material/CircularProgress' import MenuItem from '@mui/material/MenuItem' import Select, { SelectChangeEvent } from '@mui/material/Select' -import _ from 'lodash' +import cloneDeep from 'lodash/cloneDeep' +import set from 'lodash/set' import React, { useEffect, useState } from 'react' import { trackPromise } from 'react-promise-tracker' import swal from 'sweetalert' @@ -45,14 +46,14 @@ const StepContent = ({ edit, setEdit, }: StepContentProps) => { - const [updatedData, setUpdatedData] = useState(_.cloneDeep(stepData)) + const [updatedData, setUpdatedData] = useState(cloneDeep(stepData)) const [currentQuestion, setCurrentQuestion] = useState(0) const [singleQuestionFormat, setSingleQuestionFormat] = useState(false) const [translations, selectedLang] = useTranslations() const errorWrap = useErrorWrap() useEffect(() => { - setUpdatedData(_.cloneDeep(stepData)) + setUpdatedData(cloneDeep(stepData)) }, [stepData]) useEffect(() => { @@ -69,8 +70,8 @@ const StepContent = ({ const handleSimpleUpdate = (fieldKey: string, value: any) => { setUpdatedData((data) => { - const dataCopy = _.cloneDeep(data) - _.set(dataCopy, fieldKey, value) + const dataCopy = cloneDeep(data) + set(dataCopy, fieldKey, value) return dataCopy }) } @@ -80,7 +81,7 @@ const StepContent = ({ await trackPromise(deleteFile(patientId, metaData.key, fieldKey, file.filename)) if (!updatedData[fieldKey]) return - let updatedFiles = _.cloneDeep(updatedData[fieldKey]) as FileModel[] + let updatedFiles = cloneDeep(updatedData[fieldKey]) as FileModel[] updatedFiles = updatedFiles.filter((f) => f.filename !== file.filename) handleSimpleUpdate(fieldKey, updatedFiles) @@ -106,7 +107,7 @@ const StepContent = ({ } const oldFiles = resolveMixedObjPath(updatedData, fieldKey) - let files = _.cloneDeep(oldFiles || []) + let files = cloneDeep(oldFiles || []) if (files) files = files.concat(newFile) else files = [newFile] @@ -116,7 +117,7 @@ const StepContent = ({ } const saveData = () => { - onDataSaved(metaData.key, _.cloneDeep(updatedData)) + onDataSaved(metaData.key, cloneDeep(updatedData)) setEdit(false) swal(translations.components.bottombar.savedMessage.patientInfo, '', 'success') } @@ -143,7 +144,7 @@ const StepContent = ({ buttons: [translations.components.button.discard.confirmButton], }) // TODO: Nonexistent values don't get reset. - setUpdatedData(_.cloneDeep(stepData)) + setUpdatedData(cloneDeep(stepData)) setEdit(false) } }) @@ -164,7 +165,7 @@ const StepContent = ({ { */ const useSortableData = >(data: Nullish) => { const [sortConfig, setSortConfig] = useState>>(null) - const sortableData = useMemo(() => _.cloneDeep(data), [data]) + const sortableData = useMemo(() => cloneDeep(data), [data]) const sortedData = useMemo(() => { if (!sortableData) return sortableData diff --git a/apps/frontend/src/pages/AccountManagement/AccountManagment.tsx b/apps/frontend/src/pages/AccountManagement/AccountManagment.tsx index 0aafaa35..79847f20 100644 --- a/apps/frontend/src/pages/AccountManagement/AccountManagment.tsx +++ b/apps/frontend/src/pages/AccountManagement/AccountManagment.tsx @@ -2,7 +2,7 @@ import './AccountManagement.scss' import { AccessLevel, Nullish, Role } from '@3dp4me/types' import type { CognitoIdentityServiceProvider } from 'aws-sdk' -import _ from 'lodash' +import cloneDeep from 'lodash/cloneDeep' import React, { useEffect, useMemo, useState } from 'react' import { trackPromise } from 'react-promise-tracker' @@ -193,7 +193,7 @@ const AccountManagement = () => { } // Clone the structure and find user - const updatedUsers = _.cloneDeep(metaData) + const updatedUsers = cloneDeep(metaData) const userToUpdate = updatedUsers.find((user) => user.Username === username) if (!userToUpdate) { @@ -213,7 +213,7 @@ const AccountManagement = () => { const onUserDeleted = (username: string) => { setUserMetaData((metaData) => { - const users = _.cloneDeep(metaData) + const users = cloneDeep(metaData) const updatedUsers = users.filter((user) => user.Username !== username) return updatedUsers }) @@ -234,7 +234,7 @@ const AccountManagement = () => { */ const onRoleEdited = (roleId: string, roleData: Role) => { setRoles((rolesData) => { - const updatedRoles = _.cloneDeep(rolesData) + const updatedRoles = cloneDeep(rolesData) const updatedRole = updatedRoles.find((role) => role._id === roleId) if (!updatedRole) { return updatedRoles diff --git a/apps/frontend/src/pages/Dashboard/Dashboard.tsx b/apps/frontend/src/pages/Dashboard/Dashboard.tsx index f180c057..92778cc7 100644 --- a/apps/frontend/src/pages/Dashboard/Dashboard.tsx +++ b/apps/frontend/src/pages/Dashboard/Dashboard.tsx @@ -4,7 +4,7 @@ import { Field, Patient } from '@3dp4me/types' import MuiAlert from '@mui/material/Alert' import type { SnackbarCloseReason } from '@mui/material/Snackbar' import Snackbar from '@mui/material/Snackbar' -import _ from 'lodash' +import cloneDeep from 'lodash/cloneDeep' import { useEffect, useState } from 'react' import PaginateBar from '../../components/PaginateBar/PaginateBar' @@ -174,7 +174,7 @@ const Dashboard = () => { function generateRowData(stepKey: string, fields: Field[]): ColumnMetadata[] { if (fields == null) return [] - const rowData = _.cloneDeep(PATIENTS_BY_STEP_TABLE_ROW_DATA) + const rowData = cloneDeep(PATIENTS_BY_STEP_TABLE_ROW_DATA) if (!DISABLE_FEATURE_PATIENT_STATUS) { rowData.push({ diff --git a/apps/frontend/src/pages/DashboardManagement/DashboardManagement.tsx b/apps/frontend/src/pages/DashboardManagement/DashboardManagement.tsx index 43566883..c3e77249 100644 --- a/apps/frontend/src/pages/DashboardManagement/DashboardManagement.tsx +++ b/apps/frontend/src/pages/DashboardManagement/DashboardManagement.tsx @@ -2,7 +2,7 @@ import './DashboardManagement.scss' import { BaseStep, Field, Nullish, Step, StepPathToField, Unsaved } from '@3dp4me/types' import ListItem from '@mui/material/ListItem' -import _ from 'lodash' +import cloneDeep from 'lodash/cloneDeep' import { useEffect, useState } from 'react' import { trackPromise } from 'react-promise-tracker' @@ -131,7 +131,7 @@ const SectionTab = () => { * @param {Number} direction 1 indicates increasing stepNumber, -1 indicates decreasing fieldNumber */ function moveStep(stepKey: string, direction: Direction) { - const updatedMetadata = _.cloneDeep(stepMetadata) + const updatedMetadata = cloneDeep(stepMetadata) const currStepIndex = getStepIndexGivenKey(updatedMetadata, stepKey) @@ -170,7 +170,7 @@ const SectionTab = () => { fieldRoot: StepPathToField, direction: Direction ) { - const updatedMetadata = _.cloneDeep(stepMetadata) + const updatedMetadata = cloneDeep(stepMetadata) const foundStepIndex = getStepIndexGivenKey(updatedMetadata, stepKey) @@ -304,7 +304,7 @@ const SectionTab = () => { const generateEditStepPopup = () => { if (!selectedStepForEdit) return null - const updatedMetadata = _.cloneDeep(stepMetadata) + const updatedMetadata = cloneDeep(stepMetadata) const stepIndex = getStepIndexGivenKey(updatedMetadata, selectedStepForEdit) const stepData = updatedMetadata[stepIndex] if (!stepData) return null @@ -333,7 +333,7 @@ const SectionTab = () => { will only be saved locally. */ const addNewField = async (newFieldData: NewField) => { - const updatedMetadata = _.cloneDeep(stepMetadata) + const updatedMetadata = cloneDeep(stepMetadata) const stepIndex = updatedMetadata.findIndex((element) => element.key === selectedStep) @@ -366,15 +366,15 @@ const SectionTab = () => { } const editStep = (updatedStepData: Step) => { - const updatedMetadata = _.cloneDeep(stepMetadata) + const updatedMetadata = cloneDeep(stepMetadata) const stepIndex = getStepIndexGivenKey(updatedMetadata, selectedStep) updatedMetadata[stepIndex] = updatedStepData setStepMetadata(updatedMetadata) } const editField = (updatedFieldData: Unsaved) => { - const updatedField = _.cloneDeep(updatedFieldData) - const updatedMetadata = _.cloneDeep(stepMetadata) + const updatedField = cloneDeep(updatedFieldData) + const updatedMetadata = cloneDeep(stepMetadata) const stepIndex = getStepIndexGivenKey(updatedMetadata, selectedStep) @@ -398,7 +398,7 @@ const SectionTab = () => { } const addNewStep = (newStepData: BaseStep) => { - const updatedMetadata = _.cloneDeep(stepMetadata) + const updatedMetadata = cloneDeep(stepMetadata) // Set the step number to one more than the step number of the // last step in updatedMetadata.