From c676bb727e77f5dd8dea8737f653ebe2a76a756c Mon Sep 17 00:00:00 2001 From: MuJianNan Date: Fri, 1 May 2020 10:43:06 +0800 Subject: [PATCH] Merge part changes from branch bootstrap, next to test HtmlInputElement --- src/managers/filterManager.ts | 5 +++++ src/managers/layoutManager.ts | 11 ++++++++++- src/managers/managerFactory.ts | 4 ++-- src/managers/selectorManager.ts | 14 +++++++------- src/visual/visual.ts | 24 +++++++++++++----------- src/visual/visualInterfaces.ts | 3 ++- webpack.statistics.dev.html | 4 ++-- 7 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/managers/filterManager.ts b/src/managers/filterManager.ts index 56138dd..beec1cd 100644 --- a/src/managers/filterManager.ts +++ b/src/managers/filterManager.ts @@ -14,6 +14,11 @@ export class FilterManager implements IFilterManager{ constructor(host:IVisualHost){ this.host=host; } + public clear():void{ + console.debug("clear start:"); + this.host.applyJsonFilter(null,"general","filter",powerbi.FilterAction.remove); + console.debug("clear end"); + } public update(field:powerbi.DataViewCategoryColumn):void{ let queryName:string=field.source.queryName; let splitPosition:number=queryName.indexOf('.'); diff --git a/src/managers/layoutManager.ts b/src/managers/layoutManager.ts index 702ef51..bb58a8a 100644 --- a/src/managers/layoutManager.ts +++ b/src/managers/layoutManager.ts @@ -3,13 +3,22 @@ import powerbi from "powerbi-visuals-api"; import DataView = powerbi.DataView; import * as visualInterfaces from "../visual/visualInterfaces"; import * as d3 from "d3"; -import { ILayoutManager } from "../visual/visualInterfaces"; +import { ILayoutManager,IFilterManager } from "../visual/visualInterfaces"; +import { IFilter } from "powerbi-models"; type Selection = d3.Selection; export class LayoutManager implements ILayoutManager{ layout:Selection; // constructor(layout:Selection){ // this.layout=layout; // } + header:Selection + constructor(layout:Selection,filterManager:IFilterManager){ + this.layout=layout; + this.header=this.layout.append('div').attr('header',true); + this.header.append('button').attr('clear',true).text('clear').on('click',function(){ + filterManager.clear(); + }); + } update(dataView:DataView,width:number,height:number):void{ //this.layout.style("width",width+"px").style("height",height+"px"); } diff --git a/src/managers/managerFactory.ts b/src/managers/managerFactory.ts index 8df9000..fa1ac24 100644 --- a/src/managers/managerFactory.ts +++ b/src/managers/managerFactory.ts @@ -4,8 +4,8 @@ import * as d3 from "d3"; import powerbi from "powerbi-visuals-api"; type Selection = d3.Selection; export class ManagerFactory{ - public static CreateLayoutManager(classLayoutManager:visualInterfaces.ILayoutManagerConstructor,container:Selection):visualInterfaces.ILayoutManager{ - return new classLayoutManager(container); + public static CreateLayoutManager(classLayoutManager:visualInterfaces.ILayoutManagerConstructor,container:Selection,filterManager:visualInterfaces.IFilterManager):visualInterfaces.ILayoutManager{ + return new classLayoutManager(container,filterManager); } public static CreateSelectorManager(classSelectorManager:visualInterfaces.ISelectorManagerConstructor,container:Selection,filterManager:visualInterfaces.IFilterManager):visualInterfaces.ISelectorManager{ return new classSelectorManager(container,filterManager); diff --git a/src/managers/selectorManager.ts b/src/managers/selectorManager.ts index c19f74c..fcc4d5e 100644 --- a/src/managers/selectorManager.ts +++ b/src/managers/selectorManager.ts @@ -26,11 +26,11 @@ export class SelectorManager implements ISelectorManager{ this.selector?.dispose(); this.selector=newSelector; } - updateData(categories: powerbi.DataViewCategoryColumn, defaultSelect: powerbi.DataViewValueColumn, defaultStart: powerbi.DataViewValueColumn, defaultEnd: powerbi.DataViewValueColumn){ + updateData(field: powerbi.DataViewCategoryColumn, defaultSelect: powerbi.DataViewValueColumn, defaultStart: powerbi.DataViewValueColumn, defaultEnd: powerbi.DataViewValueColumn){ if(!this.selector){ - let fieldType=categories.source.type; + let fieldType=field.source.type; if(fieldType.text){ this.selector=new DropDownSelector(this); }else if(fieldType.numeric){ @@ -43,7 +43,7 @@ export class SelectorManager implements ISelectorManager{ } - this.selector.update(categories, defaultSelect, defaultStart, defaultEnd); + this.selector.update(field, defaultSelect, defaultStart, defaultEnd); }; public filterStringField(selection:string[]){ @@ -51,7 +51,7 @@ export class SelectorManager implements ISelectorManager{ } interface ISelector{ - update(categories: powerbi.DataViewCategoryColumn, defaultSelect: powerbi.DataViewValueColumn, defaultStart: powerbi.DataViewValueColumn, defaultEnd: powerbi.DataViewValueColumn); + update(field: powerbi.DataViewCategoryColumn, defaultSelect: powerbi.DataViewValueColumn, defaultStart: powerbi.DataViewValueColumn, defaultEnd: powerbi.DataViewValueColumn); dispose():void; } @@ -64,7 +64,7 @@ abstract class Selector implements ISelector{ protected abstract createView():void; public abstract dispose():void; protected readonly manager:ISelectorManager; - public abstract update(categories: powerbi.DataViewCategoryColumn, defaultSelect: powerbi.DataViewValueColumn, defaultStart: powerbi.DataViewValueColumn, defaultEnd: powerbi.DataViewValueColumn):void; + public abstract update(field: powerbi.DataViewCategoryColumn, defaultSelect: powerbi.DataViewValueColumn, defaultStart: powerbi.DataViewValueColumn, defaultEnd: powerbi.DataViewValueColumn):void; } class DropDownSelector extends Selector{ private dropDown:Selection; @@ -76,9 +76,9 @@ class DropDownSelector extends Selector{ public dispose(){ this.dropDown.remove(); } - public update(categories: powerbi.DataViewCategoryColumn, defaultSelect: powerbi.DataViewValueColumn, defaultStart: powerbi.DataViewValueColumn, defaultEnd: powerbi.DataViewValueColumn) { + public update(field: powerbi.DataViewCategoryColumn, defaultSelect: powerbi.DataViewValueColumn, defaultStart: powerbi.DataViewValueColumn, defaultEnd: powerbi.DataViewValueColumn) { console.debug('dropDownViewManager','update start'); - let options=this.dropDown.selectAll("option").data(categories.values,function(d){return d.toString();});//map data + let options=this.dropDown.selectAll("option").data(field.values,function(d){return d.toString();});//map data options.enter().append("option").text(function(d){return d.toString();}).attr('dropDown-option');//add options.exit().remove();//delete console.debug("dropDown:",this.dropDown); diff --git a/src/visual/visual.ts b/src/visual/visual.ts index 12a604d..3e05cbd 100644 --- a/src/visual/visual.ts +++ b/src/visual/visual.ts @@ -63,20 +63,22 @@ export class Visual implements IVisual { if (document) { this.selectionManager =options.host.createSelectionManager(); let container=d3.select(options.element).append("div").classed("container",true); - d3.select(options.element).on('contextmenu', () => { - const mouseEvent: MouseEvent = d3.event; - //const eventTarget: EventTarget = mouseEvent.target; - //let dataPoint = d3.select(eventTarget).datum(); - this.selectionManager.showContextMenu({}, { - x: mouseEvent.clientX, - y: mouseEvent.clientY - }); - //mouseEvent.preventDefault(); - }); + // d3.select(options.element).on('contextmenu', () => { + // const mouseEvent: MouseEvent = d3.event; + // //const eventTarget: EventTarget = mouseEvent.target; + // //let dataPoint = d3.select(eventTarget).datum(); + // this.selectionManager.showContextMenu({}, { + // x: mouseEvent.clientX, + // y: mouseEvent.clientY + // }); + // //mouseEvent.preventDefault(); + // }); let headerContainer=container.append("div").classed("header-container",true); let selectorContainer=container.append("div").classed("selector-container",true); - this.layoutManager=ManagerFactory.CreateLayoutManager(LayoutManager,container); + //First, create the filterManager this.filterManager=ManagerFactory.CreateFilterManager(FilterManager,options.host); + //Then, layoutManager and selectorManager + this.layoutManager=ManagerFactory.CreateLayoutManager(LayoutManager,container,this.filterManager); this.selectorManager=ManagerFactory.CreateSelectorManager(SelectorManager,selectorContainer,this.filterManager); } console.debug('end constructor'); diff --git a/src/visual/visualInterfaces.ts b/src/visual/visualInterfaces.ts index 3218c1a..a63ecbf 100644 --- a/src/visual/visualInterfaces.ts +++ b/src/visual/visualInterfaces.ts @@ -16,7 +16,7 @@ export interface ILayoutManager{ update(dataView:DataView,width:number,height:number):void; } export interface ILayoutManagerConstructor{ - new(container:Selection):ILayoutManager; + new(container:Selection,filterManager:IFilterManager):ILayoutManager; }; //ISelectorManager @@ -35,6 +35,7 @@ export interface ISelectorManagerConstructor{ export interface IFilterManager{ update(field:powerbi.DataViewCategoryColumn):void; filterStringField(selection:string[]):void; + clear():void; } export interface IFilterManagerConstructor{ new(host:IVisualHost):IFilterManager; diff --git a/webpack.statistics.dev.html b/webpack.statistics.dev.html index 38e1650..3857fbd 100644 --- a/webpack.statistics.dev.html +++ b/webpack.statistics.dev.html @@ -3,7 +3,7 @@ - Webpack Bundle Analyzer [29 Apr 2020 at 22:12] + Webpack Bundle Analyzer [1 May 2020 at 10:41]