Skip to content

Commit 2fee85c

Browse files
committed
Added support for filter modes
1 parent 0a56956 commit 2fee85c

File tree

4 files changed

+98
-21
lines changed

4 files changed

+98
-21
lines changed

Griddly.Mvc/GriddlySettings.cs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ public abstract class GriddlySettings
2020
public static HtmlString BoolTrueHtml = null;
2121
public static HtmlString BoolFalseHtml = null;
2222
public static int? DefaultPageSize = null;
23-
public static bool DefaultShowFilterInitially = true;
23+
//public static FilterMode? DefaultInitialFilterMode = FilterMode.Inline;
24+
//public static FilterMode? DefaultAllowedFilterModes = FilterMode.Inline;
2425
public static bool DefaultShowRowSelectCount = true;
2526

2627
public static Func<GriddlyButton, object> IconTemplate = null;
@@ -38,7 +39,6 @@ public abstract class GriddlySettings
3839
public GriddlySettings()
3940
{
4041
IdProperty = "Id";
41-
HasInlineFilter = true;
4242

4343
Columns = new List<GriddlyColumn>();
4444
Filters = new List<GriddlyFilter>();
@@ -49,7 +49,8 @@ public GriddlySettings()
4949
TableClassName = DefaultTableClassName;
5050
FooterTemplate = DefaultFooterTemplate;
5151
PageSize = DefaultPageSize;
52-
ShowFilterInitially = DefaultShowFilterInitially;
52+
//InitialFilterMode = DefaultInitialFilterMode;
53+
//AllowedFilterModes = DefaultAllowedFilterModes;
5354
ShowRowSelectCount = DefaultShowRowSelectCount;
5455
}
5556

@@ -58,7 +59,8 @@ public GriddlySettings()
5859
public string Title { get; set; }
5960
public string ClassName { get; set; }
6061
public string TableClassName { get; set; }
61-
public bool ShowFilterInitially { get; set; }
62+
public FilterMode? AllowedFilterModes { get; set; }
63+
public FilterMode? InitialFilterMode { get; set; }
6264
public bool ShowRowSelectCount { get; set; }
6365

6466
public int? PageSize { get; set; }
@@ -79,8 +81,6 @@ public GriddlySettings()
7981

8082
public Func<GriddlyResultPage, object> FooterTemplate { get; set; }
8183

82-
public bool HasInlineFilter { get; set; }
83-
8484
public Dictionary<string, Func<object, object>> RowIds { get; protected set; }
8585

8686
public virtual bool HasRowClickUrl
@@ -124,10 +124,9 @@ public GriddlySettings Add(GriddlyColumn column, Func<GriddlyColumn, GriddlyFilt
124124

125125
if (filterDef != null)
126126
{
127-
if (HasInlineFilter)
128-
column.Filter = filterDef;
129-
else
130-
Filters.Add(filterDef);
127+
column.Filter = filterDef;
128+
129+
Filters.Add(filterDef);
131130
}
132131
}
133132

@@ -440,4 +439,13 @@ public GriddlySettings<TRow> Button<TModel>(Func<TModel, object> argumentTemplat
440439
return this;
441440
}
442441
}
442+
443+
[Flags]
444+
public enum FilterMode
445+
{
446+
None = 0,
447+
Inline = 1,
448+
Form = 2,
449+
Both = Inline | Form
450+
}
443451
}

Griddly/Scripts/griddly.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@
9393
var isMultiSort = this.$element.data("griddly-multisort");
9494
var onRefresh = this.$element.data("griddly-onrefresh");
9595
var rowClickModal = this.$element.data("griddly-rowclickmodal");
96+
var filterMode = this.$element.data("griddly-filtermode");
97+
var allowedFilterModes = this.$element.data("griddly-allowedfiltermodes");
9698

9799
this.options.url = url;
98100
this.options.defaultRowIds = defaultRowIds;
@@ -114,6 +116,9 @@
114116
if (onRefresh && Object.prototype.toString.call(window[onRefresh]) == '[object Function]')
115117
this.options.onRefresh = window[onRefresh];
116118

119+
this.options.filterMode = filterMode;
120+
this.options.allowedFilterModes = allowedFilterModes != null ? allowedFilterModes : null;
121+
117122
// TODO: should we do this later on so we handle dynamically added buttons?
118123
this.$element.find("[data-append-rowids-to-url]").each(function ()
119124
{
@@ -186,7 +191,15 @@
186191

187192
$("a.btn-search", this.$element).on("click", $.proxy(function (event)
188193
{
189-
this.$element.find("tr.griddly-filters").toggle();
194+
if (this.options.allowedFilterModes.length > 1)
195+
{
196+
this.options.filterMode = this.options.filterMode == "Inline" ? "Form" : "Inline";
197+
198+
this.$element.find("tr.griddly-filters:not(tr.griddly-filters-" + this.options.filterMode.toLowerCase() + ")").hide();
199+
this.$element.find("tr.griddly-filters-" + this.options.filterMode.toLowerCase()).show();
200+
201+
this.refresh(true);
202+
}
190203
}, this));
191204

192205
$(this.$element).on("mouseup", "tbody.data tr td:not(:has(input))", $.proxy(function (e)
@@ -696,7 +709,12 @@
696709

697710
getFilterValues: function()
698711
{
699-
var allFilters = $(".griddly-filters input, .griddly-filters select", this.$element).add(this.$inlineFilters);
712+
var allFilters;
713+
714+
if (this.options.filterMode == "Inline")
715+
allFilters = this.$inlineFilters;
716+
else
717+
allFilters = $(".griddly-filters-form input, .griddly-filters-form select", this.$element);
700718

701719
return serializeObject(allFilters);
702720
},
@@ -925,7 +943,9 @@
925943
lastSelectedRow: null,
926944
rowClickModal: null,
927945
selectedRows: null,
928-
autoRefreshOnFilter: true
946+
autoRefreshOnFilter: true,
947+
filterMode: null,
948+
allowedFilterModes: []
929949
};
930950

931951
function GriddlyButton()

Griddly/Views/Home/FilterBoxGrid.cshtml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
{
1212
new GriddlyButton() { Text = "Dropdown Test" }
1313
.Add(new GriddlyButton() { Text = "UrlHelper Test", Argument = Url.Action("About") })
14-
}
14+
},
15+
FilterTemplate = @<text>test filter form</text>
1516
}
1617
.Column("test", template: @<a href="http://google.com">google</a>, summaryValue: "Total")
1718
.Column(x => x.Test, "Sum", format: "c", summaryFunction: SummaryAggregateFunction.Sum)
@@ -24,4 +25,6 @@
2425
.Column(x => x.Address, "Address", filter: x => x.FilterBox(FilterDataType.Currency))
2526
.Column(x => x.City, "City", filter: x => x.FilterBox(FilterDataType.Date))
2627
.Column(x => x.PostalCode, "Zip", filter: x => x.FilterBox(FilterDataType.Integer))
28+
.Button(x => "javascript:void(0)", "Search", className: "btn-search", action: GriddlyButtonAction.Navigate )
29+
//.Filters.Add(new GriddlyFilterBox() { Caption = "Test Form Filter", Field = "Test Form Field" })
2730
)

Griddly/Views/Shared/Griddly/Griddly.cshtml

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,55 @@
2121

2222
if (isFirstRender)
2323
{
24-
if (settings.HasInlineFilter && settings.InlineFilterTemplate == null && settings.Columns.Any(x => x.Filter != null))
24+
if (settings.AllowedFilterModes == null)
2525
{
26-
settings.InlineFilterTemplate = (x) => RenderInlineFilters(x);
26+
FilterMode allowedModes = FilterMode.None;
27+
28+
if (settings.InlineFilterTemplate != null || settings.Columns.Any(x => x.Filter != null))
29+
{
30+
allowedModes |= FilterMode.Inline;
31+
}
32+
33+
if (settings.FilterTemplate != null || (settings.Filters.Any(x => !settings.Columns.Any(y => y.Filter != x))))
34+
{
35+
allowedModes |= FilterMode.Form;
36+
}
37+
38+
settings.AllowedFilterModes = allowedModes;
2739
}
40+
41+
if (settings.AllowedFilterModes != FilterMode.None)
42+
{
43+
if (settings.InitialFilterMode == null)
44+
{
45+
if (settings.AllowedFilterModes.Value.HasFlag(FilterMode.Inline))
46+
{
47+
settings.InitialFilterMode = FilterMode.Inline;
48+
}
49+
else if (settings.AllowedFilterModes.Value.HasFlag(FilterMode.Form))
50+
{
51+
settings.InitialFilterMode = FilterMode.Form;
52+
}
53+
54+
if (settings.InitialFilterMode == null || settings.InitialFilterMode == FilterMode.Both)
55+
{
56+
throw new InvalidOperationException("Invalid InitialFilterMode: " + settings.InitialFilterMode + ".");
57+
}
58+
}
59+
60+
if (settings.AllowedFilterModes.Value.HasFlag(FilterMode.Inline) && settings.InlineFilterTemplate == null && settings.Columns.Any(x => x.Filter != null))
61+
{
62+
settings.InlineFilterTemplate = (x) => RenderInlineFilters(x);
63+
}
2864

29-
if (settings.FilterTemplate == null && settings.Filters.Any())
65+
if (settings.AllowedFilterModes.Value.HasFlag(FilterMode.Form) && settings.FilterTemplate == null && settings.Filters.Any())
66+
{
67+
settings.FilterTemplate = (x) => RenderFilters(x);
68+
}
69+
}
70+
else
3071
{
31-
settings.FilterTemplate = (x) => RenderFilters(x);
72+
settings.InitialFilterMode = FilterMode.None;
3273
}
3374

3475
if (GriddlySettings.BeforeRender != null)
@@ -50,6 +91,8 @@
5091
@:<div class="griddly @settings.ClassName" data-role="griddly"
5192
@: @Html.AttributeNullable("data-griddly-url", !simple ? Url.Current() : null)
5293
@: data-griddly-count="@Model.Total"
94+
@: @Html.AttributeNullable("data-griddly-filtermode", settings.InitialFilterMode != FilterMode.None ? settings.InitialFilterMode.ToString() : null)
95+
@: @Html.AttributeNullable("data-griddly-allowedfiltermodes", settings.AllowedFilterModes != FilterMode.None ? Json.Encode(Enum.GetValues(typeof(FilterMode)).Cast<FilterMode>().Where(x => settings.AllowedFilterModes.Value.HasFlag(x) && x != FilterMode.Both && x != FilterMode.None).Select(x => x.ToString())) : null)
5396
@: data-griddly-pagesize="@(settings.PageSize ?? Model.PageSize)"
5497
@: @Html.AttributeNullable("data-griddly-rowclickmodal", settings.RowClickModal)
5598
@: data-griddly-defaultrowids="@Json.Encode(settings.DefaultRowIds != null ? settings.DefaultRowIds.Select(x => x.ToLower()).ToArray() : new[] { "value" })"
@@ -82,7 +125,9 @@
82125
<td colspan="@settings.Columns.Count">@settings.Title</td>
83126
</tr>
84127
}
85-
<tr class="griddly-filters" style="@(settings.FilterTemplate == null || !settings.ShowFilterInitially ? "display:none" : null)">
128+
@if (settings.AllowedFilterModes != FilterMode.None && settings.AllowedFilterModes.Value.HasFlag(FilterMode.Form))
129+
{
130+
<tr class="griddly-filters griddly-filters-form" style="@(settings.InitialFilterMode == FilterMode.Form ? null : "display:none")">
86131
<td colspan="@settings.Columns.Count">
87132
<form class="filterForm novalidate">
88133
@if (settings.FilterTemplate != null)
@@ -97,6 +142,7 @@
97142
</form>
98143
</td>
99144
</tr>
145+
}
100146
<tr class="columnHeaders">
101147
@foreach (GriddlyColumn column in settings.Columns)
102148
{
@@ -117,9 +163,9 @@
117163
</th>
118164
}
119165
</tr>
120-
@if (settings.InlineFilterTemplate != null && settings.HasInlineFilter)
166+
@if (settings.AllowedFilterModes != FilterMode.None && settings.AllowedFilterModes.Value.HasFlag(FilterMode.Inline))
121167
{
122-
<tr class="griddly-filters griddly-filters-inline">@settings.InlineFilterTemplate(settings)</tr>
168+
<tr class="griddly-filters griddly-filters-inline" style="@(settings.InitialFilterMode == FilterMode.Inline ? null : "display:none")">@settings.InlineFilterTemplate(settings)</tr>
123169
}
124170
@if (settings.ShowRowSelectCount)
125171
{

0 commit comments

Comments
 (0)