Skip to content

Commit

Permalink
feat: add gestion no public conum (#380)
Browse files Browse the repository at this point in the history
* feat: add gestion no public conum

* fix: comment pr

* fix: revert fake data testing
  • Loading branch information
abelkhay authored Oct 31, 2023
1 parent 1056753 commit 4bb7c0f
Show file tree
Hide file tree
Showing 16 changed files with 86 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@
[priseRdv]="lieuMediationNumerique.prise_rdv"
(print)="print.emit()"
(sendByEmail)="sendByEmailModal.control.toggle($event)"></app-boutons-action>
<div class="p-4 bg-tertiary d-flex align-items-center" *ngIf="lieuMediationNumerique.prive">
<span class="flex-grow-1">Attention, cette structure n'accueille pas de public !</span>
<button type="button" class="btn" aria-label="Revenir à la liste" (click)="closeDetails.emit(lieuMediationNumerique)">
<i class="ri-close-circle-line ri-xl" aria-hidden="true"></i>
</button>
</div>
<div class="border-top border-bottom d-xl-none" style="height: 275px" aria-hidden="true">
<mgl-map
*ngIf="lieuMediationNumerique.localisation as localisation"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
queryParamsHandling="preserve"
(mouseover)="enableHover.emit(lieuMediationNumerique.id)"
(mouseout)="disableHover.emit()">
<div class="mb-4 text-primary d-flex align-items-center" *ngIf="lieuMediationNumerique.prive">
<i class="ri-close-circle-line ri-xl me-2" aria-hidden="true"></i>
<span class="small">cette structure n'accueille pas de public !</span>
</div>
<div class="row d-print-none">
<div class="col me-3">
<h2 class="h5 mb-0 text-first-letter-uppercase fw-bold">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ <h1 class="visually-hidden">Liste des lieux d'inclusion numérique</h1>
*ngFor="let lieuMediationNumerique of lieuxMediationNumerique; trackBy: trackByLieuId"
[attr.id]="lieuMediationNumerique.id"
[class.list-group-item-hover]="hoverId === lieuMediationNumerique.id"
[ngClass]="{ 'bg-muted-light': lieuMediationNumerique.prive }"
class="list-group-item py-4 px-sm-4 px-3">
<app-mediation-numerique-list-item
[lieuMediationNumerique]="lieuMediationNumerique"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
·
<small>{{ lieuMediationNumerique.status.limite }}</small>
</div>
<span class="my-1 fs-4" *ngIf="lieuMediationNumerique.prive">Ce lieu n'accueille pas de public</span>
<ng-template #noOpeningHours>
<div class="text-muted">Horaires inconnus</div>
</ng-template>
Expand All @@ -31,6 +32,7 @@
[className]="hoverId === lieuMediationNumerique.id || selectedId === lieuMediationNumerique.id ? 'marker-hover' : ''">
<button
tabindex="-1"
[ngClass]="{ 'opacity-50': lieuMediationNumerique.prive }"
class="btn"
(click)="showDetails.emit(lieuMediationNumerique)"
(mouseenter)="highlight.emit(lieuMediationNumerique)"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export type LieuMediationNumeriqueDetailsPresentation = {
distance?: number;
prise_rdv?: string;
aidants?: Aidant[];
prive?: boolean;
source?: SourcePresentation;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -503,37 +503,44 @@ export class LieuxMediationNumeriqueDetailsPresenter {
([lieu, localisation]: [
LieuMediationNumeriqueWithAidants,
Localisation
]): LieuMediationNumeriqueDetailsPresentation => ({
id: lieu.id,
nom: lieu.nom,
adresse: [
lieu.adresse.voie,
lieu.adresse.complement_adresse,
lieu.adresse.code_postal,
`${lieu.adresse.commune.charAt(0).toUpperCase()}${lieu.adresse.commune.substring(1).toLowerCase()}`
].join(' '),
commune: lieu.adresse.commune,
code_postal: lieu.adresse.code_postal,
services: lieu.services,
...ifAny('horaires', parseHoraires(date)(lieu.horaires)),
...ifAnyHorairesWithWeeks(date)(lieu.horaires),
...ifAny('status', openingState(date)(lieu.horaires)),
...ifAny('typologies', lieu.typologies?.map((typologie) => typologieMatchingMap.get(typologie) || '').join(', ')),
...ifAny('contact', lieu.contact),
...ifAny('presentation', lieu.presentation),
...ifAny('date_maj', lieu.date_maj),
...ifAny('publics_accueillis', lieu.publics_accueillis),
...ifAny('conditions_acces', toConditionAccesDetailsPresentation(lieu.conditions_acces)),
...ifAny('labels_nationaux', lieu.labels_nationaux),
...ifAny('labels_autres', lieu.labels_autres),
...ifAny('modalites_accompagnement', toModalitesAccompagnementPresentation(lieu.modalites_accompagnement), notEmpty),
...ifAny('accessibilite', lieu.accessibilite),
...ifAny('localisation', lieu.localisation),
...ifAny('distance', getDistance(lieu, localisation)),
...ifAny('prise_rdv', lieu.prise_rdv),
...ifAny('aidants', lieu.aidants),
...ifAny('source', availableSourcesMap.get(lieu.source ?? '') ?? undefined)
})
]): LieuMediationNumeriqueDetailsPresentation => {
return {
id: lieu.id,
nom: lieu.nom,
adresse: [
lieu.adresse.voie,
lieu.adresse.complement_adresse,
lieu.adresse.code_postal,
`${lieu.adresse.commune.charAt(0).toUpperCase()}${lieu.adresse.commune.substring(1).toLowerCase()}`
].join(' '),
commune: lieu.adresse.commune,
code_postal: lieu.adresse.code_postal,
services: lieu.services,
...ifAny('horaires', parseHoraires(date)(lieu.horaires)),
...ifAnyHorairesWithWeeks(date)(lieu.horaires),
...ifAny('status', openingState(date)(lieu.horaires)),
...ifAny('typologies', lieu.typologies?.map((typologie) => typologieMatchingMap.get(typologie) || '').join(', ')),
...ifAny('contact', lieu.contact),
...ifAny('presentation', lieu.presentation),
...ifAny('date_maj', lieu.date_maj),
...ifAny('publics_accueillis', lieu.publics_accueillis),
...ifAny('conditions_acces', toConditionAccesDetailsPresentation(lieu.conditions_acces)),
...ifAny('labels_nationaux', lieu.labels_nationaux),
...ifAny('labels_autres', lieu.labels_autres),
...ifAny(
'modalites_accompagnement',
toModalitesAccompagnementPresentation(lieu.modalites_accompagnement),
notEmpty
),
...ifAny('accessibilite', lieu.accessibilite),
...ifAny('localisation', lieu.localisation),
...ifAny('distance', getDistance(lieu, localisation)),
...ifAny('prise_rdv', lieu.prise_rdv),
...ifAny('aidants', lieu.aidants),
...ifAny('source', availableSourcesMap.get(lieu.source ?? '') ?? undefined),
...ifAny('prive', lieu.prive)
};
}
)
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@ export type LieuMediationNumeriqueListItemPresentation = {
labels_nationaux?: LieuMediationNumeriqueListItemPresentationLabelNational[];
distance?: number;
prise_rdv?: string;
prive?: boolean;
};
Original file line number Diff line number Diff line change
Expand Up @@ -63,5 +63,6 @@ export const toLieuxMediationNumeriqueListItemsPresentation =
...ifAny('conditions_acces', toListItemConditionsAcces(lieuMediationNumerique.conditions_acces)),
...ifAny('distance', lieuMediationNumerique.distance),
...ifAny('prise_rdv', lieuMediationNumerique.prise_rdv),
...ifAny('status', openingState(date)(lieuMediationNumerique.horaires))
...ifAny('status', openingState(date)(lieuMediationNumerique.horaires)),
...ifAny('prive', lieuMediationNumerique.prive)
}));
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ export type LieuMediationNumeriqueOnMapPresentation = {
status?: OpeningState;
labels_nationaux?: LabelNational[];
prise_rdv?: string;
prive?: boolean;
};
8 changes: 5 additions & 3 deletions src/features/core/models/aidants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
isValidCourriel,
isValidTelephone
} from '@gouvfr-anct/lieux-de-mediation-numerique';
import { LieuMediationNumeriqueWithNoPublic } from './no-public';

export type Aidant = Model<
'Aidant',
Expand All @@ -18,9 +19,10 @@ export type Aidant = Model<

export type Aidants = Aidant[];

export type LieuMediationNumeriqueWithAidants = LieuMediationNumerique & {
aidants?: Aidants;
};
export type LieuMediationNumeriqueWithAidants = LieuMediationNumeriqueWithNoPublic &
LieuMediationNumerique & {
aidants?: Aidants;
};

const throwAidantError = (aidant: Omit<Aidant, 'isAidant'>): Aidant => {
if (aidant.courriel && !isValidCourriel(aidant.courriel)) {
Expand Down
1 change: 1 addition & 0 deletions src/features/core/models/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export * from './aidants';
export * from './localisation';
export * from './no-public';
5 changes: 5 additions & 0 deletions src/features/core/models/no-public.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { LieuMediationNumerique } from '@gouvfr-anct/lieux-de-mediation-numerique';

export type LieuMediationNumeriqueWithNoPublic = LieuMediationNumerique & {
prive?: boolean;
};
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ export type LieuMediationNumeriquePresentation = {
horaires?: string;
source?: string;
distance?: number;
prive?: boolean;
};

type LieuMediationNumeriqueWithNoPublic = LieuMediationNumerique & {
prive?: boolean;
};

export type LieuMediationNumeriquePresentationWithDistance = LieuMediationNumeriquePresentation & { distance: number };
Expand All @@ -47,7 +52,7 @@ const getDistance = (lieuMediationNumerique: LieuMediationNumerique, localisatio
: geographicDistance(lieuMediationNumerique.localisation, localisation);

export const toLieuxMediationNumeriquePresentation = (
lieuMediationNumerique: LieuMediationNumerique & { localisation: Localisation },
lieuMediationNumerique: LieuMediationNumeriqueWithNoPublic & { localisation: Localisation },
localisation: Localisation
): LieuMediationNumeriquePresentation => ({
id: lieuMediationNumerique.id,
Expand All @@ -74,5 +79,6 @@ export const toLieuxMediationNumeriquePresentation = (
...ifAny('conditions_acces', lieuMediationNumerique.conditions_acces),
...ifAny('horaires', lieuMediationNumerique.horaires),
...ifAny('distance', getDistance(lieuMediationNumerique, localisation)),
...ifAny('source', lieuMediationNumerique.source)
...ifAny('source', lieuMediationNumerique.source),
...ifAny('prive', lieuMediationNumerique.prive)
});
1 change: 1 addition & 0 deletions src/features/core/transfer/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from './lieu-mediation-numerique-with-aidants.transfer';
export * from './lieu-mediation-numerique-with-no-public-transfer';
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { SchemaLieuMediationNumerique } from '@gouvfr-anct/lieux-de-mediation-numerique';
import { LieuMediationNumeriqueWithNoPublicTransfer } from './lieu-mediation-numerique-with-no-public-transfer';

export type AidantTransfer = {
nom: string;
telephone: string;
courriel: string;
};

export type LieuMediationNumeriqueWithAidantsTransfer = SchemaLieuMediationNumerique & {
aidants?: AidantTransfer[];
};
export type LieuMediationNumeriqueWithAidantsTransfer = LieuMediationNumeriqueWithNoPublicTransfer &
SchemaLieuMediationNumerique & {
aidants?: AidantTransfer[];
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { SchemaLieuMediationNumerique } from '@gouvfr-anct/lieux-de-mediation-numerique';

export type LieuMediationNumeriqueWithNoPublicTransfer = SchemaLieuMediationNumerique & {
prive?: boolean;
};

0 comments on commit 4bb7c0f

Please sign in to comment.