From 1904e23d74aa6a38d4d5be5ebe216fda139fcf44 Mon Sep 17 00:00:00 2001
From: Joyce Yuki <82857964+kathyavini@users.noreply.github.com>
Date: Mon, 22 Jul 2024 11:35:48 -0700
Subject: [PATCH 1/9] LF-4309 Remove method_id handling from saga and utility
functions
---
packages/webapp/src/containers/Task/saga.js | 19 +-----
packages/webapp/src/util/task.ts | 70 ++++-----------------
2 files changed, 14 insertions(+), 75 deletions(-)
diff --git a/packages/webapp/src/containers/Task/saga.js b/packages/webapp/src/containers/Task/saga.js
index eaa7b591cb..cc3b31dae6 100644
--- a/packages/webapp/src/containers/Task/saga.js
+++ b/packages/webapp/src/containers/Task/saga.js
@@ -72,10 +72,7 @@ import {
onLoadingHarvestUseTypeStart,
} from '../harvestUseTypeSlice';
import { managementPlanWithCurrentLocationEntitiesSelector } from './TaskCrops/managementPlansWithLocationSelector';
-import {
- formatSoilAmendmentTaskToDBStructure,
- formatSoilAmendmentProductToDBStructure,
-} from '../../util/task';
+import { formatSoilAmendmentProductToDBStructure } from '../../util/task';
import { api } from '../../store/api/apiSlice';
const taskTypeEndpoint = [
@@ -489,13 +486,10 @@ const getSoilAmendmentTaskBody = (
data,
endpoint,
managementPlanWithCurrentLocationEntities,
- { purposes, methods },
+ { purposes },
) => {
return {
...getPostTaskBody(data, endpoint, managementPlanWithCurrentLocationEntities),
- soil_amendment_task: formatSoilAmendmentTaskToDBStructure(data.soil_amendment_task, {
- methods,
- }),
soil_amendment_task_products: formatSoilAmendmentProductToDBStructure(
data.soil_amendment_task_products,
{ purposes },
@@ -549,8 +543,6 @@ export function* createTaskSaga({ payload }) {
api.endpoints.getSoilAmendmentPurposes.select()(state),
);
taskTypeSpecificData.purposes = purposes.data;
- const methods = yield select((state) => api.endpoints.getSoilAmendmentMethods.select()(state));
- taskTypeSpecificData.methods = methods.data;
}
const header = getHeader(user_id, farm_id);
const isCustomTask = !!task_farm_id;
@@ -721,17 +713,12 @@ const getCompleteIrrigationTaskBody = (task_translation_key) => (data) => {
};
const getCompleteSoilAmendmentTaskBody = (data, taskTypeSpecificData) => {
- const soilAmendmentTask = formatSoilAmendmentTaskToDBStructure(
- data.soil_amendment_task,
- taskTypeSpecificData,
- );
const soilAmendmentTaskProducts = formatSoilAmendmentProductToDBStructure(
data.soil_amendment_task_products,
taskTypeSpecificData,
);
return {
...data.taskData,
- soil_amendment_task: soilAmendmentTask,
soil_amendment_task_products: soilAmendmentTaskProducts,
};
};
@@ -760,8 +747,6 @@ export function* completeTaskSaga({ payload: { task_id, data, returnPath } }) {
api.endpoints.getSoilAmendmentPurposes.select()(state),
);
taskTypeSpecificData.purposes = purposes.data;
- const methods = yield select((state) => api.endpoints.getSoilAmendmentMethods.select()(state));
- taskTypeSpecificData.methods = methods.data;
}
const taskData = taskTypeGetCompleteTaskBodyFunctionMap[task_translation_key]
? taskTypeGetCompleteTaskBodyFunctionMap[task_translation_key](data, taskTypeSpecificData)
diff --git a/packages/webapp/src/util/task.ts b/packages/webapp/src/util/task.ts
index 84e0ce6a11..e3d2d0b603 100644
--- a/packages/webapp/src/util/task.ts
+++ b/packages/webapp/src/util/task.ts
@@ -13,8 +13,7 @@
* GNU General Public License for more details, see .
*/
-import { SoilAmendmentMethod, SoilAmendmentPurpose } from '../store/api/types';
-import { getUnitOptionMap } from './convert-units/getUnitOptionMap';
+import { SoilAmendmentPurpose } from '../store/api/types';
interface UnitOption {
label: string;
@@ -61,39 +60,29 @@ type FormSoilAmendmentTaskProduct = {
};
type DBSoilAmendmentTask = {
- furrow_hole_depth?: number;
- furrow_hole_depth_unit?: string;
- other_application_method?: string;
- [key: string]: any;
-};
-
-type FormSoilAmendmentTask = {
- furrow_hole_depth?: number;
- furrow_hole_depth_unit?: UnitOption;
- other_application_method?: string;
- [key: string]: any;
-};
-
-type DBTask = {
soil_amendment_task_products: DBSoilAmendmentTaskProduct[];
[key: string]: any;
};
-type FormTask = {
+type FormSoilAmendmentTask = {
soil_amendment_task_products: FormSoilAmendmentTaskProduct[];
[key: string]: any;
};
// Type guard
-function isFormSoilAmendmentTask(task: DBTask | FormTask): task is FormTask {
+function isFormSoilAmendmentTask(
+ task: DBSoilAmendmentTask | FormSoilAmendmentTask,
+): task is FormSoilAmendmentTask {
return (
task.soil_amendment_task_products?.[0] && 'purposes' in task.soil_amendment_task_products[0]
);
}
-export const formatSoilAmendmentTaskToFormStructure = (task: DBTask | FormTask): FormTask => {
+export const formatSoilAmendmentTaskToFormStructure = (
+ task: DBSoilAmendmentTask | FormSoilAmendmentTask,
+): FormSoilAmendmentTask => {
if (isFormSoilAmendmentTask(task)) {
- return task as FormTask;
+ return task as FormSoilAmendmentTask;
}
const taskClone = structuredClone(task);
@@ -151,12 +140,9 @@ type RemainingFormSATProductKeys = keyof Omit<
>;
export const formatSoilAmendmentProductToDBStructure = (
- soilAmendmentTaskProducts: FormSoilAmendmentTaskProduct[] | undefined,
+ soilAmendmentTaskProducts: FormSoilAmendmentTaskProduct[],
{ purposes }: { purposes: SoilAmendmentPurpose[] },
-): DBSoilAmendmentTaskProduct[] | undefined => {
- if (!soilAmendmentTaskProducts) {
- return undefined;
- }
+): DBSoilAmendmentTaskProduct[] => {
const otherPurposeId = purposes?.find(({ key }) => key === 'OTHER')?.id;
if (!otherPurposeId) {
throw Error('id for OTHER purpose does not exist');
@@ -193,44 +179,12 @@ export const formatSoilAmendmentProductToDBStructure = (
});
};
-export const formatSoilAmendmentTaskToDBStructure = (
- soilAmendmentTask: FormSoilAmendmentTask | undefined,
- { methods }: { methods: SoilAmendmentMethod[] },
-): DBSoilAmendmentTask | undefined => {
- if (!soilAmendmentTask) {
- return undefined;
- }
- const {
- method_id,
- furrow_hole_depth,
- furrow_hole_depth_unit,
- other_application_method,
- ...rest
- } = soilAmendmentTask;
- const furrowHoleId = methods?.find(({ key }) => key === 'FURROW_HOLE')?.id;
- const otherMethodId = methods?.find(({ key }) => key === 'OTHER')?.id;
- if (!furrowHoleId) {
- throw Error('id for FURROW_HOLE method does not exist');
- }
- if (!otherMethodId) {
- throw Error('id for OTHER method does not exist');
- }
- return {
- ...rest,
- method_id,
- furrow_hole_depth: method_id === furrowHoleId ? furrow_hole_depth : undefined,
- furrow_hole_depth_unit: method_id === furrowHoleId ? furrow_hole_depth_unit?.value : undefined,
- other_application_method:
- soilAmendmentTask.method_id === otherMethodId ? other_application_method : undefined,
- };
-};
-
export const formatTaskReadOnlyDefaultValues = (task: {
taskType?: { task_translation_key: string };
[key: string]: any;
}) => {
if (task.taskType?.task_translation_key === 'SOIL_AMENDMENT_TASK') {
- return formatSoilAmendmentTaskToFormStructure(task as DBTask);
+ return formatSoilAmendmentTaskToFormStructure(task as DBSoilAmendmentTask);
}
return structuredClone(task);
From 4c69bfa3c6876a0cf78d8a7c5a152e1d64b67791 Mon Sep 17 00:00:00 2001
From: Joyce Yuki <82857964+kathyavini@users.noreply.github.com>
Date: Mon, 22 Jul 2024 12:06:46 -0700
Subject: [PATCH 2/9] LF-4309 Remove purpose fetching and other purpose
handling from saga and task utilities
---
packages/webapp/src/containers/Task/saga.js | 28 ++-------------------
packages/webapp/src/util/task.ts | 16 ++----------
2 files changed, 4 insertions(+), 40 deletions(-)
diff --git a/packages/webapp/src/containers/Task/saga.js b/packages/webapp/src/containers/Task/saga.js
index cc3b31dae6..780bbdb586 100644
--- a/packages/webapp/src/containers/Task/saga.js
+++ b/packages/webapp/src/containers/Task/saga.js
@@ -73,7 +73,6 @@ import {
} from '../harvestUseTypeSlice';
import { managementPlanWithCurrentLocationEntitiesSelector } from './TaskCrops/managementPlansWithLocationSelector';
import { formatSoilAmendmentProductToDBStructure } from '../../util/task';
-import { api } from '../../store/api/apiSlice';
const taskTypeEndpoint = [
'cleaning_task',
@@ -482,17 +481,11 @@ const getIrrigationTaskBody = (data, endpoint, managementPlanWithCurrentLocation
);
};
-const getSoilAmendmentTaskBody = (
- data,
- endpoint,
- managementPlanWithCurrentLocationEntities,
- { purposes },
-) => {
+const getSoilAmendmentTaskBody = (data, endpoint, managementPlanWithCurrentLocationEntities) => {
return {
...getPostTaskBody(data, endpoint, managementPlanWithCurrentLocationEntities),
soil_amendment_task_products: formatSoilAmendmentProductToDBStructure(
data.soil_amendment_task_products,
- { purposes },
),
};
};
@@ -536,14 +529,6 @@ export function* createTaskSaga({ payload }) {
taskTypeSelector(data.task_type_id),
);
const taskTypeSpecificData = {};
- if (task_translation_key === 'SOIL_AMENDMENT_TASK') {
- // Access cached data
- // https://redux-toolkit.js.org/rtk-query/usage/usage-without-react-hooks#accessing-cached-data--request-status
- const purposes = yield select((state) =>
- api.endpoints.getSoilAmendmentPurposes.select()(state),
- );
- taskTypeSpecificData.purposes = purposes.data;
- }
const header = getHeader(user_id, farm_id);
const isCustomTask = !!task_farm_id;
const isHarvest = task_translation_key === 'HARVEST_TASK';
@@ -712,10 +697,9 @@ const getCompleteIrrigationTaskBody = (task_translation_key) => (data) => {
);
};
-const getCompleteSoilAmendmentTaskBody = (data, taskTypeSpecificData) => {
+const getCompleteSoilAmendmentTaskBody = (data) => {
const soilAmendmentTaskProducts = formatSoilAmendmentProductToDBStructure(
data.soil_amendment_task_products,
- taskTypeSpecificData,
);
return {
...data.taskData,
@@ -740,14 +724,6 @@ export function* completeTaskSaga({ payload: { task_id, data, returnPath } }) {
const header = getHeader(user_id, farm_id);
const endpoint = isCustomTaskType ? 'custom_task' : task_translation_key.toLowerCase();
const taskTypeSpecificData = {};
- if (task_translation_key === 'SOIL_AMENDMENT_TASK') {
- // Access cached data
- // https://redux-toolkit.js.org/rtk-query/usage/usage-without-react-hooks#accessing-cached-data--request-status
- const purposes = yield select((state) =>
- api.endpoints.getSoilAmendmentPurposes.select()(state),
- );
- taskTypeSpecificData.purposes = purposes.data;
- }
const taskData = taskTypeGetCompleteTaskBodyFunctionMap[task_translation_key]
? taskTypeGetCompleteTaskBodyFunctionMap[task_translation_key](data, taskTypeSpecificData)
: data.taskData;
diff --git a/packages/webapp/src/util/task.ts b/packages/webapp/src/util/task.ts
index e3d2d0b603..810dfa1102 100644
--- a/packages/webapp/src/util/task.ts
+++ b/packages/webapp/src/util/task.ts
@@ -13,8 +13,6 @@
* GNU General Public License for more details, see .
*/
-import { SoilAmendmentPurpose } from '../store/api/types';
-
interface UnitOption {
label: string;
value: string;
@@ -127,10 +125,9 @@ export const formatSoilAmendmentTaskToFormStructure = (
const formatPurposeIdsToRelationships = (
purposeIds: number[],
otherPurpose: string | undefined,
- otherPurposeId: number,
): PurposeRelationship[] => {
return purposeIds.map((purpose_id) => {
- return { purpose_id, other_purpose: purpose_id === otherPurposeId ? otherPurpose : undefined };
+ return { purpose_id, other_purpose: otherPurpose };
});
};
@@ -141,12 +138,7 @@ type RemainingFormSATProductKeys = keyof Omit<
export const formatSoilAmendmentProductToDBStructure = (
soilAmendmentTaskProducts: FormSoilAmendmentTaskProduct[],
- { purposes }: { purposes: SoilAmendmentPurpose[] },
): DBSoilAmendmentTaskProduct[] => {
- const otherPurposeId = purposes?.find(({ key }) => key === 'OTHER')?.id;
- if (!otherPurposeId) {
- throw Error('id for OTHER purpose does not exist');
- }
return soilAmendmentTaskProducts.map((formTaskProduct) => {
const { purposes: purposeIds, other_purpose, is_weight, ...rest } = formTaskProduct;
@@ -170,11 +162,7 @@ export const formatSoilAmendmentProductToDBStructure = (
application_rate_volume_unit: !is_weight
? (rest.application_rate_volume_unit as UnitOption)?.value
: undefined,
- purpose_relationships: formatPurposeIdsToRelationships(
- purposeIds,
- other_purpose,
- otherPurposeId,
- ),
+ purpose_relationships: formatPurposeIdsToRelationships(purposeIds, other_purpose),
};
});
};
From 46eb90f686d33cd47d86a8755db118ced5b6d4c3 Mon Sep 17 00:00:00 2001
From: Joyce Yuki <82857964+kathyavini@users.noreply.github.com>
Date: Mon, 22 Jul 2024 12:08:35 -0700
Subject: [PATCH 3/9] LF-4309 Add { shouldUnregister: true } to other
application method and other purpose
---
.../Task/AddSoilAmendmentProducts/ProductCard/index.tsx | 2 +-
packages/webapp/src/components/Task/SoilAmendmentTask/index.tsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/webapp/src/components/Task/AddSoilAmendmentProducts/ProductCard/index.tsx b/packages/webapp/src/components/Task/AddSoilAmendmentProducts/ProductCard/index.tsx
index 42ecb5bfd2..d7802d25cc 100644
--- a/packages/webapp/src/components/Task/AddSoilAmendmentProducts/ProductCard/index.tsx
+++ b/packages/webapp/src/components/Task/AddSoilAmendmentProducts/ProductCard/index.tsx
@@ -182,7 +182,7 @@ const SoilAmendmentProductCard = ({
label={t('ADD_TASK.SOIL_AMENDMENT_VIEW.OTHER_PURPOSE')}
name={OTHER_PURPOSE}
disabled={isReadOnly}
- hookFormRegister={register(OTHER_PURPOSE)}
+ hookFormRegister={register(OTHER_PURPOSE, { shouldUnregister: true })}
optional
/>
>
diff --git a/packages/webapp/src/components/Task/SoilAmendmentTask/index.tsx b/packages/webapp/src/components/Task/SoilAmendmentTask/index.tsx
index d5a2547ff9..25ec7b59f7 100644
--- a/packages/webapp/src/components/Task/SoilAmendmentTask/index.tsx
+++ b/packages/webapp/src/components/Task/SoilAmendmentTask/index.tsx
@@ -191,7 +191,7 @@ const PureSoilAmendmentTask = ({
label={t('ADD_TASK.SOIL_AMENDMENT_VIEW.OTHER_METHOD')}
name={OTHER_APPLICATION_METHOD}
disabled={disabled}
- hookFormRegister={register(OTHER_APPLICATION_METHOD)}
+ hookFormRegister={register(OTHER_APPLICATION_METHOD, { shouldUnregister: true })}
optional
placeholder={t('ADD_TASK.SOIL_AMENDMENT_VIEW.OTHER_METHOD_PLACEHOLDER')}
/>
From b697d25f5ee666afcf393f60fb69a5046da89aa1 Mon Sep 17 00:00:00 2001
From: Joyce Yuki <82857964+kathyavini@users.noreply.github.com>
Date: Mon, 22 Jul 2024 12:13:24 -0700
Subject: [PATCH 4/9] LF-4309 Remove unused taskTypeSpecificData object
---
packages/webapp/src/containers/Task/saga.js | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/packages/webapp/src/containers/Task/saga.js b/packages/webapp/src/containers/Task/saga.js
index 780bbdb586..a6131f7143 100644
--- a/packages/webapp/src/containers/Task/saga.js
+++ b/packages/webapp/src/containers/Task/saga.js
@@ -506,7 +506,6 @@ const getPostTaskReqBody = (
task_translation_key,
isCustomTask,
managementPlanWithCurrentLocationEntities,
- taskTypeSpecificData,
) => {
if (isCustomTask)
return getPostTaskBody(data, endpoint, managementPlanWithCurrentLocationEntities);
@@ -514,7 +513,6 @@ const getPostTaskReqBody = (
data,
endpoint,
managementPlanWithCurrentLocationEntities,
- taskTypeSpecificData,
);
};
@@ -528,7 +526,6 @@ export function* createTaskSaga({ payload }) {
const { task_translation_key, farm_id: task_farm_id } = yield select(
taskTypeSelector(data.task_type_id),
);
- const taskTypeSpecificData = {};
const header = getHeader(user_id, farm_id);
const isCustomTask = !!task_farm_id;
const isHarvest = task_translation_key === 'HARVEST_TASK';
@@ -551,7 +548,6 @@ export function* createTaskSaga({ payload }) {
task_translation_key,
isCustomTask,
managementPlanWithCurrentLocationEntities,
- taskTypeSpecificData,
),
header,
);
@@ -723,9 +719,8 @@ export function* completeTaskSaga({ payload: { task_id, data, returnPath } }) {
const { task_translation_key, isCustomTaskType } = data;
const header = getHeader(user_id, farm_id);
const endpoint = isCustomTaskType ? 'custom_task' : task_translation_key.toLowerCase();
- const taskTypeSpecificData = {};
const taskData = taskTypeGetCompleteTaskBodyFunctionMap[task_translation_key]
- ? taskTypeGetCompleteTaskBodyFunctionMap[task_translation_key](data, taskTypeSpecificData)
+ ? taskTypeGetCompleteTaskBodyFunctionMap[task_translation_key](data)
: data.taskData;
try {
From 2b9f3bc9ade076f59696967792835aa81ea9eafd Mon Sep 17 00:00:00 2001
From: Joyce Yuki <82857964+kathyavini@users.noreply.github.com>
Date: Mon, 22 Jul 2024 12:28:02 -0700
Subject: [PATCH 5/9] LF-4309 Add ability to pass shouldUnregister to value and
unit of Unit component
---
packages/webapp/src/components/Form/Unit/index.jsx | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/packages/webapp/src/components/Form/Unit/index.jsx b/packages/webapp/src/components/Form/Unit/index.jsx
index 30bd979bde..84a075e10b 100644
--- a/packages/webapp/src/components/Form/Unit/index.jsx
+++ b/packages/webapp/src/components/Form/Unit/index.jsx
@@ -59,6 +59,7 @@ const Unit = ({
hasLeaf,
autoConversion,
onInputChange,
+ shouldUnregister,
...props
}) => {
const { t } = useTranslation(['translation', 'common']);
@@ -165,6 +166,7 @@ const Unit = ({
(
@@ -283,6 +286,8 @@ Unit.propTypes = {
onBlur: PropTypes.func,
/** testId used for component testing */
'data-testid': PropTypes.string,
+ /** react hook form shouldUnregister - unmounting input removes value */
+ shouldUnregister: PropTypes.bool,
};
export default Unit;
From cae0c180728294daca2e54d2ca976d5cb094ade3 Mon Sep 17 00:00:00 2001
From: Joyce Yuki <82857964+kathyavini@users.noreply.github.com>
Date: Mon, 22 Jul 2024 12:33:13 -0700
Subject: [PATCH 6/9] LF-4309 Add shouldUnregister to furrow hole depth
---
packages/webapp/src/components/Task/SoilAmendmentTask/index.tsx | 1 +
1 file changed, 1 insertion(+)
diff --git a/packages/webapp/src/components/Task/SoilAmendmentTask/index.tsx b/packages/webapp/src/components/Task/SoilAmendmentTask/index.tsx
index 25ec7b59f7..e2d3e006b1 100644
--- a/packages/webapp/src/components/Task/SoilAmendmentTask/index.tsx
+++ b/packages/webapp/src/components/Task/SoilAmendmentTask/index.tsx
@@ -181,6 +181,7 @@ const PureSoilAmendmentTask = ({
defaultValue={undefined} // TODO
system={system}
placeholder={t('ADD_TASK.SOIL_AMENDMENT_VIEW.FURROW_HOLE_DEPTH_PLACEHOLDER')}
+ shouldUnregister={true}
/>
>
)}
From e9dfbe7371627a0353276a8f705da909d0776d80 Mon Sep 17 00:00:00 2001
From: Joyce Yuki <82857964+kathyavini@users.noreply.github.com>
Date: Mon, 22 Jul 2024 12:46:05 -0700
Subject: [PATCH 7/9] LF-4309 Restore undefined handling on taskProducts from
PR #3313
---
packages/webapp/src/util/task.ts | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/packages/webapp/src/util/task.ts b/packages/webapp/src/util/task.ts
index 810dfa1102..e80b83c1b4 100644
--- a/packages/webapp/src/util/task.ts
+++ b/packages/webapp/src/util/task.ts
@@ -137,8 +137,11 @@ type RemainingFormSATProductKeys = keyof Omit<
>;
export const formatSoilAmendmentProductToDBStructure = (
- soilAmendmentTaskProducts: FormSoilAmendmentTaskProduct[],
-): DBSoilAmendmentTaskProduct[] => {
+ soilAmendmentTaskProducts: FormSoilAmendmentTaskProduct[] | undefined,
+): DBSoilAmendmentTaskProduct[] | undefined => {
+ if (!soilAmendmentTaskProducts) {
+ return undefined;
+ }
return soilAmendmentTaskProducts.map((formTaskProduct) => {
const { purposes: purposeIds, other_purpose, is_weight, ...rest } = formTaskProduct;
From 664b3d2d618658842c3df206ba8dd4fcdcd9df80 Mon Sep 17 00:00:00 2001
From: Joyce Yuki <82857964+kathyavini@users.noreply.github.com>
Date: Mon, 22 Jul 2024 13:03:36 -0700
Subject: [PATCH 8/9] LF-4309 Clean up old database soil_amendment_task data at
insert
The patch is now correctly omitting the irrelevant field, so the old data is not overriden, which can trigger the check constraint.
---
.../api/src/models/soilAmendmentTaskModel.js | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/packages/api/src/models/soilAmendmentTaskModel.js b/packages/api/src/models/soilAmendmentTaskModel.js
index 2143cedbe9..c5e5854250 100644
--- a/packages/api/src/models/soilAmendmentTaskModel.js
+++ b/packages/api/src/models/soilAmendmentTaskModel.js
@@ -27,6 +27,25 @@ class SoilAmendmentTaskModel extends Model {
return 'task_id';
}
+ async $beforeUpdate(queryContext) {
+ await super.$beforeUpdate(queryContext);
+
+ const methodKey = await soilAmendmentMethodModel
+ .query(queryContext.transaction)
+ .findById(this.method_id)
+ .select('key')
+ .first();
+
+ if (methodKey !== 'OTHER') {
+ this.other_application_method = null;
+ }
+
+ if (methodKey !== 'FURROW_HOLE') {
+ this.furrow_hole_depth = null;
+ this.furrow_hole_depth_unit = null;
+ }
+ }
+
// Optional JSON schema. This is not the database schema! Nothing is generated
// based on this. This is only used for validation. Whenever a model instance
// is created it is checked against this schema. http://json-schema.org/.
From afe589b936c0482d66e403ba71f4b4104c16f0cd Mon Sep 17 00:00:00 2001
From: Joyce Yuki <82857964+kathyavini@users.noreply.github.com>
Date: Mon, 22 Jul 2024 13:56:30 -0700
Subject: [PATCH 9/9] LF-4309 Fix bug on beforeUpdate cleanup and only run if
method_id supplied
---
.../api/src/models/soilAmendmentTaskModel.js | 24 ++++++++++---------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/packages/api/src/models/soilAmendmentTaskModel.js b/packages/api/src/models/soilAmendmentTaskModel.js
index c5e5854250..b1c43e833b 100644
--- a/packages/api/src/models/soilAmendmentTaskModel.js
+++ b/packages/api/src/models/soilAmendmentTaskModel.js
@@ -30,19 +30,21 @@ class SoilAmendmentTaskModel extends Model {
async $beforeUpdate(queryContext) {
await super.$beforeUpdate(queryContext);
- const methodKey = await soilAmendmentMethodModel
- .query(queryContext.transaction)
- .findById(this.method_id)
- .select('key')
- .first();
+ if (this.method_id) {
+ const { key } = await soilAmendmentMethodModel
+ .query(queryContext.transaction)
+ .findById(this.method_id)
+ .select('key')
+ .first();
- if (methodKey !== 'OTHER') {
- this.other_application_method = null;
- }
+ if (key !== 'OTHER') {
+ this.other_application_method = null;
+ }
- if (methodKey !== 'FURROW_HOLE') {
- this.furrow_hole_depth = null;
- this.furrow_hole_depth_unit = null;
+ if (key !== 'FURROW_HOLE') {
+ this.furrow_hole_depth = null;
+ this.furrow_hole_depth_unit = null;
+ }
}
}