import React, { Component, ComponentType } from 'react'; import styled from 'styled-components'; import {Entity, EntityRenderProps } from 'react-entity-plane'; import { EntityInfoKey } from 'react-entity-plane'; import {NonIdealState} from "@blueprintjs/core"; import {EntityProps} from 'react-entity-plane/src/Entity'; const DefaultContainer = styled.div` height: 100%; display: grid; grid-template-columns: minmax(50%, 2fr) 1fr; grid-gap: 8px; padding: 8px; `; export interface MasterDetailViewRenderProps { entity: EntityRenderProps } export interface MasterDetailViewProps { name?: EntityInfoKey relation?: string query?: string masterQuery?: string additionalRefetchQueries?: EntityProps['additionalRefetchQueries'] fetchPolicy?: EntityProps['fetchPolicy'] detailFetchPolicy?: EntityProps['fetchPolicy'] renderMasterView: (renderProps: MasterDetailViewRenderProps) => any renderDetailView: (renderProps: MasterDetailViewRenderProps) => any wrapperComponent?: ComponentType allowMulti: boolean masterOnly?: boolean params? } class MasterDetailView extends Component { static defaultProps: Partial = { wrapperComponent: DefaultContainer, allowMulti: false }; render() { const Container = this.props.wrapperComponent; return {(masterEntity) => { // TODO Add master distinction here return {this.props.renderMasterView({ entity: masterEntity })} {!this.props.masterOnly && {(detailEntity) => { let display = detailEntity.entityInfo.display; if(detailEntity.selectedItem == null){ return } let count = detailEntity.selectedIds.length; if(!this.props.allowMulti && count > 1){ return } return (this.props.renderDetailView) ? this.props.renderDetailView({ entity: detailEntity }) : null; }} } ; }} ; } } export default MasterDetailView;