Проблема при вставке значения с помощью rhandsontable - PullRequest
0 голосов
/ 18 июня 2020

Спасибо, что нашли драгоценное время, чтобы ответить на этот вопрос. : -)

Я создаю блестящее приложение, которое будет принимать вводимые пользователем данные через rhandsontable и сохранять его как файл .rds для сохранения данных.

Код выглядит следующим образом:

Global.r

library(shiny)
library(shinydashboard)
library(shinycssloaders
library(rhandsontable)
library(htmltools)
library(plotly)
library(shinyjs)
library(tidyverse)
library(DT)

# Reads the data stored already
raw_data_projects <- readRDS("Projects.rds")

# code to refresh app so as to display the newly added data
jsResetCode <- "shinyjs.reset = function() {history.go(0)}"

ui.R

dashboardPage(skin = "black",
              dashboardHeader(dropdownMenuOutput("dropdownmenu"),title = "PMO Dashboard",
                              tags$li(div(img(src = 'TechM_logo.png',
                                                 height = "35px"),
                                                 style = "padding-top:10px; padding-bottom:10px;"),
                                                 class = "dropdown"),dropdownMenuOutput("msgOutput")) ,
              dashboardSidebar(
                sidebarMenu(
                  menuItem("Home", tabName = "home", icon = icon("home")),
                  menuItem("Projects", tabName = "pros", icon = icon("briefcase")),
                  menuItem("About Team", tabName = "teamstr", icon = icon("user-friends")),
                  menuItem("Training & Skills",tabName = "skills",icon = icon("book"))
                )),
              dashboardBody(
                useShinyjs(),                  # Include shinyjs in the UI
                extendShinyjs(text = jsResetCode),
                tags$link(rel = "stylesheet", type = "text/css", href = "style_2.css"),
                tabItems(
                          tabItem(tabName = "pros",
                          fluidPage(tabBox(width = "500px",
                          tabPanel("Metrics",

                          fluidRow( 
                            valueBoxOutput("Completed", width = 3),
                            valueBoxOutput("WIP", width = 3),
                            valueBoxOutput("Delayed", width = 3),
                            valueBoxOutput("OnHold", width = 3)
                          ),

                          fluidRow(

                            box(plotlyOutput("Project_category"), width = 4,solidHeader = TRUE, status = "primary", title = "Project Category", collapsible = TRUE),
                            box(plotlyOutput("Project_status"), width = 8,solidHeader = TRUE, status = "primary", title = "Project Status", collapsible = TRUE),
                            box(plotlyOutput("Complexity"), width = 4,solidHeader = TRUE, status = "primary", title = "Project Complexity", collapsible = TRUE),
                            box(plotlyOutput("Audits"), width = 4,solidHeader = TRUE, status = "primary", title = "Audit Status", collapsible = TRUE)
                          )),
                          tabPanel("Data",

                                  box(withSpinner(rHandsontableOutput("Projects")), width = 12),
                                  actionButton("saveBtnProjects", "Save Projects", icon = icon("save")),
                                  actionButton("BtnResetProjects", "Reset Filters", icon = icon("eraser")))))
                  )))

server.r

shinyServer(function(input, output, session){
dt_projects <- reactive({ raw_data_projects })
  vals <- reactiveValues()

  output$Projects <- renderRHandsontable({

    rhandsontable(dt_projects(), readOnly = FALSE, search = TRUE, selectCallback = TRUE ) %>% 
      hot_cols(columnSorting = TRUE, manualColumnMove = TRUE, manualColumnResize = TRUE ) %>%
      hot_table(highlightRow = TRUE, highlightCol = TRUE) %>% 
      #hot_col("PROJECT.STATUS", renderer = text_renderer, type = "autocomplete") %>% 
      hot_rows(fixedRowsTop = 1)



  })

  # on click of button the file will be saved to the working directory
  observeEvent(input$saveBtnProjects, 
               #write.csv(hot_to_r(input$Projects), file = "./Data/project_tracker.csv",row.names = FALSE)
               saveRDS(hot_to_r(input$Projects),"Projects.rds")
  )

  # refresh the page
  observeEvent(input$saveBtnProjects, {js$reset()})

})

Итак, когда я запускаю приложение, я получаю желаемую таблицу, как показано ниже:

Screenshot of table

Как мы видим, когда я вставлял значения в первый столбец, все остальные столбцы были выделены серым цветом, и я не мог вставить в него никаких значений. Пожалуйста, помогите мне с этой проблемой.

Также предложите, будет ли мой код отображать данные реактивно, как только я сохраню данные, нажав кнопку Сохранить проекты .

Спасибо за тонну !!

PS: Я включил код сервера только для таблицы, учитывая длину вопроса, оставив код других вкладок. Но все же этот код воспроизводимый.

...