@neovici/cosmoz-form 3.1.0 → 3.2.0-beta.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.
@@ -15,7 +15,7 @@ export interface Dialog<T extends object> extends Props<T> {
15
15
  name?: string;
16
16
  }
17
17
  export declare const formDialog: <T extends object>(props?: Dialog<T>) => Renderable;
18
- export declare const formDialog$: <T extends object>(props$: Resolvable<Dialog<T>>) => import("lit-html/directive.js").DirectiveResult<{
18
+ export declare const formDialog$: <T extends object>(props$: Resolvable<Dialog<T>> | undefined) => import("lit-html/directive.js").DirectiveResult<{
19
19
  new (_partInfo: import("lit-html/directive.js").PartInfo): import("lit-html/directives/until.js").UntilDirective<import("lit-html").TemplateResult<1> | Promise<symbol | {
20
20
  toString(): string;
21
21
  } | readonly Renderable[] | null | undefined>>;
@@ -1 +1 @@
1
- {"version":3,"file":"form-dialog.d.ts","sourceRoot":"","sources":["../../src/form-dialog/form-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,gCAAgC,CAAC;AACxC,OAAO,yBAAyB,CAAC;AAWjC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAqB,MAAM,wBAAwB,CAAC;AAG9E,UAAU,KAAK,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAiDD,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,EAAE,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAG,UAkBhE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,EAAE,QAAQ,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;;;EAIzE,CAAC"}
1
+ {"version":3,"file":"form-dialog.d.ts","sourceRoot":"","sources":["../../src/form-dialog/form-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,gCAAgC,CAAC;AACxC,OAAO,yBAAyB,CAAC;AAWjC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAqB,MAAM,wBAAwB,CAAC;AAG9E,UAAU,KAAK,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAiDD,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,EAAE,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAG,UAkBhE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,EAC3C,QAAQ,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;;;;EAKxC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { dialog } from '@neovici/cosmoz-dialog';
2
2
  import '@neovici/cosmoz-dialog/loading';
3
3
  import '@neovici/cosmoz-spinner';
4
- import { invoke } from '@neovici/cosmoz-utils/function';
4
+ import { invoke$ } from '@neovici/cosmoz-utils/promise';
5
5
  import { useEffect } from '@pionjs/pion';
6
6
  import { t } from 'i18next';
7
7
  import { html, nothing } from 'lit-html';
@@ -57,4 +57,4 @@ export const formDialog = (props) => {
57
57
  ></cosmoz-form-dialog>`;
58
58
  return dialog;
59
59
  };
60
- export const formDialog$ = (props$) => until(Promise.resolve(invoke(props$)).then(formDialog, () => nothing), html `<cosmoz-dialog-loading></cosmoz-dialog-loading>`);
60
+ export const formDialog$ = (props$) => until(invoke$(props$).then(formDialog, () => nothing), html `<cosmoz-dialog-loading></cosmoz-dialog-loading>`);
@@ -1,4 +1,5 @@
1
1
  export * from './form-dialog';
2
2
  export * from './form-dialogable';
3
3
  export * from './use-form-dialogable';
4
+ export * from './use-form-dialogable$';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/form-dialog/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/form-dialog/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './form-dialog';
2
2
  export * from './form-dialogable';
3
3
  export * from './use-form-dialogable';
4
+ export * from './use-form-dialogable$';
@@ -0,0 +1,10 @@
1
+ import { type Resolvable } from '../types';
2
+ import { type Dialog } from './form-dialog';
3
+ import { type Dialogable } from './use-form-dialogable';
4
+ export declare const useFormDialogable$: () => {
5
+ dialog: (() => Promise<Dialog<object>>) | undefined;
6
+ rtkn: symbol | undefined;
7
+ setRtkn: import("@pionjs/pion").StateUpdater<symbol | undefined>;
8
+ open: <T extends object>(resolvable: Resolvable<Dialogable<T>>) => void;
9
+ };
10
+ //# sourceMappingURL=use-form-dialogable$.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-form-dialogable$.d.ts","sourceRoot":"","sources":["../../src/form-dialog/use-form-dialogable$.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,UAAU,EAAkB,MAAM,uBAAuB,CAAC;AAIxE,eAAO,MAAM,kBAAkB;mBAFM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;;;WAaxD,CAAC,SAAS,MAAM,cAAc,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;CAe1D,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { invoke$ } from '@neovici/cosmoz-utils/promise';
2
+ import { useCallback, useState } from '@pionjs/pion';
3
+ import { useOpened } from '../hooks/use-opened';
4
+ import { wrapDialogable } from './use-form-dialogable';
5
+ export const useFormDialogable$ = () => {
6
+ const { opened: maybeSlot, onOpen, onClose } = useOpened();
7
+ const [rtkn, setRtkn] = useState();
8
+ const slot = typeof maybeSlot === 'boolean' ? undefined : maybeSlot;
9
+ return {
10
+ dialog: slot?.value,
11
+ rtkn,
12
+ setRtkn,
13
+ open: useCallback((resolvable) => onOpen({
14
+ value: () => invoke$(resolvable).then((dialogable) => wrapDialogable(dialogable, onClose, setRtkn)),
15
+ }), [onClose, setRtkn]),
16
+ };
17
+ };
@@ -3,6 +3,7 @@ export interface Dialogable<T extends object> extends Dialog<T> {
3
3
  preventClose?: boolean;
4
4
  preventRefresh?: boolean;
5
5
  }
6
+ export declare const wrapDialogable: <T extends object>(dialogable: Dialogable<T>, onClose: () => void, setRtkn: (s: symbol) => void) => Dialog<T>;
6
7
  export declare const useFormDialogable: () => {
7
8
  dialog: Dialogable<object> | undefined;
8
9
  rtkn: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"use-form-dialogable.d.ts","sourceRoot":"","sources":["../../src/form-dialog/use-form-dialogable.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC9D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AACD,eAAO,MAAM,iBAAiB;;;;WAa1B,CAAC,SAAS,MAAM,UAAU,UAAU,CAAC,CAAC,CAAC;CAuB1C,CAAC"}
1
+ {"version":3,"file":"use-form-dialogable.d.ts","sourceRoot":"","sources":["../../src/form-dialog/use-form-dialogable.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC9D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,EAC9C,YAAY,UAAU,CAAC,CAAC,CAAC,EACzB,SAAS,MAAM,IAAI,EACnB,SAAS,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,KAC1B,MAAM,CAAC,CAAC,CAcT,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;WAa1B,CAAC,SAAS,MAAM,UAAU,UAAU,CAAC,CAAC,CAAC;CAW1C,CAAC"}
@@ -1,5 +1,17 @@
1
1
  import { useCallback, useState } from '@pionjs/pion';
2
2
  import { useOpened } from '../hooks/use-opened';
3
+ export const wrapDialogable = (dialogable, onClose, setRtkn) => ({
4
+ ...dialogable,
5
+ onClose,
6
+ onSave: (values, initial, setProgress) => Promise.resolve(dialogable.onSave?.(values, initial, setProgress)).then(() => {
7
+ if (!dialogable.preventRefresh) {
8
+ setRtkn(Symbol('rtkn'));
9
+ }
10
+ if (!dialogable.preventClose) {
11
+ onClose();
12
+ }
13
+ }),
14
+ });
3
15
  export const useFormDialogable = () => {
4
16
  const { opened: maybeDialog, onOpen, onClose, } = useOpened();
5
17
  const [rtkn, setRtkn] = useState();
@@ -8,17 +20,6 @@ export const useFormDialogable = () => {
8
20
  dialog,
9
21
  rtkn,
10
22
  setRtkn,
11
- open: useCallback((dialog) => onOpen({
12
- ...dialog,
13
- onClose,
14
- onSave: (values, initial, setProgress) => Promise.resolve(dialog.onSave?.(values, initial, setProgress)).then(() => {
15
- if (!dialog?.preventRefresh) {
16
- setRtkn(Symbol('rtkn'));
17
- }
18
- if (!dialog?.preventClose) {
19
- onClose();
20
- }
21
- }),
22
- }), [onClose]),
23
+ open: useCallback((dialog) => onOpen(wrapDialogable(dialog, onClose, setRtkn)), [onClose, setRtkn]),
23
24
  };
24
25
  };
package/dist/helpers.d.ts CHANGED
@@ -7,5 +7,5 @@ interface Initiatable<T extends object, K extends keyof T, V extends T[K]> {
7
7
  initiate: (value: V, values: T) => any;
8
8
  }
9
9
  export declare const initiate: <T extends object, K extends keyof T, V extends T[K]>(obj: T, fields: Initiatable<T, K, V>[]) => { [key in K]: ReturnType<Initiatable<T, K, V>["initiate"]>; };
10
- export declare const primeval: ((<T extends object, K extends keyof T, V extends T[K], F extends Field<T, K, V>>(value: V, values: T, { options, valueProperty }: F) => V | ({} | V)[]) | (<T extends object, K extends keyof T, V extends T[K], F extends Field<T, K, V>>(value: V, values: T, { valueProperty }: F) => any[] | (string extends infer T_1 ? T_1 extends string ? T_1 extends keyof NonNullable<V> ? NonNullable<V>[T_1] : undefined : never : never)))[];
10
+ export declare const primeval: ((<T extends object, K extends keyof T, V extends T[K], F extends Field<T, K, V>>(value: V, values: T, { options, valueProperty }: F) => V | ({} | V)[]) | (<T extends object, K extends keyof T, V extends T[K], F extends Field<T, K, V>>(value: V, values: T, { valueProperty }: F) => any[] | (NonNullable<V> extends infer T_1 ? T_1 extends NonNullable<V> ? T_1 extends object ? string extends infer T_2 ? T_2 extends string ? T_2 extends keyof T_1 ? T_1[T_2] : undefined : never : never : T_1 : never : never)))[];
11
11
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,KAAK,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3E,wBAAgB,WAAW,CAC1B,CAAC,EACD,CAAC,SAAS,GAAG,EAAE,EACf,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,EAC3D,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAE3D;AAED,UAAU,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACxE,EAAE,EAAE,CAAC,CAAC;IACN,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,GAAG,CAAC;CACvC;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAC3E,KAAK,CAAC,EACN,QAAQ,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAOzB,GACH,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GACxD,CAAC;AAMH,eAAO,MAAM,QAAQ,KAEnB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACd,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAEjB,CAAC,UACA,CAAC,8BACmB,CAAC,yBAa7B,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACd,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAEjB,CAAC,UACA,CAAC,qBACU,CAAC,qJAMrB,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,KAAK,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3E,wBAAgB,WAAW,CAC1B,CAAC,EACD,CAAC,SAAS,GAAG,EAAE,EACf,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,EAC3D,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAE3D;AAED,UAAU,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACxE,EAAE,EAAE,CAAC,CAAC;IACN,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,GAAG,CAAC;CACvC;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAC3E,KAAK,CAAC,EACN,QAAQ,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAOzB,GACH,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GACxD,CAAC;AAMH,eAAO,MAAM,QAAQ,KAEnB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACd,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAEjB,CAAC,UACA,CAAC,8BACmB,CAAC,yBAa7B,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACd,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAEjB,CAAC,UACA,CAAC,qBACU,CAAC,0OAMrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=use-form-dialogable$.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-form-dialogable$.test.d.ts","sourceRoot":"","sources":["../../src/test/use-form-dialogable$.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,103 @@
1
+ import { renderHook } from '@neovici/testing';
2
+ import { assert, waitUntil } from '@open-wc/testing';
3
+ import { useFormDialogable$ } from '../form-dialog/use-form-dialogable$';
4
+ const makeDialogable = (overrides) => ({
5
+ heading: 'Test',
6
+ fields: [],
7
+ initial: {},
8
+ onSave: () => Promise.resolve(),
9
+ ...overrides,
10
+ });
11
+ suite('useFormDialogable$', () => {
12
+ const fixture = () => renderHook(() => useFormDialogable$());
13
+ test('dialog is undefined initially', async () => {
14
+ const { result } = await fixture();
15
+ assert.isUndefined(result.current.dialog);
16
+ });
17
+ test('rtkn is undefined initially', async () => {
18
+ const { result } = await fixture();
19
+ assert.isUndefined(result.current.rtkn);
20
+ });
21
+ test('open() with synchronous Dialogable stores a resolver function', async () => {
22
+ const { result, nextUpdate } = await fixture();
23
+ result.current.open(makeDialogable());
24
+ await nextUpdate();
25
+ assert.isFunction(result.current.dialog);
26
+ });
27
+ test('open() with Promise<Dialogable> stores a resolver function', async () => {
28
+ const { result, nextUpdate } = await fixture();
29
+ result.current.open(Promise.resolve(makeDialogable()));
30
+ await nextUpdate();
31
+ assert.isFunction(result.current.dialog);
32
+ });
33
+ test('open() with () => Dialogable stores a resolver function', async () => {
34
+ const { result, nextUpdate } = await fixture();
35
+ result.current.open(() => makeDialogable());
36
+ await nextUpdate();
37
+ assert.isFunction(result.current.dialog);
38
+ });
39
+ test('dialog() resolves to wrapped Dialog with onClose', async () => {
40
+ const { result, nextUpdate } = await fixture();
41
+ result.current.open(makeDialogable());
42
+ await nextUpdate();
43
+ const resolved = await result.current.dialog();
44
+ assert.equal(resolved.heading, 'Test');
45
+ assert.isFunction(resolved.onClose);
46
+ assert.isFunction(resolved.onSave);
47
+ });
48
+ test('onSave calls original onSave and onClose', async () => {
49
+ const { result, nextUpdate } = await fixture();
50
+ let saved = false;
51
+ result.current.open(makeDialogable({
52
+ onSave: () => {
53
+ saved = true;
54
+ return Promise.resolve();
55
+ },
56
+ }));
57
+ await nextUpdate();
58
+ const resolved = await result.current.dialog();
59
+ await resolved.onSave({}, {});
60
+ assert.isTrue(saved);
61
+ await waitUntil(() => result.current.dialog === undefined);
62
+ });
63
+ test('onSave respects preventClose', async () => {
64
+ const { result, nextUpdate } = await fixture();
65
+ result.current.open(makeDialogable({ preventClose: true }));
66
+ await nextUpdate();
67
+ const resolved = await result.current.dialog();
68
+ await resolved.onSave({}, {});
69
+ assert.isFunction(result.current.dialog);
70
+ });
71
+ test('onSave respects preventRefresh', async () => {
72
+ const { result, nextUpdate } = await fixture();
73
+ result.current.open(makeDialogable({ preventRefresh: true }));
74
+ await nextUpdate();
75
+ const resolved = await result.current.dialog();
76
+ const initialRtkn = result.current.rtkn;
77
+ await resolved.onSave({}, {});
78
+ assert.equal(result.current.rtkn, initialRtkn);
79
+ });
80
+ test('dialog() resolves async Dialogable from Promise', async () => {
81
+ const { result, nextUpdate } = await fixture();
82
+ result.current.open(Promise.resolve(makeDialogable({ heading: 'Async Test' })));
83
+ await nextUpdate();
84
+ const resolved = await result.current.dialog();
85
+ assert.equal(resolved.heading, 'Async Test');
86
+ });
87
+ test('dialog() resolves lazy Dialogable from function', async () => {
88
+ const { result, nextUpdate } = await fixture();
89
+ result.current.open(() => makeDialogable({ heading: 'Lazy Test' }));
90
+ await nextUpdate();
91
+ const resolved = await result.current.dialog();
92
+ assert.equal(resolved.heading, 'Lazy Test');
93
+ });
94
+ test('onSave sets rtkn (refresh token)', async () => {
95
+ const { result, nextUpdate } = await fixture();
96
+ result.current.open(makeDialogable());
97
+ await nextUpdate();
98
+ const resolved = await result.current.dialog();
99
+ assert.isUndefined(result.current.rtkn);
100
+ await resolved.onSave({}, {});
101
+ assert.isTrue(typeof result.current.rtkn === 'symbol');
102
+ });
103
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neovici/cosmoz-form",
3
- "version": "3.1.0",
3
+ "version": "3.2.0-beta.1",
4
4
  "description": "A pionjs component",
5
5
  "keywords": [
6
6
  "web-components",
@@ -70,19 +70,21 @@
70
70
  "@lit-labs/virtualizer": "^2.1.1",
71
71
  "@neovici/cosmoz-autocomplete": "^10.10.4 || ^11.0.0 || ^12.0.0 || ^13.0.0",
72
72
  "@neovici/cosmoz-dialog": "^4.0.0 || ^5.0.0",
73
- "i18next": ">=23.0.0 <27.0.0",
74
73
  "@neovici/cosmoz-icons": "^1.3.0",
75
74
  "@neovici/cosmoz-input": "^5.5.0",
76
75
  "@neovici/cosmoz-spinner": "^1.0.2",
77
- "@neovici/cosmoz-utils": "^6.17.0",
76
+ "@neovici/cosmoz-utils": "^6.22.0",
78
77
  "@pionjs/pion": "^2.5.2",
78
+ "@playwright/test": "^1.60.0",
79
+ "@web/test-runner-playwright": "^0.11.1",
79
80
  "date-fns": "^4.1.0",
81
+ "i18next": ">=23.0.0 <27.0.0",
80
82
  "lit-html": "^3.3.1"
81
83
  },
82
84
  "devDependencies": {
83
85
  "@commitlint/cli": "^20.0.0",
84
86
  "@commitlint/config-conventional": "^20.0.0",
85
- "@neovici/cfg": "^2.11.0",
87
+ "@neovici/cfg": "^2.13.0",
86
88
  "@neovici/testing": "^2.0.0",
87
89
  "@open-wc/testing": "^4.0.0",
88
90
  "@open-wc/testing-helpers": "^3.0.1",