Skip to content

Commit ef7a84e

Browse files
committed
LF-4980 Replace makeFilteredProductsSelector with global selector
1 parent 87c7cfd commit ef7a84e

File tree

3 files changed

+10
-44
lines changed

3 files changed

+10
-44
lines changed

packages/webapp/src/containers/ProductInventory/ProductForm/SoilAmendmentProductForm.tsx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,18 @@
1212
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1313
* GNU General Public License for more details, see <https://www.gnu.org/licenses/>.
1414
*/
15-
import { useMemo } from 'react';
1615
import { shallowEqual, useSelector } from 'react-redux';
1716
import { useTranslation } from 'react-i18next';
1817
import { useGetSoilAmendmentFertiliserTypesQuery } from '../../../store/api/apiSlice';
1918
import PureSoilAmendmentProductForm from '../../../components/ProductInventory/ProductForm/PureSoilAmendmentProductForm';
2019
import { userFarmSelector } from '../../userFarmSlice';
2120
import { certifierSurveySelector } from '../../OrganicCertifierSurvey/slice';
22-
import { makeFilteredProductsSelector } from '../../productSlice';
21+
import { productsForTaskTypeSelector } from '../../productSlice';
2322
import { TASK_TYPES } from '../../Task/constants';
2423
import { FormMode } from '..';
2524
import { FormContentProps } from '.';
2625

27-
const productsSelectorArgs = { type: TASK_TYPES.SOIL_AMENDMENT, includeRemoved: true };
26+
const taskType = { task_translation_key: TASK_TYPES.SOIL_AMENDMENT.toUpperCase() };
2827

2928
export default function SoilAmendmentProductForm({ mode, productId }: FormContentProps) {
3029
const { t } = useTranslation();
@@ -41,11 +40,8 @@ export default function SoilAmendmentProductForm({ mode, productId }: FormConten
4140
label: t(`ADD_PRODUCT.${key}_FERTILISER`),
4241
}));
4342

44-
const productsSelector = useMemo(() => makeFilteredProductsSelector(), []);
45-
const soilAmendmentProducts = useSelector((state) =>
46-
/* @ts-expect-error https://github.com/reduxjs/reselect/issues/550#issuecomment-999701108 */
47-
productsSelector(state, productsSelectorArgs),
48-
);
43+
const products = useSelector(productsForTaskTypeSelector(taskType)) || [];
44+
const soilAmendmentProducts = products.filter((product) => !product.removed);
4945

5046
const isReadOnly = mode === FormMode.READ_ONLY;
5147

packages/webapp/src/containers/Task/TaskDetails/index.jsx

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import PureTaskDetails from '../../../components/Task/PureTaskDetails';
22
import { HookFormPersistProvider } from '../../hooks/useHookFormPersist/HookFormPersistProvider';
3-
import { useEffect, useMemo } from 'react';
3+
import { useEffect } from 'react';
44
import { useLocation, useHistory } from 'react-router-dom';
55
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
66
import { getProducts } from '../saga';
7-
import { makeFilteredProductsSelector } from '../../productSlice';
7+
import { productsForTaskTypeSelector } from '../../productSlice';
88
import { taskTypeSelector } from '../../taskTypeSlice';
99
import { hookFormPersistSelector } from '../../hooks/useHookFormPersist/hookFormPersistSlice';
1010
import { userFarmSelector } from '../../userFarmSlice';
@@ -28,13 +28,9 @@ function TaskDetails() {
2828
const { interested, farm_id } = useSelector(certifierSurveySelector, shallowEqual);
2929
const persistedFormData = useSelector(hookFormPersistSelector);
3030
const selectedTaskType = useSelector(taskTypeSelector(persistedFormData.task_type_id));
31-
const productsSelector = useMemo(() => makeFilteredProductsSelector(), []);
32-
const productsSelectorArgs = useMemo(
33-
() => ({ type: selectedTaskType.task_translation_key?.toLowerCase(), filterByFarm: true }),
34-
[selectedTaskType.task_translation_key],
35-
);
36-
/* @ts-expect-error https://github.com/reduxjs/reselect/issues/550#issuecomment-999701108 */
37-
const products = useSelector((state) => productsSelector(state, productsSelectorArgs));
31+
32+
const products = useSelector(productsForTaskTypeSelector(selectedTaskType));
33+
const productsInInventory = products?.filter((product) => !product.removed);
3834

3935
const managementPlanIds = persistedFormData.managementPlans?.map(
4036
({ management_plan_id }) => management_plan_id,
@@ -71,7 +67,7 @@ function TaskDetails() {
7167
persistedPaths={persistedPaths}
7268
selectedTaskType={selectedTaskType}
7369
system={system}
74-
products={products}
70+
products={productsInInventory}
7571
farm={{ farm_id, country_id, interested }}
7672
managementPlanByLocations={managementPlanByLocations}
7773
wildManagementPlanTiles={showWildCrops && wildManagementPlanTiles}

packages/webapp/src/containers/productSlice.js

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -81,32 +81,6 @@ export const productInventorySelector = createSelector([productsSelector], (prod
8181
return products.filter((product) => !product.removed);
8282
});
8383

84-
// Select products filtered by library/custom, type, farm, and removed status
85-
export const makeFilteredProductsSelector = () =>
86-
createSelector(
87-
[productSelectors.selectAll, loginSelector, (_state, args) => args],
88-
(
89-
products,
90-
{ farm_id },
91-
{
92-
includeLibrary = true,
93-
includeCustom = true,
94-
type = '',
95-
filterByFarm = false,
96-
includeRemoved = false,
97-
},
98-
) => {
99-
return products.filter((product) => {
100-
const matchesIsLibrary = isLibraryProduct(product) ? includeLibrary : includeCustom;
101-
const matchesType = !type || product.type === type;
102-
const matchesFarm = !filterByFarm || product.farm_id === farm_id;
103-
const matchesRemoved = includeRemoved || !product.removed;
104-
105-
return matchesIsLibrary && matchesType && matchesFarm && matchesRemoved;
106-
});
107-
},
108-
);
109-
11084
export const productEntitiesSelector = productSelectors.selectEntities;
11185

11286
export const productSelector = (product_id) => (state) =>

0 commit comments

Comments
 (0)