@elementor/editor-components 3.35.0-435 → 3.35.0-437

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elementor/editor-components",
3
3
  "description": "Elementor editor components",
4
- "version": "3.35.0-435",
4
+ "version": "3.35.0-437",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -40,30 +40,30 @@
40
40
  "dev": "tsup --config=../../tsup.dev.ts"
41
41
  },
42
42
  "dependencies": {
43
- "@elementor/editor": "3.35.0-435",
44
- "@elementor/editor-canvas": "3.35.0-435",
45
- "@elementor/editor-controls": "3.35.0-435",
46
- "@elementor/editor-documents": "3.35.0-435",
47
- "@elementor/editor-editing-panel": "3.35.0-435",
48
- "@elementor/editor-elements": "3.35.0-435",
49
- "@elementor/editor-elements-panel": "3.35.0-435",
50
- "@elementor/editor-mcp": "3.35.0-435",
51
- "@elementor/editor-panels": "3.35.0-435",
52
- "@elementor/editor-props": "3.35.0-435",
53
- "@elementor/editor-styles-repository": "3.35.0-435",
54
- "@elementor/editor-ui": "3.35.0-435",
55
- "@elementor/editor-v1-adapters": "3.35.0-435",
56
- "@elementor/http-client": "3.35.0-435",
43
+ "@elementor/editor": "3.35.0-437",
44
+ "@elementor/editor-canvas": "3.35.0-437",
45
+ "@elementor/editor-controls": "3.35.0-437",
46
+ "@elementor/editor-documents": "3.35.0-437",
47
+ "@elementor/editor-editing-panel": "3.35.0-437",
48
+ "@elementor/editor-elements": "3.35.0-437",
49
+ "@elementor/editor-elements-panel": "3.35.0-437",
50
+ "@elementor/editor-mcp": "3.35.0-437",
51
+ "@elementor/editor-panels": "3.35.0-437",
52
+ "@elementor/editor-props": "3.35.0-437",
53
+ "@elementor/editor-styles-repository": "3.35.0-437",
54
+ "@elementor/editor-ui": "3.35.0-437",
55
+ "@elementor/editor-v1-adapters": "3.35.0-437",
56
+ "@elementor/http-client": "3.35.0-437",
57
57
  "@elementor/icons": "^1.63.0",
58
- "@elementor/mixpanel": "3.35.0-435",
59
- "@elementor/query": "3.35.0-435",
60
- "@elementor/schema": "3.35.0-435",
61
- "@elementor/store": "3.35.0-435",
58
+ "@elementor/mixpanel": "3.35.0-437",
59
+ "@elementor/query": "3.35.0-437",
60
+ "@elementor/schema": "3.35.0-437",
61
+ "@elementor/store": "3.35.0-437",
62
62
  "@elementor/ui": "1.36.17",
63
- "@elementor/utils": "3.35.0-435",
63
+ "@elementor/utils": "3.35.0-437",
64
64
  "@wordpress/i18n": "^5.13.0",
65
- "@elementor/editor-notifications": "3.35.0-435",
66
- "@elementor/editor-current-user": "3.35.0-435"
65
+ "@elementor/editor-notifications": "3.35.0-437",
66
+ "@elementor/editor-current-user": "3.35.0-437"
67
67
  },
68
68
  "peerDependencies": {
69
69
  "react": "^18.3.1",
@@ -0,0 +1,83 @@
1
+ import { getAllDescendants, type V1Element } from '@elementor/editor-elements';
2
+ import { registerDataHook } from '@elementor/editor-v1-adapters';
3
+ import { __dispatch as dispatch, __getState as getState } from '@elementor/store';
4
+
5
+ import { type ComponentsSlice, selectCurrentComponentId, selectOverridableProps, slice } from '../store/store';
6
+ import { removePropFromAllGroups } from '../store/utils/groups-transformers';
7
+
8
+ type DeleteCommandArgs = {
9
+ container?: V1Element;
10
+ containers?: V1Element[];
11
+ };
12
+
13
+ export function initCleanupOverridablePropsOnDelete() {
14
+ registerDataHook( 'after', 'document/elements/delete', ( args: DeleteCommandArgs ) => {
15
+ const state = getState() as ComponentsSlice | undefined;
16
+
17
+ if ( ! state ) {
18
+ return;
19
+ }
20
+
21
+ const currentComponentId = selectCurrentComponentId( state );
22
+
23
+ if ( ! currentComponentId ) {
24
+ return;
25
+ }
26
+
27
+ const overridableProps = selectOverridableProps( state, currentComponentId );
28
+
29
+ if ( ! overridableProps || Object.keys( overridableProps.props ).length === 0 ) {
30
+ return;
31
+ }
32
+
33
+ const containers = args.containers ?? ( args.container ? [ args.container ] : [] );
34
+
35
+ if ( containers.length === 0 ) {
36
+ return;
37
+ }
38
+
39
+ const deletedElementIds = collectDeletedElementIds( containers );
40
+
41
+ if ( deletedElementIds.length === 0 ) {
42
+ return;
43
+ }
44
+
45
+ const propKeysToDelete = Object.entries( overridableProps.props )
46
+ .filter( ( [ , prop ] ) => deletedElementIds.includes( prop.elementId ) )
47
+ .map( ( [ propKey ] ) => propKey );
48
+
49
+ if ( propKeysToDelete.length === 0 ) {
50
+ return;
51
+ }
52
+
53
+ const remainingProps = Object.fromEntries(
54
+ Object.entries( overridableProps.props ).filter( ( [ propKey ] ) => ! propKeysToDelete.includes( propKey ) )
55
+ );
56
+
57
+ let updatedGroups = overridableProps.groups;
58
+ for ( const propKey of propKeysToDelete ) {
59
+ updatedGroups = removePropFromAllGroups( updatedGroups, propKey );
60
+ }
61
+
62
+ dispatch(
63
+ slice.actions.setOverridableProps( {
64
+ componentId: currentComponentId,
65
+ overridableProps: {
66
+ ...overridableProps,
67
+ props: remainingProps,
68
+ groups: updatedGroups,
69
+ },
70
+ } )
71
+ );
72
+ } );
73
+ }
74
+
75
+ function collectDeletedElementIds( containers: V1Element[] ): string[] {
76
+ const elementIds = containers
77
+ .filter( Boolean )
78
+ .flatMap( ( container ) => [ container, ...getAllDescendants( container ) ] )
79
+ .map( ( element ) => element.model?.get?.( 'id' ) ?? element.id )
80
+ .filter( ( id ): id is string => Boolean( id ) );
81
+
82
+ return elementIds;
83
+ }
package/src/init.ts CHANGED
@@ -34,6 +34,7 @@ import { InstanceEditingPanel } from './components/instance-editing-panel/instan
34
34
  import { OverridablePropControl } from './components/overridable-props/overridable-prop-control';
35
35
  import { OverridablePropIndicator } from './components/overridable-props/overridable-prop-indicator';
36
36
  import { COMPONENT_WIDGET_TYPE, createComponentType } from './create-component-type';
37
+ import { initCleanupOverridablePropsOnDelete } from './hooks/cleanup-overridable-props-on-delete';
37
38
  import { initRegenerateOverrideKeys } from './hooks/regenerate-override-keys';
38
39
  import { initMcp } from './mcp';
39
40
  import { PopulateStore } from './populate-store';
@@ -132,6 +133,8 @@ export function init() {
132
133
 
133
134
  initRegenerateOverrideKeys();
134
135
 
136
+ initCleanupOverridablePropsOnDelete();
137
+
135
138
  initMcp();
136
139
 
137
140
  initCircularNestingPrevention();
@@ -18,7 +18,7 @@ export async function loadComponentsStyles( componentIds: number[] ) {
18
18
  return;
19
19
  }
20
20
 
21
- addComponentStyles( unknownComponentIds );
21
+ await addComponentStyles( unknownComponentIds );
22
22
  }
23
23
 
24
24
  async function addComponentStyles( ids: ComponentId[] ) {