pict-section-recordset 1.0.36 → 1.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/example_applications/simple_entity/Simple-RecordSet-Application.js +10 -0
  2. package/package.json +2 -2
  3. package/source/application/Pict-Application-RecordSet.js +4 -0
  4. package/source/providers/RecordSet-RecordProvider-MeadowEndpoints.js +82 -34
  5. package/source/services/RecordsSet-MetaController.js +14 -1
  6. package/source/views/RecordSet-Filters.js +19 -12
  7. package/source/views/dashboard/RecordSet-Dashboard-HeaderDashboard.js +2 -2
  8. package/source/views/dashboard/RecordSet-Dashboard-PaginationBottom.js +2 -2
  9. package/source/views/dashboard/RecordSet-Dashboard-PaginationTop.js +2 -2
  10. package/source/views/dashboard/RecordSet-Dashboard-RecordList.js +5 -5
  11. package/source/views/dashboard/RecordSet-Dashboard-RecordListEntry.js +2 -2
  12. package/source/views/dashboard/RecordSet-Dashboard-RecordListHeader.js +2 -2
  13. package/source/views/dashboard/RecordSet-Dashboard-Title.js +2 -2
  14. package/source/views/dashboard/RecordSet-Dashboard.js +3 -1
  15. package/source/views/filters/RecordSet-Filter-Base-Range.js +2 -2
  16. package/source/views/filters/RecordSet-Filter-Base.js +7 -2
  17. package/source/views/list/RecordSet-List.js +3 -1
  18. package/types/application/Pict-Application-RecordSet.d.ts.map +1 -1
  19. package/types/providers/RecordSet-RecordProvider-MeadowEndpoints.d.ts +9 -0
  20. package/types/providers/RecordSet-RecordProvider-MeadowEndpoints.d.ts.map +1 -1
  21. package/types/services/RecordsSet-MetaController.d.ts.map +1 -1
  22. package/types/views/RecordSet-Filters.d.ts +1 -0
  23. package/types/views/RecordSet-Filters.d.ts.map +1 -1
  24. package/types/views/dashboard/RecordSet-Dashboard-HeaderDashboard.d.ts +3 -3
  25. package/types/views/dashboard/RecordSet-Dashboard-PaginationBottom.d.ts +3 -3
  26. package/types/views/dashboard/RecordSet-Dashboard-PaginationTop.d.ts +3 -3
  27. package/types/views/dashboard/RecordSet-Dashboard-RecordList.d.ts +5 -5
  28. package/types/views/dashboard/RecordSet-Dashboard-RecordList.d.ts.map +1 -1
  29. package/types/views/dashboard/RecordSet-Dashboard-RecordListEntry.d.ts +3 -3
  30. package/types/views/dashboard/RecordSet-Dashboard-RecordListHeader.d.ts +3 -3
  31. package/types/views/dashboard/RecordSet-Dashboard-Title.d.ts +3 -3
  32. package/types/views/dashboard/RecordSet-Dashboard.d.ts.map +1 -1
  33. package/types/views/filters/RecordSet-Filter-Base.d.ts.map +1 -1
  34. package/types/views/list/RecordSet-List-RecordList.d.ts.map +1 -1
  35. package/types/views/list/RecordSet-List.d.ts.map +1 -1
@@ -230,6 +230,16 @@ module.exports.default_configuration.pict_configuration = (
230
230
  "RecordSetType": "MeadowEndpoint", // Could be "Custom" which would require a provider to already be created for the record set.
231
231
  "RecordSetMeadowEntity": "Book", // This leverages the /Schema endpoint to get the record set columns.
232
232
 
233
+ "RecordSetIgnoreFilterFields": [ "Deleted", "DeletingIDUser", "DeleteDate", "UpdateDate" ],
234
+
235
+ "RecordSetFieldFilterClauses":
236
+ {
237
+ "Title":
238
+ [
239
+ { "FilterKey": "Title", "ClauseKey": "TitleMatch", "DisplayName": "Book Title Custom Filter", "Type": "StringMatch", "FilterByColumn": "Title", "ExactMatch": true }
240
+ ]
241
+ },
242
+
233
243
  "RecordSetListColumns": [
234
244
  {
235
245
  "Key": "Title",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pict-section-recordset",
3
- "version": "1.0.36",
3
+ "version": "1.0.38",
4
4
  "description": "Pict dynamic record set management views",
5
5
  "main": "source/Pict-Section-RecordSet.js",
6
6
  "directories": {
@@ -37,7 +37,7 @@
37
37
  "pict-application": "^1.0.27",
38
38
  "pict-service-commandlineutility": "^1.0.15",
39
39
  "quackage": "^1.0.42",
40
- "typescript": "^5.8.3"
40
+ "typescript": "^5.9.2"
41
41
  },
42
42
  "dependencies": {
43
43
  "fable-serviceproviderbase": "^3.0.15",
@@ -45,6 +45,10 @@ class PictSectionRecordSetApplication extends libPictApplication
45
45
 
46
46
  onAfterInitialize()
47
47
  {
48
+ if (this.pict.CSSMap)
49
+ {
50
+ this.pict.CSSMap.injectCSS();
51
+ }
48
52
  // Now add the routes
49
53
  this.pict.providers.RecordSetRouter.addRoutes(this.fable.providers.RecordSetRouter.pictRouter);
50
54
 
@@ -52,16 +52,32 @@ class MeadowEndpointsRecordSetProvider extends libRecordSetProviderBase
52
52
  /** @return {import('pict/types/source/Pict-Meadow-EntityProvider.js')} */
53
53
  get entityProvider()
54
54
  {
55
- /** @type {import('pict/types/source/Pict-Meadow-EntityProvider.js')} */
56
- //TODO: figure out a pattern to share this with other consumers, to consolidate cache
57
- this._EntityProvider = this.pict.instantiateServiceProviderWithoutRegistration('EntityProvider');
58
- if (this.options.URLPrefix)
55
+ if (!this._EntityProvider)
59
56
  {
60
- this._EntityProvider.options.urlPrefix = this.options.URLPrefix;
57
+ /** @type {import('pict/types/source/Pict-Meadow-EntityProvider.js')} */
58
+ //TODO: figure out a pattern to share this with other consumers, to consolidate cache
59
+ this._EntityProvider = this.pict.instantiateServiceProviderWithoutRegistration('EntityProvider');
60
+ if (this.options.URLPrefix)
61
+ {
62
+ this._EntityProvider.options.urlPrefix = this.options.URLPrefix;
63
+ }
61
64
  }
65
+
62
66
  return this._EntityProvider;
63
67
  }
64
68
 
69
+ /**
70
+ * @return {Array<string>} - The fields to ignore for filter availability.
71
+ */
72
+ get ignoreFilterFields()
73
+ {
74
+ if (Array.isArray(this.options.IgnoreFilterFields))
75
+ {
76
+ return this.options.IgnoreFilterFields;
77
+ }
78
+ return [];
79
+ }
80
+
65
81
  /**
66
82
  * Get a record by its ID or GUID.
67
83
  *
@@ -166,7 +182,7 @@ class MeadowEndpointsRecordSetProvider extends libRecordSetProviderBase
166
182
  return new Promise((resolve, reject) =>
167
183
  {
168
184
  const [ tmpClauses, tmpExperience ] = this._prepareFilterState(tmpEntity, pOptions);
169
- this.pict.providers.FilterManager.loadRecordPageByFilterUsingProvider(this._EntityProvider, tmpClauses, tmpExperience, pOptions.Offset || 0, pOptions.PageSize || 250, (pError) =>
185
+ this.pict.providers.FilterManager.loadRecordPageByFilterUsingProvider(this.entityProvider, tmpClauses, tmpExperience, pOptions.Offset || 0, pOptions.PageSize || 250, (pError) =>
170
186
  {
171
187
  if (pError)
172
188
  {
@@ -211,7 +227,7 @@ class MeadowEndpointsRecordSetProvider extends libRecordSetProviderBase
211
227
  return new Promise((resolve, reject) =>
212
228
  {
213
229
  const [ tmpClauses, tmpExperience ] = this._prepareFilterState(tmpEntity, pOptions, 'Count');
214
- this.pict.providers.FilterManager.countRecordsByFilterUsingProivider(this._EntityProvider, tmpClauses, tmpExperience, (pError) =>
230
+ this.pict.providers.FilterManager.countRecordsByFilterUsingProivider(this.entityProvider, tmpClauses, tmpExperience, (pError) =>
215
231
  {
216
232
  if (pError)
217
233
  {
@@ -346,6 +362,43 @@ class MeadowEndpointsRecordSetProvider extends libRecordSetProviderBase
346
362
  return pRecord;
347
363
  }
348
364
 
365
+ /**
366
+ * @param {string} pSchemaField - The schema field name.
367
+ * @param {Record<string, any>} pColumn - The full column definition from the schema.
368
+ */
369
+ getFieldFilterClauses(pSchemaField, pColumn)
370
+ {
371
+ let tmpFieldFilterClauses = this.options.FieldFilterClauses?.[pSchemaField];
372
+ if (!Array.isArray(tmpFieldFilterClauses))
373
+ {
374
+ tmpFieldFilterClauses = [];
375
+ const tmpFieldHumanName = this._getHumanReadableFieldName(pSchemaField);
376
+ switch (pColumn.type)
377
+ {
378
+ case 'string':
379
+ tmpFieldFilterClauses.push({ FilterKey: pSchemaField, ClauseKey: `${pSchemaField}_Match_Exact`, DisplayName: `${tmpFieldHumanName} Exact Match`, Type: 'StringMatch', FilterByColumn: pSchemaField, ExactMatch: true, Ordinal: tmpFieldFilterClauses.length + 1 });
380
+ tmpFieldFilterClauses.push({ FilterKey: pSchemaField, ClauseKey: `${pSchemaField}_Match_Fuzzy`, DisplayName: `${tmpFieldHumanName} Partial Match`, Type: 'StringMatch', FilterByColumn: pSchemaField, ExactMatch: false , Ordinal: tmpFieldFilterClauses.length + 1 });
381
+ tmpFieldFilterClauses.push({ FilterKey: pSchemaField, ClauseKey: `${pSchemaField}_Range`, DisplayName: `${tmpFieldHumanName} in Range`, Type: 'StringRange', FilterByColumn: pSchemaField , Ordinal: tmpFieldFilterClauses.length + 1 });
382
+ break;
383
+ case 'date':
384
+ case 'datetime':
385
+ tmpFieldFilterClauses.push({ FilterKey: pSchemaField, ClauseKey: `${pSchemaField}_Match_Exact`, DisplayName: `${tmpFieldHumanName} Exact Match`, Type: 'DateMatch', FilterByColumn: pSchemaField, ExactMatch: true , Ordinal: tmpFieldFilterClauses.length + 1 });
386
+ tmpFieldFilterClauses.push({ FilterKey: pSchemaField, ClauseKey: `${pSchemaField}_Match_Fuzzy`, DisplayName: `${tmpFieldHumanName} Partial Match`, Type: 'DateMatch', FilterByColumn: pSchemaField, ExactMatch: false , Ordinal: tmpFieldFilterClauses.length + 1 });
387
+ tmpFieldFilterClauses.push({ FilterKey: pSchemaField, ClauseKey: `${pSchemaField}_Range`, DisplayName: `${tmpFieldHumanName} in Range`, Type: 'DateRange', FilterByColumn: pSchemaField , Ordinal: tmpFieldFilterClauses.length + 1 });
388
+ break;
389
+ case 'boolean': //TODO: we didn't add filters for this - they are just numeric but it's weird for the user, maybe we should add views for this that account for the difference
390
+ case 'integer':
391
+ tmpFieldFilterClauses.push({ FilterKey: pSchemaField, ClauseKey: `${pSchemaField}_Match_Exact`, DisplayName: `${tmpFieldHumanName} Exact Match`, Type: 'NumericMatch', FilterByColumn: pSchemaField, ExactMatch: true , Ordinal: tmpFieldFilterClauses.length + 1 });
392
+ tmpFieldFilterClauses.push({ FilterKey: pSchemaField, ClauseKey: `${pSchemaField}_Match_Fuzzy`, DisplayName: `${tmpFieldHumanName} Partial Match`, Type: 'NumericMatch', FilterByColumn: pSchemaField, ExactMatch: false , Ordinal: tmpFieldFilterClauses.length + 1 });
393
+ tmpFieldFilterClauses.push({ FilterKey: pSchemaField, ClauseKey: `${pSchemaField}_Range`, DisplayName: `${tmpFieldHumanName} in Range`, Type: 'NumericRange', FilterByColumn: pSchemaField , Ordinal: tmpFieldFilterClauses.length + 1 });
394
+ break;
395
+ default:
396
+ this.pict.log.warn(`Unsupported field type ${pColumn.type} for field ${pSchemaField}`, { Schema: pColumn });
397
+ }
398
+ }
399
+ return tmpFieldFilterClauses;
400
+ }
401
+
349
402
  /**
350
403
  * @param {(error?: Error) => void} fCallback - The callback function.
351
404
  */
@@ -412,6 +465,10 @@ class MeadowEndpointsRecordSetProvider extends libRecordSetProviderBase
412
465
  if (tmpExperience.Default && !tmpEntityFilterState.FilterClauses)
413
466
  {
414
467
  tmpEntityFilterState.FilterClauses = JSON.parse(JSON.stringify(this._Experiences[tmpKey].FilterClauses));
468
+ for (const tmpClause of tmpEntityFilterState.FilterClauses)
469
+ {
470
+ tmpClause.Hash = `${tmpClause.FilterByColumn}-${tmpClause.Type}-${this.pict.getUUID()}`;
471
+ }
415
472
  }
416
473
  continue;
417
474
  }
@@ -430,15 +487,15 @@ class MeadowEndpointsRecordSetProvider extends libRecordSetProviderBase
430
487
  return fCallback(pError);
431
488
  }
432
489
  const tmpProperties = tmpSchema?.properties;
433
- // loop throught the schema and add the columns to the tableCells
490
+ // loop through the schema and add the columns to the tableCells
434
491
  let tmpOrdinal = 0;
435
492
  for (const tmpSchemaField in tmpProperties)
436
493
  {
437
- ++tmpOrdinal;
438
- if (tmpSchemaField === 'Deleted' || tmpSchemaField === 'DeletingIDUser')
494
+ if (this.ignoreFilterFields.includes(tmpSchemaField))
439
495
  {
440
496
  continue;
441
497
  }
498
+ ++tmpOrdinal;
442
499
  const tmpColumn = tmpProperties[tmpSchemaField];
443
500
  let tmpFieldFilterSchema = this._FilterSchema[tmpSchemaField];
444
501
  if (!tmpFieldFilterSchema)
@@ -473,28 +530,15 @@ class MeadowEndpointsRecordSetProvider extends libRecordSetProviderBase
473
530
  {
474
531
  tmpFieldFilterSchema.AvailableClauses = [];
475
532
  }
476
- const tmpFieldHumanName = this._getHumanReadableFieldName(tmpSchemaField);
477
- switch (tmpColumn.type)
533
+ const tmpFieldFilterClauses = this.getFieldFilterClauses(tmpSchemaField, tmpColumn);
534
+ if (Array.isArray(tmpFieldFilterClauses) && tmpFieldFilterClauses.length > 0)
478
535
  {
479
- case 'string':
480
- tmpFieldFilterSchema.AvailableClauses.push({ FilterKey: tmpSchemaField, ClauseKey: `${tmpSchemaField}_Match_Exact`, DisplayName: `${tmpFieldHumanName} Exact Match`, Type: 'StringMatch', FilterByColumn: tmpSchemaField, ExactMatch: true, Ordinal: tmpFieldFilterSchema.AvailableClauses.length + 1 });
481
- tmpFieldFilterSchema.AvailableClauses.push({ FilterKey: tmpSchemaField, ClauseKey: `${tmpSchemaField}_Match_Fuzzy`, DisplayName: `${tmpFieldHumanName} Partial Match`, Type: 'StringMatch', FilterByColumn: tmpSchemaField, ExactMatch: false , Ordinal: tmpFieldFilterSchema.AvailableClauses.length + 1 });
482
- tmpFieldFilterSchema.AvailableClauses.push({ FilterKey: tmpSchemaField, ClauseKey: `${tmpSchemaField}_Range`, DisplayName: `${tmpFieldHumanName} in Range`, Type: 'StringRange', FilterByColumn: tmpSchemaField , Ordinal: tmpFieldFilterSchema.AvailableClauses.length + 1 });
483
- break;
484
- case 'date':
485
- case 'datetime':
486
- tmpFieldFilterSchema.AvailableClauses.push({ FilterKey: tmpSchemaField, ClauseKey: `${tmpSchemaField}_Match_Exact`, DisplayName: `${tmpFieldHumanName} Exact Match`, Type: 'DateMatch', FilterByColumn: tmpSchemaField, ExactMatch: true , Ordinal: tmpFieldFilterSchema.AvailableClauses.length + 1 });
487
- tmpFieldFilterSchema.AvailableClauses.push({ FilterKey: tmpSchemaField, ClauseKey: `${tmpSchemaField}_Match_Fuzzy`, DisplayName: `${tmpFieldHumanName} Partial Match`, Type: 'DateMatch', FilterByColumn: tmpSchemaField, ExactMatch: false , Ordinal: tmpFieldFilterSchema.AvailableClauses.length + 1 });
488
- tmpFieldFilterSchema.AvailableClauses.push({ FilterKey: tmpSchemaField, ClauseKey: `${tmpSchemaField}_Range`, DisplayName: `${tmpFieldHumanName} in Range`, Type: 'DateRange', FilterByColumn: tmpSchemaField , Ordinal: tmpFieldFilterSchema.AvailableClauses.length + 1 });
489
- break;
490
- case 'boolean': //TODO: we didn't add filters for this - they are just numeric but it's weird for the user, maybe we should add views for this that account for the difference
491
- case 'integer':
492
- tmpFieldFilterSchema.AvailableClauses.push({ FilterKey: tmpSchemaField, ClauseKey: `${tmpSchemaField}_Match_Exact`, DisplayName: `${tmpFieldHumanName} Exact Match`, Type: 'NumericMatch', FilterByColumn: tmpSchemaField, ExactMatch: true , Ordinal: tmpFieldFilterSchema.AvailableClauses.length + 1 });
493
- tmpFieldFilterSchema.AvailableClauses.push({ FilterKey: tmpSchemaField, ClauseKey: `${tmpSchemaField}_Match_Fuzzy`, DisplayName: `${tmpFieldHumanName} Partial Match`, Type: 'NumericMatch', FilterByColumn: tmpSchemaField, ExactMatch: false , Ordinal: tmpFieldFilterSchema.AvailableClauses.length + 1 });
494
- tmpFieldFilterSchema.AvailableClauses.push({ FilterKey: tmpSchemaField, ClauseKey: `${tmpSchemaField}_Range`, DisplayName: `${tmpFieldHumanName} in Range`, Type: 'NumericRange', FilterByColumn: tmpSchemaField , Ordinal: tmpFieldFilterSchema.AvailableClauses.length + 1 });
495
- break;
496
- default:
497
- this.pict.log.warn(`Unsupported field type ${tmpColumn.type} for field ${tmpSchemaField}`, { Schema: tmpColumn });
536
+ for (const tmpFilterClause of tmpFieldFilterClauses)
537
+ {
538
+ //TODO: allow customization of filter order
539
+ tmpFilterClause.Ordinal = tmpFieldFilterSchema.AvailableClauses.length + 1;
540
+ tmpFieldFilterSchema.AvailableClauses.push(tmpFilterClause);
541
+ }
498
542
  }
499
543
  }
500
544
  if (typeof this.pict.providers.FilterManager.filters === 'object')
@@ -518,9 +562,14 @@ class MeadowEndpointsRecordSetProvider extends libRecordSetProviderBase
518
562
  {
519
563
  tmpFieldFilterSchema.RecordSet = this.options.RecordSet;
520
564
  }
565
+ const tmpFieldHumanName = this._getHumanReadableFieldName(tmpFilterKey);
566
+ if (tmpFilterClause.DisplayName)
567
+ {
568
+ tmpFieldFilterSchema.DisplayName = tmpFilterClause.DisplayName;
569
+ }
521
570
  if (!tmpFieldFilterSchema.DisplayName)
522
571
  {
523
- tmpFieldFilterSchema.DisplayName = tmpFilterClause.DisplayName || this._getHumanReadableFieldName(tmpFilterKey);
572
+ tmpFieldFilterSchema.DisplayName = tmpFieldHumanName;
524
573
  }
525
574
  if (!tmpFieldFilterSchema.Description)
526
575
  {
@@ -538,7 +587,6 @@ class MeadowEndpointsRecordSetProvider extends libRecordSetProviderBase
538
587
  {
539
588
  tmpFieldFilterSchema.AvailableClauses = [];
540
589
  }
541
- const tmpFieldHumanName = this._getHumanReadableFieldName(tmpFilterKey);
542
590
  tmpFieldFilterSchema.AvailableClauses.push(tmpFilterClause);
543
591
  if (!tmpFilterClause.FilterKey)
544
592
  {
@@ -624,7 +672,7 @@ class MeadowEndpointsRecordSetProvider extends libRecordSetProviderBase
624
672
  {
625
673
  if (error)
626
674
  {
627
- this.fable.log.error('Error fetching schema', error);
675
+ this.fable.log.error(`Error fetching schema: ${error?.message || error}`, { Stack: error?.stack });
628
676
  this._Schema = null;
629
677
  return fCallback(error);
630
678
  }
@@ -168,11 +168,24 @@ class RecordSetMetacontroller extends libFableServiceProviderBase
168
168
  {
169
169
  providerConfiguration.URLPrefix = '/1.0/';
170
170
  }
171
+ if (`RecordSetIgnoreFilterFields` in pRecordSetConfiguration)
172
+ {
173
+ providerConfiguration.IgnoreFilterFields = pRecordSetConfiguration.RecordSetIgnoreFilterFields;
174
+ }
175
+ else
176
+ {
177
+ providerConfiguration.IgnoreFilterFields = [ 'Deleted', 'DeletingIDUser', 'DeleteDate' ];
178
+ }
179
+ if (`RecordSetFieldFilterClauses` in pRecordSetConfiguration)
180
+ {
181
+ providerConfiguration.FieldFilterClauses = pRecordSetConfiguration.RecordSetFieldFilterClauses;
182
+ }
183
+
171
184
  tmpProvider = this.recordSetProviders[pRecordSetConfiguration.RecordSet] = this.fable.addProvider(providerConfiguration.Hash, providerConfiguration, ProviderMeadowEndpoints);
172
185
  break;
173
186
  default:
174
187
  case 'Custom':
175
- // Create a custom provider
188
+ // Create a custom provider
176
189
  if (`ProviderHash` in providerConfiguration)
177
190
  {
178
191
  if (!(providerConfiguration.ProviderHash in this.fable.servicesMap))
@@ -31,16 +31,14 @@ const _DEFAULT_CONFIGURATION_SUBSET_Filter =
31
31
  Hash: 'PRSP-SUBSET-Filters-Template',
32
32
  Template: /*html*/`
33
33
  <!-- DefaultPackage pict view template: [PRSP-SUBSET-Filters-Template] -->
34
- <section id="PRSP_Filters_Container">
35
- <form id="PRSP_Filter_Form" onsubmit="_Pict.views['PRSP-Filters'].handleSearch(event, '{~D:Record.RecordSet~}', '{~D:Record.ViewContext~}'); return false;">
36
- {~T:PRSP-SUBSET-Filters-Template-Input-Fieldset~}
37
- <div id="PRSP_Filter_Instances">
38
- {~FIV:Record~}
39
- </div>
40
- {~T:PRSP-SUBSET-Filters-Template-Button-Fieldset~}
41
- {~T:PRSP-SUBSET-Filters-Template-AddFilter-Fieldset~}
42
- </form>
43
- </section>
34
+ <form id="PRSP_Filter_Form" onsubmit="_Pict.views['PRSP-Filters'].handleSearch(event, '{~D:Record.RecordSet~}', '{~D:Record.ViewContext~}'); return false;">
35
+ {~T:PRSP-SUBSET-Filters-Template-Input-Fieldset~}
36
+ <div id="PRSP_Filter_Instances">
37
+ {~FIV:Record~}
38
+ </div>
39
+ {~T:PRSP-SUBSET-Filters-Template-Button-Fieldset~}
40
+ {~T:PRSP-SUBSET-Filters-Template-AddFilter-Fieldset~}
41
+ </form>
44
42
  <!-- DefaultPackage end view template: [PRSP-SUBSET-Filters-Template] -->
45
43
  `
46
44
  },
@@ -49,8 +47,8 @@ const _DEFAULT_CONFIGURATION_SUBSET_Filter =
49
47
  Template: /*html*/`
50
48
  <!-- DefaultPackage pict view template: [PRSP-SUBSET-Filters-Template-Input-Fieldset] -->
51
49
  <fieldset>
52
- <label for="filter">Filter:</label>
53
- <input type="text" name="filter">
50
+ <label for="search_filter">Filter:</label>
51
+ <input id="search_filter" type="text" name="filter">
54
52
  </fieldset>
55
53
  <!-- DefaultPackage end view template: [PRSP-SUBSET-Filters-Template-Input-Fieldset] -->
56
54
  `
@@ -371,6 +369,15 @@ class ViewRecordSetSUBSETFilters extends libPictView
371
369
  this.render(undefined, undefined, { RecordSet: pRecordSet, ViewContext: pViewContext });
372
370
  }
373
371
 
372
+ removeFilter(pEvent, pRecordSet, pViewContext, pSpecificFilterKey)
373
+ {
374
+ pEvent?.preventDefault();
375
+ this.pict.log.info(`Removing filter: ${pSpecificFilterKey} from record set: ${pRecordSet} in view context: ${pViewContext}`);
376
+ this.pict.providers[`RSP-Provider-${pRecordSet}`].removeFilterClause(pSpecificFilterKey);
377
+ //FIXME: we need the record from the original render here but no longer have it...
378
+ this.render(undefined, undefined, { RecordSet: pRecordSet, ViewContext: pViewContext });
379
+ }
380
+
374
381
  getFilterSchema(pRecordSet)
375
382
  {
376
383
  const tmpRecordsetProvider = this.pict.providers['RSP-Provider-' + pRecordSet];
@@ -49,7 +49,7 @@ const _DEFAULT_CONFIGURATION_Dashboard_HeaderList =
49
49
  Manifests: {},
50
50
  };
51
51
 
52
- class viewRecordSetListHeaderList extends libPictView
52
+ class viewRecordSetDashboardHeaderList extends libPictView
53
53
  {
54
54
  constructor(pFable, pOptions, pServiceHash)
55
55
  {
@@ -58,7 +58,7 @@ class viewRecordSetListHeaderList extends libPictView
58
58
  }
59
59
  }
60
60
 
61
- module.exports = viewRecordSetListHeaderList;
61
+ module.exports = viewRecordSetDashboardHeaderList;
62
62
 
63
63
  module.exports.default_configuration = _DEFAULT_CONFIGURATION_Dashboard_HeaderList;
64
64
 
@@ -53,7 +53,7 @@ const _DEFAULT_CONFIGURATION_List_PaginationBottom = (
53
53
  Manifests: {}
54
54
  });
55
55
 
56
- class viewRecordSetListPaginationBottom extends libPictView
56
+ class viewRecordSetDashboardPaginationBottom extends libPictView
57
57
  {
58
58
  constructor(pFable, pOptions, pServiceHash)
59
59
  {
@@ -62,7 +62,7 @@ class viewRecordSetListPaginationBottom extends libPictView
62
62
  }
63
63
  }
64
64
 
65
- module.exports = viewRecordSetListPaginationBottom;
65
+ module.exports = viewRecordSetDashboardPaginationBottom;
66
66
 
67
67
  module.exports.default_configuration = _DEFAULT_CONFIGURATION_List_PaginationBottom;
68
68
 
@@ -113,7 +113,7 @@ const _DEFAULT_CONFIGURATION_List_PaginationTop = (
113
113
  Manifests: {}
114
114
  });
115
115
 
116
- class viewRecordSetListPaginationTop extends libPictView
116
+ class viewRecordSetDashboardPaginationTop extends libPictView
117
117
  {
118
118
  constructor(pFable, pOptions, pServiceHash)
119
119
  {
@@ -122,7 +122,7 @@ class viewRecordSetListPaginationTop extends libPictView
122
122
  }
123
123
  }
124
124
 
125
- module.exports = viewRecordSetListPaginationTop;
125
+ module.exports = viewRecordSetDashboardPaginationTop;
126
126
 
127
127
  module.exports.default_configuration = _DEFAULT_CONFIGURATION_List_PaginationTop;
128
128
 
@@ -1,7 +1,7 @@
1
1
  const libPictView = require('pict-view');
2
2
 
3
3
  /** @type {Record<string, any>} */
4
- const _DEFAULT_CONFIGURATION_List_RecordList =
4
+ const _DEFAULT_CONFIGURATION_Dashboard_RecordList =
5
5
  {
6
6
  ViewIdentifier: 'PRSP-Dashboard-RecordList',
7
7
 
@@ -65,16 +65,16 @@ const _DEFAULT_CONFIGURATION_List_RecordList =
65
65
  Manifests: {}
66
66
  };
67
67
 
68
- class viewRecordSetListRecordList extends libPictView
68
+ class viewRecordSetDashboardRecordList extends libPictView
69
69
  {
70
70
  constructor(pFable, pOptions, pServiceHash)
71
71
  {
72
- let tmpOptions = Object.assign({}, _DEFAULT_CONFIGURATION_List_RecordList, pOptions);
72
+ let tmpOptions = Object.assign({}, _DEFAULT_CONFIGURATION_Dashboard_RecordList, pOptions);
73
73
  super(pFable, tmpOptions, pServiceHash);
74
74
  }
75
75
  }
76
76
 
77
- module.exports = viewRecordSetListRecordList;
77
+ module.exports = viewRecordSetDashboardRecordList;
78
78
 
79
- module.exports.default_configuration = _DEFAULT_CONFIGURATION_List_RecordList;
79
+ module.exports.default_configuration = _DEFAULT_CONFIGURATION_Dashboard_RecordList;
80
80
 
@@ -106,7 +106,7 @@ const _DEFAULT_CONFIGURATION_List_RecordListEntry = (
106
106
  Manifests: {}
107
107
  });
108
108
 
109
- class viewRecordSetListRecordListEntry extends libPictView
109
+ class viewRecordSetDashboardRecordListEntry extends libPictView
110
110
  {
111
111
  constructor(pFable, pOptions, pServiceHash)
112
112
  {
@@ -115,7 +115,7 @@ class viewRecordSetListRecordListEntry extends libPictView
115
115
  }
116
116
  }
117
117
 
118
- module.exports = viewRecordSetListRecordListEntry;
118
+ module.exports = viewRecordSetDashboardRecordListEntry;
119
119
 
120
120
  module.exports.default_configuration = _DEFAULT_CONFIGURATION_List_RecordListEntry;
121
121
 
@@ -96,7 +96,7 @@ const _DEFAULT_CONFIGURATION_List_RecordListHeader = (
96
96
  Manifests: {}
97
97
  });
98
98
 
99
- class viewRecordSetListRecordListHeader extends libPictView
99
+ class viewRecordSetDashboardRecordListHeader extends libPictView
100
100
  {
101
101
  constructor(pFable, pOptions, pServiceHash)
102
102
  {
@@ -105,7 +105,7 @@ class viewRecordSetListRecordListHeader extends libPictView
105
105
  }
106
106
  }
107
107
 
108
- module.exports = viewRecordSetListRecordListHeader;
108
+ module.exports = viewRecordSetDashboardRecordListHeader;
109
109
 
110
110
  module.exports.default_configuration = _DEFAULT_CONFIGURATION_List_RecordListHeader;
111
111
 
@@ -53,7 +53,7 @@ const _DEFAULT_CONFIGURATION_List_Title =
53
53
  Manifests: {},
54
54
  };
55
55
 
56
- class viewRecordSetListTitle extends libPictView
56
+ class viewRecordSetDashboardTitle extends libPictView
57
57
  {
58
58
  constructor(pFable, pOptions, pServiceHash)
59
59
  {
@@ -62,6 +62,6 @@ class viewRecordSetListTitle extends libPictView
62
62
  }
63
63
  }
64
64
 
65
- module.exports = viewRecordSetListTitle;
65
+ module.exports = viewRecordSetDashboardTitle;
66
66
 
67
67
  module.exports.default_configuration = _DEFAULT_CONFIGURATION_List_Title;
@@ -43,7 +43,9 @@ const _DEFAULT_CONFIGURATION__Dashboard = (
43
43
  <section id="PRSP_List_Container">
44
44
  {~V:PRSP-Dashboard-Title~}
45
45
  {~V:PRSP-Dashboard-HeaderDashboard~}
46
- {~FV:PRSP-Filters:Dashboard~}
46
+ <section id="PRSP_Filters_Container">
47
+ {~FV:PRSP-Filters:Dashboard~}
48
+ </section>
47
49
  {~V:PRSP-Dashboard-PaginationTop~}
48
50
  {~V:PRSP-Dashboard-RecordList~}
49
51
  {~V:PRSP-Dashboard-PaginationBottom~}
@@ -20,7 +20,7 @@ class ViewRecordSetSUBSETFilterBaseRange extends ViewRecordSetSUBSETFilterBase
20
20
 
21
21
  pRecord.StartClauseDescriptor =
22
22
  {
23
- Hash: this.fable.DataFormat.sanitizeObjectKey(this.constructor.name),
23
+ Hash: this.fable.DataFormat.sanitizeObjectKey(`${pRecord.StartClauseAddress}_${this.constructor.name}`),
24
24
  Address: pRecord.StartClauseAddress,
25
25
  //TODO: figure out a nice pattern for extracting a name for the field from the filter - and allow the filter author to provide the label here
26
26
  Name: pRecord.MinimumLabel || `Minimum ${pRecord.ExternalFilterByColumn || pRecord.ExternalFilterByColumns?.[0] || pRecord.FilterByColumn || pRecord.FilterByColumns?.[0] || 'Value'}`,
@@ -29,7 +29,7 @@ class ViewRecordSetSUBSETFilterBaseRange extends ViewRecordSetSUBSETFilterBase
29
29
 
30
30
  pRecord.EndClauseDescriptor =
31
31
  {
32
- Hash: this.fable.DataFormat.sanitizeObjectKey(this.constructor.name),
32
+ Hash: this.fable.DataFormat.sanitizeObjectKey(`${pRecord.EndClauseAddress}_${this.constructor.name}`),
33
33
  Address: pRecord.EndClauseAddress,
34
34
  Name: pRecord.MaximumLabel || `Maximum ${pRecord.ExternalFilterByColumn || pRecord.ExternalFilterByColumns?.[0] || pRecord.FilterByColumn || pRecord.FilterByColumns?.[0] || 'Value'}`,
35
35
  DataType: 'String',
@@ -33,7 +33,7 @@ const _DEFAULT_CONFIGURATION_SUBSET_Filter =
33
33
  Hash: 'PRSP-Filter-Base-Form',
34
34
  Template: /*html*/`
35
35
  <!-- DefaultPackage pict view template: [PRSP-Filter-Base-Form] -->
36
- {~JD:Record~}
36
+ {~DJ:Record~}
37
37
  <!-- DefaultPackage end view template: [PRSP-Filter-Base-Form] -->
38
38
  `
39
39
  },
@@ -42,6 +42,11 @@ const _DEFAULT_CONFIGURATION_SUBSET_Filter =
42
42
  Template: /*html*/`
43
43
  <!-- DefaultPackage pict view template: [PRSP-Filter-Base-Template] -->
44
44
  <div>
45
+ <button type="button"
46
+ onclick="_Pict.views['PRSP-Filters'].removeFilter(event, '{~D:Record.RecordSet~}', '{~D:Record.ViewContext~}', '{~D:Record.Hash~}');"
47
+ >
48
+ -
49
+ </button>
45
50
  {~TBR:Context[0].getFilterFormTemplate()~}
46
51
  </div>
47
52
  <!-- DefaultPackage end view template: [PRSP-Filter-Base-Template] -->
@@ -81,7 +86,7 @@ class ViewRecordSetSUBSETFilterBase extends libPictView
81
86
  pRecord.ClauseDescriptor =
82
87
  {
83
88
  Address: pRecord.ClauseValueAddress,
84
- Hash: this.fable.DataFormat.sanitizeObjectKey(this.constructor.name),
89
+ Hash: this.fable.DataFormat.sanitizeObjectKey(`${pRecord.ClauseValueAddress}_${this.constructor.name}`),
85
90
  //TODO: figure out a nice pattern for extracting a name for the field from the filter - and allow the filter author to provide the label here
86
91
  Name: pRecord.Label || pRecord.ExternalFilterByColumn || pRecord.ExternalFilterByColumns?.[0] || pRecord.FilterByColumn || pRecord.FilterByColumns?.[0] || 'Value',
87
92
  DataType: 'String',
@@ -43,7 +43,9 @@ const _DEFAULT_CONFIGURATION__List = (
43
43
  <section id="PRSP_List_Container">
44
44
  {~V:PRSP-List-Title~}
45
45
  {~V:PRSP-List-HeaderList~}
46
- {~FV:PRSP-Filters:List~}
46
+ <section id="PRSP_Filters_Container">
47
+ {~FV:PRSP-Filters:List~}
48
+ </section>
47
49
  {~V:PRSP-List-PaginationTop~}
48
50
  {~V:PRSP-List-RecordList~}
49
51
  {~V:PRSP-List-PaginationBottom~}
@@ -1 +1 @@
1
- {"version":3,"file":"Pict-Application-RecordSet.d.ts","sourceRoot":"","sources":["../../source/application/Pict-Application-RecordSet.js"],"names":[],"mappings":";AAOA;;;;;;;GAOG;AACH;IAEC,2DAeC;CAoBD;;;;;qCAIU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC"}
1
+ {"version":3,"file":"Pict-Application-RecordSet.d.ts","sourceRoot":"","sources":["../../source/application/Pict-Application-RecordSet.js"],"names":[],"mappings":";AAOA;;;;;;;GAOG;AACH;IAEC,2DAeC;CAwBD;;;;;qCAIU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC"}
@@ -70,6 +70,10 @@ declare class MeadowEndpointsRecordSetProvider extends libRecordSetProviderBase
70
70
  get entityProvider(): import("pict/types/source/Pict-Meadow-EntityProvider.js");
71
71
  /** @type {import('pict/types/source/Pict-Meadow-EntityProvider.js')} */
72
72
  _EntityProvider: import("pict/types/source/Pict-Meadow-EntityProvider.js");
73
+ /**
74
+ * @return {Array<string>} - The fields to ignore for filter availability.
75
+ */
76
+ get ignoreFilterFields(): Array<string>;
73
77
  /**
74
78
  * Get a record by its ID or GUID.
75
79
  *
@@ -119,6 +123,11 @@ declare class MeadowEndpointsRecordSetProvider extends libRecordSetProviderBase
119
123
  * @param {Record<string, any>} pRecord - The record to clone.
120
124
  */
121
125
  cloneRecord(pRecord: Record<string, any>): Promise<any>;
126
+ /**
127
+ * @param {string} pSchemaField - The schema field name.
128
+ * @param {Record<string, any>} pColumn - The full column definition from the schema.
129
+ */
130
+ getFieldFilterClauses(pSchemaField: string, pColumn: Record<string, any>): any;
122
131
  /**
123
132
  * @param {(error?: Error) => void} fCallback - The callback function.
124
133
  */
@@ -1 +1 @@
1
- {"version":3,"file":"RecordSet-RecordProvider-MeadowEndpoints.d.ts","sourceRoot":"","sources":["../../source/providers/RecordSet-RecordProvider-MeadowEndpoints.js"],"names":[],"mappings":";AAGA;;;GAGG;AAEH;;;GAGG;AACH;IAcE;;;;;;;;;aASS;IACT,MAVW,OAAO,MAAM,CAAC,GAAG;QACpB,GAAG,EAAE,GAAG,CAAC;QACT,QAAQ,EACf;YACI,oBAAoB,EAAE,YAAY,CAAC;;;;;;aAAsC,CAAC,CAAC;YAC/E,CAAK,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;SACnB,CAAC;QACE,6CAA6C,EAAE,CAAC,IAAI,QAAQ,KAAK,GAAG,CAAC;QACrE,oBAAoB,EAAE,YAAY,CAAC;;;;;;SAAsC,CAAC,CAAA;KAC7E,CACI;IACT;aAVa,GAAG;kBAEf;YACI,oBAAoB,EAAE,YAAY,CAAC;;;;;;aAAsC,CAAC,CAAC;YAC/E,CAAK,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;SACnB;uDACkD,CAAC,IAAI,QAAQ,KAAK,GAAG;8BAC9C,YAAY,CAAC;;;;;;SAAsC,CAAC;MAG5D;IAMtB,kCAAkC;IAClC,SADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACZ;IAClB,kDAAkD;IAClD,cADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACvB;IACvB,kDAAkD;IAClD,iBADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACpB;IAG3B,0EAA0E;IAC1E,sBADa,OAAO,iDAAiD,CAAC,CAWrE;IARA,wEAAwE;IAExE,iBAFW,OAAO,iDAAiD,CAAC,CAE4B;IAQjG;;;;OAIG;IACH,qBAFW,MAAM,GAAC,MAAM,gBA4BvB;IAED;;;;OAIG;IACH,uBAFW,MAAM,GAAC,MAAM,gBA2BvB;IAED,iGAiBC;IA+CD;;;;OAIG;IACH,4BAFW,eAAe,gBA0BzB;IAED;;;;OAIG;IACH,sBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,gBAsB7B;IAED;;;;OAIG;IACH,sBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,gBAsB7B;IAED;;;;OAIG;IACH,sBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,gBAsB7B;IAED;;;;OAIG;IACH,sBAFW,MAAM,GAAC,MAAM,gBAKvB;IAaD;;;;OAIG;IACH,qBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,gBAK7B;IAcD;;OAEG;IACH,6BAFW,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,QAoNjC;IAED;;;OAGG;IACH,oCAHW,MAAM,GACL,MAAM,CAKjB;IAED;;;OAGG;IACH,yCAHW,MAAM,GACL,MAAM,CAiCjB;IAED;;OAEG;IACH,kCAFW,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,QA6BjC;IAED,gDAcC;CAsCD;;;;;uBAjrBY,OAAO,oCAAoC,EAAE,eAAe;uBAC5D,OAAO,oCAAoC,EAAE,eAAe"}
1
+ {"version":3,"file":"RecordSet-RecordProvider-MeadowEndpoints.d.ts","sourceRoot":"","sources":["../../source/providers/RecordSet-RecordProvider-MeadowEndpoints.js"],"names":[],"mappings":";AAGA;;;GAGG;AAEH;;;GAGG;AACH;IAcE;;;;;;;;;aASS;IACT,MAVW,OAAO,MAAM,CAAC,GAAG;QACpB,GAAG,EAAE,GAAG,CAAC;QACT,QAAQ,EACf;YACI,oBAAoB,EAAE,YAAY,CAAC;;;;;;aAAsC,CAAC,CAAC;YAC/E,CAAK,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;SACnB,CAAC;QACE,6CAA6C,EAAE,CAAC,IAAI,QAAQ,KAAK,GAAG,CAAC;QACrE,oBAAoB,EAAE,YAAY,CAAC;;;;;;SAAsC,CAAC,CAAA;KAC7E,CACI;IACT;aAVa,GAAG;kBAEf;YACI,oBAAoB,EAAE,YAAY,CAAC;;;;;;aAAsC,CAAC,CAAC;YAC/E,CAAK,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;SACnB;uDACkD,CAAC,IAAI,QAAQ,KAAK,GAAG;8BAC9C,YAAY,CAAC;;;;;;SAAsC,CAAC;MAG5D;IAMtB,kCAAkC;IAClC,SADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACZ;IAClB,kDAAkD;IAClD,cADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACvB;IACvB,kDAAkD;IAClD,iBADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACpB;IAG3B,0EAA0E;IAC1E,sBADa,OAAO,iDAAiD,CAAC,CAerE;IAVC,wEAAwE;IAExE,iBAFW,OAAO,iDAAiD,CAAC,CAE4B;IAUlG;;OAEG;IACH,0BAFY,KAAK,CAAC,MAAM,CAAC,CASxB;IAED;;;;OAIG;IACH,qBAFW,MAAM,GAAC,MAAM,gBA4BvB;IAED;;;;OAIG;IACH,uBAFW,MAAM,GAAC,MAAM,gBA2BvB;IAED,iGAiBC;IA+CD;;;;OAIG;IACH,4BAFW,eAAe,gBA0BzB;IAED;;;;OAIG;IACH,sBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,gBAsB7B;IAED;;;;OAIG;IACH,sBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,gBAsB7B;IAED;;;;OAIG;IACH,sBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,gBAsB7B;IAED;;;;OAIG;IACH,sBAFW,MAAM,GAAC,MAAM,gBAKvB;IAaD;;;;OAIG;IACH,qBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,gBAK7B;IAcD;;;OAGG;IACH,oCAHW,MAAM,WACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAiC7B;IAED;;OAEG;IACH,6BAFW,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,QA+MjC;IAED;;;OAGG;IACH,oCAHW,MAAM,GACL,MAAM,CAKjB;IAED;;;OAGG;IACH,yCAHW,MAAM,GACL,MAAM,CAiCjB;IAED;;OAEG;IACH,kCAFW,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,QA6BjC;IAED,gDAcC;CAsCD;;;;;uBAjuBY,OAAO,oCAAoC,EAAE,eAAe;uBAC5D,OAAO,oCAAoC,EAAE,eAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"RecordsSet-MetaController.d.ts","sourceRoot":"","sources":["../../source/services/RecordsSet-MetaController.js"],"names":[],"mappings":";AAwBA;IAEC,2DA0CC;IArCA,0JAA0J;IAC1J,OADW,OAAO,MAAM,CAAC,GAAG;QAAE,iCAAiC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,GAAG,CAAC;QAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAA;KAAE,CAC5I;IACV;2CAFiE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,GAAG;qBAAe,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG;MAE9H;IACtB,kBAAkB;IAClB,KADW,GAAG,CACN;IACR,kBAAkB;IAClB,SADW,GAAG,CACF;IACZ,qBAAqB;IACrB,MADW,MAAM,CACR;IAET;;;;;MAKC;IAED,sDAAsD;IACtD,oBADW,MAAM,CAAC,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CACtB;IAC5B,kDAAkD;IAClD,iCADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACL;IAEzC,kDAAkD;IAClD,yBADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACb;IAEjC,+DAA+D;IAC/D,kBADW,KAAK,CAAC,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CACjC;IAE1B,kDAAkD;IAClD,qBADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACjB;IAC7B,iDAAiD;IACjD,WADW,MAAM,CAAC,MAAM,EAAE,OAAO,UAAU,CAAC,CAAC,CACG;IAEhD,yBAA4B;IAiC7B;;OAEG;IACH,4CAFY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAK9B;IAED,kEA0FC;IAED,4EAmBC;IAED,kFAyCC;IAED,yDAaC;IAED,qCAMC;IAED,iDAUC;IAED,iFAGC;IAED,0BA2EC;IAED,6CAGC;IAED;;OAEG;IACH,sCAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAwC7B;CAED;;;;AA1ZD,kCAAkC;AAClC,sCADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAI3B"}
1
+ {"version":3,"file":"RecordsSet-MetaController.d.ts","sourceRoot":"","sources":["../../source/services/RecordsSet-MetaController.js"],"names":[],"mappings":";AAwBA;IAEC,2DA0CC;IArCA,0JAA0J;IAC1J,OADW,OAAO,MAAM,CAAC,GAAG;QAAE,iCAAiC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,GAAG,CAAC;QAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAA;KAAE,CAC5I;IACV;2CAFiE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,GAAG;qBAAe,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG;MAE9H;IACtB,kBAAkB;IAClB,KADW,GAAG,CACN;IACR,kBAAkB;IAClB,SADW,GAAG,CACF;IACZ,qBAAqB;IACrB,MADW,MAAM,CACR;IAET;;;;;MAKC;IAED,sDAAsD;IACtD,oBADW,MAAM,CAAC,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CACtB;IAC5B,kDAAkD;IAClD,iCADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACL;IAEzC,kDAAkD;IAClD,yBADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACb;IAEjC,+DAA+D;IAC/D,kBADW,KAAK,CAAC,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CACjC;IAE1B,kDAAkD;IAClD,qBADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACjB;IAC7B,iDAAiD;IACjD,WADW,MAAM,CAAC,MAAM,EAAE,OAAO,UAAU,CAAC,CAAC,CACG;IAEhD,yBAA4B;IAiC7B;;OAEG;IACH,4CAFY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAK9B;IAED,kEAuGC;IAED,4EAmBC;IAED,kFAyCC;IAED,yDAaC;IAED,qCAMC;IAED,iDAUC;IAED,iFAGC;IAED,0BA2EC;IAED,6CAGC;IAED;;OAEG;IACH,sCAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAwC7B;CAED;;;;AAvaD,kCAAkC;AAClC,sCADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAI3B"}
@@ -50,6 +50,7 @@ declare class ViewRecordSetSUBSETFilters extends libPictView {
50
50
  */
51
51
  selectFilterToAdd(pEvent: Event, pRecordSet: string, pViewContext: string): void;
52
52
  addFilter(pEvent: any, pRecordSet: any, pViewContext: any, pFilterKey: any, pClauseKey: any): void;
53
+ removeFilter(pEvent: any, pRecordSet: any, pViewContext: any, pSpecificFilterKey: any): void;
53
54
  getFilterSchema(pRecordSet: any): any[];
54
55
  serializeFilterExperience(pExperience: any): Promise<string>;
55
56
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"RecordSet-Filters.d.ts","sourceRoot":"","sources":["../../source/views/RecordSet-Filters.js"],"names":[],"mappings":";AAwJA;IAEC,2DAqEC;IAjEA,kHAAkH;IAClH,MADW,GAAe,GAAG,OAAO,MAAM,CAAC,GAAG;QAAE,oBAAoB,EAAE;;;;;;SAAsC,CAAA;KAAE,CACrG;IAwDT,cAA+E;IAG/E,wCAA0E;IAU3E;;;;OAIG;IACH,qBAFa,GAAG,CAaf;IAED;;;;OAIG;IACH,mBAFa,GAAG,CAaf;IAED;;;;OAIG;IACH,qBAJW,KAAK,cACL,MAAM,gBACN,MAAM,QAShB;IAED;;;;OAIG;IACH,0BAJW,MAAM,gBACN,MAAM,kBACN,MAAM,QA+ChB;IAED;;;;OAIG;IACH,oBAJW,KAAK,cACL,MAAM,gBACN,MAAM,QAgBhB;IAED;;;;OAIG;IACH,0BAJW,KAAK,cACL,MAAM,gBACN,MAAM,QAQhB;IAED,mGAOC;IAED,wCAIC;IAwCD,6DAOC;IAED;;;;OAIG;IACH,yCAJW,MAAM,GAEL,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAUvC;IAED;;;;;OAKG;IACH,iBALW,MAAM,aACN,iBAAiB,GAEhB,OAAO,CAAC,WAAW,CAAC,CAU/B;IAED;;;OAGG;IACH,sBAHW,UAAU,aACV,iBAAiB,mBAY3B;IAED;;;;OAIG;IACH,oBAJW,WAAW,GAEV,MAAM,CA2BjB;IAED;;;;OAIG;IACH,eAJW,MAAM,GAEL,WAAW,CAsCtB;CACD;;;;;AAjiBD,kCAAkC;AAClC,oDADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAiJ5B"}
1
+ {"version":3,"file":"RecordSet-Filters.d.ts","sourceRoot":"","sources":["../../source/views/RecordSet-Filters.js"],"names":[],"mappings":";AAsJA;IAEC,2DAqEC;IAjEA,kHAAkH;IAClH,MADW,GAAe,GAAG,OAAO,MAAM,CAAC,GAAG;QAAE,oBAAoB,EAAE;;;;;;SAAsC,CAAA;KAAE,CACrG;IAwDT,cAA+E;IAG/E,wCAA0E;IAU3E;;;;OAIG;IACH,qBAFa,GAAG,CAaf;IAED;;;;OAIG;IACH,mBAFa,GAAG,CAaf;IAED;;;;OAIG;IACH,qBAJW,KAAK,cACL,MAAM,gBACN,MAAM,QAShB;IAED;;;;OAIG;IACH,0BAJW,MAAM,gBACN,MAAM,kBACN,MAAM,QA+ChB;IAED;;;;OAIG;IACH,oBAJW,KAAK,cACL,MAAM,gBACN,MAAM,QAgBhB;IAED;;;;OAIG;IACH,0BAJW,KAAK,cACL,MAAM,gBACN,MAAM,QAQhB;IAED,mGAOC;IAED,6FAOC;IAED,wCAIC;IAwCD,6DAOC;IAED;;;;OAIG;IACH,yCAJW,MAAM,GAEL,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAUvC;IAED;;;;;OAKG;IACH,iBALW,MAAM,aACN,iBAAiB,GAEhB,OAAO,CAAC,WAAW,CAAC,CAU/B;IAED;;;OAGG;IACH,sBAHW,UAAU,aACV,iBAAiB,mBAY3B;IAED;;;;OAIG;IACH,oBAJW,WAAW,GAEV,MAAM,CA2BjB;IAED;;;;OAIG;IACH,eAJW,MAAM,GAEL,WAAW,CAsCtB;CACD;;;;;AAxiBD,kCAAkC;AAClC,oDADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+I5B"}
@@ -1,8 +1,8 @@
1
- export = viewRecordSetListHeaderList;
2
- declare class viewRecordSetListHeaderList extends libPictView {
1
+ export = viewRecordSetDashboardHeaderList;
2
+ declare class viewRecordSetDashboardHeaderList extends libPictView {
3
3
  constructor(pFable: any, pOptions: any, pServiceHash: any);
4
4
  }
5
- declare namespace viewRecordSetListHeaderList {
5
+ declare namespace viewRecordSetDashboardHeaderList {
6
6
  export { _DEFAULT_CONFIGURATION_Dashboard_HeaderList as default_configuration };
7
7
  }
8
8
  import libPictView = require("pict-view");
@@ -1,8 +1,8 @@
1
- export = viewRecordSetListPaginationBottom;
2
- declare class viewRecordSetListPaginationBottom extends libPictView {
1
+ export = viewRecordSetDashboardPaginationBottom;
2
+ declare class viewRecordSetDashboardPaginationBottom extends libPictView {
3
3
  constructor(pFable: any, pOptions: any, pServiceHash: any);
4
4
  }
5
- declare namespace viewRecordSetListPaginationBottom {
5
+ declare namespace viewRecordSetDashboardPaginationBottom {
6
6
  export { _DEFAULT_CONFIGURATION_List_PaginationBottom as default_configuration };
7
7
  }
8
8
  import libPictView = require("pict-view");
@@ -1,8 +1,8 @@
1
- export = viewRecordSetListPaginationTop;
2
- declare class viewRecordSetListPaginationTop extends libPictView {
1
+ export = viewRecordSetDashboardPaginationTop;
2
+ declare class viewRecordSetDashboardPaginationTop extends libPictView {
3
3
  constructor(pFable: any, pOptions: any, pServiceHash: any);
4
4
  }
5
- declare namespace viewRecordSetListPaginationTop {
5
+ declare namespace viewRecordSetDashboardPaginationTop {
6
6
  export { _DEFAULT_CONFIGURATION_List_PaginationTop as default_configuration };
7
7
  }
8
8
  import libPictView = require("pict-view");
@@ -1,11 +1,11 @@
1
- export = viewRecordSetListRecordList;
2
- declare class viewRecordSetListRecordList extends libPictView {
1
+ export = viewRecordSetDashboardRecordList;
2
+ declare class viewRecordSetDashboardRecordList extends libPictView {
3
3
  constructor(pFable: any, pOptions: any, pServiceHash: any);
4
4
  }
5
- declare namespace viewRecordSetListRecordList {
6
- export { _DEFAULT_CONFIGURATION_List_RecordList as default_configuration };
5
+ declare namespace viewRecordSetDashboardRecordList {
6
+ export { _DEFAULT_CONFIGURATION_Dashboard_RecordList as default_configuration };
7
7
  }
8
8
  import libPictView = require("pict-view");
9
9
  /** @type {Record<string, any>} */
10
- declare const _DEFAULT_CONFIGURATION_List_RecordList: Record<string, any>;
10
+ declare const _DEFAULT_CONFIGURATION_Dashboard_RecordList: Record<string, any>;
11
11
  //# sourceMappingURL=RecordSet-Dashboard-RecordList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RecordSet-Dashboard-RecordList.d.ts","sourceRoot":"","sources":["../../../source/views/dashboard/RecordSet-Dashboard-RecordList.js"],"names":[],"mappings":";AAmEA;IAEC,2DAIC;CACD;;;;;AAxED,kCAAkC;AAClC,sDADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+D5B"}
1
+ {"version":3,"file":"RecordSet-Dashboard-RecordList.d.ts","sourceRoot":"","sources":["../../../source/views/dashboard/RecordSet-Dashboard-RecordList.js"],"names":[],"mappings":";AAmEA;IAEC,2DAIC;CACD;;;;;AAxED,kCAAkC;AAClC,2DADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+D5B"}
@@ -1,8 +1,8 @@
1
- export = viewRecordSetListRecordListEntry;
2
- declare class viewRecordSetListRecordListEntry extends libPictView {
1
+ export = viewRecordSetDashboardRecordListEntry;
2
+ declare class viewRecordSetDashboardRecordListEntry extends libPictView {
3
3
  constructor(pFable: any, pOptions: any, pServiceHash: any);
4
4
  }
5
- declare namespace viewRecordSetListRecordListEntry {
5
+ declare namespace viewRecordSetDashboardRecordListEntry {
6
6
  export { _DEFAULT_CONFIGURATION_List_RecordListEntry as default_configuration };
7
7
  }
8
8
  import libPictView = require("pict-view");
@@ -1,8 +1,8 @@
1
- export = viewRecordSetListRecordListHeader;
2
- declare class viewRecordSetListRecordListHeader extends libPictView {
1
+ export = viewRecordSetDashboardRecordListHeader;
2
+ declare class viewRecordSetDashboardRecordListHeader extends libPictView {
3
3
  constructor(pFable: any, pOptions: any, pServiceHash: any);
4
4
  }
5
- declare namespace viewRecordSetListRecordListHeader {
5
+ declare namespace viewRecordSetDashboardRecordListHeader {
6
6
  export { _DEFAULT_CONFIGURATION_List_RecordListHeader as default_configuration };
7
7
  }
8
8
  import libPictView = require("pict-view");
@@ -1,8 +1,8 @@
1
- export = viewRecordSetListTitle;
2
- declare class viewRecordSetListTitle extends libPictView {
1
+ export = viewRecordSetDashboardTitle;
2
+ declare class viewRecordSetDashboardTitle extends libPictView {
3
3
  constructor(pFable: any, pOptions: any, pServiceHash: any);
4
4
  }
5
- declare namespace viewRecordSetListTitle {
5
+ declare namespace viewRecordSetDashboardTitle {
6
6
  export { _DEFAULT_CONFIGURATION_List_Title as default_configuration };
7
7
  }
8
8
  import libPictView = require("pict-view");
@@ -1 +1 @@
1
- {"version":3,"file":"RecordSet-Dashboard.d.ts","sourceRoot":"","sources":["../../../source/views/dashboard/RecordSet-Dashboard.js"],"names":[],"mappings":";AA0EA;IAOE;;;;;;;;MAQC;IAGF,iEAuCC;IA2BD,8CAGC;IAED,sDAuCC;IAnCA,iCAUC;IA2BF;;;;;;;;;;OAUG;IACH,wCAVW,MAAM,2BACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,iBACnB,MAAM,iBACN,MAAM,+BACN,MAAM,WACN,MAAM,aACN,MAAM,GAEL,OAAO,CAAC,IAAI,CAAC,CA+QxB;IAED;;;;;;;;;OASG;IACH,yCATW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,iBACnB,MAAM,iBACN,MAAM,+BACN,MAAM,WACN,MAAM,aACN,MAAM,GAEL,OAAO,CAAC,IAAI,CAAC,CA4QxB;CAwBD;;;;;AAvwBD,kCAAkC;AAClC,iDADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA6D1B"}
1
+ {"version":3,"file":"RecordSet-Dashboard.d.ts","sourceRoot":"","sources":["../../../source/views/dashboard/RecordSet-Dashboard.js"],"names":[],"mappings":";AA4EA;IAOE;;;;;;;;MAQC;IAGF,iEAuCC;IA2BD,8CAGC;IAED,sDAuCC;IAnCA,iCAUC;IA2BF;;;;;;;;;;OAUG;IACH,wCAVW,MAAM,2BACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,iBACnB,MAAM,iBACN,MAAM,+BACN,MAAM,WACN,MAAM,aACN,MAAM,GAEL,OAAO,CAAC,IAAI,CAAC,CA+QxB;IAED;;;;;;;;;OASG;IACH,yCATW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,iBACnB,MAAM,iBACN,MAAM,+BACN,MAAM,WACN,MAAM,aACN,MAAM,GAEL,OAAO,CAAC,IAAI,CAAC,CA4QxB;CAwBD;;;;;AAzwBD,kCAAkC;AAClC,iDADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+D1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"RecordSet-Filter-Base.d.ts","sourceRoot":"","sources":["../../../source/views/filters/RecordSet-Filter-Base.js"],"names":[],"mappings":";AA8DA;IAEC,2DAIC;IAED;;;;OAIG;IACH,uBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAe7B;IAED,gCAGC;CACD;;;;;AA5FD,kCAAkC;AAClC,oDADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA0D5B"}
1
+ {"version":3,"file":"RecordSet-Filter-Base.d.ts","sourceRoot":"","sources":["../../../source/views/filters/RecordSet-Filter-Base.js"],"names":[],"mappings":";AAmEA;IAEC,2DAIC;IAED;;;;OAIG;IACH,uBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAe7B;IAED,gCAGC;CACD;;;;;AAjGD,kCAAkC;AAClC,oDADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+D5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"RecordSet-List-RecordList.d.ts","sourceRoot":"","sources":["../../../source/views/list/RecordSet-List-RecordList.js"],"names":[],"mappings":";AAmEA;IAEC,2DAIC;CACD;;;;;AAxED,kCAAkC;AAClC,sDADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+D5B"}
1
+ {"version":3,"file":"RecordSet-List-RecordList.d.ts","sourceRoot":"","sources":["../../../source/views/list/RecordSet-List-RecordList.js"],"names":[],"mappings":";AAkFA;IAEC,2DAIC;CACD;;;;;AAvFD,kCAAkC;AAClC,sDADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA8E5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"RecordSet-List.d.ts","sourceRoot":"","sources":["../../../source/views/list/RecordSet-List.js"],"names":[],"mappings":";AA0EA;IAOE;;;;;;;;MAQC;IAGF,4DAwBC;IAiBD,8CAGC;IAED,sDAkCC;IA9BA,iCAUC;IAsBF;;;;;;;;;OASG;IACH,oCATW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,iBACnB,MAAM,iBACN,MAAM,+BACN,MAAM,WACN,MAAM,aACN,MAAM,GAEL,OAAO,CAAC,IAAI,CAAC,CAmOxB;CAwBD;;;;;AAtaD,kCAAkC;AAClC,4CADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA6D1B"}
1
+ {"version":3,"file":"RecordSet-List.d.ts","sourceRoot":"","sources":["../../../source/views/list/RecordSet-List.js"],"names":[],"mappings":";AA4EA;IAOE;;;;;;;;MAQC;IAGF,4DAwBC;IAiBD,8CAGC;IAED,sDAkCC;IA9BA,iCAUC;IAsBF;;;;;;;;;OASG;IACH,oCATW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,iBACnB,MAAM,iBACN,MAAM,+BACN,MAAM,WACN,MAAM,aACN,MAAM,GAEL,OAAO,CAAC,IAAI,CAAC,CAmOxB;CAwBD;;;;;AAxaD,kCAAkC;AAClC,4CADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA+D1B"}