diff --git a/packages/ui/src/components/dashboard/pure-administration-dashboard.stories.tsx b/packages/ui/src/components/dashboard/pure-administration-dashboard.stories.tsx index 6f8d343d1b155c9aa95d0a543520df6cd57d49ec..c0ba37732cede3025f0791d6d97715a6ad0f920c 100644 --- a/packages/ui/src/components/dashboard/pure-administration-dashboard.stories.tsx +++ b/packages/ui/src/components/dashboard/pure-administration-dashboard.stories.tsx @@ -4,6 +4,12 @@ import { CommonTitreAdministration } from 'camino-common/src/titres' import { entreprises, statistiquesDGTMFake, titresDreal } from './testData' import { testBlankUser } from 'camino-common/src/tests-utils' import { ADMINISTRATION_IDS } from 'camino-common/src/static/administrations' +import { titreIdValidator, titreSlugValidator } from 'camino-common/src/validators/titres' +import { TITRES_TYPES_IDS } from 'camino-common/src/static/titresTypes' +import { TitresStatutIds } from 'camino-common/src/static/titresStatuts' +import { entrepriseIdValidator } from 'camino-common/src/entreprise' +import { toCaminoDate } from 'camino-common/src/date' +import { ETAPES_TYPES } from 'camino-common/src/static/etapesTypes' const meta: Meta = { title: 'Components/Dashboard/Administration', // @ts-ignore @storybook/vue3 n'aime pas les composants tsx @@ -55,6 +61,44 @@ export const DGTMNoSnapshot: StoryFn = () => ( /> ) +export const DGALNNeVoitPasLesARMetAXM: StoryFn = () => ( + <PureAdministrationDashboard + apiClient={{ + getAdministrationTitres: () => + Promise.resolve([ + ...titresDreal, + { + id: titreIdValidator.parse('titre-arm'), + slug: titreSlugValidator.parse('titre-arm-slug'), + nom: 'AUTORISATION_DE_RECHERCHE_METAUX', + type_id: TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX, + titre_statut_id: TitresStatutIds.DemandeInitiale, + references: [], + titulaireIds: [entrepriseIdValidator.parse('Titulaire1')], + enAttenteDeAdministration: false, + prochainesEtapes: [], + derniereEtape: { date: toCaminoDate('2022-01-01'), etapeTypeId: ETAPES_TYPES.demande }, + }, + { + id: titreIdValidator.parse('titre-axm'), + slug: titreSlugValidator.parse('titre-axm-slug'), + nom: 'AUTORISATION_EXPLOITATION_METAUX', + type_id: TITRES_TYPES_IDS.AUTORISATION_D_EXPLOITATION_METAUX, + titre_statut_id: TitresStatutIds.DemandeInitiale, + references: [], + titulaireIds: [entrepriseIdValidator.parse('Titulaire1')], + enAttenteDeAdministration: false, + prochainesEtapes: [], + derniereEtape: { date: toCaminoDate('2022-01-01'), etapeTypeId: ETAPES_TYPES.demande }, + }, + ]), + getDgtmStats: () => Promise.resolve(statistiquesDGTMFake), + }} + user={{ ...testBlankUser, role: 'admin', administrationId: ADMINISTRATION_IDS['DGALN/DEB/EARM2'] }} + entreprises={entreprises} + /> +) + export const Loading: StoryFn = () => ( <PureAdministrationDashboard user={{ ...testBlankUser, role: 'admin', administrationId: ADMINISTRATION_IDS.BRGM }} diff --git a/packages/ui/src/components/dashboard/pure-administration-dashboard.stories_snapshots_DGALNNeVoitPasLesARMetAXM.html b/packages/ui/src/components/dashboard/pure-administration-dashboard.stories_snapshots_DGALNNeVoitPasLesARMetAXM.html new file mode 100644 index 0000000000000000000000000000000000000000..13006111ff2e32c9db8536bbefe9177c959ca1f5 --- /dev/null +++ b/packages/ui/src/components/dashboard/pure-administration-dashboard.stories_snapshots_DGALNNeVoitPasLesARMetAXM.html @@ -0,0 +1,98 @@ +<div> + <div class="fr-grid-row"> + <div class="fr-col-12 fr-col-md-6"> + <h1>Tableau de bord</h1> + </div> + <div class="fr-col-12 fr-col-md-6" style="display: flex; flex-direction: row; align-items: flex-start; justify-content: flex-end;"> + <!----> + <!----> + </div> + </div> + <!----> + <div> + <div class="fr-table fr-table--no-scroll" style="overflow: auto;"> + <div class="fr-table__wrapper" style="width: auto;"> + <div class="fr-table__container"> + <div class="fr-table__content"> + <table style="display: table; width: 100%;"> + <caption>Titres en attente de votre administration</caption> + <thead> + <tr> + <th scope="col">Nom</th> + <th scope="col">Type</th> + <th scope="col">Statut</th> + <th scope="col">Titulaires</th> + <th scope="col">Dernière étape</th> + <th scope="col">Prochaines étapes</th> + </tr> + </thead> + <tbody> + <tr> + <td><a class="fr-link" to="{name:titre,params:{id:second-slug}}" type="primary"><span class="bold">Second Nom de titre</span></a></td> + <td><span class="small bold">Permis exclusif de recherches</span></td> + <td> + <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--orange-terre-battue" title="demande initiale" aria-label="demande initiale">demande initiale</p> + </td> + <td><span class="mb--xs"><ul><li class="fr-text--xs">Titulaire 3</li></ul></span></td> + <td><span class="">Recevabilité de la demande (2022-01-01)</span></td> + <td><span><ul><li class="fr-text--xs">enregistrement de la demande</li></ul></span></td> + </tr> + </tbody> + </table> + </div> + </div> + </div> + </div> + </div> + <div> + <div class="fr-table fr-table--no-scroll" style="overflow: auto;"> + <div class="fr-table__wrapper" style="width: auto;"> + <div class="fr-table__container"> + <div class="fr-table__content"> + <table style="display: table; width: 100%;"> + <caption>Titres en cours d'instruction</caption> + <thead> + <tr> + <th scope="col">Nom</th> + <th scope="col">Type</th> + <th scope="col">Statut</th> + <th scope="col">Titulaires</th> + <th scope="col">Dernière étape</th> + </tr> + </thead> + <tbody> + <tr> + <td><a class="fr-link" to="{name:titre,params:{id:first-id-slug}}" type="primary"><span class="bold">first-name</span></a></td> + <td><span class="small bold">Permis exclusif de recherches</span></td> + <td> + <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--orange-terre-battue" title="demande initiale" aria-label="demande initiale">demande initiale</p> + </td> + <td><span class="mb--xs"><ul><li class="fr-text--xs">Titulaire 1</li></ul></span></td> + <td><span class="">Recevabilité de la demande (2022-01-01)</span></td> + </tr> + <tr> + <td><a class="fr-link" to="{name:titre,params:{id:third-id-slug}}" type="primary"><span class="bold">third-name</span></a></td> + <td><span class="small bold">Permis exclusif de recherches</span></td> + <td> + <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--orange-terre-battue" title="demande initiale" aria-label="demande initiale">demande initiale</p> + </td> + <td><span class="mb--xs"><ul><li class="fr-text--xs">Titulaire 1</li></ul></span></td> + <td><span class="">Recevabilité de la demande (2022-01-01)</span></td> + </tr> + <tr> + <td><a class="fr-link" to="{name:titre,params:{id:fourth-slug}}" type="primary"><span class="bold">Quatrième Nom de titre</span></a></td> + <td><span class="small bold">Autorisation de recherches</span></td> + <td> + <p style="z-index: unset; margin-bottom: 0px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;" class="fr-badge fr-badge--md fr-badge--orange-terre-battue" title="demande initiale" aria-label="demande initiale">demande initiale</p> + </td> + <td><span class="mb--xs"><ul><li class="fr-text--xs">Titulaire 8</li></ul></span></td> + <td><span class="">Recevabilité de la demande (2022-01-01)</span></td> + </tr> + </tbody> + </table> + </div> + </div> + </div> + </div> + </div> +</div> \ No newline at end of file diff --git a/packages/ui/src/components/dashboard/pure-administration-dashboard.stories_snapshots_Ok.html b/packages/ui/src/components/dashboard/pure-administration-dashboard.stories_snapshots_Ok.html index c3387ccb6b4cfbe72a7a5483f9fa80dcb6930484..8fd5cee3453602fe9beda33b7883e5396017130d 100644 --- a/packages/ui/src/components/dashboard/pure-administration-dashboard.stories_snapshots_Ok.html +++ b/packages/ui/src/components/dashboard/pure-administration-dashboard.stories_snapshots_Ok.html @@ -50,7 +50,7 @@ <div class="fr-table__container"> <div class="fr-table__content"> <table style="display: table; width: 100%;"> - <caption>Titres en cours d’instruction</caption> + <caption>Titres en cours d'instruction</caption> <thead> <tr> <th scope="col">Nom</th> diff --git a/packages/ui/src/components/dashboard/pure-administration-dashboard.stories_snapshots_OkWithoutBlockedTitres.html b/packages/ui/src/components/dashboard/pure-administration-dashboard.stories_snapshots_OkWithoutBlockedTitres.html index 70162b54b1d208d28af527b5dd4e7a413adb1a05..932a33cc91ba6209e3d23ad43be9f44c97e338a0 100644 --- a/packages/ui/src/components/dashboard/pure-administration-dashboard.stories_snapshots_OkWithoutBlockedTitres.html +++ b/packages/ui/src/components/dashboard/pure-administration-dashboard.stories_snapshots_OkWithoutBlockedTitres.html @@ -16,7 +16,7 @@ <div class="fr-table__container"> <div class="fr-table__content"> <table style="display: table; width: 100%;"> - <caption>Titres en cours d’instruction</caption> + <caption>Titres en cours d'instruction</caption> <thead> <tr> <th scope="col">Nom</th> diff --git a/packages/ui/src/components/dashboard/pure-administration-dashboard.tsx b/packages/ui/src/components/dashboard/pure-administration-dashboard.tsx index c81419c9f737c297381e648c306d146cbb14db72..ca00ff5ff0ca32c2a696380f5eaa8c591dee44b8 100644 --- a/packages/ui/src/components/dashboard/pure-administration-dashboard.tsx +++ b/packages/ui/src/components/dashboard/pure-administration-dashboard.tsx @@ -9,13 +9,14 @@ import { AsyncData } from '@/api/client-rest' import { EtapesTypes } from 'camino-common/src/static/etapesTypes' import { Column, ComponentColumnData, JSXElementColumnData, TableRow, TextColumnData } from '../_ui/table' import { DashboardApiClient } from './dashboard-api-client' -import { AdminUserNotNull, isAdministrationAdmin, isAdministrationEditeur } from 'camino-common/src/roles' +import { AdminUserNotNull, isAdministrationAdmin, isAdministrationEditeur, User } from 'camino-common/src/roles' import { ADMINISTRATION_IDS } from 'camino-common/src/static/administrations' import { PageContentHeader } from '../_common/page-header-content' import { CaminoRouterLink } from '../../router/camino-router-link' import { DsfrSeparator } from '../_ui/dsfr-separator' import { Entreprise, EntrepriseId } from 'camino-common/src/entreprise' import { capitalize } from 'camino-common/src/strings' +import { TitreTypeId, TITRES_TYPES_IDS } from 'camino-common/src/static/titresTypes' interface Props { apiClient: Pick<DashboardApiClient, 'getAdministrationTitres' | 'getDgtmStats'> @@ -33,6 +34,14 @@ const prochainesEtapesColumn: Column<'prochainesEtapes'> = { contentTitle: 'Prochaines étapes', } +const shouldHideTitreInDashboard = (user: User, titreTypeId: TitreTypeId): boolean => { + return ( + [TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX, TITRES_TYPES_IDS.AUTORISATION_D_EXPLOITATION_METAUX].includes(titreTypeId) && + (isAdministrationAdmin(user) || isAdministrationEditeur(user)) && + user.administrationId === ADMINISTRATION_IDS['DGALN/DEB/EARM2'] + ) +} + const columns = [nomColumn, typeColumn, statutColumn, referencesColumn, titulairesColumn, derniereEtapeColumn] as const type ColumnId = (typeof columns)[number]['id'] @@ -43,6 +52,9 @@ export const PureAdministrationDashboard = defineComponent<Props>(props => { const isDGTM = computed<boolean>(() => { return (isAdministrationAdmin(props.user) || isAdministrationEditeur(props.user)) && props.user.administrationId === ADMINISTRATION_IDS['DGTM - GUYANE'] }) + const isDGALN = computed<boolean>(() => { + return (isAdministrationAdmin(props.user) || isAdministrationEditeur(props.user)) && props.user.administrationId === ADMINISTRATION_IDS['DGALN/DEB/EARM2'] + }) const data = ref< AsyncData<{ @@ -53,6 +65,14 @@ export const PureAdministrationDashboard = defineComponent<Props>(props => { type Columns = (typeof columns)[number]['id'] | (typeof columnsEnAttente)[number]['id'] + const visibleColumns = computed<readonly Column[]>(() => { + if (!isDGALN.value) { + return columns + } + + return columns.filter(({ id }) => id !== 'references') + }) + const prochainesEtapesCell = (titre: CommonTitreAdministration): JSXElementColumnData => ({ type: 'jsx', jsxElement: <List elements={titre.prochainesEtapes?.map(id => EtapesTypes[id].nom)} mini={true} />, @@ -96,11 +116,11 @@ export const PureAdministrationDashboard = defineComponent<Props>(props => { status: 'LOADED', value: { administrationTitres: titresLignesBuild( - titres.filter(titre => !titre.enAttenteDeAdministration), + titres.filter(titre => !shouldHideTitreInDashboard(props.user, titre.type_id) && !titre.enAttenteDeAdministration), entreprisesIndex ), administrationTitresBloques: titresLignesBuild( - titres.filter(titre => titre.enAttenteDeAdministration), + titres.filter(titre => !shouldHideTitreInDashboard(props.user, titre.type_id) && titre.enAttenteDeAdministration), entreprisesIndex ), }, @@ -140,7 +160,10 @@ export const PureAdministrationDashboard = defineComponent<Props>(props => { return null }} /> - <LoadingElement data={data.value} renderItem={item => <TableSimple caption={{ value: 'Titres en cours d’instruction', visible: true }} columns={columns} rows={item.administrationTitres} />} /> + <LoadingElement + data={data.value} + renderItem={item => <TableSimple caption={{ value: "Titres en cours d'instruction", visible: true }} columns={visibleColumns.value} rows={item.administrationTitres} />} + /> </div> ) }) diff --git a/packages/ui/src/components/dashboard/pure-super-dashboard.stories_snapshots_TableauPlein.html b/packages/ui/src/components/dashboard/pure-super-dashboard.stories_snapshots_TableauPlein.html index 3633e105eba59fa0bdcb7d920ab5614dddc9db43..c1686ba740cd9d1727078821da0de2374c595099 100644 --- a/packages/ui/src/components/dashboard/pure-super-dashboard.stories_snapshots_TableauPlein.html +++ b/packages/ui/src/components/dashboard/pure-super-dashboard.stories_snapshots_TableauPlein.html @@ -28,7 +28,7 @@ </thead> <tbody> <tr> - <td><a class="fr-link" to="{name:titre,params:{id:m-cx-aachen-1810}}" type="primary"><a href="/mocked-href" title="concession" aria-label="concession">Concession</a></a></td> + <td><a class="fr-link" to="{name:titre,params:{id:m-cx-aachen-1810}}" type="primary"><a href="/mocked-href" title="Aachen" aria-label="Aachen">Aachen</a></a></td> <td><span class="">Octroi</span></td> <td><span class="small bold">Concession</span></td> <td> @@ -41,7 +41,7 @@ <td><span class="">1810-01-01</span></td> </tr> <tr> - <td><a class="fr-link" to="{name:titre,params:{id:m-ax-amadis-5-2022}}" type="primary"><a href="/mocked-href" title="permis d'exploitation" aria-label="permis d'exploitation">Permis d'exploitation</a></a></td> + <td><a class="fr-link" to="{name:titre,params:{id:m-ax-amadis-5-2022}}" type="primary"><a href="/mocked-href" title="Amadis 5" aria-label="Amadis 5">Amadis 5</a></a></td> <td><span class="">Octroi</span></td> <td><span class="small bold">Permis d'exploitation</span></td> <td> diff --git a/packages/ui/src/components/dashboard/pure-super-dashboard.tsx b/packages/ui/src/components/dashboard/pure-super-dashboard.tsx index 8b15e1af86fe4dc3c4abdfefe0829cd55fa7ecba..993d95bb03baf07d1de68e2097305729414df3ca 100644 --- a/packages/ui/src/components/dashboard/pure-super-dashboard.tsx +++ b/packages/ui/src/components/dashboard/pure-super-dashboard.tsx @@ -12,9 +12,8 @@ import { isNotNullNorUndefinedNorEmpty } from 'camino-common/src/typescript-tool import { CaminoRouterLink } from '@/router/camino-router-link' import { DemarchesTypes } from 'camino-common/src/static/demarchesTypes' import { capitalize } from 'camino-common/src/strings' -import { getDomaineId, getTitreTypeType } from 'camino-common/src/static/titresTypes' import { EtapesTypes } from 'camino-common/src/static/etapesTypes' -import { TitresTypesTypes } from 'camino-common/src/static/titresTypesTypes' +import { getDomaineId } from 'camino-common/src/static/titresTypes' interface Props { apiClient: Pick<DashboardApiClient, 'getTitresAvecEtapeEnBrouillon'> @@ -44,8 +43,8 @@ export const PureSuperDashboard = defineComponent<Props>(props => { nom: { type: 'jsx', jsxElement: ( - <CaminoRouterLink to={{ name: 'demarche', params: { demarcheId: titre.demarche_slug } }} isDisabled={false} title={TitresTypesTypes[getTitreTypeType(titre.titre_type_id)].nom}> - {capitalize(TitresTypesTypes[getTitreTypeType(titre.titre_type_id)].nom)} + <CaminoRouterLink to={{ name: 'demarche', params: { demarcheId: titre.demarche_slug } }} isDisabled={false} title={titre.titre_nom}> + {capitalize(titre.titre_nom)} </CaminoRouterLink> ), value: titre.demarche_type_id,