@slickgrid-universal/odata 5.0.1 → 5.1.0

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.
@@ -1,4 +1,4 @@
1
- import type { BackendServiceOption, CaseType } from '@slickgrid-universal/common';
1
+ import type { BackendServiceFilterQueryOverrideArgs, BackendServiceOption, CaseType } from '@slickgrid-universal/common';
2
2
  export interface OdataOption extends BackendServiceOption {
3
3
  /** What is the casing type to use? Typically that would be 1 of the following 2: camelCase or PascalCase */
4
4
  caseType: CaseType;
@@ -26,6 +26,8 @@ export interface OdataOption extends BackendServiceOption {
26
26
  filterBySeparator?: 'and' | 'or';
27
27
  /** Filter queue */
28
28
  filterQueue?: any[];
29
+ /** An optional predicate function to overide the built-in filter construction */
30
+ filterQueryOverride?: (args: BackendServiceFilterQueryOverrideArgs) => string | undefined;
29
31
  /** Sorting string (or array of string) that must be a valid OData string */
30
32
  orderBy?: string | string[];
31
33
  /** OData (or any other) version number (the query string is different between versions) */
@@ -1 +1 @@
1
- {"version":3,"file":"odataOption.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/odataOption.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAElF,MAAM,WAAW,WAAY,SAAQ,oBAAoB;IACvD,4GAA4G;IAC5G,QAAQ,EAAE,QAAQ,CAAC;IAEnB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE3B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,GAAG,CAAC;IAEf,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAEjC,mBAAmB;IACnB,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;IAEpB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC,4JAA4J;IAC5J,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAC;IAE3C,uJAAuJ;IACvJ,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAC;CAC9C"}
1
+ {"version":3,"file":"odataOption.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/odataOption.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qCAAqC,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEzH,MAAM,WAAW,WAAY,SAAQ,oBAAoB;IACvD,4GAA4G;IAC5G,QAAQ,EAAE,QAAQ,CAAC;IAEnB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE3B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,GAAG,CAAC;IAEf,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAEjC,mBAAmB;IACnB,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;IAEpB,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,qCAAqC,KAAK,MAAM,GAAG,SAAS,CAAC;IAE1F,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5B,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC,4JAA4J;IAC5J,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAC;IAE3C,uJAAuJ;IACvJ,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAC;CAC9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"grid-odata.service.d.ts","sourceRoot":"","sources":["../../../src/services/grid-odata.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grid-odata.service.d.ts","sourceRoot":"","sources":["../../../src/services/grid-odata.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slickgrid-universal/odata",
3
- "version": "5.0.1",
3
+ "version": "5.1.0",
4
4
  "description": "Grid OData Service to sync a grid with an OData backend server",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -38,12 +38,12 @@
38
38
  "not dead"
39
39
  ],
40
40
  "dependencies": {
41
- "@slickgrid-universal/common": "~5.0.1",
41
+ "@slickgrid-universal/common": "~5.1.0",
42
42
  "@slickgrid-universal/utils": "~5.0.0"
43
43
  },
44
44
  "funding": {
45
45
  "type": "ko_fi",
46
46
  "url": "https://ko-fi.com/ghiscoding"
47
47
  },
48
- "gitHead": "4affd2ca9e921166883822938f0cfae05ab2b447"
48
+ "gitHead": "dec8be36272c9111cd708a1836e1697ac81be323"
49
49
  }
@@ -1,4 +1,4 @@
1
- import type { BackendServiceOption, CaseType } from '@slickgrid-universal/common';
1
+ import type { BackendServiceFilterQueryOverrideArgs, BackendServiceOption, CaseType } from '@slickgrid-universal/common';
2
2
 
3
3
  export interface OdataOption extends BackendServiceOption {
4
4
  /** What is the casing type to use? Typically that would be 1 of the following 2: camelCase or PascalCase */
@@ -37,6 +37,9 @@ export interface OdataOption extends BackendServiceOption {
37
37
  /** Filter queue */
38
38
  filterQueue?: any[];
39
39
 
40
+ /** An optional predicate function to overide the built-in filter construction */
41
+ filterQueryOverride?: (args: BackendServiceFilterQueryOverrideArgs) => string | undefined;
42
+
40
43
  /** Sorting string (or array of string) that must be a valid OData string */
41
44
  orderBy?: string | string[];
42
45
 
@@ -104,10 +104,10 @@ export class GridOdataService implements BackendService {
104
104
  }
105
105
 
106
106
  postProcess(processResult: any): void {
107
- const odataVersion = this._odataService?.options?.version ?? 2;
107
+ const odataVersion = this._odataService.options.version ?? 2;
108
108
 
109
- if (this.pagination && this._odataService?.options?.enableCount) {
110
- const countExtractor = this._odataService?.options?.countExtractor ??
109
+ if (this.pagination && this._odataService.options.enableCount) {
110
+ const countExtractor = this._odataService.options.countExtractor ??
111
111
  odataVersion >= 4 ? (r: any) => r?.['@odata.count'] :
112
112
  odataVersion === 3 ? (r: any) => r?.['__count'] :
113
113
  (r: any) => r?.d?.['__count'];
@@ -117,8 +117,8 @@ export class GridOdataService implements BackendService {
117
117
  }
118
118
  }
119
119
 
120
- if (this._odataService?.options?.enableExpand) {
121
- const datasetExtractor = this._odataService?.options?.datasetExtractor ??
120
+ if (this._odataService.options.enableExpand) {
121
+ const datasetExtractor = this._odataService.options.datasetExtractor ??
122
122
  odataVersion >= 4 ? (r: any) => r?.value :
123
123
  odataVersion === 3 ? (r: any) => r?.results :
124
124
  (r: any) => r?.d?.results;
@@ -295,7 +295,7 @@ export class GridOdataService implements BackendService {
295
295
  updateFilters(columnFilters: ColumnFilters | CurrentFilter[], isUpdatedByPresetOrDynamically?: boolean) {
296
296
  let searchBy = '';
297
297
  const searchByArray: string[] = [];
298
- const odataVersion = this._odataService?.options?.version ?? 2;
298
+ const odataVersion = this._odataService.options.version ?? 2;
299
299
 
300
300
  // on filter preset load, we need to keep current filters
301
301
  if (isUpdatedByPresetOrDynamically) {
@@ -342,13 +342,17 @@ export class GridOdataService implements BackendService {
342
342
 
343
343
  // run regex to find possible filter operators unless the user disabled the feature
344
344
  const autoParseInputFilterOperator = columnDef.autoParseInputFilterOperator ?? this._gridOptions.autoParseInputFilterOperator;
345
- const matches = autoParseInputFilterOperator !== false
346
- ? fieldSearchValue.match(/^([<>!=*]{0,2})(.*[^<>!=*])([*]?)$/) // group 1: Operator, 2: searchValue, 3: last char is '*' (meaning starts with, ex.: abc*)
347
- : [fieldSearchValue, '', fieldSearchValue, '']; // when parsing is disabled, we'll only keep the search value in the index 2 to make it easy for code reuse
348
345
 
349
- let operator = columnFilter.operator || matches?.[1];
350
- let searchValue = matches?.[2] || '';
351
- const lastValueChar = matches?.[3] || (operator === '*z' || operator === OperatorType.endsWith) ? '*' : '';
346
+ // group (2): comboStartsWith, (3): comboEndsWith, (4): Operator, (1 or 5): searchValue, (6): last char is '*' (meaning starts with, ex.: abc*)
347
+ const matches = autoParseInputFilterOperator !== false
348
+ ? fieldSearchValue.match(/^((.*[^\\*\r\n])[*]{1}(.*[^*\r\n]))|^([<>!=*]{0,2})(.*[^<>!=*])([*]?)$/) || []
349
+ : [fieldSearchValue, '', '', '', '', fieldSearchValue, ''];
350
+
351
+ const comboStartsWith = matches?.[2] || '';
352
+ const comboEndsWith = matches?.[3] || '';
353
+ let operator = columnFilter.operator || matches?.[4];
354
+ let searchValue = matches?.[1] || matches?.[5] || '';
355
+ const lastValueChar = matches?.[6] || (operator === '*z' || operator === OperatorType.endsWith) ? '*' : '';
352
356
  const bypassOdataQuery = columnFilter.bypassBackendQuery || false;
353
357
 
354
358
  // no need to query if search value is empty
@@ -357,7 +361,12 @@ export class GridOdataService implements BackendService {
357
361
  continue;
358
362
  }
359
363
 
360
- if (Array.isArray(searchTerms) && searchTerms.length === 1 && typeof searchTerms[0] === 'string' && searchTerms[0].indexOf('..') >= 0) {
364
+ // StartsWith + EndsWith combo
365
+ if (comboStartsWith && comboEndsWith) {
366
+ searchTerms = [comboStartsWith, comboEndsWith];
367
+ operator = OperatorType.startsWithEndsWith;
368
+ } else if (Array.isArray(searchTerms) && searchTerms.length === 1 && typeof searchTerms[0] === 'string' && searchTerms[0].indexOf('..') >= 0) {
369
+ // range filter
361
370
  if (operator !== OperatorType.rangeInclusive && operator !== OperatorType.rangeExclusive) {
362
371
  operator = this._gridOptions.defaultFilterRangeOperator ?? OperatorType.rangeInclusive;
363
372
  }
@@ -390,7 +399,7 @@ export class GridOdataService implements BackendService {
390
399
  operator = OperatorType.equal;
391
400
  }
392
401
 
393
- // if we still don't have an operator find the proper Operator to use by it's field type
402
+ // if we still don't have an operator find the proper Operator to use according to field type
394
403
  if (!operator) {
395
404
  operator = mapOperatorByFieldType(fieldType);
396
405
  }
@@ -417,7 +426,29 @@ export class GridOdataService implements BackendService {
417
426
  fieldName = titleCase(getHtmlStringOutput(fieldName || ''));
418
427
  }
419
428
 
420
- if (searchTerms && searchTerms.length > 1 && (operator === 'IN' || operator === 'NIN' || operator === 'NOTIN' || operator === 'NOT IN' || operator === 'NOT_IN')) {
429
+ let filterQueryOverride: string | undefined = undefined;
430
+ if (typeof this._odataService.options.filterQueryOverride === 'function') {
431
+ filterQueryOverride = this._odataService.options.filterQueryOverride({
432
+ fieldName: getHtmlStringOutput(fieldName),
433
+ columnDef,
434
+ operator,
435
+ columnFilterOperator: columnFilter.operator,
436
+ searchValue,
437
+ grid: this._grid
438
+ });
439
+ }
440
+
441
+ if (filterQueryOverride !== undefined) {
442
+ searchBy = filterQueryOverride;
443
+ } else if (operator === OperatorType.startsWithEndsWith && Array.isArray(searchTerms) && searchTerms.length === 2) {
444
+ const tmpSearchTerms: string[] = [];
445
+ const [sw, ew] = searchTerms;
446
+
447
+ // add 2 conditions (StartsWith A + EndsWith B) to the search array
448
+ tmpSearchTerms.push(`startswith(${fieldName}, ${sw})`);
449
+ tmpSearchTerms.push(`endswith(${fieldName}, ${ew})`);
450
+ searchBy = tmpSearchTerms.join(' and ');
451
+ } else if (searchTerms?.length > 1 && (operator === 'IN' || operator === 'NIN' || operator === 'NOTIN' || operator === 'NOT IN' || operator === 'NOT_IN')) {
421
452
  // when having more than 1 search term (then check if we have a "IN" or "NOT IN" filter search)
422
453
  const tmpSearchTerms: string[] = [];
423
454
  if (operator === 'IN') {