Skip to content

Commit

Permalink
feat: upgrade SelecteurPeriode
Browse files Browse the repository at this point in the history
  • Loading branch information
arthurlbrjc committed Nov 12, 2024
1 parent f04a91c commit 95a0686
Show file tree
Hide file tree
Showing 7 changed files with 208 additions and 89 deletions.
29 changes: 21 additions & 8 deletions components/rdv/OngletAgendaConseiller.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { DateTime } from 'luxon'
import React, { useState } from 'react'
import React, { useEffect, useRef, useState } from 'react'

import EmptyState from 'components/EmptyState'
import TableauEvenementsConseiller from 'components/rdv/TableauEvenementsConseiller'
Expand Down Expand Up @@ -35,20 +35,26 @@ export default function OngletAgendaConseiller({
periodeIndex,
changerPeriode,
}: OngletAgendaConseillerProps) {
const tableRef = useRef<HTMLTableElement>(null)

const [evenements, setEvenements] = useState<EvenementListItem[]>()
const [shouldFocus, setShouldFocus] = useState<boolean>(false)

const [periode, setPeriode] = useState<{ debut: DateTime; fin: DateTime }>()
const [labelPeriode, setLabelPeriode] = useState<string>()
const [failed, setFailed] = useState<boolean>(false)

async function chargerNouvellePeriode(
nouvellePeriodeIndex: number,
dateDebut: DateTime,
dateFin: DateTime,
label: string
nouvellePeriode: { index: number; dateDebut: DateTime; dateFin: DateTime },
opts: { label: string; shouldFocus: boolean }
) {
await initEvenementsPeriode(dateDebut, dateFin)
setLabelPeriode(label)
changerPeriode(nouvellePeriodeIndex)
await initEvenementsPeriode(
nouvellePeriode.dateDebut,
nouvellePeriode.dateFin
)
setLabelPeriode(opts.label)
changerPeriode(nouvellePeriode.index)
setShouldFocus(opts.shouldFocus)
}

async function initEvenementsPeriode(dateDebut: DateTime, dateFin: DateTime) {
Expand Down Expand Up @@ -89,6 +95,10 @@ export default function OngletAgendaConseiller({
)
}

useEffect(() => {
if (shouldFocus) tableRef.current?.focus()
}, [evenements])

return (
<>
<SelecteurPeriode
Expand All @@ -107,6 +117,7 @@ export default function OngletAgendaConseiller({

{!evenements && failed && (
<EmptyState
shouldFocus={shouldFocus}
illustrationName={IllustrationName.Maintenance}
titre='L’affichage de votre agenda a échoué.'
sousTitre='Si le problème persiste, contactez notre support.'
Expand All @@ -119,6 +130,7 @@ export default function OngletAgendaConseiller({

{evenements?.length === 0 && (
<EmptyState
shouldFocus={shouldFocus}
illustrationName={IllustrationName.Checklist}
titre='Vous n’avez aucun événement dans votre agenda sur cette période.'
lien={{
Expand All @@ -131,6 +143,7 @@ export default function OngletAgendaConseiller({

{evenements && evenements.length > 0 && (
<TableauEvenementsConseiller
ref={tableRef}
evenements={evenements}
periodeLabel={labelPeriode!}
/>
Expand Down
26 changes: 17 additions & 9 deletions components/rdv/OngletAgendaEtablissement.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ export default function OngletAgendaEtablissement({
const [recherche, setRecherche] = useState<string>('')
const [evenementsAffiches, setEvenementsAffiches] =
useState<AnimationCollective[]>()
const [shouldFocus, setShouldFocus] = useState<boolean>(false)

const [periode, setPeriode] = useState<{ debut: DateTime; fin: DateTime }>()
const [labelPeriode, setLabelPeriode] = useState<string>()
Expand All @@ -61,14 +62,16 @@ export default function OngletAgendaEtablissement({
}

async function modifierPeriode(
nouvellePeriodeIndex: number,
dateDebut: DateTime,
dateFin: DateTime,
label: string
nouvellePeriode: { index: number; dateDebut: DateTime; dateFin: DateTime },
opts: { label: string; shouldFocus: boolean }
) {
await chargerEvenementsPeriode(dateDebut, dateFin)
setLabelPeriode(label)
changerPeriode(nouvellePeriodeIndex)
await chargerEvenementsPeriode(
nouvellePeriode.dateDebut,
nouvellePeriode.dateFin
)
setLabelPeriode(opts.label)
changerPeriode(nouvellePeriode.index)
setShouldFocus(opts.shouldFocus)
}

async function chargerEvenementsPeriode(
Expand Down Expand Up @@ -127,11 +130,15 @@ export default function OngletAgendaEtablissement({
tableRef.current?.focus()
}, [recherche])

useEffect(() => {
if (shouldFocus) tableRef.current?.focus()
}, [evenementsAffiches])

return (
<>
<RechercheAgendaForm onSearch={setRecherche} />

<nav className='flex justify-between items-end'>
<nav className='flex justify-between items-center'>
<SelecteurPeriode
onNouvellePeriode={modifierPeriode}
periodeCourante={periodeIndex}
Expand Down Expand Up @@ -159,6 +166,7 @@ export default function OngletAgendaEtablissement({

{!evenementsAffiches && periodeFailed && (
<EmptyState
shouldFocus={shouldFocus}
illustrationName={IllustrationName.Maintenance}
titre={`
L’affichage de l’agenda de votre ${
Expand All @@ -177,7 +185,7 @@ export default function OngletAgendaEtablissement({
{evenementsAffiches?.length === 0 && (
<div className='flex flex-col justify-center items-center'>
<EmptyState
shouldFocus={filtres.length > 0}
shouldFocus={shouldFocus || filtres.length > 0}
illustrationName={IllustrationName.Checklist}
titre={
filtres.length === 0
Expand Down
17 changes: 11 additions & 6 deletions components/rdv/TableauEvenementsConseiller.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react'
import React, { ForwardedRef, forwardRef } from 'react'

import { AgendaRow } from 'components/rdv/AgendaRow'
import Table from 'components/ui/Table/Table'
Expand All @@ -9,12 +9,15 @@ type TableauEvenementsConseillerProps = {
periodeLabel: string
}

export default function TableauEvenementsConseiller({
evenements,
periodeLabel,
}: TableauEvenementsConseillerProps) {
function TableauEvenementsConseiller(
{ evenements, periodeLabel }: TableauEvenementsConseillerProps,
ref: ForwardedRef<HTMLTableElement>
) {
return (
<Table caption={{ text: 'Liste de mes événements ' + periodeLabel }}>
<Table
caption={{ text: 'Liste de mes événements ' + periodeLabel }}
ref={ref}
>
<thead className='sr-only'>
<tr>
<th scope='col'>Horaires et durée</th>
Expand All @@ -33,3 +36,5 @@ export default function TableauEvenementsConseiller({
</Table>
)
}

export default forwardRef(TableauEvenementsConseiller)
Loading

0 comments on commit 95a0686

Please sign in to comment.