From c59e3e6bcceb5b9019e142d4fc96ae1a7696bf7a Mon Sep 17 00:00:00 2001 From: Limber Mamani Vallejos Date: Fri, 17 May 2024 01:02:51 -0400 Subject: [PATCH 01/27] TM-755 add total fields to trees planted and seedlings --- .../ResourceTabs/InformationTab/index.tsx | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/admin/components/ResourceTabs/InformationTab/index.tsx b/src/admin/components/ResourceTabs/InformationTab/index.tsx index 69cf3c149..766d88808 100644 --- a/src/admin/components/ResourceTabs/InformationTab/index.tsx +++ b/src/admin/components/ResourceTabs/InformationTab/index.tsx @@ -8,7 +8,11 @@ import { MonitoringPartnersTable } from "@/admin/components/ResourceTabs/Informa import SeedingsTable from "@/admin/components/Tables/SeedingsTable"; import { setDefaultConditionalFieldsAnswers } from "@/admin/utils/forms"; import List from "@/components/extensive/List/List"; -import { GetV2FormsENTITYUUIDResponse, useGetV2FormsENTITYUUID } from "@/generated/apiComponents"; +import { + GetV2FormsENTITYUUIDResponse, + useGetV2FormsENTITYUUID, + useGetV2SeedingsENTITYUUID +} from "@/generated/apiComponents"; import { getCustomFormSteps, normalizedFormDefaultValue } from "@/helpers/customForms"; import { pluralEntityNameToSingular } from "@/helpers/entity"; import { EntityName } from "@/types/common"; @@ -53,6 +57,14 @@ const InformationTab: FC = props => { } }); + const { data: seedlings } = useGetV2SeedingsENTITYUUID({ + pathParams: { + uuid: record?.uuid, + entity: resource.replace("Report", "-report") + } + }); + + const totalSeedlings = seedlings?.data?.reduce((acc, curr) => acc + (curr?.amount ?? 0), 0); const t = useT(); const isLoading = ctxLoading || queryLoading; @@ -114,10 +126,30 @@ const InformationTab: FC = props => { + + + + Total Tree Species + + {record?.total_trees_planted_count} + + + + + + Total Seeds Planted + + {totalSeedlings} + + From 3f5346251a8e55e8da30e89536f725887b581093 Mon Sep 17 00:00:00 2001 From: Limber Mamani Vallejos Date: Tue, 21 May 2024 13:53:40 -0400 Subject: [PATCH 02/27] change title to totals --- src/admin/components/ResourceTabs/InformationTab/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/admin/components/ResourceTabs/InformationTab/index.tsx b/src/admin/components/ResourceTabs/InformationTab/index.tsx index 766d88808..f9fe4786d 100644 --- a/src/admin/components/ResourceTabs/InformationTab/index.tsx +++ b/src/admin/components/ResourceTabs/InformationTab/index.tsx @@ -133,7 +133,7 @@ const InformationTab: FC = props => { > - Total Tree Species + Total Trees Planted {record?.total_trees_planted_count} From 464d7c2a494622e2ca297de39da986dac08e1922 Mon Sep 17 00:00:00 2001 From: Limber Mamani Vallejos Date: Wed, 22 May 2024 10:41:40 -0400 Subject: [PATCH 03/27] feat: TM-936 add hbf option --- src/hooks/useFramework.ts | 3 ++- src/pages/project/[uuid]/index.page.tsx | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/hooks/useFramework.ts b/src/hooks/useFramework.ts index 243ad210d..2a792b3df 100644 --- a/src/hooks/useFramework.ts +++ b/src/hooks/useFramework.ts @@ -6,6 +6,7 @@ export const useFramework = (entity: any) => { return { isPPC: entity.framework_key === "ppc", - isTerrafund: entity.framework_key !== "ppc" + isTerrafund: entity.framework_key !== "ppc", + isHBF: entity.framework_key === "hbf" }; }; diff --git a/src/pages/project/[uuid]/index.page.tsx b/src/pages/project/[uuid]/index.page.tsx index f1c1880c2..7f54e5391 100644 --- a/src/pages/project/[uuid]/index.page.tsx +++ b/src/pages/project/[uuid]/index.page.tsx @@ -43,7 +43,7 @@ const ProjectDetailPage = () => { }); const project = (data?.data || {}) as any; - const { isPPC, isTerrafund } = useFramework(project); + const { isPPC, isTerrafund, isHBF } = useFramework(project); const { handleExport } = useGetExportEntityHandler("projects", project.uuid, project.name); const { handleEdit } = useGetEditEntityHandler({ @@ -106,7 +106,13 @@ const ProjectDetailPage = () => { title={project.name} subtitles={[ `${t("Organisation")}: ${project.organisation?.name}`, - isPPC ? t("Priceless Planet Coalition") : isTerrafund ? t("TerraFund") : reportingFramework.name + isPPC + ? t("Priceless Planet Coalition") + : isTerrafund + ? t("TerraFund") + : isHBF + ? "HBF" + : reportingFramework.name ]} hasBackButton={false} > From 16164dc64036bf7ce960d8cef258d36ce8251fb2 Mon Sep 17 00:00:00 2001 From: Limber Mamani Vallejos Date: Wed, 22 May 2024 11:57:05 -0400 Subject: [PATCH 04/27] feat: TM-936 change logic to useFramework --- src/hooks/useFramework.ts | 4 ++-- src/pages/project/[uuid]/index.page.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hooks/useFramework.ts b/src/hooks/useFramework.ts index 2a792b3df..e37705093 100644 --- a/src/hooks/useFramework.ts +++ b/src/hooks/useFramework.ts @@ -6,7 +6,7 @@ export const useFramework = (entity: any) => { return { isPPC: entity.framework_key === "ppc", - isTerrafund: entity.framework_key !== "ppc", - isHBF: entity.framework_key === "hbf" + isHBF: entity.framework_key === "hbf", + isTerrafund: entity.framework_key !== "ppc" && entity.framework_key !== "hbf" }; }; diff --git a/src/pages/project/[uuid]/index.page.tsx b/src/pages/project/[uuid]/index.page.tsx index 7f54e5391..4b9d7bce0 100644 --- a/src/pages/project/[uuid]/index.page.tsx +++ b/src/pages/project/[uuid]/index.page.tsx @@ -108,10 +108,10 @@ const ProjectDetailPage = () => { `${t("Organisation")}: ${project.organisation?.name}`, isPPC ? t("Priceless Planet Coalition") - : isTerrafund - ? t("TerraFund") : isHBF ? "HBF" + : isTerrafund + ? t("TerraFund") : reportingFramework.name ]} hasBackButton={false} From d0498cecabeaad62c790bb5a37efd5b9552a2134 Mon Sep 17 00:00:00 2001 From: Limber Mamani Vallejos Date: Thu, 23 May 2024 13:30:56 -0400 Subject: [PATCH 05/27] feat: TM-936 addhbf option to site and nursery landing pages --- src/pages/nursery/[uuid]/index.page.tsx | 6 +++++- src/pages/site/[uuid]/index.page.tsx | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/pages/nursery/[uuid]/index.page.tsx b/src/pages/nursery/[uuid]/index.page.tsx index 5d2091087..2560abd40 100644 --- a/src/pages/nursery/[uuid]/index.page.tsx +++ b/src/pages/nursery/[uuid]/index.page.tsx @@ -93,7 +93,11 @@ const NurseryDetailPage = () => { title={nursery.name} subtitles={[ `${t("Project name")}: ${nursery.project?.name}`, - nursery.framework_key === "ppc" ? t("Priceless Planet Coalition") : t("TerraFund") + nursery.framework_key === "ppc" + ? t("Priceless Planet Coalition") + : nursery.framework_key === "hbf" + ? "HBF" + : t("TerraFund") ]} hasBackButton={false} > diff --git a/src/pages/site/[uuid]/index.page.tsx b/src/pages/site/[uuid]/index.page.tsx index 33014a8a4..f6904f40c 100644 --- a/src/pages/site/[uuid]/index.page.tsx +++ b/src/pages/site/[uuid]/index.page.tsx @@ -46,7 +46,7 @@ const SiteDetailPage = () => { }); const site = (data?.data || {}) as any; - const { isPPC } = useFramework(site); + const { isPPC, isHBF } = useFramework(site); const siteStatus = getActionCardStatusMapper(t)[site.status]?.status; const { handleExport } = useGetExportEntityHandler("sites", site.uuid, site.name); const { handleEdit } = useGetEditEntityHandler({ @@ -81,7 +81,7 @@ const SiteDetailPage = () => { const subtitles = [ `${t("Organisation")}: ${site.organisation?.name}`, - isPPC ? t("Priceless Planet Coalition") : t("TerraFund") + isPPC ? t("Priceless Planet Coalition") : isHBF ? "HBF" : t("TerraFund") ]; if (isPPC) { subtitles.push(t("Site ID: {id}", { id: site.ppc_external_id })); From ac0316f027a3f478823590aabce3022c1228e0f5 Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Thu, 23 May 2024 11:13:01 -0700 Subject: [PATCH 06/27] [TM-786] Clear up some warnings in modal tests. --- src/context/modal.provider.test.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/context/modal.provider.test.tsx b/src/context/modal.provider.test.tsx index 95354fc2f..6ca8538a1 100644 --- a/src/context/modal.provider.test.tsx +++ b/src/context/modal.provider.test.tsx @@ -1,4 +1,5 @@ import { renderHook } from "@testing-library/react"; +import { act } from "react-dom/test-utils"; import { wait } from "@/utils/test-utils"; @@ -12,7 +13,7 @@ describe("Modal context provider", () => { wrapper: props => {props.children} }); - result.current.openModal(Modal); + act(() => result.current.openModal(Modal)); await wait(200); expect(result.current.modalOpen).toEqual(true); @@ -24,10 +25,10 @@ describe("Modal context provider", () => { wrapper: props => {props.children} }); - result.current.openModal(Modal); + act(() => result.current.openModal(Modal)); await wait(200); - result.current.closeModal(); + act(() => result.current.closeModal()); await wait(200); expect(result.current.modalOpen).toEqual(false); @@ -38,7 +39,7 @@ describe("Modal context provider", () => { wrapper: props => {props.children} }); - result.current.setModalContent(Modal); + act(() => result.current.setModalContent(Modal)); await wait(200); expect(result.current.modalContent).toEqual(Modal); From 4cd861f2d98b353f75ec14f072d2ebca39f78327 Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Thu, 23 May 2024 11:15:49 -0700 Subject: [PATCH 07/27] [TM-786] Test against staging --- .jest/setEnvVars.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.jest/setEnvVars.js b/.jest/setEnvVars.js index f148eb1be..8d2b37bde 100644 --- a/.jest/setEnvVars.js +++ b/.jest/setEnvVars.js @@ -1,2 +1,2 @@ process.env.NODE_ENV = "test"; -process.env.NEXT_PUBLIC_API_BASE_URL = "https://test.wrirestorationmarketplace.cubeapis.com"; +process.env.NEXT_PUBLIC_API_BASE_URL = "https://new-wri-staging.wri-restoration-marketplace-api.com"; From 50612369ceabbdb94734b8f7c9b619aac3c808cb Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Thu, 23 May 2024 11:20:48 -0700 Subject: [PATCH 08/27] [TM-786] Regenerate out of date snapshots --- .../__snapshots__/landTenure.test.ts.snap | 12 +++---- .../restorationInterventionTypes.test.ts.snap | 18 +++++----- .../options/__snapshots__/status.test.ts.snap | 4 --- .../sustainableDevelopmentGoals.test.ts.snap | 34 +++++++++---------- 4 files changed, 32 insertions(+), 36 deletions(-) diff --git a/src/constants/options/__snapshots__/landTenure.test.ts.snap b/src/constants/options/__snapshots__/landTenure.test.ts.snap index 9b813c2d1..b55686087 100644 --- a/src/constants/options/__snapshots__/landTenure.test.ts.snap +++ b/src/constants/options/__snapshots__/landTenure.test.ts.snap @@ -4,42 +4,42 @@ exports[`snapShot test getLandTenureOptions 1`] = ` [ { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/land-tenures/public.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/land-tenures/public.png", }, "title": "Public", "value": "public", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/land-tenures/private.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/land-tenures/private.png", }, "title": "Private", "value": "private", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/land-tenures/indigenous.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/land-tenures/indigenous.png", }, "title": "Indigenous", "value": "indigenous", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/land-tenures/communal.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/land-tenures/communal.png", }, "title": "Communal", "value": "communal", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/land-tenures/national-protected-area.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/land-tenures/national-protected-area.png", }, "title": "National Protected Area", "value": "national-protected-area", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/land-tenures/other.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/land-tenures/other.png", }, "title": "Other", "value": "other", diff --git a/src/constants/options/__snapshots__/restorationInterventionTypes.test.ts.snap b/src/constants/options/__snapshots__/restorationInterventionTypes.test.ts.snap index e72ebdcc9..6fce06118 100644 --- a/src/constants/options/__snapshots__/restorationInterventionTypes.test.ts.snap +++ b/src/constants/options/__snapshots__/restorationInterventionTypes.test.ts.snap @@ -4,63 +4,63 @@ exports[`snapShot test getRestorationInterventionTypeOptions 1`] = ` [ { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/restoration-methods/agroforestry@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/restoration-methods/agroforestry@2x.png", }, "title": "Agroforestry", "value": "agroforestry", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/restoration-methods/applied_nucleation_tree_island@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/restoration-methods/applied_nucleation_tree_island@2x.png", }, "title": "Applied Nucleation", "value": "applied-nucleation", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/restoration-methods/assisted_natural@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/restoration-methods/assisted_natural@2x.png", }, "title": "Assisted Natural Regeneration", "value": "assisted-natural-regeneration", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/restoration-methods/direct_seeding@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/restoration-methods/direct_seeding@2x.png", }, "title": "Direct Seeding", "value": "direct-seeding", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/restoration-methods/enrichment_planting@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/restoration-methods/enrichment_planting@2x.png", }, "title": "Enrichment Planting", "value": "enrichment-planting", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/restoration-methods/mangrove@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/restoration-methods/mangrove@2x.png", }, "title": "Mangrove Restoration", "value": "mangrove-restoration", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/restoration-methods/reforestation@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/restoration-methods/reforestation@2x.png", }, "title": "Reforestation", "value": "reforestation", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/restoration-methods/riparian@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/restoration-methods/riparian@2x.png", }, "title": "Riparian Restoration", "value": "riparian-restoration", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/restoration-methods/silvopasture@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/restoration-methods/silvopasture@2x.png", }, "title": "Silvopasture", "value": "silvopasture", diff --git a/src/constants/options/__snapshots__/status.test.ts.snap b/src/constants/options/__snapshots__/status.test.ts.snap index 47df3e24e..af9d78dc5 100644 --- a/src/constants/options/__snapshots__/status.test.ts.snap +++ b/src/constants/options/__snapshots__/status.test.ts.snap @@ -6,10 +6,6 @@ exports[`snapShot getStatusOptions 1`] = ` "title": "Draft", "value": "started", }, - { - "title": "Rejected", - "value": "rejected", - }, { "title": "Approved", "value": "approved", diff --git a/src/constants/options/__snapshots__/sustainableDevelopmentGoals.test.ts.snap b/src/constants/options/__snapshots__/sustainableDevelopmentGoals.test.ts.snap index 73d313f82..4b737eee6 100644 --- a/src/constants/options/__snapshots__/sustainableDevelopmentGoals.test.ts.snap +++ b/src/constants/options/__snapshots__/sustainableDevelopmentGoals.test.ts.snap @@ -4,119 +4,119 @@ exports[`snapShot test sustainableDevelopmentGoalsOptions 1`] = ` [ { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/no_poverty@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/no_poverty@2x.png", }, "title": "No Poverty", "value": "no-poverty", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/zero_hunger@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/zero_hunger@2x.png", }, "title": "Zero Hunger", "value": "zero-hunger", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/good-health-and-well-being@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/good-health-and-well-being@2x.png", }, "title": "Good Health and Well-being", "value": "good-health-and-well-being", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/quality-education@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/quality-education@2x.png", }, "title": "Quality Education", "value": "quality-education", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/gender-equality@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/gender-equality@2x.png", }, "title": "Gender Equality", "value": "gender-equality", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/clean-water-and-sanitation@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/clean-water-and-sanitation@2x.png", }, "title": "Clean Water and Sanitation", "value": "clean-water-and-sanitation", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/affordable-and-clean-energy@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/affordable-and-clean-energy@2x.png", }, "title": "Affordable and Clean Energy", "value": "affordable-and-clean-energy", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/decent-work-and-economic-growth@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/decent-work-and-economic-growth@2x.png", }, "title": "Decent Work and Economic Growth", "value": "decent-work-and-economic-growth", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/industry-innovation-and-infrastructure@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/industry-innovation-and-infrastructure@2x.png", }, "title": "Industry, Innovation, and Infrastructure", "value": "industry-innovation-and-infrastructure", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/reduced-inequalities@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/reduced-inequalities@2x.png", }, "title": "Reduced Inequalities", "value": "reduced-inequalities", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/sustainable-cities-and-communities@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/sustainable-cities-and-communities@2x.png", }, "title": "Sustainable Cities and Communities", "value": "sustainable-cities-and-communities", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/responsible-consumption-and-production@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/responsible-consumption-and-production@2x.png", }, "title": "Responsible Consumption and Production", "value": "responsible-consumption-and-production", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/climate-action@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/climate-action@2x.png", }, "title": "Climate Action", "value": "climate-action", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/life-below-water@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/life-below-water@2x.png", }, "title": "Life Below Water", "value": "life-below-water", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/life-on-land@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/life-on-land@2x.png", }, "title": "Life on Land", "value": "life-on-land", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/peace-justice-and-strong-institutions@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/peace-justice-and-strong-institutions@2x.png", }, "title": "Peace, Justice, and Strong Institutions", "value": "peace-justice-and-strong-institutions", }, { "meta": { - "image_url": "https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/partnerships-for-the-goals@2x.png", + "image_url": "https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/partnerships-for-the-goals@2x.png", }, "title": "Partnerships for the Goals", "value": "partnerships-for-the-goals", From 4e40da04f04c2315092925b6d0047790e224b9b4 Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Thu, 23 May 2024 11:23:11 -0700 Subject: [PATCH 09/27] [TM-786] Update hook tests to match old code changes. --- src/hooks/useGetReportingWindow.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hooks/useGetReportingWindow.test.ts b/src/hooks/useGetReportingWindow.test.ts index 14386e83f..fc7bd1ebf 100644 --- a/src/hooks/useGetReportingWindow.test.ts +++ b/src/hooks/useGetReportingWindow.test.ts @@ -11,7 +11,7 @@ describe("Test useGetReportingWindow hook", () => { const { getReportingWindow } = useGetReportingWindow(); return getReportingWindow(due_date, "bi-annually"); }); - expect(result.current).toBe("November - April 2023"); + expect(result.current).toBe("October - March 2023"); }); test("Test `quarterly` window", () => { @@ -20,6 +20,6 @@ describe("Test useGetReportingWindow hook", () => { const { getReportingWindow } = useGetReportingWindow(); return getReportingWindow(due_date, "quarterly"); }); - expect(result.current).toBe("February - April 2023"); + expect(result.current).toBe("January - March 2023"); }); }); From 5c3c02dca132548b395e98b1a7408dac04d75436 Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Thu, 23 May 2024 11:27:11 -0700 Subject: [PATCH 10/27] [TM-786] Add storyshots for the workday collapse grid storybook --- .../WorkdayCollapseGrid.stories.storyshot | 187 ++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 src/components/extensive/WorkdayCollapseGrid/__snapshots__/WorkdayCollapseGrid.stories.storyshot diff --git a/src/components/extensive/WorkdayCollapseGrid/__snapshots__/WorkdayCollapseGrid.stories.storyshot b/src/components/extensive/WorkdayCollapseGrid/__snapshots__/WorkdayCollapseGrid.stories.storyshot new file mode 100644 index 000000000..ea26ceea7 --- /dev/null +++ b/src/components/extensive/WorkdayCollapseGrid/__snapshots__/WorkdayCollapseGrid.stories.storyshot @@ -0,0 +1,187 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Storyshots Components/Extensive/WorkdayCollapse Complete Green 1`] = ` +
+
+ +
+
+`; + +exports[`Storyshots Components/Extensive/WorkdayCollapse Default 1`] = ` +
+
+ +
+
+`; + +exports[`Storyshots Components/Extensive/WorkdayCollapse In Progress Green 1`] = ` +
+
+ +
+
+`; + +exports[`Storyshots Components/Extensive/WorkdayCollapse Not Started Green 1`] = ` +
+
+ +
+
+`; + +exports[`Storyshots Components/Extensive/WorkdayCollapse Variant Narrow 1`] = ` +
+
+ +
+
+`; From 12a3e4a31e7dbc4932274cd9a3da0339bb4f5a04 Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Thu, 23 May 2024 13:01:24 -0700 Subject: [PATCH 11/27] [TM-786] Regenerate storyshots --- .../FundingCard.stories.storyshot | 8 +- .../ImageGallery.stories.storyshot | 301 ++++++++++++++++-- .../BooleanInput.stories.storyshot | 2 + .../ConditionalInput.stories.tsx | 3 +- .../ConditionalInput.stories.storyshot | 2 + .../__snapshots__/Dropdown.stories.storyshot | 32 ++ .../LanguagesDropdown.stories.storyshot | 16 + .../RadioGroup.stories.storyshot | 2 + .../AlternatingSection.stories.storyshot | 4 +- .../SelectImageList.stories.storyshot | 20 +- .../__snapshots__/Table.stories.storyshot | 145 ++++++++- .../ApplicationsCard.stories.storyshot | 38 +-- .../PerPageSelector.stories.storyshot | 11 +- .../MainLayout.stories.storyshot | 59 +++- .../__snapshots__/Navbar.stories.storyshot | 118 ++++++- .../useGetCustomFormSteps.stories.storyshot | 39 ++- 16 files changed, 731 insertions(+), 69 deletions(-) diff --git a/src/components/elements/Cards/FundingCard/__snapshots__/FundingCard.stories.storyshot b/src/components/elements/Cards/FundingCard/__snapshots__/FundingCard.stories.storyshot index d64d5ab9f..5ea8b0618 100644 --- a/src/components/elements/Cards/FundingCard/__snapshots__/FundingCard.stories.storyshot +++ b/src/components/elements/Cards/FundingCard/__snapshots__/FundingCard.stories.storyshot @@ -41,7 +41,7 @@ exports[`Storyshots Components/Elements/Cards/FundingCard Default 1`] = ` Location:

London, United Kingdom @@ -54,10 +54,10 @@ exports[`Storyshots Components/Elements/Cards/FundingCard Default 1`] = ` The funding application is designed for restoration projects in Africa. This application provides an opportunity for project developers to seek financial support for their restoration initiatives across the African continent.

@@ -69,6 +77,14 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = `
+ @@ -144,11 +178,29 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = ` onMouseEnter={[Function]} onTouchStart={[Function]} target="_blank" - /> + > +
+
@@ -209,11 +261,29 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = ` onMouseEnter={[Function]} onTouchStart={[Function]} target="_blank" - /> + > +
+
@@ -264,6 +334,14 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = `
+
@@ -274,11 +352,29 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = ` onMouseEnter={[Function]} onTouchStart={[Function]} target="_blank" - /> + > +
+
@@ -339,11 +435,29 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = ` onMouseEnter={[Function]} onTouchStart={[Function]} target="_blank" - /> + > +
+
@@ -394,6 +508,14 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = `
+
@@ -404,11 +526,29 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = ` onMouseEnter={[Function]} onTouchStart={[Function]} target="_blank" - /> + > +
+
@@ -469,11 +609,29 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = ` onMouseEnter={[Function]} onTouchStart={[Function]} target="_blank" - /> + > +
+
@@ -534,11 +692,29 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = ` onMouseEnter={[Function]} onTouchStart={[Function]} target="_blank" - /> + > +
+
@@ -589,6 +765,14 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = `
+
@@ -599,11 +783,29 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = ` onMouseEnter={[Function]} onTouchStart={[Function]} target="_blank" - /> + > +
+
@@ -654,6 +856,14 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = `
+
@@ -664,11 +874,29 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = ` onMouseEnter={[Function]} onTouchStart={[Function]} target="_blank" - /> + > +
+
@@ -723,7 +951,16 @@ exports[`Storyshots Components/Elements/ImageGallery Default 1`] = `
+ > +
+

+ > +

+

+ > +

+
diff --git a/src/components/elements/Inputs/BooleanInput/__snapshots__/BooleanInput.stories.storyshot b/src/components/elements/Inputs/BooleanInput/__snapshots__/BooleanInput.stories.storyshot index 7cfac736f..dfc1cdbb4 100644 --- a/src/components/elements/Inputs/BooleanInput/__snapshots__/BooleanInput.stories.storyshot +++ b/src/components/elements/Inputs/BooleanInput/__snapshots__/BooleanInput.stories.storyshot @@ -53,6 +53,7 @@ exports[`Storyshots Components/Elements/Inputs/BooleanInput Default 1`] = ` className="flex flex-row-reverse items-center justify-end gap-3 " id=":re:" label="Yes" + onChange={[Function]} type="radio" /> @@ -86,6 +87,7 @@ exports[`Storyshots Components/Elements/Inputs/BooleanInput Default 1`] = ` className="flex flex-row-reverse items-center justify-end gap-3 " id=":rg:" label="No" + onChange={[Function]} type="radio" /> diff --git a/src/components/elements/Inputs/ConditionalInput/ConditionalInput.stories.tsx b/src/components/elements/Inputs/ConditionalInput/ConditionalInput.stories.tsx index 1e9d57f16..c5e99b25d 100644 --- a/src/components/elements/Inputs/ConditionalInput/ConditionalInput.stories.tsx +++ b/src/components/elements/Inputs/ConditionalInput/ConditionalInput.stories.tsx @@ -16,7 +16,8 @@ type Story = StoryObj; export const Default: Story = { render: args => { const formHook = useForm(); - return ; + const onChangeCapture = () => {}; + return ; }, args: { name: "conditional-field", diff --git a/src/components/elements/Inputs/ConditionalInput/__snapshots__/ConditionalInput.stories.storyshot b/src/components/elements/Inputs/ConditionalInput/__snapshots__/ConditionalInput.stories.storyshot index b8b201302..aa443fce1 100644 --- a/src/components/elements/Inputs/ConditionalInput/__snapshots__/ConditionalInput.stories.storyshot +++ b/src/components/elements/Inputs/ConditionalInput/__snapshots__/ConditionalInput.stories.storyshot @@ -54,6 +54,7 @@ Array [ className="flex flex-row-reverse items-center justify-end gap-3 " id=":rl:" label="Yes" + onChange={[Function]} type="radio" /> @@ -87,6 +88,7 @@ Array [ className="flex flex-row-reverse items-center justify-end gap-3 " id=":rn:" label="No" + onChange={[Function]} type="radio" /> diff --git a/src/components/elements/Inputs/Dropdown/__snapshots__/Dropdown.stories.storyshot b/src/components/elements/Inputs/Dropdown/__snapshots__/Dropdown.stories.storyshot index 7afb98a12..48ed83dc6 100644 --- a/src/components/elements/Inputs/Dropdown/__snapshots__/Dropdown.stories.storyshot +++ b/src/components/elements/Inputs/Dropdown/__snapshots__/Dropdown.stories.storyshot @@ -42,6 +42,14 @@ exports[`Storyshots Components/Elements/Inputs/Dropdown Multi Select 1`] = ` > placeholder +
@@ -89,6 +97,14 @@ exports[`Storyshots Components/Elements/Inputs/Dropdown Multi Select With Other > placeholder +
@@ -136,6 +152,14 @@ exports[`Storyshots Components/Elements/Inputs/Dropdown Single Select 1`] = ` > placeholder +
@@ -183,6 +207,14 @@ exports[`Storyshots Components/Elements/Inputs/Dropdown Single Select With Other > placeholder +
diff --git a/src/components/elements/Inputs/LanguageDropdown/__snapshots__/LanguagesDropdown.stories.storyshot b/src/components/elements/Inputs/LanguageDropdown/__snapshots__/LanguagesDropdown.stories.storyshot index 62b79263b..aaa73a5c6 100644 --- a/src/components/elements/Inputs/LanguageDropdown/__snapshots__/LanguagesDropdown.stories.storyshot +++ b/src/components/elements/Inputs/LanguageDropdown/__snapshots__/LanguagesDropdown.stories.storyshot @@ -19,11 +19,27 @@ exports[`Storyshots Components/Elements/Inputs/LanguagesDropdown Default 1`] = ` onMouseDown={[Function]} type="button" > +
English +
diff --git a/src/components/elements/Inputs/RadioGroup/__snapshots__/RadioGroup.stories.storyshot b/src/components/elements/Inputs/RadioGroup/__snapshots__/RadioGroup.stories.storyshot index fb42745a4..11a8a76e6 100644 --- a/src/components/elements/Inputs/RadioGroup/__snapshots__/RadioGroup.stories.storyshot +++ b/src/components/elements/Inputs/RadioGroup/__snapshots__/RadioGroup.stories.storyshot @@ -44,6 +44,7 @@ exports[`Storyshots Components/Elements/Inputs/RadioGroup Default 1`] = ` className="flex flex-row-reverse items-center justify-end gap-3 " id=":r1g:" label="Yes" + onChange={[Function]} type="radio" /> @@ -77,6 +78,7 @@ exports[`Storyshots Components/Elements/Inputs/RadioGroup Default 1`] = ` className="flex flex-row-reverse items-center justify-end gap-3 " id=":r1i:" label="No" + onChange={[Function]} type="radio" /> diff --git a/src/components/elements/LandingPage/__snapshots__/AlternatingSection.stories.storyshot b/src/components/elements/LandingPage/__snapshots__/AlternatingSection.stories.storyshot index d505d787e..6aabb122e 100644 --- a/src/components/elements/LandingPage/__snapshots__/AlternatingSection.stories.storyshot +++ b/src/components/elements/LandingPage/__snapshots__/AlternatingSection.stories.storyshot @@ -44,7 +44,7 @@ exports[`Storyshots Components/Elements/LandingPage/AlternatingSection Left 1`] className="flex justify-center bg-background md:w-[50%]" >
image
image @@ -32,7 +32,7 @@ exports[`Storyshots Components/Elements/SelectImageList Condensed 1`] = ` className="aspect-square h-[6.375rem] rounded-lg bg-cover bg-center transition-all duration-200" style={ Object { - "backgroundImage": "url('https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/good-health-and-well-being@2x.png')", + "backgroundImage": "url('https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/good-health-and-well-being@2x.png')", } } /> @@ -52,7 +52,7 @@ exports[`Storyshots Components/Elements/SelectImageList Condensed 1`] = ` className="aspect-square h-[6.375rem] rounded-lg bg-cover bg-center transition-all duration-200" style={ Object { - "backgroundImage": "url('https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/quality-education@2x.png')", + "backgroundImage": "url('https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/quality-education@2x.png')", } } /> @@ -72,7 +72,7 @@ exports[`Storyshots Components/Elements/SelectImageList Condensed 1`] = ` className="aspect-square h-[6.375rem] rounded-lg bg-cover bg-center transition-all duration-200" style={ Object { - "backgroundImage": "url('https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/affordable-and-clean-energy@2x.png')", + "backgroundImage": "url('https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/affordable-and-clean-energy@2x.png')", } } /> @@ -92,7 +92,7 @@ exports[`Storyshots Components/Elements/SelectImageList Condensed 1`] = ` className="aspect-square h-[6.375rem] rounded-lg bg-cover bg-center transition-all duration-200" style={ Object { - "backgroundImage": "url('https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/climate-action@2x.png')", + "backgroundImage": "url('https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/climate-action@2x.png')", } } /> @@ -119,7 +119,7 @@ exports[`Storyshots Components/Elements/SelectImageList Default 1`] = ` className="border-4 border-neutral-900 aspect-square h-[6.375rem] rounded-lg bg-cover bg-center transition-all duration-200" style={ Object { - "backgroundImage": "url('https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/no_poverty@2x.png')", + "backgroundImage": "url('https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/no_poverty@2x.png')", } } /> @@ -139,7 +139,7 @@ exports[`Storyshots Components/Elements/SelectImageList Default 1`] = ` className="border-4 border-neutral-900 aspect-square h-[6.375rem] rounded-lg bg-cover bg-center transition-all duration-200" style={ Object { - "backgroundImage": "url('https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/good-health-and-well-being@2x.png')", + "backgroundImage": "url('https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/good-health-and-well-being@2x.png')", } } /> @@ -159,7 +159,7 @@ exports[`Storyshots Components/Elements/SelectImageList Default 1`] = ` className="border-4 border-neutral-900 aspect-square h-[6.375rem] rounded-lg bg-cover bg-center transition-all duration-200" style={ Object { - "backgroundImage": "url('https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/quality-education@2x.png')", + "backgroundImage": "url('https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/quality-education@2x.png')", } } /> @@ -179,7 +179,7 @@ exports[`Storyshots Components/Elements/SelectImageList Default 1`] = ` className="border-4 border-neutral-900 aspect-square h-[6.375rem] rounded-lg bg-cover bg-center transition-all duration-200" style={ Object { - "backgroundImage": "url('https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/affordable-and-clean-energy@2x.png')", + "backgroundImage": "url('https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/affordable-and-clean-energy@2x.png')", } } /> @@ -199,7 +199,7 @@ exports[`Storyshots Components/Elements/SelectImageList Default 1`] = ` className="border-4 border-neutral-900 aspect-square h-[6.375rem] rounded-lg bg-cover bg-center transition-all duration-200" style={ Object { - "backgroundImage": "url('https://test.wrirestorationmarketplace.cubeapis.com/images/V2/sustainable-development-goals/climate-action@2x.png')", + "backgroundImage": "url('https://new-wri-staging.wri-restoration-marketplace-api.com/images/V2/sustainable-development-goals/climate-action@2x.png')", } } /> diff --git a/src/components/elements/Table/__snapshots__/Table.stories.storyshot b/src/components/elements/Table/__snapshots__/Table.stories.storyshot index 1d2763868..e2ef42969 100644 --- a/src/components/elements/Table/__snapshots__/Table.stories.storyshot +++ b/src/components/elements/Table/__snapshots__/Table.stories.storyshot @@ -13,6 +13,14 @@ exports[`Storyshots Components/Elements/Table Default 1`] = `
+
Show All

+
@@ -94,6 +110,14 @@ exports[`Storyshots Components/Elements/Table Default 1`] = ` onClick={[Function]} > Funding source +
Funding amount +
+

+

+

+

+

+

+

+

+

+

+ > +
+

+ > +

+

+ > +

+
diff --git a/src/components/extensive/ActionTracker/cards/__snapshots__/ApplicationsCard.stories.storyshot b/src/components/extensive/ActionTracker/cards/__snapshots__/ApplicationsCard.stories.storyshot index 786fab0dc..024613e50 100644 --- a/src/components/extensive/ActionTracker/cards/__snapshots__/ApplicationsCard.stories.storyshot +++ b/src/components/extensive/ActionTracker/cards/__snapshots__/ApplicationsCard.stories.storyshot @@ -258,24 +258,6 @@ exports[`Storyshots Components/Extensive/ActionTracker/ApplicationsCard Default > TerraFund for AFR100: Landscapes - Expression of Interest (Enterprises)

-
-
-

- Rejected -

-

TerraFund for AFR100: Landscapes - Expression of Interest (Enterprises)

+
+
+

+ More info requested +

+

- Awaiting Review + Awaiting approval

diff --git a/src/components/extensive/Pagination/__snapshots__/PerPageSelector.stories.storyshot b/src/components/extensive/Pagination/__snapshots__/PerPageSelector.stories.storyshot index fcfc894f3..efcc498c7 100644 --- a/src/components/extensive/Pagination/__snapshots__/PerPageSelector.stories.storyshot +++ b/src/components/extensive/Pagination/__snapshots__/PerPageSelector.stories.storyshot @@ -35,7 +35,16 @@ exports[`Storyshots Components/Elements/Table/PerPageSelector Default 1`] = `
+ > +
+

+

@@ -34,11 +42,27 @@ exports[`Storyshots Components/Generic/Layouts/MainLayout Default 1`] = ` onMouseDown={[Function]} type="button" > +
English +
@@ -103,6 +127,14 @@ exports[`Storyshots Components/Generic/Layouts/MainLayout Default 1`] = `
+
+
English +
@@ -139,7 +187,16 @@ exports[`Storyshots Components/Generic/Layouts/MainLayout Default 1`] = ` className="flex items-center justify-center rounded-full hover:bg-opacity-60 tour-menu-button block lg:hidden" disabled={false} onClick={[Function]} - /> + > +
+
+
@@ -28,11 +36,27 @@ exports[`Storyshots Components/Generic/Navbar Logged In 1`] = ` onMouseDown={[Function]} type="button" > +
English +
@@ -74,6 +98,14 @@ exports[`Storyshots Components/Generic/Navbar Logged In 1`] = `
+
+
English +
@@ -110,7 +158,16 @@ exports[`Storyshots Components/Generic/Navbar Logged In 1`] = ` className="flex items-center justify-center rounded-full hover:bg-opacity-60 tour-menu-button block lg:hidden" disabled={false} onClick={[Function]} - /> + > +
+ `; @@ -122,6 +179,14 @@ exports[`Storyshots Components/Generic/Navbar Logged Out 1`] = `
+
@@ -143,11 +208,27 @@ exports[`Storyshots Components/Generic/Navbar Logged Out 1`] = ` onMouseDown={[Function]} type="button" > +
English +
@@ -212,6 +293,14 @@ exports[`Storyshots Components/Generic/Navbar Logged Out 1`] = `
+
+
English +
@@ -248,7 +353,16 @@ exports[`Storyshots Components/Generic/Navbar Logged Out 1`] = ` className="flex items-center justify-center rounded-full hover:bg-opacity-60 tour-menu-button block lg:hidden" disabled={false} onClick={[Function]} - /> + > +
+
`; diff --git a/src/hooks/useGetCustomFormSteps/__snapshots__/useGetCustomFormSteps.stories.storyshot b/src/hooks/useGetCustomFormSteps/__snapshots__/useGetCustomFormSteps.stories.storyshot index 5d9041557..b0167205e 100644 --- a/src/hooks/useGetCustomFormSteps/__snapshots__/useGetCustomFormSteps.stories.storyshot +++ b/src/hooks/useGetCustomFormSteps/__snapshots__/useGetCustomFormSteps.stories.storyshot @@ -237,6 +237,14 @@ exports[`Storyshots Components/Extensive/Form/Wizard With Get Form Step Hook 1`] +
@@ -279,6 +287,14 @@ exports[`Storyshots Components/Extensive/Form/Wizard With Get Form Step Hook 1`] +
@@ -385,6 +401,14 @@ exports[`Storyshots Components/Extensive/Form/Wizard With Get Form Step Hook 1`] +
@@ -789,16 +813,25 @@ exports[`Storyshots Components/Extensive/Form/Wizard With Get Form Step Hook 1`]
+ > +
+

- Upload File (File format: PDF max. 5MB) + Upload File (File format: PDF max. 10MB)

Date: Fri, 24 May 2024 09:18:17 -0700 Subject: [PATCH 12/27] [TM-929] Turn it into a real hook and reduce duplicated code. --- .../components/Fields/FrameworkField.tsx | 15 ++-------- .../components/ProjectReportsList.tsx | 29 ++----------------- .../projects/components/ProjectsList.tsx | 28 ++---------------- .../components/SiteReportsList.tsx | 28 ++---------------- .../modules/sites/components/SitesList.tsx | 29 ++----------------- .../modules/tasks/components/TasksList.tsx | 27 ++--------------- src/constants/options/frameworks.ts | 23 +++++++++++++-- 7 files changed, 37 insertions(+), 142 deletions(-) diff --git a/src/admin/components/Fields/FrameworkField.tsx b/src/admin/components/Fields/FrameworkField.tsx index 78dd95679..0086a9733 100644 --- a/src/admin/components/Fields/FrameworkField.tsx +++ b/src/admin/components/Fields/FrameworkField.tsx @@ -1,22 +1,11 @@ -import { FC, useEffect, useState } from "react"; +import { FC } from "react"; import { FunctionField } from "react-admin"; import { useFrameworkChoices } from "@/constants/options/frameworks"; const FrameworkField: FC = () => { - const [frameworkChoices, setFrameworkChoices] = useState([]); - const fetchData = async () => { - try { - const choices = await useFrameworkChoices(); - setFrameworkChoices(choices); - } catch (error) { - console.error("Error fetching framework choices:", error); - } - }; + const frameworkChoices = useFrameworkChoices(); - useEffect(() => { - fetchData(); - }, []); return ( { - const [frameworkChoices, setFrameworkChoices] = useState([]); - const fetchData = async () => { - try { - const choices = await useFrameworkChoices(); - setFrameworkChoices(choices); - } catch (error) { - console.error("Error fetching framework choices:", error); - } - }; + const frameworkChoices = useFrameworkChoices(); - useEffect(() => { - fetchData(); - }, []); return ( }> @@ -75,19 +64,7 @@ const ProjectReportDataGrid: FC = () => { export const ProjectReportsList: FC = () => { const [exportModalOpen, setExportModalOpen] = useState(false); const [exporting, setExporting] = useState(false); - const [frameworkChoices, setFrameworkChoices] = useState([]); - const fetchData = async () => { - try { - const choices = await useFrameworkChoices(); - setFrameworkChoices(choices); - } catch (error) { - console.error("Error fetching framework choices:", error); - } - }; - - useEffect(() => { - fetchData(); - }, []); + const frameworkChoices = useFrameworkChoices(); const filters = [ , { - const [frameworkChoices, setFrameworkChoices] = useState([]); - const fetchData = async () => { - try { - const choices = await useFrameworkChoices(); - setFrameworkChoices(choices); - } catch (error) { - console.error("Error fetching framework choices:", error); - } - }; + const frameworkChoices = useFrameworkChoices(); - useEffect(() => { - fetchData(); - }, []); return ( }> @@ -90,19 +79,8 @@ const ProjectDataGrid = () => { export const ProjectsList: FC = () => { const [exportModalOpen, setExportModalOpen] = useState(false); const [exporting, setExporting] = useState(false); - const [frameworkChoices, setFrameworkChoices] = useState([]); - const fetchData = async () => { - try { - const choices = await useFrameworkChoices(); - setFrameworkChoices(choices); - } catch (error) { - console.error("Error fetching framework choices:", error); - } - }; + const frameworkChoices = useFrameworkChoices(); - useEffect(() => { - fetchData(); - }, []); const filters = [ , , diff --git a/src/admin/modules/siteReports/components/SiteReportsList.tsx b/src/admin/modules/siteReports/components/SiteReportsList.tsx index 6259efe3a..ad58cada3 100644 --- a/src/admin/modules/siteReports/components/SiteReportsList.tsx +++ b/src/admin/modules/siteReports/components/SiteReportsList.tsx @@ -1,5 +1,5 @@ import { Divider, Stack, Typography } from "@mui/material"; -import { FC, useEffect, useState } from "react"; +import { FC, useState } from "react"; import { AutocompleteInput, Datagrid, @@ -29,19 +29,8 @@ import { optionToChoices } from "@/utils/options"; import modules from "../.."; const SiteReportDataGrid: FC = () => { - const [frameworkChoices, setFrameworkChoices] = useState([]); - const fetchData = async () => { - try { - const choices = await useFrameworkChoices(); - setFrameworkChoices(choices); - } catch (error) { - console.error("Error fetching framework choices:", error); - } - }; + const frameworkChoices = useFrameworkChoices(); - useEffect(() => { - fetchData(); - }, []); return ( }> @@ -75,19 +64,8 @@ const SiteReportDataGrid: FC = () => { export const SiteReportsList: FC = () => { const [exportModalOpen, setExportModalOpen] = useState(false); const [exporting, setExporting] = useState(false); - const [frameworkChoices, setFrameworkChoices] = useState([]); - const fetchData = async () => { - try { - const choices = await useFrameworkChoices(); - setFrameworkChoices(choices); - } catch (error) { - console.error("Error fetching framework choices:", error); - } - }; + const frameworkChoices = useFrameworkChoices(); - useEffect(() => { - fetchData(); - }, []); const filters = [ , { - const [frameworkChoices, setFrameworkChoices] = useState([]); - const fetchData = async () => { - try { - const choices = await useFrameworkChoices(); - setFrameworkChoices(choices); - } catch (error) { - console.error("Error fetching framework choices:", error); - } - }; + const frameworkChoices = useFrameworkChoices(); - useEffect(() => { - fetchData(); - }, []); return ( }> @@ -90,19 +79,7 @@ const SiteDataGrid: FC = () => { export const SitesList: FC = () => { const [exportModalOpen, setExportModalOpen] = useState(false); const [exporting, setExporting] = useState(false); - const [frameworkChoices, setFrameworkChoices] = useState([]); - const fetchData = async () => { - try { - const choices = await useFrameworkChoices(); - setFrameworkChoices(choices); - } catch (error) { - console.error("Error fetching framework choices:", error); - } - }; - - useEffect(() => { - fetchData(); - }, []); + const frameworkChoices = useFrameworkChoices(); const filters = [ , , diff --git a/src/admin/modules/tasks/components/TasksList.tsx b/src/admin/modules/tasks/components/TasksList.tsx index ec3b59ecd..c2a30cab3 100644 --- a/src/admin/modules/tasks/components/TasksList.tsx +++ b/src/admin/modules/tasks/components/TasksList.tsx @@ -1,5 +1,5 @@ import { Divider, Stack, Typography } from "@mui/material"; -import { FC, useEffect, useState } from "react"; +import { FC } from "react"; import { AutocompleteInput, Datagrid, @@ -18,17 +18,7 @@ import { optionToChoices } from "@/utils/options"; import modules from "../.."; const TaskDataGrid: FC = () => { - const [frameworkChoices, setFrameworkChoices] = useState([]); - const fetchData = async () => { - try { - setFrameworkChoices(await useFrameworkChoices()); - } catch (error) { - console.error("Error fetching framework choices:", error); - } - }; - useEffect(() => { - fetchData(); - }, []); + const frameworkChoices = useFrameworkChoices(); return ( @@ -51,18 +41,7 @@ const TaskDataGrid: FC = () => { }; export const TasksList: FC = () => { - const [frameworkChoices, setFrameworkChoices] = useState([]); - - const fetchData = async () => { - try { - setFrameworkChoices(await useFrameworkChoices()); - } catch (error) { - console.error("Error fetching framework choices:", error); - } - }; - useEffect(() => { - fetchData(); - }, []); + const frameworkChoices = useFrameworkChoices(); const filters = [ { +async function getFrameworkChoices() { const params: GetListParams = { pagination: { page: 0, @@ -16,9 +17,25 @@ export const useFrameworkChoices = async () => { }; const data = await reportingFrameworkDataProvider.getList("", params); - const frameworkChoices: any = (data as any)?.data.map((framework: any) => ({ + return (data as any)?.data.map((framework: any) => ({ id: framework.slug, name: framework.name })); +} + +export function useFrameworkChoices() { + const [frameworkChoices, setFrameworkChoices] = useState([]); + const fetchFrameworkChoices = async function () { + try { + setFrameworkChoices(await getFrameworkChoices()); + } catch (error) { + console.error("Error fetching framework choices", error); + } + }; + + useEffect(() => { + fetchFrameworkChoices(); + }, []); + return frameworkChoices; -}; +} From ba3363e705938c0c1e74a8419599258b6ce7416a Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Fri, 24 May 2024 09:51:05 -0700 Subject: [PATCH 13/27] [TM-929] Reduce code duplication in managing the framework selection dialog. --- .../Dialogs/FrameworkSelectionDialog.tsx | 20 +++++++++++++++++- .../components/ProjectReportsList.tsx | 21 +++++-------------- .../projects/components/ProjectsList.tsx | 21 +++++-------------- .../components/SiteReportsList.tsx | 21 +++++-------------- .../modules/sites/components/SitesList.tsx | 21 +++++-------------- 5 files changed, 39 insertions(+), 65 deletions(-) diff --git a/src/admin/components/Dialogs/FrameworkSelectionDialog.tsx b/src/admin/components/Dialogs/FrameworkSelectionDialog.tsx index 8b3f7e642..a253dfcb7 100644 --- a/src/admin/components/Dialogs/FrameworkSelectionDialog.tsx +++ b/src/admin/components/Dialogs/FrameworkSelectionDialog.tsx @@ -1,6 +1,6 @@ import { CheckCircle, InfoOutlined } from "@mui/icons-material"; import { Button, Dialog, DialogActions, DialogContent, DialogProps, DialogTitle } from "@mui/material"; -import { FC, useMemo } from "react"; +import { FC, useCallback, useMemo, useState } from "react"; import { AutocompleteInput, Form } from "react-admin"; import { FieldValues } from "react-hook-form"; import * as yup from "yup"; @@ -57,6 +57,24 @@ const FrameworkSelectionDialogContent: FC ); }; +export function useFrameworkSelection(handleExport: (framework: string) => void) { + const [modalOpen, setModalOpen] = useState(false); + return { + openExportDialog: useCallback(() => setModalOpen(true), []), + frameworkDialogProps: { + open: modalOpen, + onCancel: useCallback(() => setModalOpen(false), []), + onExport: useCallback( + (framework: string) => { + handleExport(framework); + setModalOpen(false); + }, + [handleExport] + ) + } + }; +} + interface FrameworkSelectionDialogProps extends DialogProps { onExport: (framework: string) => void; onCancel: () => void; diff --git a/src/admin/modules/projectReports/components/ProjectReportsList.tsx b/src/admin/modules/projectReports/components/ProjectReportsList.tsx index e18dc2a92..b842e987a 100644 --- a/src/admin/modules/projectReports/components/ProjectReportsList.tsx +++ b/src/admin/modules/projectReports/components/ProjectReportsList.tsx @@ -18,7 +18,7 @@ import { import ListActions from "@/admin/components/Actions/ListActions"; import ExportProcessingAlert from "@/admin/components/Alerts/ExportProcessingAlert"; import CustomBulkDeleteWithConfirmButton from "@/admin/components/Buttons/CustomBulkDeleteWithConfirmButton"; -import FrameworkSelectionDialog from "@/admin/components/Dialogs/FrameworkSelectionDialog"; +import FrameworkSelectionDialog, { useFrameworkSelection } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; import { getCountriesOptions } from "@/constants/options/countries"; import { useFrameworkChoices } from "@/constants/options/frameworks"; import { getChangeRequestStatusOptions, getReportStatusOptions } from "@/constants/options/status"; @@ -62,7 +62,6 @@ const ProjectReportDataGrid: FC = () => { }; export const ProjectReportsList: FC = () => { - const [exportModalOpen, setExportModalOpen] = useState(false); const [exporting, setExporting] = useState(false); const frameworkChoices = useFrameworkChoices(); const filters = [ @@ -90,15 +89,7 @@ export const ProjectReportsList: FC = () => { ]; - const handleExportOpen = () => { - setExportModalOpen(true); - }; - - const handleExportClose = () => { - setExportModalOpen(false); - }; - - const handleExport = (framework: string) => { + const { openExportDialog, frameworkDialogProps } = useFrameworkSelection((framework: string) => { setExporting(true); fetchGetV2AdminENTITYExportFRAMEWORK({ @@ -111,9 +102,7 @@ export const ProjectReportsList: FC = () => { downloadFileBlob(response, `Project Reports - ${framework}.csv`); }) .finally(() => setExporting(false)); - - handleExportClose(); - }; + }); return ( <> @@ -123,11 +112,11 @@ export const ProjectReportsList: FC = () => { - } filters={filters}> + } filters={filters}> - + diff --git a/src/admin/modules/projects/components/ProjectsList.tsx b/src/admin/modules/projects/components/ProjectsList.tsx index bc1b739c4..ea957c63e 100644 --- a/src/admin/modules/projects/components/ProjectsList.tsx +++ b/src/admin/modules/projects/components/ProjectsList.tsx @@ -21,7 +21,7 @@ import ListActions from "@/admin/components/Actions/ListActions"; import ExportProcessingAlert from "@/admin/components/Alerts/ExportProcessingAlert"; import CustomBulkDeleteWithConfirmButton from "@/admin/components/Buttons/CustomBulkDeleteWithConfirmButton"; import CustomDeleteWithConfirmButton from "@/admin/components/Buttons/CustomDeleteWithConfirmButton"; -import FrameworkSelectionDialog from "@/admin/components/Dialogs/FrameworkSelectionDialog"; +import FrameworkSelectionDialog, { useFrameworkSelection } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; import { getCountriesOptions } from "@/constants/options/countries"; import { useFrameworkChoices } from "@/constants/options/frameworks"; import { getChangeRequestStatusOptions, getStatusOptions } from "@/constants/options/status"; @@ -77,7 +77,6 @@ const ProjectDataGrid = () => { }; export const ProjectsList: FC = () => { - const [exportModalOpen, setExportModalOpen] = useState(false); const [exporting, setExporting] = useState(false); const frameworkChoices = useFrameworkChoices(); @@ -112,15 +111,7 @@ export const ProjectsList: FC = () => { ]; - const handleExportOpen = () => { - setExportModalOpen(true); - }; - - const handleExportClose = () => { - setExportModalOpen(false); - }; - - const handleExport = (framework: string) => { + const { openExportDialog, frameworkDialogProps } = useFrameworkSelection((framework: string) => { setExporting(true); fetchGetV2AdminENTITYExportFRAMEWORK({ @@ -133,9 +124,7 @@ export const ProjectsList: FC = () => { downloadFileBlob(response, `Projects - ${framework}.csv`); }) .finally(() => setExporting(false)); - - handleExportClose(); - }; + }); return ( <> @@ -145,11 +134,11 @@ export const ProjectsList: FC = () => { - } filters={filters}> + } filters={filters}> - + diff --git a/src/admin/modules/siteReports/components/SiteReportsList.tsx b/src/admin/modules/siteReports/components/SiteReportsList.tsx index ad58cada3..4298f6408 100644 --- a/src/admin/modules/siteReports/components/SiteReportsList.tsx +++ b/src/admin/modules/siteReports/components/SiteReportsList.tsx @@ -18,7 +18,7 @@ import { import ListActions from "@/admin/components/Actions/ListActions"; import ExportProcessingAlert from "@/admin/components/Alerts/ExportProcessingAlert"; import CustomBulkDeleteWithConfirmButton from "@/admin/components/Buttons/CustomBulkDeleteWithConfirmButton"; -import FrameworkSelectionDialog from "@/admin/components/Dialogs/FrameworkSelectionDialog"; +import FrameworkSelectionDialog, { useFrameworkSelection } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; import { getCountriesOptions } from "@/constants/options/countries"; import { useFrameworkChoices } from "@/constants/options/frameworks"; import { getChangeRequestStatusOptions, getReportStatusOptions } from "@/constants/options/status"; @@ -62,7 +62,6 @@ const SiteReportDataGrid: FC = () => { }; export const SiteReportsList: FC = () => { - const [exportModalOpen, setExportModalOpen] = useState(false); const [exporting, setExporting] = useState(false); const frameworkChoices = useFrameworkChoices(); @@ -103,15 +102,7 @@ export const SiteReportsList: FC = () => { ]; - const handleExportOpen = () => { - setExportModalOpen(true); - }; - - const handleExportClose = () => { - setExportModalOpen(false); - }; - - const handleExport = (framework: string) => { + const { openExportDialog, frameworkDialogProps } = useFrameworkSelection((framework: string) => { setExporting(true); fetchGetV2AdminENTITYExportFRAMEWORK({ @@ -124,9 +115,7 @@ export const SiteReportsList: FC = () => { downloadFileBlob(response, `Site Reports - ${framework}.csv`); }) .finally(() => setExporting(false)); - - handleExportClose(); - }; + }); return ( <> @@ -136,11 +125,11 @@ export const SiteReportsList: FC = () => { - } filters={filters}> + } filters={filters}> - + diff --git a/src/admin/modules/sites/components/SitesList.tsx b/src/admin/modules/sites/components/SitesList.tsx index fbb3e7b95..7a411b39d 100644 --- a/src/admin/modules/sites/components/SitesList.tsx +++ b/src/admin/modules/sites/components/SitesList.tsx @@ -21,7 +21,7 @@ import ListActions from "@/admin/components/Actions/ListActions"; import ExportProcessingAlert from "@/admin/components/Alerts/ExportProcessingAlert"; import CustomBulkDeleteWithConfirmButton from "@/admin/components/Buttons/CustomBulkDeleteWithConfirmButton"; import CustomDeleteWithConfirmButton from "@/admin/components/Buttons/CustomDeleteWithConfirmButton"; -import FrameworkSelectionDialog from "@/admin/components/Dialogs/FrameworkSelectionDialog"; +import FrameworkSelectionDialog, { useFrameworkSelection } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; import { getCountriesOptions } from "@/constants/options/countries"; import { useFrameworkChoices } from "@/constants/options/frameworks"; import { getChangeRequestStatusOptions, getStatusOptions } from "@/constants/options/status"; @@ -77,7 +77,6 @@ const SiteDataGrid: FC = () => { }; export const SitesList: FC = () => { - const [exportModalOpen, setExportModalOpen] = useState(false); const [exporting, setExporting] = useState(false); const frameworkChoices = useFrameworkChoices(); const filters = [ @@ -123,15 +122,7 @@ export const SitesList: FC = () => { /> ]; - const handleExportOpen = () => { - setExportModalOpen(true); - }; - - const handleExportClose = () => { - setExportModalOpen(false); - }; - - const handleExport = (framework: string) => { + const { openExportDialog, frameworkDialogProps } = useFrameworkSelection((framework: string) => { setExporting(true); fetchGetV2AdminENTITYExportFRAMEWORK({ @@ -144,9 +135,7 @@ export const SitesList: FC = () => { downloadFileBlob(response, `Sites - ${framework}.csv`); }) .finally(() => setExporting(false)); - - handleExportClose(); - }; + }); return ( <> @@ -156,11 +145,11 @@ export const SitesList: FC = () => { - } filters={filters}> + } filters={filters}> - + From 891b4f82014ad8dd10c2184a7650fa5c82387a7e Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Fri, 24 May 2024 10:11:02 -0700 Subject: [PATCH 14/27] [TM-929] This can be further optimized because they all use the same API. --- .../Dialogs/FrameworkSelectionDialog.tsx | 38 ++++++++++++++----- .../components/ProjectReportsList.tsx | 22 ++--------- .../projects/components/ProjectsList.tsx | 22 ++--------- .../components/SiteReportsList.tsx | 22 ++--------- .../modules/sites/components/SitesList.tsx | 22 ++--------- 5 files changed, 40 insertions(+), 86 deletions(-) diff --git a/src/admin/components/Dialogs/FrameworkSelectionDialog.tsx b/src/admin/components/Dialogs/FrameworkSelectionDialog.tsx index a253dfcb7..64162f3b2 100644 --- a/src/admin/components/Dialogs/FrameworkSelectionDialog.tsx +++ b/src/admin/components/Dialogs/FrameworkSelectionDialog.tsx @@ -1,13 +1,15 @@ import { CheckCircle, InfoOutlined } from "@mui/icons-material"; import { Button, Dialog, DialogActions, DialogContent, DialogProps, DialogTitle } from "@mui/material"; +import { capitalize, split } from "lodash"; import { FC, useCallback, useMemo, useState } from "react"; import { AutocompleteInput, Form } from "react-admin"; import { FieldValues } from "react-hook-form"; import * as yup from "yup"; import { validateForm } from "@/admin/utils/forms"; -import { useGetV2AdminReportingFrameworks } from "@/generated/apiComponents"; -import { Option } from "@/types/common"; +import { fetchGetV2AdminENTITYExportFRAMEWORK, useGetV2AdminReportingFrameworks } from "@/generated/apiComponents"; +import { EntityName, Option } from "@/types/common"; +import { downloadFileBlob } from "@/utils/network"; import { optionToChoices } from "@/utils/options"; interface FrameworkSelectionDialogContentProps { @@ -57,20 +59,36 @@ const FrameworkSelectionDialogContent: FC ); }; -export function useFrameworkSelection(handleExport: (framework: string) => void) { +export function useFrameworkExport(entity: EntityName) { + const [exporting, setExporting] = useState(false); const [modalOpen, setModalOpen] = useState(false); + + const onExport = useCallback( + (framework: string) => { + setExporting(true); + + const exportPrefix = split(entity, "-").map(capitalize).join(" "); + + fetchGetV2AdminENTITYExportFRAMEWORK({ + pathParams: { entity, framework } + }) + .then((response: any) => { + downloadFileBlob(response, `${exportPrefix} - ${framework}.csv`); + }) + .finally(() => setExporting(false)); + + setModalOpen(false); + }, + [entity] + ); + return { + exporting, openExportDialog: useCallback(() => setModalOpen(true), []), frameworkDialogProps: { open: modalOpen, onCancel: useCallback(() => setModalOpen(false), []), - onExport: useCallback( - (framework: string) => { - handleExport(framework); - setModalOpen(false); - }, - [handleExport] - ) + onExport } }; } diff --git a/src/admin/modules/projectReports/components/ProjectReportsList.tsx b/src/admin/modules/projectReports/components/ProjectReportsList.tsx index b842e987a..9ad50a205 100644 --- a/src/admin/modules/projectReports/components/ProjectReportsList.tsx +++ b/src/admin/modules/projectReports/components/ProjectReportsList.tsx @@ -1,5 +1,5 @@ import { Divider, Stack, Typography } from "@mui/material"; -import { FC, useState } from "react"; +import { FC } from "react"; import { AutocompleteInput, Datagrid, @@ -18,12 +18,10 @@ import { import ListActions from "@/admin/components/Actions/ListActions"; import ExportProcessingAlert from "@/admin/components/Alerts/ExportProcessingAlert"; import CustomBulkDeleteWithConfirmButton from "@/admin/components/Buttons/CustomBulkDeleteWithConfirmButton"; -import FrameworkSelectionDialog, { useFrameworkSelection } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; +import FrameworkSelectionDialog, { useFrameworkExport } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; import { getCountriesOptions } from "@/constants/options/countries"; import { useFrameworkChoices } from "@/constants/options/frameworks"; import { getChangeRequestStatusOptions, getReportStatusOptions } from "@/constants/options/status"; -import { fetchGetV2AdminENTITYExportFRAMEWORK } from "@/generated/apiComponents"; -import { downloadFileBlob } from "@/utils/network"; import { optionToChoices } from "@/utils/options"; import modules from "../.."; @@ -62,7 +60,6 @@ const ProjectReportDataGrid: FC = () => { }; export const ProjectReportsList: FC = () => { - const [exporting, setExporting] = useState(false); const frameworkChoices = useFrameworkChoices(); const filters = [ , @@ -89,20 +86,7 @@ export const ProjectReportsList: FC = () => { ]; - const { openExportDialog, frameworkDialogProps } = useFrameworkSelection((framework: string) => { - setExporting(true); - - fetchGetV2AdminENTITYExportFRAMEWORK({ - pathParams: { - entity: "project-reports", - framework - } - }) - .then((response: any) => { - downloadFileBlob(response, `Project Reports - ${framework}.csv`); - }) - .finally(() => setExporting(false)); - }); + const { exporting, openExportDialog, frameworkDialogProps } = useFrameworkExport("project-reports"); return ( <> diff --git a/src/admin/modules/projects/components/ProjectsList.tsx b/src/admin/modules/projects/components/ProjectsList.tsx index ea957c63e..357448002 100644 --- a/src/admin/modules/projects/components/ProjectsList.tsx +++ b/src/admin/modules/projects/components/ProjectsList.tsx @@ -1,5 +1,5 @@ import { Divider, Stack, Typography } from "@mui/material"; -import { FC, useState } from "react"; +import { FC } from "react"; import { AutocompleteInput, BooleanField, @@ -21,12 +21,10 @@ import ListActions from "@/admin/components/Actions/ListActions"; import ExportProcessingAlert from "@/admin/components/Alerts/ExportProcessingAlert"; import CustomBulkDeleteWithConfirmButton from "@/admin/components/Buttons/CustomBulkDeleteWithConfirmButton"; import CustomDeleteWithConfirmButton from "@/admin/components/Buttons/CustomDeleteWithConfirmButton"; -import FrameworkSelectionDialog, { useFrameworkSelection } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; +import FrameworkSelectionDialog, { useFrameworkExport } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; import { getCountriesOptions } from "@/constants/options/countries"; import { useFrameworkChoices } from "@/constants/options/frameworks"; import { getChangeRequestStatusOptions, getStatusOptions } from "@/constants/options/status"; -import { fetchGetV2AdminENTITYExportFRAMEWORK } from "@/generated/apiComponents"; -import { downloadFileBlob } from "@/utils/network"; import { optionToChoices } from "@/utils/options"; import modules from "../.."; @@ -77,7 +75,6 @@ const ProjectDataGrid = () => { }; export const ProjectsList: FC = () => { - const [exporting, setExporting] = useState(false); const frameworkChoices = useFrameworkChoices(); const filters = [ @@ -111,20 +108,7 @@ export const ProjectsList: FC = () => { ]; - const { openExportDialog, frameworkDialogProps } = useFrameworkSelection((framework: string) => { - setExporting(true); - - fetchGetV2AdminENTITYExportFRAMEWORK({ - pathParams: { - entity: "projects", - framework - } - }) - .then((response: any) => { - downloadFileBlob(response, `Projects - ${framework}.csv`); - }) - .finally(() => setExporting(false)); - }); + const { exporting, openExportDialog, frameworkDialogProps } = useFrameworkExport("projects"); return ( <> diff --git a/src/admin/modules/siteReports/components/SiteReportsList.tsx b/src/admin/modules/siteReports/components/SiteReportsList.tsx index 4298f6408..6eacb997c 100644 --- a/src/admin/modules/siteReports/components/SiteReportsList.tsx +++ b/src/admin/modules/siteReports/components/SiteReportsList.tsx @@ -1,5 +1,5 @@ import { Divider, Stack, Typography } from "@mui/material"; -import { FC, useState } from "react"; +import { FC } from "react"; import { AutocompleteInput, Datagrid, @@ -18,12 +18,10 @@ import { import ListActions from "@/admin/components/Actions/ListActions"; import ExportProcessingAlert from "@/admin/components/Alerts/ExportProcessingAlert"; import CustomBulkDeleteWithConfirmButton from "@/admin/components/Buttons/CustomBulkDeleteWithConfirmButton"; -import FrameworkSelectionDialog, { useFrameworkSelection } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; +import FrameworkSelectionDialog, { useFrameworkExport } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; import { getCountriesOptions } from "@/constants/options/countries"; import { useFrameworkChoices } from "@/constants/options/frameworks"; import { getChangeRequestStatusOptions, getReportStatusOptions } from "@/constants/options/status"; -import { fetchGetV2AdminENTITYExportFRAMEWORK } from "@/generated/apiComponents"; -import { downloadFileBlob } from "@/utils/network"; import { optionToChoices } from "@/utils/options"; import modules from "../.."; @@ -62,7 +60,6 @@ const SiteReportDataGrid: FC = () => { }; export const SiteReportsList: FC = () => { - const [exporting, setExporting] = useState(false); const frameworkChoices = useFrameworkChoices(); const filters = [ @@ -102,20 +99,7 @@ export const SiteReportsList: FC = () => { ]; - const { openExportDialog, frameworkDialogProps } = useFrameworkSelection((framework: string) => { - setExporting(true); - - fetchGetV2AdminENTITYExportFRAMEWORK({ - pathParams: { - entity: "site-reports", - framework - } - }) - .then((response: any) => { - downloadFileBlob(response, `Site Reports - ${framework}.csv`); - }) - .finally(() => setExporting(false)); - }); + const { exporting, openExportDialog, frameworkDialogProps } = useFrameworkExport("site-reports"); return ( <> diff --git a/src/admin/modules/sites/components/SitesList.tsx b/src/admin/modules/sites/components/SitesList.tsx index 7a411b39d..1dd4aeed4 100644 --- a/src/admin/modules/sites/components/SitesList.tsx +++ b/src/admin/modules/sites/components/SitesList.tsx @@ -1,5 +1,5 @@ import { Divider, Stack, Typography } from "@mui/material"; -import { FC, useState } from "react"; +import { FC } from "react"; import { AutocompleteInput, BooleanField, @@ -21,12 +21,10 @@ import ListActions from "@/admin/components/Actions/ListActions"; import ExportProcessingAlert from "@/admin/components/Alerts/ExportProcessingAlert"; import CustomBulkDeleteWithConfirmButton from "@/admin/components/Buttons/CustomBulkDeleteWithConfirmButton"; import CustomDeleteWithConfirmButton from "@/admin/components/Buttons/CustomDeleteWithConfirmButton"; -import FrameworkSelectionDialog, { useFrameworkSelection } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; +import FrameworkSelectionDialog, { useFrameworkExport } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; import { getCountriesOptions } from "@/constants/options/countries"; import { useFrameworkChoices } from "@/constants/options/frameworks"; import { getChangeRequestStatusOptions, getStatusOptions } from "@/constants/options/status"; -import { fetchGetV2AdminENTITYExportFRAMEWORK } from "@/generated/apiComponents"; -import { downloadFileBlob } from "@/utils/network"; import { optionToChoices } from "@/utils/options"; import modules from "../.."; @@ -77,7 +75,6 @@ const SiteDataGrid: FC = () => { }; export const SitesList: FC = () => { - const [exporting, setExporting] = useState(false); const frameworkChoices = useFrameworkChoices(); const filters = [ , @@ -122,20 +119,7 @@ export const SitesList: FC = () => { /> ]; - const { openExportDialog, frameworkDialogProps } = useFrameworkSelection((framework: string) => { - setExporting(true); - - fetchGetV2AdminENTITYExportFRAMEWORK({ - pathParams: { - entity: "sites", - framework - } - }) - .then((response: any) => { - downloadFileBlob(response, `Sites - ${framework}.csv`); - }) - .finally(() => setExporting(false)); - }); + const { exporting, openExportDialog, frameworkDialogProps } = useFrameworkExport("sites"); return ( <> From 40cff6c5241e6f171188712382043ba2bf14d159 Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Fri, 24 May 2024 10:22:42 -0700 Subject: [PATCH 15/27] [TM-929] Support framework key on nursery and nursery report. --- .../nurseries/components/NurseriesList.tsx | 40 ++++++++++--------- .../components/NurseryReportsList.tsx | 40 ++++++++++--------- 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/src/admin/modules/nurseries/components/NurseriesList.tsx b/src/admin/modules/nurseries/components/NurseriesList.tsx index 0465fe5d2..17f64de3a 100644 --- a/src/admin/modules/nurseries/components/NurseriesList.tsx +++ b/src/admin/modules/nurseries/components/NurseriesList.tsx @@ -1,10 +1,11 @@ import { Divider, Stack, Typography } from "@mui/material"; -import { FC, useState } from "react"; +import { FC } from "react"; import { AutocompleteInput, Datagrid, DateField, EditButton, + FunctionField, List, ReferenceInput, SearchInput, @@ -19,15 +20,17 @@ import ListActions from "@/admin/components/Actions/ListActions"; import ExportProcessingAlert from "@/admin/components/Alerts/ExportProcessingAlert"; import CustomBulkDeleteWithConfirmButton from "@/admin/components/Buttons/CustomBulkDeleteWithConfirmButton"; import CustomDeleteWithConfirmButton from "@/admin/components/Buttons/CustomDeleteWithConfirmButton"; +import FrameworkSelectionDialog, { useFrameworkExport } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; import { getCountriesOptions } from "@/constants/options/countries"; +import { useFrameworkChoices } from "@/constants/options/frameworks"; import { getChangeRequestStatusOptions, getStatusOptions } from "@/constants/options/status"; -import { fetchGetV2AdminENTITYExportFRAMEWORK } from "@/generated/apiComponents"; -import { downloadFileBlob } from "@/utils/network"; import { optionToChoices } from "@/utils/options"; import modules from "../.."; const NurseryDataGrid: FC = () => { + const frameworkChoices = useFrameworkChoices(); + return ( }> @@ -41,6 +44,15 @@ const NurseryDataGrid: FC = () => { + + frameworkChoices.find((framework: any) => framework.id === record?.framework_key)?.name ?? + record?.framework_key + } + sortable={false} + /> @@ -51,7 +63,7 @@ const NurseryDataGrid: FC = () => { }; export const NurseriesList: FC = () => { - const [exporting, setExporting] = useState(false); + const frameworkChoices = useFrameworkChoices(); const filters = [ , @@ -68,6 +80,7 @@ export const NurseriesList: FC = () => { > , + , , { ]; - const handleExport = () => { - setExporting(true); - - fetchGetV2AdminENTITYExportFRAMEWORK({ - pathParams: { - entity: "nurseries", - framework: "terrafund" - } - }) - .then((response: any) => { - downloadFileBlob(response, "Nurseries - terrafund.csv"); - }) - .finally(() => setExporting(false)); - }; + const { exporting, openExportDialog, frameworkDialogProps } = useFrameworkExport("nurseries"); return ( <> @@ -112,10 +112,12 @@ export const NurseriesList: FC = () => { - } filters={filters}> + } filters={filters}> + + ); diff --git a/src/admin/modules/nurseryReports/components/NurseryReportsList.tsx b/src/admin/modules/nurseryReports/components/NurseryReportsList.tsx index f4c14d185..15c08c148 100644 --- a/src/admin/modules/nurseryReports/components/NurseryReportsList.tsx +++ b/src/admin/modules/nurseryReports/components/NurseryReportsList.tsx @@ -1,10 +1,11 @@ import { Divider, Stack, Typography } from "@mui/material"; -import { FC, useState } from "react"; +import { FC } from "react"; import { AutocompleteInput, Datagrid, DateField, EditButton, + FunctionField, List, ReferenceInput, SearchInput, @@ -17,15 +18,17 @@ import { import ListActions from "@/admin/components/Actions/ListActions"; import ExportProcessingAlert from "@/admin/components/Alerts/ExportProcessingAlert"; import CustomBulkDeleteWithConfirmButton from "@/admin/components/Buttons/CustomBulkDeleteWithConfirmButton"; +import FrameworkSelectionDialog, { useFrameworkExport } from "@/admin/components/Dialogs/FrameworkSelectionDialog"; import { getCountriesOptions } from "@/constants/options/countries"; +import { useFrameworkChoices } from "@/constants/options/frameworks"; import { getChangeRequestStatusOptions, getReportStatusOptions } from "@/constants/options/status"; -import { fetchGetV2AdminENTITYExportFRAMEWORK } from "@/generated/apiComponents"; -import { downloadFileBlob } from "@/utils/network"; import { optionToChoices } from "@/utils/options"; import modules from "../.."; const NurseryReportDataGrid: FC = () => { + const frameworkChoices = useFrameworkChoices(); + return ( }> @@ -41,6 +44,15 @@ const NurseryReportDataGrid: FC = () => { + + frameworkChoices.find((framework: any) => framework.id === record?.framework_key)?.name ?? + record?.framework_key + } + sortable={false} + /> @@ -48,7 +60,7 @@ const NurseryReportDataGrid: FC = () => { }; export const NurseryReportsList: FC = () => { - const [exporting, setExporting] = useState(false); + const frameworkChoices = useFrameworkChoices(); const filters = [ , @@ -77,6 +89,7 @@ export const NurseryReportsList: FC = () => { , , + , , { /> ]; - const handleExport = () => { - setExporting(true); - - fetchGetV2AdminENTITYExportFRAMEWORK({ - pathParams: { - entity: "nursery-reports", - framework: "terrafund" - } - }) - .then((response: any) => { - downloadFileBlob(response, "Nursery Reports - terrafund.csv"); - }) - .finally(() => setExporting(false)); - }; + const { exporting, openExportDialog, frameworkDialogProps } = useFrameworkExport("nursery-reports"); return ( <> @@ -109,10 +109,12 @@ export const NurseryReportsList: FC = () => { - } filters={filters}> + } filters={filters}> + + ); From e71ad72cd2fda6f15ea1cf6de4e994f184f6c5ab Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Mon, 27 May 2024 16:35:07 -0700 Subject: [PATCH 16/27] [TM-786] Handle some warnings in the codebase to help clean up jest output. --- .../Inputs/InputElements/InputLabel.tsx | 9 ++- .../elements/Tabs/Default/TabButton.tsx | 72 +++++++++---------- src/components/elements/Text/Text.tsx | 9 +-- src/components/extensive/List/List.tsx | 2 +- 4 files changed, 44 insertions(+), 48 deletions(-) diff --git a/src/components/elements/Inputs/InputElements/InputLabel.tsx b/src/components/elements/Inputs/InputElements/InputLabel.tsx index 38e934669..3550727b8 100644 --- a/src/components/elements/Inputs/InputElements/InputLabel.tsx +++ b/src/components/elements/Inputs/InputElements/InputLabel.tsx @@ -1,6 +1,6 @@ import { useT } from "@transifex/react"; import classNames from "classnames"; -import { HTMLProps } from "react"; +import { forwardRef, HTMLProps, RefObject } from "react"; import { When } from "react-if"; import StatusPill from "@/components/elements/StatusPill/StatusPill"; @@ -12,7 +12,7 @@ export interface InputLabelProps extends HTMLProps { feedbackRequired?: boolean; } -const InputLabel = (props: InputLabelProps) => { +export default forwardRef(function InputLabel(props: InputLabelProps, ref) { const t = useT(); const { feedbackRequired, required, children, className, ...labelProps } = props; @@ -20,6 +20,7 @@ const InputLabel = (props: InputLabelProps) => { {...labelProps} + ref={ref as RefObject} as="label" variant="text-bold-body-300" className={classNames("mr-2 inline uppercase", className)} @@ -34,6 +35,4 @@ const InputLabel = (props: InputLabelProps) => { ); -}; - -export default InputLabel; +}); diff --git a/src/components/elements/Tabs/Default/TabButton.tsx b/src/components/elements/Tabs/Default/TabButton.tsx index cdb96a69b..3980b1953 100644 --- a/src/components/elements/Tabs/Default/TabButton.tsx +++ b/src/components/elements/Tabs/Default/TabButton.tsx @@ -1,5 +1,5 @@ import classNames from "classnames"; -import { ButtonHTMLAttributes, DetailedHTMLProps } from "react"; +import { ButtonHTMLAttributes, DetailedHTMLProps, forwardRef } from "react"; import { When } from "react-if"; import Text from "@/components/elements/Text/Text"; @@ -16,40 +16,36 @@ export interface TabButtonProps extends DetailedHTMLProps { - return ( - - ); -}; +export const TabButton = forwardRef( + ({ index, item, lastItem, selected, className, textVariant, ...buttonProps }: TabButtonProps, ref) => { + // @ts-ignore + buttonProps["ref"] = ref; + return ( + + ); + } +); diff --git a/src/components/elements/Text/Text.tsx b/src/components/elements/Text/Text.tsx index 1d36ee0f7..34298a0b7 100644 --- a/src/components/elements/Text/Text.tsx +++ b/src/components/elements/Text/Text.tsx @@ -1,6 +1,6 @@ import cn from "classnames"; import _ from "lodash"; -import { HTMLProps, ReactNode } from "react"; +import { ForwardedRef, forwardRef, HTMLProps, ReactElement, ReactNode, Ref } from "react"; import { TextVariants } from "@/types/common"; @@ -13,7 +13,7 @@ export type TextProps = HTMLProps & { capitalize?: boolean; }; -function Text(props: TextProps): JSX.Element { +function Text(props: TextProps, ref: ForwardedRef): JSX.Element { const { as: As, className, children, variant, capitalize, containHtml, ...rest } = props; const Component = As || "p"; @@ -23,6 +23,7 @@ function Text(props: TextProps): JSX.Element { return ( (props: TextProps): JSX.Element { ); } else return ( - + {typeof children === "string" ? _.unescape(children) : children} ); } -export default Text; +export default forwardRef(Text) as (p: TextProps & { ref?: Ref }) => ReactElement; diff --git a/src/components/extensive/List/List.tsx b/src/components/extensive/List/List.tsx index 09bb7a9e7..3ccc82ef0 100644 --- a/src/components/extensive/List/List.tsx +++ b/src/components/extensive/List/List.tsx @@ -38,7 +38,7 @@ const List = , U>({ {startListElement ? {startListElement} : <>} {items.map((item, i, array) => ( - + {render(item, i, array)} {dividerComponent} From 3e9dd6727214668e2a3cec1e3974136a961ecb12 Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Mon, 27 May 2024 16:46:23 -0700 Subject: [PATCH 17/27] [TM-786] Set up test of github actions --- .github/workflows/pull-request.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .github/workflows/pull-request.yml diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml new file mode 100644 index 000000000..b291ad262 --- /dev/null +++ b/.github/workflows/pull-request.yml @@ -0,0 +1,16 @@ +name: pull-request +on: workflow_dispatch +# pull_request: +# branches: [main, staging, release/**] +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + - name: Install modules + run: yarn + - name: Test + run: yarn run jest --ci From cb1a2a079f7faecaed187db6651a93cdc4eea8ad Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Mon, 27 May 2024 16:48:30 -0700 Subject: [PATCH 18/27] [TM-786] Add .nvmrc to match our node version on prod --- .nvmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..603606bc9 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +18.17.0 From 4f549592469b1f9ad5a0c2cc07e2d4ffffa86011 Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Mon, 27 May 2024 16:51:17 -0700 Subject: [PATCH 19/27] [TM-786] Run test action on pull requests. --- .github/workflows/pull-request.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index b291ad262..194b0c659 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -1,7 +1,7 @@ name: pull-request -on: workflow_dispatch -# pull_request: -# branches: [main, staging, release/**] +on: + pull_request: + branches: [main, staging, release/**] jobs: test: runs-on: ubuntu-latest From 4ba0d878ddeee6d7e3607ca698e43ffcecc07086 Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Mon, 27 May 2024 21:18:54 -0700 Subject: [PATCH 20/27] [TM-786] Fix some generic typing. --- src/components/elements/Text/Text.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/elements/Text/Text.tsx b/src/components/elements/Text/Text.tsx index 34298a0b7..0baac7c40 100644 --- a/src/components/elements/Text/Text.tsx +++ b/src/components/elements/Text/Text.tsx @@ -1,6 +1,6 @@ import cn from "classnames"; import _ from "lodash"; -import { ForwardedRef, forwardRef, HTMLProps, ReactElement, ReactNode, Ref } from "react"; +import { ForwardedRef, forwardRef, HTMLProps, LegacyRef, ReactElement, ReactNode } from "react"; import { TextVariants } from "@/types/common"; @@ -13,7 +13,7 @@ export type TextProps = HTMLProps & { capitalize?: boolean; }; -function Text(props: TextProps, ref: ForwardedRef): JSX.Element { +function Text(props: TextProps, ref: ForwardedRef): JSX.Element { const { as: As, className, children, variant, capitalize, containHtml, ...rest } = props; const Component = As || "p"; @@ -37,4 +37,4 @@ function Text(props: TextProps, ref: ForwardedRef): JSX.Element { ); } -export default forwardRef(Text) as (p: TextProps & { ref?: Ref }) => ReactElement; +export default forwardRef(Text) as (p: TextProps & { ref?: LegacyRef }) => ReactElement; From 82af91801faa16234b4f213cc058a8774e08cd9e Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Mon, 27 May 2024 21:19:23 -0700 Subject: [PATCH 21/27] [TM-786] Fix a hook dependency warning. --- src/components/extensive/WorkdayCollapseGrid/WorkdaySection.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/extensive/WorkdayCollapseGrid/WorkdaySection.tsx b/src/components/extensive/WorkdayCollapseGrid/WorkdaySection.tsx index 7a303c49b..db64af006 100644 --- a/src/components/extensive/WorkdayCollapseGrid/WorkdaySection.tsx +++ b/src/components/extensive/WorkdayCollapseGrid/WorkdaySection.tsx @@ -68,7 +68,7 @@ const WorkdaySection = ({ demographics, type, variant, onChange }: WorkdaySectio updatedDemographics.splice(index, 1); onChange(updatedDemographics); }, - [demographics, onChange, type] + [demographics, onChange] ); // Tailwind doesn't supply classes for high row counts, so we apply this prop ourselves. From 9c09232b6a8ef762e7a5c302d1c3e30156521818 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 22:55:45 +0000 Subject: [PATCH 22/27] chore(deps): bump pug from 3.0.2 to 3.0.3 Bumps [pug](https://github.com/pugjs/pug) from 3.0.2 to 3.0.3. - [Release notes](https://github.com/pugjs/pug/releases) - [Commits](https://github.com/pugjs/pug/compare/pug@3.0.2...pug@3.0.3) --- updated-dependencies: - dependency-name: pug dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index 505c07800..c18015ffc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12798,17 +12798,17 @@ pug-attrs@^3.0.0: js-stringify "^1.0.2" pug-runtime "^3.0.0" -pug-code-gen@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.2.tgz#ad190f4943133bf186b60b80de483100e132e2ce" - integrity sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg== +pug-code-gen@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.3.tgz#58133178cb423fe1716aece1c1da392a75251520" + integrity sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw== dependencies: constantinople "^4.0.1" doctypes "^1.1.0" js-stringify "^1.0.2" pug-attrs "^3.0.0" - pug-error "^2.0.0" - pug-runtime "^3.0.0" + pug-error "^2.1.0" + pug-runtime "^3.0.1" void-elements "^3.1.0" with "^7.0.0" @@ -12817,6 +12817,11 @@ pug-error@^2.0.0: resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.0.0.tgz#5c62173cb09c34de2a2ce04f17b8adfec74d8ca5" integrity sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ== +pug-error@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.1.0.tgz#17ea37b587b6443d4b8f148374ec27b54b406e55" + integrity sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg== + pug-filters@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e" @@ -12879,11 +12884,11 @@ pug-walk@^2.0.0: integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== pug@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.2.tgz#f35c7107343454e43bc27ae0ff76c731b78ea535" - integrity sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw== + version "3.0.3" + resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.3.tgz#e18324a314cd022883b1e0372b8af3a1a99f7597" + integrity sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g== dependencies: - pug-code-gen "^3.0.2" + pug-code-gen "^3.0.3" pug-filters "^4.0.0" pug-lexer "^5.0.1" pug-linker "^4.0.0" From d18ae245e7518dd43664765544646d1ba6ab302a Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Wed, 29 May 2024 09:36:52 -0700 Subject: [PATCH 23/27] [TM-938] Include the self-reported numbers in the project/site high level metrics. --- .../components/ProjectInformationAside/HighLevelMetrics.tsx | 3 +++ .../components/SiteInformationAside/HighLevelMetrics.tsx | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/admin/components/ResourceTabs/InformationTab/components/ProjectInformationAside/HighLevelMetrics.tsx b/src/admin/components/ResourceTabs/InformationTab/components/ProjectInformationAside/HighLevelMetrics.tsx index d7b65969d..5bb288d1d 100644 --- a/src/admin/components/ResourceTabs/InformationTab/components/ProjectInformationAside/HighLevelMetrics.tsx +++ b/src/admin/components/ResourceTabs/InformationTab/components/ProjectInformationAside/HighLevelMetrics.tsx @@ -29,6 +29,9 @@ const HighLevelMetics: FC = () => { + + + diff --git a/src/admin/components/ResourceTabs/InformationTab/components/SiteInformationAside/HighLevelMetrics.tsx b/src/admin/components/ResourceTabs/InformationTab/components/SiteInformationAside/HighLevelMetrics.tsx index 6311dbeb2..551aaa8ff 100644 --- a/src/admin/components/ResourceTabs/InformationTab/components/SiteInformationAside/HighLevelMetrics.tsx +++ b/src/admin/components/ResourceTabs/InformationTab/components/SiteInformationAside/HighLevelMetrics.tsx @@ -27,6 +27,9 @@ const HighLevelMetics: FC = () => { + + + From 561bed4d3d0688d547579d628a45e4609155fac7 Mon Sep 17 00:00:00 2001 From: Nathan Curtis Date: Wed, 29 May 2024 10:28:13 -0700 Subject: [PATCH 24/27] [TM-938] Update labels after product review. --- .../ProjectInformationAside/HighLevelMetrics.tsx | 8 ++++---- .../components/SiteInformationAside/HighLevelMetrics.tsx | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/admin/components/ResourceTabs/InformationTab/components/ProjectInformationAside/HighLevelMetrics.tsx b/src/admin/components/ResourceTabs/InformationTab/components/ProjectInformationAside/HighLevelMetrics.tsx index 5bb288d1d..ee72b1cfe 100644 --- a/src/admin/components/ResourceTabs/InformationTab/components/ProjectInformationAside/HighLevelMetrics.tsx +++ b/src/admin/components/ResourceTabs/InformationTab/components/ProjectInformationAside/HighLevelMetrics.tsx @@ -26,12 +26,12 @@ const HighLevelMetics: FC = () => { - - - - + + + + diff --git a/src/admin/components/ResourceTabs/InformationTab/components/SiteInformationAside/HighLevelMetrics.tsx b/src/admin/components/ResourceTabs/InformationTab/components/SiteInformationAside/HighLevelMetrics.tsx index 551aaa8ff..d6fa709eb 100644 --- a/src/admin/components/ResourceTabs/InformationTab/components/SiteInformationAside/HighLevelMetrics.tsx +++ b/src/admin/components/ResourceTabs/InformationTab/components/SiteInformationAside/HighLevelMetrics.tsx @@ -24,12 +24,12 @@ const HighLevelMetics: FC = () => { - - - - + + + + From 0384387883877d8931415bfc436ad5ecc1e65a1c Mon Sep 17 00:00:00 2001 From: Limber Mamani Vallejos Date: Wed, 29 May 2024 14:06:17 -0400 Subject: [PATCH 25/27] feat: TM-936 change HBF -> Harit Bharat Fund --- src/pages/nursery/[uuid]/index.page.tsx | 2 +- src/pages/project/[uuid]/index.page.tsx | 2 +- src/pages/site/[uuid]/index.page.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/nursery/[uuid]/index.page.tsx b/src/pages/nursery/[uuid]/index.page.tsx index 2560abd40..364552260 100644 --- a/src/pages/nursery/[uuid]/index.page.tsx +++ b/src/pages/nursery/[uuid]/index.page.tsx @@ -96,7 +96,7 @@ const NurseryDetailPage = () => { nursery.framework_key === "ppc" ? t("Priceless Planet Coalition") : nursery.framework_key === "hbf" - ? "HBF" + ? "Harit Bharat Fund" : t("TerraFund") ]} hasBackButton={false} diff --git a/src/pages/project/[uuid]/index.page.tsx b/src/pages/project/[uuid]/index.page.tsx index 4b9d7bce0..8036db1b8 100644 --- a/src/pages/project/[uuid]/index.page.tsx +++ b/src/pages/project/[uuid]/index.page.tsx @@ -109,7 +109,7 @@ const ProjectDetailPage = () => { isPPC ? t("Priceless Planet Coalition") : isHBF - ? "HBF" + ? "Harit Bharat Fund" : isTerrafund ? t("TerraFund") : reportingFramework.name diff --git a/src/pages/site/[uuid]/index.page.tsx b/src/pages/site/[uuid]/index.page.tsx index f6904f40c..6debfea7c 100644 --- a/src/pages/site/[uuid]/index.page.tsx +++ b/src/pages/site/[uuid]/index.page.tsx @@ -81,7 +81,7 @@ const SiteDetailPage = () => { const subtitles = [ `${t("Organisation")}: ${site.organisation?.name}`, - isPPC ? t("Priceless Planet Coalition") : isHBF ? "HBF" : t("TerraFund") + isPPC ? t("Priceless Planet Coalition") : isHBF ? "Harit Bharat Fund" : t("TerraFund") ]; if (isPPC) { subtitles.push(t("Site ID: {id}", { id: site.ppc_external_id })); From 610c8e13f6a1ddb240d34f427d1794312f40e58c Mon Sep 17 00:00:00 2001 From: Limber Mamani Vallejos Date: Thu, 30 May 2024 10:27:20 -0400 Subject: [PATCH 26/27] feat: TM-936 change hbf -> Harit Bharat Fund to my projects page --- .../elements/Cards/ProjectCard/ProjectCard.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/elements/Cards/ProjectCard/ProjectCard.tsx b/src/components/elements/Cards/ProjectCard/ProjectCard.tsx index 1241271b6..cfc7d0f1a 100644 --- a/src/components/elements/Cards/ProjectCard/ProjectCard.tsx +++ b/src/components/elements/Cards/ProjectCard/ProjectCard.tsx @@ -56,6 +56,12 @@ const ProjectCard = ({ project, onDelete, title, children, className, ...rest }: ); }; + const frameworkNames: { [key: string]: string } = { + ppc: "Priceless Planet Coalition", + hbf: "Harit Bharat Fund", + terrafund: "TerraFund" + }; + return (

@@ -72,11 +78,7 @@ const ProjectCard = ({ project, onDelete, title, children, className, ...rest }:
{t("Framework")}:  - {project.framework_key === "ppc" - ? t("Priceless Planet Coalition") - : project.framework_key === "terrafund" - ? t("TerraFund") - : project.framework_key} + {frameworkNames[project.framework_key] ? t(frameworkNames[project.framework_key]) : project.framework_key}
From 9da6aa6e7735069b6ce35d537a812541fe38aa15 Mon Sep 17 00:00:00 2001 From: Jose Carlos Laura Ramirez Date: Thu, 30 May 2024 12:48:18 -0400 Subject: [PATCH 27/27] [TM-938] revert: change workdays_count to self_reported_workdays_count (#226) --- src/pages/project/[uuid]/tabs/Overview.tsx | 6 +++++- src/pages/site/[uuid]/tabs/Overview.tsx | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/pages/project/[uuid]/tabs/Overview.tsx b/src/pages/project/[uuid]/tabs/Overview.tsx index a1c11230d..40556f5f4 100644 --- a/src/pages/project/[uuid]/tabs/Overview.tsx +++ b/src/pages/project/[uuid]/tabs/Overview.tsx @@ -52,7 +52,11 @@ const ProjectOverviewTab = ({ project }: ProjectOverviewTabProps) => {
- + { >
- +