Skip to content

Commit

Permalink
feat; sauvegarde filtres patients documents - Ref gestion-de-projet#2441
Browse files Browse the repository at this point in the history
* feat: filtres de patients, mise en place pour les futurs filtres - Ref #2201#document-filters

* save filters init api call

* enregistrement + recup + affichage liste partiel + application filtre

* feat: ajout de deleteFilters pour filtrer les patients - Ref #2201

* feat: delete de filtres de patients OK, mise à jour des States OK

* feat: changer le mode d'édition des filtres supprime les checks de l'utilisateur

* chore: fix de lint dans FiltersList et callApi.ts

* feat: rendu synchrone des DELETE et GET après suppression de filtres côté patients

* feat: ajout de modal au clic de l'oeil des filtres personalisés pour infos + parsing du string du filtre

* feat: ajout de checking des filters non vides et non null

* feat: utilisation d'un filtre pré-save fonctionnel

* feat: modal mode ajout readonly pour affichage pur

* feat: ajout d'icone d'édition des filtres côté patients

* feat: fix des boutons des modal d'édition et readonly des filtres patients

* feat: traitement des modifications de l'utilisateur, TODO envoi du PUT et impl° vers le back

* feat: boutons de filtres disabled quand maintenance en cours + ajout de tooltip d'info sur les boutons

* feat: edit des filtres OK + maj des visuels après update

* feat: ajout de placeholder pour les filtres sauvegardés avec recherche textuelle vide

* feat: infinite scrollbar fonctionne, testé avec 13 filtres sur un step de 12

* chore: légère réfacto de récup de filtres + console.log

* save filters init api call

* enregistrement + recup + affichage liste partiel + application filtre

* feat: edit des filtres OK + maj des visuels après update

* feat: première ébauche de composant générique de filtres

* feat: ajout de généraltion des filtres, avec enum pour le typage

* feat: ajout Create Delete des filtres, manque Update(0%) et Read(50%)

* feat: ajout des champs de filtres spécifiques aux documents

* feat: conflits de typage pour FiltersTypes + ajout de IMAGING dans FiltersType

* feat: refactorisation des composants PatientsList, FiltersList, callApi, filters, servicePatients, Modal + WIP Documents refacto

* feat: delete Filters fixed

* refactor: affichage des filtres et selection dans modal, utilisation de context

* feat: modal readonly des filtres sauvegardés affichés

* feat: error message sur réponse 500 de sauvegarde de nom de filtre

* feat: suppression multiple des filtres, endpoint et impl°

* feat: retrait des CRUD des filtres sauvegardés des documents

* feat: sélectionner un filtre sauvegardé ferme la modal et affiche la liste filtrée

* chore: retrait de console.log

* feat: filter empty chips pour les paramètres de recherches genre et statut vitaux vides

* feat: close modal d'édition de filtre sauvegardé après avoir cliqué sur sauvegarder

* feat: ajout de await de validation de modal sur soumission + parsing des filtres des patients amélioré

* feat: fix des dates de birthdatesRanges pour les filtres

* custom hook done

* delete prev listItem + rename FilterList in List

* searchBy + refacto custom hook

* feat: filtres des documents Read et Apply OK

* feat: ajout d'application des filtres sauvegardés pour les documents

* feat: visualisation des filtres document, GET et PATCH fixed

* fix: executive Units mauvais mapping car format différent de ScopeTreeRow venant du back

* feat: récupération des executive units lors de l'application d'un filtre de documents

* feat: controlled tooltip pour l'édition de filtre sauvegardé, correction du bug d'affichage permanent du tooltip

* chore: ajout de grid pour modal sur les infos d'un filtre sauvegardé

* refactor: WIP récupération des executive units centralisé dans la page des documents

* feat: recentralisation des fetch de executive units dans page Documents

* feat: changement du mapping Front→ Back pour filtres sauvegardés, TODO Back→ Front côté patients

* parsing back beginning

* end parsing save filters

* feat: correction du typage TS + fix affichage de la recherche textuelle de documents - Ref gestion-de-projet#2201

* chore: changement de active props de DurationRange en disabled

* chore: remplacement de la propriété 'active' qui est native à HTML et causait des errors console

* chore: rollback d'eslint auto

* fix: roll back changes on demographicForm

* fix: fix useAppSelector declaration

---------

Co-authored-by: Salah-BOUYAHIA <salah.bouyahia-ext@aphp.fr>
  • Loading branch information
aetchego and Mehdi-BOUYAHIA authored Jan 25, 2024
1 parent 11424bd commit 4eb21ab
Show file tree
Hide file tree
Showing 47 changed files with 1,750 additions and 251 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ const ImagingForm: React.FC<CriteriaDrawerComponentProps> = (props) => {
</Grid>
<Grid item xs={4}>
<TextFieldWrapper
active={!!daysOfDelay}
activated={!!daysOfDelay}
value={daysOfDelay}
variant="standard"
size="small"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,23 @@ export type PopulationCardPropsType = {
title?: string
form?: CriteriaNameType
executiveUnits?: ScopeTreeRow[]
disabled?: boolean
isAcceptEmptySelection?: boolean
isDeleteIcon?: boolean
onChangeExecutiveUnits?: (_selectedPopulations: ScopeTreeRow[]) => void
}

const PopulationCard: React.FC<PopulationCardPropsType> = (props) => {
const { label, title, form, executiveUnits, onChangeExecutiveUnits, isAcceptEmptySelection, isDeleteIcon } = props
const {
label,
title,
form,
executiveUnits,
onChangeExecutiveUnits,
disabled = false,
isAcceptEmptySelection,
isDeleteIcon
} = props
const { classes } = useStyles(props)
const dispatch = useAppDispatch()
const isRendered = useRef<boolean>(false)
Expand Down Expand Up @@ -100,6 +110,10 @@ const PopulationCard: React.FC<PopulationCardPropsType> = (props) => {
setRightError(_rightError)
}, [selectedItems])

useEffect(() => {
setSelectedItems(selection.filter((item): item is ScopeTreeRow => item !== undefined))
}, [executiveUnits])

useEffect(() => {
if (
!isRendered.current &&
Expand All @@ -122,28 +136,40 @@ const PopulationCard: React.FC<PopulationCardPropsType> = (props) => {
return (
<>
{loading ? (
<div className={classes.populationCard}>
<div className={disabled ? classes.disabledPopulationCard : classes.populationCard}>
<div className={classes.centerContainer}>
<CircularProgress />
</div>
</div>
) : selectionAndPopulationWithRightError?.length !== 0 || form ? (
<Grid container justifyContent="space-between" alignItems="center" className={classes.populationCard}>
<div className={classes.leftDiv}>
<Typography className={classes.typography} variant={form ? undefined : 'h6'} align="left">
{label ?? 'Population source :'}
</Typography>

<div className={classes.chipContainer}>
<Grid
container
alignItems="center"
className={disabled ? classes.disabledPopulationCard : classes.populationCard}
>
<Grid item xs container alignItems="center" justifyContent="flex-start" gap="8px" className={classes.leftDiv}>
<Grid item>
{!disabled ? (
<Typography className={classes.typography} variant={form ? undefined : 'h6'} align="left">
{label ?? 'Population source :'}
</Typography>
) : (
<Typography className={classes.typography} variant={form ? undefined : 'h6'} align="left">
{selectedItems.length ? 'Sélectionnées: ' : 'Aucune unité exécutrice sélectionnée'}
</Typography>
)}
</Grid>
<Grid item>
{isExtended ? (
<>
{selectionAndPopulationWithRightError &&
selectionAndPopulationWithRightError.map((pop, index: number) => (
<Chip
disabled={disabled}
className={classes.populationChip}
key={`${index}-${pop?.name}`}
label={pop?.name}
onDelete={isDeleteIcon ? () => _onDelete(index) : undefined}
onDelete={isDeleteIcon && !disabled ? () => _onDelete(index) : undefined}
/>
))}
<IconButton size="small" onClick={() => onExtend(false)}>
Expand All @@ -158,17 +184,19 @@ const PopulationCard: React.FC<PopulationCardPropsType> = (props) => {
.map((pop, index: number) =>
pop ? (
<Chip
disabled={disabled}
className={classes.populationChip}
key={`${index}-${pop.name}`}
label={pop.name}
onDelete={isDeleteIcon ? () => _onDelete(index) : undefined}
onDelete={isDeleteIcon && !disabled ? () => _onDelete(index) : undefined}
/>
) : (
<Chip
disabled={disabled}
className={classes.populationChip}
key={index}
label={'?'}
onDelete={isDeleteIcon ? () => _onDelete(index) : undefined}
onDelete={isDeleteIcon && !disabled ? () => _onDelete(index) : undefined}
/>
)
)}
Expand All @@ -179,16 +207,18 @@ const PopulationCard: React.FC<PopulationCardPropsType> = (props) => {
)}
</>
)}
</div>
</div>
<IconButton
className={classes.editButton}
size="small"
onClick={() => onChangeOpenDrawer(true)}
disabled={maintenanceIsActive}
>
<EditIcon />
</IconButton>
</Grid>
</Grid>
<Grid item alignSelf="center">
<IconButton
className={classes.editButton}
size="small"
onClick={() => onChangeOpenDrawer(true)}
disabled={maintenanceIsActive || disabled}
>
<EditIcon />
</IconButton>
</Grid>
</Grid>
) : (
<div className={classes.centerContainer}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@ const useStyles = makeStyles<PopulationCardPropsType>()((theme: Theme, params) =
flex: 1,
position: 'relative'
},
disabledPopulationCard: {
borderRadius: 4,
backgroundColor: '#FFFFFF',
padding: '8px 16px',
border: params.form ? '1px solid #D0D7D8' : '3px solid #D3DEE8',
flex: 1,
position: 'relative'
},
typography: {
padding: params.form ? '0px' : '0 1em',
display: 'flex',
Expand All @@ -26,18 +34,13 @@ const useStyles = makeStyles<PopulationCardPropsType>()((theme: Theme, params) =
justifyContent: 'center'
},
leftDiv: {
display: 'flex',
alignItems: 'center',
[theme.breakpoints.down('lg')]: {
flexWrap: 'wrap'
}
},
editButton: {
color: 'currentcolor'
},
chipContainer: {
marginLeft: 12
},
populationChip: {
margin: 4,
fontSize: 11,
Expand Down
Loading

0 comments on commit 4eb21ab

Please sign in to comment.