Skip to content

Commit 7e37561

Browse files
committed
Don't save filter cookies if the original path was a deep linked griddly
1 parent 2838683 commit 7e37561

File tree

4 files changed

+55
-35
lines changed

4 files changed

+55
-35
lines changed

Griddly.Mvc/GriddlyContext.cs

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public class GriddlyContext
1010
{
1111
public string Name { get; set; }
1212
public bool IsDefaultSkipped { get; set; }
13+
public bool IsDeepLink { get; set; }
1314

1415
public GriddlyFilterCookieData CookieData { get; set; }
1516

Griddly.Mvc/GriddlyParameterAttribute.cs

+47-35
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ public override void OnActionExecuting(ActionExecutingContext filterContext)
2727

2828
// if a param came in on querystring, skip the defaults. cookie already does its own skip.
2929
if (!context.IsDefaultSkipped && filterContext.ActionParameters.Any(x => x.Value != null && parentKeys.Contains(x.Key)))
30+
{
3031
context.IsDefaultSkipped = true;
32+
context.IsDeepLink = true;
33+
}
3134

3235
foreach (var param in filterContext.ActionParameters.ToList())
3336
{
@@ -49,6 +52,11 @@ public override void OnActionExecuting(ActionExecutingContext filterContext)
4952
}
5053
}
5154
}
55+
else if (filterContext.ActionParameters.TryGetValue("_isDeepLink", out object value))
56+
{
57+
if (Convert.ToBoolean(value) == true)
58+
context.IsDeepLink = true;
59+
}
5260
}
5361

5462
base.OnActionExecuting(filterContext);
@@ -59,58 +67,62 @@ public override void OnActionExecuted(ActionExecutedContext filterContext)
5967
if (filterContext.Result is GriddlyResult result)
6068
{
6169
var context = filterContext.Controller.GetOrCreateGriddlyContext();
62-
var request = filterContext.HttpContext.Request;
6370

64-
Uri parentPath = filterContext.IsChildAction ? request.Url : request.UrlReferrer;
65-
string parentPathString = parentPath?.PathAndQuery.Split('?')[0]; // TODO: less allocations than split
66-
67-
if (parentPathString?.Length > 0)
71+
if (!context.IsDeepLink)
6872
{
69-
HttpCookie cookie = new HttpCookie("gf_" + context.Name)
70-
{
71-
Path = parentPathString
72-
};
73+
var request = filterContext.HttpContext.Request;
74+
75+
Uri parentPath = filterContext.IsChildAction ? request.Url : request.UrlReferrer;
76+
string parentPathString = parentPath?.PathAndQuery.Split('?')[0]; // TODO: less allocations than split
7377

74-
GriddlyFilterCookieData data = new GriddlyFilterCookieData()
78+
if (parentPathString?.Length > 0)
7579
{
76-
Values = new Dictionary<string, string[]>()
77-
};
80+
HttpCookie cookie = new HttpCookie("gf_" + context.Name)
81+
{
82+
Path = parentPathString
83+
};
7884

79-
if (context.SortFields?.Length > 0)
80-
data.SortFields = context.SortFields;
85+
GriddlyFilterCookieData data = new GriddlyFilterCookieData()
86+
{
87+
Values = new Dictionary<string, string[]>()
88+
};
8189

82-
// now, we could use the context.Parameters... but the raw string values seems more like what we want here...
83-
foreach (var param in filterContext.ActionDescriptor.GetParameters())
84-
{
85-
var valueResult = filterContext.Controller.ValueProvider.GetValue(param.ParameterName);
90+
if (context.SortFields?.Length > 0)
91+
data.SortFields = context.SortFields;
8692

87-
if (valueResult?.RawValue != null)
93+
// now, we could use the context.Parameters... but the raw string values seems more like what we want here...
94+
foreach (var param in filterContext.ActionDescriptor.GetParameters())
8895
{
89-
if (valueResult.RawValue is string[] array)
90-
data.Values[param.ParameterName] = array;
91-
else
92-
data.Values[param.ParameterName] = new[] { valueResult.RawValue.ToString() };
96+
var valueResult = filterContext.Controller.ValueProvider.GetValue(param.ParameterName);
97+
98+
if (valueResult?.RawValue != null)
99+
{
100+
if (valueResult.RawValue is string[] array)
101+
data.Values[param.ParameterName] = array;
102+
else
103+
data.Values[param.ParameterName] = new[] { valueResult.RawValue.ToString() };
104+
}
93105
}
94-
}
95106

96-
// ... but if it is a defaults situation, we actually need to grab those
97-
if (filterContext.IsChildAction && !context.IsDefaultSkipped && context.Defaults.Count > 0)
98-
{
99-
foreach (var param in context.Defaults)
107+
// ... but if it is a defaults situation, we actually need to grab those
108+
if (filterContext.IsChildAction && !context.IsDefaultSkipped && context.Defaults.Count > 0)
100109
{
101-
if (param.Value != null)
110+
foreach (var param in context.Defaults)
102111
{
103-
var value = GriddlyExtensions.GetFormattedValueByType(param.Value);
112+
if (param.Value != null)
113+
{
114+
var value = GriddlyExtensions.GetFormattedValueByType(param.Value);
104115

105-
if (value != null)
106-
data.Values[param.Key] = value;
116+
if (value != null)
117+
data.Values[param.Key] = value;
118+
}
107119
}
108120
}
109-
}
110121

111-
cookie.Value = JsonConvert.SerializeObject(data);
122+
cookie.Value = JsonConvert.SerializeObject(data);
112123

113-
filterContext.HttpContext.Response.Cookies.Add(cookie);
124+
filterContext.HttpContext.Response.Cookies.Add(cookie);
125+
}
114126
}
115127
}
116128

Griddly/Scripts/griddly.js

+5
Original file line numberDiff line numberDiff line change
@@ -692,8 +692,13 @@
692692
var filterDefaults = this.$element.data("griddly-filter-defaults");
693693
var currencySymbol = this.$element.data("griddly-currency-symbol");
694694
var removeIconCssClass = this.$element.data("griddly-remove-icon-css-class");
695+
var isDeepLink = this.$element.data("griddly-isdeeplink");
695696

696697
this.additionalRequestValues = {};
698+
699+
if (isDeepLink)
700+
this.additionalRequestValues._isDeepLink = true;
701+
697702
this.options.url = url;
698703
this.options.defaultRowIds = defaultRowIds;
699704
this.options.count = parseInt(count);

Griddly/Views/Shared/Griddly/Griddly.cshtml

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
@{
1515
GriddlySettings settings = (GriddlySettings)ViewBag.settings;
16+
var context = ViewContext.Controller.GetOrCreateGriddlyContext();
1617

1718
settings.Columns.RemoveAll(x => !x.RenderMode.HasFlag(ColumnRenderMode.View));
1819

@@ -158,6 +159,7 @@
158159
@: @Html.AttributeNullable("data-griddly-url", !simple ? Url.Current() : null)
159160
@: @Html.AttributeNullable("data-griddly-urltarget", !simple ? settings.RowClickTarget : null)
160161
@: data-griddly-count="@Model.Total"
162+
@: @Html.AttributeIf("data-griddly-isdeeplink", context.IsDeepLink, true)
161163
@: @Html.AttributeNullable("data-griddly-filtermode", settings.InitialFilterMode != FilterMode.None ? settings.InitialFilterMode.ToString() : null)
162164
@: @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)
163165
@: data-griddly-isfilterforminline="@settings.IsFilterFormInline.ToString().ToLower()"

0 commit comments

Comments
 (0)