@asteby/metacore-app-providers 0.5.0 → 0.6.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.
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
export interface MetacoreInstallRequest {
|
|
3
|
+
addonKey: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
bundleURL?: string;
|
|
6
|
+
}
|
|
2
7
|
export interface MetacoreAppShellProps {
|
|
3
8
|
/** Axios-compatible API client used by ApiProvider + PWAProvider. */
|
|
4
9
|
api: any;
|
|
@@ -14,9 +19,22 @@ export interface MetacoreAppShellProps {
|
|
|
14
19
|
hideOfflineIndicator?: boolean;
|
|
15
20
|
/** Disable the metadata-cache invalidation that fires on SW updates. */
|
|
16
21
|
disableMetadataInvalidate?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Handle the `metacore:install` postMessage from an embedded Hub iframe.
|
|
24
|
+
* Receives the addon key + version + bundle URL; the host runs its own
|
|
25
|
+
* install pipeline (POST `/api/marketplace/install/<key>`, etc) and is
|
|
26
|
+
* responsible for messaging back to the iframe with `metacore:installed`
|
|
27
|
+
* once done. The MessageEventSource argument is the iframe's window —
|
|
28
|
+
* call `source.postMessage({type:'metacore:installed', addonKey})` to
|
|
29
|
+
* confirm.
|
|
30
|
+
*
|
|
31
|
+
* Default: POSTs `/marketplace/install` on the bundled API client and
|
|
32
|
+
* replies on success. Set to `null` to disable the listener entirely.
|
|
33
|
+
*/
|
|
34
|
+
onAddonInstall?: ((req: MetacoreInstallRequest, source: MessageEventSource | null) => void | Promise<void>) | null;
|
|
17
35
|
/** Toaster position; passed straight to sonner. */
|
|
18
36
|
toasterPosition?: 'top-left' | 'top-right' | 'top-center' | 'bottom-left' | 'bottom-right' | 'bottom-center';
|
|
19
37
|
children: React.ReactNode;
|
|
20
38
|
}
|
|
21
|
-
export declare function MetacoreAppShell({ api, queryClient, hideToaster, hidePWAInstall, hidePWAUpdate, hideOfflineIndicator, disableMetadataInvalidate, toasterPosition, children, }: MetacoreAppShellProps): import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
export declare function MetacoreAppShell({ api, queryClient, hideToaster, hidePWAInstall, hidePWAUpdate, hideOfflineIndicator, disableMetadataInvalidate, onAddonInstall, toasterPosition, children, }: MetacoreAppShellProps): import("react/jsx-runtime").JSX.Element;
|
|
22
40
|
//# sourceMappingURL=metacore-app-shell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metacore-app-shell.d.ts","sourceRoot":"","sources":["../src/metacore-app-shell.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"metacore-app-shell.d.ts","sourceRoot":"","sources":["../src/metacore-app-shell.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAa9B,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,GAAG,EAAE,GAAG,CAAA;IACR,yEAAyE;IACzE,WAAW,CAAC,EAAE,GAAG,CAAA;IACjB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,yEAAyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,kCAAkC;IAClC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,wEAAwE;IACxE,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EACX,CAAC,CAAC,GAAG,EAAE,sBAAsB,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAC1F,IAAI,CAAA;IACR,mDAAmD;IACnD,eAAe,CAAC,EACZ,UAAU,GACV,WAAW,GACX,YAAY,GACZ,aAAa,GACb,cAAc,GACd,eAAe,CAAA;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AA0FD,wBAAgB,gBAAgB,CAAC,EAC/B,GAAG,EACH,WAAW,EACX,WAAW,EACX,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,yBAAyB,EACzB,cAAc,EACd,eAA6B,EAC7B,QAAQ,GACT,EAAE,qBAAqB,2CAqBvB"}
|
|
@@ -23,12 +23,63 @@ import { QueryClientProvider } from '@tanstack/react-query';
|
|
|
23
23
|
import { ApiProvider, useMetadataCache } from '@asteby/metacore-runtime-react';
|
|
24
24
|
import { PWAProvider, PWAInstallPrompt, PWAUpdatePrompt, OfflineIndicator, usePWAContext, } from '@asteby/metacore-pwa';
|
|
25
25
|
import { Toaster } from '@asteby/metacore-ui/primitives';
|
|
26
|
+
import { toast } from 'sonner';
|
|
26
27
|
/**
|
|
27
28
|
* Drops every cached table/modal metadata entry the moment the PWA layer
|
|
28
29
|
* tells us a new service worker has finished installing. The next mount of
|
|
29
30
|
* <DynamicTable> hits the network instead of replaying yesterday's
|
|
30
31
|
* column / filter / actions definitions.
|
|
31
32
|
*/
|
|
33
|
+
/**
|
|
34
|
+
* Listens for the `metacore:install` postMessage from an embedded Hub
|
|
35
|
+
* iframe and forwards to the supplied handler (or the default backend
|
|
36
|
+
* call). Confirms back to the iframe with `metacore:installed` so the
|
|
37
|
+
* Hub UI flips to the success state.
|
|
38
|
+
*/
|
|
39
|
+
function AddonInstallListener({ api, onAddonInstall, }) {
|
|
40
|
+
React.useEffect(() => {
|
|
41
|
+
if (onAddonInstall === null)
|
|
42
|
+
return;
|
|
43
|
+
const handler = async (e) => {
|
|
44
|
+
const data = e.data;
|
|
45
|
+
if (!data || data.type !== 'metacore:install' || !data.addonKey)
|
|
46
|
+
return;
|
|
47
|
+
const req = {
|
|
48
|
+
addonKey: data.addonKey,
|
|
49
|
+
version: data.version,
|
|
50
|
+
bundleURL: data.bundleURL,
|
|
51
|
+
};
|
|
52
|
+
// Surface the install in the host's toaster too so the user knows
|
|
53
|
+
// the click was heard even if the iframe loses focus.
|
|
54
|
+
const toastId = toast.loading(`Instalando ${req.addonKey}…`);
|
|
55
|
+
try {
|
|
56
|
+
if (onAddonInstall) {
|
|
57
|
+
await onAddonInstall(req, e.source);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Default pipeline: POST to the host's marketplace install
|
|
61
|
+
// endpoint. Apps that don't ship that endpoint should pass an
|
|
62
|
+
// explicit `onAddonInstall` handler.
|
|
63
|
+
await api.post('/marketplace/install', req);
|
|
64
|
+
}
|
|
65
|
+
toast.success(`${req.addonKey} instalado`, { id: toastId });
|
|
66
|
+
e.source?.postMessage({ type: 'metacore:installed', addonKey: req.addonKey }, { targetOrigin: '*' });
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
70
|
+
toast.error(`Falló la instalación: ${message}`, { id: toastId });
|
|
71
|
+
e.source?.postMessage({
|
|
72
|
+
type: 'metacore:install-failed',
|
|
73
|
+
addonKey: req.addonKey,
|
|
74
|
+
error: message,
|
|
75
|
+
}, { targetOrigin: '*' });
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
window.addEventListener('message', handler);
|
|
79
|
+
return () => window.removeEventListener('message', handler);
|
|
80
|
+
}, [api, onAddonInstall]);
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
32
83
|
function MetadataInvalidator({ disabled }) {
|
|
33
84
|
const { needRefresh } = usePWAContext();
|
|
34
85
|
React.useEffect(() => {
|
|
@@ -56,8 +107,8 @@ function MetadataInvalidator({ disabled }) {
|
|
|
56
107
|
}, [disabled, needRefresh]);
|
|
57
108
|
return null;
|
|
58
109
|
}
|
|
59
|
-
export function MetacoreAppShell({ api, queryClient, hideToaster, hidePWAInstall, hidePWAUpdate, hideOfflineIndicator, disableMetadataInvalidate, toasterPosition = 'top-right', children, }) {
|
|
60
|
-
const inner = (_jsxs(ApiProvider, { client: api, children: [_jsxs(PWAProvider, { api: api, children: [children, _jsx(MetadataInvalidator, { disabled: !!disableMetadataInvalidate }), !hidePWAInstall && _jsx(PWAInstallPrompt, {}), !hidePWAUpdate && _jsx(PWAUpdatePrompt, {}), !hideOfflineIndicator && _jsx(OfflineIndicator, {})] }), !hideToaster && (_jsx(Toaster, { position: toasterPosition, richColors: true, theme: 'light' }))] }));
|
|
110
|
+
export function MetacoreAppShell({ api, queryClient, hideToaster, hidePWAInstall, hidePWAUpdate, hideOfflineIndicator, disableMetadataInvalidate, onAddonInstall, toasterPosition = 'top-right', children, }) {
|
|
111
|
+
const inner = (_jsxs(ApiProvider, { client: api, children: [_jsxs(PWAProvider, { api: api, children: [children, _jsx(MetadataInvalidator, { disabled: !!disableMetadataInvalidate }), _jsx(AddonInstallListener, { api: api, onAddonInstall: onAddonInstall }), !hidePWAInstall && _jsx(PWAInstallPrompt, {}), !hidePWAUpdate && _jsx(PWAUpdatePrompt, {}), !hideOfflineIndicator && _jsx(OfflineIndicator, {})] }), !hideToaster && (_jsx(Toaster, { position: toasterPosition, richColors: true, theme: 'light' }))] }));
|
|
61
112
|
if (queryClient) {
|
|
62
113
|
return _jsx(QueryClientProvider, { client: queryClient, children: inner });
|
|
63
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metacore-app-shell.js","sourceRoot":"","sources":["../src/metacore-app-shell.tsx"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,yEAAyE;AACzE,wEAAwE;AACxE,uEAAuE;AACvE,EAAE;AACF,qEAAqE;AACrE,EAAE;AACF,sEAAsE;AACtE,oCAAoC;AACpC,EAAE;AACF,qCAAqC;AACrC,6DAA6D;AAC7D,2CAA2C;AAC3C,0BAA0B;AAC1B,MAAM;AACN,EAAE;AACF,uEAAuE;AACvE,6EAA6E;AAC7E,4DAA4D;AAC5D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAC9E,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,aAAa,GACd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"metacore-app-shell.js","sourceRoot":"","sources":["../src/metacore-app-shell.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@asteby/metacore-app-providers",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "Providers genéricos reutilizables para apps metacore (direction, font, layout, search, platform-config)",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"react-dom": ">=18",
|
|
29
29
|
"@asteby/metacore-pwa": ">=0.3.1",
|
|
30
30
|
"@asteby/metacore-runtime-react": ">=7.1.5",
|
|
31
|
-
"@asteby/metacore-ui": ">=0.7"
|
|
31
|
+
"@asteby/metacore-ui": ">=0.7",
|
|
32
|
+
"sonner": ">=1.7"
|
|
32
33
|
},
|
|
33
34
|
"peerDependenciesMeta": {
|
|
34
35
|
"@asteby/metacore-pwa": {
|
|
@@ -48,10 +49,11 @@
|
|
|
48
49
|
"@types/react-dom": "^19.0.0",
|
|
49
50
|
"react": "^19.2.4",
|
|
50
51
|
"react-dom": "^19.2.4",
|
|
52
|
+
"sonner": "^1.7.0",
|
|
51
53
|
"typescript": "^5.6.0",
|
|
52
54
|
"@asteby/metacore-pwa": "0.3.1",
|
|
53
|
-
"@asteby/metacore-
|
|
54
|
-
"@asteby/metacore-
|
|
55
|
+
"@asteby/metacore-ui": "0.7.0",
|
|
56
|
+
"@asteby/metacore-runtime-react": "7.1.5"
|
|
55
57
|
},
|
|
56
58
|
"publishConfig": {
|
|
57
59
|
"access": "public"
|