## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = FALSE
)


## ----setup--------------------------------------------------------------------
library(blockr.dag)
library(blockr.core)
library(blockr.dock)


## -----------------------------------------------------------------------------
# Create an empty board.
serve(new_dock_board(extensions = new_dag_extension()))


## -----------------------------------------------------------------------------
serve(
  new_dock_board(
    blocks = c(
      a = new_dataset_block("iris"),
      b = new_head_block()
    ),
    links = list(from = "a", to = "b", input = "data"),
    extensions = new_dag_extension(
      positions = list(
        a = list(x = 200, y = 150),
        b = list(x = 200, y = 350)
      )
    )
  )
)


## -----------------------------------------------------------------------------
options(
  g6R.mode = "dev",
  g6R.directed_graph = TRUE,
  g6R.layout_on_data_change = TRUE
)

serve(new_dock_board(extensions = new_dag_extension()))


## graph TD
##     subgraph Core Layer
##         blockr.core[blockr.core]
##     end
## 
##     subgraph Extension Blocks
##         blockr.dplyr[blockr.dplyr]
##         blockr.ggplot[blockr.ggplot]
##     end
## 
##     subgraph UI Layer
##         blockr.dock[blockr.dock]
##         blockr.dag[blockr.dag]
##     end
## 
##     subgraph External Dependencies
##         dockViewR[dockViewR]
##         g6R[g6R]
##     end
## 
##     blockr.core --> blockr.dock
##     blockr.dock --> blockr.dag
##     dockViewR --> blockr.dock
##     g6R --> blockr.dag
## 
##     blockr.core --> blockr.dplyr
##     blockr.core --> blockr.ggplot
## 
##     blockr.dplyr -.-> blockr.dock
##     blockr.dplyr -.-> blockr.dag
##     blockr.ggplot -.-> blockr.dock
##     blockr.ggplot -.-> blockr.dag

## -----------------------------------------------------------------------------
# Update observer handles board changes
update_observer <- function(update, board, proxy) {
  observeEvent(update(), {
    upd <- update()

    if (length(upd$blocks$add)) {
      add_nodes(upd$blocks$add, board$board, proxy)
    }

    if (length(upd$stacks$mod)) {
      update_combos(upd$stacks$mod, board$board, proxy)
    }

    # Handle other update types...
  })
}

