diff --git a/back/src/adapters/primary/routers/admin/adminRouter.e2e.test.ts b/back/src/adapters/primary/routers/admin/adminRouter.e2e.test.ts index 0dde47ec1..246be284b 100644 --- a/back/src/adapters/primary/routers/admin/adminRouter.e2e.test.ts +++ b/back/src/adapters/primary/routers/admin/adminRouter.e2e.test.ts @@ -794,9 +794,6 @@ describe("Admin router", () => { it("401 - not with backOfficeJwt", async () => { const response = await sharedRequest.getUsers({ - body: createApiConsumerParamsFromApiConsumer( - authorizedUnJeuneUneSolutionApiConsumer, - ), headers: { authorization: generateApiConsumerJwt({ id: "osef" }) }, queryParams: { emailContains: "yolo" }, }); diff --git a/back/src/domains/core/authentication/inclusion-connect/adapters/PgUserRepository.ts b/back/src/domains/core/authentication/inclusion-connect/adapters/PgUserRepository.ts index dd6b01c37..654b408c2 100644 --- a/back/src/domains/core/authentication/inclusion-connect/adapters/PgUserRepository.ts +++ b/back/src/domains/core/authentication/inclusion-connect/adapters/PgUserRepository.ts @@ -339,13 +339,13 @@ export class PgUserRepository implements UserRepository { public async getUsers(filters: GetUsersFilters): Promise { if (filters.emailContains === "") return []; - return this.transaction .selectFrom("users") .leftJoin("users__agencies as ua", "ua.user_id", "users.id") .select([ "email", - (qb) => sql`date_to_iso(${qb.ref("created_at")})`.as("createdAt"), + (qb) => + sql`date_to_iso(${qb.ref("created_at")})`.as("createdAt"), "id", "first_name as firstName", "last_name as lastName", @@ -357,14 +357,15 @@ export class PgUserRepository implements UserRepository { ) .as("externalId"), (qb) => - sql`${qb.fn.count("ua.agency_id")}::int`.as( + sql`${qb.fn.count("ua.agency_id")}::int`.as( "numberOfAgencies", ), ]) .where("email", "ilike", `%${filters.emailContains}%`) .groupBy("users.id") .orderBy("users.email") - .limit(100); + .limit(100) + .execute(); } public async updateEmail(userId: string, email: string): Promise { diff --git a/front/src/app/pages/admin/UsersTab.tsx b/front/src/app/pages/admin/UsersTab.tsx index c6a1ab53e..80aeb4937 100644 --- a/front/src/app/pages/admin/UsersTab.tsx +++ b/front/src/app/pages/admin/UsersTab.tsx @@ -1,18 +1,15 @@ import { fr } from "@codegouvfr/react-dsfr"; -import React, {ElementRef} from "react"; +import { SearchBar } from "@codegouvfr/react-dsfr/SearchBar"; import { Table } from "@codegouvfr/react-dsfr/Table"; -import {useDispatch} from "react-redux"; +import React, { ElementRef } from "react"; +import { useDispatch } from "react-redux"; import { domElementIds } from "shared"; import { SomeUsersWithoutName } from "src/app/components/agency/SomeUsersWithoutName"; -import { SearchBar } from "@codegouvfr/react-dsfr/SearchBar"; import { useAppSelector } from "src/app/hooks/reduxHooks"; import { listUsersSelectors } from "src/core-logic/domain/admin/listUsers/listUsers.selectors"; -import { - listUsersSlice -} from "src/core-logic/domain/admin/listUsers/listUsers.slice"; +import { listUsersSlice } from "src/core-logic/domain/admin/listUsers/listUsers.slice"; export const UsersTab = () => { - const dispatch = useDispatch(); const query = useAppSelector(listUsersSelectors.query); @@ -38,11 +35,17 @@ export const UsersTab = () => { // Note: The default behavior for an input of type 'text' is to clear the input value when the escape key is pressed. // However, due to a bug in @gouvfr/dsfr the escape key event is not propagated to the input element. // As a result this onChange is not called when the escape key is pressed. - onChange={(event) => dispatch(listUsersSlice.actions.queryUpdated(event.currentTarget.value))} + onChange={(event) => + dispatch( + listUsersSlice.actions.queryUpdated( + event.currentTarget.value, + ), + ) + } // Same goes for the keydown event so this is useless but we hope the bug will be fixed soon. onKeyDown={(event) => { if (event.key === "Escape") { - inputElement.current?.blur() + inputElement.current?.blur(); } }} /> diff --git a/front/src/core-logic/domain/admin/adminPreloadedState.ts b/front/src/core-logic/domain/admin/adminPreloadedState.ts index 606895b83..e8e1d2380 100644 --- a/front/src/core-logic/domain/admin/adminPreloadedState.ts +++ b/front/src/core-logic/domain/admin/adminPreloadedState.ts @@ -1,9 +1,7 @@ import { agencyAdminInitialState } from "src/core-logic/domain/admin/agenciesAdmin/agencyAdmin.slice"; import { dashboardInitialState } from "src/core-logic/domain/admin/dashboardUrls/dashboardUrls.slice"; import { icUsersAdminInitialState } from "src/core-logic/domain/admin/icUsersAdmin/icUsersAdmin.slice"; -import { - listUsersInitialState -} from "src/core-logic/domain/admin/listUsers/listUsers.slice"; +import { listUsersInitialState } from "src/core-logic/domain/admin/listUsers/listUsers.slice"; import { notificationsInitialState } from "src/core-logic/domain/admin/notifications/notificationsSlice"; import { RootState } from "src/core-logic/storeConfig/store"; import { apiConsumerInitialState } from "../apiConsumer/apiConsumer.slice"; diff --git a/front/src/core-logic/domain/admin/listUsers/listUsers.selectors.ts b/front/src/core-logic/domain/admin/listUsers/listUsers.selectors.ts index 939c6537f..eb8e8de6f 100644 --- a/front/src/core-logic/domain/admin/listUsers/listUsers.selectors.ts +++ b/front/src/core-logic/domain/admin/listUsers/listUsers.selectors.ts @@ -1,15 +1,17 @@ -import {createSelector} from "@reduxjs/toolkit"; -import {RootState} from "src/core-logic/storeConfig/store"; +import { createSelector } from "@reduxjs/toolkit"; +import { RootState } from "src/core-logic/storeConfig/store"; -const listUserState = ({ admin }: RootState) => - admin.listUsers +const listUserState = ({ admin }: RootState) => admin.listUsers; -const users = createSelector(listUserState, ({ users }) => users) -const isFetching = createSelector(listUserState, ({ isFetching }) => isFetching) -const query = createSelector(listUserState, ({ query }) => query) +const users = createSelector(listUserState, ({ users }) => users); +const isFetching = createSelector( + listUserState, + ({ isFetching }) => isFetching, +); +const query = createSelector(listUserState, ({ query }) => query); export const listUsersSelectors = { users, isFetching, query, -} \ No newline at end of file +};