@xh/hoist 47.1.1 → 47.1.2

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## v47.1.2 - 2022-04-01
4
+
5
+ ### 🐞 Bug Fixes
6
+
7
+ * `FieldFilter`'s check of `committedData` is now null safe. A record with no `committedData` will not be filtered out.
8
+
9
+
3
10
  ## v47.1.1 - 2022-03-26
4
11
 
5
12
  ### 🎁 New Features
@@ -80,14 +80,15 @@ export class FieldFilter extends Filter {
80
80
 
81
81
  if (store) {
82
82
  const storeField = store.getField(field);
83
- if (!storeField) return () => true; // Ignore if field not in store
83
+ if (!storeField) return () => true; // Ignore (do not filter out) if field not in store
84
84
 
85
85
  const fieldType = storeField.type;
86
86
  value = isArray(value) ?
87
87
  value.map(v => parseFieldValue(v, fieldType)) :
88
88
  parseFieldValue(value, fieldType);
89
89
  }
90
- const getVal = store ? r => r.committedData[field] : r => r[field];
90
+ const getVal = store ? r => r.committedData[field] : r => r[field],
91
+ doNotFilter = r => store && isNil(r.committedData); // Ignore (do not filter out) record if part of a store and it has no committed data
91
92
 
92
93
  if (FieldFilter.ARRAY_OPERATORS.includes(op)) {
93
94
  value = castArray(value);
@@ -96,48 +97,66 @@ export class FieldFilter extends Filter {
96
97
  switch (op) {
97
98
  case '=':
98
99
  return r => {
100
+ if (doNotFilter(r)) return true;
99
101
  let v = getVal(r);
100
102
  if (isNil(v) || v === '') v = null;
101
103
  return value.includes(v);
102
104
  };
103
105
  case '!=':
104
106
  return r => {
107
+ if (doNotFilter(r)) return true;
105
108
  let v = getVal(r);
106
109
  if (isNil(v) || v === '') v = null;
107
110
  return !value.includes(v);
108
111
  };
109
112
  case '>':
110
113
  return r => {
114
+ if (doNotFilter(r)) return true;
111
115
  const v = getVal(r);
112
116
  return !isNil(v) && v > value;
113
117
  };
114
118
  case '>=':
115
119
  return r => {
120
+ if (doNotFilter(r)) return true;
116
121
  const v = getVal(r);
117
122
  return !isNil(v) && v >= value;
118
123
  };
119
124
  case '<':
120
125
  return r => {
126
+ if (doNotFilter(r)) return true;
121
127
  const v = getVal(r);
122
128
  return !isNil(v) && v < value;
123
129
  };
124
130
  case '<=':
125
131
  return r => {
132
+ if (doNotFilter(r)) return true;
126
133
  const v = getVal(r);
127
134
  return !isNil(v) && v <= value;
128
135
  };
129
136
  case 'like':
130
137
  regExps = value.map(v => new RegExp(escapeRegExp(v), 'i'));
131
- return r => regExps.some(re => re.test(getVal(r)));
138
+ return r => {
139
+ if (doNotFilter(r)) return true;
140
+ return regExps.some(re => re.test(getVal(r)));
141
+ };
132
142
  case 'not like':
133
143
  regExps = value.map(v => new RegExp(escapeRegExp(v), 'i'));
134
- return r => regExps.every(re => !re.test(getVal(r)));
144
+ return r => {
145
+ if (doNotFilter(r)) return true;
146
+ regExps.every(re => !re.test(getVal(r)));
147
+ };
135
148
  case 'begins':
136
149
  regExps = value.map(v => new RegExp('^' + escapeRegExp(v), 'i'));
137
- return r => regExps.some(re => re.test(getVal(r)));
150
+ return r => {
151
+ if (doNotFilter(r)) return true;
152
+ regExps.some(re => re.test(getVal(r)));
153
+ };
138
154
  case 'ends':
139
155
  regExps = value.map(v => new RegExp(escapeRegExp(v) + '$', 'i'));
140
- return r => regExps.some(re => re.test(getVal(r)));
156
+ return r => {
157
+ if (doNotFilter(r)) return true;
158
+ regExps.some(re => re.test(getVal(r)));
159
+ };
141
160
  default:
142
161
  throw XH.exception(`Unknown operator: ${op}`);
143
162
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xh/hoist",
3
- "version": "47.1.1",
3
+ "version": "47.1.2",
4
4
  "description": "Hoist add-on for building and deploying React Applications.",
5
5
  "repository": "github:xh/hoist-react",
6
6
  "homepage": "https://xh.io",