ar-design 0.4.46 → 0.4.47

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.
@@ -195,30 +195,37 @@ const KanbanBoard = function ({ trackBy, columns, onChange, onLazyLoad, config,
195
195
  }, [columns]);
196
196
  const _prevFilters = useRef(JSON.stringify({ search, selectedFilters, dateFilters }));
197
197
  useEffect(() => {
198
- const currentFilters = JSON.stringify({
198
+ const normalizedFilters = JSON.stringify({
199
199
  search,
200
- selectedFilters: Object.fromEntries(Object.entries(selectedFilters).map(([k, v]) => [k, Array.from(v)])),
200
+ selectedFilters: Object.fromEntries(Object.entries(selectedFilters).map(([k, v]) => [k, Array.from(v).sort()])),
201
201
  dateFilters,
202
202
  });
203
- if (_prevFilters.current !== currentFilters) {
203
+ const hasSelectedFilters = Object.values(selectedFilters).some((set) => set.size > 0);
204
+ const hasDateFilters = Object.values(dateFilters).some((r) => r.from || r.to);
205
+ // Page reset + Scroll logic.
206
+ if (_prevFilters.current !== normalizedFilters) {
204
207
  setCurrentPage(1);
205
- _prevFilters.current = currentFilters;
208
+ _prevFilters.current = normalizedFilters;
206
209
  if (_kanbanWrapper.current) {
207
210
  _isProgrammaticScroll.current = true;
208
- _kanbanWrapper.current.scrollTo({ top: 0, left: 0, behavior: "smooth" });
211
+ _kanbanWrapper.current.scrollTo({
212
+ top: 0,
213
+ left: 0,
214
+ behavior: "smooth",
215
+ });
209
216
  }
210
217
  }
211
- }, [search, selectedFilters, dateFilters]);
212
- useEffect(() => {
213
- if (!search && Object.keys(selectedFilters).length === 0 && Object.keys(dateFilters).length === 0) {
218
+ // Query Build Logic.
219
+ if (!search && !hasSelectedFilters && !hasDateFilters) {
214
220
  setQuery(null);
215
221
  return;
216
222
  }
217
- const sampleItem = columns[0]?.items[0];
218
- const keys = sampleItem ? (config?.filter?.keys(sampleItem) ?? []) : [];
223
+ const sampleItem = columns?.[0]?.items?.[0];
224
+ const keys = config?.filter?.keys(sampleItem) ?? [];
225
+ const keyMap = Object.fromEntries(keys.map((k) => [k.name, k.key]));
219
226
  const dateQuery = Object.entries(dateFilters).reduce((acc, [name, range]) => {
220
227
  if (range.from || range.to) {
221
- const technicalKey = keys.find((k) => k.name === name)?.key || name;
228
+ const technicalKey = keyMap[name] || name;
222
229
  acc[technicalKey] = {
223
230
  from: range.from,
224
231
  to: range.to,
@@ -226,10 +233,10 @@ const KanbanBoard = function ({ trackBy, columns, onChange, onLazyLoad, config,
226
233
  }
227
234
  return acc;
228
235
  }, {});
229
- const selectQuery = Object.entries(selectedFilters).reduce((acc, [filterName, selectedSet]) => {
230
- if (selectedSet && selectedSet.size > 0) {
231
- const technicalKey = keys.find((k) => k.name === filterName)?.key || filterName;
232
- acc[technicalKey] = Array.from(selectedSet);
236
+ const selectQuery = Object.entries(selectedFilters).reduce((acc, [name, set]) => {
237
+ if (set.size > 0) {
238
+ const technicalKey = keyMap[name] || name;
239
+ acc[technicalKey] = Array.from(set);
233
240
  }
234
241
  return acc;
235
242
  }, {});
@@ -238,7 +245,7 @@ const KanbanBoard = function ({ trackBy, columns, onChange, onLazyLoad, config,
238
245
  ...dateQuery,
239
246
  ...selectQuery,
240
247
  });
241
- }, [search, selectedFilters, dateFilters]);
248
+ }, [search, selectedFilters, dateFilters, columns, config]);
242
249
  useEffect(() => {
243
250
  if (!onLazyLoad)
244
251
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ar-design",
3
- "version": "0.4.46",
3
+ "version": "0.4.47",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",