From 3b62349b5969989098166410fe6d3bf7ab69106f Mon Sep 17 00:00:00 2001 From: mariaozamiz Date: Mon, 1 Apr 2024 11:27:27 +0200 Subject: [PATCH 1/5] chore: add missing title and container styles --- src/webapp/pages/analysis/AnalysisPage.tsx | 22 ++++++++++--- src/webapp/pages/analysis/SummaryStep.tsx | 36 ++++++++++++++++++++++ 2 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 src/webapp/pages/analysis/SummaryStep.tsx diff --git a/src/webapp/pages/analysis/AnalysisPage.tsx b/src/webapp/pages/analysis/AnalysisPage.tsx index 35ac0ad..502a953 100644 --- a/src/webapp/pages/analysis/AnalysisPage.tsx +++ b/src/webapp/pages/analysis/AnalysisPage.tsx @@ -12,7 +12,8 @@ import i18n from "$/utils/i18n"; import _ from "$/domain/entities/generic/Collection"; import { QualityAnalysisSection } from "$/domain/entities/QualityAnalysisSection"; import { Maybe } from "$/utils/ts-utils"; -import { IssueTable } from "$/webapp/components/issues/IssueTable"; +import { Typography } from "@material-ui/core"; +import { SummaryStep } from "./SummaryStep"; function buildStepsFromSections( analysis: QualityAnalysis, @@ -52,9 +53,7 @@ function buildStepsFromSections( { key: "all", label: i18n.t("Summary"), - component: () => ( - - ), + component: () => , completed: false, }, ]; @@ -106,3 +105,18 @@ export type PageStepProps = { }; export type UpdateAnalysisState = React.Dispatch>>; + +const Container = styled.section``; + +const TitleContainer = styled.div` + min-height: 5rem; + display: flex; + align-items: center; + margin-block-end: 1.75rem; +`; + +const StyledTypography = styled(Typography)` + font-size: 1.2rem; + font-weight: 500; + vertical-align: center; +`; diff --git a/src/webapp/pages/analysis/SummaryStep.tsx b/src/webapp/pages/analysis/SummaryStep.tsx new file mode 100644 index 0000000..b8388b8 --- /dev/null +++ b/src/webapp/pages/analysis/SummaryStep.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import { Typography } from "@material-ui/core"; +import styled from "styled-components"; +import { IssueTable } from "$/webapp/components/issues/IssueTable"; +import { QualityAnalysis } from "$/domain/entities/QualityAnalysis"; + +interface PageProps { + name: string; + analysis: QualityAnalysis; +} + +export const SummaryStep: React.FC = React.memo(({ name, analysis }) => { + return ( + + + {name} + + + + ); +}); + +const Container = styled.section``; + +const TitleContainer = styled.div` + min-height: 5rem; + display: flex; + align-items: center; + margin-block-end: 1.75rem; +`; + +const StyledTypography = styled(Typography)` + font-size: 1.2rem; + font-weight: 500; + vertical-align: center; +`; From b7eebdbf57ec835b7e4c446ae9eab3c43cc3c488 Mon Sep 17 00:00:00 2001 From: mariaozamiz Date: Tue, 2 Apr 2024 19:21:11 +0200 Subject: [PATCH 2/5] fix: delete unused code --- src/webapp/pages/analysis/AnalysisPage.tsx | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/webapp/pages/analysis/AnalysisPage.tsx b/src/webapp/pages/analysis/AnalysisPage.tsx index 502a953..caf53c1 100644 --- a/src/webapp/pages/analysis/AnalysisPage.tsx +++ b/src/webapp/pages/analysis/AnalysisPage.tsx @@ -12,7 +12,6 @@ import i18n from "$/utils/i18n"; import _ from "$/domain/entities/generic/Collection"; import { QualityAnalysisSection } from "$/domain/entities/QualityAnalysisSection"; import { Maybe } from "$/utils/ts-utils"; -import { Typography } from "@material-ui/core"; import { SummaryStep } from "./SummaryStep"; function buildStepsFromSections( @@ -105,18 +104,3 @@ export type PageStepProps = { }; export type UpdateAnalysisState = React.Dispatch>>; - -const Container = styled.section``; - -const TitleContainer = styled.div` - min-height: 5rem; - display: flex; - align-items: center; - margin-block-end: 1.75rem; -`; - -const StyledTypography = styled(Typography)` - font-size: 1.2rem; - font-weight: 500; - vertical-align: center; -`; From 901a9e3235466ce99570040c81f4c3d7954c7791 Mon Sep 17 00:00:00 2001 From: mariaozamiz Date: Wed, 3 Apr 2024 17:03:39 +0200 Subject: [PATCH 3/5] chore: add filter --- src/data/repositories/IssueD2Repository.ts | 6 ++++ src/domain/repositories/IssueRepository.ts | 1 + src/domain/usecases/common/UCIssue.ts | 1 + src/domain/usecases/common/utils.ts | 1 + src/webapp/components/issues/IssueFilters.tsx | 23 +++++++++++++-- src/webapp/components/issues/IssueTable.tsx | 28 +++++++++++++------ src/webapp/pages/analysis/SummaryStep.tsx | 8 +++++- src/webapp/utils/issues.ts | 1 + 8 files changed, 56 insertions(+), 13 deletions(-) diff --git a/src/data/repositories/IssueD2Repository.ts b/src/data/repositories/IssueD2Repository.ts index 680fe17..9243eb7 100644 --- a/src/data/repositories/IssueD2Repository.ts +++ b/src/data/repositories/IssueD2Repository.ts @@ -399,6 +399,11 @@ export class IssueD2Repository implements IssueRepository { const followUpFilter = this.buildFollowUpFilter(filter.followUp); + const stepFilter = this.buildFilterMultipleValue( + filter.step, + this.metadata.dataElements.sectionNumber.id + ); + const allFilters = _([ numberFilter, periodsFilter, @@ -406,6 +411,7 @@ export class IssueD2Repository implements IssueRepository { actionsFilter, countriesFilter, followUpFilter, + stepFilter, ]) .compact() .value(); diff --git a/src/domain/repositories/IssueRepository.ts b/src/domain/repositories/IssueRepository.ts index 9d7877b..8b964e1 100644 --- a/src/domain/repositories/IssueRepository.ts +++ b/src/domain/repositories/IssueRepository.ts @@ -24,5 +24,6 @@ export type GetIssuesOptions = { sectionId: Maybe; id: Maybe; followUp: Maybe; + step: Maybe; }; }; diff --git a/src/domain/usecases/common/UCIssue.ts b/src/domain/usecases/common/UCIssue.ts index 2303537..10d0357 100644 --- a/src/domain/usecases/common/UCIssue.ts +++ b/src/domain/usecases/common/UCIssue.ts @@ -81,6 +81,7 @@ export class UCIssue { status: undefined, id: undefined, followUp: undefined, + step: undefined, }, pagination: { page: 1, pageSize: 10 }, sorting: { field: "number", order: "asc" }, diff --git a/src/domain/usecases/common/utils.ts b/src/domain/usecases/common/utils.ts index 12ced4d..50f45ef 100644 --- a/src/domain/usecases/common/utils.ts +++ b/src/domain/usecases/common/utils.ts @@ -55,6 +55,7 @@ export function getIssues( status: undefined, id: undefined, followUp: undefined, + step: undefined, }, pagination: { page: 1, pageSize: 10 }, sorting: { field: "number", order: "asc" }, diff --git a/src/webapp/components/issues/IssueFilters.tsx b/src/webapp/components/issues/IssueFilters.tsx index 2b3399d..1c1299a 100644 --- a/src/webapp/components/issues/IssueFilters.tsx +++ b/src/webapp/components/issues/IssueFilters.tsx @@ -46,8 +46,9 @@ function extractCountriesNames(countries: Country[], totalCountriesSelected: num export const IssueFilters: React.FC = props => { const { api, compositionRoot, currentUser, metadata } = useAppContext(); + const snackbar = useSnackbar(); - const { initialFilters, onChange } = props; + const { initialFilters, onChange, showStepFilter } = props; const [openCountry, setOpenCountry] = React.useState(false); const [selectedCountriesIds, setSelectedCountriesIds] = React.useState([]); const [countries, setCountries] = React.useState([]); @@ -69,6 +70,14 @@ export const IssueFilters: React.FC = props => { return { value: option.code, text: option.name }; }); + // const step = metadata.programs.qualityIssues.programStages.map(option => { + // return { value: option.code, text: option.name }; + // }); + + const step = metadata.programs.qualityIssues.programStages.map((option, index) => { + return { value: String(index + 1), text: option.name }; + }); + const onClickCountry = () => { setOpenCountry(true); }; @@ -124,7 +133,6 @@ export const IssueFilters: React.FC = props => { value={countryNamesString} /> - onFilterChange(values, "periods")} @@ -145,7 +153,6 @@ export const IssueFilters: React.FC = props => { options={actions} value={initialFilters.actions || []} /> - = props => { onChange={value => onFilterChange(value, "followUp")} value={initialFilters.followUp} /> + {showStepFilter ? ( + onFilterChange(values, "step")} + options={step} + value={initialFilters.step || []} + /> + ) : null} ); }; @@ -160,6 +175,7 @@ export const IssueFilters: React.FC = props => { type IssueFiltersProps = { initialFilters: IssueFilterState; onChange: React.Dispatch>; + showStepFilter?: boolean; }; export type IssueFilterState = { @@ -168,6 +184,7 @@ export type IssueFilterState = { followUp: Maybe; periods: Period[]; status: Maybe; + step: Maybe; }; const FilterContainer = styled.div` diff --git a/src/webapp/components/issues/IssueTable.tsx b/src/webapp/components/issues/IssueTable.tsx index 62d2306..1e1d8c7 100644 --- a/src/webapp/components/issues/IssueTable.tsx +++ b/src/webapp/components/issues/IssueTable.tsx @@ -230,7 +230,6 @@ export function useGetRows( ) { const { compositionRoot } = useAppContext(); const [loading, setLoading] = React.useState(false); - const getRows = React.useCallback>( (search, pagination, sorting) => { return new Promise((resolve, reject) => { @@ -255,6 +254,7 @@ export function useGetRows( sectionId: sectionId, id: undefined, followUp: filters.followUp, + step: filters.step, }, }) .run( @@ -270,16 +270,17 @@ export function useGetRows( }); }, [ + reloadKey, + refreshIssue, compositionRoot.summary.get, filters.actions, - filters.followUp, + filters.countries, filters.periods, filters.status, - filters.countries, - sectionId, + filters.followUp, + filters.step, analysisId, - reloadKey, - refreshIssue, + sectionId, ] ); @@ -287,7 +288,7 @@ export function useGetRows( } export const IssueTable: React.FC = React.memo(props => { - const { analysisId, reload, sectionId, showExport } = props; + const { analysisId, reload, sectionId, showExport, showStepFilter } = props; const [filters, setFilters] = React.useState(initialFilters); const { tableConfig, refresh } = useTableConfig({ @@ -295,13 +296,20 @@ export const IssueTable: React.FC = React.memo(props => { analysisId: analysisId, sectionId: sectionId, showExport: showExport, + showStepFilter: showStepFilter, }); const { getRows, loading } = useGetRows(filters, reload, analysisId, sectionId, refresh); const config = useObjectsTable(tableConfig, getRows); const filterComponents = React.useMemo(() => { - return ; - }, [filters]); + return ( + + ); + }, [filters, showStepFilter]); return ; }); @@ -311,6 +319,7 @@ type IssueTableProps = { reload: number; sectionId: Maybe; showExport?: boolean; + showStepFilter?: boolean; }; type UseTableConfigProps = { @@ -318,6 +327,7 @@ type UseTableConfigProps = { filters: GetIssuesOptions["filters"]; sectionId: Maybe; showExport?: boolean; + showStepFilter?: boolean; }; type UseCopyContactEmailsProps = { onSuccess?: () => void }; diff --git a/src/webapp/pages/analysis/SummaryStep.tsx b/src/webapp/pages/analysis/SummaryStep.tsx index b8388b8..7884c1a 100644 --- a/src/webapp/pages/analysis/SummaryStep.tsx +++ b/src/webapp/pages/analysis/SummaryStep.tsx @@ -15,7 +15,13 @@ export const SummaryStep: React.FC = React.memo(({ name, analysis }) {name} - + ); }); diff --git a/src/webapp/utils/issues.ts b/src/webapp/utils/issues.ts index 03a8c3d..421d803 100644 --- a/src/webapp/utils/issues.ts +++ b/src/webapp/utils/issues.ts @@ -10,4 +10,5 @@ export const initialFilters: GetIssuesOptions["filters"] = { sectionId: "", id: undefined, followUp: undefined, + step: [], }; From 398f7d952d13f811d331424a433f40529ceb15c6 Mon Sep 17 00:00:00 2001 From: mariaozamiz Date: Thu, 4 Apr 2024 09:08:33 +0200 Subject: [PATCH 4/5] chore: update i18n --- i18n/en.pot | 7 +++++-- i18n/es.po | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/i18n/en.pot b/i18n/en.pot index f8500ea..30bda97 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2024-03-26T21:46:55.700Z\n" -"PO-Revision-Date: 2024-03-26T21:46:55.700Z\n" +"POT-Creation-Date: 2024-04-03T15:04:11.778Z\n" +"PO-Revision-Date: 2024-04-03T15:04:11.779Z\n" msgid "ID" msgstr "" @@ -136,6 +136,9 @@ msgstr "" msgid "Periods" msgstr "" +msgid "Step" +msgstr "" + msgid "Copying Contact Emails and marking for Follow-Up" msgstr "" diff --git a/i18n/es.po b/i18n/es.po index 32bbf08..b47d5e4 100644 --- a/i18n/es.po +++ b/i18n/es.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: i18next-conv\n" -"POT-Creation-Date: 2024-03-26T21:46:55.700Z\n" +"POT-Creation-Date: 2024-04-03T15:04:11.778Z\n" "PO-Revision-Date: 2018-10-25T09:02:35.143Z\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -136,6 +136,9 @@ msgstr "" msgid "Periods" msgstr "" +msgid "Step" +msgstr "" + msgid "Copying Contact Emails and marking for Follow-Up" msgstr "" From 1a15e16c640edeaec09eb1bbae02e04c5e625056 Mon Sep 17 00:00:00 2001 From: mariaozamiz Date: Thu, 4 Apr 2024 09:25:26 +0200 Subject: [PATCH 5/5] fix: delete commented code --- src/webapp/components/issues/IssueFilters.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/webapp/components/issues/IssueFilters.tsx b/src/webapp/components/issues/IssueFilters.tsx index 1c1299a..d3af468 100644 --- a/src/webapp/components/issues/IssueFilters.tsx +++ b/src/webapp/components/issues/IssueFilters.tsx @@ -70,10 +70,6 @@ export const IssueFilters: React.FC = props => { return { value: option.code, text: option.name }; }); - // const step = metadata.programs.qualityIssues.programStages.map(option => { - // return { value: option.code, text: option.name }; - // }); - const step = metadata.programs.qualityIssues.programStages.map((option, index) => { return { value: String(index + 1), text: option.name }; });