From e181ce3fce95c760b7d2e920642349495aa3f4f3 Mon Sep 17 00:00:00 2001 From: "Yassine R." Date: Wed, 13 Aug 2025 21:24:56 +0200 Subject: [PATCH] fix(frontend): reorganize user-usager --- .../classes/UsagerCountByStatus.class.ts} | 0 packages/common/src/search/classes/index.ts | 1 + .../UsagersFilterCriteria.ts | 0 .../modules/manage-usagers/classes/index.ts | 2 + .../manage-filters.component.ts | 2 +- .../manage-usagers-page.component.ts | 14 +- .../manage-usagers-table.component.spec.ts | 3 +- .../manage-usagers-table.component.ts | 2 +- .../components/usager-filter/index.ts | 3 - .../usager-filter/services/index.ts | 5 - .../{ => services}/usagersFilter.service.ts | 16 +- .../USAGER_DEADLINES.const.ts | 0 .../manage-usagers/pipes/sort-label.pipe.ts | 2 +- .../services/manage-usagers.service.ts | 2 +- .../calculateUsagersCountByStatus.service.ts | 4 +- .../usager-filter}/checkers/index.ts | 1 + .../usagerEcheanceChecker.service.spec.ts | 2 +- .../checkers/usagerEcheanceChecker.service.ts | 6 +- ...agerInteractionTypeChecker.service.spec.ts | 2 +- .../usagerInteractionTypeChecker.service.ts | 4 +- .../usagerPassageChecker.service.spec.ts | 2 +- .../checkers/usagerPassageChecker.service.ts | 6 +- .../usagerStatutChecker.service.spec.ts | 2 +- .../checkers/usagerStatutChecker.service.ts | 4 +- .../services/usager-filter/index.ts | 6 + .../usagersFilter.service.spec.ts | 3 +- .../usager-filter/usagersFilter.service.ts | 152 ++++++++++++++++++ .../usagersSearchStringFilter.service.ts | 4 +- .../usagersSorter.service.spec.ts | 4 +- .../usager-filter}/usagersSorter.service.ts | 4 +- .../table-head-sort-icon.component.ts | 4 +- .../table-head-sort.component.ts | 3 +- 32 files changed, 210 insertions(+), 55 deletions(-) rename packages/{frontend/src/app/modules/manage-usagers/components/usager-filter/UsagersCountByStatus.type.ts => common/src/search/classes/UsagerCountByStatus.class.ts} (100%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter => classes}/UsagersFilterCriteria.ts (100%) create mode 100644 packages/frontend/src/app/modules/manage-usagers/classes/index.ts delete mode 100644 packages/frontend/src/app/modules/manage-usagers/components/usager-filter/index.ts delete mode 100644 packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/index.ts rename packages/frontend/src/app/modules/manage-usagers/components/usager-filter/{ => services}/usagersFilter.service.ts (94%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter => constants}/USAGER_DEADLINES.const.ts (100%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/calculateUsagersCountByStatus.service.ts (84%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/checkers/index.ts (75%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/checkers/usagerEcheanceChecker.service.spec.ts (98%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/checkers/usagerEcheanceChecker.service.ts (75%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/checkers/usagerInteractionTypeChecker.service.spec.ts (90%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/checkers/usagerInteractionTypeChecker.service.ts (70%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/checkers/usagerPassageChecker.service.spec.ts (97%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/checkers/usagerPassageChecker.service.ts (71%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/checkers/usagerStatutChecker.service.spec.ts (90%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/checkers/usagerStatutChecker.service.ts (71%) create mode 100644 packages/frontend/src/app/modules/manage-usagers/services/usager-filter/index.ts rename packages/frontend/src/app/modules/manage-usagers/{components => services}/usager-filter/usagersFilter.service.spec.ts (98%) create mode 100644 packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersFilter.service.ts rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/usagersSearchStringFilter.service.ts (92%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/usagersSorter.service.spec.ts (97%) rename packages/frontend/src/app/modules/manage-usagers/{components/usager-filter/services => services/usager-filter}/usagersSorter.service.ts (93%) diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/UsagersCountByStatus.type.ts b/packages/common/src/search/classes/UsagerCountByStatus.class.ts similarity index 100% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/UsagersCountByStatus.type.ts rename to packages/common/src/search/classes/UsagerCountByStatus.class.ts diff --git a/packages/common/src/search/classes/index.ts b/packages/common/src/search/classes/index.ts index 4efad967ae..56ff497c97 100644 --- a/packages/common/src/search/classes/index.ts +++ b/packages/common/src/search/classes/index.ts @@ -1,2 +1,3 @@ //@index('./*', f => `export * from '${f.path}'`) export * from "./Search.class"; +export * from "./UsagerCountByStatus.class"; diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/UsagersFilterCriteria.ts b/packages/frontend/src/app/modules/manage-usagers/classes/UsagersFilterCriteria.ts similarity index 100% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/UsagersFilterCriteria.ts rename to packages/frontend/src/app/modules/manage-usagers/classes/UsagersFilterCriteria.ts diff --git a/packages/frontend/src/app/modules/manage-usagers/classes/index.ts b/packages/frontend/src/app/modules/manage-usagers/classes/index.ts new file mode 100644 index 0000000000..bb855ea89e --- /dev/null +++ b/packages/frontend/src/app/modules/manage-usagers/classes/index.ts @@ -0,0 +1,2 @@ +// @index('./*', f => `export * from '${f.path}'`) +export * from "./UsagersFilterCriteria"; diff --git a/packages/frontend/src/app/modules/manage-usagers/components/manage-filters/manage-filters.component.ts b/packages/frontend/src/app/modules/manage-usagers/components/manage-filters/manage-filters.component.ts index 7429681cb6..9488a78c66 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/manage-filters/manage-filters.component.ts +++ b/packages/frontend/src/app/modules/manage-usagers/components/manage-filters/manage-filters.component.ts @@ -9,7 +9,7 @@ import { import { UsagersFilterCriteria, UsagersFilterCriteriaSortKey, -} from "../usager-filter/UsagersFilterCriteria"; +} from "../../classes/UsagersFilterCriteria"; import { extractDeadlines, UsagersFilterCriteriaDernierPassage, diff --git a/packages/frontend/src/app/modules/manage-usagers/components/manage-usagers-page/manage-usagers-page.component.ts b/packages/frontend/src/app/modules/manage-usagers/components/manage-usagers-page/manage-usagers-page.component.ts index 1f6c27f106..aef71e985d 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/manage-usagers-page/manage-usagers-page.component.ts +++ b/packages/frontend/src/app/modules/manage-usagers/components/manage-usagers-page/manage-usagers-page.component.ts @@ -39,12 +39,6 @@ import { import { UsagerFormModel } from "../../../usager-shared/interfaces"; -import { - UsagersCountByStatus, - usagersFilter, - UsagersFilterCriteria, - UsagersFilterCriteriaSortKey, -} from "../usager-filter"; import { Store } from "@ngrx/store"; import { ManageUsagersService } from "../../services/manage-usagers.service"; import { @@ -53,14 +47,20 @@ import { SortValues, UsagersFilterCriteriaStatut, UserStructure, + UsagersCountByStatus, } from "@domifa/common"; import { MatomoTracker } from "ngx-matomo-client"; import { AuthService, CustomToastService } from "../../../shared/services"; import { UsagerLight } from "../../../../../_common/model"; +import { + UsagersFilterCriteria, + UsagersFilterCriteriaSortKey, +} from "../../classes"; import { calculateUsagersCountByStatus, + usagersFilter, usagersSorter, -} from "../usager-filter/services"; +} from "../../services/usager-filter"; const FIVE_MINUTES = 5 * 60 * 1000; const STORAGE_KEY = "SEARCH"; diff --git a/packages/frontend/src/app/modules/manage-usagers/components/manage-usagers-table/manage-usagers-table.component.spec.ts b/packages/frontend/src/app/modules/manage-usagers/components/manage-usagers-table/manage-usagers-table.component.spec.ts index 76fd0d107a..8188de9926 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/manage-usagers-table/manage-usagers-table.component.spec.ts +++ b/packages/frontend/src/app/modules/manage-usagers/components/manage-usagers-table/manage-usagers-table.component.spec.ts @@ -8,8 +8,9 @@ import { MATOMO_INJECTORS, _usagerReducer } from "../../../../shared"; import { StoreModule } from "@ngrx/store"; import { APP_BASE_HREF } from "@angular/common"; import { CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { UsagersFilterCriteria } from "../usager-filter"; + import { Subject } from "rxjs"; +import { UsagersFilterCriteria } from "../../classes"; describe("ManageUsagersTableComponent", () => { let component: ManageUsagersTableComponent; diff --git a/packages/frontend/src/app/modules/manage-usagers/components/manage-usagers-table/manage-usagers-table.component.ts b/packages/frontend/src/app/modules/manage-usagers/components/manage-usagers-table/manage-usagers-table.component.ts index e2c5807643..5d8d539309 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/manage-usagers-table/manage-usagers-table.component.ts +++ b/packages/frontend/src/app/modules/manage-usagers/components/manage-usagers-table/manage-usagers-table.component.ts @@ -20,7 +20,6 @@ import { import { fadeInOut } from "../../../../shared"; import { UsagerFormModel } from "../../../usager-shared/interfaces"; -import { UsagersFilterCriteria } from "../usager-filter"; import { Router } from "@angular/router"; import { AuthService } from "../../../shared/services"; import { getUrlUsagerProfil } from "../../../usager-shared/utils"; @@ -34,6 +33,7 @@ import { faArrowUp, faSort, } from "@fortawesome/free-solid-svg-icons"; +import { UsagersFilterCriteria } from "../../classes"; @Component({ animations: [fadeInOut], diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/index.ts b/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/index.ts deleted file mode 100644 index f3e18bcb25..0000000000 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./UsagersCountByStatus.type"; -export * from "./usagersFilter.service"; -export * from "./UsagersFilterCriteria"; diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/index.ts b/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/index.ts deleted file mode 100644 index f26897cc5e..0000000000 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -// @index('./*.service.ts', f => `export * from '${f.path}'`) -export * from "./calculateUsagersCountByStatus.service"; -export * from "./usagersSearchStringFilter.service"; -export * from "./usagersSorter.service"; -export * from "./checkers"; diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/usagersFilter.service.ts b/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/usagersFilter.service.ts similarity index 94% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/usagersFilter.service.ts rename to packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/usagersFilter.service.ts index a353e39073..261ace5d06 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/usagersFilter.service.ts +++ b/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/usagersFilter.service.ts @@ -1,20 +1,20 @@ import { - buildWords, CriteriaSearchField, - ETAPE_ENTRETIEN, + buildWords, search, UsagersFilterCriteriaEntretien, + ETAPE_ENTRETIEN, } from "@domifa/common"; -import { UsagerLight } from "../../../../../_common/model"; +import { isValid, parse } from "date-fns"; +import { UsagerLight } from "../../../../../../_common/model"; +import { UsagersFilterCriteria } from "../../../classes/UsagersFilterCriteria"; import { getAttributes, - usagerEcheanceChecker, + usagerStatutChecker, usagerInteractionTypeChecker, + usagerEcheanceChecker, usagerPassageChecker, - usagerStatutChecker, -} from "./services"; -import { UsagersFilterCriteria } from "./UsagersFilterCriteria"; -import { isValid, parse } from "date-fns"; +} from "../../../services/usager-filter"; export const usagersFilter = { filter, diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/USAGER_DEADLINES.const.ts b/packages/frontend/src/app/modules/manage-usagers/constants/USAGER_DEADLINES.const.ts similarity index 100% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/USAGER_DEADLINES.const.ts rename to packages/frontend/src/app/modules/manage-usagers/constants/USAGER_DEADLINES.const.ts diff --git a/packages/frontend/src/app/modules/manage-usagers/pipes/sort-label.pipe.ts b/packages/frontend/src/app/modules/manage-usagers/pipes/sort-label.pipe.ts index e0a0ffd2c3..d4e6045d39 100644 --- a/packages/frontend/src/app/modules/manage-usagers/pipes/sort-label.pipe.ts +++ b/packages/frontend/src/app/modules/manage-usagers/pipes/sort-label.pipe.ts @@ -1,5 +1,5 @@ import { Pipe, PipeTransform } from "@angular/core"; -import { UsagersFilterCriteriaSortKey } from "../components/usager-filter"; +import { UsagersFilterCriteriaSortKey } from "../classes"; @Pipe({ name: "sortLabel", diff --git a/packages/frontend/src/app/modules/manage-usagers/services/manage-usagers.service.ts b/packages/frontend/src/app/modules/manage-usagers/services/manage-usagers.service.ts index 7009e242c5..954e0ea8b9 100644 --- a/packages/frontend/src/app/modules/manage-usagers/services/manage-usagers.service.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/manage-usagers.service.ts @@ -9,8 +9,8 @@ import { usagerActions, UsagerState, } from "../../../shared"; -import { UsagersFilterCriteria } from "../components/usager-filter"; import { UsagerLight } from "../../../../_common/model"; +import { UsagersFilterCriteria } from "../classes"; @Injectable({ providedIn: "root", diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/calculateUsagersCountByStatus.service.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/calculateUsagersCountByStatus.service.ts similarity index 84% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/calculateUsagersCountByStatus.service.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/calculateUsagersCountByStatus.service.ts index 200e36101c..cd16c75df5 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/calculateUsagersCountByStatus.service.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/calculateUsagersCountByStatus.service.ts @@ -1,5 +1,5 @@ -import { UsagersCountByStatus } from ".."; -import { UsagerLight } from "../../../../../../_common/model"; +import { UsagersCountByStatus } from "@domifa/common"; +import { UsagerLight } from "../../../../../_common/model"; export function calculateUsagersCountByStatus( usagers: UsagerLight[], diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/index.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/index.ts similarity index 75% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/index.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/index.ts index 09f833bd90..4ec8e2f3ff 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/index.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/index.ts @@ -1,3 +1,4 @@ +// @index(['./*.service.ts' ], f => `export * from '${f.path}'`) export * from "./usagerEcheanceChecker.service"; export * from "./usagerInteractionTypeChecker.service"; export * from "./usagerPassageChecker.service"; diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerEcheanceChecker.service.spec.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerEcheanceChecker.service.spec.ts similarity index 98% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerEcheanceChecker.service.spec.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerEcheanceChecker.service.spec.ts index 76658d6dab..ae461b7c63 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerEcheanceChecker.service.spec.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerEcheanceChecker.service.spec.ts @@ -1,5 +1,5 @@ import { addMonths, addYears, subDays, subMonths, subYears } from "date-fns"; -import { UsagerLight } from "../../../../../../../_common/model"; +import { UsagerLight } from "../../../../../../_common/model"; import { usagerEcheanceChecker } from "./usagerEcheanceChecker.service"; describe("usagerEcheanceChecker EXCEEDED", () => { diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerEcheanceChecker.service.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerEcheanceChecker.service.ts similarity index 75% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerEcheanceChecker.service.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerEcheanceChecker.service.ts index 443186b683..2e4b743767 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerEcheanceChecker.service.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerEcheanceChecker.service.ts @@ -1,6 +1,6 @@ -import { UsagerLight } from "../../../../../../../_common/model"; -import { UsagersFilterCriteria } from "../../UsagersFilterCriteria"; -import { USAGER_DEADLINES } from "../../USAGER_DEADLINES.const"; +import { UsagerLight } from "../../../../../../_common/model"; +import { UsagersFilterCriteria } from "../../../classes/UsagersFilterCriteria"; +import { USAGER_DEADLINES } from "../../../constants/USAGER_DEADLINES.const"; export const usagerEcheanceChecker = { check, diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerInteractionTypeChecker.service.spec.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerInteractionTypeChecker.service.spec.ts similarity index 90% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerInteractionTypeChecker.service.spec.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerInteractionTypeChecker.service.spec.ts index 0ac000c6f2..f4cd6770ce 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerInteractionTypeChecker.service.spec.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerInteractionTypeChecker.service.spec.ts @@ -1,4 +1,4 @@ -import { UsagerLight } from "../../../../../../../_common/model"; +import { UsagerLight } from "../../../../../../_common/model"; import { usagerInteractionTypeChecker } from "./usagerInteractionTypeChecker.service"; const usager1 = { diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerInteractionTypeChecker.service.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerInteractionTypeChecker.service.ts similarity index 70% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerInteractionTypeChecker.service.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerInteractionTypeChecker.service.ts index b5ce2dd35b..091bdbf37b 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerInteractionTypeChecker.service.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerInteractionTypeChecker.service.ts @@ -1,5 +1,5 @@ -import { UsagerLight } from "../../../../../../../_common/model"; -import { UsagersFilterCriteria } from "../../UsagersFilterCriteria"; +import { UsagerLight } from "../../../../../../_common/model"; +import { UsagersFilterCriteria } from "../../../classes/UsagersFilterCriteria"; export const usagerInteractionTypeChecker = { check, diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerPassageChecker.service.spec.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerPassageChecker.service.spec.ts similarity index 97% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerPassageChecker.service.spec.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerPassageChecker.service.spec.ts index 0d9ffbb245..5b2e0daebd 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerPassageChecker.service.spec.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerPassageChecker.service.spec.ts @@ -1,5 +1,5 @@ import { subDays, subMonths, subWeeks, subYears } from "date-fns"; -import { UsagerLight } from "../../../../../../../_common/model"; +import { UsagerLight } from "../../../../../../_common/model"; import { usagerPassageChecker } from "./usagerPassageChecker.service"; describe("usagerPassageChecker ", () => { diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerPassageChecker.service.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerPassageChecker.service.ts similarity index 71% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerPassageChecker.service.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerPassageChecker.service.ts index 76592c5bb3..8b75823e66 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerPassageChecker.service.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerPassageChecker.service.ts @@ -1,6 +1,6 @@ -import { UsagerLight } from "../../../../../../../_common/model"; -import { USAGER_DEADLINES } from "../../USAGER_DEADLINES.const"; -import { UsagersFilterCriteria } from "../../UsagersFilterCriteria"; +import { UsagerLight } from "../../../../../../_common/model"; +import { USAGER_DEADLINES } from "../../../constants/USAGER_DEADLINES.const"; +import { UsagersFilterCriteria } from "../../../classes/UsagersFilterCriteria"; export const usagerPassageChecker = { check, diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerStatutChecker.service.spec.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerStatutChecker.service.spec.ts similarity index 90% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerStatutChecker.service.spec.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerStatutChecker.service.spec.ts index 16dec92975..f3f706817f 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerStatutChecker.service.spec.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerStatutChecker.service.spec.ts @@ -1,5 +1,5 @@ import { UsagersFilterCriteriaStatut } from "@domifa/common"; -import { UsagerLight } from "../../../../../../../_common/model"; +import { UsagerLight } from "../../../../../../_common/model"; import { usagerStatutChecker } from "./usagerStatutChecker.service"; const usager1 = { diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerStatutChecker.service.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerStatutChecker.service.ts similarity index 71% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerStatutChecker.service.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerStatutChecker.service.ts index 7edf43d9e6..340c6ed0ca 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/checkers/usagerStatutChecker.service.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/checkers/usagerStatutChecker.service.ts @@ -1,6 +1,6 @@ import { UsagersFilterCriteriaStatut } from "@domifa/common"; -import { UsagerLight } from "../../../../../../../_common/model"; -import { UsagersFilterCriteria } from "../../UsagersFilterCriteria"; +import { UsagerLight } from "../../../../../../_common/model"; +import { UsagersFilterCriteria } from "../../../classes/UsagersFilterCriteria"; export const usagerStatutChecker = { check, diff --git a/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/index.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/index.ts new file mode 100644 index 0000000000..08bcf34327 --- /dev/null +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/index.ts @@ -0,0 +1,6 @@ +// @index(['./*.service.ts', './checkers/index.ts'], f => `export * from '${f.path}'`) +export * from "./calculateUsagersCountByStatus.service"; +export * from "./checkers/index"; +export * from "./usagersFilter.service"; +export * from "./usagersSearchStringFilter.service"; +export * from "./usagersSorter.service"; diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/usagersFilter.service.spec.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersFilter.service.spec.ts similarity index 98% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/usagersFilter.service.spec.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersFilter.service.spec.ts index 4bab56ebc0..273094573a 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/usagersFilter.service.spec.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersFilter.service.spec.ts @@ -2,9 +2,10 @@ import { CriteriaSearchField, UsagersFilterCriteriaStatut, } from "@domifa/common"; -import { UsagersFilterCriteria } from "."; + import { UsagerLight } from "../../../../../_common/model"; import { usagersFilter } from "./usagersFilter.service"; +import { UsagersFilterCriteria } from "../../classes"; const usagers: UsagerLight[] = [ { diff --git a/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersFilter.service.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersFilter.service.ts new file mode 100644 index 0000000000..b9ad6918be --- /dev/null +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersFilter.service.ts @@ -0,0 +1,152 @@ +import { + CriteriaSearchField, + buildWords, + search, + UsagersFilterCriteriaEntretien, + ETAPE_ENTRETIEN, +} from "@domifa/common"; +import { parse, isValid } from "date-fns"; +import { UsagerLight } from "../../../../../_common/model"; +import { UsagersFilterCriteria } from "../../classes"; +import { + usagerStatutChecker, + usagerInteractionTypeChecker, + usagerEcheanceChecker, + usagerPassageChecker, +} from "./checkers"; +import { getAttributes } from "./usagersSearchStringFilter.service"; + +export const usagersFilter = { + filter, +}; + +function filter( + usagers: UsagerLight[], + { + criteria, + }: { + criteria: UsagersFilterCriteria; + } +): UsagerLight[] { + return filterByCriteria(usagers, criteria); +} + +function filterByCriteria( + usagers: UsagerLight[], + criteria: UsagersFilterCriteria +): UsagerLight[] { + // Si pas de filtres ni de recherche textuelle après le traitement entretien + const activeFilters = buildActiveFilters(criteria); + + if (!criteria.searchString && !activeFilters.length) { + return usagers; + } + + let words = []; + + if (criteria.searchString) { + if (criteria.searchStringField === CriteriaSearchField.BIRTH_DATE) { + const parsedDate = parse( + criteria.searchString.trim(), + "dd/MM/yyyy", + new Date() + ); + + if (isValid(parsedDate)) { + words.push(criteria.searchString); + } + } else { + words = buildWords(criteria.searchString); + } + } + + return usagers.filter((usager) => { + if ( + activeFilters.length && + !activeFilters.every((filter) => filter(usager)) + ) { + return false; + } + + if (words.length === 0) { + return true; + } + + const attributes = getAttributes(usager, criteria); + + if (criteria.searchStringField === "BIRTH_DATE") { + return attributes.includes(criteria.searchString); + } + + return search.match(usager, { + index: 0, + getAttributes: () => attributes, + words, + withScore: false, + }).match; + }); +} + +function buildActiveFilters(criteria: UsagersFilterCriteria) { + // Créer un tableau de fonctions de filtrage actives + const activeFilters = []; + + if (criteria.entretien) { + activeFilters.push((usager: UsagerLight) => + filterByEntretien(usager, criteria.entretien) + ); + } + + if (typeof criteria.referrerId !== "undefined") { + activeFilters.push( + (usager: UsagerLight) => usager.referrerId === criteria.referrerId + ); + } + + if (criteria.statut) { + activeFilters.push((usager: UsagerLight) => + usagerStatutChecker.check({ usager, statut: criteria.statut }) + ); + } + + if (criteria.interactionType) { + activeFilters.push((usager: UsagerLight) => + usagerInteractionTypeChecker.check({ + usager, + interactionType: criteria.interactionType, + }) + ); + } + + if (criteria.echeance) { + activeFilters.push((usager: UsagerLight) => + usagerEcheanceChecker.check({ usager, echeance: criteria.echeance }) + ); + } + + if (criteria.lastInteractionDate) { + activeFilters.push((usager: UsagerLight) => + usagerPassageChecker.check({ + usager, + lastInteractionDate: criteria.lastInteractionDate, + }) + ); + } + return activeFilters; +} + +function filterByEntretien( + usager: UsagerLight, + entretien: UsagersFilterCriteriaEntretien +): boolean { + const now = new Date().toISOString().split("T")[0]; + + if (!usager.rdv?.dateRdv || usager.etapeDemande > ETAPE_ENTRETIEN) { + return false; + } + + const dateRdv = new Date(usager.rdv.dateRdv).toISOString().split("T")[0]; + return entretien === UsagersFilterCriteriaEntretien.COMING + ? dateRdv > now + : dateRdv < now; +} diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/usagersSearchStringFilter.service.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersSearchStringFilter.service.ts similarity index 92% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/usagersSearchStringFilter.service.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersSearchStringFilter.service.ts index a6975b2058..2d1c625568 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/usagersSearchStringFilter.service.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersSearchStringFilter.service.ts @@ -1,6 +1,6 @@ -import { UsagersFilterCriteria } from "../UsagersFilterCriteria"; +import { UsagersFilterCriteria } from "../../classes/UsagersFilterCriteria"; import { format, isValid, parseISO } from "date-fns"; -import { UsagerLight } from "../../../../../../_common/model"; +import { UsagerLight } from "../../../../../_common/model"; import { CriteriaSearchField, diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/usagersSorter.service.spec.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersSorter.service.spec.ts similarity index 97% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/usagersSorter.service.spec.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersSorter.service.spec.ts index 4c0b4fde13..81da6c2d79 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/usagersSorter.service.spec.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersSorter.service.spec.ts @@ -1,6 +1,6 @@ import { UsagerOptionsProcuration } from "@domifa/common"; -import { UsagerLight } from "../../../../../../_common/model"; -import { UsagerFormModel } from "../../../../usager-shared/interfaces"; +import { UsagerLight } from "../../../../../_common/model"; +import { UsagerFormModel } from "../../../usager-shared/interfaces"; import { usagersSorter } from "./usagersSorter.service"; const usagersMock = [ diff --git a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/usagersSorter.service.ts b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersSorter.service.ts similarity index 93% rename from packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/usagersSorter.service.ts rename to packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersSorter.service.ts index 4a84999841..41bdd06630 100644 --- a/packages/frontend/src/app/modules/manage-usagers/components/usager-filter/services/usagersSorter.service.ts +++ b/packages/frontend/src/app/modules/manage-usagers/services/usager-filter/usagersSorter.service.ts @@ -1,6 +1,6 @@ import { SortableValue, sortMultiple } from "@domifa/common"; -import { UsagerLight } from "../../../../../../_common/model"; -import { UsagersFilterCriteria } from "../UsagersFilterCriteria"; +import { UsagerLight } from "../../../../../_common/model"; +import { UsagersFilterCriteria } from "../../classes/UsagersFilterCriteria"; export const usagersSorter = { sortBy, diff --git a/packages/frontend/src/app/modules/shared/components/table-head-sort-icon/table-head-sort-icon.component.ts b/packages/frontend/src/app/modules/shared/components/table-head-sort-icon/table-head-sort-icon.component.ts index bf719da990..576577339d 100644 --- a/packages/frontend/src/app/modules/shared/components/table-head-sort-icon/table-head-sort-icon.component.ts +++ b/packages/frontend/src/app/modules/shared/components/table-head-sort-icon/table-head-sort-icon.component.ts @@ -6,7 +6,7 @@ import { faArrowUp, faSort, } from "@fortawesome/free-solid-svg-icons"; -import { UsagersFilterCriteriaSortKey } from "../../../manage-usagers/components/usager-filter"; + import { SortValues } from "@domifa/common"; @Component({ @@ -26,7 +26,7 @@ export class TableHeadSortIconComponent { }; @Input({ required: true }) - public sortKey: UsagersFilterCriteriaSortKey | string; + public sortKey: string; @Input({ required: true }) public sortValue: SortValues; @Input({ required: true }) public currentKey: string; diff --git a/packages/frontend/src/app/modules/shared/components/table-head-sort/table-head-sort.component.ts b/packages/frontend/src/app/modules/shared/components/table-head-sort/table-head-sort.component.ts index d59d0e614a..df1f2f4be1 100644 --- a/packages/frontend/src/app/modules/shared/components/table-head-sort/table-head-sort.component.ts +++ b/packages/frontend/src/app/modules/shared/components/table-head-sort/table-head-sort.component.ts @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { Component, EventEmitter, Input, Output } from "@angular/core"; -import { UsagersFilterCriteriaSortKey } from "../../../manage-usagers/components/usager-filter"; import { NgClass } from "@angular/common"; import { TableHeadSortIconComponent } from "../table-head-sort-icon/table-head-sort-icon.component"; import { SortValues } from "@domifa/common"; @@ -21,7 +20,7 @@ export class TableHeadSortComponent { @Input() public currentKey: string; @Output() public readonly currentKeyChange = new EventEmitter(); - @Input() public sortKey: string | UsagersFilterCriteriaSortKey; + @Input() public sortKey: string; @Output() public readonly sortArray = new EventEmitter(); public rotate() {