🚀 Launch Week Day 5:Introducing Immutable Scans.Learn More →
Socket
Book a DemoInstallSign in
Socket

@hiro-graph/hiro-react-workspace

Package Overview
Dependencies
Maintainers
4
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install
Package was removed
Sorry, it seems this package was removed from the registry

@hiro-graph/hiro-react-workspace

Tabbed workspace library (Assumes parent project will have webpack/babel-loader/css-loader

unpublished
latest
Source
npmnpm
Version
2.8.1
Version published
Maintainers
4
Created
Source

react-workspace

A customisable tabbed UI with the ability to add/remove Panels & Groups, resize and change orientation. The library has 4 main concepts which need to be understood in order to be used effectively. Workspace, Groups, Panels and resolver

Workspace

The Workspace is dervied from a given schema, the store can have many workspaces serialized, the workspace Component renders its content based on the given workspaceId which will automatically select from state.

Example schema


// Basic
{
  [workspaceId]: {
    orientation: "vertical|horizontal", // Determines whether the view is column or row based
    groups: [], // Array of group objects
    panels: [] // Array of panel data
  }
}

// With data
{
  [workspaceId]: {
    orientation: "vertical|horizontal", // Determines whether the view is column or row based
    groups: [{
      activePanel: 0, // panels[0] is active ("panelA" will be rendered)
      panels: [ "panelA", "panelB"]\
    }],
    panels: {
      [{
        id: "panelA",
        name: "Panel A"
      },{
        id: "panelB",
        name: "Panel B"
      }]
  }
}

The workspace component is essentially a container which can have 1 or more Groups. The workspace requires a resolver function to be passed in as a prop which should return a valid React Component from the given Panel data.

Groups

A Workspace is split into 1 or more Groups which can contain 1 or more Panels each group only renders the active Panel.

Example group object in the schema:

{
  active: Boolean, // Whether or not the current group has been focussed
  activePanel: Number, // Active index in the groups panels Array, determines which panel is resolved & rendered
  panels: [panelId1, panelId2, panelId3....] // Array of the Panel unique ids. Array order determines the view order
  size: Number|String // Set when resizing in the UI or can be provided upfront, Number by default is coerced into a percentage. String is parsed as px measure.
  minSize: Number|String // Set min size of group, Number by default is coerced into a percentage. String is parsed as px measure.
  resizable: Boolean // Enables/Disables user resizing of the UI. Defaults to `true`
}

Panels

Panels can be in 0 or more groups (referenced by id). The panels require id and name properties, all other data is custom and given to the resolver function to render its component.

Example panel object

{
  id: String, // UUID of the panel, should not be changed.
  name: String, // Panel name (displayed in the panel tab), can be changed
  ...data // Any other primative data can be stored here.
} // This whole object is passed to the resolver

resolver

Example usage


const workspaceId = "my-workspace";
const schema = {
  [workspaceId]: {
    groups: [{
      activePanel: 0,
      panels: [ "panelA", "panelB"]\
    }],
    panels: {
      [{
        id: "panelA",
        name: "Panel A",
        text: "This is panel A"
      },{
        id: "panelB",
        name: "Panel B",
        text: "This is panel B"
      }]
  }
}

function resolver(props) {
    return (
      <div>
        <h1>{ props.name }</h1>
        <p>{ props.text }</p>
      </div>
    )
}

// Schema should actually be set into redux store initalState but this is a simple example
render(<Workspace workspaceId={workspaceId} schema={schema} resolver={resolver} />, document.getElementById("root"));

FAQs

Package last updated on 26 Feb 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts