##### # # Author: PMF # ##### require(shiny) #theme_set(theme_minimal()) # preperation # Get the status if r shiny is running in docker or not readRenviron("./.status-docker") statusDocker <- Sys.getenv("statusDockerENV") ui <- navbarPage("EpriLog", tabPanel("Eprilog", sidebarLayout( mainPanel( h1('Brew History'), DT::dataTableOutput('history') ), sidebarPanel( h1('New Entry'), dateInput("date", "Date:"), #maybe better to automatically generate with time selectInput("coffeeName", "Whats the name of the coffee?", coffees$coffeeName, multiple = FALSE), # Grind Time sliderInput("gindTime", "Ginding Time", value = 14, min = 0, max = 30), # Grind Size sliderInput("gindSize", "Ginding Size", value = 7, min = 0, max = 70), # Flow rate (0 = none, 10 = perfect, 20 = water) sliderInput("flowResult", "Flow rate (10 is Perfect):", value = 10, min = 0, max = 20), # Taste Rating (sour = none, 10 = perfect, 20 = bitter) sliderInput("taste", "Taste (0=Sour, 10=perfect, 20=bitter):", value = 10, min = 0, max = 20), # WDT Tool checkboxInput("wdt", "WDT Tool used?", value = TRUE), # Brew Temp numericInput("brewTemp", "Brew Temperature:", value = 94, min = 0, max = 110), # Brew preinfusion time numericInput("brewPreinfusion", "Brew Preinfusion Time", value =2, min = 0, max = 60), # Brew wait Time after Preinfusion numericInput("brewPreinfusionWait", "Brew Wait after Preinfusion Time", value = 5, min = 0, max = 60), # Brew Time numericInput("brewTime", "Brew Time after Preinfusion Time", value = 21, min = 0, max = 100), # Grinder Device selectInput("grinderDevice", "Which Grinder was used?", grinders$name, multiple = FALSE), # Espresso Device selectInput("machineDevice", "Which Espresso machine was used?", machines$name, multiple = FALSE), # Siebeinsatz numericInput("portaInsert", "Siever insert size", value = 12, min = 0, max = 100), # Notes textInput("notes", "Notes:", value = "Keine Notizen"), # submit actionButton("createEntry", "Submit new entry!", icon("save")), ) ) ), tabPanel("Configuration", mainPanel( h1('Add Coffees'), h3('coming soon!') ) ) ) server <- function(input, output){ # loading data from csv files brews <- (read.csv(file = "./data/brews.csv", header = TRUE, sep = ",", row.names = 1)) machines <- read.csv(file = "./data/machines.csv") grinders <- read.csv(file = "./data/grinders.csv") coffees <- read.csv(file = "./data/coffees.csv") # Render History Table output$history = DT::renderDataTable( brews, server = TRUE, options = list(order = list(3, "desc") columnDefs = list(list(visible = FALSE, targets = c(1,3,9,10,11,12,13,14,15))) )) # insert new entry observeEvent(input$createEntry, { # load current brews history brews <- (read.csv(file = "./data/brews.csv", header = TRUE, sep = ",", row.names = 1)) # get currentTime currentTime <- Sys.time() # count up for new brew id newID <- (brew$id + 1) # add new line entry to history brews[nrow(brews) + 1, 1] <- newID brews[nrow(brews), 2] <- input$date brews[nrow(brews), 3] <- currentTime brews[nrow(brews), 4] <- input$coffeeName brews[nrow(brews), 5] <- input$grindTime brews[nrow(brews), 6] <- input$grindSize brews[nrow(brews), 7] <- input$flowResult brews[nrow(brews), 8] <- input$taste brews[nrow(brews), 9] <- input$wdt brews[nrow(brews), 10] <- input$brewTemp brews[nrow(brews), 11] <- input$brewPreinfusion brews[nrow(brews), 12] <- input$brewTime brews[nrow(brews), 13] <- input$grinderDevice brews[nrow(brews), 14] <- input$machineDevice brews[nrow(brews), 15] <- input$portaInsert brews[nrow(brews), 16] <- input$notes # save changes to .csv file print("New entry added:") print(brews) write.csv(brews, file = "./data/brews.csv") }) } if (statusDocker == "false") { runApp(shinyApp(ui = ui, server = server, options = list(launch.browser = TRUE))) } else { shinyApp(ui = ui, server = server) }