UNPKG

cluedin-widget

Version:

This project contains all the pages needed for browsing entities and searching them. The aim is to replace the CluedIn.Webapp project with this one when all the pages ( including the Admin page ) will be ported to REACT.

129 lines (109 loc) 4.03 kB
import React, { Component } from "react"; import Loading from "./loading.jsx"; import { WidgetMenu } from "./widgetMenu.jsx"; import MiniLoading from "./MiniLoading.jsx"; import Ps from "perfect-scrollbar"; import RaisedButton from "material-ui/RaisedButton"; import RefreshIndicator from "material-ui/RefreshIndicator"; import { FormattedMessage } from "react-intl"; export default class Widget extends Component { render() { let { title, minHeight, loading, loadMoreResult, loadingHeight, menu, miniLoading, noScroll, noMaxHeight } = this.props; let widgetClassName = "cluedIn_widget"; let widgetContentStyle = {}; let loadingHtml; let menuContent; let miniLoadingContent; let loadMoreButton; let loadMoreResultText; if( loading ) { minHeight = loadingHeight || '300px'; loadingHtml = (<Loading></Loading>); } var widgetStyle = { minHeight: minHeight ? minHeight : 'auto' }; if( !loading && loadMoreResult ) { loadMoreResultText = <FormattedMessage id="Widget.LoadMoreResults"/> loadMoreButton = <div style={{margin: '15px -15px -15px -15px'}}> <RaisedButton style={{width:'100%'}} onClick={this.nextPageHandler.bind(this)} label={loadMoreResultText}></RaisedButton> </div>; } if( menu && !miniLoading ) { menuContent = <WidgetMenu menu={menu}></WidgetMenu>; } if( miniLoading ) { miniLoadingContent = (<div className="cluedIn_widget_title_loading"><MiniLoading></MiniLoading></div>); loadMoreButton = ( <div style={{position: 'relative',textAlign: 'center'}}> <RefreshIndicator style={{ display: 'inline-block', position: 'relative' }} top={0} left={0} status="loading"></RefreshIndicator></div>); } if( noScroll ) { widgetContentStyle.overflow = "hidden"; } if( noMaxHeight ) { widgetContentStyle.maxHeight = 'none'; } if( title ) { return ( <div style={widgetStyle} className={widgetClassName}> {loadingHtml} <div className="cluedIn_widget_title"> <span>{title}</span> {miniLoadingContent} {menuContent} </div> <div ref="widgetContent" style={widgetContentStyle} className=" cluedIn_widget_content"> {this.props.children} {loadMoreButton} </div> </div> ) } else { return (<div ref="widgetContent" style={widgetStyle} className=" cluedIn_widget"> {loadingHtml} {this.props.children} {loadMoreButton} </div>) } } nextPageHandler( event ) { const { pagingHandler } = this.props; if( pagingHandler ) { pagingHandler(); } } componentDidMount() { let { loading, noScroll } = this.props; if( loading || noScroll ) { return; } if( this.refs.widgetContent !== null ) { Ps.initialize( this.refs.widgetContent, { scrollYMarginOffset: 20, suppressScrollX: true } ); } else { Ps.destroy( this.refs.widgetContent ); } } componentWillUnmount() { let { loading, noScroll } = this.props; if( loading || noScroll ) { return; } if( this.refs.widgetContent !== null ) { Ps.destroy( this.refs.widgetContent ); } } } Widget.propTypes = { title: React.PropTypes.string }; Widget.defaultProps = { noScroll: true };