@elementor/editor-v1-adapters
Advanced tools
Comparing version 0.4.0 to 0.5.0
@@ -6,2 +6,13 @@ # Change Log | ||
# [0.5.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-v1-adapters@0.4.0...@elementor/editor-v1-adapters@0.5.0) (2023-06-11) | ||
### Features | ||
* **editor-panels:** init [ED-10804] ([#44](https://github.com/elementor/elementor-packages/issues/44)) ([1ed4113](https://github.com/elementor/elementor-packages/commit/1ed41131db8fb9151163175bfa614f784159e04b)) | ||
# [0.4.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-v1-adapters@0.3.0...@elementor/editor-v1-adapters@0.4.0) (2023-06-06) | ||
@@ -8,0 +19,0 @@ |
declare function runCommand(command: string, args?: object): Promise<any>; | ||
declare function openRoute(route: string): Promise<void>; | ||
declare function openRoute(route: string): Promise<unknown>; | ||
declare function registerRoute(route: string): Promise<unknown>; | ||
@@ -81,2 +82,2 @@ declare function useIsPreviewMode(): boolean; | ||
export { CommandEvent, CommandEventDescriptor, EventDescriptor, ExtendedWindow, ListenerCallback, ListenerEvent, RouteEvent, RouteEventDescriptor, WindowEvent, WindowEventDescriptor, commandEndEvent, commandStartEvent, dispatchReadyEvent, editModeChangeEvent, flushListeners, getCurrentEditMode, isReady, isRouteActive, listenTo, openRoute, routeCloseEvent, routeOpenEvent, runCommand, setReady, useIsPreviewMode, useIsRouteActive, useListenTo, useRouteStatus, v1ReadyEvent, windowEvent }; | ||
export { CommandEvent, CommandEventDescriptor, EventDescriptor, ExtendedWindow, ListenerCallback, ListenerEvent, RouteEvent, RouteEventDescriptor, WindowEvent, WindowEventDescriptor, commandEndEvent, commandStartEvent, dispatchReadyEvent, editModeChangeEvent, flushListeners, getCurrentEditMode, isReady, isRouteActive, listenTo, openRoute, registerRoute, routeCloseEvent, routeOpenEvent, runCommand, setReady, useIsPreviewMode, useIsRouteActive, useListenTo, useRouteStatus, v1ReadyEvent, windowEvent }; |
@@ -33,2 +33,3 @@ "use strict"; | ||
openRoute: () => openRoute, | ||
registerRoute: () => registerRoute, | ||
routeCloseEvent: () => routeCloseEvent, | ||
@@ -85,2 +86,21 @@ routeOpenEvent: () => routeOpenEvent, | ||
} | ||
function registerRoute(route) { | ||
const extendedWindow = window; | ||
if (!extendedWindow.$e?.routes?.register) { | ||
return Promise.reject("`$e.routes.register()` is not available"); | ||
} | ||
const routeParts = route.split("/"); | ||
if (routeParts.length < 2) { | ||
return Promise.reject(`\`${route}\` is an invalid route`); | ||
} | ||
const componentRoute = routeParts.pop(); | ||
const component = routeParts.join("/"); | ||
try { | ||
return Promise.resolve( | ||
extendedWindow.$e.routes.register(component, componentRoute, () => null) | ||
); | ||
} catch (e) { | ||
return Promise.reject(e); | ||
} | ||
} | ||
@@ -325,2 +345,3 @@ // src/hooks/use-listen-to.ts | ||
openRoute, | ||
registerRoute, | ||
routeCloseEvent, | ||
@@ -327,0 +348,0 @@ routeOpenEvent, |
{ | ||
"name": "@elementor/editor-v1-adapters", | ||
"version": "0.4.0", | ||
"version": "0.5.0", | ||
"private": false, | ||
@@ -37,3 +37,3 @@ "author": "Elementor Team", | ||
}, | ||
"gitHead": "79104144fef8bd0064d8640741a671f75fe8a1f8" | ||
"gitHead": "70a2c6139730b7afa69d13eb65023b0e6612f23b" | ||
} |
@@ -1,13 +0,8 @@ | ||
import { openRoute, runCommand } from '../index'; | ||
import { openRoute, registerRoute, runCommand } from '../index'; | ||
import { ExtendedWindow } from '../types'; | ||
type ExtendedWindow = Window & { | ||
$e: { | ||
run: jest.Mock; | ||
route: jest.Mock; | ||
}, | ||
} | ||
describe( '@elementor/editor-v1-adapters/dispatchers', () => { | ||
let eRun: jest.Mock, | ||
eRoute: jest.Mock; | ||
eRoute: jest.Mock, | ||
eRegisterRoute: jest.Mock; | ||
@@ -20,6 +15,10 @@ beforeEach( () => { | ||
route: jest.fn(), | ||
routes: { | ||
register: jest.fn(), | ||
}, | ||
}; | ||
eRun = extendedWindow.$e.run; | ||
eRoute = extendedWindow.$e.route; | ||
eRun = jest.mocked( extendedWindow.$e.run ); | ||
eRoute = jest.mocked( extendedWindow.$e.route ); | ||
eRegisterRoute = jest.mocked( extendedWindow.$e?.routes?.register || jest.fn() ); | ||
} ); | ||
@@ -72,12 +71,2 @@ | ||
it( 'should reject when trying to run a V1 command and `$e.run()` is unavailable', () => { | ||
// Arrange. | ||
delete ( window as { $e?: unknown } ).$e; | ||
// Act & Assert. | ||
expect( () => runCommand( 'editor/documents/open' ) ) | ||
.rejects | ||
.toEqual( '`$e.run()` is not available' ); | ||
} ); | ||
it( 'should open a V1 route', () => { | ||
@@ -109,3 +98,25 @@ // Arrange. | ||
it( 'should reject when trying to open a V1 route and `$e.route()` is unavailable', () => { | ||
it.each( [ | ||
[ 'test/route', [ 'test', 'route' ] ], | ||
[ 'test/test2/route', [ 'test/test2', 'route' ] ], | ||
] )( 'should register the route `%s` in v1', ( route, params ) => { | ||
// Act. | ||
registerRoute( route ); | ||
// Assert. | ||
expect( eRegisterRoute ).toHaveBeenCalledWith( ...params, expect.any( Function ) ); | ||
} ); | ||
it( 'should throw if trying to register invalid route', () => { | ||
// Act & Assert. | ||
expect( () => registerRoute( 'test' ) ) | ||
.rejects | ||
.toEqual( '`test` is an invalid route' ); | ||
} ); | ||
it.each( [ | ||
[ '$e.route()', () => openRoute( 'test/route' ) ], | ||
[ '$e.run()', () => runCommand( 'editor/documents/open' ) ], | ||
[ '$e.routes.register()', () => registerRoute( 'test/route' ) ], | ||
] )( 'should reject when trying to use V1 and `%s` is unavailable', ( v1Method, action ) => { | ||
// Arrange. | ||
@@ -115,5 +126,5 @@ delete ( window as { $e?: unknown } ).$e; | ||
// Act & Assert. | ||
expect( () => openRoute( 'test/route' ) ) | ||
expect( () => action() ) | ||
.rejects | ||
.toEqual( '`$e.route()` is not available' ); | ||
.toEqual( `\`${ v1Method }\` is not available` ); | ||
} ); | ||
@@ -120,0 +131,0 @@ } ); |
@@ -39,1 +39,26 @@ import { ExtendedWindow } from './types'; | ||
} | ||
export function registerRoute( route: string ) { | ||
const extendedWindow = window as unknown as ExtendedWindow; | ||
if ( ! extendedWindow.$e?.routes?.register ) { | ||
return Promise.reject( '`$e.routes.register()` is not available' ); | ||
} | ||
const routeParts = route.split( '/' ); | ||
if ( routeParts.length < 2 ) { | ||
return Promise.reject( `\`${ route }\` is an invalid route` ); | ||
} | ||
const componentRoute = routeParts.pop() as string; // routeParts.length must be >= 2 | ||
const component = routeParts.join( '/' ); | ||
try { | ||
return Promise.resolve( | ||
extendedWindow.$e.routes.register( component, componentRoute, () => null ) | ||
); | ||
} catch ( e ) { | ||
return Promise.reject( e ); | ||
} | ||
} |
@@ -8,4 +8,11 @@ export type jQueryDeferred<T> = { | ||
run: ( command: string, args?: object ) => unknown; | ||
route: ( route: string ) => void; | ||
route: ( route: string ) => unknown; | ||
routes?: { | ||
register?: ( | ||
component: string, | ||
route: string, | ||
callback: () => unknown | ||
) => unknown; | ||
} | ||
}, | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
123371
1836