Skip to content
This repository was archived by the owner on Oct 8, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified dist/TreeView.mpk
Binary file not shown.
12 changes: 11 additions & 1 deletion src/TreeView/GridView.xml
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ Pmmn04F2ux1MpVI79I4q6jJMfXsbe3iMjYKIcDicKxQKt4qiWFRJi6Joe9iUkWER6C8e48eQCJLC
<property key="blaat4" type="object" isList="true" required="false">
<caption>Search filters</caption>
<category>3) Search</category>
<description>This properties creates quick-filter dropdown buttons for the grid. A filter can be based on a boolean or enumeration value.</description>
<description>These properties creates quick-filter dropdown buttons for the grid. A filter can be based on a boolean or enumeration value.</description>
<properties>
<property key="filterattr" type="attribute" entityProperty="../entity" required="true" isPath="optional" pathType="reference">
<caption>Filter attribute</caption>
Expand Down Expand Up @@ -390,6 +390,11 @@ Pmmn04F2ux1MpVI79I4q6jJMfXsbe3iMjYKIcDicKxQKt4qiWFRJi6Joe9iUkWER6C8e48eQCJLC
<enumerationValue key="false">False only</enumerationValue>
</enumerationValues>
</property>
<property key="filteranycaption" type="translatableString" required="false">
<caption>Any/All caption</caption>
<category>3) Exclusive filter</category>
<description>Examples: "All Users", "Any type"</description>
</property>
</properties>
</property>

Expand Down Expand Up @@ -500,6 +505,11 @@ Pmmn04F2ux1MpVI79I4q6jJMfXsbe3iMjYKIcDicKxQKt4qiWFRJi6Joe9iUkWER6C8e48eQCJLC
<category>3) Search</category>
<description>If a dataset is provided, the values of this dataset will appear as dropdown list in the search box when searching</description>
</property>
<property key="filterexclusive" type="boolean" defaultValue="false" required="true">
<caption>Use exclusive filters</caption>
<category>3) Search</category>
<description>If when checked, each filter will have its own dropdown menu.</description>
</property>
<property key="showtotals" type="boolean" defaultValue="true">
<caption>Show item count in the paging section</caption>
<category>2) Appearance</category>
Expand Down
64 changes: 0 additions & 64 deletions src/TreeView/widget/Commons/FilterManager.js

This file was deleted.

37 changes: 37 additions & 0 deletions src/TreeView/widget/Filters/AbstractFilter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
define([
"dojo/_base/declare",
"dojo/_base/lang"
], function(declare, lang) {
"use strict";

return declare("TreeView.widget.Filters.AbstractFilter", null, {
filterManager: null,

filterattr: null,
filtertruecaption: null,
filterfalsecaption: null,
filterbooleandefault: null,

isEnum: false,
trueitem: null,
falseitem: null,
enumStateMap: null,
enumItems: null,

itemClick: function () {
this.filterManager.applyFilters();
},

constructor: function (args, filterManager) {
this.filterManager = filterManager;
dojo.mixin(this, args);

},

getSearchConstraints: function () {
console.error("ERROR: You must override getSearchConstraints()");
},

free: function () {}
});
});
58 changes: 58 additions & 0 deletions src/TreeView/widget/Filters/BoolFilter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
define([
"dojo/_base/declare",
"dojo/_base/lang",
"dijit/CheckedMenuItem",
"TreeView/widget/Commons",
"TreeView/widget/Filters/ExclusiveFilter"
], function(declare, lang, CheckedMenuItem, Commons, ExclusiveFilter) {
"use strict";

return declare("TreeView.widget.Filters.BoolFilter", ExclusiveFilter, {

constructor: function (args, fm) {
this.anyitem = new CheckedMenuItem({
label: this.anylabel,
checked: true,
onChange: lang.hitch(this, this.itemClick, this.anylabel)
});
this.menuItems.push(this.anyitem);

if (this.filtertruecaption){
this.trueitem = new CheckedMenuItem({
label: this.filtertruecaption,
checked: false,
onChange: lang.hitch(this, this.itemClick, this.filtertruecaption)
});
this.menuItems.push(this.trueitem);
}
if (this.filterfalsecaption){
this.falseitem = new CheckedMenuItem({
label: this.filterfalsecaption,
checked: false,
onChange: lang.hitch(this, this.itemClick, this.filterfalsecaption)
});
this.menuItems.push(this.falseitem);
}

dojo.forEach(this.menuItems, function(item) {
this.menu.addChild(item);
}, this);
},

getSearchConstraints: function () {
var res = [];

if (this.trueitem && this.trueitem.get("checked") === true){
res.push(this.filterattr + " = true() ");
}
if (this.falseitem && this.falseitem.get("checked") === true){
res.push(this.filterattr + " = false()");
}

if (res.length == 0) {//filter all out
res.push(this.filterattr + " = true() or " + this.filterattr + " = false()");
}
return res;
}
});
});
55 changes: 55 additions & 0 deletions src/TreeView/widget/Filters/EnumFilter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
define([
"dojo/_base/declare",
"dojo/_base/lang",
"dijit/CheckedMenuItem",
"TreeView/widget/Commons",
"TreeView/widget/Filters/ExclusiveFilter"
], function(declare, lang, CheckedMenuItem, Commons, ExclusiveFilter) {
"use strict";

return declare("TreeView.widget.Filters.EnumFilter", ExclusiveFilter, {

constructor: function (args, filterManager) {

this.enumStateMap = {};

this.anyitem = new CheckedMenuItem({
label: this.anylabel,
checked: true,
onClick: lang.hitch(this, this.itemClick, this.anylabel)
});
this.menuItems.push(this.anyitem);

this.menuItems = this.menuItems.concat( dojo.map(
Commons.getEnumMap(filterManager.widget.entity, this.filterattr),
function (enumItem) {

var mi = new CheckedMenuItem({
label: enumItem.caption,
checked: false,
onClick: lang.hitch(this, this.itemClick, enumItem.caption)
});

this.enumStateMap[enumItem.key] = mi;
return mi;
}, this));

dojo.forEach(this.menuItems, function(item) {
this.menu.addChild(item);
}, this);

},

getSearchConstraints: function () {
var res = [];

for (var key in this.enumStateMap){
if (this.enumStateMap[key].get("checked") === true){
res.push(this.filterattr + " = '" + key + "'");
}
}

return res;
}
});
});
54 changes: 54 additions & 0 deletions src/TreeView/widget/Filters/ExclusiveFilter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
define([
"dojo/_base/declare",
"dojo/_base/lang",
"dijit/form/DropDownButton",
"dijit/Menu",
"dijit/CheckedMenuItem",
"TreeView/widget/Commons",
"TreeView/widget/Filters/AbstractFilter"
], function(declare, lang, DropDownButton, Menu, CheckedMenuItem, Commons, AbstractFilter) {
"use strict";

return declare("TreeView.widget.Filters.ExclusiveFilter", AbstractFilter, {

itemClick: function (label, e) {
this.dropdown.set("label", label);

for (var i = 0; i < this.menuItems.length; i++) {
var item = this.menuItems[i];

item.set("checked", (item.label == label));
}

this.filterManager.applyFilters();
},

constructor: function (args, filterManager) {
this.filterManager = filterManager;
dojo.mixin(this, args);

this.menu = new Menu({
style: "display: none;"
});
this.menuItems = [];

this.dropdown = new DropDownButton({
label : this.filterattr,
dropDown : this.menu
});

if (this.filteranycaption) {
this.anylabel = this.filteranycaption;
} else {
this.anylabel = this.filterattr + ": -";
}

this.dropdown.set("label", this.anylabel);

dojo.addClass(this.dropdown.dropDown.domNode, "gv_filter_dropdown_menu");
dojo.addClass(this.dropdown.domNode, "gv_filter_dropdown");

dojo.place(this.dropdown.domNode, this.filterManager.domNode);
}
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -2,39 +2,23 @@ define([
"dojo/_base/declare",
"dojo/_base/lang",
"dijit/CheckedMenuItem",
"TreeView/widget/Commons"
], function(declare, lang, CheckedMenuItem, Commons) {
"TreeView/widget/Commons",
"TreeView/widget/Filters/AbstractFilter"
], function(declare, lang, CheckedMenuItem, Commons, AbstractFilter) {
"use strict";

return declare("TreeView.widget.Commons.Filter", null, {
fm: null,
filterattr: null,
filtertruecaption: null,
filterfalsecaption: null,
filterbooleandefault: null,
return declare("TreeView.widget.Filters.Filter", AbstractFilter, {

isEnum: false,
trueitem: null,
falseitem: null,
enumStateMap: null,
enumItems: null,
constructor: function (args, filterManager) {

itemClick: function () {
this.fm.applyFilters();
},

constructor: function (args, fm) {
this.fm = fm;
dojo.mixin(this, args);

this.isEnum = Commons.getAttributeType(fm.widget.entity, this.filterattr) == "Enum";
this.isEnum = Commons.getAttributeType(filterManager.widget.entity, this.filterattr) == "Enum";

//setup enum menu items
if (this.isEnum) {
this.enumStateMap = {};

this.enumItems = dojo.map(
Commons.getEnumMap(fm.widget.entity, this.filterattr),
Commons.getEnumMap(filterManager.widget.entity, this.filterattr),
function (enumItem) {

var mi = new CheckedMenuItem({
Expand Down Expand Up @@ -67,9 +51,8 @@ define([
}
}

this.fm.addFilter(this);
},

getMenuItems: function () {
if (this.isEnum){
return this.enumItems;
Expand Down Expand Up @@ -113,10 +96,6 @@ define([
res.push(this.isEnum ? this.filterattr + " = NULL" : this.filterattr + " = true() and " + this.filterattr + " = false()");
}
return res;
},

free: function () {

}
});
});
Loading