React = require 'react'
_ = require 'underscore-plus'
{Actions,ComponentRegistry} = require "inbox-exports"
{Flexbox, FlexboxResizableRegion, FlexboxResizeHandlePosition} = require './flexbox-components.cjsx'
module.exports =
Sheet = React.createClass
displayName: 'Sheet'
propTypes:
type: React.PropTypes.string.isRequired
depth: React.PropTypes.number.isRequired
columns: React.PropTypes.arrayOf(React.PropTypes.string)
getDefaultProps: ->
columns: ['Left', 'Center', 'Right']
getInitialState: ->
@_getComponentRegistryState()
componentDidMount: ->
@unlistener = ComponentRegistry.listen (event) =>
@setState(@_getComponentRegistryState())
componentWillUnmount: ->
@unlistener() if @unlistener
render: ->
style =
position:'absolute'
backgroundColor:'white'
width:'100%'
height:'100%'
{@_backButtonComponent()}
{@_columnFlexboxComponents()}
_backButtonComponent: ->
return [] if @props.depth is 0
Back
_columnFlexboxComponents: ->
@props.columns.map (column) =>
classes = @state[column] || []
return if classes.length is 0
components = classes.map (c) =>
maxWidth = _.reduce classes, ((m,c) -> Math.min(c.maxWidth ? 10000, m)), 10000
minWidth = _.reduce classes, ((m,c) -> Math.max(c.minWidth ? 0, m)), 0
resizable = minWidth != maxWidth && column != 'Center'
if resizable
if column is 'Left' then handle = FlexboxResizeHandlePosition.right
if column is 'Right' then handle = FlexboxResizeHandlePosition.left
{components}
else
{components}
_getComponentRegistryState: ->
state = {}
for column in @props.columns
state[column] = ComponentRegistry.findAllViewsByRole "#{@props.type}:#{column}"
state
_pop: ->
Actions.popSheet()