# Crosstalk

#### John Coene

#### 2019-04-09

## Standard

still in development.

Since `v0.1.0` the package is `crosstalk` integrated.

Because graphs consist of two data.frames (nodes and edges), crosstalk is restricted to one of them, nodes. In essence, not much changes, you use the `SharedData` built with `crosstalk` like you would normally use the `nodes` data frame.

**Pass your node ids as keys in `SharedData`*

    library(DT)
    library(sigmajs)
    library(crosstalk)

    nodes <- sg_make_nodes(20)
    edges <- sg_make_edges(nodes)

    # pass node ids as keys
    sd <- SharedData$new(nodes, key = nodes$id)

    div(
      class = "row",
      div(
        class = "col-md-6",
        sigmajs() %>%
          sg_nodes(sd, id, color, size, label) %>%
          sg_edges(edges, id, source, target) %>%
          sg_layout() %>%
          sg_settings(
            mouseWheelEnabled = FALSE
          )
      ),
      div(
        class = "col-md-6",
        datatable(sd, style = "bootstrap", class = "compact", width = "100%",
          selection = "single")
      )
    )

## igraph

Crosstalk also works with other formats.

    library(DT)
    library(sigmajs)
    library(crosstalk)

    g <- igraph::make_graph(sample(LETTERS, 50, replace = TRUE))

    vertices <- igraph::as_data_frame(g, what = "vertices")
    sd <- SharedData$new(vertices, key = vertices$name)

    div(
      class = "row",
      div(
        class = "col-md-6",
        sigmajs() %>%
          sg_from_igraph(g, sd = sd) %>%
          sg_neighbours() %>%
          sg_settings(
            mouseWheelEnabled = FALSE,
            defaultNodeColor = "#98D3A5"
          )
      ),
      div(
        class = "col-md-6",
        datatable(sd, style = "bootstrap", class = "compact", width = "100%",
          selection = "single")
      )
    )