Skip to content

Commit ac13ad0

Browse files
committed
Allow templating filter button
1 parent 923b3ec commit ac13ad0

10 files changed

+74
-30
lines changed

Build/CommonAssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@
1515
//
1616
// You can specify all the values or you can default the Revision and Build Numbers
1717
// by using the '*' as shown below:
18-
[assembly: AssemblyVersion("2.7.0")]
19-
[assembly: AssemblyFileVersion("2.7.0")]
18+
[assembly: AssemblyVersion("2.8.0")]
19+
[assembly: AssemblyFileVersion("2.8.0")]
2020
//[assembly: AssemblyInformationalVersion("2.5-filters")]

Griddly.Mvc/Griddly.Mvc.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101
<Compile Include="GriddlyExport.cs" />
102102
<Compile Include="GriddlyFilterBarSettings.cs" />
103103
<Compile Include="GriddlyParameterAttribute.cs" />
104+
<Compile Include="IFilterSettings.cs" />
104105
<Compile Include="InternalExtensions.cs" />
105106
<Compile Include="GriddlyButton.cs" />
106107
<Compile Include="GriddlyColumn.cs" />

Griddly.Mvc/GriddlyCookieFilterValueProvider.cs

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,27 +44,37 @@ public ValueProviderResult GetValue(string key)
4444

4545
public class GriddlyCookieFilterValueProviderFactory : ValueProviderFactory
4646
{
47+
Func<ControllerContext, bool> _canProvide = null;
48+
49+
public GriddlyCookieFilterValueProviderFactory(Func<ControllerContext, bool> canProvide = null)
50+
{
51+
_canProvide = canProvide;
52+
}
53+
4754
public override IValueProvider GetValueProvider(ControllerContext controllerContext)
4855
{
4956
if (controllerContext.IsChildAction && controllerContext.HttpContext.Request.QueryString.Count == 0)
5057
{
51-
var context = controllerContext.Controller.GetOrCreateGriddlyContext();
52-
var cookie = controllerContext.HttpContext.Request.Cookies[context.CookieName];
53-
54-
if (cookie != null && !string.IsNullOrWhiteSpace(cookie.Value))
58+
if (_canProvide?.Invoke(controllerContext) != false)
5559
{
56-
try
60+
var context = controllerContext.Controller.GetOrCreateGriddlyContext();
61+
var cookie = controllerContext.HttpContext.Request.Cookies[context.CookieName];
62+
63+
if (cookie != null && !string.IsNullOrWhiteSpace(cookie.Value))
5764
{
58-
var data = JsonConvert.DeserializeObject<GriddlyFilterCookieData>(cookie.Value);
65+
try
66+
{
67+
var data = JsonConvert.DeserializeObject<GriddlyFilterCookieData>(cookie.Value);
5968

60-
context.CookieData = data;
61-
context.IsDefaultSkipped = true;
69+
context.CookieData = data;
70+
context.IsDefaultSkipped = true;
6271

63-
return new GriddlyCookieFilterValueProvider(context);
64-
}
65-
catch
66-
{
67-
// TODO: log it?
72+
return new GriddlyCookieFilterValueProvider(context);
73+
}
74+
catch
75+
{
76+
// TODO: log it?
77+
}
6878
}
6979
}
7080
}

Griddly.Mvc/GriddlyFilterBarSettings.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,10 @@
1010

1111
namespace Griddly.Mvc
1212
{
13-
public class GriddlyFilterBarSettings
13+
public class GriddlyFilterBarSettings : IGriddlyFilterSettings
1414
{
15-
public GriddlyFilterBarSettings()
16-
{
17-
Filters = new List<GriddlyFilter>();
18-
}
19-
20-
public List<GriddlyFilter> Filters { get; set; }
15+
public List<GriddlyFilter> Filters { get; set; } = new List<GriddlyFilter>();
16+
public Func<object, object> FilterButtonTemplate { get; set; }
2117

2218
public GriddlyFilterBarSettings FilterBox(string field, string caption, FilterDataType dataType = FilterDataType.Decimal, string htmlClass = null, string captionPlural = null, string group = null)
2319
{

Griddly.Mvc/GriddlySettings.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
namespace Griddly.Mvc
1212
{
13-
public abstract class GriddlySettings
13+
public abstract class GriddlySettings: IGriddlyFilterSettings
1414
{
1515
public static string DefaultClassName = null;
1616
public static string DefaultTableClassName = "table table-bordered table-hover";
@@ -88,6 +88,7 @@ public GriddlySettings()
8888
public Func<object, object> AfterTemplate { get; set; }
8989
public Func<GriddlySettings, object> FilterTemplate { get; set; }
9090
public Func<GriddlySettings, object> InlineFilterTemplate { get; set; }
91+
public Func<object, object> FilterButtonTemplate { get; set; }
9192

9293
public Func<object, object> RowClickUrl { get; set; }
9394

Griddly.Mvc/IFilterSettings.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace Griddly.Mvc
8+
{
9+
public interface IGriddlyFilterSettings
10+
{
11+
List<GriddlyFilter> Filters { get; set; }
12+
Func<object, object> FilterButtonTemplate { get; set; }
13+
}
14+
}

Griddly/Views/Home/Test2Grid.cshtml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,21 @@
55

66
@Html.Griddly(new GriddlySettings<TestGridItem>()
77
{
8-
PageSize = 5
8+
PageSize = 5,
9+
FilterButtonTemplate = @<div class="btn-group">
10+
<button type="button" class="btn btn-default griddly-filter-invoke"><i class="glyphicon glyphicon-filter"></i><span class="hidden-xs hidden-sm"> Filter</span></button>
11+
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
12+
<span class="caret"></span>
13+
<span class="sr-only">Toggle Dropdown</span>
14+
</button>
15+
<ul class="dropdown-menu">
16+
<li><a href="#">Action</a></li>
17+
<li><a href="#">Another action</a></li>
18+
<li><a href="#">Something else here</a></li>
19+
<li role="separator" class="divider"></li>
20+
<li><a href="#">Separated link</a></li>
21+
</ul>
22+
</div>
923
}
1024

1125
.Column(x => x.FirstName, "First Name" )

Griddly/Views/Shared/Griddly/Griddly.cshtml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,8 @@
340340

341341
@helper RenderFormFiltersModal(GriddlySettings settings)
342342
{
343-
@Html.Partial("Griddly/GriddlyFilters", settings.Filters)
343+
@Html.Partial("Griddly/GriddlyFilters", settings)
344+
344345
}
345346

346347
@helper RenderFormFiltersInline(GriddlySettings settings)

Griddly/Views/Shared/Griddly/GriddlyFilterBar.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@
1414
<div class="griddly-filter-bar" data-role="griddly-filter-bar"
1515
data-griddly-filter-defaults="@Newtonsoft.Json.JsonConvert.SerializeObject(this.GetGriddlyDefaults())"
1616
data-griddly-currency-symbol="@Griddly.Mvc.GriddlyExtensions.CurrencySymbol">
17-
@Html.Partial("Griddly/GriddlyFilters", Model.Filters)
17+
@Html.Partial("Griddly/GriddlyFilters")
1818
</div>

Griddly/Views/Shared/Griddly/GriddlyFilters.cshtml

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,17 @@
99
*
1010
*@
1111

12-
@model List<GriddlyFilter>
12+
@model IGriddlyFilterSettings
1313

14-
<a class="btn btn-default griddly-filter-invoke"><i class="glyphicon glyphicon-filter"></i><span class="hidden-xs hidden-sm"> Filter</span></a>
15-
@Html.Partial("Griddly/GriddlyFilterValues")
14+
@if (Model.FilterButtonTemplate != null)
15+
{
16+
@Model.FilterButtonTemplate(null)
17+
}
18+
else
19+
{
20+
<a class="btn btn-default griddly-filter-invoke"><i class="glyphicon glyphicon-filter"></i><span class="hidden-xs hidden-sm"> Filter</span></a>
21+
}
22+
@Html.Partial("Griddly/GriddlyFilterValues", Model.Filters)
1623
<span class="griddly-filter-statusall-show">Showing all</span>
1724
<a class="griddly-search-clear griddly-filter-statusfiltered-show" href="javascript:void(0)">Show All</a>
1825
<span class="griddly-filter-statusfiltered-show griddly-filter-statuscandefault-show">|</span>
@@ -26,7 +33,7 @@
2633
</div>
2734
<form class="form-horizontal">
2835
<div class="modal-body">
29-
@Html.Partial("Griddly/GriddlyFilterForm")
36+
@Html.Partial("Griddly/GriddlyFilterForm", Model.Filters)
3037
</div>
3138
<div class="modal-footer">
3239
<button type="button" class="btn btn-default griddly-filter-cancel" data-dismiss="modal">Cancel</button>

0 commit comments

Comments
 (0)