-
Notifications
You must be signed in to change notification settings - Fork 1
/
ModularTimelineVisualizer.R
93 lines (64 loc) · 2.42 KB
/
ModularTimelineVisualizer.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
library(timevis)
library(dplyr)
library(lubridate)
## Begin Modular ################
# MODULE UI
TimelineUI <- function(id) {
ns <- NS(id)
fillCol(
div(
actionButton(ns("show_timeline"), "Show Timeline"),
selectizeInput(ns("content"), "Select Content Column", choices = NULL),
selectizeInput(ns("start"), "Select Start Date Column", choices = NULL),
selectizeInput(ns("end"), "Select End Date Column", multiple = TRUE, choices = NULL),
selectizeInput(ns("group"), "Select Group Column", multiple = TRUE, choices = NULL),
timevisOutput(ns("timeline"))
)
)
}
# MODULE Server
TimelineServer <- function(input, output, session, data) {
ns <- session$ns
observe({
updateSelectizeInput(session, "content", "Select Content Column", choices = colnames(data()))
updateSelectizeInput(session, "start", "Select Start Date Column", choices = colnames(data()))
updateSelectizeInput(session, "end", "Select End Date Column", choices = colnames(data()))
updateSelectizeInput(session, "group", "Select Group Column", choices = colnames(data()))
})
resultsdata <- eventReactive(input$show_timeline, {
id <- 1:NROW(data())
content <- data()[[input$content]]
start <- data()[[input$start]]
end <- tryCatch({data()[[input$end]]}, error = function(e) NULL)
group <- tryCatch({data()[[input$group]]}, error = function(e) NULL)
if( is.null(end) ) end <- NA
if( is.null(group) ) group <- NA
vis_data <- data.frame(id = id,
content = content,
start = start,
end = end,
group = group)
group_data <- data.frame(id = unique(group),
content = unique(group))
list(data = vis_data,
group = group_data)
})
output$timeline <- renderTimevis({
if( is.null(input$group) ){
timevis(data = resultsdata()[["data"]],
options = list(editable = TRUE,
multiselect = TRUE
)
)
}else{
timevis(data = resultsdata()[["data"]],
groups = resultsdata()[["group"]],
options = list(editable = TRUE,
multiselect = TRUE,
orientation = "top",
groupEditable = TRUE
)
)
}
})
}