|
|
@@ -1,12 +1,9 @@
|
|
|
import React from 'react';
|
|
|
-import { Layout, Tag, Icon } from 'antd';
|
|
|
+import { Layout } from 'antd';
|
|
|
import { connect } from 'dva';
|
|
|
import ViewLayout from './viewLayout';
|
|
|
-import FilterBox from '../common/filterBox/filterBox2';
|
|
|
-import Filter from '../common/filterBox/filter2';
|
|
|
-import MobileFilterList from './mobileFilterList';
|
|
|
import ConfigSider from './configSider';
|
|
|
-import FilterList from './filterList';
|
|
|
+import FilterBar from './filterBar';
|
|
|
|
|
|
const { Header, Content, Sider } = Layout;
|
|
|
|
|
|
@@ -27,12 +24,6 @@ class DashboardDesignerContent extends React.Component {
|
|
|
width: 0,
|
|
|
height: 0,
|
|
|
},
|
|
|
- visibleFilterBox: false,
|
|
|
- visibleFilterList: false,
|
|
|
- filtersOpened: false, // 展开所有filter
|
|
|
- filterOvered: false, // filter数量超出了一行
|
|
|
- filterContentHeight: 40, // filter栏高度
|
|
|
- toggleVisible: true, // 条件栏展开开关
|
|
|
};
|
|
|
this.contentRef=React.createRef();
|
|
|
}
|
|
|
@@ -46,18 +37,6 @@ class DashboardDesignerContent extends React.Component {
|
|
|
window.removeEventListener('resize', this.refreshContentSize);
|
|
|
}
|
|
|
|
|
|
- showFilterBox = (e) => {
|
|
|
- this.setState({
|
|
|
- visibleFilterBox: true
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- hideFilterBox = (e) => {
|
|
|
- this.setState({
|
|
|
- visibleFilterBox: false,
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 重设容器宽度
|
|
|
*/
|
|
|
@@ -75,117 +54,13 @@ class DashboardDesignerContent extends React.Component {
|
|
|
height,
|
|
|
_scroll
|
|
|
},
|
|
|
- }, this.resetFilterContentHeight);
|
|
|
- }
|
|
|
-
|
|
|
- createFilters = (filters) => {
|
|
|
- const { dispatch, afterRefresh } = this.props;
|
|
|
- dispatch({ type: 'dashboardDesigner/changeFilters', filters }).then(() => {
|
|
|
- afterRefresh && typeof afterRefresh === 'function' && afterRefresh()
|
|
|
- }).then(this.resetFilterContentHeight);
|
|
|
- }
|
|
|
-
|
|
|
- filterUsingChange = (e) => {
|
|
|
- const key = e.target.dataset.key;
|
|
|
- const { dashboardDesigner, dispatch, afterRefresh } = this.props;
|
|
|
- const filters = dashboardDesigner.filters;
|
|
|
- let filter = filters.find(f => +f.key === +key);
|
|
|
- dispatch({ type: 'dashboardDesigner/changeFilter', filter: { ...filter, using: filter.type ? !filter.using : false} }).then(() => {
|
|
|
- afterRefresh && typeof afterRefresh === 'function' && afterRefresh()
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- changeFilterValue = (filter) => {
|
|
|
- const { dispatch, afterRefresh } = this.props;
|
|
|
- dispatch({ type: 'dashboardDesigner/changeFilter', filter }).then(() => {
|
|
|
- afterRefresh && typeof afterRefresh === 'function' && afterRefresh()
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- isParent = (obj,parentObj) => {
|
|
|
- while (obj !== undefined && obj !== null && obj.tagName.toUpperCase() !== 'BODY'){
|
|
|
- if (obj === parentObj){
|
|
|
- return true;
|
|
|
- }
|
|
|
- obj = obj.parentNode;
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- closeFiltersEventListener = e => {
|
|
|
- let viewContent = document.getElementsByClassName('dashboard-viewcontent')[0];
|
|
|
- let sider = document.getElementsByClassName('config-sider')[0];
|
|
|
- let header = document.getElementsByClassName('dashboarddesigner-header')[0];
|
|
|
-
|
|
|
- if(this.isParent(e.target, viewContent) || this.isParent(e.target, sider) || this.isParent(e.target, header) ) {
|
|
|
- this.closeFilters();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- expandFilters = () => {
|
|
|
- let filterContent = this.filtersRef.getElementsByClassName('content')[0];
|
|
|
- let filterContentScrollHeight = filterContent.scrollHeight;
|
|
|
-
|
|
|
- this.setState({
|
|
|
- filtersOpened: true,
|
|
|
- filterContentHeight: Math.min(filterContentScrollHeight, document.body.clientHeight)
|
|
|
- });
|
|
|
-
|
|
|
- window.setTimeout(() => {
|
|
|
- this.filtersRef.style.overflow = 'auto';
|
|
|
- }, 300);
|
|
|
- document.addEventListener('click', this.closeFiltersEventListener)
|
|
|
- }
|
|
|
-
|
|
|
- closeFilters = () => {
|
|
|
- this.setState({
|
|
|
- filtersOpened: false,
|
|
|
- filterContentHeight: 40
|
|
|
- });
|
|
|
- this.filtersRef.style.overflow = 'hidden';
|
|
|
- document.removeEventListener('click', this.closeFiltersEventListener);
|
|
|
- }
|
|
|
-
|
|
|
- resetFilterContentHeight = () => {
|
|
|
- let filterContent = this.filtersRef.getElementsByClassName('content')[0];
|
|
|
-
|
|
|
- window.clearTimeout(this.resetKey);
|
|
|
- this.resetKey = window.setTimeout(() => {
|
|
|
- let filterContentOffsetHeight;
|
|
|
- let filterContentScrollHeight;
|
|
|
- let obj = {};
|
|
|
-
|
|
|
- if(this.state.filtersOpened) {
|
|
|
- this.filtersRef.style.height = 'auto';
|
|
|
- filterContentOffsetHeight = filterContent.offsetHeight;
|
|
|
- filterContentScrollHeight = filterContent.scrollHeight
|
|
|
-
|
|
|
- if(filterContentScrollHeight === 40) {
|
|
|
- obj.filterOvered = false;
|
|
|
- obj.filtersOpened = false;
|
|
|
- }
|
|
|
- obj.filterContentHeight = Math.min(filterContentScrollHeight, document.body.clientHeight);
|
|
|
- }else {
|
|
|
- filterContentOffsetHeight = filterContent.offsetHeight;
|
|
|
- filterContentScrollHeight = filterContent.scrollHeight
|
|
|
-
|
|
|
- obj.filterOvered = filterContentScrollHeight > filterContentOffsetHeight;
|
|
|
- }
|
|
|
-
|
|
|
- this.setState(obj);
|
|
|
- }, 300);
|
|
|
- }
|
|
|
-
|
|
|
- setToggleVisible = (visible) => {
|
|
|
- this.setState({
|
|
|
- toggleVisible: visible
|
|
|
});
|
|
|
}
|
|
|
|
|
|
render() {
|
|
|
- const { dashboardDesigner, isOwner, isShareView, isShareKeyView, isViewMode } = this.props;
|
|
|
+ const { dashboardDesigner, isOwner, isShareView, isShareKeyView, isViewMode, afterRefresh } = this.props;
|
|
|
const { dataSources, editMode, filters, relationColumns } = dashboardDesigner;
|
|
|
- const { visibleFilterBox, visibleFilterList, contentSize, filtersOpened, filterContentHeight, filterOvered } = this.state;
|
|
|
+ const { contentSize } = this.state;
|
|
|
|
|
|
return <Layout className={`content${esMobile ? ' es-mobile' : ''}`}>
|
|
|
<Content className={`dashboard-content${(isShareView || isShareKeyView || isViewMode) ? ' nomargin' : ''}`}>
|
|
|
@@ -198,68 +73,19 @@ class DashboardDesignerContent extends React.Component {
|
|
|
*/}
|
|
|
<main ref={this.contentRef} className='viewlayout ant-layout-content'>
|
|
|
{(editMode || (filters && filters.length > 0) )&& <Header>
|
|
|
- <div ref = {node => this.filtersRef = node} className={`filters`} style={{ height: `${filterContentHeight}px`, width: `${contentSize.width + (contentSize._scroll ? 10 : 0)}px` }}>
|
|
|
- <div key={filters.length} className={`content${esMobile ? ' es-mobile' : ''}`}>
|
|
|
- {isOwner && editMode && !isShareView && !isShareKeyView && !isViewMode && <Tag
|
|
|
- onClick={this.showFilterBox}
|
|
|
- className={`filter-tag filter-tag-add`}
|
|
|
- >
|
|
|
- <Icon type="filter" theme="outlined" />
|
|
|
- </Tag>}
|
|
|
- {!esMobile && filters.map(f => (
|
|
|
- <Filter
|
|
|
- key={f.key}
|
|
|
- filter={f}
|
|
|
- changeFilterValue={this.changeFilterValue}
|
|
|
- />
|
|
|
- ))}
|
|
|
- {
|
|
|
- esMobile && <MobileFilterList
|
|
|
- filters={filters}
|
|
|
- filtersOpened={filtersOpened}
|
|
|
- closeFilters={this.closeFilters}
|
|
|
- expandFilters={this.expandFilters}
|
|
|
- setToggleVisible={this.setToggleVisible}
|
|
|
- changeFilterValue={this.changeFilterValue}
|
|
|
- />
|
|
|
- }
|
|
|
- </div>
|
|
|
- {!esMobile && <div className='right' style={{ display: filters.length > 0 && filterOvered ? 'block' : 'none' }}>
|
|
|
- <Icon title={filtersOpened ? '收起' : '展开'} type={filtersOpened ? 'caret-down' : 'caret-up'} onClick={() => {
|
|
|
- filtersOpened ? this.closeFilters() : this.expandFilters();
|
|
|
- }}/>
|
|
|
- </div>}
|
|
|
- {/* {esMobile && filterOvered && <div className='right'>
|
|
|
- <Icon type='bars' onClick={() => {
|
|
|
- filtersOpened ? this.closeFilters() : this.expandFilters();
|
|
|
- }}/>
|
|
|
- </div>} */}
|
|
|
- {/* {overFilters && <div className='right' style={{ display: filters.length > 0 ? 'block' : 'none' }}>
|
|
|
- <Fragment>
|
|
|
- <span style={{ cursor: 'pointer' }} onClick={() => {
|
|
|
- this.setState({
|
|
|
- visibleFilterList: true
|
|
|
- });
|
|
|
- }}>{esMobile ? '' : '更多'}</span>
|
|
|
- <Icon title={'更多'} type={'ellipsis'} onClick={() => {
|
|
|
- this.setState({
|
|
|
- visibleFilterList: true
|
|
|
- });
|
|
|
- }}/>
|
|
|
- </Fragment>
|
|
|
- </div>} */}
|
|
|
- {visibleFilterList && <FilterList
|
|
|
- visible={visibleFilterList}
|
|
|
- onCancel={() => {
|
|
|
- this.setState({
|
|
|
- visibleFilterList: false
|
|
|
- })
|
|
|
- }}
|
|
|
- filters={filters}
|
|
|
- changeFilterValue={this.changeFilterValue}
|
|
|
- />}
|
|
|
- </div>
|
|
|
- {visibleFilterBox && <FilterBox key={Math.random()} dataSources={dataSources} relationColumns={relationColumns} filterData={filters} visibleFilterBox={visibleFilterBox} showFilterBox={this.showFilterBox} hideFilterBox={this.hideFilterBox} createFilters={this.createFilters} />}
|
|
|
+ <FilterBar
|
|
|
+ filters={filters}
|
|
|
+ contentSize={contentSize}
|
|
|
+ esMobile={esMobile}
|
|
|
+ isOwner={isOwner}
|
|
|
+ editMode={editMode}
|
|
|
+ isShareView={isShareView}
|
|
|
+ isShareKeyView={isShareKeyView}
|
|
|
+ isViewMode={isViewMode}
|
|
|
+ afterRefresh={afterRefresh}
|
|
|
+ dataSources={dataSources}
|
|
|
+ relationColumns={relationColumns}
|
|
|
+ />
|
|
|
</Header>}
|
|
|
<ViewLayout isOwner={isOwner} isShareView={isShareView} isShareKeyView={isShareKeyView} isViewMode={isViewMode} contentSize={contentSize} editMode={editMode} esMobile={esMobile}/>
|
|
|
</main>
|