react-ui-layers-panel
v0.0.6
Published
A Photoshop-liked panel for sorting/hiding/locking/deleting/duplicating layers.
Downloads
5
Readme
React UI : Layers Panel
It's a Photoshop-liked layers pannel (build on React / Flux) supporting SORT / HIDE / LOCK / DELETE / DUPLICATE layers. I assume you're already familiar with React and Flux. Check them out if you're not.
This project is still young. Feel free to correct me if there're wrong/bad codes.
Demo
Usage
Before creating component you should create layers store
for the componenet. The store is a JSON array indicating the properties of a layer. Of course you can share the store among different React components.
var createLayerStore = require('react-ui-layers-panel').createLayerStore;
var store = createLayerStore([{isVisible: true, isLocked: false, snapshot: SVGSVGElement}]);
If you use browserify
or watchify
to build JavaScript bundle, remember to externalize the react
for better performance and less size of JavaScript bundle.
browserify --external react ...
Complete Example:
var React = typeof window === 'object' ? window.React : require('react');
var LayersPanel = require('react-ui-layers-panel').LayersPannel;
var createLayerStore = require('react-ui-layers-panel').createLayerStore;
// Initialize the store for the LayersPanel.
var store = createLayerStore([{isVisible: true, isLocked: false, data: 1111},
{isVisible: false, isLocked: true, data: 2222},
{isVisible: false, isLocked: false, data: 3333},
{isVisible: true, isLocked: false, data: 4444},
{isVisible: false, isLocked: true, data: 5555}]);
React.render(
<LayersPanel store={store}/>,
document.getElementById('react-example')
);
Actually createLayerStore
returns an object containing the store
and action
properties. You could use action
to apply changes to layers and get layer's properties through store
.
Note: You SHOULD NOT change the layer store directly. Or it will break the logic and make the whole system inconsistent.
copyright@Facebook
Layer Store API
You should care about the format of Layer Object. It is quite simple and only has few properties. These are properties you'd care.
{
isVisible: true,
isLocked: false,
data: arbitrary object | null | undefined
}
Useful APIs:
/**
* @param {Integer} token - The token(or index) of the layer in store you want.
* @return {Object} - The layer object.
*/
getLayerState(token)
/**
* @return {Array} - The array of all layer objects.
*/
getAll()
/**
* @return {Integer} - The total amount of layers.
*/
length()
/**
* @param {Function} callback - The callback function subscribed for layer change.
*/
listen(callback)
/**
* @param {Function} callback - The callback function subscribed for layer change.
*/
unlisten(callback)
Layer Action API
The APIs you'd care:
/**
* @param {Integer} token - The position of the layer in store you want to insert. Append it to the end if undefined.
* @param {Object} layer - A layer object.
*/
insertLayer(token, layer)
/**
* @param {Integer} token - The position of the layer in store you want to insert. Append it to the end if undefined.
* @param {Object} layer - Array of layer objects.
*/
insertLayers(token, layers)
/**
* @param {Integer} token - The token(or index) of the layer in store you want to delete.
*/
deleteLayer(token)
/**
* @param {Integer} token - The token(or index) of the layer in store you want to change.
* @param {Boolean|undefined} isVisible - Whether the layer is visible or not. Won't change if undefined.
* @param {Boolean|undefined} isLocked - Whether the layer is locked or not. Won't change if undefined.
*/
setLayerState(token, isVisible, isLocked)
/**
* @param {Integer} token - The token(or index) of the layer in store you want to duplicate.
*/
duplicateLayer(token)
/**
* @param {Integer} from - The 1st position of the layer you want to exchange with.
* @param {Integer} to - The 2nd position of the layer you want to exchange with.
*/
exchangeLayers(from, to)