in src/PortfolioPlanning/Components/Plan/PlanTimeline.tsx [222:298]
private _renderTimeline(): JSX.Element {
if (this.props.items.length > 0) {
if (!this.defaultTimeStart || !this.defaultTimeEnd) {
[this.defaultTimeStart, this.defaultTimeEnd] = this._getDefaultTimes(this.props.items);
}
return (
<div className="plan-timeline-container">
<Timeline
groups={this.props.groups}
items={this.props.items}
defaultTimeStart={this.defaultTimeStart}
defaultTimeEnd={this.defaultTimeEnd}
visibleTimeStart={this.state.visibleTimeStart}
visibleTimeEnd={this.state.visibleTimeEnd}
onTimeChange={this._handleTimeChange}
canChangeGroup={false}
stackItems={true}
dragSnap={day}
minZoom={week}
canResize={"both"}
minResizeWidth={50}
onItemResize={this._onItemResize}
onItemMove={this._onItemMove}
moveResizeValidator={this._validateResize}
selected={[this.props.selectedItemId]}
lineHeight={50}
onItemSelect={itemId => this.props.onSetSelectedItemId(itemId)}
onCanvasClick={() => this.props.onSetSelectedItemId(undefined)}
itemRenderer={({ item, itemContext, getItemProps }) =>
this._renderItem(item, itemContext, getItemProps)
}
groupRenderer={group => this._renderGroup(group.group)}
>
<TimelineHeaders>
<div onClickCapture={this._onHeaderClick}>
<DateHeader
unit="primaryHeader"
intervalRenderer={({ getIntervalProps, intervalContext, data }) => {
return (
<div className="date-header" {...getIntervalProps()}>
{intervalContext.intervalText}
</div>
);
}}
/>
<DateHeader
labelFormat={this._renderDateHeader}
style={{ height: 50 }}
intervalRenderer={({ getIntervalProps, intervalContext, data }) => {
return (
<div className="date-header" {...getIntervalProps()}>
{intervalContext.intervalText}
</div>
);
}}
/>
</div>
</TimelineHeaders>
</Timeline>
</div>
);
} else {
return (
// TODO: Add zero data images
<ZeroData
imagePath=""
imageAltText=""
primaryText="This plan is empty"
secondaryText="Use the "+" button to add items to this plan"
actionText="Add items"
actionType={ZeroDataActionType.ctaButton}
onActionClick={this.props.onZeroDataCtaClicked}
/>
);
}
}