@apia/execution-react 4.0.16 → 4.0.18
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/dist/index.d.ts +20 -6
- package/dist/index.js +38 -4
- package/dist/index.js.map +1 -1
- package/package.json +7 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import { CustomComponent } from '@apia/execution';
|
|
1
|
+
import * as react from 'react';
|
|
3
2
|
import { FC } from 'react';
|
|
3
|
+
import { CustomComponent } from '@apia/execution';
|
|
4
4
|
|
|
5
5
|
declare abstract class AbstractCustomComponent {
|
|
6
|
-
|
|
6
|
+
private customComponent;
|
|
7
7
|
private intermediateStrings;
|
|
8
8
|
private intermediatesIndexed;
|
|
9
9
|
constructor();
|
|
@@ -129,7 +129,21 @@ declare abstract class AbstractCustomComponent {
|
|
|
129
129
|
*/
|
|
130
130
|
protected confirmValue(attName: string, value: any, index: number): Promise<void>;
|
|
131
131
|
protected abstract Component: FC;
|
|
132
|
-
|
|
132
|
+
protected abstract init(): unknown;
|
|
133
|
+
Renderer: () => react.JSX.Element;
|
|
134
|
+
/**
|
|
135
|
+
* Custom component methods
|
|
136
|
+
*/
|
|
137
|
+
protected get isLoading(): Readonly<Readonly<boolean>>;
|
|
138
|
+
protected getAdditional<T>(): T;
|
|
139
|
+
protected fireEvent(evtName: string): void;
|
|
140
|
+
protected getProperty(prpName: string): any;
|
|
141
|
+
protected getStringValue(attName: string): string;
|
|
142
|
+
protected getValue(attName: string, index?: number): any;
|
|
143
|
+
protected setValue(attName: string, value: any, index: number): void;
|
|
144
|
+
protected setStringValue(attName: string, value: string): void;
|
|
145
|
+
protected setProperty(prpName: string, value: any): void;
|
|
146
|
+
protected sendMessage(payload: any): void;
|
|
133
147
|
}
|
|
134
148
|
|
|
135
149
|
type CusCmpConstructor = {
|
|
@@ -138,7 +152,7 @@ type CusCmpConstructor = {
|
|
|
138
152
|
declare class PluginLoader {
|
|
139
153
|
private requested;
|
|
140
154
|
private emitter;
|
|
141
|
-
static getInstance(): PluginLoader
|
|
155
|
+
static getInstance(): Promise<PluginLoader>;
|
|
142
156
|
dispatchCustomComponent(name: string, component: CusCmpConstructor): void;
|
|
143
157
|
getCustomComponent(name: string): () => Promise<CusCmpConstructor>;
|
|
144
158
|
}
|
|
@@ -147,5 +161,5 @@ declare class Plugin {
|
|
|
147
161
|
constructor(name: string, fc: CusCmpConstructor);
|
|
148
162
|
}
|
|
149
163
|
|
|
150
|
-
export { AbstractCustomComponent, Plugin, PluginLoader };
|
|
164
|
+
export { AbstractCustomComponent, type CusCmpConstructor, Plugin, PluginLoader };
|
|
151
165
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Mutex, StatefulEmitter } from '@apia/util';
|
|
2
|
-
import { jsxs, Fragment, jsx } from '
|
|
2
|
+
import { jsxs, Fragment, jsx } from '@apia/theme/jsx-runtime';
|
|
3
3
|
import { Box } from '@apia/theme';
|
|
4
4
|
import { makeObservable, observable } from 'mobx';
|
|
5
5
|
|
|
@@ -21,8 +21,8 @@ class PluginLoader {
|
|
|
21
21
|
__publicField$1(this, "requested", /* @__PURE__ */ new Set());
|
|
22
22
|
__publicField$1(this, "emitter", new StatefulEmitter());
|
|
23
23
|
}
|
|
24
|
-
static getInstance() {
|
|
25
|
-
m.runExclusive(async () => {
|
|
24
|
+
static async getInstance() {
|
|
25
|
+
await m.runExclusive(async () => {
|
|
26
26
|
if (!window.loader) {
|
|
27
27
|
window.loader = new PluginLoader();
|
|
28
28
|
}
|
|
@@ -49,7 +49,7 @@ class PluginLoader {
|
|
|
49
49
|
|
|
50
50
|
class Plugin {
|
|
51
51
|
constructor(name, fc) {
|
|
52
|
-
PluginLoader.getInstance().dispatchCustomComponent(name, fc);
|
|
52
|
+
PluginLoader.getInstance().then((c) => c.dispatchCustomComponent(name, fc));
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -88,6 +88,7 @@ class AbstractCustomComponent {
|
|
|
88
88
|
}
|
|
89
89
|
setCustomComponent(cc) {
|
|
90
90
|
this.customComponent = cc;
|
|
91
|
+
this.init();
|
|
91
92
|
}
|
|
92
93
|
/**
|
|
93
94
|
* The intermediate values are used to hold attribute values while they are being edited.
|
|
@@ -228,6 +229,39 @@ class AbstractCustomComponent {
|
|
|
228
229
|
await this.customComponent?.setValue(attName, value, index);
|
|
229
230
|
delete this.intermediatesIndexed[attName];
|
|
230
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* Custom component methods
|
|
234
|
+
*/
|
|
235
|
+
get isLoading() {
|
|
236
|
+
return this.customComponent.state.isLoading;
|
|
237
|
+
}
|
|
238
|
+
getAdditional() {
|
|
239
|
+
return this.customComponent.getAdditional();
|
|
240
|
+
}
|
|
241
|
+
fireEvent(evtName) {
|
|
242
|
+
this.customComponent.fireEvent(evtName);
|
|
243
|
+
}
|
|
244
|
+
getProperty(prpName) {
|
|
245
|
+
return this.customComponent.getProperty(prpName);
|
|
246
|
+
}
|
|
247
|
+
getStringValue(attName) {
|
|
248
|
+
return this.customComponent.getStringValue(attName);
|
|
249
|
+
}
|
|
250
|
+
getValue(attName, index = 0) {
|
|
251
|
+
return this.customComponent.getValue(attName, index) || 0;
|
|
252
|
+
}
|
|
253
|
+
setValue(attName, value, index) {
|
|
254
|
+
this.customComponent.setValue(attName, value, index);
|
|
255
|
+
}
|
|
256
|
+
setStringValue(attName, value) {
|
|
257
|
+
this.customComponent.setStringValue(attName, value);
|
|
258
|
+
}
|
|
259
|
+
setProperty(prpName, value) {
|
|
260
|
+
this.customComponent.setProperty(prpName, value);
|
|
261
|
+
}
|
|
262
|
+
sendMessage(payload) {
|
|
263
|
+
this.customComponent.sendMessage(payload);
|
|
264
|
+
}
|
|
231
265
|
}
|
|
232
266
|
|
|
233
267
|
export { AbstractCustomComponent, Plugin, PluginLoader };
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/plugins/PluginLoader.ts","../src/plugins/Plugin.ts","../src/customComponents/AbstractCustomComponent.tsx"],"sourcesContent":["import { Mutex, StatefulEmitter } from '@apia/util';\r\nimport { AbstractCustomComponent } from '../customComponents/AbstractCustomComponent';\r\n\r\nfunction loadComponent(cmpName: string) {\r\n const newScript = document.createElement('script');\r\n newScript.src = `${(window as any).CONTEXT}/react/customComponents/${cmpName}/index.js`;\r\n newScript.defer = true;\r\n\r\n document.head.append(newScript);\r\n}\r\n\r\nconst m = new Mutex();\r\n\r\nexport type CusCmpConstructor = { new (): AbstractCustomComponent };\r\n\r\nexport class PluginLoader {\r\n private requested = new Set<string>();\r\n private emitter = new StatefulEmitter<{\r\n [key: string]: CusCmpConstructor;\r\n }>();\r\n\r\n public static getInstance() {\r\n m.runExclusive(async () => {\r\n if (!(window as any).loader) {\r\n (window as any).loader = new PluginLoader();\r\n }\r\n });\r\n\r\n return (window as any).loader as PluginLoader;\r\n }\r\n\r\n public dispatchCustomComponent(name: string, component: CusCmpConstructor) {\r\n this.emitter.emit(name, component);\r\n }\r\n\r\n public getCustomComponent(name: string) {\r\n m.runExclusive(async () => {\r\n if (!this.requested.has(name)) {\r\n this.requested.add(name);\r\n loadComponent(name);\r\n }\r\n });\r\n\r\n return () =>\r\n new Promise<CusCmpConstructor>((resolve) => {\r\n this.emitter.once(name, (component) => {\r\n resolve(component);\r\n });\r\n });\r\n }\r\n}\r\n","import { CusCmpConstructor, PluginLoader } from './PluginLoader';\r\n\r\nexport class Plugin {\r\n constructor(name: string, fc: CusCmpConstructor) {\r\n PluginLoader.getInstance().dispatchCustomComponent(name, fc);\r\n }\r\n}\r\n","import { CustomComponent } from '@apia/execution';\r\nimport { Box } from '@apia/theme';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { FC } from 'react';\r\n\r\nexport abstract class AbstractCustomComponent {\r\n protected customComponent: CustomComponent | null = null;\r\n\r\n private intermediateStrings: Record<string, any> = {};\r\n private intermediatesIndexed: Record<string, Record<number, any>> = {};\r\n\r\n constructor() {\r\n makeObservable<\r\n AbstractCustomComponent,\r\n 'intermediateStrings' | 'intermediatesIndexed'\r\n >(this, {\r\n intermediatesIndexed: observable,\r\n intermediateStrings: observable,\r\n });\r\n }\r\n\r\n public setCustomComponent(cc: CustomComponent) {\r\n this.customComponent = cc;\r\n }\r\n\r\n /**\r\n * The intermediate values are used to hold attribute values while they are being edited.\r\n *\r\n * The setIntermediate... methods hold the values in local variables until the confirmIntermediate...\r\n * methods are called.\r\n * \r\n * @example\r\n * \r\n * <Input\r\n value={this.getIntermediateString('name')}\r\n disabled={cc.state.isLoading}\r\n onChange={(ev) => {\r\n this.setIntermediateStringValue('name', ev.target.value);\r\n }}\r\n onBlur={(ev) => {\r\n this.confirmIntermediateString('name', ev.target.value);\r\n }}\r\n />\r\n */\r\n protected getIntermediateString(attName: string) {\r\n return (\r\n this.intermediateStrings[attName] ??\r\n this.customComponent?.getStringValue(attName)\r\n );\r\n }\r\n\r\n /**\r\n * The intermediate values are used to hold attribute values while they are being edited.\r\n *\r\n * The setIntermediate... methods hold the values in local variables until the confirmIntermediate...\r\n * methods are called.\r\n * \r\n * @example\r\n * \r\n * <Input\r\n value={this.getIntermediateString('name')}\r\n disabled={cc.state.isLoading}\r\n onChange={(ev) => {\r\n this.setIntermediateStringValue('name', ev.target.value);\r\n }}\r\n onBlur={(ev) => {\r\n this.confirmIntermediateString('name', ev.target.value);\r\n }}\r\n />\r\n */\r\n protected getIntermediate(attName: string, index: number) {\r\n return (\r\n this.intermediatesIndexed[attName]?.[index] ??\r\n this.customComponent?.getValue(attName, index)\r\n );\r\n }\r\n\r\n /**\r\n * The intermediate values are used to hold attribute values while they are being edited.\r\n *\r\n * The setIntermediate... methods hold the values in local variables until the confirmIntermediate...\r\n * methods are called.\r\n * \r\n * @example\r\n * \r\n * <Input\r\n value={this.getIntermediateString('name')}\r\n disabled={cc.state.isLoading}\r\n onChange={(ev) => {\r\n this.setIntermediateStringValue('name', ev.target.value);\r\n }}\r\n onBlur={(ev) => {\r\n this.confirmIntermediateString('name', ev.target.value);\r\n }}\r\n />\r\n */\r\n protected setIntermediateStringValue(attName: string, value: string) {\r\n delete this.intermediatesIndexed[attName];\r\n this.intermediateStrings[attName] = value;\r\n }\r\n\r\n /**\r\n * The intermediate values are used to hold attribute values while they are being edited.\r\n *\r\n * The setIntermediate... methods hold the values in local variables until the confirmIntermediate...\r\n * methods are called.\r\n * \r\n * @example\r\n * \r\n * <Input\r\n value={this.getIntermediateString('name')}\r\n disabled={cc.state.isLoading}\r\n onChange={(ev) => {\r\n this.setIntermediateStringValue('name', ev.target.value);\r\n }}\r\n onBlur={(ev) => {\r\n this.confirmIntermediateString('name', ev.target.value);\r\n }}\r\n />\r\n */\r\n protected setIntermediateValue(attName: string, value: any, index: number) {\r\n delete this.intermediateStrings[attName];\r\n if (!this.intermediatesIndexed[attName]) {\r\n this.intermediatesIndexed[attName] = {};\r\n }\r\n this.intermediatesIndexed[attName][index] = value;\r\n }\r\n\r\n /**\r\n * The intermediate values are used to hold attribute values while they are being edited.\r\n *\r\n * The setIntermediate... methods hold the values in local variables until the confirmIntermediate...\r\n * methods are called.\r\n * \r\n * @example\r\n * \r\n * <Input\r\n value={this.getIntermediateString('name')}\r\n disabled={cc.state.isLoading}\r\n onChange={(ev) => {\r\n this.setIntermediateStringValue('name', ev.target.value);\r\n }}\r\n onBlur={(ev) => {\r\n this.confirmIntermediateString('name', ev.target.value);\r\n }}\r\n />\r\n */\r\n protected async confirmIntermediateString(attName: string, value: string) {\r\n await this.customComponent!.setStringValue(attName, value);\r\n delete this.intermediateStrings[attName];\r\n }\r\n\r\n /**\r\n * The intermediate values are used to hold attribute values while they are being edited.\r\n *\r\n * The setIntermediate... methods hold the values in local variables until the confirmIntermediate...\r\n * methods are called.\r\n * \r\n * @example\r\n * \r\n * <Input\r\n value={this.getIntermediateString('name')}\r\n disabled={cc.state.isLoading}\r\n onChange={(ev) => {\r\n this.setIntermediateStringValue('name', ev.target.value);\r\n }}\r\n onBlur={(ev) => {\r\n this.confirmIntermediateString('name', ev.target.value);\r\n }}\r\n />\r\n */\r\n protected async confirmValue(attName: string, value: any, index: number) {\r\n await this.customComponent?.setValue(attName, value, index);\r\n delete this.intermediatesIndexed[attName];\r\n }\r\n\r\n protected abstract Component: FC;\r\n\r\n public Renderer = () => {\r\n return (\r\n <>\r\n <this.Component />\r\n <Box\r\n ref={(el) => {\r\n if (el) {\r\n this.customComponent!.form.markFieldAsRendered(\r\n this.customComponent!.definition.id,\r\n );\r\n }\r\n }}\r\n />\r\n </>\r\n );\r\n };\r\n}\r\n"],"names":["__publicField"],"mappings":";;;;;;;;;;;AAGA,SAAS,cAAc,OAAiB,EAAA;AACtC,EAAM,MAAA,SAAA,GAAY,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA,CAAA;AACjD,EAAA,SAAA,CAAU,GAAM,GAAA,CAAA,EAAI,MAAe,CAAA,OAAO,2BAA2B,OAAO,CAAA,SAAA,CAAA,CAAA;AAC5E,EAAA,SAAA,CAAU,KAAQ,GAAA,IAAA,CAAA;AAElB,EAAS,QAAA,CAAA,IAAA,CAAK,OAAO,SAAS,CAAA,CAAA;AAChC,CAAA;AAEA,MAAM,CAAA,GAAI,IAAI,KAAM,EAAA,CAAA;AAIb,MAAM,YAAa,CAAA;AAAA,EAAnB,WAAA,GAAA;AACL,IAAQA,eAAA,CAAA,IAAA,EAAA,WAAA,sBAAgB,GAAY,EAAA,CAAA,CAAA;AACpC,IAAQA,eAAA,CAAA,IAAA,EAAA,SAAA,EAAU,IAAI,eAEnB,EAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAEH,OAAc,WAAc,GAAA;AAC1B,IAAA,CAAA,CAAE,aAAa,YAAY;AACzB,MAAI,IAAA,CAAE,OAAe,MAAQ,EAAA;AAC3B,QAAC,MAAA,CAAe,MAAS,GAAA,IAAI,YAAa,EAAA,CAAA;AAAA,OAC5C;AAAA,KACD,CAAA,CAAA;AAED,IAAA,OAAQ,MAAe,CAAA,MAAA,CAAA;AAAA,GACzB;AAAA,EAEO,uBAAA,CAAwB,MAAc,SAA8B,EAAA;AACzE,IAAK,IAAA,CAAA,OAAA,CAAQ,IAAK,CAAA,IAAA,EAAM,SAAS,CAAA,CAAA;AAAA,GACnC;AAAA,EAEO,mBAAmB,IAAc,EAAA;AACtC,IAAA,CAAA,CAAE,aAAa,YAAY;AACzB,MAAA,IAAI,CAAC,IAAA,CAAK,SAAU,CAAA,GAAA,CAAI,IAAI,CAAG,EAAA;AAC7B,QAAK,IAAA,CAAA,SAAA,CAAU,IAAI,IAAI,CAAA,CAAA;AACvB,QAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AAAA,OACpB;AAAA,KACD,CAAA,CAAA;AAED,IAAA,OAAO,MACL,IAAI,OAA2B,CAAA,CAAC,OAAY,KAAA;AAC1C,MAAA,IAAA,CAAK,OAAQ,CAAA,IAAA,CAAK,IAAM,EAAA,CAAC,SAAc,KAAA;AACrC,QAAA,OAAA,CAAQ,SAAS,CAAA,CAAA;AAAA,OAClB,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACL;AACF;;AChDO,MAAM,MAAO,CAAA;AAAA,EAClB,WAAA,CAAY,MAAc,EAAuB,EAAA;AAC/C,IAAA,YAAA,CAAa,WAAY,EAAA,CAAE,uBAAwB,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAAA,GAC7D;AACF;;;;;;;;ACDO,MAAe,uBAAwB,CAAA;AAAA,EAM5C,WAAc,GAAA;AALd,IAAA,aAAA,CAAA,IAAA,EAAU,iBAA0C,EAAA,IAAA,CAAA,CAAA;AAEpD,IAAA,aAAA,CAAA,IAAA,EAAQ,uBAA2C,EAAC,CAAA,CAAA;AACpD,IAAA,aAAA,CAAA,IAAA,EAAQ,wBAA4D,EAAC,CAAA,CAAA;AAyKrE,IAAA,aAAA,CAAA,IAAA,EAAO,YAAW,MAAM;AACtB,MAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,IAAA,CAAK,WAAL,EAAe,CAAA;AAAA,wBAChB,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,CAAC,EAAO,KAAA;AACX,cAAA,IAAI,EAAI,EAAA;AACN,gBAAA,IAAA,CAAK,gBAAiB,IAAK,CAAA,mBAAA;AAAA,kBACzB,IAAA,CAAK,gBAAiB,UAAW,CAAA,EAAA;AAAA,iBACnC,CAAA;AAAA,eACF;AAAA,aACF;AAAA,WAAA;AAAA,SACF;AAAA,OACF,EAAA,CAAA,CAAA;AAAA,KAEJ,CAAA,CAAA;AArLE,IAAA,cAAA,CAGE,IAAM,EAAA;AAAA,MACN,oBAAsB,EAAA,UAAA;AAAA,MACtB,mBAAqB,EAAA,UAAA;AAAA,KACtB,CAAA,CAAA;AAAA,GACH;AAAA,EAEO,mBAAmB,EAAqB,EAAA;AAC7C,IAAA,IAAA,CAAK,eAAkB,GAAA,EAAA,CAAA;AAAA,GACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBU,sBAAsB,OAAiB,EAAA;AAC/C,IAAA,OACE,KAAK,mBAAoB,CAAA,OAAO,KAChC,IAAK,CAAA,eAAA,EAAiB,eAAe,OAAO,CAAA,CAAA;AAAA,GAEhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBU,eAAA,CAAgB,SAAiB,KAAe,EAAA;AACxD,IACE,OAAA,IAAA,CAAK,oBAAqB,CAAA,OAAO,CAAI,GAAA,KAAK,KAC1C,IAAK,CAAA,eAAA,EAAiB,QAAS,CAAA,OAAA,EAAS,KAAK,CAAA,CAAA;AAAA,GAEjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBU,0BAAA,CAA2B,SAAiB,KAAe,EAAA;AACnE,IAAO,OAAA,IAAA,CAAK,qBAAqB,OAAO,CAAA,CAAA;AACxC,IAAK,IAAA,CAAA,mBAAA,CAAoB,OAAO,CAAI,GAAA,KAAA,CAAA;AAAA,GACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBU,oBAAA,CAAqB,OAAiB,EAAA,KAAA,EAAY,KAAe,EAAA;AACzE,IAAO,OAAA,IAAA,CAAK,oBAAoB,OAAO,CAAA,CAAA;AACvC,IAAA,IAAI,CAAC,IAAA,CAAK,oBAAqB,CAAA,OAAO,CAAG,EAAA;AACvC,MAAK,IAAA,CAAA,oBAAA,CAAqB,OAAO,CAAA,GAAI,EAAC,CAAA;AAAA,KACxC;AACA,IAAA,IAAA,CAAK,oBAAqB,CAAA,OAAO,CAAE,CAAA,KAAK,CAAI,GAAA,KAAA,CAAA;AAAA,GAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAgB,yBAA0B,CAAA,OAAA,EAAiB,KAAe,EAAA;AACxE,IAAA,MAAM,IAAK,CAAA,eAAA,CAAiB,cAAe,CAAA,OAAA,EAAS,KAAK,CAAA,CAAA;AACzD,IAAO,OAAA,IAAA,CAAK,oBAAoB,OAAO,CAAA,CAAA;AAAA,GACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAgB,YAAA,CAAa,OAAiB,EAAA,KAAA,EAAY,KAAe,EAAA;AACvE,IAAA,MAAM,IAAK,CAAA,eAAA,EAAiB,QAAS,CAAA,OAAA,EAAS,OAAO,KAAK,CAAA,CAAA;AAC1D,IAAO,OAAA,IAAA,CAAK,qBAAqB,OAAO,CAAA,CAAA;AAAA,GAC1C;AAoBF;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/plugins/PluginLoader.ts","../src/plugins/Plugin.ts","../src/customComponents/AbstractCustomComponent.tsx"],"sourcesContent":["import { Mutex, StatefulEmitter } from '@apia/util';\r\nimport { AbstractCustomComponent } from '../customComponents/AbstractCustomComponent';\r\n\r\nfunction loadComponent(cmpName: string) {\r\n const newScript = document.createElement('script');\r\n newScript.src = `${(window as any).CONTEXT}/react/customComponents/${cmpName}/index.js`;\r\n newScript.defer = true;\r\n\r\n document.head.append(newScript);\r\n}\r\n\r\nconst m = new Mutex();\r\n\r\nexport type CusCmpConstructor = { new (): AbstractCustomComponent };\r\n\r\nexport class PluginLoader {\r\n private requested = new Set<string>();\r\n private emitter = new StatefulEmitter<{\r\n [key: string]: CusCmpConstructor;\r\n }>();\r\n\r\n public static async getInstance() {\r\n await m.runExclusive(async () => {\r\n if (!(window as any).loader) {\r\n (window as any).loader = new PluginLoader();\r\n }\r\n });\r\n\r\n return (window as any).loader as PluginLoader;\r\n }\r\n\r\n public dispatchCustomComponent(name: string, component: CusCmpConstructor) {\r\n this.emitter.emit(name, component);\r\n }\r\n\r\n public getCustomComponent(name: string) {\r\n m.runExclusive(async () => {\r\n if (!this.requested.has(name)) {\r\n this.requested.add(name);\r\n loadComponent(name);\r\n }\r\n });\r\n\r\n return () =>\r\n new Promise<CusCmpConstructor>((resolve) => {\r\n this.emitter.once(name, (component) => {\r\n resolve(component);\r\n });\r\n });\r\n }\r\n}\r\n","import { CusCmpConstructor, PluginLoader } from './PluginLoader';\r\n\r\nexport class Plugin {\r\n constructor(name: string, fc: CusCmpConstructor) {\r\n PluginLoader.getInstance().then((c) => c.dispatchCustomComponent(name, fc));\r\n }\r\n}\r\n","import { CustomComponent } from '@apia/execution';\r\nimport { Box } from '@apia/theme';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { FC } from 'react';\r\n\r\nexport abstract class AbstractCustomComponent {\r\n private customComponent: CustomComponent | null = null;\r\n private intermediateStrings: Record<string, any> = {};\r\n private intermediatesIndexed: Record<string, Record<number, any>> = {};\r\n\r\n constructor() {\r\n makeObservable<\r\n AbstractCustomComponent,\r\n 'intermediateStrings' | 'intermediatesIndexed'\r\n >(this, {\r\n intermediatesIndexed: observable,\r\n intermediateStrings: observable,\r\n });\r\n }\r\n\r\n public setCustomComponent(cc: CustomComponent) {\r\n this.customComponent = cc;\r\n this.init();\r\n }\r\n\r\n /**\r\n * The intermediate values are used to hold attribute values while they are being edited.\r\n *\r\n * The setIntermediate... methods hold the values in local variables until the confirmIntermediate...\r\n * methods are called.\r\n * \r\n * @example\r\n * \r\n * <Input\r\n value={this.getIntermediateString('name')}\r\n disabled={cc.state.isLoading}\r\n onChange={(ev) => {\r\n this.setIntermediateStringValue('name', ev.target.value);\r\n }}\r\n onBlur={(ev) => {\r\n this.confirmIntermediateString('name', ev.target.value);\r\n }}\r\n />\r\n */\r\n protected getIntermediateString(attName: string) {\r\n return (\r\n this.intermediateStrings[attName] ??\r\n this.customComponent?.getStringValue(attName)\r\n );\r\n }\r\n\r\n /**\r\n * The intermediate values are used to hold attribute values while they are being edited.\r\n *\r\n * The setIntermediate... methods hold the values in local variables until the confirmIntermediate...\r\n * methods are called.\r\n * \r\n * @example\r\n * \r\n * <Input\r\n value={this.getIntermediateString('name')}\r\n disabled={cc.state.isLoading}\r\n onChange={(ev) => {\r\n this.setIntermediateStringValue('name', ev.target.value);\r\n }}\r\n onBlur={(ev) => {\r\n this.confirmIntermediateString('name', ev.target.value);\r\n }}\r\n />\r\n */\r\n protected getIntermediate(attName: string, index: number) {\r\n return (\r\n this.intermediatesIndexed[attName]?.[index] ??\r\n this.customComponent?.getValue(attName, index)\r\n );\r\n }\r\n\r\n /**\r\n * The intermediate values are used to hold attribute values while they are being edited.\r\n *\r\n * The setIntermediate... methods hold the values in local variables until the confirmIntermediate...\r\n * methods are called.\r\n * \r\n * @example\r\n * \r\n * <Input\r\n value={this.getIntermediateString('name')}\r\n disabled={cc.state.isLoading}\r\n onChange={(ev) => {\r\n this.setIntermediateStringValue('name', ev.target.value);\r\n }}\r\n onBlur={(ev) => {\r\n this.confirmIntermediateString('name', ev.target.value);\r\n }}\r\n />\r\n */\r\n protected setIntermediateStringValue(attName: string, value: string) {\r\n delete this.intermediatesIndexed[attName];\r\n this.intermediateStrings[attName] = value;\r\n }\r\n\r\n /**\r\n * The intermediate values are used to hold attribute values while they are being edited.\r\n *\r\n * The setIntermediate... methods hold the values in local variables until the confirmIntermediate...\r\n * methods are called.\r\n * \r\n * @example\r\n * \r\n * <Input\r\n value={this.getIntermediateString('name')}\r\n disabled={cc.state.isLoading}\r\n onChange={(ev) => {\r\n this.setIntermediateStringValue('name', ev.target.value);\r\n }}\r\n onBlur={(ev) => {\r\n this.confirmIntermediateString('name', ev.target.value);\r\n }}\r\n />\r\n */\r\n protected setIntermediateValue(attName: string, value: any, index: number) {\r\n delete this.intermediateStrings[attName];\r\n if (!this.intermediatesIndexed[attName]) {\r\n this.intermediatesIndexed[attName] = {};\r\n }\r\n this.intermediatesIndexed[attName][index] = value;\r\n }\r\n\r\n /**\r\n * The intermediate values are used to hold attribute values while they are being edited.\r\n *\r\n * The setIntermediate... methods hold the values in local variables until the confirmIntermediate...\r\n * methods are called.\r\n * \r\n * @example\r\n * \r\n * <Input\r\n value={this.getIntermediateString('name')}\r\n disabled={cc.state.isLoading}\r\n onChange={(ev) => {\r\n this.setIntermediateStringValue('name', ev.target.value);\r\n }}\r\n onBlur={(ev) => {\r\n this.confirmIntermediateString('name', ev.target.value);\r\n }}\r\n />\r\n */\r\n protected async confirmIntermediateString(attName: string, value: string) {\r\n await this.customComponent!.setStringValue(attName, value);\r\n delete this.intermediateStrings[attName];\r\n }\r\n\r\n /**\r\n * The intermediate values are used to hold attribute values while they are being edited.\r\n *\r\n * The setIntermediate... methods hold the values in local variables until the confirmIntermediate...\r\n * methods are called.\r\n * \r\n * @example\r\n * \r\n * <Input\r\n value={this.getIntermediateString('name')}\r\n disabled={cc.state.isLoading}\r\n onChange={(ev) => {\r\n this.setIntermediateStringValue('name', ev.target.value);\r\n }}\r\n onBlur={(ev) => {\r\n this.confirmIntermediateString('name', ev.target.value);\r\n }}\r\n />\r\n */\r\n protected async confirmValue(attName: string, value: any, index: number) {\r\n await this.customComponent?.setValue(attName, value, index);\r\n delete this.intermediatesIndexed[attName];\r\n }\r\n\r\n protected abstract Component: FC;\r\n\r\n protected abstract init(): unknown;\r\n\r\n public Renderer = () => {\r\n return (\r\n <>\r\n <this.Component />\r\n <Box\r\n ref={(el) => {\r\n if (el) {\r\n this.customComponent!.form.markFieldAsRendered(\r\n this.customComponent!.definition.id,\r\n );\r\n }\r\n }}\r\n />\r\n </>\r\n );\r\n };\r\n\r\n /**\r\n * Custom component methods\r\n */\r\n\r\n protected get isLoading() {\r\n return this.customComponent!.state.isLoading;\r\n }\r\n\r\n protected getAdditional<T>() {\r\n return this.customComponent!.getAdditional() as T; // There is a critical error on rollup that breaks the compilation when used DeepReadonly<T>\r\n }\r\n\r\n protected fireEvent(evtName: string) {\r\n this.customComponent!.fireEvent(evtName);\r\n }\r\n\r\n protected getProperty(prpName: string) {\r\n return this.customComponent!.getProperty(prpName);\r\n }\r\n\r\n protected getStringValue(attName: string) {\r\n return this.customComponent!.getStringValue(attName);\r\n }\r\n\r\n protected getValue(attName: string, index: number = 0) {\r\n return this.customComponent!.getValue(attName, index) || 0;\r\n }\r\n\r\n protected setValue(attName: string, value: any, index: number) {\r\n this.customComponent!.setValue(attName, value, index);\r\n }\r\n\r\n protected setStringValue(attName: string, value: string) {\r\n this.customComponent!.setStringValue(attName, value);\r\n }\r\n\r\n protected setProperty(prpName: string, value: any) {\r\n this.customComponent!.setProperty(prpName, value);\r\n }\r\n\r\n protected sendMessage(payload: any) {\r\n this.customComponent!.sendMessage(payload);\r\n }\r\n}\r\n"],"names":["__publicField"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apia/execution-react",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.18",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"author": "Alexis Leite <alexisleite@live.com>",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"libDev": "rollup --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts",
|
|
12
12
|
"libBuild": "rollup --config ../../config/rollup.common.mjs --environment MODE:production,ENTRY:index.ts",
|
|
13
|
-
"libWatch": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true"
|
|
13
|
+
"libWatch": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true",
|
|
14
|
+
"libWatchDevExecution": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true,DEV_SERVER_MODULE:execution",
|
|
15
|
+
"libWatchDevDashboards": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true,DEV_SERVER_MODULE:dashboards"
|
|
14
16
|
},
|
|
15
17
|
"devDependencies": {
|
|
16
18
|
"@types/react": "^18.2.43",
|
|
@@ -27,8 +29,9 @@
|
|
|
27
29
|
"access": "public",
|
|
28
30
|
"registry": "https://registry.npmjs.org/"
|
|
29
31
|
},
|
|
30
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "fad102234b7b27d6622e227379eb9ccf2a751b24",
|
|
31
33
|
"dependencies": {
|
|
32
|
-
"@apia/execution": "^4.0.
|
|
34
|
+
"@apia/execution": "^4.0.18",
|
|
35
|
+
"@apia/util": "^4.0.18"
|
|
33
36
|
}
|
|
34
37
|
}
|