diff --git a/packages/~/moderations/api/src/:id/context.ts b/packages/~/moderations/api/src/:id/context.ts index b7fe0a63..4c45d461 100644 --- a/packages/~/moderations/api/src/:id/context.ts +++ b/packages/~/moderations/api/src/:id/context.ts @@ -20,6 +20,11 @@ export const EMAIL_TO_INPUT_ID = "mail-to"; // +export interface ModerationContext extends Env { + Variables: { + moderation: get_moderation_dto; + }; +} export interface ContextVariablesType extends Env { Variables: { domain: string; diff --git a/packages/~/moderations/api/src/:id/index.tsx b/packages/~/moderations/api/src/:id/index.tsx index 9ebc6f61..2a9bd88c 100644 --- a/packages/~/moderations/api/src/:id/index.tsx +++ b/packages/~/moderations/api/src/:id/index.tsx @@ -5,12 +5,14 @@ import { NotFoundError } from "@~/app.core/error"; import { Entity_Schema } from "@~/app.core/schema"; import { z_email_domain } from "@~/app.core/schema/z_email_domain"; import { Main_Layout } from "@~/app.layout/index"; +import type { App_Context } from "@~/app.middleware/context"; import { set_context_variables } from "@~/app.middleware/set_context_variables"; import { GetFicheOrganizationById } from "@~/organizations.lib/usecase/GetFicheOrganizationById"; import { get_domain_count } from "@~/organizations.repository/get_domain_count"; import { get_organization_members_count } from "@~/organizations.repository/get_organization_members_count"; import { to } from "await-to-js"; import { Hono } from "hono"; +import { getContext } from "hono/context-storage"; import { jsxRenderer } from "hono/jsx-renderer"; import moderation_procedures_router from "./$procedures"; import { @@ -18,6 +20,7 @@ import { get_organization_member, type ContextType, type ContextVariablesType, + type ModerationContext, } from "./context"; import duplicate_warning_router from "./duplicate_warning"; import moderation_email_router from "./email/index"; @@ -26,15 +29,13 @@ import Page from "./page"; // -export default new Hono() +export default new Hono() .get( "/", jsxRenderer(Main_Layout), zValidator("param", Entity_Schema), - async function set_moderation( - { render, req, set, status, var: { moncomptepro_pg } }, - next, - ) { + async function set_moderation({ render, req, set, status }, next) { + const { moncomptepro_pg } = getContext().var; const { id: moderation_id } = req.valid("param"); const [moderation_error, moderation] = await to( @@ -51,17 +52,17 @@ export default new Hono() set("moderation", moderation); return next(); }, - async function set_domain({ set, var: { moderation } }, next) { + set_context_variables(async () => { + const { moderation, moncomptepro_pg } = getContext().var; + + // + const domain = z_email_domain.parse(moderation.user.email, { path: ["moderation.users.email"], }); - set("domain", domain); - return next(); - }, - async function set_organization_member( - { set, var: { moderation, moncomptepro_pg } }, - next, - ) { + + // + const organization_member = await get_organization_member( { pg: moncomptepro_pg }, { @@ -69,56 +70,34 @@ export default new Hono() user_id: moderation.user.id, }, ); - set("organization_member", organization_member); - return next(); - }, - async function set_query_domain_count( - { set, var: { moderation, moncomptepro_pg } }, - next, - ) { - set( - "query_domain_count", - get_domain_count(moncomptepro_pg, { - organization_id: moderation.organization_id, - }), - ); - return next(); - }, - async function set_query_organization_members_count( - { set, var: { moderation, moncomptepro_pg } }, - next, - ) { - set( - "query_organization_members_count", - get_organization_members_count(moncomptepro_pg, { - organization_id: moderation.organization_id, - }), - ); - return next(); - }, - async function set_context(ctx, next) { - const { - domain, - moderation, - organization_member, - query_domain_count, - query_organization_members_count, - } = ctx.var; + + // + const get_fiche_organization_by_id = GetFicheOrganizationById({ - pg: ctx.var.moncomptepro_pg, + pg: moncomptepro_pg, }); const organization_fiche = await get_fiche_organization_by_id( moderation.organization_id, ); - return set_context_variables(() => ({ + + // + + return { domain, moderation, organization_fiche, organization_member, - query_domain_count, - query_organization_members_count, - }))(ctx as any, next); - }, + query_domain_count: get_domain_count(moncomptepro_pg, { + organization_id: moderation.organization_id, + }), + query_organization_members_count: get_organization_members_count( + moncomptepro_pg, + { + organization_id: moderation.organization_id, + }, + ), + }; + }), function GET({ render }) { return render(); }, diff --git a/packages/~/moderations/api/src/:id/page.tsx b/packages/~/moderations/api/src/:id/page.tsx index e11ac56c..9729cd8c 100644 --- a/packages/~/moderations/api/src/:id/page.tsx +++ b/packages/~/moderations/api/src/:id/page.tsx @@ -6,6 +6,7 @@ import { hx_urls, urls } from "@~/app.urls"; import { MODERATION_EVENTS } from "@~/moderations.lib/event"; import { About as About_Organization } from "@~/organizations.ui/info/About"; import { Investigation as Investigation_Organization } from "@~/organizations.ui/info/Investigation"; +import { getContext } from "hono/context-storage"; import { About_User, Investigation_User } from "./About_User"; import { Moderation_Actions } from "./Actions"; import { Domain_Organization } from "./Domain_Organization"; @@ -13,13 +14,14 @@ import { Header } from "./Header"; import { Members_Of_Organization_Table } from "./Members_Of_Organization_Table"; import { Moderation_Exchanges } from "./Moderation_Exchanges"; import { Organizations_Of_User_Table } from "./Organizations_Of_User_Table"; -import { usePageRequestContext } from "./context"; +import { type ModerationContext, usePageRequestContext } from "./context"; // export default async function Moderation_Page() { + const { moderation } = getContext().var; const { - var: { moderation, organization_fiche }, + var: { organization_fiche }, } = usePageRequestContext(); return (