@teselagen/ui 0.7.33-beta.4 → 0.7.33-beta.6

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.
@@ -3,12 +3,6 @@ export function getMergedOpts(topLevel?: {}, instanceLevel?: {}): {
3
3
  defaults: any;
4
4
  formName: string;
5
5
  };
6
- /**
7
- *
8
- * @param {object} field
9
- * @returns the camelCase display name of the field, to be used for filters, sorting, etc
10
- */
11
- export function getCCDisplayName(field: object): string;
12
6
  export function getCurrentParamsFromUrl(location: any, isSimple: any): any;
13
7
  export function setCurrentParamsOnUrl(newParams: any, replace: any, isSimple: any): void;
14
8
  export function makeDataTableHandlers({ setNewParams, defaults, onlyOneFilter }: {
@@ -25,7 +19,7 @@ export function makeDataTableHandlers({ setNewParams, defaults, onlyOneFilter }:
25
19
  setOrder: (order: any, isRemove: any, shiftHeld: any) => any;
26
20
  setNewParams: any;
27
21
  };
28
- export function getQueryParams({ currentParams, defaults, schema, isInfinite, entities, isLocalCall, additionalFilter, doNotCoercePageSize, ownProps }: {
22
+ export function getQueryParams({ currentParams, defaults, schema, isInfinite, entities, isLocalCall, additionalFilter, doNotCoercePageSize, noOrderError, ownProps }: {
29
23
  currentParams: any;
30
24
  defaults: any;
31
25
  schema: any;
@@ -34,11 +28,14 @@ export function getQueryParams({ currentParams, defaults, schema, isInfinite, en
34
28
  isLocalCall: any;
35
29
  additionalFilter: any;
36
30
  doNotCoercePageSize: any;
31
+ noOrderError: any;
37
32
  ownProps: any;
38
33
  }): {
39
- entities: any[];
40
- entitiesAcrossPages: any[];
41
- entityCount: number;
34
+ page: any;
35
+ pageSize: any;
36
+ order: any[];
37
+ filters: any;
38
+ searchTerm: any;
42
39
  } | {
43
40
  variables: {
44
41
  where: {};
@@ -48,7 +45,7 @@ export function getQueryParams({ currentParams, defaults, schema, isInfinite, en
48
45
  };
49
46
  page: any;
50
47
  pageSize: any;
51
- order: any;
48
+ order: any[];
52
49
  filters: any;
53
50
  searchTerm: any;
54
51
  };
@@ -12,3 +12,15 @@ export function tableQueryParamsToHasuraClauses({ page, pageSize, searchTerm, fi
12
12
  limit: any;
13
13
  offset: number;
14
14
  };
15
+ /**
16
+ * Takes a schema and returns an object with the fields mapped by their camelCased display name.
17
+ * If the displayName is not set or is a jsx element, the path is used instead.
18
+ * The same conversion must be done when using the result of this method
19
+ */
20
+ export function getFieldsMappedByCCDisplayName(schema: any): any;
21
+ /**
22
+ *
23
+ * @param {object} field
24
+ * @returns the camelCase display name of the field, to be used for filters, sorting, etc
25
+ */
26
+ export function getCCDisplayName(field: object): string;
package/index.cjs.js CHANGED
@@ -19402,6 +19402,7 @@ function tableQueryParamsToHasuraClauses({
19402
19402
  // Add schema as a parameter
19403
19403
  additionalFilter
19404
19404
  }) {
19405
+ const ccFields = getFieldsMappedByCCDisplayName(schema);
19405
19406
  let where = {};
19406
19407
  const order_by = {};
19407
19408
  const limit = pageSize || 25;
@@ -19413,9 +19414,8 @@ function tableQueryParamsToHasuraClauses({
19413
19414
  if (searchDisabled || field.filterDisabled || type2 === "color") return;
19414
19415
  const filterValue = searchTerm;
19415
19416
  if (type2 === "string" || type2 === "lookup") {
19416
- searchTermFilters.push({
19417
- [path2]: { _ilike: `%${filterValue}%` }
19418
- });
19417
+ const o2 = set$1({}, path2, { _ilike: `%${filterValue}%` });
19418
+ searchTermFilters.push(o2);
19419
19419
  } else if (type2 === "boolean") {
19420
19420
  let regex;
19421
19421
  try {
@@ -19424,19 +19424,16 @@ function tableQueryParamsToHasuraClauses({
19424
19424
  }
19425
19425
  if (regex) {
19426
19426
  if ("true".replace(regex, "") !== "true") {
19427
- searchTermFilters.push({
19428
- [path2]: { _eq: true }
19429
- });
19427
+ const o2 = set$1({}, path2, { _eq: true });
19428
+ searchTermFilters.push(o2);
19430
19429
  } else if ("false".replace(regex, "") !== "false") {
19431
- searchTermFilters.push({
19432
- [path2]: { _eq: false }
19433
- });
19430
+ const o2 = set$1({}, path2, { _eq: false });
19431
+ searchTermFilters.push(o2);
19434
19432
  }
19435
19433
  }
19436
19434
  } else if ((type2 === "number" || type2 === "integer") && !isNaN(filterValue)) {
19437
- searchTermFilters.push({
19438
- [path2]: { _eq: parseFloat(filterValue) }
19439
- });
19435
+ const o2 = set$1({}, path2, { _eq: parseFloat(filterValue) });
19436
+ searchTermFilters.push(o2);
19440
19437
  }
19441
19438
  });
19442
19439
  if (searchTermFilters.length > 0) {
@@ -19449,32 +19446,134 @@ function tableQueryParamsToHasuraClauses({
19449
19446
  }
19450
19447
  if (filters && filters.length > 0) {
19451
19448
  const filterClauses = filters.map((filter2) => {
19452
- const { selectedFilter, filterOn, filterValue } = filter2;
19449
+ let { selectedFilter, filterOn, filterValue } = filter2;
19450
+ const fieldSchema = ccFields[filterOn] || {};
19451
+ const { path: path2, reference: reference2, type: type2 } = fieldSchema;
19452
+ let stringFilterValue = filterValue && filterValue.toString ? filterValue.toString() : filterValue;
19453
+ if (stringFilterValue === false) {
19454
+ stringFilterValue = "false";
19455
+ } else {
19456
+ stringFilterValue = stringFilterValue || "";
19457
+ }
19458
+ const arrayFilterValue = Array.isArray(filterValue) ? filterValue : stringFilterValue.split(";");
19459
+ if (type2 === "number" || type2 === "integer") {
19460
+ filterValue = Array.isArray(filterValue) ? filterValue.map((val) => Number(val)) : Number(filterValue);
19461
+ }
19462
+ if (fieldSchema.normalizeFilter) {
19463
+ filterValue = fieldSchema.normalizeFilter(
19464
+ filterValue,
19465
+ selectedFilter,
19466
+ filterOn
19467
+ );
19468
+ }
19469
+ if (reference2) {
19470
+ filterOn = reference2.sourceField;
19471
+ } else {
19472
+ filterOn = path2 || filterOn;
19473
+ }
19453
19474
  switch (selectedFilter) {
19454
- case "textContains":
19475
+ case "none":
19476
+ return {};
19477
+ case "startsWith":
19478
+ return { [filterOn]: { _ilike: `${filterValue}%` } };
19479
+ case "endsWith":
19480
+ return { [filterOn]: { _ilike: `%${filterValue}` } };
19481
+ case "contains":
19455
19482
  return { [filterOn]: { _ilike: `%${filterValue}%` } };
19456
- case "textEquals":
19483
+ case "notContains":
19484
+ return { [filterOn]: { _not_ilike: `%${filterValue}%` } };
19485
+ case "isExactly":
19457
19486
  return { [filterOn]: { _eq: filterValue } };
19458
- case "textNotEquals":
19459
- return { [filterOn]: { _neq: filterValue } };
19460
- case "numberEquals":
19461
- return { [filterOn]: { _eq: parseFloat(filterValue) } };
19462
- case "numberGreaterThan":
19487
+ case "isEmpty":
19488
+ return {
19489
+ _or: [
19490
+ { [filterOn]: { _eq: "" } },
19491
+ { [filterOn]: { _is_null: true } }
19492
+ ]
19493
+ };
19494
+ case "notEmpty":
19495
+ return {
19496
+ _and: [
19497
+ { [filterOn]: { _neq: "" } },
19498
+ { [filterOn]: { _is_null: false } }
19499
+ ]
19500
+ };
19501
+ case "inList":
19502
+ return { [filterOn]: { _in: filterValue } };
19503
+ case "notInList":
19504
+ return { [filterOn]: { _nin: filterValue } };
19505
+ case "true":
19506
+ return { [filterOn]: { _eq: true } };
19507
+ case "false":
19508
+ return { [filterOn]: { _eq: false } };
19509
+ case "dateIs":
19510
+ return { [filterOn]: { _eq: filterValue } };
19511
+ case "notBetween":
19512
+ return {
19513
+ _or: [
19514
+ {
19515
+ [filterOn]: {
19516
+ _lt: new Date(arrayFilterValue[0])
19517
+ }
19518
+ },
19519
+ {
19520
+ [filterOn]: {
19521
+ _gt: new Date(
19522
+ new Date(arrayFilterValue[1]).setHours(23, 59)
19523
+ )
19524
+ }
19525
+ }
19526
+ ]
19527
+ };
19528
+ case "isBetween":
19529
+ return {
19530
+ [filterOn]: {
19531
+ _gte: new Date(arrayFilterValue[0]),
19532
+ _lte: new Date(new Date(arrayFilterValue[1]).setHours(23, 59))
19533
+ }
19534
+ };
19535
+ case "isBefore":
19536
+ return { [filterOn]: { _lt: new Date(filterValue) } };
19537
+ case "isAfter":
19538
+ return { [filterOn]: { _gt: new Date(filterValue) } };
19539
+ case "greaterThan":
19463
19540
  return { [filterOn]: { _gt: parseFloat(filterValue) } };
19464
- case "numberLessThan":
19541
+ case "lessThan":
19465
19542
  return { [filterOn]: { _lt: parseFloat(filterValue) } };
19466
- case "numberGreaterThanEquals":
19467
- return { [filterOn]: { _gte: parseFloat(filterValue) } };
19468
- case "numberLessThanEquals":
19469
- return { [filterOn]: { _lte: parseFloat(filterValue) } };
19470
- case "isNull":
19471
- return { [filterOn]: { _is_null: true } };
19472
- case "isNotNull":
19473
- return { [filterOn]: { _is_null: false } };
19543
+ case "inRange":
19544
+ return {
19545
+ [filterOn]: {
19546
+ _gte: parseFloat(arrayFilterValue[0]),
19547
+ _lte: parseFloat(arrayFilterValue[1])
19548
+ }
19549
+ };
19550
+ case "outsideRange":
19551
+ return {
19552
+ _or: [
19553
+ {
19554
+ [filterOn]: {
19555
+ _lt: parseFloat(arrayFilterValue[0])
19556
+ }
19557
+ },
19558
+ {
19559
+ [filterOn]: {
19560
+ _gt: parseFloat(arrayFilterValue[1])
19561
+ }
19562
+ }
19563
+ ]
19564
+ };
19565
+ case "equalTo":
19566
+ return { [filterOn]: { _eq: parseFloat(filterValue) } };
19567
+ case "regex":
19568
+ return { [filterOn]: { _regex: filterValue } };
19474
19569
  default:
19475
19570
  console.warn(`Unsupported filter type: ${selectedFilter}`);
19476
19571
  return {};
19477
19572
  }
19573
+ }).map((filter2) => {
19574
+ const o2 = {};
19575
+ set$1(o2, Object.keys(filter2)[0], filter2[Object.keys(filter2)[0]]);
19576
+ return o2;
19478
19577
  });
19479
19578
  if (filterClauses.length > 0) {
19480
19579
  if (Object.keys(where).length > 0) {
@@ -19497,6 +19596,21 @@ function tableQueryParamsToHasuraClauses({
19497
19596
  return { where, order_by, limit, offset: offset3 };
19498
19597
  }
19499
19598
  __name(tableQueryParamsToHasuraClauses, "tableQueryParamsToHasuraClauses");
19599
+ function getFieldsMappedByCCDisplayName(schema) {
19600
+ if (!schema || !schema.fields) return {};
19601
+ return schema.fields.reduce((acc, field) => {
19602
+ const ccDisplayName = getCCDisplayName(field);
19603
+ acc[ccDisplayName] = field;
19604
+ return acc;
19605
+ }, {});
19606
+ }
19607
+ __name(getFieldsMappedByCCDisplayName, "getFieldsMappedByCCDisplayName");
19608
+ function getCCDisplayName(field) {
19609
+ return camelCase(
19610
+ typeof field.displayName === "string" ? field.displayName : field.path
19611
+ );
19612
+ }
19613
+ __name(getCCDisplayName, "getCCDisplayName");
19500
19614
  function filterLocalEntitiesToHasura(records, { where, order_by, limit, offset: offset3, isInfinite } = {}) {
19501
19615
  let filteredRecords = [...records];
19502
19616
  if (where) {
@@ -19526,10 +19640,16 @@ function applyWhereClause(records, where) {
19526
19640
  }
19527
19641
  for (const key in filter2) {
19528
19642
  if (key === "_and") {
19643
+ if (isEmpty$1(filter2[key])) {
19644
+ continue;
19645
+ }
19529
19646
  if (!every(filter2[key], (subFilter) => applyFilter(record, subFilter))) {
19530
19647
  return false;
19531
19648
  }
19532
19649
  } else if (key === "_or") {
19650
+ if (isEmpty$1(filter2[key])) {
19651
+ continue;
19652
+ }
19533
19653
  if (!some(filter2[key], (subFilter) => applyFilter(record, subFilter))) {
19534
19654
  return false;
19535
19655
  }
@@ -19540,6 +19660,9 @@ function applyWhereClause(records, where) {
19540
19660
  } else {
19541
19661
  const value = record[key];
19542
19662
  const conditions = filter2[key];
19663
+ if (isObject$2(value) && isObject$2(conditions) && !hasOperator(conditions)) {
19664
+ return applyFilter(value, conditions);
19665
+ }
19543
19666
  for (const operator in conditions) {
19544
19667
  const conditionValue = conditions[operator];
19545
19668
  if (operator === "_gt" && conditions._lt) {
@@ -19637,6 +19760,10 @@ function applyWhereClause(records, where) {
19637
19760
  return true;
19638
19761
  }
19639
19762
  __name(applyFilter, "applyFilter");
19763
+ function hasOperator(obj) {
19764
+ return Object.keys(obj).some((key) => key.startsWith("_"));
19765
+ }
19766
+ __name(hasOperator, "hasOperator");
19640
19767
  return records.filter((record) => applyFilter(record, where));
19641
19768
  }
19642
19769
  __name(applyWhereClause, "applyWhereClause");
@@ -19685,12 +19812,6 @@ function safeParse(val) {
19685
19812
  }
19686
19813
  }
19687
19814
  __name(safeParse, "safeParse");
19688
- function getCCDisplayName(field) {
19689
- return camelCase(
19690
- typeof field.displayName === "string" ? field.displayName : field.path
19691
- );
19692
- }
19693
- __name(getCCDisplayName, "getCCDisplayName");
19694
19815
  function getCurrentParamsFromUrl(location2, isSimple) {
19695
19816
  let { search: search2 } = location2;
19696
19817
  if (isSimple) {
@@ -19859,7 +19980,7 @@ function getQueryParams({
19859
19980
  isLocalCall,
19860
19981
  additionalFilter,
19861
19982
  doNotCoercePageSize,
19862
- // noOrderError,
19983
+ noOrderError,
19863
19984
  // isCodeModel,
19864
19985
  ownProps
19865
19986
  }) {
@@ -19883,11 +20004,31 @@ function getQueryParams({
19883
20004
  )[0];
19884
20005
  pageSize = closest;
19885
20006
  }
19886
- const toReturn = {
20007
+ const cleanedOrder = [];
20008
+ if (order2 && order2.length) {
20009
+ const ccFields = getFieldsMappedByCCDisplayName(schema);
20010
+ order2.forEach((orderVal) => {
20011
+ const ccDisplayName = orderVal.replace(/^-/gi, "");
20012
+ const schemaForField = ccFields[ccDisplayName];
20013
+ if (schemaForField) {
20014
+ const { path: path2 } = schemaForField;
20015
+ const reversed = ccDisplayName !== orderVal;
20016
+ const prefix2 = reversed ? "-" : "";
20017
+ cleanedOrder.push(prefix2 + path2);
20018
+ } else {
20019
+ !noOrderError && console.error(
20020
+ "No schema for field found!",
20021
+ ccDisplayName,
20022
+ JSON.stringify(schema.fields, null, 2)
20023
+ );
20024
+ }
20025
+ });
20026
+ }
20027
+ let toRet = {
19887
20028
  //these are values that might be generally useful for the wrapped component
19888
20029
  page,
19889
20030
  pageSize: ownProps.controlled_pageSize || pageSize,
19890
- order: order2,
20031
+ order: cleanedOrder,
19891
20032
  filters,
19892
20033
  searchTerm
19893
20034
  };
@@ -19896,21 +20037,22 @@ function getQueryParams({
19896
20037
  pageSize,
19897
20038
  searchTerm,
19898
20039
  filters,
19899
- order: order2,
20040
+ order: cleanedOrder,
19900
20041
  schema
19901
20042
  });
19902
20043
  initializeHasuraWhereAndFilter(additionalFilter, where, currentParams);
19903
20044
  addCustomColumnFilters(where, schema.fields, currentParams);
19904
20045
  if (isLocalCall) {
19905
- return filterLocalEntitiesToHasura(entities, {
20046
+ toRet = __spreadValues(__spreadValues({}, toRet), filterLocalEntitiesToHasura(entities, {
19906
20047
  where,
19907
20048
  order_by,
19908
20049
  limit,
19909
20050
  offset: offset3,
19910
20051
  isInfinite
19911
- });
20052
+ }));
20053
+ return toRet;
19912
20054
  } else {
19913
- return __spreadProps(__spreadValues({}, toReturn), {
20055
+ return __spreadProps(__spreadValues({}, toRet), {
19914
20056
  variables: {
19915
20057
  where,
19916
20058
  order_by,
@@ -56365,7 +56507,7 @@ const DataTable = /* @__PURE__ */ __name((_I) => {
56365
56507
  }) : !val;
56366
56508
  });
56367
56509
  }
56368
- if (noValsForField) {
56510
+ if (noValsForField && entities.length) {
56369
56511
  return __spreadProps(__spreadValues({}, field), {
56370
56512
  isHidden: true,
56371
56513
  isForcedHidden: true
@@ -71628,6 +71770,7 @@ const useTableParams = /* @__PURE__ */ __name((props) => {
71628
71770
  isInfinite: isInfinite || isSimple && !withPaging,
71629
71771
  isLocalCall,
71630
71772
  additionalFilter,
71773
+ noOrderError,
71631
71774
  ownProps: passingProps
71632
71775
  });
71633
71776
  }, [