conflrで、「すでに同名のページがあったときだけ、上書きしていいかを確認するダイアログを出す」ということをしたかった。
軽く調べた感じ、actionButton()
のinputId
を動的に与えるのが簡単そうだった。
以下の例だと、confirm
と ok
という2つのイベントがあって、
ok
だとそのままstopApp()
するconfirm
だとshowModal()
でダイアログを出して、そこにok
のactionButton()
が置かれている(ので結局ok
に行き着く)
という流れになっている。もっと簡単な方法ある気もしつつ、 inputId
が文字列なのでいろいろ応用がありそう、と思ってとりあえずメモ。
library(shiny) dummy_app <- function(confirm = FALSE) { shinyApp( ui = basicPage( actionButton(if (confirm) "confirm" else "ok", "OK") ), server = function(input, output) { # confirm observeEvent(input$confirm, { showModal(modalDialog( "Are you really sure???", footer = tagList( modalButton("Hmm, maybe I drank too much yesterday"), actionButton("ok", "Yeeessss!!!!") ) )) }) # ok observeEvent(input$ok, { removeModal() Sys.sleep(0.2) stopApp() }) } ) } # 確認なし dummy_app() # 確認あり dummy_app(TRUE)
確認がこんな感じで出ます。