@@ -40,25 +40,6 @@ module.exports = router => {
4040 res . render ( 'clinics/today' ) ;
4141 } ) ;
4242
43- // Single clinic view
44- router . get ( '/clinics/:id' , ( req , res ) => {
45- const clinicData = getClinicData ( req . session . data , req . params . id ) ;
46-
47- if ( ! clinicData ) {
48- res . redirect ( '/clinics' ) ;
49- return ;
50- }
51-
52- res . render ( 'clinics/show' , {
53- clinicId : req . params . id ,
54- clinic : clinicData . clinic ,
55- events : clinicData . events ,
56- unit : clinicData . unit ,
57- formatDate : ( date ) => dayjs ( date ) . format ( 'D MMMM YYYY' ) ,
58- formatTime : ( date ) => dayjs ( date ) . format ( 'HH:mm' )
59- } ) ;
60- } ) ;
61-
6243 // View participant within clinic context
6344 router . get ( '/clinics/:clinicId/participants/:participantId' , ( req , res ) => {
6445 const participant = req . session . data . participants . find ( p => p . id === req . params . participantId ) ;
@@ -82,6 +63,53 @@ module.exports = router => {
8263 } ) ;
8364 } ) ;
8465
66+ function filterEvents ( events , filter ) {
67+ switch ( filter ) {
68+ case 'scheduled' :
69+ return events . filter ( e => e . status === 'scheduled' ) ;
70+ case 'checked-in' :
71+ console . log ( 'filtering checked in' )
72+ return events . filter ( e => e . status === 'checked_in' ) ;
73+ case 'attended' :
74+ return events . filter ( e => [ 'attended' , 'attended_not_screened' ] . includes ( e . status ) ) ;
75+ default :
76+ return events ;
77+ }
78+ }
8579
80+ // Single clinic view
81+ const VALID_FILTERS = [ 'scheduled' , 'checked-in' , 'attended' , 'all' ] ;
82+
83+ // Support both /clinics/:id and /clinics/:id/:filter
84+ router . get ( [ '/clinics/:id' , '/clinics/:id/:filter' ] , ( req , res ) => {
85+ const clinicData = getClinicData ( req . session . data , req . params . id ) ;
86+
87+ if ( ! clinicData ) {
88+ return res . redirect ( '/clinics' ) ;
89+ }
90+
91+ // Check filter from either URL param or query string
92+ let filter = req . params . filter || req . query . filter || 'all' ;
93+
94+ // Validate filter
95+ if ( ! VALID_FILTERS . includes ( filter ) ) {
96+ return res . redirect ( `/clinics/${ req . params . id } ` ) ;
97+ }
98+
99+ console . log ( `Events before: ${ clinicData . events . length } ` )
100+ const filteredEvents = filterEvents ( clinicData . events , filter ) ;
101+ console . log ( `Events after: ${ filteredEvents . length } ` )
102+
103+ res . render ( 'clinics/show' , {
104+ clinicId : req . params . id ,
105+ clinic : clinicData . clinic ,
106+ allEvents : clinicData . events ,
107+ filteredEvents : filteredEvents ,
108+ unit : clinicData . unit ,
109+ currentFilter : filter ,
110+ formatDate : ( date ) => dayjs ( date ) . format ( 'D MMMM YYYY' ) ,
111+ formatTime : ( date ) => dayjs ( date ) . format ( 'HH:mm' )
112+ } ) ;
113+ } ) ;
86114
87115} ;
0 commit comments