1+
2+ row_details <- function (index , df ) {
3+ df <- df [index , ]
4+ # function that creates class based on colum name
5+ df_field <- function (name , ... ) {
6+ if (any(is.na(... ))) NULL
7+ else tagList(div(class = " detail-label" , name ), ... )
8+ }
9+
10+ detail <- div(
11+ class = " tbl-detail" ,
12+ div(class = " detail-header" ,
13+ span(class = " detail-title" , df $ NAME )),
14+ div(class = " detail-description" , df $ SERVICE_TYPE_CD ),
15+
16+ bscols(
17+ div(
18+ # column left
19+ df_field(' Last Updated' , df $ VACANCY_LAST_UPDATE ),
20+ df_field(" Phone" , df $ PHONE ),
21+ df_field(" Website" , df $ WEBSITE ),
22+ df_field(" Email" , df $ EMAIL ),
23+ df_field(" Address" , df $ ADDRESS_1 ),
24+ df_field(' Address 2' , df $ ADDRESS_2 ),
25+ df_field(' City' , df $ CITY ),
26+ df_field(' ECE_CERTIFICATION_YN' , df $ ECE_CERTIFICATION_YN ),
27+ df_field(' ELF' , df $ ELF_PROGRAMMING_YN ),
28+ df_field(' IS_INCOMPLETE_IND' , df $ IS_INCOMPLETE_IND ),
29+ df_field(' IS_CCFRI_AUTH' , df $ IS_CCFRI_AUTH )
30+ ),
31+ div(
32+ # column right
33+ df_field(
34+ ' Map' ,
35+ df | >
36+ leaflet() | >
37+ addProviderTiles(providers $ CartoDB.Voyager ) | >
38+ # addProviderTiles(providers$CartoDB.Positron) |>
39+ addCircleMarkers(lng = ~ LONGITUDE , lat = ~ LATITUDE )
40+ )
41+ )
42+ ),
43+ bscols(
44+ div(
45+ df_field(
46+ " Vacancy type" ,
47+ reactable(
48+ df | >
49+ select(contains(' VACANCY_SRVC_' )) | >
50+ pivot_longer(
51+ everything(),
52+ names_to = ' Age Group' ,
53+ values_to = ' Vacancy?' ,
54+ names_prefix = ' VACANCY_SRVC_'
55+ ) | >
56+ mutate(`Vacancy?` = ifelse(! is.na(`Vacancy?` ), ' Y' , ' N' ))
57+ ,
58+ pagination = FALSE ,
59+ defaultColDef = colDef(headerClass = " header" ),
60+ class = " vacancy-table" ,
61+ theme = reactableTheme(cellPadding = " 8px 12px" )
62+ )
63+ )
64+ ),
65+ div(
66+ df_field(
67+ ' Language' ,
68+ reactable(
69+ df | >
70+ select(contains(' LANG_' )) | >
71+ pivot_longer(everything(), names_to = ' Language' , values_to = ' Y/N' ) | >
72+ mutate(
73+ Language = str_remove_all(Language , ' LANG_' ) | >
74+ str_remove_all(' _YN' ),
75+ `Y/N` = ifelse(! is.na(`Y/N` ), ' Y' , ' N' ))
76+ ,
77+ pagination = FALSE ,
78+ defaultColDef = colDef(headerClass = " header" ),
79+ class = " vacancy-table" ,
80+ theme = reactableTheme(cellPadding = " 8px 12px" )
81+ )
82+ )
83+ )
84+ )
85+ )
86+ detail
87+ }
88+
89+ create_coldefs <- function (df ) {
90+ # columns to hide from unested view
91+ hide <- df | >
92+ select(
93+ contains(' VACANCY' ), - VACANCY_LAST_UPDATE ,
94+ LONGITUDE , LATITUDE ,
95+ SERVICE_TYPE_CD ,
96+ ADDRESS_1 , PHONE ,
97+ `ADDRESS_2` , WEBSITE , EMAIL ,
98+
99+ ECE_CERTIFICATION_YN ,
100+ ELF_PROGRAMMING_YN ,
101+ IS_INCOMPLETE_IND , IS_CCFRI_AUTH ,
102+ popup ,
103+ contains(' LANG_' )
104+
105+ ) | >
106+ colnames() %> %
107+ setNames(. , . ) | >
108+ map(
109+ ~ colDef(
110+ show = FALSE
111+ )
112+ )
113+
114+ show <- list (
115+ VACANCY_LAST_UPDATE = colDef(name = ' Last Updated' ),
116+ NAME = colDef(name = ' Name' ),
117+ CITY = colDef(name = ' City' )
118+ )
119+
120+ coldefs <- purrr :: list_flatten(list (hide , show ))
121+ return (coldefs )
122+ }
0 commit comments