@@ -160,6 +160,8 @@ $(function () {
160160 customFilterPaneReport = powerbi . embed ( $customFilterPaneContainer . get ( 0 ) , customFilterPaneConfig ) ;
161161
162162 customFilterPaneReport . on ( 'loaded' , function ( event ) {
163+ createAppliedFiltersPane ( null , customFilterPaneReport ) ;
164+
163165 console . log ( 'custom filter pane report loaded' ) ;
164166 customFilterPaneReport . getPages ( )
165167 . then ( function ( pages ) {
@@ -404,14 +406,10 @@ $(function () {
404406 var predefinedFilter1 = new models . AdvancedFilter ( {
405407 table : "Store" ,
406408 column : "Name"
407- } , "Or " , [
409+ } , "And " , [
408410 {
409411 operator : "Contains" ,
410412 value : "Direct"
411- } ,
412- {
413- operator : "None" ,
414- value : "x"
415413 }
416414 ] ) ;
417415
@@ -499,7 +497,20 @@ $(function () {
499497 } ) ;
500498
501499 $predefinedFilter1 . on ( 'click' , function ( event ) {
502- customFilterPaneReport . setFilters ( [ predefinedFilter1 . toJSON ( ) ] ) ;
500+ var filter = predefinedFilter1 . toJSON ( ) ;
501+ customFilterPaneReport . setFilters ( [ filter ] ) ;
502+
503+ var $filtersSelection = $ ( '.filters' ) ;
504+ $ . each ( $filtersSelection , ( index , filtersElement ) => {
505+ var $filters = $ ( filtersElement ) ;
506+ var filterable = $filters . data ( 'filterable' ) ;
507+
508+ if ( customFilterPaneReport === filterable ) {
509+ $filters . empty ( )
510+ var $filter = generateFilterElement ( filter ) ;
511+ $filters . append ( $filter ) ;
512+ }
513+ } ) ;
503514 } ) ;
504515
505516 $predefinedFilter2 . on ( 'click' , function ( event ) {
@@ -592,6 +603,134 @@ $(function () {
592603 updateTargetFields ( "report" ) ;
593604 } ) ( ) ;
594605
606+ function generateFilterElement ( filter ) {
607+ var $removeButton = $ ( '<button>' )
608+ . addClass ( 'btn' )
609+ . addClass ( 'btn-danger' )
610+ . addClass ( 'filter__remove' )
611+ . data ( 'filter' , filter )
612+ . html ( '×' )
613+ ;
614+
615+ var $filterText = $ ( '<div>' )
616+ . addClass ( 'filter__text' )
617+ . text ( JSON . stringify ( filter , null , ' ' ) )
618+ ;
619+
620+ var $filter = $ ( '<div>' )
621+ . addClass ( 'filter' )
622+ . append ( $removeButton )
623+ . append ( $filterText )
624+ ;
625+
626+ return $filter ;
627+ }
628+
629+ /**
630+ * Applied Filters Pane
631+ */
632+ function createAppliedFiltersPane ( $element , report ) {
633+ var $appliedFiltersContainer = $ ( '#appliedFilters' ) ;
634+ var $reportFilters = $ ( '#reportFilters' ) ;
635+ var $pageFilters = $ ( '#pageFilters' ) ;
636+ var $refreshAppliedFilters = $ ( '#refreshAppliedFilters' ) ;
637+ let reportPages ;
638+
639+ var filtersTree = {
640+ filterable : report ,
641+ filters : [ ] ,
642+ nodes : [ ]
643+ } ;
644+
645+
646+
647+ function generatePageFiltersContainer ( page ) {
648+ var $heading = $ ( '<h4>' )
649+ . text ( page . name )
650+ ;
651+
652+ var $filters = $ ( '<div>' )
653+ . addClass ( 'filters' )
654+ . data ( 'filterable' , page )
655+ ;
656+
657+ var $filtersContainer = $ ( '<div>' )
658+ . append ( $heading )
659+ . append ( $filters )
660+ ;
661+
662+ return $filtersContainer ;
663+ }
664+
665+ // Setup static report filterable on element;
666+ $reportFilters
667+ . data ( 'filterable' , report ) ;
668+
669+ // Setup page filters containers which have filterable
670+ report . getPages ( )
671+ . then ( pages => {
672+ reportPages = pages ;
673+
674+ pages
675+ . map ( generatePageFiltersContainer )
676+ . forEach ( $pageFiltersContainer => {
677+ $pageFilters . append ( $pageFiltersContainer )
678+ } ) ;
679+ } ) ;
680+
681+ $refreshAppliedFilters . on ( 'click' , function ( event ) {
682+ event . preventDefault ( ) ;
683+
684+ const $filters = $ ( '.filters' ) ;
685+
686+ $ . each ( $filters , ( index , element ) => {
687+ const $element = $ ( element ) ;
688+ const filterable = $element . data ( 'filterable' ) ;
689+
690+ console . log ( $element , filterable ) ;
691+
692+ filterable . getFilters ( )
693+ . then ( filters => {
694+ console . log ( filterable . displayName , filters ) ;
695+ $element . empty ( ) ;
696+ filters
697+ . map ( generateFilterElement )
698+ . forEach ( $filter => {
699+ $element . append ( $filter ) ;
700+ } ) ;
701+ } ) ;
702+ } ) ;
703+ } ) ;
704+
705+ $appliedFiltersContainer . on ( 'click' , 'button.filter__remove' , function ( event ) {
706+ event . preventDefault ( ) ;
707+ const $element = $ ( event . target ) ;
708+ const filterToRemove = $element . data ( 'filter' ) ;
709+ const $filter = $element . closest ( '.filter' ) ;
710+ const $filtersContainer = $element . closest ( '.filters' ) ;
711+ const filterable = $filtersContainer . data ( 'filterable' ) ;
712+
713+ console . log ( 'remove filter' , $element , $filtersContainer , filterToRemove , filterable ) ;
714+
715+ filterable . getFilters ( )
716+ . then ( filters => {
717+ let index = - 1 ;
718+ filters . some ( function ( filter , i ) {
719+ if ( JSON . stringify ( filter ) === JSON . stringify ( filterToRemove ) ) {
720+ index = i ;
721+ return true ;
722+ }
723+ } ) ;
724+
725+ if ( index !== - 1 ) {
726+ filters . splice ( index , 1 ) ;
727+ filterable . setFilters ( filters ) ;
728+ $filter . remove ( ) ;
729+ }
730+ } ) ;
731+ } ) ;
732+ } ;
733+
595734 /**
596735 * Remove Filters Buttons
597736 */
0 commit comments