UNPKG

react-native

Version:

A framework for building native apps using React

104 lines (99 loc) 2.68 kB
// @flow import React from 'react'; import Aggrow from './Aggrow'; import Draggable from './Draggable'; import DropTarget from './DropTarget'; type Props = { aggrow: Aggrow, dropAction: (sourceId: string, thisId: string) => void, selectedExpander: ?number, } export default function TableHeader(props: Props): React.Element<*> { const expander = props.aggrow.expander; const aggregators = expander.getActiveAggregators(); const expanders = expander.getActiveExpanders(); const headers = []; for (let i = 0; i < aggregators.length; i++) { const name = expander.getAggregatorName(aggregators[i]); headers.push(( <DropTarget dropAction={props.dropAction} id={`aggregate:insert:${i}`} key={`aggregate:insert:${i}`}> <div style={{ width: '16px', height: 'inherit', backgroundColor: '#8b9dc3', flexShrink: '0', }} /> </DropTarget>)); headers.push(( <Draggable id={`aggregate:active:${i}`} key={`aggregate:active:${i}`}> <div style={{ width: '128px', textAlign: 'center', flexShrink: '0' }}>{name}</div> </Draggable>)); } headers.push(( <DropTarget dropAction={props.dropAction} id="divider:insert" key="divider:insert"> <div style={{ width: '16px', height: 'inherit', backgroundColor: '#3b5998', flexShrink: '0', }} /> </DropTarget>)); for (let i = 0; i < expanders.length; i++) { const name = expander.getExpanderName(expanders[i]); headers.push(( <Draggable id={`expander:active:${i}`} key={`expander:active:${i}`}> <div style={{ textAlign: 'center', flexShrink: '0', padding: '4px', backgroundColor: i === props.selectedExpander ? '#dfe3ee' : 'white', }}> {name} </div> </Draggable>)); const sep = i + 1 < expanders.length ? '->' : '...'; headers.push(( <DropTarget dropAction={props.dropAction} id={`expander:insert:${i + 1}`} key={`expander:insert:${i + 1}`}> <div style={{ height: 'inherit', backgroundColor: '#8b9dc3', flexShrink: '0', }}> {sep} </div> </DropTarget>) ); } return ( <div style={{ width: '100%', height: '26px', display: 'flex', flexDirection: 'row', alignItems: 'center', borderBottom: '2px solid black', }}> {headers} </div> ); }