@avstantso/utils-dialog 1.1.0 → 1.2.2
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/CHANGELOG.md +14 -0
- package/dist/_global/_register.d.ts +170 -0
- package/dist/_global/index.d.ts +1 -0
- package/dist/export.d.ts +2 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +113 -0
- package/dist/index.js.map +1 -0
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
## [1.2.2] - 2026-01-31
|
|
5
|
+
|
|
6
|
+
### Changed
|
|
7
|
+
|
|
8
|
+
- Updated `@avstantso/ts` dependency (Updated @avstantso/ts dependency (fix String, Filter))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
## [1.2.1] - 2026-01-18
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Fix publishing
|
|
16
|
+
|
|
3
17
|
All notable changes to this project will be documented in this file.
|
|
4
18
|
|
|
5
19
|
## [1.1.0] - 2026-01-18
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
declare namespace AVStantso {
|
|
2
|
+
type TypeMap = Dialog.TypeMap;
|
|
3
|
+
namespace TypeMap {
|
|
4
|
+
type Def = Dialog.TypeMap.Def;
|
|
5
|
+
}
|
|
6
|
+
type Internal<TTypeMap extends TypeMap> = Dialog.TypeMap.Internal<TTypeMap>;
|
|
7
|
+
type External<TTypeMap extends TypeMap> = Dialog.TypeMap.External<TTypeMap>;
|
|
8
|
+
type Params<TTypeMap extends TypeMap> = Dialog.TypeMap.Params<TTypeMap>;
|
|
9
|
+
export namespace Dialog {
|
|
10
|
+
type TypeMap = {
|
|
11
|
+
Internal?: unknown;
|
|
12
|
+
External?: unknown;
|
|
13
|
+
Params?: unknown;
|
|
14
|
+
};
|
|
15
|
+
namespace TypeMap {
|
|
16
|
+
type _Meta<TTypeMap extends TypeMap = TypeMap, TDef extends object = object> = {
|
|
17
|
+
TypeMap: TTypeMap;
|
|
18
|
+
Def: TDef;
|
|
19
|
+
};
|
|
20
|
+
export type Meta = _Meta;
|
|
21
|
+
export namespace Meta {
|
|
22
|
+
type _ExtendsTypeMap<TTypeMap extends object> = TS.Merge<Meta['TypeMap'], TTypeMap>;
|
|
23
|
+
type _ExtendsMergedBaseDef<TTypeMap extends object, TMTM extends _ExtendsTypeMap<TTypeMap> = _ExtendsTypeMap<TTypeMap>, TMTMRq extends Pick<TMTM, TS.RequiredKeys<TMTM>> = Pick<TMTM, TS.RequiredKeys<TMTM>>> = TS.Merge<TMTMRq, Meta['Def']>;
|
|
24
|
+
type _ExtendsDefCondition<TTypeMap extends object> = Partial<_ExtendsMergedBaseDef<TTypeMap>>;
|
|
25
|
+
type _ExtendsDef<TTypeMap extends object, TDef extends _ExtendsDefCondition<TTypeMap>> = TS.Merge<_ExtendsMergedBaseDef<TTypeMap>, TDef>;
|
|
26
|
+
type _Extends<TTypeMap extends object, TDef extends _ExtendsDefCondition<TTypeMap>> = {
|
|
27
|
+
TypeMap: _ExtendsTypeMap<TTypeMap>;
|
|
28
|
+
Def: _ExtendsDef<TTypeMap, TDef>;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* @example
|
|
32
|
+
* type e = Extends<{X: number}>;
|
|
33
|
+
* type g = GetTypeMap<e>;
|
|
34
|
+
* type d = Def<e>;
|
|
35
|
+
*/
|
|
36
|
+
export type Extends<TTypeMap extends object, TDef extends _ExtendsDefCondition<TTypeMap> = object> = _Extends<TTypeMap, TDef>;
|
|
37
|
+
export {};
|
|
38
|
+
}
|
|
39
|
+
type _GetTypeMap<T extends Meta | TypeMap> = T extends Meta ? T['TypeMap'] : T extends TypeMap ? T : never;
|
|
40
|
+
export type Def<TMeta extends Meta = Meta> = TMeta['Def'];
|
|
41
|
+
type _Internal<TTypeMap extends TypeMap> = TTypeMap extends {
|
|
42
|
+
Internal: unknown;
|
|
43
|
+
} ? TTypeMap['Internal'] : boolean;
|
|
44
|
+
export type Internal<T extends Meta | TypeMap> = _Internal<_GetTypeMap<T>>;
|
|
45
|
+
type _External<TTypeMap extends TypeMap> = TTypeMap extends {
|
|
46
|
+
External: unknown;
|
|
47
|
+
} ? TTypeMap['External'] : _Internal<TTypeMap>;
|
|
48
|
+
export type External<T extends Meta | TypeMap> = _External<_GetTypeMap<T>>;
|
|
49
|
+
type _Params<TTypeMap extends TypeMap> = TTypeMap extends {
|
|
50
|
+
Params: unknown;
|
|
51
|
+
} ? TTypeMap['Params'] : never;
|
|
52
|
+
export type Params<T extends Meta | TypeMap> = _Params<_GetTypeMap<T>>;
|
|
53
|
+
export {};
|
|
54
|
+
}
|
|
55
|
+
namespace Entity {
|
|
56
|
+
type IsObject<TTypeMap extends TypeMap, TTrue, TFalse> = Internal<TTypeMap> extends object ? TTrue : TFalse;
|
|
57
|
+
type Converter<TTypeMap extends TypeMap = TypeMap.Def> = {
|
|
58
|
+
from(external: External<TTypeMap>): Internal<TTypeMap>;
|
|
59
|
+
to(internal: Internal<TTypeMap>): External<TTypeMap>;
|
|
60
|
+
};
|
|
61
|
+
namespace Options {
|
|
62
|
+
type Common<TTypeMap extends TypeMap = TypeMap.Def> = {
|
|
63
|
+
rejectedValue?: External<TTypeMap>;
|
|
64
|
+
};
|
|
65
|
+
type Object<TTypeMap extends TypeMap = TypeMap.Def> = {
|
|
66
|
+
entity?: External<TTypeMap>;
|
|
67
|
+
defaults?: Partial<Internal<TTypeMap>>;
|
|
68
|
+
override?: Perform<External<TTypeMap>, [entity?: External<TTypeMap>]>;
|
|
69
|
+
converter?: Converter<TTypeMap>;
|
|
70
|
+
};
|
|
71
|
+
type NonObject<TTypeMap extends TypeMap = TypeMap.Def> = {
|
|
72
|
+
resolvedValue?: External<TTypeMap>;
|
|
73
|
+
};
|
|
74
|
+
type Mixed<TTypeMap extends TypeMap = TypeMap.Def> = Common<TTypeMap> & Object<TTypeMap> & NonObject<TTypeMap>;
|
|
75
|
+
type Detected<TTypeMap extends TypeMap = TypeMap.Def> = Common<TTypeMap> & IsObject<TTypeMap, Object<TTypeMap>, NonObject<TTypeMap>>;
|
|
76
|
+
type Ejected<TTypeMap extends TypeMap = TypeMap.Def, TTotalOptions extends Mixed<TTypeMap> = Mixed<TTypeMap>> = Omit<TTotalOptions, keyof Mixed<TTypeMap>>;
|
|
77
|
+
}
|
|
78
|
+
type Options<TTypeMap extends TypeMap = TypeMap.Def, TMixed extends boolean = false> = TMixed extends true ? Options.Detected<TTypeMap> : Options.Mixed<TTypeMap>;
|
|
79
|
+
}
|
|
80
|
+
namespace Executer {
|
|
81
|
+
type Options<TTypeMap extends TypeMap> = {
|
|
82
|
+
entity?: External<TTypeMap>;
|
|
83
|
+
params?: Params<TTypeMap>;
|
|
84
|
+
options?: Dialog.Entity.Options<TTypeMap>;
|
|
85
|
+
};
|
|
86
|
+
type OverloadParams<TTypeMap extends TypeMap> = External<TTypeMap> extends boolean ? [] : External<TTypeMap> extends {
|
|
87
|
+
entity: unknown;
|
|
88
|
+
} | {
|
|
89
|
+
params: unknown;
|
|
90
|
+
} | {
|
|
91
|
+
options: unknown;
|
|
92
|
+
} ? [options: Executer.Options<TTypeMap>] : [options: Executer.Options<TTypeMap>] | [
|
|
93
|
+
entity?: External<TTypeMap>,
|
|
94
|
+
params?: Params<TTypeMap>,
|
|
95
|
+
options?: Dialog.Entity.Options<TTypeMap>
|
|
96
|
+
];
|
|
97
|
+
}
|
|
98
|
+
type State<TTypeMap extends TypeMap = TypeMap.Def> = {
|
|
99
|
+
entity?: Internal<TTypeMap>;
|
|
100
|
+
params?: Params<TTypeMap>;
|
|
101
|
+
options?: Dialog.Entity.Options.Mixed<TTypeMap>;
|
|
102
|
+
resolve?: (value?: unknown) => void;
|
|
103
|
+
reject?: (reason?: any) => void;
|
|
104
|
+
};
|
|
105
|
+
type Implementation<TTypeMap extends TypeMap = TypeMap.Def> = {
|
|
106
|
+
entityOptions: Entity.Options.Mixed<TTypeMap>;
|
|
107
|
+
state: State<TTypeMap>;
|
|
108
|
+
_showed?(): void;
|
|
109
|
+
_hiding?(canceled?: boolean): void;
|
|
110
|
+
_hided?(): void;
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export interface Dialog<TTypeMap extends TypeMap = TypeMap.Def> {
|
|
114
|
+
show(...params: Dialog.Executer.OverloadParams<TTypeMap>): void;
|
|
115
|
+
hide(canceled?: boolean): External<TTypeMap>;
|
|
116
|
+
execute(...params: Dialog.Executer.OverloadParams<TTypeMap>): Promise<External<TTypeMap>>;
|
|
117
|
+
}
|
|
118
|
+
function DialogFactory({ JS, Perform }: {
|
|
119
|
+
JS?: Code.JS;
|
|
120
|
+
Perform?: Code.Perform;
|
|
121
|
+
}): {
|
|
122
|
+
Entity: Readonly<{
|
|
123
|
+
Options: Readonly<{
|
|
124
|
+
Mixed: Readonly<{
|
|
125
|
+
Keys: readonly ["entity", "defaults", "converter", "resolvedValue", "rejectedValue"];
|
|
126
|
+
extract<TTypeMap extends TypeMap, TTotalOptions extends Dialog.Entity.Options.Mixed<TTypeMap>>(totalOptions: TTotalOptions): [Dialog.Entity.Options.Ejected<TTypeMap>, Dialog.Entity.Options.Mixed<TTypeMap>];
|
|
127
|
+
}>;
|
|
128
|
+
}>;
|
|
129
|
+
}>;
|
|
130
|
+
Executer: Readonly<{
|
|
131
|
+
Options: Readonly<{
|
|
132
|
+
is<TTypeMap extends TypeMap = object>(candidate: unknown): candidate is Dialog.Executer.Options<TTypeMap>;
|
|
133
|
+
}>;
|
|
134
|
+
}>;
|
|
135
|
+
Implementation: Readonly<{
|
|
136
|
+
initialize<TTypeMap extends TypeMap, TTotalOptions extends Dialog.Entity.Options.Mixed<TTypeMap>>(implementation: Dialog.Implementation<TTypeMap>, totalOptions: TTotalOptions): Dialog.Entity.Options.Ejected<TTypeMap>;
|
|
137
|
+
show<TTypeMap extends TypeMap>(implementation: Dialog.Implementation<TTypeMap>, ...params: Dialog.Executer.OverloadParams<TTypeMap> | any[]): void;
|
|
138
|
+
hide<TTypeMap extends TypeMap>(implementation: Dialog.Implementation<TTypeMap>, canceled?: boolean): External<TTypeMap>;
|
|
139
|
+
execute<TTypeMap extends TypeMap>(implementation: Dialog.Implementation<TTypeMap>, ...params: Dialog.Executer.OverloadParams<TTypeMap> | any[]): Promise<External<TTypeMap>>;
|
|
140
|
+
}>;
|
|
141
|
+
};
|
|
142
|
+
export interface Code {
|
|
143
|
+
/**
|
|
144
|
+
* @summary Dialog utilities
|
|
145
|
+
*/
|
|
146
|
+
Dialog: ReturnType<typeof DialogFactory>;
|
|
147
|
+
}
|
|
148
|
+
export const Dialog: {
|
|
149
|
+
Entity: Readonly<{
|
|
150
|
+
Options: Readonly<{
|
|
151
|
+
Mixed: Readonly<{
|
|
152
|
+
Keys: readonly ["entity", "defaults", "converter", "resolvedValue", "rejectedValue"];
|
|
153
|
+
extract<TTypeMap extends TypeMap, TTotalOptions extends Dialog.Entity.Options.Mixed<TTypeMap>>(totalOptions: TTotalOptions): [Dialog.Entity.Options.Ejected<TTypeMap>, Dialog.Entity.Options.Mixed<TTypeMap>];
|
|
154
|
+
}>;
|
|
155
|
+
}>;
|
|
156
|
+
}>;
|
|
157
|
+
Executer: Readonly<{
|
|
158
|
+
Options: Readonly<{
|
|
159
|
+
is<TTypeMap extends TypeMap = object>(candidate: unknown): candidate is Dialog.Executer.Options<TTypeMap>;
|
|
160
|
+
}>;
|
|
161
|
+
}>;
|
|
162
|
+
Implementation: Readonly<{
|
|
163
|
+
initialize<TTypeMap extends TypeMap, TTotalOptions extends Dialog.Entity.Options.Mixed<TTypeMap>>(implementation: Dialog.Implementation<TTypeMap>, totalOptions: TTotalOptions): Dialog.Entity.Options.Ejected<TTypeMap>;
|
|
164
|
+
show<TTypeMap extends TypeMap>(implementation: Dialog.Implementation<TTypeMap>, ...params: Dialog.Executer.OverloadParams<TTypeMap> | any[]): void;
|
|
165
|
+
hide<TTypeMap extends TypeMap>(implementation: Dialog.Implementation<TTypeMap>, canceled?: boolean): External<TTypeMap>;
|
|
166
|
+
execute<TTypeMap extends TypeMap>(implementation: Dialog.Implementation<TTypeMap>, ...params: Dialog.Executer.OverloadParams<TTypeMap> | any[]): Promise<External<TTypeMap>>;
|
|
167
|
+
}>;
|
|
168
|
+
};
|
|
169
|
+
export {};
|
|
170
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './_register';
|
package/dist/export.d.ts
ADDED
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('@avstantso/errors');
|
|
4
|
+
require('@avstantso/js');
|
|
5
|
+
require('@avstantso/concepts');
|
|
6
|
+
|
|
7
|
+
var AVStantso$1;
|
|
8
|
+
(function (AVStantso) {
|
|
9
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
10
|
+
//#endregion
|
|
11
|
+
const DialogEntityOptionsMixedKeys = [
|
|
12
|
+
'entity',
|
|
13
|
+
'defaults',
|
|
14
|
+
'converter',
|
|
15
|
+
'resolvedValue',
|
|
16
|
+
'rejectedValue'
|
|
17
|
+
];
|
|
18
|
+
function DialogFactory({ JS, Perform }) {
|
|
19
|
+
return {
|
|
20
|
+
Entity: Object.freeze({
|
|
21
|
+
Options: Object.freeze({
|
|
22
|
+
Mixed: Object.freeze({
|
|
23
|
+
Keys: Object.freeze(DialogEntityOptionsMixedKeys),
|
|
24
|
+
extract(totalOptions) {
|
|
25
|
+
const r = [{ ...totalOptions }, {}];
|
|
26
|
+
for (const key of this.Keys)
|
|
27
|
+
if (key in r[0]) {
|
|
28
|
+
r[1][key] = r[0][key];
|
|
29
|
+
delete r[1][key];
|
|
30
|
+
}
|
|
31
|
+
return r;
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
}),
|
|
36
|
+
Executer: Object.freeze({
|
|
37
|
+
Options: Object.freeze({
|
|
38
|
+
is(candidate) {
|
|
39
|
+
return (candidate
|
|
40
|
+
&& JS.is.object(candidate)
|
|
41
|
+
&& ('entity' in candidate
|
|
42
|
+
|| 'params' in candidate
|
|
43
|
+
|| 'options' in candidate));
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
}),
|
|
47
|
+
Implementation: Object.freeze({
|
|
48
|
+
initialize(implementation, totalOptions) {
|
|
49
|
+
const [restOptions, entityOptions] = AVStantso.Dialog.Entity.Options.Mixed.extract(totalOptions);
|
|
50
|
+
implementation.entityOptions = entityOptions;
|
|
51
|
+
return restOptions;
|
|
52
|
+
},
|
|
53
|
+
show(implementation, ...params) {
|
|
54
|
+
if (implementation.state)
|
|
55
|
+
throw new AVStantso_InvalidStateError(this, 'state', `${Object.getPrototypeOf(implementation).constructor.name} instance already showed`);
|
|
56
|
+
const executerOpts = AVStantso.Dialog.Executer.Options.is(params[0])
|
|
57
|
+
? params[0]
|
|
58
|
+
: { entity: params[0], params: params[1], options: params[2] };
|
|
59
|
+
const options = Object.assign({}, implementation.entityOptions, executerOpts.options);
|
|
60
|
+
const { override, converter } = options;
|
|
61
|
+
let entity = executerOpts.entity || options.entity;
|
|
62
|
+
if (JS.is.object(entity))
|
|
63
|
+
entity = { ...entity };
|
|
64
|
+
if (override)
|
|
65
|
+
entity = Perform(override, entity);
|
|
66
|
+
implementation.state = {
|
|
67
|
+
entity: converter
|
|
68
|
+
? converter.from(entity)
|
|
69
|
+
: entity,
|
|
70
|
+
params: executerOpts.params,
|
|
71
|
+
options
|
|
72
|
+
};
|
|
73
|
+
if (implementation._showed)
|
|
74
|
+
implementation._showed();
|
|
75
|
+
},
|
|
76
|
+
hide(implementation, canceled) {
|
|
77
|
+
try {
|
|
78
|
+
if (!implementation.state)
|
|
79
|
+
return;
|
|
80
|
+
if (implementation._hiding)
|
|
81
|
+
implementation._hiding(canceled);
|
|
82
|
+
const { options } = implementation.state;
|
|
83
|
+
if (canceled)
|
|
84
|
+
return 'rejectedValue' in options ? options.rejectedValue : null;
|
|
85
|
+
if ('resolvedValue' in options)
|
|
86
|
+
return options.resolvedValue;
|
|
87
|
+
const entity = options.converter
|
|
88
|
+
? options.converter.to(implementation.state.entity)
|
|
89
|
+
: implementation.state.entity;
|
|
90
|
+
return undefined === entity ? true : entity;
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
implementation.state = undefined;
|
|
94
|
+
if (implementation._hided)
|
|
95
|
+
implementation._hided();
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
async execute(implementation, ...params) {
|
|
99
|
+
this.show(implementation, ...params);
|
|
100
|
+
return new Promise(((resolve, reject) => Object.assign(implementation.state, { resolve, reject })).bind(this))
|
|
101
|
+
.then(() => true, () => false)
|
|
102
|
+
.then((confirmed) => this.hide(implementation, !confirmed));
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
AVStantso.Dialog = avstantso._reg.Dialog(DialogFactory);
|
|
108
|
+
})(AVStantso$1 || (AVStantso$1 = {}));
|
|
109
|
+
|
|
110
|
+
var Dialog = AVStantso.Dialog;
|
|
111
|
+
|
|
112
|
+
exports.Dialog = Dialog;
|
|
113
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/_global/_register.ts","../src/export.ts"],"sourcesContent":["namespace AVStantso {\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n\n //#region short types\n type TypeMap = Dialog.TypeMap;\n namespace TypeMap {\n export type Def = Dialog.TypeMap.Def;\n }\n type Internal<TTypeMap extends TypeMap> = Dialog.TypeMap.Internal<TTypeMap>;\n type External<TTypeMap extends TypeMap> = Dialog.TypeMap.External<TTypeMap>;\n type Params<TTypeMap extends TypeMap> = Dialog.TypeMap.Params<TTypeMap>;\n //#endregion\n\n const DialogEntityOptionsMixedKeys = [\n 'entity',\n 'defaults',\n 'converter',\n 'resolvedValue',\n 'rejectedValue'\n ] as const;\n\n export namespace Dialog {\n export type TypeMap = {\n Internal?: unknown;\n External?: unknown;\n Params?: unknown;\n };\n\n export namespace TypeMap {\n //#region Meta\n type _Meta<\n TTypeMap extends TypeMap = TypeMap,\n TDef extends object = object\n > = {\n TypeMap: TTypeMap;\n Def: TDef;\n };\n\n export type Meta = _Meta;\n\n export namespace Meta {\n //#region Extends\n type _ExtendsTypeMap<TTypeMap extends object> = TS.Merge<\n Meta['TypeMap'],\n TTypeMap\n >;\n\n type _ExtendsMergedBaseDef<\n TTypeMap extends object,\n TMTM extends _ExtendsTypeMap<TTypeMap> = _ExtendsTypeMap<TTypeMap>,\n TMTMRq extends Pick<TMTM, TS.RequiredKeys<TMTM>> = Pick<\n TMTM,\n TS.RequiredKeys<TMTM>\n >\n > = TS.Merge<TMTMRq, Meta['Def']>;\n\n type _ExtendsDefCondition<TTypeMap extends object> = Partial<\n _ExtendsMergedBaseDef<TTypeMap>\n >;\n\n type _ExtendsDef<\n TTypeMap extends object,\n TDef extends _ExtendsDefCondition<TTypeMap>\n > = TS.Merge<_ExtendsMergedBaseDef<TTypeMap>, TDef>;\n\n type _Extends<\n TTypeMap extends object,\n TDef extends _ExtendsDefCondition<TTypeMap>\n > = {\n TypeMap: _ExtendsTypeMap<TTypeMap>;\n Def: _ExtendsDef<TTypeMap, TDef>;\n };\n\n /**\n * @example\n * type e = Extends<{X: number}>;\n * type g = GetTypeMap<e>;\n * type d = Def<e>;\n */\n export type Extends<\n TTypeMap extends object,\n TDef extends _ExtendsDefCondition<TTypeMap> = object\n > = _Extends<TTypeMap, TDef>;\n //#endregion\n }\n //#endregion\n\n type _GetTypeMap<T extends Meta | TypeMap> = T extends Meta\n ? T['TypeMap']\n : T extends TypeMap\n ? T\n : never;\n\n export type Def<TMeta extends Meta = Meta> = TMeta['Def'];\n\n //#region Internal\n type _Internal<TTypeMap extends TypeMap> = TTypeMap extends {\n Internal: unknown;\n }\n ? TTypeMap['Internal']\n : boolean; // ok — true, cancel — false\n\n export type Internal<T extends Meta | TypeMap> = _Internal<_GetTypeMap<T>>;\n //#endregion\n\n //#region External\n type _External<TTypeMap extends TypeMap> = TTypeMap extends {\n External: unknown;\n }\n ? TTypeMap['External']\n : _Internal<TTypeMap>;\n export type External<T extends Meta | TypeMap> = _External<_GetTypeMap<T>>;\n //#endregion\n\n //#region Params\n type _Params<TTypeMap extends TypeMap> = TTypeMap extends {\n Params: unknown;\n }\n ? TTypeMap['Params']\n : never;\n export type Params<T extends Meta | TypeMap> = _Params<_GetTypeMap<T>>;\n //#endregion\n }\n\n export namespace Entity {\n export type IsObject<TTypeMap extends TypeMap, TTrue, TFalse> =\n Internal<TTypeMap> extends object ? TTrue : TFalse;\n\n export type Converter<TTypeMap extends TypeMap = TypeMap.Def> = {\n from(external: External<TTypeMap>): Internal<TTypeMap>;\n to(internal: Internal<TTypeMap>): External<TTypeMap>;\n };\n\n export namespace Options {\n export type Common<TTypeMap extends TypeMap = TypeMap.Def> = {\n rejectedValue?: External<TTypeMap>;\n };\n\n export type Object<TTypeMap extends TypeMap = TypeMap.Def> = {\n entity?: External<TTypeMap>;\n defaults?: Partial<Internal<TTypeMap>>;\n override?: Perform<External<TTypeMap>, [entity?: External<TTypeMap>]>;\n converter?: Converter<TTypeMap>;\n };\n\n export type NonObject<TTypeMap extends TypeMap = TypeMap.Def> = {\n resolvedValue?: External<TTypeMap>;\n };\n\n export type Mixed<TTypeMap extends TypeMap = TypeMap.Def> =\n Common<TTypeMap> & Object<TTypeMap> & NonObject<TTypeMap>;\n\n export type Detected<TTypeMap extends TypeMap = TypeMap.Def> =\n Common<TTypeMap>\n & IsObject<TTypeMap, Object<TTypeMap>, NonObject<TTypeMap>>;\n\n export type Ejected<\n TTypeMap extends TypeMap = TypeMap.Def,\n TTotalOptions extends Mixed<TTypeMap> = Mixed<TTypeMap>\n > = Omit<TTotalOptions, keyof Mixed<TTypeMap>>;\n }\n\n export type Options<\n TTypeMap extends TypeMap = TypeMap.Def,\n TMixed extends boolean = false\n > = TMixed extends true\n ? Options.Detected<TTypeMap>\n : Options.Mixed<TTypeMap>;\n }\n\n export namespace Executer {\n export type Options<TTypeMap extends TypeMap> = {\n entity?: External<TTypeMap>;\n params?: Params<TTypeMap>;\n options?: Dialog.Entity.Options<TTypeMap>;\n };\n\n export type OverloadParams<TTypeMap extends TypeMap> =\n External<TTypeMap> extends boolean\n ? []\n : External<TTypeMap> extends\n | { entity: unknown }\n | { params: unknown }\n | { options: unknown }\n ? [options: Executer.Options<TTypeMap>]\n : | [options: Executer.Options<TTypeMap>]\n | [\n entity?: External<TTypeMap>,\n params?: Params<TTypeMap>,\n options?: Dialog.Entity.Options<TTypeMap>\n ];\n }\n\n export type State<TTypeMap extends TypeMap = TypeMap.Def> = {\n entity?: Internal<TTypeMap>;\n params?: Params<TTypeMap>;\n options?: Dialog.Entity.Options.Mixed<TTypeMap>;\n resolve?: (value?: unknown) => void;\n reject?: (reason?: any) => void;\n };\n\n export type Implementation<TTypeMap extends TypeMap = TypeMap.Def> = {\n entityOptions: Entity.Options.Mixed<TTypeMap>;\n state: State<TTypeMap>;\n\n _showed?(): void;\n _hiding?(canceled?: boolean): void;\n _hided?(): void;\n };\n }\n\n export interface Dialog<TTypeMap extends TypeMap = TypeMap.Def> {\n show(...params: Dialog.Executer.OverloadParams<TTypeMap>): void;\n hide(canceled?: boolean): External<TTypeMap>;\n execute(\n ...params: Dialog.Executer.OverloadParams<TTypeMap>\n ): Promise<External<TTypeMap>>;\n }\n\n function DialogFactory({ JS, Perform }: { JS?: Code.JS, Perform?: Code.Perform } ) {\n return {\n Entity: Object.freeze({\n Options: Object.freeze({\n Mixed: Object.freeze({\n Keys: Object.freeze(DialogEntityOptionsMixedKeys),\n\n extract<\n TTypeMap extends TypeMap,\n TTotalOptions extends Dialog.Entity.Options.Mixed<TTypeMap>\n >(\n totalOptions: TTotalOptions\n ): [\n Dialog.Entity.Options.Ejected<TTypeMap>,\n Dialog.Entity.Options.Mixed<TTypeMap>\n ] {\n const r: any = [{ ...totalOptions }, {}];\n\n for (const key of this.Keys)\n if (key in r[0]) {\n r[1][key] = r[0][key];\n delete r[1][key];\n }\n\n return r;\n }\n })\n })\n }),\n\n Executer: Object.freeze({\n Options: Object.freeze({\n is<TTypeMap extends TypeMap = TypeMap.Def>(\n candidate: unknown\n ): candidate is Dialog.Executer.Options<TTypeMap> {\n return (\n candidate\n && JS.is.object(candidate)\n && ('entity' in candidate\n || 'params' in candidate\n || 'options' in candidate)\n );\n }\n })\n }),\n\n Implementation: Object.freeze({\n initialize<\n TTypeMap extends TypeMap,\n TTotalOptions extends Dialog.Entity.Options.Mixed<TTypeMap>\n >(\n implementation: Dialog.Implementation<TTypeMap>,\n totalOptions: TTotalOptions\n ): Dialog.Entity.Options.Ejected<TTypeMap> {\n const [restOptions, entityOptions] = Dialog.Entity.Options.Mixed.extract<\n TTypeMap,\n TTotalOptions\n >(totalOptions);\n\n implementation.entityOptions = entityOptions;\n\n return restOptions;\n },\n\n show<TTypeMap extends TypeMap>(\n implementation: Dialog.Implementation<TTypeMap>,\n ...params: Dialog.Executer.OverloadParams<TTypeMap> | any[]\n ): void {\n if (implementation.state)\n throw new AVStantso_InvalidStateError(\n this,\n 'state',\n `${\n Object.getPrototypeOf(implementation).constructor.name\n } instance already showed`\n );\n\n const executerOpts: Dialog.Executer.Options<TTypeMap> =\n Dialog.Executer.Options.is<TTypeMap>(params[0])\n ? params[0]\n : { entity: params[0], params: params[1], options: params[2] };\n\n const options: Dialog.Entity.Options.Mixed<TTypeMap> = Object.assign(\n {},\n implementation.entityOptions,\n executerOpts.options\n );\n\n const { override, converter } = options;\n\n let entity: External<TTypeMap> = executerOpts.entity || options.entity;\n if (JS.is.object(entity)) entity = { ...entity };\n if (override) entity = Perform(override, entity);\n\n implementation.state = {\n entity: converter\n ? converter.from(entity)\n : (entity as Internal<TTypeMap>),\n params: executerOpts.params,\n options\n };\n\n if (implementation._showed) implementation._showed();\n },\n\n hide<TTypeMap extends TypeMap>(\n implementation: Dialog.Implementation<TTypeMap>,\n canceled?: boolean\n ): External<TTypeMap> {\n try {\n if (!implementation.state) return;\n\n if (implementation._hiding) implementation._hiding(canceled);\n\n const { options } = implementation.state;\n\n if (canceled)\n return 'rejectedValue' in options ? options.rejectedValue : null;\n\n if ('resolvedValue' in options) return options.resolvedValue;\n\n const entity = options.converter\n ? options.converter.to(implementation.state.entity)\n : (implementation.state.entity as External<TTypeMap>);\n\n return undefined === entity ? (true as External<TTypeMap>) : entity;\n } finally {\n implementation.state = undefined;\n if (implementation._hided) implementation._hided();\n }\n },\n\n async execute<TTypeMap extends TypeMap>(\n implementation: Dialog.Implementation<TTypeMap>,\n ...params: Dialog.Executer.OverloadParams<TTypeMap> | any[]\n ): Promise<External<TTypeMap>> {\n this.show(implementation, ...params);\n\n return new Promise(\n ((\n resolve?: (value: unknown) => void,\n reject?: (reason?: any) => void\n ) => Object.assign(implementation.state, { resolve, reject })).bind(\n this\n )\n )\n .then(\n () => true,\n () => false\n )\n .then((confirmed) => this.hide(implementation, !confirmed));\n }\n })\n };\n }\n\n export interface Code {\n /**\n * @summary Dialog utilities\n */\n Dialog: ReturnType<typeof DialogFactory>;\n }\n\n export const Dialog = avstantso._reg.Dialog(DialogFactory);\n}\n","import Dialog = AVStantso.Dialog;\n\nexport {\n Dialog\n};\n"],"names":["AVStantso"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@avstantso/utils-dialog",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"author": "avstantso",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.2.2",
|
|
6
6
|
"description": "AVStantso framework utils: Dialog",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"Dialog"
|
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
"test": "NODE_ENV=test jest --coverage"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@avstantso/concepts": "1.
|
|
27
|
-
"@avstantso/core": "1.1
|
|
28
|
-
"@avstantso/errors": "1.1
|
|
29
|
-
"@avstantso/js": "1.
|
|
30
|
-
"@avstantso/std-ext": "1.1
|
|
31
|
-
"@avstantso/ts": "1.
|
|
26
|
+
"@avstantso/concepts": "1.2.2",
|
|
27
|
+
"@avstantso/core": "1.2.1",
|
|
28
|
+
"@avstantso/errors": "1.2.1",
|
|
29
|
+
"@avstantso/js": "1.2.2",
|
|
30
|
+
"@avstantso/std-ext": "1.2.1",
|
|
31
|
+
"@avstantso/ts": "1.3.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@avstantso/dev-basic": "1.0.0"
|