@neovici/cosmoz-queue 2.12.2 → 2.13.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.
@@ -4,6 +4,7 @@ export interface TList$<TParams extends object, TItem extends object> {
4
4
  params: TParams;
5
5
  page: number;
6
6
  pageSize: number;
7
+ signal?: AbortSignal;
7
8
  }): PromiseLike<{
8
9
  items: TItem[];
9
10
  total: number;
@@ -1 +1 @@
1
- {"version":3,"file":"use-more.d.ts","sourceRoot":"","sources":["../../../src/list/more/use-more.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgC,MAAM,cAAc,CAAC;AAE1E,MAAM,WAAW,MAAM,CAAC,OAAO,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM;IACnE,CAAC,KAAK,EAAE;QACP,MAAM,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KACjB,GAAG,WAAW,CAAC;QAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD;AAED,UAAU,OAAO,CAAC,OAAO,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9B,iBAAiB,EAAE,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACpD;AASD,eAAO,MAAM,OAAO,GAAI,OAAO,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,EAAE,0DAKnE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;;;CAsDzB,CAAC"}
1
+ {"version":3,"file":"use-more.d.ts","sourceRoot":"","sources":["../../../src/list/more/use-more.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,EAKZ,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,MAAM,CAAC,OAAO,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM;IACnE,CAAC,KAAK,EAAE;QACP,MAAM,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,WAAW,CAAC;KACrB,GAAG,WAAW,CAAC;QAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD;AAED,UAAU,OAAO,CAAC,OAAO,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9B,iBAAiB,EAAE,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACpD;AASD,eAAO,MAAM,OAAO,GAAI,OAAO,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,EAAE,0DAKnE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;;;CAwEzB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { useEffect, useMemo, useState } from '@pionjs/pion';
1
+ import { useEffect, useMemo, useRef, useState, } from '@pionjs/pion';
2
2
  export const useMore = ({ params: _params, list$, pageSize = 50, setTotalAvailable, }) => {
3
3
  const [{ page, data$, totalAvailable, params }, setData] = useState({
4
4
  page: 0,
@@ -6,6 +6,7 @@ export const useMore = ({ params: _params, list$, pageSize = 50, setTotalAvailab
6
6
  totalAvailable: Infinity,
7
7
  params: _params,
8
8
  });
9
+ const abortRef = useRef(null);
9
10
  const hasMore = pageSize > 0 &&
10
11
  totalAvailable < Infinity &&
11
12
  totalAvailable >= pageSize &&
@@ -17,15 +18,22 @@ export const useMore = ({ params: _params, list$, pageSize = 50, setTotalAvailab
17
18
  page: 0,
18
19
  })), [_params, list$]);
19
20
  useEffect(() => {
21
+ const controller = new AbortController();
22
+ abortRef.current = controller;
23
+ const { signal } = controller;
20
24
  setData(({ data$, params, page, ...thru }) => ({
21
25
  ...thru,
22
26
  params,
23
27
  page,
24
- data$: Promise.resolve(data$).then((prev) => list$({
28
+ data$: Promise.resolve(data$).then((prev) => Promise.resolve(list$({
25
29
  params,
26
30
  page,
27
31
  pageSize,
28
- }).then((data) => {
32
+ signal,
33
+ }))
34
+ .then((data) => {
35
+ if (signal.aborted)
36
+ return prev;
29
37
  const totalAvailable = data.total;
30
38
  setTotalAvailable(totalAvailable);
31
39
  setData((s) => ({
@@ -33,8 +41,16 @@ export const useMore = ({ params: _params, list$, pageSize = 50, setTotalAvailab
33
41
  totalAvailable,
34
42
  }));
35
43
  return [...prev.slice(0, page * pageSize), ...data.items];
44
+ })
45
+ .catch((error) => {
46
+ if (error.name === 'AbortError')
47
+ return prev;
48
+ return Promise.reject(error);
36
49
  })),
37
50
  }));
51
+ return () => {
52
+ controller.abort();
53
+ };
38
54
  }, [page, params, list$, pageSize]);
39
55
  return { data$, loadMore };
40
56
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use-key-nav.d.ts","sourceRoot":"","sources":["../../src/queue/use-key-nav.ts"],"names":[],"mappings":"AAKA,KAAK,GAAG,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;yBA8B1B,4BAIb;IACF,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC;CACf;AARD,wBA0CE"}
1
+ {"version":3,"file":"use-key-nav.d.ts","sourceRoot":"","sources":["../../src/queue/use-key-nav.ts"],"names":[],"mappings":"AAKA,KAAK,GAAG,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;yBAiC1B,4BAIb;IACF,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC;CACf;AARD,wBA0CE"}
@@ -7,7 +7,11 @@ const keys = (tab, listKeys, queueKeys) => [
7
7
  ...(['queue', 'split'].includes(tab) ? queueKeys : []),
8
8
  ];
9
9
  const overlaps = (host) => {
10
- const root = host.shadowRoot, button = root.querySelector('.button-nav'), bounds = button.getBoundingClientRect();
10
+ const root = host.shadowRoot, button = root?.querySelector('.button-nav');
11
+ if (!root || !button) {
12
+ return false;
13
+ }
14
+ const bounds = button.getBoundingClientRect();
11
15
  return (root
12
16
  .elementFromPoint(bounds.x + bounds.width / 2, bounds.y + bounds.height / 2)
13
17
  ?.closest('.button-nav') !== button);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neovici/cosmoz-queue",
3
- "version": "2.12.2",
3
+ "version": "2.13.0",
4
4
  "description": "A reusable queue component for master-detail views with list, split, and queue modes",
5
5
  "keywords": [
6
6
  "web-components",