1+ @using Microsoft .AspNetCore .WebUtilities
2+ @model LearningHub .Nhs .WebUI .Models .Search .SearchResultViewModel
3+
4+ @{
5+ var resourceResult = Model .ResourceSearchResult ;
6+ var filtersApplied = resourceResult .SortItemSelected .Value != string .Empty
7+ || resourceResult .SearchFilters .Any (f => f .Selected ) || resourceResult .SearchResourceAccessLevelFilters .Any (f => f .Selected )
8+ || resourceResult .SearchProviderFilters .Any (f => f .Selected );
9+
10+ var queryParams = QueryHelpers .ParseQuery (Context .Request .QueryString .ToString ().ToLower ());
11+ queryParams [" actiontype" ] = " sort-filter" ;
12+ var pageUrl = Model .CatalogueId > 0 ? " /catalogue/" + Model .CatalogueUrl + " /search" : " /search/results" ;
13+ var actionUrl = QueryHelpers .AddQueryString (pageUrl , queryParams );
14+ var pageFragment = " #search-filters" ;
15+
16+ string FilterSummary ()
17+ {
18+ string summary = $" Sorted by <strong class='nhsuk-tag'>{resourceResult .SortItemSelected .Name }</strong>" ;
19+ var filters = resourceResult .SearchFilters
20+ .Where (f => f .Selected )
21+ .Select (f => $" <strong class='nhsuk-tag'>{f .DisplayName }</strong>" );
22+
23+ var resourceAccessLevelFilters = resourceResult .SearchResourceAccessLevelFilters
24+ .Where (f => f .Selected )
25+ .Select (f => $" <strong class='nhsuk-tag'>{char .ToUpper (f .DisplayName [0 ])}{f .DisplayName [1 .. ]}</strong>" );
26+
27+ if (resourceAccessLevelFilters .Any ())
28+ {
29+ summary += $" and Filtered by Audience access level {string .Join (" " , resourceAccessLevelFilters )}" ;
30+ }
31+
32+
33+ var providerfilters = resourceResult .SearchProviderFilters .Where (f => f .Selected ).Select (f => $" <strong class='nhsuk-tag'>{f .DisplayName }</strong>" );
34+
35+ if (providerfilters .Any ())
36+ {
37+ summary += $" and Filtered by Provider {string .Join (" " , providerfilters )}" ;
38+ }
39+
40+ if (filters .Any ())
41+ {
42+ summary += $" and Filtered by Type {string .Join (" " , filters )}" ;
43+ }
44+ return summary ;
45+ }
46+ }
47+
48+ <h2 class =" nhsuk-u-margin-bottom-3" >
49+ @( $" Showing {resourceResult .TotalHits } result{(resourceResult .TotalHits == 1 ? string .Empty : " s" )}" )
50+ </h2 >
51+
52+ @if (resourceResult .TotalHits > 0 )
53+ {
54+ <div class =" search-filters" id =" search-filters" >
55+ <form action =" @string.Concat(@actionUrl, pageFragment)" method =" post" >
56+ <input type =" hidden" name =" searchId" value =" @Model.ResourceSearchResult.SearchId" />
57+ <input type =" hidden" name =" groupId" value =" @Model.GroupId" />
58+ <input type =" hidden" name =" resourceCount" value =" @Model.ResourceSearchResult.TotalHits" />
59+
60+ <details class =" nhsuk-details nhsuk-expander nhsuk-u-margin-bottom-7" @(this.ViewBag.SelectFilterError == true ? " open" : " " ) >
61+
62+ <summary class =" nhsuk-details__summary nhsuk-u-padding-0" >
63+ <span class =" nhsuk-details__summary-text" >
64+ Sort and filter results
65+ </span >
66+
67+ <hr class =" nhsuk-u-margin-top-4 nhsuk-u-margin-bottom-4" />
68+
69+ <div class =" filter-summary" >
70+ <div >
71+ @Html.Raw(FilterSummary())
72+ </div >
73+ @if (filtersApplied )
74+ {
75+ <div class =" clear-filter" >
76+ 77+ </div >
78+ }
79+ </div >
80+ </summary >
81+
82+ <div class =" search-filter-items nhsuk-u-margin-top-3 nhsuk-u-padding-4 nhsuk-u-padding-bottom-0 @(this.ViewBag.SelectFilterError == true ? " nhsuk-form-group--error " : " " )" >
83+
84+ @if (this .ViewBag .SelectFilterError == true )
85+ {
86+ <span class =" nhsuk-error-message nhsuk-u-padding-bottom-2" >
87+ <span class =" nhsuk-u-visually-hidden" >Error : </span > You must update the sort or filter before applying changes
88+ </span >
89+ }
90+
91+ <div class =" nhsuk-grid-row" >
92+ <fieldset class =" nhsuk-grid-column-full" >
93+ <legend >
94+ <h2 >Sort by : </h2 >
95+ </legend >
96+
97+ <div class =" nhsuk-radios" >
98+ @foreach ( var sortItem in resourceResult .SortItemList )
99+ {
100+ <div class =" nhsuk-grid-column-one-third nhsuk-u-padding-left-0" >
101+ <div class =" nhsuk-radios__item nhsuk-u-padding-bottom-3" >
102+ <
input class =
" nhsuk-radios__input" id =
" [email protected] " name =
" sortby" type =
" radio" 103+ value =" @((int)sortItem.SearchSortType)" checked =" @(sortItem.SearchSortType == resourceResult.SortItemSelected.SearchSortType)" >
104+ <
label class =
" nhsuk-label nhsuk-radios__label" for =
" [email protected] " >
105+ @sortItem.Name
106+ </label >
107+ </div >
108+ </div >
109+ }
110+
111+ </div >
112+ </fieldset >
113+ </div >
114+
115+ @if (resourceResult .SearchResourceAccessLevelFilters != null && resourceResult .SearchResourceAccessLevelFilters .Any ())
116+ {
117+ <hr class =" nhsuk-u-margin-top-4 nhsuk-u-margin-bottom-4" />
118+
119+ <div class =" nhsuk-grid-row" >
120+ <fieldset class =" nhsuk-grid-column-full" >
121+ <legend >
122+ <h2 >Filter by audience access level : </h2 >
123+ </legend >
124+
125+ <div class =" nhsuk-checkboxes" >
126+ @foreach ( var filter in resourceResult .SearchResourceAccessLevelFilters )
127+ {
128+ <div class =" nhsuk-u-padding-left-0" >
129+ <div class =" nhsuk-checkboxes__item nhsuk-u-padding-bottom-3" >
130+ <
input class =
" nhsuk-checkboxes__input" id =
" [email protected] " name =
" resourceAccessLevelId" type =
" checkbox" 131+ value =" @filter.Value" checked =" @filter.Selected" class =" @(filter.Count > 0 ? " " : " disabled " )" >
132+ <
label class =
" nhsuk-label nhsuk-checkboxes__label" for =
" [email protected] " >
133+ Show @filter.DisplayName (@filter .Count )
134+ </label >
135+ </div >
136+ </div >
137+ }
138+ </div >
139+ </fieldset >
140+ </div >
141+ }
142+
143+ @if (resourceResult .SearchProviderFilters .Count > 0 )
144+ {
145+ <hr class =" nhsuk-u-margin-top-4 nhsuk-u-margin-bottom-4" />
146+
147+ <div class =" nhsuk-grid-row" >
148+ <fieldset class =" nhsuk-grid-column-full" >
149+ <legend >
150+ <h2 >Filter by provider : </h2 >
151+ </legend >
152+
153+ <div class =" nhsuk-checkboxes" >
154+ @foreach ( var filter in resourceResult .SearchProviderFilters )
155+ {
156+ <div class =" nhsuk-grid-column-one-third nhsuk-u-padding-left-0" >
157+
158+ <div class =" nhsuk-checkboxes__item nhsuk-u-padding-bottom-3" >
159+ <
input class =
" nhsuk-checkboxes__input" id =
" [email protected] " name =
" providerfilters" type =
" checkbox" 160+ value =" @filter.Value" checked =" @filter.Selected" class =" @(filter.Count > 0 ? " " : " disabled " )" >
161+ <
label class =
" nhsuk-label nhsuk-checkboxes__label" for =
" [email protected] " >
162+ @filter.DisplayName (@filter .Count )
163+ </label >
164+ </div >
165+ </div >
166+ }
167+ </div >
168+ </fieldset >
169+ </div >
170+ }
171+
172+ <hr class =" nhsuk-u-margin-top-4 nhsuk-u-margin-bottom-4" />
173+
174+ <div class =" nhsuk-grid-row" >
175+ <fieldset class =" nhsuk-grid-column-full" >
176+ <legend >
177+ <h2 >Filter by : </h2 >
178+ </legend >
179+
180+ <div class =" nhsuk-checkboxes" >
181+ @foreach ( var filter in resourceResult .SearchFilters )
182+ {
183+ <div class =" nhsuk-grid-column-one-third nhsuk-u-padding-left-0" >
184+
185+ <div class =" nhsuk-checkboxes__item nhsuk-u-padding-bottom-3" >
186+ <
input class =
" nhsuk-checkboxes__input" id =
" [email protected] " name =
" filters" type =
" checkbox" 187+ value =" @filter.Value" checked =" @filter.Selected" class =" @(filter.Count > 0 ? " " : " disabled " )" >
188+ <
label class =
" nhsuk-label nhsuk-checkboxes__label" for =
" [email protected] " >
189+ @filter.DisplayName (@filter .Count )
190+ </label >
191+ </div >
192+ </div >
193+ }
194+
195+ </div >
196+ </fieldset >
197+ </div >
198+
199+ <button class =" nhsuk-button nhsuk-u-margin-top-3 nhsuk-u-margin-bottom-0" data-module =" nhsuk-button" type =" submit" >
200+ Apply
201+ </button >
202+ </div >
203+
204+ </details >
205+ </form >
206+ </div >
207+ }
0 commit comments