@neovici/cosmoz-queue 2.3.0 → 2.4.1

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.
@@ -9,7 +9,7 @@ export const useMore = ({ params: _params, list$, pageSize = 50, setTotalAvailab
9
9
  const hasMore = pageSize > 0 &&
10
10
  totalAvailable < Infinity &&
11
11
  totalAvailable >= pageSize &&
12
- page < Math.ceil(totalAvailable / pageSize);
12
+ page < Math.ceil(totalAvailable / pageSize) - 1;
13
13
  const loadMore = useMemo(() => hasMore ? () => setData((s) => ({ ...s, page: s.page + 1 })) : undefined, [hasMore]);
14
14
  useEffect(() => setData((d) => ({
15
15
  ...d,
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=use-more.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-more.test.d.ts","sourceRoot":"","sources":["../../../src/list/more/use-more.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ describe('hasMore logic', () => {
3
+ const calcHasMore = (totalAvailable, pageSize, page) => pageSize > 0 &&
4
+ totalAvailable < Infinity &&
5
+ totalAvailable >= pageSize &&
6
+ page < Math.ceil(totalAvailable / pageSize) - 1;
7
+ describe('60 items, pageSize 50', () => {
8
+ it('hasMore is true on page 0', () => {
9
+ expect(calcHasMore(60, 50, 0)).toBe(true);
10
+ });
11
+ it('hasMore is false on page 1 (last page)', () => {
12
+ expect(calcHasMore(60, 50, 1)).toBe(false);
13
+ });
14
+ });
15
+ describe('50 items, pageSize 50 (exactly one page)', () => {
16
+ it('hasMore is false on page 0', () => {
17
+ expect(calcHasMore(50, 50, 0)).toBe(false);
18
+ });
19
+ });
20
+ describe('100 items, pageSize 50 (exactly two pages)', () => {
21
+ it('hasMore is true on page 0', () => {
22
+ expect(calcHasMore(100, 50, 0)).toBe(true);
23
+ });
24
+ it('hasMore is false on page 1 (last page)', () => {
25
+ expect(calcHasMore(100, 50, 1)).toBe(false);
26
+ });
27
+ });
28
+ describe('10 items, pageSize 50 (fewer than pageSize)', () => {
29
+ it('hasMore is false on page 0', () => {
30
+ expect(calcHasMore(10, 50, 0)).toBe(false);
31
+ });
32
+ });
33
+ describe('edge cases', () => {
34
+ it('returns false when pageSize is 0', () => {
35
+ expect(calcHasMore(60, 0, 0)).toBe(false);
36
+ });
37
+ it('returns false when totalAvailable is Infinity', () => {
38
+ expect(calcHasMore(Infinity, 50, 0)).toBe(false);
39
+ });
40
+ });
41
+ });
@@ -15,9 +15,10 @@ export interface RenderListCoreProps<TItem extends object> {
15
15
  content?: (opts: {
16
16
  selectedItems: TItem[];
17
17
  }) => Renderable;
18
+ compareItemsFn?: (a: TItem, b: TItem) => boolean;
18
19
  }
19
20
  export interface RenderListCore<TColumns extends Columns, TItem extends object> extends UseListCoreResult<TColumns, TItem>, RenderListCoreProps<TItem> {
20
21
  }
21
22
  export declare const renderColumns: <T extends Columns>(columns: T) => import("../types/lit").LitRenderable[];
22
- export declare const renderListCore: <TColumns extends Columns, TItem extends object>({ settingsId, hashParam, enabledColumns, csvFilename, exposedParts, data$, noLocal, miniBreakpoint, sortOn, setSortOn, descending, setDescending, groupOn, setGroupOn, selectedItems, setSelectedItems, setVisibleItems, setFilters, setIsMini, columns, actions, dialog, open, content, loadMore, }: RenderListCore<TColumns, TItem>) => import("@neovici/cosmoz-form").Renderable[];
23
+ export declare const renderListCore: <TColumns extends Columns, TItem extends object>({ settingsId, hashParam, enabledColumns, csvFilename, exposedParts, data$, noLocal, miniBreakpoint, sortOn, setSortOn, descending, setDescending, groupOn, setGroupOn, selectedItems, setSelectedItems, setVisibleItems, setFilters, setIsMini, columns, actions, dialog, open, content, loadMore, compareItemsFn, }: RenderListCore<TColumns, TItem>) => import("@neovici/cosmoz-form").Renderable[];
23
24
  //# sourceMappingURL=render-list-core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-list-core.d.ts","sourceRoot":"","sources":["../../src/list/render-list-core.ts"],"names":[],"mappings":"AACA,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAKrD,OAAO,EAAE,MAAM,EAAiB,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAU,OAAO,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,mBAAmB,CAAC,KAAK,SAAS,MAAM;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,aAAa,EAAE,KAAK,EAAE,CAAA;KAAE,KAAK,UAAU,CAAC;CAC3D;AAED,MAAM,WAAW,cAAc,CAAC,QAAQ,SAAS,OAAO,EAAE,KAAK,SAAS,MAAM,CAC7E,SAAQ,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC;CAAG;AAE1E,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,OAAO,EAAE,SAAS,CAAC,2CAGzD,CAAC;AAEH,eAAO,MAAM,cAAc,GAAI,QAAQ,SAAS,OAAO,EAAE,KAAK,SAAS,MAAM,EAAE,sSA+B5E,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,gDA4CjC,CAAC"}
1
+ {"version":3,"file":"render-list-core.d.ts","sourceRoot":"","sources":["../../src/list/render-list-core.ts"],"names":[],"mappings":"AACA,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAKrD,OAAO,EAAE,MAAM,EAAiB,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAU,OAAO,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,WAAW,mBAAmB,CAAC,KAAK,SAAS,MAAM;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,aAAa,EAAE,KAAK,EAAE,CAAA;KAAE,KAAK,UAAU,CAAC;IAC3D,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC;CACjD;AAED,MAAM,WAAW,cAAc,CAAC,QAAQ,SAAS,OAAO,EAAE,KAAK,SAAS,MAAM,CAC7E,SAAQ,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC;CAAG;AAE1E,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,OAAO,EAAE,SAAS,CAAC,2CAGzD,CAAC;AAEH,eAAO,MAAM,cAAc,GAAI,QAAQ,SAAS,OAAO,EAAE,KAAK,SAAS,MAAM,EAAE,sTAgC5E,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,gDA0CjC,CAAC"}
@@ -8,7 +8,7 @@ import { when } from 'lit-html/directives/when.js';
8
8
  import { renderActions } from '../actions';
9
9
  import { renderLoadMore } from './more/render-more';
10
10
  export const renderColumns = (columns) => Object.entries(columns).map(([name, column]) => column.render({ ...column, name }));
11
- export const renderListCore = ({ settingsId, hashParam, enabledColumns, csvFilename, exposedParts, data$, noLocal = true, miniBreakpoint, sortOn, setSortOn, descending, setDescending, groupOn, setGroupOn, selectedItems, setSelectedItems, setVisibleItems, setFilters, setIsMini, columns, actions, dialog, open, content, loadMore, }) => [
11
+ export const renderListCore = ({ settingsId, hashParam, enabledColumns, csvFilename, exposedParts, data$, noLocal = true, miniBreakpoint, sortOn, setSortOn, descending, setDescending, groupOn, setGroupOn, selectedItems, setSelectedItems, setVisibleItems, setFilters, setIsMini, columns, actions, dialog, open, content, loadMore, compareItemsFn, }) => [
12
12
  html `<cosmoz-omnitable
13
13
  id="omnitable"
14
14
  ?no-local=${noLocal}
@@ -17,7 +17,8 @@ export const renderListCore = ({ settingsId, hashParam, enabledColumns, csvFilen
17
17
  .csvFilename=${csvFilename}
18
18
  .enabledColumns=${enabledColumns}
19
19
  ?loading=${until(Promise.resolve(data$).then(() => false, () => false), true)}
20
- .compareItemsFn=${guard([], () => (a, b) => a.id === b.id)}
20
+ .compareItemsFn=${compareItemsFn ??
21
+ guard([], () => (a, b) => a.id === b.id)}
21
22
  .settingsId=${settingsId}
22
23
  exportparts=${exposedParts}
23
24
  @visible-data-changed=${lift(setVisibleItems)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neovici/cosmoz-queue",
3
- "version": "2.3.0",
3
+ "version": "2.4.1",
4
4
  "description": "A reusable queue component for master-detail views with list, split, and queue modes",
5
5
  "keywords": [
6
6
  "web-components",