@neovici/cosmoz-queue 1.0.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.
- package/README.md +3 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/queue/actions/index.d.ts +22 -0
- package/dist/queue/actions/index.d.ts.map +1 -0
- package/dist/queue/actions/index.js +20 -0
- package/dist/queue/icon.d.ts +2 -0
- package/dist/queue/icon.d.ts.map +1 -0
- package/dist/queue/icon.js +12 -0
- package/dist/queue/icons.d.ts +4 -0
- package/dist/queue/icons.d.ts.map +1 -0
- package/dist/queue/icons.js +61 -0
- package/dist/queue/index.d.ts +8 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +5 -0
- package/dist/queue/item-click.d.ts +5 -0
- package/dist/queue/item-click.d.ts.map +1 -0
- package/dist/queue/item-click.js +15 -0
- package/dist/queue/list-core/column.d.ts +34 -0
- package/dist/queue/list-core/column.d.ts.map +1 -0
- package/dist/queue/list-core/column.js +10 -0
- package/dist/queue/list-core/index.d.ts +7 -0
- package/dist/queue/list-core/index.d.ts.map +1 -0
- package/dist/queue/list-core/index.js +6 -0
- package/dist/queue/list-core/list-core.d.ts +6 -0
- package/dist/queue/list-core/list-core.d.ts.map +1 -0
- package/dist/queue/list-core/list-core.js +6 -0
- package/dist/queue/list-core/render-generic-actions.d.ts +4 -0
- package/dist/queue/list-core/render-generic-actions.d.ts.map +1 -0
- package/dist/queue/list-core/render-generic-actions.js +14 -0
- package/dist/queue/list-core/render-list-core.d.ts +18 -0
- package/dist/queue/list-core/render-list-core.d.ts.map +1 -0
- package/dist/queue/list-core/render-list-core.js +42 -0
- package/dist/queue/list-core/style.css.d.ts +2 -0
- package/dist/queue/list-core/style.css.d.ts.map +1 -0
- package/dist/queue/list-core/style.css.js +20 -0
- package/dist/queue/list-core/use-inline-actions.d.ts +4 -0
- package/dist/queue/list-core/use-inline-actions.d.ts.map +1 -0
- package/dist/queue/list-core/use-inline-actions.js +10 -0
- package/dist/queue/list-core/use-list-core.d.ts +34 -0
- package/dist/queue/list-core/use-list-core.d.ts.map +1 -0
- package/dist/queue/list-core/use-list-core.js +36 -0
- package/dist/queue/list-core/use-list-state.d.ts +24 -0
- package/dist/queue/list-core/use-list-state.d.ts.map +1 -0
- package/dist/queue/list-core/use-list-state.js +25 -0
- package/dist/queue/list-core/use-more.d.ts +23 -0
- package/dist/queue/list-core/use-more.d.ts.map +1 -0
- package/dist/queue/list-core/use-more.js +41 -0
- package/dist/queue/omnitable.d.ts +19 -0
- package/dist/queue/omnitable.d.ts.map +1 -0
- package/dist/queue/omnitable.js +31 -0
- package/dist/queue/pagination.d.ts +5 -0
- package/dist/queue/pagination.d.ts.map +1 -0
- package/dist/queue/pagination.js +10 -0
- package/dist/queue/queue.d.ts +24 -0
- package/dist/queue/queue.d.ts.map +1 -0
- package/dist/queue/queue.js +58 -0
- package/dist/queue/render.d.ts +74 -0
- package/dist/queue/render.d.ts.map +1 -0
- package/dist/queue/render.js +134 -0
- package/dist/queue/style.d.ts +7 -0
- package/dist/queue/style.d.ts.map +1 -0
- package/dist/queue/style.js +182 -0
- package/dist/queue/test/__snapshots__/render.test.snap.d.ts +2 -0
- package/dist/queue/test/__snapshots__/render.test.snap.d.ts.map +1 -0
- package/dist/queue/test/__snapshots__/render.test.snap.js +64 -0
- package/dist/queue/test/item-click.test.d.ts +2 -0
- package/dist/queue/test/item-click.test.d.ts.map +1 -0
- package/dist/queue/test/item-click.test.js +28 -0
- package/dist/queue/test/render.test.d.ts +2 -0
- package/dist/queue/test/render.test.d.ts.map +1 -0
- package/dist/queue/test/render.test.js +27 -0
- package/dist/queue/test/use-pref.test.d.ts +2 -0
- package/dist/queue/test/use-pref.test.d.ts.map +1 -0
- package/dist/queue/test/use-pref.test.js +16 -0
- package/dist/queue/types.d.ts +10 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/queue/types.js +1 -0
- package/dist/queue/use-async-action.d.ts +15 -0
- package/dist/queue/use-async-action.d.ts.map +1 -0
- package/dist/queue/use-async-action.js +17 -0
- package/dist/queue/use-data-nav.d.ts +20 -0
- package/dist/queue/use-data-nav.d.ts.map +1 -0
- package/dist/queue/use-data-nav.js +59 -0
- package/dist/queue/use-data-service.d.ts +31 -0
- package/dist/queue/use-data-service.d.ts.map +1 -0
- package/dist/queue/use-data-service.js +26 -0
- package/dist/queue/use-fetch-actions.d.ts +42 -0
- package/dist/queue/use-fetch-actions.d.ts.map +1 -0
- package/dist/queue/use-fetch-actions.js +38 -0
- package/dist/queue/use-key-nav.d.ts +8 -0
- package/dist/queue/use-key-nav.d.ts.map +1 -0
- package/dist/queue/use-key-nav.js +49 -0
- package/dist/queue/use-list-sse.d.ts +42 -0
- package/dist/queue/use-list-sse.d.ts.map +1 -0
- package/dist/queue/use-list-sse.js +82 -0
- package/dist/queue/use-list.d.ts +33 -0
- package/dist/queue/use-list.d.ts.map +1 -0
- package/dist/queue/use-list.js +42 -0
- package/dist/queue/use-pref.d.ts +5 -0
- package/dist/queue/use-pref.d.ts.map +1 -0
- package/dist/queue/use-pref.js +11 -0
- package/dist/queue/use-queue.d.ts +132 -0
- package/dist/queue/use-queue.d.ts.map +1 -0
- package/dist/queue/use-queue.js +69 -0
- package/dist/queue/use-split.d.ts +8 -0
- package/dist/queue/use-split.d.ts.map +1 -0
- package/dist/queue/use-split.js +30 -0
- package/dist/queue/use-tabs.d.ts +54 -0
- package/dist/queue/use-tabs.d.ts.map +1 -0
- package/dist/queue/use-tabs.js +31 -0
- package/dist/queue/use-updates.d.ts +9 -0
- package/dist/queue/use-updates.d.ts.map +1 -0
- package/dist/queue/use-updates.js +17 -0
- package/dist/queue/util.d.ts +4 -0
- package/dist/queue/util.d.ts.map +1 -0
- package/dist/queue/util.js +16 -0
- package/dist/types/dialogable.d.ts +39 -0
- package/dist/types/dialogable.d.ts.map +1 -0
- package/dist/types/dialogable.js +5 -0
- package/dist/types/performable.d.ts +5 -0
- package/dist/types/performable.d.ts.map +1 -0
- package/dist/types/performable.js +1 -0
- package/dist/util/dom/active-element.d.ts +3 -0
- package/dist/util/dom/active-element.d.ts.map +1 -0
- package/dist/util/dom/active-element.js +11 -0
- package/dist/util/fetch/fetch.d.ts +41 -0
- package/dist/util/fetch/fetch.d.ts.map +1 -0
- package/dist/util/fetch/fetch.js +74 -0
- package/dist/util/fetch/url.d.ts +30 -0
- package/dist/util/fetch/url.d.ts.map +1 -0
- package/dist/util/fetch/url.js +29 -0
- package/dist/util/path.d.ts +42 -0
- package/dist/util/path.d.ts.map +1 -0
- package/dist/util/path.js +68 -0
- package/dist/util/polymer-property-changed-event.d.ts +6 -0
- package/dist/util/polymer-property-changed-event.d.ts.map +1 -0
- package/dist/util/polymer-property-changed-event.js +27 -0
- package/dist/util/test/path.test.d.ts +2 -0
- package/dist/util/test/path.test.d.ts.map +1 -0
- package/dist/util/test/path.test.js +99 -0
- package/package.json +113 -0
package/README.md
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './queue';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Dialogable } from '../../types/dialogable.js';
|
|
2
|
+
import { nothing } from 'lit-html';
|
|
3
|
+
export declare const actionCount: <T>(items: T[], applicableItems?: T[]) => import("lit-html").TemplateResult<1> | undefined;
|
|
4
|
+
export interface ActionOpts<TItem extends object> {
|
|
5
|
+
items: TItem[];
|
|
6
|
+
open: <T extends object>(dialog: Dialogable<T>) => void;
|
|
7
|
+
slot?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface DialogOpts<TItem extends object> {
|
|
10
|
+
items: TItem[];
|
|
11
|
+
title: string;
|
|
12
|
+
}
|
|
13
|
+
export interface Action<TItem extends object, TDialog extends object = object> {
|
|
14
|
+
title: () => string;
|
|
15
|
+
applicable?: (item: TItem) => boolean;
|
|
16
|
+
button?: (opts: Action<TItem, TDialog> & ActionOpts<TItem>) => unknown;
|
|
17
|
+
dialog: (opts: Omit<Action<TItem, TDialog>, 'title'> & DialogOpts<TItem>) => Dialogable<TDialog> | Promise<Dialogable<TDialog>>;
|
|
18
|
+
}
|
|
19
|
+
export declare const defaultButton: <TItem extends object, TDialog extends object = object>(opts: Action<TItem, TDialog> & ActionOpts<TItem>) => import("lit-html").TemplateResult<1> | typeof nothing;
|
|
20
|
+
export declare const action: <TItem extends object, TAction extends object>(action: Action<TItem, TAction>) => Action<TItem, TAction>;
|
|
21
|
+
export declare const renderActions: <TItem extends object, TDialog extends object = object>(opts: ActionOpts<TItem>) => (actions: Action<TItem, TDialog>[]) => unknown[];
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/queue/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAQ,OAAO,EAAE,MAAM,UAAU,CAAC;AAIzC,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,kBAAiB,CAAC,EAAU,qDAOrE,CAAC;AAEH,MAAM,WAAW,UAAU,CAAC,KAAK,SAAS,MAAM;IAC/C,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,IAAI,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU,CAAC,KAAK,SAAS,MAAM;IAC/C,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,MAAM,CAAC,KAAK,SAAS,MAAM,EAAE,OAAO,SAAS,MAAM,GAAG,MAAM;IAC5E,KAAK,EAAE,MAAM,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;IACvE,MAAM,EAAE,CACP,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,KAC3D,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;CACxD;AAED,eAAO,MAAM,aAAa,GACzB,KAAK,SAAS,MAAM,EACpB,OAAO,SAAS,MAAM,GAAG,MAAM,EAE/B,MAAM,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,0DAchD,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,KAAK,SAAS,MAAM,EAAE,OAAO,SAAS,MAAM,EAClE,QAAQ,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,2BACpB,CAAC;AAEZ,eAAO,MAAM,aAAa,GACxB,KAAK,SAAS,MAAM,EAAE,OAAO,SAAS,MAAM,GAAG,MAAM,EACrD,MAAM,UAAU,CAAC,KAAK,CAAC,MAEvB,SAAS,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,cAGhC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { html, nothing } from 'lit-html';
|
|
2
|
+
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
3
|
+
import { when } from 'lit-html/directives/when.js';
|
|
4
|
+
export const actionCount = (items, applicableItems = items) => when(applicableItems.length > 1, () => when(applicableItems.length === items.length, () => html `(${applicableItems.length})`, () => html `(${applicableItems.length}/${items.length})`));
|
|
5
|
+
export const defaultButton = (opts) => {
|
|
6
|
+
const { open, dialog, items, applicable, slot } = opts;
|
|
7
|
+
const title = opts.title();
|
|
8
|
+
const applicableItems = applicable ? items.filter(applicable) : items;
|
|
9
|
+
if (!applicableItems.length)
|
|
10
|
+
return nothing;
|
|
11
|
+
return html `<button
|
|
12
|
+
class="button"
|
|
13
|
+
slot="${ifDefined(slot)}"
|
|
14
|
+
@click=${async () => open(await dialog({ ...opts, items: applicableItems, title }))}
|
|
15
|
+
>
|
|
16
|
+
${title} ${actionCount(items, applicableItems)}
|
|
17
|
+
</button>`;
|
|
18
|
+
};
|
|
19
|
+
export const action = (action) => action;
|
|
20
|
+
export const renderActions = (opts) => (actions) => actions.map((action) => (action.button ?? defaultButton)({ ...action, ...opts }));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../src/queue/icon.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,sCAUjB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { html } from 'lit-html';
|
|
2
|
+
export const arrow = html `
|
|
3
|
+
<svg
|
|
4
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
5
|
+
width="6"
|
|
6
|
+
height="10"
|
|
7
|
+
fill="none"
|
|
8
|
+
viewBox="0 0 6 10"
|
|
9
|
+
>
|
|
10
|
+
<path stroke="currentColor" stroke-linecap="round" d="m1 9 4-4-4-4" />
|
|
11
|
+
</svg>
|
|
12
|
+
`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/queue/icons.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,sCAcV,CAAC;AAER,eAAO,MAAM,KAAK,sCAgBjB,CAAC;AAEF,eAAO,MAAM,KAAK,sCA2BjB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { html } from 'lit-html';
|
|
2
|
+
export const list = html ` <svg
|
|
3
|
+
width="18"
|
|
4
|
+
height="14"
|
|
5
|
+
viewBox="0 0 18 14"
|
|
6
|
+
fill="none"
|
|
7
|
+
stroke="currentColor"
|
|
8
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
9
|
+
>
|
|
10
|
+
<path
|
|
11
|
+
d="M1 2C1 1.44772 1.44772 1 2 1H16C16.5523 1 17 1.44772 17 2V4.57143C17 5.12371 16.5523 5.57143 16 5.57143H2C1.44772 5.57143 1 5.12371 1 4.57143V2Z"
|
|
12
|
+
stroke-width="1.5"
|
|
13
|
+
/>
|
|
14
|
+
<line x1="1" y1="9.39288" x2="17" y2="9.39288" stroke-width="1.5" />
|
|
15
|
+
<line x1="1" y1="12.8214" x2="17" y2="12.8214" stroke-width="1.5" />
|
|
16
|
+
</svg>`;
|
|
17
|
+
export const queue = html `
|
|
18
|
+
<svg
|
|
19
|
+
width="22"
|
|
20
|
+
height="16"
|
|
21
|
+
viewBox="0 0 22 16"
|
|
22
|
+
fill="none"
|
|
23
|
+
stroke="currentColor"
|
|
24
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
25
|
+
>
|
|
26
|
+
<rect x="5.44409" y="1" width="11.1111" height="14" stroke-width="1.5" />
|
|
27
|
+
<path d="M18.7776 3.3335H20.9998V12.6668H18.7776" stroke-width="1.5" />
|
|
28
|
+
<path
|
|
29
|
+
d="M3.22217 12.6665L0.999946 12.6665L0.999947 3.33317L3.22217 3.33317"
|
|
30
|
+
stroke-width="1.5"
|
|
31
|
+
/>
|
|
32
|
+
</svg>
|
|
33
|
+
`;
|
|
34
|
+
export const split = html `
|
|
35
|
+
<svg
|
|
36
|
+
width="19"
|
|
37
|
+
height="14"
|
|
38
|
+
viewBox="0 0 19 14"
|
|
39
|
+
fill="none"
|
|
40
|
+
stroke="currentColor"
|
|
41
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
42
|
+
>
|
|
43
|
+
<rect x="10" y="1" width="8" height="12" stroke-width="1.5" />
|
|
44
|
+
<line
|
|
45
|
+
x1="7"
|
|
46
|
+
y1="12.1787"
|
|
47
|
+
x2="4.15643e-07"
|
|
48
|
+
y2="12.1787"
|
|
49
|
+
stroke-width="1.5"
|
|
50
|
+
/>
|
|
51
|
+
<line x1="7" y1="8.75" x2="4.15643e-07" y2="8.75" stroke-width="1.5" />
|
|
52
|
+
<line
|
|
53
|
+
x1="7"
|
|
54
|
+
y1="5.17871"
|
|
55
|
+
x2="4.15643e-07"
|
|
56
|
+
y2="5.17871"
|
|
57
|
+
stroke-width="1.5"
|
|
58
|
+
/>
|
|
59
|
+
<line x1="7" y1="1.75" x2="4.15643e-07" y2="1.75" stroke-width="1.5" />
|
|
60
|
+
</svg>
|
|
61
|
+
`;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { default as useQueue } from './use-queue';
|
|
2
|
+
export { default as useDataService } from './use-data-service';
|
|
3
|
+
export { default as useAsyncAction } from './use-async-action';
|
|
4
|
+
export { touch } from './util';
|
|
5
|
+
export * from './render';
|
|
6
|
+
export type * from './types';
|
|
7
|
+
export type * from './use-queue';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,cAAc,UAAU,CAAC;AAEzB,mBAAmB,SAAS,CAAC;AAC7B,mBAAmB,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-click.d.ts","sourceRoot":"","sources":["../../src/queue/item-click.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,GACpB,qBAAqB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,MACnE,CAAC,SAAS,aAAa,GAAG,UAAU,EAAE,GAAG,CAAC,SAe1C,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const itemClick = ({ index, activate }) => (e) => {
|
|
2
|
+
if (e.ctrlKey || e.metaKey) {
|
|
3
|
+
return;
|
|
4
|
+
}
|
|
5
|
+
const clickEvent = new CustomEvent('omnitable-item-click', {
|
|
6
|
+
cancelable: true,
|
|
7
|
+
bubbles: true,
|
|
8
|
+
composed: true,
|
|
9
|
+
detail: { index, activate },
|
|
10
|
+
});
|
|
11
|
+
e.currentTarget?.dispatchEvent(clickEvent);
|
|
12
|
+
if (clickEvent.defaultPrevented) {
|
|
13
|
+
e.preventDefault();
|
|
14
|
+
}
|
|
15
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { LitRenderable } from '#cz/types/lit.ts';
|
|
2
|
+
export interface Render<T> {
|
|
3
|
+
(spec: T & {
|
|
4
|
+
name: string;
|
|
5
|
+
}): LitRenderable;
|
|
6
|
+
}
|
|
7
|
+
export interface Column<F, R = F> {
|
|
8
|
+
readonly order?: number;
|
|
9
|
+
readonly sort?: string;
|
|
10
|
+
readonly filter?: (f: F) => R;
|
|
11
|
+
readonly render: Render<Omit<Column<F, R>, 'render' | 'name' | 'filter'>>;
|
|
12
|
+
}
|
|
13
|
+
export interface NamedColumn<F, R> extends Column<F, R> {
|
|
14
|
+
name: string;
|
|
15
|
+
}
|
|
16
|
+
export type Columns<F = object> = {
|
|
17
|
+
[K in keyof F]: Column<F[K]>;
|
|
18
|
+
};
|
|
19
|
+
export declare const column: <F = never, R = F>(spec: Column<F, R>) => Column<F, R>;
|
|
20
|
+
type InferFilter<T> = T extends Column<infer F, any> ? F : never;
|
|
21
|
+
export type ColumnFilters<T> = T extends object ? {
|
|
22
|
+
[K in keyof T as InferFilter<T[K]> extends never ? never : K]?: InferFilter<T[K]>;
|
|
23
|
+
} : never;
|
|
24
|
+
type InferFilterResult<T> = T extends Column<any, infer F> ? F : never;
|
|
25
|
+
export type ColumnFilterResults<T> = T extends object ? {
|
|
26
|
+
[K in keyof T as InferFilterResult<T[K]> extends never ? never : K]: InferFilterResult<T[K]>;
|
|
27
|
+
} : never;
|
|
28
|
+
export type ColumnNames<T> = T extends object ? keyof T : never;
|
|
29
|
+
type Values<T> = T extends object ? T[keyof T][] : never;
|
|
30
|
+
export declare const mappedFilters: <T, C extends Columns<T>>(columns: C, filters?: ColumnFilters<C>) => Values<ColumnFilterResults<C>>;
|
|
31
|
+
type Unarray<T> = T extends readonly (infer E)[] ? (E extends readonly (infer B)[] ? B : E)[] : never;
|
|
32
|
+
export declare const flat: <T extends unknown[]>(arr: T) => Unarray<T>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=column.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../src/queue/list-core/column.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const column = (spec) => spec;
|
|
2
|
+
export const mappedFilters = (columns, filters) => Object.entries(columns)
|
|
3
|
+
.map(([name, column]) => {
|
|
4
|
+
const filterValue = filters?.[name];
|
|
5
|
+
const filter = column.filter;
|
|
6
|
+
if (filter && filterValue != null)
|
|
7
|
+
return filter(filterValue);
|
|
8
|
+
})
|
|
9
|
+
.filter((v) => v != null);
|
|
10
|
+
export const flat = (arr) => arr.flat();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/queue/list-core/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Columns } from './column';
|
|
2
|
+
import { RenderListCoreProps } from './render-list-core';
|
|
3
|
+
import { UseListCore } from './use-list-core';
|
|
4
|
+
export type ListCore<TColumns extends Columns, TParams extends object, TItem extends object> = UseListCore<TColumns, TParams, TItem> & RenderListCoreProps<TItem>;
|
|
5
|
+
export declare const listCore: <TColumns extends Columns, TParams extends object, TItem extends object>(props: ListCore<TColumns, TParams, TItem>) => import("@neovici/cosmoz-form").Renderable[];
|
|
6
|
+
//# sourceMappingURL=list-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-core.d.ts","sourceRoot":"","sources":["../../../src/queue/list-core/list-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAkB,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAe,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,MAAM,QAAQ,CACnB,QAAQ,SAAS,OAAO,EACxB,OAAO,SAAS,MAAM,EACtB,KAAK,SAAS,MAAM,IACjB,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAEvE,eAAO,MAAM,QAAQ,GACpB,QAAQ,SAAS,OAAO,EACxB,OAAO,SAAS,MAAM,EACtB,KAAK,SAAS,MAAM,EAEpB,OAAO,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,gDAIzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-generic-actions.d.ts","sourceRoot":"","sources":["../../../src/queue/list-core/render-generic-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,2BAA2B,CAAC;AAcnC,eAAO,MAAM,oBAAoB,GAChC,iBAAiB,OAAO,CAAC,SAAS,EAAE,CAAC,EACrC,aAAS,QAUR,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { czAction } from '#cz/cz-components/cz-actions';
|
|
2
|
+
import { errorIcon } from '#cz/cz-components/cz-attachments/icons/error.ts';
|
|
3
|
+
import '@neovici/cosmoz-omnitable';
|
|
4
|
+
import { html } from 'lit-html';
|
|
5
|
+
import { extract } from '../../utils';
|
|
6
|
+
const renderRowActions = (slot) => (rowActions) => rowActions.map(({ title, ids = {}, action }) => czAction({
|
|
7
|
+
slot,
|
|
8
|
+
action,
|
|
9
|
+
actionTitle: title,
|
|
10
|
+
objectIds: ids,
|
|
11
|
+
}));
|
|
12
|
+
export const renderGenericActions = (genericActions$, slot = '') => extract(genericActions$, renderRowActions(slot), () => html `<cosmoz-spinner slot="${slot}" unstyled></cosmoz-spinner>`, (e) => html `<span slot="${slot}" unstyled style="background: transparent"
|
|
13
|
+
>${errorIcon({ title: e.message ?? e })}</span
|
|
14
|
+
>`);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import '@neovici/cosmoz-omnitable';
|
|
2
|
+
import { Action } from '../actions';
|
|
3
|
+
import type { Columns } from './column';
|
|
4
|
+
import { UseListCoreResult } from './use-list-core';
|
|
5
|
+
export interface RenderListCoreProps<TItem extends object> {
|
|
6
|
+
settingsId: string;
|
|
7
|
+
exposedParts?: string;
|
|
8
|
+
hashParam?: string;
|
|
9
|
+
csvFilename?: string;
|
|
10
|
+
enabledColumns?: string[];
|
|
11
|
+
noLocal?: boolean;
|
|
12
|
+
actions?: Action<TItem, any>[];
|
|
13
|
+
}
|
|
14
|
+
export interface RenderListCore<TColumns extends Columns, TItem extends object> extends UseListCoreResult<TColumns, TItem>, RenderListCoreProps<TItem> {
|
|
15
|
+
}
|
|
16
|
+
export declare const renderColumns: <T extends Columns>(columns: T) => LitRenderable[];
|
|
17
|
+
export declare const renderListCore: <TColumns extends Columns, TItem extends object>({ settingsId, hashParam, enabledColumns, csvFilename, exposedParts, data$, noLocal, sortOn, setSortOn, descending, setDescending, groupOn, setGroupOn, selectedItems, setSelectedItems, setVisibleItems, setFilters, columns, actions, dialog, open, genericActions$, loadMore, }: RenderListCore<TColumns, TItem>) => import("@neovici/cosmoz-form").Renderable[];
|
|
18
|
+
//# sourceMappingURL=render-list-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-list-core.d.ts","sourceRoot":"","sources":["../../../src/queue/list-core/render-list-core.ts"],"names":[],"mappings":"AACA,OAAO,2BAA2B,CAAC;AAOnC,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;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;CAC/B;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,oBAGzD,CAAC;AAEH,eAAO,MAAM,cAAc,GAAI,QAAQ,SAAS,OAAO,EAAE,KAAK,SAAS,MAAM,EAAE,mRA6B5E,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,gDA0CjC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { renderLoadMore } from '#cz/render/load-more.ts';
|
|
2
|
+
import '@neovici/cosmoz-omnitable';
|
|
3
|
+
import { formDialog } from '@neovici/cosmoz-form';
|
|
4
|
+
import { lift } from '@pionjs/pion';
|
|
5
|
+
import { html } from 'lit-html';
|
|
6
|
+
import { guard } from 'lit-html/directives/guard.js';
|
|
7
|
+
import { until } from 'lit-html/directives/until.js';
|
|
8
|
+
import { when } from 'lit-html/directives/when.js';
|
|
9
|
+
import { renderActions } from '../actions';
|
|
10
|
+
import { renderGenericActions } from './render-generic-actions';
|
|
11
|
+
export const renderColumns = (columns) => Object.entries(columns).map(([name, column]) => column.render({ ...column, name }));
|
|
12
|
+
export const renderListCore = ({ settingsId, hashParam, enabledColumns, csvFilename, exposedParts, data$, noLocal = true, sortOn, setSortOn, descending, setDescending, groupOn, setGroupOn, selectedItems, setSelectedItems, setVisibleItems, setFilters, columns, actions, dialog, open, genericActions$, loadMore, }) => [
|
|
13
|
+
html `<cosmoz-omnitable
|
|
14
|
+
id="omnitable"
|
|
15
|
+
?no-local=${noLocal}
|
|
16
|
+
.hashParam=${hashParam}
|
|
17
|
+
.data=${until(data$)}
|
|
18
|
+
.csvFilename=${csvFilename}
|
|
19
|
+
.enabledColumns=${enabledColumns}
|
|
20
|
+
?loading=${until(Promise.resolve(data$).then(() => false, () => false), true)}
|
|
21
|
+
.compareItemsFn=${guard([], () => (a, b) => a.id === b.id)}
|
|
22
|
+
.settingsId=${settingsId}
|
|
23
|
+
exportparts=${exposedParts}
|
|
24
|
+
@visible-data-changed=${lift(setVisibleItems)}
|
|
25
|
+
@filters-changed=${lift(setFilters)}
|
|
26
|
+
.selectedItems=${selectedItems}
|
|
27
|
+
@selected-items-changed=${lift(setSelectedItems)}
|
|
28
|
+
.groupOn=${groupOn}
|
|
29
|
+
@group-on-changed=${lift(setGroupOn)}
|
|
30
|
+
.sortOn=${sortOn}
|
|
31
|
+
@sort-on-changed=${lift(setSortOn)}
|
|
32
|
+
descending=${descending}
|
|
33
|
+
@descending-changed=${lift(setDescending)}
|
|
34
|
+
>${[
|
|
35
|
+
renderColumns(columns),
|
|
36
|
+
when(actions, renderActions({ open, items: selectedItems, slot: 'actions' })),
|
|
37
|
+
renderGenericActions(genericActions$, 'actions'),
|
|
38
|
+
renderLoadMore({ data$, onMore: loadMore }),
|
|
39
|
+
]}</cosmoz-omnitable
|
|
40
|
+
>`,
|
|
41
|
+
formDialog(dialog),
|
|
42
|
+
];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.css.d.ts","sourceRoot":"","sources":["../../../src/queue/list-core/style.css.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,KAAK,QAejB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { loadMoreStyle } from '#cz/render/load-more.ts';
|
|
2
|
+
import { style as statusStyle } from '#cz/render/status/index.ts';
|
|
3
|
+
import { bottomBarInfoStyles, buttonStyles, } from '#cz/styles/app/shared-styles';
|
|
4
|
+
import { css } from '@pionjs/pion';
|
|
5
|
+
export const style = css `
|
|
6
|
+
:host {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
flex: auto;
|
|
10
|
+
height: 100%;
|
|
11
|
+
}
|
|
12
|
+
#omnitable {
|
|
13
|
+
flex: auto;
|
|
14
|
+
min-height: 200px;
|
|
15
|
+
}
|
|
16
|
+
${bottomBarInfoStyles}
|
|
17
|
+
${buttonStyles}
|
|
18
|
+
${statusStyle}
|
|
19
|
+
${loadMoreStyle}
|
|
20
|
+
`;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Row } from '#components/cz-actions';
|
|
2
|
+
import { GenericActionsCallback } from './use-list-core';
|
|
3
|
+
export declare const useInlineActions: <TItem extends Row>(rowIdProperty: keyof TItem) => GenericActionsCallback<TItem>;
|
|
4
|
+
//# sourceMappingURL=use-inline-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-inline-actions.d.ts","sourceRoot":"","sources":["../../../src/queue/list-core/use-inline-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,GAAG,EACH,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,eAAO,MAAM,gBAAgB,GAAI,KAAK,SAAS,GAAG,EACjD,eAAe,MAAM,KAAK,KACxB,sBAAsB,CAAC,KAAK,CAa9B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { filterSimpleActions, getRowActions, } from '#components/cz-actions';
|
|
2
|
+
import { BootInfo } from '@neovici/core/context/boot-info.js';
|
|
3
|
+
import { useContext } from '@pionjs/pion';
|
|
4
|
+
export const useInlineActions = (rowIdProperty) => {
|
|
5
|
+
const boot = useContext(BootInfo);
|
|
6
|
+
return [
|
|
7
|
+
async ({ selectedItems }) => getRowActions(boot.reasonCodes, boot.actions, selectedItems, rowIdProperty, filterSimpleActions(boot)),
|
|
8
|
+
[boot],
|
|
9
|
+
];
|
|
10
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { RowAction } from '#cz/cz-components/cz-actions/actions.ts';
|
|
2
|
+
import { useFormDialogable } from '@neovici/cosmoz-form';
|
|
3
|
+
import type { ColumnFilters, ColumnNames, Columns } from './column';
|
|
4
|
+
import { ListCoreState } from './use-list-state';
|
|
5
|
+
import { TList$ } from './use-more';
|
|
6
|
+
export interface ParamsOptions<C> {
|
|
7
|
+
descending?: boolean;
|
|
8
|
+
sortOn?: ColumnNames<C>;
|
|
9
|
+
columns: C;
|
|
10
|
+
filters?: ColumnFilters<C>;
|
|
11
|
+
}
|
|
12
|
+
export type GenericActionsCallback<TItem> = readonly [
|
|
13
|
+
(opts: {
|
|
14
|
+
selectedItems: TItem[];
|
|
15
|
+
}) => Promise<RowAction[]>,
|
|
16
|
+
readonly unknown[]
|
|
17
|
+
];
|
|
18
|
+
export interface UseListCore<TColumns extends Columns, TParams extends object, TItem extends object> {
|
|
19
|
+
pageSize?: number;
|
|
20
|
+
params: readonly [(opts: ParamsOptions<TColumns>) => TParams, unknown[]];
|
|
21
|
+
columns: readonly [() => TColumns, unknown[]];
|
|
22
|
+
list$: readonly [TList$<TParams, TItem>, unknown[]];
|
|
23
|
+
genericActions$?: GenericActionsCallback<TItem>;
|
|
24
|
+
}
|
|
25
|
+
type UseFormDialogable = ReturnType<typeof useFormDialogable>;
|
|
26
|
+
export interface UseListCoreResult<TColumns extends Columns, TItem extends object> extends ListCoreState<TItem, TColumns>, Pick<UseFormDialogable, 'dialog' | 'open'> {
|
|
27
|
+
data$: PromiseLike<TItem[]>;
|
|
28
|
+
columns: TColumns;
|
|
29
|
+
loadMore: (() => void) | undefined;
|
|
30
|
+
genericActions$: Promise<RowAction[]>;
|
|
31
|
+
}
|
|
32
|
+
export declare const useListCore: <TColumns extends Columns, TParams extends object, TItem extends object>({ columns: _columns, params: __params, list$: _list$, genericActions$: _genericActions$, pageSize, }: UseListCore<TColumns, TParams, TItem>) => UseListCoreResult<TColumns, TItem>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=use-list-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-list-core.d.ts","sourceRoot":"","sources":["../../../src/queue/list-core/use-list-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,aAAa,EAAoB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAW,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,aAAa,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;CAC3B;AAED,MAAM,MAAM,sBAAsB,CAAC,KAAK,IAAI,SAAS;IACpD,CAAC,IAAI,EAAE;QAAE,aAAa,EAAE,KAAK,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;IAC1D,SAAS,OAAO,EAAE;CAClB,CAAC;AAEF,MAAM,WAAW,WAAW,CAC3B,QAAQ,SAAS,OAAO,EACxB,OAAO,SAAS,MAAM,EACtB,KAAK,SAAS,MAAM;IAEpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACzE,OAAO,EAAE,SAAS,CAAC,MAAM,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9C,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC;CAChD;AAED,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE9D,MAAM,WAAW,iBAAiB,CACjC,QAAQ,SAAS,OAAO,EACxB,KAAK,SAAS,MAAM,CAEpB,SACC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,EAC9B,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC3C,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5B,OAAO,EAAE,QAAQ,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;CACtC;AAYD,eAAO,MAAM,WAAW,GACvB,QAAQ,SAAS,OAAO,EACxB,OAAO,SAAS,MAAM,EACtB,KAAK,SAAS,MAAM,EACnB,sGAMC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,KAAG,iBAAiB,CAC3D,QAAQ,EACR,KAAK,CAyCL,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useCallback, useMemo } from '@pionjs/pion';
|
|
2
|
+
import { useFormDialogable } from '@neovici/cosmoz-form';
|
|
3
|
+
import { useListCoreState } from './use-list-state';
|
|
4
|
+
import { useMore } from './use-more';
|
|
5
|
+
const noGenericActions = [async () => [], []];
|
|
6
|
+
const useGenericActions$ = ([fn, values] = noGenericActions, selectedItems) => useMemo(async () => fn?.({ selectedItems }) ?? [], [...values, selectedItems]);
|
|
7
|
+
export const useListCore = ({ columns: _columns, params: __params, list$: _list$, genericActions$: _genericActions$, pageSize, }) => {
|
|
8
|
+
const state = useListCoreState();
|
|
9
|
+
const { filters, descending, sortOn, setTotalAvailable } = state;
|
|
10
|
+
const columns = useMemo(..._columns);
|
|
11
|
+
const _params = useCallback(...__params);
|
|
12
|
+
const { rtkn, dialog, open } = useFormDialogable();
|
|
13
|
+
const params = useMemo(() => _params({
|
|
14
|
+
filters,
|
|
15
|
+
descending,
|
|
16
|
+
sortOn,
|
|
17
|
+
columns,
|
|
18
|
+
}), [_params, filters, descending, sortOn, columns, rtkn]);
|
|
19
|
+
const list$ = useCallback(..._list$);
|
|
20
|
+
const { data$, loadMore } = useMore({
|
|
21
|
+
list$,
|
|
22
|
+
setTotalAvailable,
|
|
23
|
+
params,
|
|
24
|
+
pageSize,
|
|
25
|
+
});
|
|
26
|
+
const genericActions$ = useGenericActions$(_genericActions$, state.selectedItems);
|
|
27
|
+
return {
|
|
28
|
+
...state,
|
|
29
|
+
data$,
|
|
30
|
+
columns,
|
|
31
|
+
dialog,
|
|
32
|
+
open,
|
|
33
|
+
loadMore,
|
|
34
|
+
genericActions$,
|
|
35
|
+
};
|
|
36
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ColumnFilters, ColumnNames } from './column';
|
|
2
|
+
interface ListCoreDefaults<TColumns extends object> {
|
|
3
|
+
filters: ColumnFilters<TColumns>;
|
|
4
|
+
sortOn?: ColumnNames<TColumns>;
|
|
5
|
+
groupOn?: ColumnNames<TColumns>;
|
|
6
|
+
descending?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const useListCoreState: <TItem extends object, TColumns extends object>(defaults?: ListCoreDefaults<TColumns>) => {
|
|
9
|
+
filters: ColumnFilters<TColumns> | undefined;
|
|
10
|
+
setFilters: import("@pionjs/pion").StateUpdater<ColumnFilters<TColumns> | undefined>;
|
|
11
|
+
descending: boolean;
|
|
12
|
+
setDescending: import("@pionjs/pion").StateUpdater<boolean>;
|
|
13
|
+
sortOn: ColumnNames<TColumns> | undefined;
|
|
14
|
+
setSortOn: import("@pionjs/pion").StateUpdater<ColumnNames<TColumns> | undefined>;
|
|
15
|
+
groupOn: ColumnNames<TColumns> | undefined;
|
|
16
|
+
setGroupOn: import("@pionjs/pion").StateUpdater<ColumnNames<TColumns> | undefined>;
|
|
17
|
+
selectedItems: TItem[];
|
|
18
|
+
setSelectedItems: import("@pionjs/pion").StateUpdater<TItem[]>;
|
|
19
|
+
setVisibleItems: import("@pionjs/pion").StateUpdater<TItem[]>;
|
|
20
|
+
setTotalAvailable: import("@pionjs/pion").StateUpdater<number | undefined>;
|
|
21
|
+
};
|
|
22
|
+
export type ListCoreState<TItem extends object, TColumns extends object> = ReturnType<typeof useListCoreState<TItem, TColumns>>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=use-list-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-list-state.d.ts","sourceRoot":"","sources":["../../../src/queue/list-core/use-list-state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEtD,UAAU,gBAAgB,CAAC,QAAQ,SAAS,MAAM;IACjD,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,GAAI,KAAK,SAAS,MAAM,EAAE,QAAQ,SAAS,MAAM,EAC7E,WAAW,gBAAgB,CAAC,QAAQ,CAAC;;;;;;;;;;;;;CA+BrC,CAAC;AAEF,MAAM,MAAM,aAAa,CACxB,KAAK,SAAS,MAAM,EACpB,QAAQ,SAAS,MAAM,IACpB,UAAU,CAAC,OAAO,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useProperty } from '@pionjs/pion';
|
|
2
|
+
export const useListCoreState = (defaults) => {
|
|
3
|
+
const [filters, setFilters] = useProperty('filters', () => defaults?.filters);
|
|
4
|
+
const [descending, setDescending] = useProperty('descending', () => defaults?.descending ?? false);
|
|
5
|
+
const [groupOn, setGroupOn] = useProperty('groupOn', () => defaults?.groupOn);
|
|
6
|
+
const [sortOn, setSortOn] = useProperty('sortOn', () => defaults?.sortOn);
|
|
7
|
+
const [, setVisibleItems] = useProperty('visibleItems', []);
|
|
8
|
+
const [selectedItems, setSelectedItems] = useProperty('selectedItems', []);
|
|
9
|
+
// TODO: use pagination
|
|
10
|
+
const [, setTotalAvailable] = useProperty('totalAvailable');
|
|
11
|
+
return {
|
|
12
|
+
filters,
|
|
13
|
+
setFilters,
|
|
14
|
+
descending,
|
|
15
|
+
setDescending,
|
|
16
|
+
sortOn,
|
|
17
|
+
setSortOn,
|
|
18
|
+
groupOn,
|
|
19
|
+
setGroupOn,
|
|
20
|
+
selectedItems,
|
|
21
|
+
setSelectedItems,
|
|
22
|
+
setVisibleItems,
|
|
23
|
+
setTotalAvailable,
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { StateUpdater } from '@pionjs/pion';
|
|
2
|
+
export interface TList$<TParams extends object, TItem extends object> {
|
|
3
|
+
(props: {
|
|
4
|
+
params: TParams;
|
|
5
|
+
page: number;
|
|
6
|
+
pageSize: number;
|
|
7
|
+
}): PromiseLike<{
|
|
8
|
+
items: TItem[];
|
|
9
|
+
total: number;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
interface UseMore<TParams extends object, TItem extends object> {
|
|
13
|
+
pageSize?: number;
|
|
14
|
+
params: TParams;
|
|
15
|
+
list$: TList$<TParams, TItem>;
|
|
16
|
+
setTotalAvailable: StateUpdater<number | undefined>;
|
|
17
|
+
}
|
|
18
|
+
export declare const useMore: <TParams extends object, TItem extends object>({ params: _params, list$, pageSize, setTotalAvailable, }: UseMore<TParams, TItem>) => {
|
|
19
|
+
data$: PromiseLike<TItem[]>;
|
|
20
|
+
loadMore: (() => void) | undefined;
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=use-more.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-more.d.ts","sourceRoot":"","sources":["../../../src/queue/list-core/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;;;CAuDzB,CAAC"}
|