diff --git a/packages/api/src/controllers/farmAddonController.js b/packages/api/src/controllers/farmAddonController.js index 2110eb0ff4..6615f3535a 100644 --- a/packages/api/src/controllers/farmAddonController.js +++ b/packages/api/src/controllers/farmAddonController.js @@ -17,31 +17,56 @@ import FarmAddonModel from '../models/farmAddonModel.js'; import { getValidEnsembleOrg } from '../util/ensemble.js'; const farmAddonController = { - async addFarmAddon(req, res) { - const { farm_id } = req.headers; - const { addon_partner_id, org_uuid } = req.body; + addFarmAddon() { + return async (req, res) => { + const { farm_id } = req.headers; + const { addon_partner_id, org_uuid } = req.body; - try { - const organisation = await getValidEnsembleOrg(org_uuid); + try { + const organisation = await getValidEnsembleOrg(org_uuid); - if (!organisation) { - return res.status(404).send('Organisation not found'); - } + if (!organisation) { + return res.status(404).send('Organisation not found'); + } - await FarmAddonModel.upsertFarmAddon({ - farm_id, - addon_partner_id, - org_uuid, - org_pk: organisation.pk, - }); + await FarmAddonModel.upsertFarmAddon({ + farm_id, + addon_partner_id, + org_uuid, + org_pk: organisation.pk, + }); - return res.status(200).send(); - } catch (error) { - console.error(error); - return res.status(error.status || 400).json({ - error: error.message || error, - }); - } + return res.status(200).send(); + } catch (error) { + console.error(error); + return res.status(error.status || 400).json({ + error: error.message || error, + }); + } + }; + }, + getFarmAddon() { + return async (req, res) => { + try { + const { farm_id } = req.headers; + const { addon_partner_id } = req.query; + const rows = await FarmAddonModel.query() + .where({ farm_id, addon_partner_id }) + .skipUndefined(); + if (!rows.length) { + return res.sendStatus(404); + } + const result = rows.map(({ addon_partner_id, org_uuid }) => { + return { addon_partner_id, org_uuid }; + }); + return res.status(200).send(result); + } catch (error) { + console.error(error); + return res.status(500).json({ + error, + }); + } + }; }, }; diff --git a/packages/api/src/routes/farmAddonRoute.js b/packages/api/src/routes/farmAddonRoute.js index 0399506c2e..4010d8798e 100644 --- a/packages/api/src/routes/farmAddonRoute.js +++ b/packages/api/src/routes/farmAddonRoute.js @@ -24,7 +24,9 @@ router.post( '/', checkScope(['add:farm_addon']), checkFarmAddon(), - FarmAddonController.addFarmAddon, + FarmAddonController.addFarmAddon(), ); +router.get('/', checkScope(['get:farm_addon']), FarmAddonController.getFarmAddon()); + export default router; diff --git a/packages/webapp/src/routes/index.jsx b/packages/webapp/src/routes/index.jsx index 7df29c0c11..a5183cccfe 100644 --- a/packages/webapp/src/routes/index.jsx +++ b/packages/webapp/src/routes/index.jsx @@ -54,85 +54,87 @@ const Prices = React.lazy(() => import('../containers/Insights/Prices')); const ExpiredTokenScreen = React.lazy(() => import('../containers/ExpiredTokenScreen')); const Map = React.lazy(() => import('../containers/Map')); const MapVideo = React.lazy(() => import('../components/Map/Videos')); -const PostFarmSiteBoundaryForm = React.lazy(() => - import( - '../containers/LocationDetails/AreaDetails/FarmSiteBoundaryDetailForm/PostFarmSiteBoundary' - ), +const PostFarmSiteBoundaryForm = React.lazy( + () => + import( + '../containers/LocationDetails/AreaDetails/FarmSiteBoundaryDetailForm/PostFarmSiteBoundary' + ), ); const FarmSiteBoundaryDetails = React.lazy(() => import('./FarmSiteBoundaryDetailsRoutes')); -const PostFieldForm = React.lazy(() => - import('../containers/LocationDetails/AreaDetails/FieldDetailForm/PostField'), +const PostFieldForm = React.lazy( + () => import('../containers/LocationDetails/AreaDetails/FieldDetailForm/PostField'), ); const FieldDetails = React.lazy(() => import('./FieldDetailsRoutes')); -const PostGardenForm = React.lazy(() => - import('../containers/LocationDetails/AreaDetails/GardenDetailForm/PostGarden'), +const PostGardenForm = React.lazy( + () => import('../containers/LocationDetails/AreaDetails/GardenDetailForm/PostGarden'), ); const GardenDetails = React.lazy(() => import('./GardenDetailsRoutes')); -const PostGateForm = React.lazy(() => - import('../containers/LocationDetails/PointDetails/GateDetailForm/PostGate'), +const PostGateForm = React.lazy( + () => import('../containers/LocationDetails/PointDetails/GateDetailForm/PostGate'), ); const GateDetails = React.lazy(() => import('./GateDetailsRoutes')); -const PostWaterValveForm = React.lazy(() => - import('../containers/LocationDetails/PointDetails/WaterValveDetailForm/PostWaterValve'), +const PostWaterValveForm = React.lazy( + () => import('../containers/LocationDetails/PointDetails/WaterValveDetailForm/PostWaterValve'), ); const WaterValveDetails = React.lazy(() => import('./WaterValveDetailsRoutes')); -const EditSensor = React.lazy(() => - import('../containers/LocationDetails/PointDetails/SensorDetail/EditSensor'), +const EditSensor = React.lazy( + () => import('../containers/LocationDetails/PointDetails/SensorDetail/EditSensor'), ); -const PostBarnForm = React.lazy(() => - import('../containers/LocationDetails/AreaDetails/BarnDetailForm/PostBarn'), +const PostBarnForm = React.lazy( + () => import('../containers/LocationDetails/AreaDetails/BarnDetailForm/PostBarn'), ); const BarnDetails = React.lazy(() => import('./BarnDetailsRoutes')); -const PostNaturalAreaForm = React.lazy(() => - import('../containers/LocationDetails/AreaDetails/NaturalAreaDetailForm/PostNaturalArea'), +const PostNaturalAreaForm = React.lazy( + () => import('../containers/LocationDetails/AreaDetails/NaturalAreaDetailForm/PostNaturalArea'), ); const NaturalAreaDetails = React.lazy(() => import('./NaturalAreaDetailsRoutes')); -const PostSurfaceWaterForm = React.lazy(() => - import('../containers/LocationDetails/AreaDetails/SurfaceWaterDetailForm/PostSurfaceWater'), +const PostSurfaceWaterForm = React.lazy( + () => import('../containers/LocationDetails/AreaDetails/SurfaceWaterDetailForm/PostSurfaceWater'), ); const SurfaceWaterDetails = React.lazy(() => import('./SurfaceWaterDetailsRoutes')); -const PostResidenceForm = React.lazy(() => - import('../containers/LocationDetails/AreaDetails/ResidenceDetailForm/PostResidence'), +const PostResidenceForm = React.lazy( + () => import('../containers/LocationDetails/AreaDetails/ResidenceDetailForm/PostResidence'), ); const ResidenceDetails = React.lazy(() => import('./ResidenceDetailsRoutes')); -const PostCeremonialForm = React.lazy(() => - import('../containers/LocationDetails/AreaDetails/CeremonialAreaDetailForm/PostCeremonialArea'), +const PostCeremonialForm = React.lazy( + () => + import('../containers/LocationDetails/AreaDetails/CeremonialAreaDetailForm/PostCeremonialArea'), ); const CeremonialAreaDetails = React.lazy(() => import('./CeremonialAreaDetailsRoutes')); -const PostGreenhouseForm = React.lazy(() => - import('../containers/LocationDetails/AreaDetails/GreenhouseDetailForm/PostGreenhouse'), +const PostGreenhouseForm = React.lazy( + () => import('../containers/LocationDetails/AreaDetails/GreenhouseDetailForm/PostGreenhouse'), ); const GreenhouseDetails = React.lazy(() => import('./GreenhouseDetailsRoutes')); const CropManagement = React.lazy(() => import('../containers/Crop/CropManagement')); const CropDetail = React.lazy(() => import('../containers/Crop/CropDetail/index')); -const PostFenceForm = React.lazy(() => - import('../containers/LocationDetails/LineDetails/FenceDetailForm/PostFence'), +const PostFenceForm = React.lazy( + () => import('../containers/LocationDetails/LineDetails/FenceDetailForm/PostFence'), ); const FenceDetails = React.lazy(() => import('./FenceDetailsRoutes')); -const PostBufferZoneForm = React.lazy(() => - import('../containers/LocationDetails/LineDetails/BufferZoneDetailForm/PostBufferZone'), +const PostBufferZoneForm = React.lazy( + () => import('../containers/LocationDetails/LineDetails/BufferZoneDetailForm/PostBufferZone'), ); const BufferZoneDetails = React.lazy(() => import('./BufferZoneDetailsRoutes')); -const PostWatercourseForm = React.lazy(() => - import('../containers/LocationDetails/LineDetails/WatercourseDetailForm/PostWatercourse'), +const PostWatercourseForm = React.lazy( + () => import('../containers/LocationDetails/LineDetails/WatercourseDetailForm/PostWatercourse'), ); const WatercourseDetails = React.lazy(() => import('./WatercourseDetailsRoutes')); -const PostSensorForm = React.lazy(() => - import('../containers/LocationDetails/PointDetails/SensorDetail/v2/PostSensor'), +const PostSensorForm = React.lazy( + () => import('../containers/LocationDetails/PointDetails/SensorDetail/v2/PostSensor'), ); const SensorDetails = React.lazy(() => import('./SensorDetailsRoutes')); @@ -142,34 +144,34 @@ const AddCrop = React.lazy(() => import('../containers/AddCropVariety/AddCropVar const EditCrop = React.lazy(() => import('../containers/EditCropVariety')); const ComplianceInfo = React.lazy(() => import('../containers/AddCropVariety/ComplianceInfo')); const AddNewCrop = React.lazy(() => import('../containers/AddNewCrop')); -const PlantingLocation = React.lazy(() => - import('../containers/Crop/AddManagementPlan/PlantingLocation'), +const PlantingLocation = React.lazy( + () => import('../containers/Crop/AddManagementPlan/PlantingLocation'), ); const Transplant = React.lazy(() => import('../containers/Crop/AddManagementPlan/Transplant')); const PlantingDate = React.lazy(() => import('../containers/Crop/AddManagementPlan/PlantingDate')); -const PlantingMethod = React.lazy(() => - import('../containers/Crop/AddManagementPlan/PlantingMethod'), +const PlantingMethod = React.lazy( + () => import('../containers/Crop/AddManagementPlan/PlantingMethod'), ); -const PlantInContainer = React.lazy(() => - import('../containers/Crop/AddManagementPlan/PlantInContainer'), +const PlantInContainer = React.lazy( + () => import('../containers/Crop/AddManagementPlan/PlantInContainer'), ); -const PlantBroadcast = React.lazy(() => - import('../containers/Crop/AddManagementPlan/BroadcastPlan'), +const PlantBroadcast = React.lazy( + () => import('../containers/Crop/AddManagementPlan/BroadcastPlan'), ); const BedPlan = React.lazy(() => import('../containers/Crop/AddManagementPlan/BedPlan/BedPlan')); -const BedPlanGuidance = React.lazy(() => - import('../containers/Crop/AddManagementPlan/BedPlan/BedPlanGuidance'), +const BedPlanGuidance = React.lazy( + () => import('../containers/Crop/AddManagementPlan/BedPlan/BedPlanGuidance'), ); -const ManagementPlanName = React.lazy(() => - import('../containers/Crop/AddManagementPlan/ManagementPlanName'), +const ManagementPlanName = React.lazy( + () => import('../containers/Crop/AddManagementPlan/ManagementPlanName'), ); const RowMethod = React.lazy(() => import('../containers/Crop/AddManagementPlan/RowMethod')); -const RowMethodGuidance = React.lazy(() => - import('../containers/Crop/AddManagementPlan/RowMethod/RowGuidance'), +const RowMethodGuidance = React.lazy( + () => import('../containers/Crop/AddManagementPlan/RowMethod/RowGuidance'), ); -const PlantedAlready = React.lazy(() => - import('../containers/Crop/AddManagementPlan/PlantedAlready'), +const PlantedAlready = React.lazy( + () => import('../containers/Crop/AddManagementPlan/PlantedAlready'), ); const Documents = React.lazy(() => import('../containers/Documents')); @@ -178,60 +180,63 @@ const EditDocument = React.lazy(() => import('../containers/Documents/Edit')); const AddDocument = React.lazy(() => import('../containers/Documents/Add')); const MainDocument = React.lazy(() => import('../containers/Documents/Main')); -const CertificationReportingPeriod = React.lazy(() => - import('../containers/Certifications/ReportingPeriod'), +const CertificationReportingPeriod = React.lazy( + () => import('../containers/Certifications/ReportingPeriod'), ); const CertificationSurvey = React.lazy(() => import('../containers/Certifications/Survey')); -const InterestedOrganic = React.lazy(() => - import('../containers/OrganicCertifierSurvey/InterestedOrganic/UpdateInterestedOrganic'), +const InterestedOrganic = React.lazy( + () => import('../containers/OrganicCertifierSurvey/InterestedOrganic/UpdateInterestedOrganic'), ); -const CertificationSelection = React.lazy(() => - import( - '../containers/OrganicCertifierSurvey/CertificationSelection/UpdateCertificationSelection' - ), +const CertificationSelection = React.lazy( + () => + import( + '../containers/OrganicCertifierSurvey/CertificationSelection/UpdateCertificationSelection' + ), ); -const CertifierSelectionMenu = React.lazy(() => - import( - '../containers/OrganicCertifierSurvey/CertifierSelectionMenu/UpdateCertifierSelectionMenu' - ), +const CertifierSelectionMenu = React.lazy( + () => + import( + '../containers/OrganicCertifierSurvey/CertifierSelectionMenu/UpdateCertifierSelectionMenu' + ), ); -const SetCertificationSummary = React.lazy(() => - import( - '../containers/OrganicCertifierSurvey/SetCertificationSummary/UpdateSetCertificationSummary' - ), +const SetCertificationSummary = React.lazy( + () => + import( + '../containers/OrganicCertifierSurvey/SetCertificationSummary/UpdateSetCertificationSummary' + ), ); -const RequestCertifier = React.lazy(() => - import('../containers/OrganicCertifierSurvey/RequestCertifier/UpdateRequestCertifier'), +const RequestCertifier = React.lazy( + () => import('../containers/OrganicCertifierSurvey/RequestCertifier/UpdateRequestCertifier'), ); -const ViewCertification = React.lazy(() => - import('../containers/OrganicCertifierSurvey/ViewCertification/ViewCertification'), +const ViewCertification = React.lazy( + () => import('../containers/OrganicCertifierSurvey/ViewCertification/ViewCertification'), ); const RenderSurvey = React.lazy(() => import('../containers/RenderSurvey/RenderSurvey')); const ExportDownload = React.lazy(() => import('../containers/ExportDownload')); -const ManagementTasks = React.lazy(() => - import('../containers/Crop/ManagementDetail/ManagementTasks'), +const ManagementTasks = React.lazy( + () => import('../containers/Crop/ManagementDetail/ManagementTasks'), ); -const ManagementDetails = React.lazy(() => - import('../containers/Crop/ManagementDetail/ManagementDetails'), +const ManagementDetails = React.lazy( + () => import('../containers/Crop/ManagementDetail/ManagementDetails'), ); -const EditManagementDetails = React.lazy(() => - import('../containers/Crop/ManagementDetail/EditManagementDetails'), +const EditManagementDetails = React.lazy( + () => import('../containers/Crop/ManagementDetail/EditManagementDetails'), ); -const CompleteManagementPlan = React.lazy(() => - import('../containers/Crop/CompleteManagementPlan/CompleteManagementPlan'), +const CompleteManagementPlan = React.lazy( + () => import('../containers/Crop/CompleteManagementPlan/CompleteManagementPlan'), ); -const AbandonManagementPlan = React.lazy(() => - import('../containers/Crop/CompleteManagementPlan/AbandonManagementPlan'), +const AbandonManagementPlan = React.lazy( + () => import('../containers/Crop/CompleteManagementPlan/AbandonManagementPlan'), ); const RepeatCropPlan = React.lazy(() => import('../containers/Crop/RepeatCropPlan')); -const RepeatCropPlanConfirmation = React.lazy(() => - import('../containers/Crop/RepeatCropPlan/Confirmation'), +const RepeatCropPlanConfirmation = React.lazy( + () => import('../containers/Crop/RepeatCropPlan/Confirmation'), ); const TaskAssignment = React.lazy(() => import('../containers/Task/TaskAssignment')); @@ -245,41 +250,41 @@ const Tasks = React.lazy(() => import('../containers/Task')); const ManageCustomTasks = React.lazy(() => import('../containers/Task/ManageCustomTasks')); const AddCustomTask = React.lazy(() => import('../containers/Task/AddCustomTask')); const TaskComplete = React.lazy(() => import('../containers/Task/TaskComplete')); -const HarvestCompleteQuantity = React.lazy(() => - import('../containers/Task/TaskComplete/HarvestComplete/Quantity'), +const HarvestCompleteQuantity = React.lazy( + () => import('../containers/Task/TaskComplete/HarvestComplete/Quantity'), ); -const HarvestUses = React.lazy(() => - import('../containers/Task/TaskComplete/HarvestComplete/HarvestUses'), +const HarvestUses = React.lazy( + () => import('../containers/Task/TaskComplete/HarvestComplete/HarvestUses'), ); const TaskCompleteStepOne = React.lazy(() => import('../containers/Task/TaskComplete/StepOne')); const TaskReadOnly = React.lazy(() => import('../containers/Task/TaskReadOnly')); const EditCustomTask = React.lazy(() => import('../containers/Task/EditCustomTask')); const TaskAbandon = React.lazy(() => import('../containers/Task/TaskAbandon')); const EditCustomTaskUpdate = React.lazy(() => import('../containers/Task/EditCustomTaskUpdate')); -const TaskTransplantMethod = React.lazy(() => - import('../containers/Task/TaskTransplantMethod/TaskTransplantMethod'), +const TaskTransplantMethod = React.lazy( + () => import('../containers/Task/TaskTransplantMethod/TaskTransplantMethod'), ); -const TaskBedMethod = React.lazy(() => - import('../containers/Task/TaskTransplantMethod/TaskBedMethod'), +const TaskBedMethod = React.lazy( + () => import('../containers/Task/TaskTransplantMethod/TaskBedMethod'), ); -const TaskBedGuidance = React.lazy(() => - import('../containers/Task/TaskTransplantMethod/TaskBedGuidance'), +const TaskBedGuidance = React.lazy( + () => import('../containers/Task/TaskTransplantMethod/TaskBedGuidance'), ); -const TaskRowMethod = React.lazy(() => - import('../containers/Task/TaskTransplantMethod/TaskRowMethod'), +const TaskRowMethod = React.lazy( + () => import('../containers/Task/TaskTransplantMethod/TaskRowMethod'), ); -const TaskRowGuidance = React.lazy(() => - import('../containers/Task/TaskTransplantMethod/TaskRowGuidance'), +const TaskRowGuidance = React.lazy( + () => import('../containers/Task/TaskTransplantMethod/TaskRowGuidance'), ); -const TaskContainerMethod = React.lazy(() => - import('../containers/Task/TaskTransplantMethod/TaskContainerMethod'), +const TaskContainerMethod = React.lazy( + () => import('../containers/Task/TaskTransplantMethod/TaskContainerMethod'), ); const Notification = React.lazy(() => import('../containers/Notification')); -const NotificationReadOnly = React.lazy(() => - import('../containers/Notification/NotificationReadOnly'), +const NotificationReadOnly = React.lazy( + () => import('../containers/Notification/NotificationReadOnly'), ); -const UnknownRecord = React.lazy(() => - import('../containers/ErrorHandler/UnknownRecord/UnknownRecord'), +const UnknownRecord = React.lazy( + () => import('../containers/ErrorHandler/UnknownRecord/UnknownRecord'), ); const Routes = ({ isCompactSideMenu, isFeedbackSurveyOpen, setFeedbackSurveyOpen }) => {