Error compiling template "Designs/identity_v2/QueryPublisher/id-relewise-productlist-with-facets.cshtml"
Line 71: The type or namespace name 'ProductListService' does not exist in the namespace 'Co3.ID.Dw.Relewise.Services' (are you missing an assembly reference?)
Line 125: The type or namespace name 'ProductQuery' could not be found (are you missing a using directive or an assembly reference?)
Line 125: The type or namespace name 'ProductQuery' could not be found (are you missing a using directive or an assembly reference?)
Line 136: The type or namespace name 'RelewiseProductList' could not be found (are you missing a using directive or an assembly reference?)
Line 653: The type or namespace name 'RelewiseProductListProduct' could not be found (are you missing a using directive or an assembly reference?)
1 //------------------------------------------------------------------------------
2 // <auto-generated>
3 // This code was generated by a tool.
4 // Runtime Version:4.0.30319.42000
5 //
6 // Changes to this file may cause incorrect behavior and will be lost if
7 // the code is regenerated.
8 // </auto-generated>
9 //------------------------------------------------------------------------------
10
11 namespace CompiledRazorTemplates.Dynamic {
12 using System;
13 using System.Collections.Generic;
14 using System.Linq;
15
16 #line 2 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
17 using System.Collections.Specialized;
18
19 #line default
20 #line hidden
21
22 #line 3 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
23 using System.Text.Json;
24
25 #line default
26 #line hidden
27
28 #line 4 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
29 using Co3.ID.Dw.Models.Frontend.Ecommerce;
30
31 #line default
32 #line hidden
33
34 #line 5 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
35 using Co3.ID.Dw.Relewise.Models;
36
37 #line default
38 #line hidden
39
40 #line 6 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
41 using Co3.ID.Dw.Services;
42
43 #line default
44 #line hidden
45
46 #line 7 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
47 using Dynamicweb;
48
49 #line default
50 #line hidden
51
52 #line 8 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
53 using Dynamicweb.Ecommerce.ProductCatalog;
54
55 #line default
56 #line hidden
57
58 #line 9 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
59 using Dynamicweb.Frontend;
60
61 #line default
62 #line hidden
63
64 #line 10 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
65 using Relewise.Client.DataTypes;
66
67 #line default
68 #line hidden
69
70 #line 11 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
71 using ProductListService = Co3.ID.Dw.Relewise.Services.ProductListService;
72
73 #line default
74 #line hidden
75
76 #line 12 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
77 using RenderingService = Co3.Espresso.Website.Services.RenderingService;
78
79 #line default
80 #line hidden
81
82
83 public class RazorEngine_7de2e0ee2cde44c2a885b2824ed5b7fa : Co3.Espresso.Website.TemplateBases.Paragraphs.Module {
84
85 #line hidden
86
87 public RazorEngine_7de2e0ee2cde44c2a885b2824ed5b7fa() {
88 }
89
90 public override void Execute() {
91 WriteLiteral("\r\n\r\n");
92
93
94 #line 15 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
95
96 int pageId = PageView.Current().Page.ID;
97 NameValueCollection query = Context.Current.Request.QueryString;
98
99 string sortBy = query["sortBy"] ?? "relevance";
100
101 int.TryParse(query["pageNum"] ?? "1", out int pageNum);
102 int.TryParse(query["pageSize"] ?? "14", out int pageSize);
103
104 Dictionary<string, List<string>> filters = ProductListService.Instance.GetFiltersFromQuery(query);
105
106 Dictionary<string, string> sortOptions = new Dictionary<string, string>()
107 {
108 {
109 "relevance", "Relevance"
110 },
111 {
112 "popularity", "Popularity"
113 },
114 {
115 "name-asc", "Navn (A-Å)"
116 },
117 {
118 "name-desc", "Navn (Å-A)"
119 }
120 };
121
122 bool isCategoryPage = (bool)(PageView.Current().Page.Item["RelewiseCategory"] != null ? PageView.Current().Page.Item["RelewiseCategory"] : false);
123 string categoryId = isCategoryPage ? pageId.ToString() : string.Empty;
124
125 ProductQuery productQuery = new ProductQuery()
126 {
127 CategoryId = categoryId,
128 PageId = pageId,
129 PageNum = pageNum,
130 PageSize = pageSize,
131 SortBy = sortBy,
132 Filters = filters,
133 GetCategories = true
134 };
135
136 RelewiseProductList result = ProductListService.Instance.GetProductListProducts(productQuery);
137
138
139
140 #line default
141 #line hidden
142 WriteLiteral(" <script>console.log( \'%cInitial Relewise Query\',\r\n \'background: re" +
143 "beccapurple; color: white\', ");
144
145
146 #line 59 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
147 Write(Newtonsoft.Json.JsonConvert.SerializeObject(productQuery));
148
149
150 #line default
151 #line hidden
152 WriteLiteral(");</script>\r\n");
153
154 WriteLiteral(" <script>console.log( \'%cInitial Relewise Result\',\r\n \'background: r" +
155 "ebeccapurple; color: white\', ");
156
157
158 #line 61 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
159 Write(Newtonsoft.Json.JsonConvert.SerializeObject(result));
160
161
162 #line default
163 #line hidden
164 WriteLiteral(");</script>\r\n");
165
166
167 #line 62 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
168
169 int currentCount = Math.Min(productQuery.PageNum * productQuery.PageSize, result.TotalProducts);
170 bool isLoadMoreDisabled = (productQuery.PageNum * productQuery.PageSize) >= result.TotalProducts;
171 bool showLoadMore = productQuery.PageNum == 1 && !isLoadMoreDisabled;
172
173 int productSkeletonCount = ( productQuery.PageSize * productQuery.PageNum ) - productQuery.PageSize;
174 int previousPageNum = 1;
175 int productCounter = 1;
176 int serverRenderedProductCounter = 1;
177
178 ScriptService.Instance.AddScript("identity.productlist");
179
180
181 #line default
182 #line hidden
183 WriteLiteral("\r\n\r\n<product-list\r\n id=\"product-list-root\"\r\n class=\"e-productlist\"\r\n pag" +
184 "e-id=\"");
185
186
187 #line 78 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
188 Write(productQuery.PageId);
189
190
191 #line default
192 #line hidden
193 WriteLiteral("\"\r\n page-num=\"");
194
195
196 #line 79 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
197 Write(productQuery.PageNum);
198
199
200 #line default
201 #line hidden
202 WriteLiteral("\"\r\n page-size=\"");
203
204
205 #line 80 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
206 Write(productQuery.PageSize);
207
208
209 #line default
210 #line hidden
211 WriteLiteral("\"\r\n category=\"");
212
213
214 #line 81 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
215 Write(categoryId);
216
217
218 #line default
219 #line hidden
220 WriteLiteral("\"\r\n aria-busy=\"false\">\r\n\r\n <div");
221
222 WriteLiteral(" class=\"row\"");
223
224 WriteLiteral(">\r\n <div");
225
226 WriteLiteral(" class=\"col-12\"");
227
228 WriteLiteral(">\r\n <div");
229
230 WriteLiteral(" class=\"row\"");
231
232 WriteLiteral(">\r\n <div");
233
234 WriteLiteral(" class=\"col-12\"");
235
236 WriteLiteral(">\r\n <div");
237
238 WriteLiteral(" class=\"border-bottom w-100 mb-1 pb-1\"");
239
240 WriteLiteral(">\r\n <product-list-selected-filters");
241
242 WriteLiteral(" class=\"d-flex small\"");
243
244 WriteLiteral(">\r\n");
245
246 WriteLiteral(" ");
247
248
249 #line 90 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
250 Write(RenderingService.Instance.PartialView("QueryPublisher/partials/relewise-custom-productlist--selected-filters.cshtml", result.SelectedFilters));
251
252
253 #line default
254 #line hidden
255 WriteLiteral("\r\n </product-list-selected-filters>\r\n <" +
256 "/div>\r\n\r\n </div>\r\n\r\n <div");
257
258 WriteLiteral(" class=\"col-12\"");
259
260 WriteLiteral(">\r\n <div");
261
262 WriteLiteral(" class=\"border-bottom w-100 mb-1 pb-1\"");
263
264 WriteLiteral(">\r\n <product-list-filters");
265
266 WriteLiteral(" class=\"d-flex\"");
267
268 WriteLiteral(" style=\"gap: 1em;\"");
269
270 WriteLiteral(">\r\n");
271
272 WriteLiteral(" ");
273
274
275 #line 99 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
276 Write(RenderingService.Instance.PartialView("QueryPublisher/partials/relewise-custom-productlist--facets.cshtml", result.Facets));
277
278
279 #line default
280 #line hidden
281 WriteLiteral("\r\n </product-list-filters>\r\n </div>\r\n " +
282 " </div>\r\n </div>\r\n </div>\r\n <div");
283
284 WriteLiteral(" class=\"col-12 col-md-3\"");
285
286 WriteLiteral(">\r\n <p");
287
288 WriteLiteral(" class=\"e-productlist-filters-group-header small mb-0 py-1\"");
289
290 WriteLiteral(">\r\n <span");
291
292 WriteLiteral(" class=\"e-productlist-filters-group-name h3 m-0\"");
293
294 WriteLiteral(">Katagorier</span>\r\n </p>\r\n <product-list-categories");
295
296 WriteLiteral(" class=\"e-productlist-filters-group-options small mt-1\"");
297
298 WriteLiteral(">\r\n <div");
299
300 WriteLiteral(" class=\"e-nav-local e-nav-local-vertical mb-2\"");
301
302 WriteLiteral(">\r\n <nav");
303
304 WriteLiteral(" class=\"e-nav-local-container\"");
305
306 WriteLiteral(">\r\n <div");
307
308 WriteLiteral(" class=\"nav flex-column\"");
309
310 WriteLiteral(">\r\n");
311
312
313 #line 113 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
314
315
316 #line default
317 #line hidden
318
319 #line 113 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
320 foreach (ProductCategoryResult category in result.Categories)
321 {
322 bool isActive = pageId.ToString().Equals(category.CategoryId, StringComparison.InvariantCultureIgnoreCase);
323 string categoryLink = SearchEngineFriendlyURLs.GetFriendlyUrl($"Default.aspx?ID={category.CategoryId}");
324
325
326 #line default
327 #line hidden
328 WriteLiteral(" <li");
329
330 WriteAttribute("class", Tuple.Create(" class=\"", 4993), Tuple.Create("\"", 5060)
331 , Tuple.Create(Tuple.Create("", 5001), Tuple.Create("nav-item", 5001), true)
332
333 #line 117 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
334 , Tuple.Create(Tuple.Create(" ", 5009), Tuple.Create<System.Object, System.Int32>(isActive ? "is-inpath is-active" : string.Empty
335
336 #line default
337 #line hidden
338 , 5010), false)
339 );
340
341 WriteLiteral(">\r\n <a");
342
343 WriteAttribute("href", Tuple.Create(" href=\"", 5102), Tuple.Create("\"", 5122)
344
345 #line 118 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
346 , Tuple.Create(Tuple.Create("", 5109), Tuple.Create<System.Object, System.Int32>(categoryLink
347
348 #line default
349 #line hidden
350 , 5109), false)
351 );
352
353 WriteAttribute("class", Tuple.Create("\r\n class=\"", 5123), Tuple.Create("\"", 5230)
354 , Tuple.Create(Tuple.Create("", 5171), Tuple.Create("nav-link", 5171), true)
355
356 #line 119 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
357 , Tuple.Create(Tuple.Create(" ", 5179), Tuple.Create<System.Object, System.Int32>(isActive ? "is-inpath is-active" : string.Empty
358
359 #line default
360 #line hidden
361 , 5180), false)
362 );
363
364 WriteLiteral(">\r\n");
365
366 WriteLiteral(" ");
367
368
369 #line 120 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
370 Write(category.DisplayName);
371
372
373 #line default
374 #line hidden
375 WriteLiteral("\r\n </a>\r\n </li>" +
376 "\r\n");
377
378
379 #line 123 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
380 }
381
382
383 #line default
384 #line hidden
385 WriteLiteral(" </div>\r\n </nav>\r\n </div" +
386 ">\r\n </product-list-categories>\r\n </div>\r\n <div");
387
388 WriteLiteral(" class=\"col-12 col-md-9\"");
389
390 WriteLiteral(">\r\n <div");
391
392 WriteLiteral(" class=\"row \"");
393
394 WriteLiteral(">\r\n\r\n <div");
395
396 WriteLiteral(" class=\"col-12\"");
397
398 WriteLiteral(">\r\n <div");
399
400 WriteLiteral(" class=\"d-flex justify-content-between align-items-center mb-1\"");
401
402 WriteLiteral(">\r\n <product-list-count");
403
404 WriteLiteral(" class=\"mb-0 small\"");
405
406 WriteAttribute("current-count", Tuple.Create(" current-count=\"", 5812), Tuple.Create("\"", 5841)
407
408 #line 134 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
409 , Tuple.Create(Tuple.Create("", 5828), Tuple.Create<System.Object, System.Int32>(currentCount
410
411 #line default
412 #line hidden
413 , 5828), false)
414 );
415
416 WriteAttribute("total-count", Tuple.Create("\r\n total-count=\"", 5842), Tuple.Create("\"", 5922)
417
418 #line 135 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
419 , Tuple.Create(Tuple.Create("", 5901), Tuple.Create<System.Object, System.Int32>(result.TotalProducts
420
421 #line default
422 #line hidden
423 , 5901), false)
424 );
425
426 WriteLiteral(">\r\n <div");
427
428 WriteLiteral(" class=\"d-flex\"");
429
430 WriteLiteral(" style=\"gap:5px;\"");
431
432 WriteLiteral(">\r\n <span>\r\n <s" +
433 "pan");
434
435 WriteLiteral(" class=\"product-list-current-count\"");
436
437 WriteLiteral(">");
438
439
440 #line 138 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
441 Write(currentCount);
442
443
444 #line default
445 #line hidden
446 WriteLiteral("</span> / <span\r\n class=\"product-list-tota" +
447 "l-count\">");
448
449
450 #line 139 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
451 Write(result.TotalProducts);
452
453
454 #line default
455 #line hidden
456 WriteLiteral("</span>\r\n </span>\r\n " +
457 " Produkter\r\n </div>\r\n </produc" +
458 "t-list-count>\r\n <product-list-sort");
459
460 WriteLiteral(" class=\"mb-0 small\"");
461
462 WriteLiteral(">\r\n <select");
463
464 WriteLiteral(" class=\"custom-select custom-select-sm custom-select-id-sort\"");
465
466 WriteLiteral(">\r\n");
467
468
469 #line 146 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
470
471
472 #line default
473 #line hidden
474
475 #line 146 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
476 foreach (KeyValuePair<string, string> sortOption in sortOptions)
477 {
478
479
480 #line default
481 #line hidden
482 WriteLiteral(" <option");
483
484 WriteAttribute("value", Tuple.Create(" value=\"", 6750), Tuple.Create("\"", 6773)
485
486 #line 148 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
487 , Tuple.Create(Tuple.Create("", 6758), Tuple.Create<System.Object, System.Int32>(sortOption.Key
488
489 #line default
490 #line hidden
491 , 6758), false)
492 );
493
494 WriteLiteral("\r\n ");
495
496
497 #line 149 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
498 Write(sortBy == sortOption.Key ? "selected" : string.Empty);
499
500
501 #line default
502 #line hidden
503 WriteLiteral(">");
504
505
506 #line 149 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
507 Write(sortOption.Value);
508
509
510 #line default
511 #line hidden
512 WriteLiteral("</option>\r\n");
513
514
515 #line 150 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
516 }
517
518
519 #line default
520 #line hidden
521 WriteLiteral(" </select>\r\n </product-list-sor" +
522 "t>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n " +
523 " <div");
524
525 WriteLiteral(" class=\"row\"");
526
527 WriteLiteral(">\r\n <div");
528
529 WriteLiteral(" class=\"col-12\"");
530
531 WriteLiteral(">\r\n <product-list-products");
532
533 WriteLiteral(" class=\"e-productlist row no-gutters\"");
534
535 WriteLiteral(">\r\n\r\n");
536
537
538 #line 161 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
539
540
541 #line default
542 #line hidden
543
544 #line 161 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
545 if ( productSkeletonCount > 0 && productQuery.PageNum > 1 )
546 {
547 int productsPerPageCounter = 0;
548 string isObservable = string.Empty;
549
550 for ( int i = 0; i < productSkeletonCount; i++ )
551 {
552
553
554
555 #line default
556 #line hidden
557 WriteLiteral(" <div");
558
559 WriteLiteral(" class=\"col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 d-flex e-productlist-skeleton\"");
560
561 WriteLiteral(">\r\n <div");
562
563 WriteAttribute("class", Tuple.Create(" class=\"", 7762), Tuple.Create("\"", 7842)
564 , Tuple.Create(Tuple.Create("", 7770), Tuple.Create("e-productlist-skeleton-item", 7770), true)
565 , Tuple.Create(Tuple.Create(" ", 7797), Tuple.Create("js-e-productlist-skeleton-item", 7798), true)
566
567 #line 170 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
568 , Tuple.Create(Tuple.Create(" ", 7828), Tuple.Create<System.Object, System.Int32>(isObservable
569
570 #line default
571 #line hidden
572 , 7829), false)
573 );
574
575 WriteLiteral(" data-page=\"");
576
577
578 #line 170 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
579 Write(previousPageNum);
580
581
582 #line default
583 #line hidden
584 WriteLiteral("\"");
585
586 WriteLiteral(" data-index=\"");
587
588
589 #line 170 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
590 Write(productsPerPageCounter);
591
592
593 #line default
594 #line hidden
595 WriteLiteral("\"");
596
597 WriteLiteral("></div>\r\n </div>\r\n");
598
599
600 #line 172 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
601
602 if ( productCounter == 10 )
603 {
604
605
606 #line default
607 #line hidden
608
609 #line 175 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
610 Write(RenderingService.Instance.PartialView( "ecom/productlist/partials/identity-productlist-cta.cshtml" ));
611
612
613 #line default
614 #line hidden
615
616 #line 175 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
617
618 }
619
620 if ( productCounter % productQuery.PageSize == 0 )
621 {
622 previousPageNum++;
623 }
624 productCounter++;
625 productsPerPageCounter++;
626 if ( productsPerPageCounter % productQuery.PageSize == ( productQuery.PageSize - 1 ) )
627 {
628 isObservable = "is-observable";
629 }
630 else if ( ( productsPerPageCounter + 1 ) > productQuery.PageSize )
631 {
632 productsPerPageCounter = 0;
633 isObservable = string.Empty;
634 }
635 }
636
637 serverRenderedProductCounter = productCounter;
638 }
639
640
641 #line default
642 #line hidden
643 WriteLiteral("\r\n");
644
645
646 #line 198 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
647
648
649 #line default
650 #line hidden
651
652 #line 198 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
653 foreach (RelewiseProductListProduct product in result.Products)
654 {
655
656
657 #line default
658 #line hidden
659 WriteLiteral(" <div");
660
661 WriteLiteral(" class=\"col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 d-flex\"");
662
663 WriteLiteral(">\r\n");
664
665 WriteLiteral(" ");
666
667
668 #line 201 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
669 Write(product.ListItemHtml);
670
671
672 #line default
673 #line hidden
674 WriteLiteral("\r\n </div>\r\n");
675
676
677 #line 203 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
678
679 if ( serverRenderedProductCounter == 10)
680 {
681
682
683 #line default
684 #line hidden
685
686 #line 206 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
687 Write(RenderingService.Instance.PartialView( "ecom/productlist/partials/identity-productlist-cta.cshtml" ));
688
689
690 #line default
691 #line hidden
692
693 #line 206 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
694
695 }
696
697 serverRenderedProductCounter++;
698 }
699
700
701 #line default
702 #line hidden
703 WriteLiteral(" </product-list-products>\r\n <div");
704
705 WriteLiteral(" class=\"row\"");
706
707 WriteLiteral(">\r\n <div");
708
709 WriteLiteral(" class=\"col-12 py-2 col-lg-4 col-xl-4 offset-lg-4\"");
710
711 WriteLiteral(">\r\n <product-list-load-more");
712
713 WriteAttribute("is-lazyloading", Tuple.Create(" is-lazyloading=\"", 10154), Tuple.Create("\"", 10205)
714
715 #line 214 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
716 , Tuple.Create(Tuple.Create("", 10171), Tuple.Create<System.Object, System.Int32>(showLoadMore ? "false" : "true"
717
718 #line default
719 #line hidden
720 , 10171), false)
721 );
722
723 WriteAttribute("is-disabled", Tuple.Create("\r\n is-disabled=\"", 10206), Tuple.Create("\"", 10313)
724
725 #line 215 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
726 , Tuple.Create(Tuple.Create("", 10273), Tuple.Create<System.Object, System.Int32>(isLoadMoreDisabled ? "true" : "false"
727
728 #line default
729 #line hidden
730 , 10273), false)
731 );
732
733 WriteLiteral(">\r\n <button");
734
735 WriteLiteral(" type=\"button\"");
736
737 WriteLiteral("\r\n class=\"btn btn-block btn-primary e-prod" +
738 "uctlist-load-more-products-btn relewise-productlist-loadmore-btn\"");
739
740 WriteLiteral(">\r\n");
741
742 WriteLiteral(" ");
743
744
745 #line 218 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
746 Write(Translate("eCom Productlist - Load More Products - Button", "Hent flere produkter"));
747
748
749 #line default
750 #line hidden
751 WriteLiteral(" <span\r\n class=\"material-icons\">keyboard_a" +
752 "rrow_down</span>\r\n </button>\r\n " +
753 " <div");
754
755 WriteLiteral(" class=\"relewise-productlist-loadmore-spinner mt-4 position-relative text-center\"" +
756 "");
757
758 WriteLiteral(">\r\n");
759
760 WriteLiteral(" ");
761
762
763 #line 222 "D:\dynamicweb.net\Solutions\staging-id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\QueryPublisher\id-relewise-productlist-with-facets.cshtml"
764 Write(RenderingService.Instance.PartialView("_partials/loading-spinner.cshtml"));
765
766
767 #line default
768 #line hidden
769 WriteLiteral("\r\n </div>\r\n </product-l" +
770 "ist-load-more>\r\n </div>\r\n </div>\r\n " +
771 " <!-- Load More -->\r\n\r\n </div>\r\n </div>" +
772 "\r\n </div>\r\n </div>\r\n\r\n</product-list>\r\n\r\n\r\n<style scoped>\r\n product" +
773 "-list-load-more[is-disabled=\"true\"] {\r\n .relewise-productlist-loadmore-bt" +
774 "n, .relewise-productlist-loadmore-spinner {\r\n display: none;\r\n " +
775 " }\r\n }\r\n\r\n product-list-load-more[is-disabled=\"false\"] {\r\n &[is-laz" +
776 "yloading=\"false\"] {\r\n .relewise-productlist-loadmore-btn {\r\n " +
777 " display: block;\r\n }\r\n\r\n .relewise-productlist-loadm" +
778 "ore-spinner {\r\n display: none;\r\n }\r\n }\r\n\r\n " +
779 " &[is-lazyloading=\"true\"] {\r\n .relewise-productlist-loadmore-btn {\r" +
780 "\n display: none;\r\n }\r\n\r\n .relewise-productl" +
781 "ist-loadmore-spinner {\r\n display: block;\r\n }\r\n " +
782 "}\r\n }\r\n\r\n .custom-dropdown { display: inline-block; position: relative; }\r" +
783 "\n\r\n .custom-dropdown .custom-dropdown-toggle {\r\n padding: 1rem;\r\n " +
784 " background: #f5f5f5;\r\n color: #212121;\r\n border-radius: 0;\r\n " +
785 " cursor: pointer;\r\n border: .125em solid transparent;\r\n border" +
786 "-bottom-width: 2px;\r\n display: flex;\r\n justify-content: space-betw" +
787 "een;\r\n align-items: center;\r\n text-align: center;\r\n vertica" +
788 "l-align: middle;\r\n line-height: 1.25;\r\n font-size: .875em;\r\n\r\n " +
789 " .trigger-icon {\r\n transition: all .3s ease;\r\n font-siz" +
790 "e: 1.5em;\r\n line-height: 0;\r\n color: #616161;\r\n }\r\n" +
791 " }\r\n\r\n .custom-dropdown .custom-dropdown-menu {\r\n min-width: 180px;" +
792 "\r\n background: #fff;\r\n border: 1px solid #ccc;\r\n border-rad" +
793 "ius: 0.25rem;\r\n box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.05);\r\n " +
794 " padding: 0.5em 0;\r\n display: none;\r\n position: absolute;\r\n " +
795 " z-index: 1000;\r\n }\r\n\r\n .custom-dropdown .custom-dropdown-menu.show {\r\n " +
796 " display: block;\r\n }\r\n\r\n .custom-dropdown .custom-dropdown-item {\r\n " +
797 " display: block;\r\n width: 100%;\r\n padding: 0.375em 1em;\r\n " +
798 " color: #333;\r\n text-decoration: none;\r\n background: none;\r\n " +
799 " border: 0;\r\n position: relative;\r\n\r\n &.disabled {\r\n " +
800 " opacity: .5;\r\n pointer-events: none;\r\n }\r\n\r\n .custom-" +
801 "dropdown-item-check {\r\n position: absolute;\r\n top: 0;\r\n " +
802 " left: 0;\r\n width: 100%;\r\n height: 100%;\r\n " +
803 " display: flex;\r\n align-items: center;\r\n justify-conten" +
804 "t: center;\r\n padding-top: 35%;\r\n text-align: center;\r\n " +
805 " }\r\n\r\n /*\r\n input{\r\n opacity: 0;\r\n positi" +
806 "on: absolute;\r\n + label{\r\n cursor: pointer;\r\n " +
807 " width: 100%;\r\n height: 100%;\r\n display: fle" +
808 "x;\r\n align-items: center;\r\n justify-content: cente" +
809 "r;\r\n background: transparent;\r\n font-size: .6em;\r\n" +
810 " white-space: nowrap;\r\n }\r\n &:checked + lab" +
811 "el{\r\n background: #f1f1f1;\r\n }\r\n }*/\r\n }\r\n\r\n" +
812 " .custom-dropdown .custom-dropdown-item:hover,\r\n .custom-dropdown .custom-" +
813 "dropdown-item:focus {\r\n background: #f6f6f6;\r\n color: #16181b;\r\n " +
814 " outline: none;\r\n }\r\n\r\n product-list[aria-busy=\"true\"] {\r\n poi" +
815 "nter-events: none;\r\n }\r\n product-list[aria-busy=\"true\"] .e-productlist-ite" +
816 "m {\r\n opacity: .6;\r\n filter: saturate(.85) contrast(.98);\r\n " +
817 " transition: opacity .2 ease;\r\n }\r\n \r\n</style>");
818
819 }
820 }
821 }
822
1 @inherits Co3.Espresso.Website.TemplateBases.Paragraphs.Module
2 @using System.Collections.Specialized
3 @using System.Text.Json
4 @using Co3.ID.Dw.Models.Frontend.Ecommerce
5 @using Co3.ID.Dw.Relewise.Models
6 @using Co3.ID.Dw.Services
7 @using Dynamicweb
8 @using Dynamicweb.Ecommerce.ProductCatalog
9 @using Dynamicweb.Frontend
10 @using Relewise.Client.DataTypes
11 @using ProductListService = Co3.ID.Dw.Relewise.Services.ProductListService
12 @using RenderingService = Co3.Espresso.Website.Services.RenderingService
13
14
15 @{
16 int pageId = PageView.Current().Page.ID;
17 NameValueCollection query = Context.Current.Request.QueryString;
18
19 string sortBy = query["sortBy"] ?? "relevance";
20
21 int.TryParse(query["pageNum"] ?? "1", out int pageNum);
22 int.TryParse(query["pageSize"] ?? "14", out int pageSize);
23
24 Dictionary<string, List<string>> filters = ProductListService.Instance.GetFiltersFromQuery(query);
25
26 Dictionary<string, string> sortOptions = new Dictionary<string, string>()
27 {
28 {
29 "relevance", "Relevance"
30 },
31 {
32 "popularity", "Popularity"
33 },
34 {
35 "name-asc", "Navn (A-Å)"
36 },
37 {
38 "name-desc", "Navn (Å-A)"
39 }
40 };
41
42 bool isCategoryPage = (bool)(PageView.Current().Page.Item["RelewiseCategory"] != null ? PageView.Current().Page.Item["RelewiseCategory"] : false);
43 string categoryId = isCategoryPage ? pageId.ToString() : string.Empty;
44
45 ProductQuery productQuery = new ProductQuery()
46 {
47 CategoryId = categoryId,
48 PageId = pageId,
49 PageNum = pageNum,
50 PageSize = pageSize,
51 SortBy = sortBy,
52 Filters = filters,
53 GetCategories = true
54 };
55
56 RelewiseProductList result = ProductListService.Instance.GetProductListProducts(productQuery);
57
58 <script>console.log( '%cInitial Relewise Query',
59 'background: rebeccapurple; color: white', @Newtonsoft.Json.JsonConvert.SerializeObject(productQuery));</script>
60 <script>console.log( '%cInitial Relewise Result',
61 'background: rebeccapurple; color: white', @Newtonsoft.Json.JsonConvert.SerializeObject(result));</script>
62
63 int currentCount = Math.Min(productQuery.PageNum * productQuery.PageSize, result.TotalProducts);
64 bool isLoadMoreDisabled = (productQuery.PageNum * productQuery.PageSize) >= result.TotalProducts;
65 bool showLoadMore = productQuery.PageNum == 1 && !isLoadMoreDisabled;
66
67 int productSkeletonCount = ( productQuery.PageSize * productQuery.PageNum ) - productQuery.PageSize;
68 int previousPageNum = 1;
69 int productCounter = 1;
70 int serverRenderedProductCounter = 1;
71
72 ScriptService.Instance.AddScript("identity.productlist");
73 }
74
75 <product-list
76 id="product-list-root"
77 class="e-productlist"
78 page-id="@productQuery.PageId"
79 page-num="@productQuery.PageNum"
80 page-size="@productQuery.PageSize"
81 category="@categoryId"
82 aria-busy="false">
83
84 <div class="row">
85 <div class="col-12">
86 <div class="row">
87 <div class="col-12">
88 <div class="border-bottom w-100 mb-1 pb-1">
89 <product-list-selected-filters class="d-flex small">
90 @RenderingService.Instance.PartialView("QueryPublisher/partials/relewise-custom-productlist--selected-filters.cshtml", result.SelectedFilters)
91 </product-list-selected-filters>
92 </div>
93
94 </div>
95
96 <div class="col-12">
97 <div class="border-bottom w-100 mb-1 pb-1">
98 <product-list-filters class="d-flex" style="gap: 1em;">
99 @RenderingService.Instance.PartialView("QueryPublisher/partials/relewise-custom-productlist--facets.cshtml", result.Facets)
100 </product-list-filters>
101 </div>
102 </div>
103 </div>
104 </div>
105 <div class="col-12 col-md-3">
106 <p class="e-productlist-filters-group-header small mb-0 py-1">
107 <span class="e-productlist-filters-group-name h3 m-0">Katagorier</span>
108 </p>
109 <product-list-categories class="e-productlist-filters-group-options small mt-1">
110 <div class="e-nav-local e-nav-local-vertical mb-2">
111 <nav class="e-nav-local-container">
112 <div class="nav flex-column">
113 @foreach (ProductCategoryResult category in result.Categories)
114 {
115 bool isActive = pageId.ToString().Equals(category.CategoryId, StringComparison.InvariantCultureIgnoreCase);
116 string categoryLink = SearchEngineFriendlyURLs.GetFriendlyUrl($"Default.aspx?ID={category.CategoryId}");
117 <li class="nav-item @(isActive ? "is-inpath is-active" : string.Empty)">
118 <a href="@categoryLink"
119 class="nav-link @(isActive ? "is-inpath is-active" : string.Empty)">
120 @category.DisplayName
121 </a>
122 </li>
123 }
124 </div>
125 </nav>
126 </div>
127 </product-list-categories>
128 </div>
129 <div class="col-12 col-md-9">
130 <div class="row ">
131
132 <div class="col-12">
133 <div class="d-flex justify-content-between align-items-center mb-1">
134 <product-list-count class="mb-0 small" current-count="@currentCount"
135 total-count="@result.TotalProducts">
136 <div class="d-flex" style="gap:5px;">
137 <span>
138 <span class="product-list-current-count">@currentCount</span> / <span
139 class="product-list-total-count">@result.TotalProducts</span>
140 </span>
141 Produkter
142 </div>
143 </product-list-count>
144 <product-list-sort class="mb-0 small">
145 <select class="custom-select custom-select-sm custom-select-id-sort">
146 @foreach (KeyValuePair<string, string> sortOption in sortOptions)
147 {
148 <option value="@sortOption.Key"
149 @(sortBy == sortOption.Key ? "selected" : string.Empty)>@sortOption.Value</option>
150 }
151 </select>
152 </product-list-sort>
153 </div>
154
155 </div>
156 </div>
157 <div class="row">
158 <div class="col-12">
159 <product-list-products class="e-productlist row no-gutters">
160
161 @if ( productSkeletonCount > 0 && productQuery.PageNum > 1 )
162 {
163 int productsPerPageCounter = 0;
164 string isObservable = string.Empty;
165
166 for ( int i = 0; i < productSkeletonCount; i++ )
167 {
168
169 <div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 d-flex e-productlist-skeleton">
170 <div class="e-productlist-skeleton-item js-e-productlist-skeleton-item @isObservable" data-page="@previousPageNum" data-index="@productsPerPageCounter"></div>
171 </div>
172
173 if ( productCounter == 10 )
174 {
175 @RenderingService.Instance.PartialView( "ecom/productlist/partials/identity-productlist-cta.cshtml" )
176 }
177
178 if ( productCounter % productQuery.PageSize == 0 )
179 {
180 previousPageNum++;
181 }
182 productCounter++;
183 productsPerPageCounter++;
184 if ( productsPerPageCounter % productQuery.PageSize == ( productQuery.PageSize - 1 ) )
185 {
186 isObservable = "is-observable";
187 }
188 else if ( ( productsPerPageCounter + 1 ) > productQuery.PageSize )
189 {
190 productsPerPageCounter = 0;
191 isObservable = string.Empty;
192 }
193 }
194
195 serverRenderedProductCounter = productCounter;
196 }
197
198 @foreach (RelewiseProductListProduct product in result.Products)
199 {
200 <div class="col-6 col-sm-6 col-md-6 col-lg-3 col-xl-3 d-flex">
201 @product.ListItemHtml
202 </div>
203
204 if ( serverRenderedProductCounter == 10)
205 {
206 @RenderingService.Instance.PartialView( "ecom/productlist/partials/identity-productlist-cta.cshtml" )
207 }
208
209 serverRenderedProductCounter++;
210 }
211 </product-list-products>
212 <div class="row">
213 <div class="col-12 py-2 col-lg-4 col-xl-4 offset-lg-4">
214 <product-list-load-more is-lazyloading="@(showLoadMore ? "false" : "true")"
215 is-disabled="@(isLoadMoreDisabled ? "true" : "false")">
216 <button type="button"
217 class="btn btn-block btn-primary e-productlist-load-more-products-btn relewise-productlist-loadmore-btn">
218 @Translate("eCom Productlist - Load More Products - Button", "Hent flere produkter") <span
219 class="material-icons">keyboard_arrow_down</span>
220 </button>
221 <div class="relewise-productlist-loadmore-spinner mt-4 position-relative text-center">
222 @RenderingService.Instance.PartialView("_partials/loading-spinner.cshtml")
223 </div>
224 </product-list-load-more>
225 </div>
226 </div>
227 <!-- Load More -->
228
229 </div>
230 </div>
231 </div>
232 </div>
233
234 </product-list>
235
236
237 <style scoped>
238 product-list-load-more[is-disabled="true"] {
239 .relewise-productlist-loadmore-btn, .relewise-productlist-loadmore-spinner {
240 display: none;
241 }
242 }
243
244 product-list-load-more[is-disabled="false"] {
245 &[is-lazyloading="false"] {
246 .relewise-productlist-loadmore-btn {
247 display: block;
248 }
249
250 .relewise-productlist-loadmore-spinner {
251 display: none;
252 }
253 }
254
255 &[is-lazyloading="true"] {
256 .relewise-productlist-loadmore-btn {
257 display: none;
258 }
259
260 .relewise-productlist-loadmore-spinner {
261 display: block;
262 }
263 }
264 }
265
266 .custom-dropdown { display: inline-block; position: relative; }
267
268 .custom-dropdown .custom-dropdown-toggle {
269 padding: 1rem;
270 background: #f5f5f5;
271 color: #212121;
272 border-radius: 0;
273 cursor: pointer;
274 border: .125em solid transparent;
275 border-bottom-width: 2px;
276 display: flex;
277 justify-content: space-between;
278 align-items: center;
279 text-align: center;
280 vertical-align: middle;
281 line-height: 1.25;
282 font-size: .875em;
283
284 .trigger-icon {
285 transition: all .3s ease;
286 font-size: 1.5em;
287 line-height: 0;
288 color: #616161;
289 }
290 }
291
292 .custom-dropdown .custom-dropdown-menu {
293 min-width: 180px;
294 background: #fff;
295 border: 1px solid #ccc;
296 border-radius: 0.25rem;
297 box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.05);
298 padding: 0.5em 0;
299 display: none;
300 position: absolute;
301 z-index: 1000;
302 }
303
304 .custom-dropdown .custom-dropdown-menu.show {
305 display: block;
306 }
307
308 .custom-dropdown .custom-dropdown-item {
309 display: block;
310 width: 100%;
311 padding: 0.375em 1em;
312 color: #333;
313 text-decoration: none;
314 background: none;
315 border: 0;
316 position: relative;
317
318 &.disabled {
319 opacity: .5;
320 pointer-events: none;
321 }
322
323 .custom-dropdown-item-check {
324 position: absolute;
325 top: 0;
326 left: 0;
327 width: 100%;
328 height: 100%;
329 display: flex;
330 align-items: center;
331 justify-content: center;
332 padding-top: 35%;
333 text-align: center;
334 }
335
336 /*
337 input{
338 opacity: 0;
339 position: absolute;
340 + label{
341 cursor: pointer;
342 width: 100%;
343 height: 100%;
344 display: flex;
345 align-items: center;
346 justify-content: center;
347 background: transparent;
348 font-size: .6em;
349 white-space: nowrap;
350 }
351 &:checked + label{
352 background: #f1f1f1;
353 }
354 }*/
355 }
356
357 .custom-dropdown .custom-dropdown-item:hover,
358 .custom-dropdown .custom-dropdown-item:focus {
359 background: #f6f6f6;
360 color: #16181b;
361 outline: none;
362 }
363
364 product-list[aria-busy="true"] {
365 pointer-events: none;
366 }
367 product-list[aria-busy="true"] .e-productlist-item {
368 opacity: .6;
369 filter: saturate(.85) contrast(.98);
370 transition: opacity .2 ease;
371 }
372
373 </style>