@elementor/editor-components 4.0.0-666 → 4.0.0-668
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.js +191 -3870
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +184 -3904
- package/dist/index.mjs.map +1 -1
- package/package.json +23 -23
- package/src/init.ts +0 -13
- package/src/extended/components/component-introduction.tsx +0 -77
- package/src/extended/components/component-panel-header/component-badge.tsx +0 -73
- package/src/extended/components/component-panel-header/component-panel-header.tsx +0 -98
- package/src/extended/components/component-properties-panel/component-properties-panel-content.tsx +0 -176
- package/src/extended/components/component-properties-panel/component-properties-panel.tsx +0 -43
- package/src/extended/components/component-properties-panel/properties-empty-state.tsx +0 -51
- package/src/extended/components/component-properties-panel/properties-group.tsx +0 -196
- package/src/extended/components/component-properties-panel/property-item.tsx +0 -124
- package/src/extended/components/component-properties-panel/sortable.tsx +0 -92
- package/src/extended/components/component-properties-panel/use-current-editable-item.ts +0 -73
- package/src/extended/components/component-properties-panel/utils/generate-unique-label.ts +0 -21
- package/src/extended/components/component-properties-panel/utils/validate-group-label.ts +0 -24
- package/src/extended/components/components-tab/component-item.tsx +0 -180
- package/src/extended/components/components-tab/components.tsx +0 -58
- package/src/extended/components/components-tab/delete-confirmation-dialog.tsx +0 -26
- package/src/extended/components/create-component-form/create-component-form.tsx +0 -281
- package/src/extended/components/create-component-form/hooks/use-form.ts +0 -72
- package/src/extended/components/create-component-form/utils/get-component-event-data.ts +0 -54
- package/src/extended/components/edit-component/component-modal.tsx +0 -133
- package/src/extended/components/edit-component/edit-component.tsx +0 -166
- package/src/extended/components/edit-component/use-canvas-document.ts +0 -9
- package/src/extended/components/edit-component/use-element-rect.ts +0 -81
- package/src/extended/components/instance-editing-panel/instance-editing-panel.tsx +0 -60
- package/src/extended/components/overridable-props/indicator.tsx +0 -83
- package/src/extended/components/overridable-props/overridable-prop-control.tsx +0 -127
- package/src/extended/components/overridable-props/overridable-prop-form.tsx +0 -135
- package/src/extended/components/overridable-props/overridable-prop-indicator.tsx +0 -138
- package/src/extended/components/overridable-props/utils/validate-prop-label.ts +0 -38
- package/src/extended/consts.ts +0 -3
- package/src/extended/hooks/use-navigate-back.ts +0 -24
- package/src/extended/init.ts +0 -108
- package/src/extended/mcp/index.ts +0 -14
- package/src/extended/mcp/save-as-component-tool.ts +0 -436
- package/src/extended/shortcuts/create-component-shortcut.ts +0 -121
- package/src/extended/store/actions/add-overridable-group.ts +0 -53
- package/src/extended/store/actions/archive-component.ts +0 -18
- package/src/extended/store/actions/create-unpublished-component.ts +0 -99
- package/src/extended/store/actions/delete-overridable-group.ts +0 -32
- package/src/extended/store/actions/delete-overridable-prop.ts +0 -64
- package/src/extended/store/actions/rename-component.ts +0 -48
- package/src/extended/store/actions/rename-overridable-group.ts +0 -33
- package/src/extended/store/actions/reorder-group-props.ts +0 -37
- package/src/extended/store/actions/reorder-overridable-groups.ts +0 -24
- package/src/extended/store/actions/reset-sanitized-components.ts +0 -5
- package/src/extended/store/actions/set-overridable-prop.ts +0 -109
- package/src/extended/store/actions/update-component-sanitized-attribute.ts +0 -7
- package/src/extended/store/actions/update-current-component.ts +0 -12
- package/src/extended/store/actions/update-overridable-prop-params.ts +0 -52
- package/src/extended/store/utils/groups-transformers.ts +0 -187
- package/src/extended/sync/before-save.ts +0 -52
- package/src/extended/sync/cleanup-overridable-props-on-delete.ts +0 -78
- package/src/extended/sync/create-components-before-save.ts +0 -111
- package/src/extended/sync/handle-component-edit-mode-container.ts +0 -114
- package/src/extended/sync/prevent-non-atomic-nesting.ts +0 -198
- package/src/extended/sync/revert-overridables-on-copy-or-duplicate.ts +0 -66
- package/src/extended/sync/sanitize-overridable-props.ts +0 -32
- package/src/extended/sync/set-component-overridable-props-settings-before-save.ts +0 -22
- package/src/extended/sync/update-archived-component-before-save.ts +0 -31
- package/src/extended/sync/update-component-title-before-save.ts +0 -18
- package/src/extended/utils/component-form-schema.ts +0 -32
- package/src/extended/utils/component-name-validation.ts +0 -25
- package/src/extended/utils/create-component-model.ts +0 -28
- package/src/extended/utils/get-container-for-new-element.ts +0 -49
- package/src/extended/utils/is-editing-component.ts +0 -5
- package/src/extended/utils/replace-element-with-component.ts +0 -11
- package/src/extended/utils/revert-overridable-settings.ts +0 -207
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { createElements, deleteElement, getContainer, type V1ElementData } from '@elementor/editor-elements';
|
|
2
|
-
import { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';
|
|
3
|
-
import { generateUniqueId } from '@elementor/utils';
|
|
4
|
-
import { __ } from '@wordpress/i18n';
|
|
5
|
-
|
|
6
|
-
import { componentsActions } from '../../../store/dispatchers';
|
|
7
|
-
import { type OriginalElementData, type OverridableProps } from '../../../types';
|
|
8
|
-
import { type Source, trackComponentEvent } from '../../../utils/tracking';
|
|
9
|
-
import { type ComponentEventData } from '../../components/create-component-form/utils/get-component-event-data';
|
|
10
|
-
import { replaceElementWithComponent } from '../../utils/replace-element-with-component';
|
|
11
|
-
import { revertAllOverridablesInElementData } from '../../utils/revert-overridable-settings';
|
|
12
|
-
|
|
13
|
-
type CreateUnpublishedComponentParams = {
|
|
14
|
-
name: string;
|
|
15
|
-
element: V1ElementData;
|
|
16
|
-
eventData: ComponentEventData | null;
|
|
17
|
-
uid?: string | null;
|
|
18
|
-
overridableProps?: OverridableProps;
|
|
19
|
-
source: Source;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export async function createUnpublishedComponent( {
|
|
23
|
-
name,
|
|
24
|
-
element,
|
|
25
|
-
eventData,
|
|
26
|
-
uid,
|
|
27
|
-
overridableProps,
|
|
28
|
-
source,
|
|
29
|
-
}: CreateUnpublishedComponentParams ): Promise< { uid: string; instanceId: string } > {
|
|
30
|
-
const generatedUid = uid ?? generateUniqueId( 'component' );
|
|
31
|
-
const componentBase = { uid: generatedUid, name };
|
|
32
|
-
const elementDataWithOverridablesReverted = revertAllOverridablesInElementData( element );
|
|
33
|
-
|
|
34
|
-
const container = getContainer( element.id );
|
|
35
|
-
const modelFromContainer = container?.model?.toJSON?.() as V1ElementData | undefined;
|
|
36
|
-
const originalElement: OriginalElementData = {
|
|
37
|
-
model: modelFromContainer ?? element,
|
|
38
|
-
parentId: container?.parent?.id ?? '',
|
|
39
|
-
index: container?.view?._index ?? 0,
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
componentsActions.addUnpublished( {
|
|
43
|
-
...componentBase,
|
|
44
|
-
elements: [ elementDataWithOverridablesReverted ],
|
|
45
|
-
overridableProps,
|
|
46
|
-
} );
|
|
47
|
-
|
|
48
|
-
componentsActions.addCreatedThisSession( generatedUid );
|
|
49
|
-
|
|
50
|
-
const componentInstance = replaceElementWithComponent( element, componentBase );
|
|
51
|
-
|
|
52
|
-
trackComponentEvent( {
|
|
53
|
-
action: 'created',
|
|
54
|
-
source,
|
|
55
|
-
component_uid: generatedUid,
|
|
56
|
-
component_name: name,
|
|
57
|
-
...eventData,
|
|
58
|
-
} );
|
|
59
|
-
|
|
60
|
-
try {
|
|
61
|
-
await runCommand( 'document/save/auto' );
|
|
62
|
-
} catch ( error ) {
|
|
63
|
-
restoreOriginalElement( originalElement, componentInstance.id );
|
|
64
|
-
|
|
65
|
-
componentsActions.removeUnpublished( generatedUid );
|
|
66
|
-
componentsActions.removeCreatedThisSession( generatedUid );
|
|
67
|
-
|
|
68
|
-
throw error;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return { uid: generatedUid, instanceId: componentInstance.id };
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function restoreOriginalElement( originalElement: OriginalElementData, componentInstanceId: string ): void {
|
|
75
|
-
const componentContainer = getContainer( componentInstanceId );
|
|
76
|
-
|
|
77
|
-
if ( componentContainer ) {
|
|
78
|
-
deleteElement( { container: componentContainer, options: { useHistory: false } } );
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const parentContainer = getContainer( originalElement.parentId );
|
|
82
|
-
|
|
83
|
-
if ( ! parentContainer ) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const clonedModel = structuredClone( originalElement.model );
|
|
88
|
-
|
|
89
|
-
createElements( {
|
|
90
|
-
title: __( 'Restore Element', 'elementor' ),
|
|
91
|
-
elements: [
|
|
92
|
-
{
|
|
93
|
-
container: parentContainer,
|
|
94
|
-
model: clonedModel as Parameters< typeof createElements >[ 0 ][ 'elements' ][ 0 ][ 'model' ],
|
|
95
|
-
options: { at: originalElement.index },
|
|
96
|
-
},
|
|
97
|
-
],
|
|
98
|
-
} );
|
|
99
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { componentsActions } from '../../../store/dispatchers';
|
|
2
|
-
import { componentsSelectors } from '../../../store/selectors';
|
|
3
|
-
import { type ComponentId } from '../../../types';
|
|
4
|
-
import { deleteGroup } from '../utils/groups-transformers';
|
|
5
|
-
|
|
6
|
-
type DeleteGroupParams = {
|
|
7
|
-
componentId: ComponentId;
|
|
8
|
-
groupId: string;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export function deleteOverridableGroup( { componentId, groupId }: DeleteGroupParams ): boolean {
|
|
12
|
-
const overridableProps = componentsSelectors.getOverridableProps( componentId );
|
|
13
|
-
|
|
14
|
-
if ( ! overridableProps ) {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const group = overridableProps.groups.items[ groupId ];
|
|
19
|
-
|
|
20
|
-
if ( ! group || group.props.length > 0 ) {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const updatedGroups = deleteGroup( overridableProps.groups, groupId );
|
|
25
|
-
|
|
26
|
-
componentsActions.setOverridableProps( componentId, {
|
|
27
|
-
...overridableProps,
|
|
28
|
-
groups: updatedGroups,
|
|
29
|
-
} );
|
|
30
|
-
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { componentsActions } from '../../../store/dispatchers';
|
|
2
|
-
import { componentsSelectors } from '../../../store/selectors';
|
|
3
|
-
import { type ComponentId, type OverridableProp } from '../../../types';
|
|
4
|
-
import { type Source, trackComponentEvent } from '../../../utils/tracking';
|
|
5
|
-
import { revertElementOverridableSetting } from '../../utils/revert-overridable-settings';
|
|
6
|
-
import { removePropFromAllGroups } from '../utils/groups-transformers';
|
|
7
|
-
|
|
8
|
-
type DeletePropParams = {
|
|
9
|
-
componentId: ComponentId;
|
|
10
|
-
propKey: string | string[];
|
|
11
|
-
source: Source;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export function deleteOverridableProp( { componentId, propKey, source }: DeletePropParams ): void {
|
|
15
|
-
const overridableProps = componentsSelectors.getOverridableProps( componentId );
|
|
16
|
-
|
|
17
|
-
if ( ! overridableProps || Object.keys( overridableProps.props ).length === 0 ) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const propKeysToDelete = Array.isArray( propKey ) ? propKey : [ propKey ];
|
|
22
|
-
const deletedProps: OverridableProp[] = [];
|
|
23
|
-
|
|
24
|
-
for ( const key of propKeysToDelete ) {
|
|
25
|
-
const prop = overridableProps.props[ key ];
|
|
26
|
-
|
|
27
|
-
if ( ! prop ) {
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
deletedProps.push( prop );
|
|
32
|
-
revertElementOverridableSetting( prop.elementId, prop.propKey, prop.originValue, key );
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if ( deletedProps.length === 0 ) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const remainingProps = Object.fromEntries(
|
|
40
|
-
Object.entries( overridableProps.props ).filter( ( [ key ] ) => ! propKeysToDelete.includes( key ) )
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
const updatedGroups = removePropFromAllGroups( overridableProps.groups, propKey );
|
|
44
|
-
|
|
45
|
-
componentsActions.setOverridableProps( componentId, {
|
|
46
|
-
...overridableProps,
|
|
47
|
-
props: remainingProps,
|
|
48
|
-
groups: updatedGroups,
|
|
49
|
-
} );
|
|
50
|
-
|
|
51
|
-
const currentComponent = componentsSelectors.getCurrentComponent();
|
|
52
|
-
|
|
53
|
-
for ( const prop of deletedProps ) {
|
|
54
|
-
trackComponentEvent( {
|
|
55
|
-
action: 'propertyRemoved',
|
|
56
|
-
source,
|
|
57
|
-
component_uid: currentComponent?.uid,
|
|
58
|
-
property_id: prop.overrideKey,
|
|
59
|
-
property_path: prop.propKey,
|
|
60
|
-
property_name: prop.label,
|
|
61
|
-
element_type: prop.widgetType ?? prop.elType,
|
|
62
|
-
} );
|
|
63
|
-
}
|
|
64
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { getV1DocumentsManager, setDocumentModifiedStatus } from '@elementor/editor-documents';
|
|
2
|
-
import { getAllDescendants, type V1Element } from '@elementor/editor-elements';
|
|
3
|
-
|
|
4
|
-
import { COMPONENT_WIDGET_TYPE } from '../../../create-component-type';
|
|
5
|
-
import { componentsActions } from '../../../store/dispatchers';
|
|
6
|
-
|
|
7
|
-
const TITLE_EXTERNAL_CHANGE_COMMAND = 'title_external_change';
|
|
8
|
-
|
|
9
|
-
export const renameComponent = ( componentUid: string, newName: string ) => {
|
|
10
|
-
componentsActions.rename( componentUid, newName );
|
|
11
|
-
|
|
12
|
-
setDocumentModifiedStatus( true );
|
|
13
|
-
|
|
14
|
-
refreshComponentInstanceTitles( componentUid );
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
function refreshComponentInstanceTitles( componentUid: string ) {
|
|
18
|
-
const documentContainer = getDocumentContainer();
|
|
19
|
-
|
|
20
|
-
if ( ! documentContainer ) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const componentInstances = findComponentInstancesByUid( documentContainer, componentUid );
|
|
25
|
-
|
|
26
|
-
componentInstances.forEach( ( element ) => {
|
|
27
|
-
element.model.trigger?.( TITLE_EXTERNAL_CHANGE_COMMAND );
|
|
28
|
-
} );
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function getDocumentContainer(): V1Element | undefined {
|
|
32
|
-
const documentsManager = getV1DocumentsManager();
|
|
33
|
-
|
|
34
|
-
return documentsManager?.getCurrent()?.container as V1Element | undefined;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function findComponentInstancesByUid( documentContainer: V1Element, componentUid: string ): V1Element[] {
|
|
38
|
-
const allDescendants = getAllDescendants( documentContainer );
|
|
39
|
-
|
|
40
|
-
return allDescendants.filter( ( element ) => {
|
|
41
|
-
const widgetType = element.model.get( 'widgetType' );
|
|
42
|
-
const editorSettings = element.model.get( 'editor_settings' );
|
|
43
|
-
|
|
44
|
-
const isMatch = widgetType === COMPONENT_WIDGET_TYPE && editorSettings?.component_uid === componentUid;
|
|
45
|
-
|
|
46
|
-
return isMatch;
|
|
47
|
-
} );
|
|
48
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { componentsActions } from '../../../store/dispatchers';
|
|
2
|
-
import { componentsSelectors } from '../../../store/selectors';
|
|
3
|
-
import { type ComponentId } from '../../../types';
|
|
4
|
-
import { renameGroup } from '../utils/groups-transformers';
|
|
5
|
-
|
|
6
|
-
type RenameGroupParams = {
|
|
7
|
-
componentId: ComponentId;
|
|
8
|
-
groupId: string;
|
|
9
|
-
label: string;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export function renameOverridableGroup( { componentId, groupId, label }: RenameGroupParams ): boolean {
|
|
13
|
-
const overridableProps = componentsSelectors.getOverridableProps( componentId );
|
|
14
|
-
|
|
15
|
-
if ( ! overridableProps ) {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const group = overridableProps.groups.items[ groupId ];
|
|
20
|
-
|
|
21
|
-
if ( ! group ) {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const updatedGroups = renameGroup( overridableProps.groups, groupId, label );
|
|
26
|
-
|
|
27
|
-
componentsActions.setOverridableProps( componentId, {
|
|
28
|
-
...overridableProps,
|
|
29
|
-
groups: updatedGroups,
|
|
30
|
-
} );
|
|
31
|
-
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { componentsActions } from '../../../store/dispatchers';
|
|
2
|
-
import { componentsSelectors } from '../../../store/selectors';
|
|
3
|
-
import { type ComponentId } from '../../../types';
|
|
4
|
-
|
|
5
|
-
type ReorderGroupPropsParams = {
|
|
6
|
-
componentId: ComponentId;
|
|
7
|
-
groupId: string;
|
|
8
|
-
newPropsOrder: string[];
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export function reorderGroupProps( { componentId, groupId, newPropsOrder }: ReorderGroupPropsParams ): void {
|
|
12
|
-
const overridableProps = componentsSelectors.getOverridableProps( componentId );
|
|
13
|
-
|
|
14
|
-
if ( ! overridableProps ) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const group = overridableProps.groups.items[ groupId ];
|
|
19
|
-
|
|
20
|
-
if ( ! group ) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
componentsActions.setOverridableProps( componentId, {
|
|
25
|
-
...overridableProps,
|
|
26
|
-
groups: {
|
|
27
|
-
...overridableProps.groups,
|
|
28
|
-
items: {
|
|
29
|
-
...overridableProps.groups.items,
|
|
30
|
-
[ groupId ]: {
|
|
31
|
-
...group,
|
|
32
|
-
props: newPropsOrder,
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
} );
|
|
37
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { componentsActions } from '../../../store/dispatchers';
|
|
2
|
-
import { componentsSelectors } from '../../../store/selectors';
|
|
3
|
-
import { type ComponentId } from '../../../types';
|
|
4
|
-
|
|
5
|
-
type ReorderGroupsParams = {
|
|
6
|
-
componentId: ComponentId;
|
|
7
|
-
newOrder: string[];
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export function reorderOverridableGroups( { componentId, newOrder }: ReorderGroupsParams ): void {
|
|
11
|
-
const overridableProps = componentsSelectors.getOverridableProps( componentId );
|
|
12
|
-
|
|
13
|
-
if ( ! overridableProps ) {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
componentsActions.setOverridableProps( componentId, {
|
|
18
|
-
...overridableProps,
|
|
19
|
-
groups: {
|
|
20
|
-
...overridableProps.groups,
|
|
21
|
-
order: newOrder,
|
|
22
|
-
},
|
|
23
|
-
} );
|
|
24
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { type PropValue } from '@elementor/editor-props';
|
|
2
|
-
import { generateUniqueId } from '@elementor/utils';
|
|
3
|
-
|
|
4
|
-
import { componentsActions } from '../../../store/dispatchers';
|
|
5
|
-
import { componentsSelectors } from '../../../store/selectors';
|
|
6
|
-
import { type OriginPropFields, type OverridableProp } from '../../../types';
|
|
7
|
-
import { type Source, trackComponentEvent } from '../../../utils/tracking';
|
|
8
|
-
import {
|
|
9
|
-
addPropToGroup,
|
|
10
|
-
ensureGroupInOrder,
|
|
11
|
-
removePropFromGroup,
|
|
12
|
-
removePropsFromState,
|
|
13
|
-
resolveOrCreateGroup,
|
|
14
|
-
} from '../utils/groups-transformers';
|
|
15
|
-
|
|
16
|
-
type Props = {
|
|
17
|
-
componentId: number;
|
|
18
|
-
overrideKey: string | null;
|
|
19
|
-
elementId: string;
|
|
20
|
-
label: string;
|
|
21
|
-
groupId: string | null;
|
|
22
|
-
propKey: string;
|
|
23
|
-
elType: string;
|
|
24
|
-
widgetType: string;
|
|
25
|
-
originValue: PropValue;
|
|
26
|
-
originPropFields?: OriginPropFields;
|
|
27
|
-
source: Source;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
export function setOverridableProp( {
|
|
31
|
-
componentId,
|
|
32
|
-
overrideKey,
|
|
33
|
-
elementId,
|
|
34
|
-
label,
|
|
35
|
-
groupId,
|
|
36
|
-
propKey,
|
|
37
|
-
elType,
|
|
38
|
-
widgetType,
|
|
39
|
-
originValue,
|
|
40
|
-
originPropFields,
|
|
41
|
-
source,
|
|
42
|
-
}: Props ): OverridableProp | undefined {
|
|
43
|
-
const overridableProps = componentsSelectors.getOverridableProps( componentId );
|
|
44
|
-
|
|
45
|
-
if ( ! overridableProps ) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const existingOverridableProp = overrideKey ? overridableProps.props[ overrideKey ] : null;
|
|
50
|
-
const duplicatedTargetProps = Object.values( overridableProps.props ).filter(
|
|
51
|
-
( prop ) => prop.elementId === elementId && prop.propKey === propKey && prop !== existingOverridableProp
|
|
52
|
-
);
|
|
53
|
-
|
|
54
|
-
const { groups: groupsAfterResolve, groupId: currentGroupId } = resolveOrCreateGroup(
|
|
55
|
-
overridableProps.groups,
|
|
56
|
-
groupId || existingOverridableProp?.groupId || undefined
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
const overridableProp: OverridableProp = {
|
|
60
|
-
overrideKey: existingOverridableProp?.overrideKey || generateUniqueId( 'prop' ),
|
|
61
|
-
label,
|
|
62
|
-
elementId,
|
|
63
|
-
propKey,
|
|
64
|
-
widgetType,
|
|
65
|
-
elType,
|
|
66
|
-
originValue,
|
|
67
|
-
groupId: currentGroupId,
|
|
68
|
-
originPropFields,
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
const stateAfterRemovingDuplicates = removePropsFromState(
|
|
72
|
-
{ ...overridableProps, groups: groupsAfterResolve },
|
|
73
|
-
duplicatedTargetProps
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
const props = {
|
|
77
|
-
...stateAfterRemovingDuplicates.props,
|
|
78
|
-
[ overridableProp.overrideKey ]: overridableProp,
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
let groups = addPropToGroup( stateAfterRemovingDuplicates.groups, currentGroupId, overridableProp.overrideKey );
|
|
82
|
-
groups = ensureGroupInOrder( groups, currentGroupId );
|
|
83
|
-
|
|
84
|
-
const isChangingGroups = existingOverridableProp && existingOverridableProp.groupId !== currentGroupId;
|
|
85
|
-
|
|
86
|
-
if ( isChangingGroups ) {
|
|
87
|
-
groups = removePropFromGroup( groups, existingOverridableProp.groupId, overridableProp.overrideKey );
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
componentsActions.setOverridableProps( componentId, { props, groups } );
|
|
91
|
-
|
|
92
|
-
const isNewProperty = ! existingOverridableProp;
|
|
93
|
-
|
|
94
|
-
if ( isNewProperty ) {
|
|
95
|
-
const currentComponent = componentsSelectors.getCurrentComponent();
|
|
96
|
-
|
|
97
|
-
trackComponentEvent( {
|
|
98
|
-
action: 'propertyExposed',
|
|
99
|
-
source,
|
|
100
|
-
component_uid: currentComponent?.uid,
|
|
101
|
-
property_id: overridableProp.overrideKey,
|
|
102
|
-
property_path: propKey,
|
|
103
|
-
property_name: label,
|
|
104
|
-
element_type: widgetType ?? elType,
|
|
105
|
-
} );
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return overridableProp;
|
|
109
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { componentsActions } from '../../../store/dispatchers';
|
|
2
|
-
import { type SanitizeAttributes } from '../../../store/store';
|
|
3
|
-
import { type ComponentId } from '../../../types';
|
|
4
|
-
|
|
5
|
-
export function updateComponentSanitizedAttribute( componentId: ComponentId, attribute: SanitizeAttributes ) {
|
|
6
|
-
componentsActions.updateComponentSanitizedAttribute( componentId, attribute );
|
|
7
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { type V1Document } from '@elementor/editor-documents';
|
|
2
|
-
|
|
3
|
-
import { componentsActions } from '../../../store/dispatchers';
|
|
4
|
-
import { type ComponentsPathItem } from '../../../store/store';
|
|
5
|
-
|
|
6
|
-
export function updateCurrentComponent( params: {
|
|
7
|
-
path: ComponentsPathItem[];
|
|
8
|
-
currentComponentId: V1Document[ 'id' ] | null;
|
|
9
|
-
} ) {
|
|
10
|
-
componentsActions.setPath( params.path );
|
|
11
|
-
componentsActions.setCurrentComponentId( params.currentComponentId );
|
|
12
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { componentsActions } from '../../../store/dispatchers';
|
|
2
|
-
import { componentsSelectors } from '../../../store/selectors';
|
|
3
|
-
import { type ComponentId, type OverridableProp } from '../../../types';
|
|
4
|
-
import { movePropBetweenGroups } from '../utils/groups-transformers';
|
|
5
|
-
|
|
6
|
-
type UpdatePropParams = {
|
|
7
|
-
componentId: ComponentId;
|
|
8
|
-
overrideKey: string;
|
|
9
|
-
label: string;
|
|
10
|
-
groupId: string | null;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export function updateOverridablePropParams( {
|
|
14
|
-
componentId,
|
|
15
|
-
overrideKey,
|
|
16
|
-
label,
|
|
17
|
-
groupId,
|
|
18
|
-
}: UpdatePropParams ): OverridableProp | undefined {
|
|
19
|
-
const overridableProps = componentsSelectors.getOverridableProps( componentId );
|
|
20
|
-
|
|
21
|
-
if ( ! overridableProps ) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const prop = overridableProps.props[ overrideKey ];
|
|
26
|
-
|
|
27
|
-
if ( ! prop ) {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const oldGroupId = prop.groupId;
|
|
32
|
-
const newGroupId = groupId ?? oldGroupId;
|
|
33
|
-
|
|
34
|
-
const updatedProp: OverridableProp = {
|
|
35
|
-
...prop,
|
|
36
|
-
label,
|
|
37
|
-
groupId: newGroupId,
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const updatedGroups = movePropBetweenGroups( overridableProps.groups, overrideKey, oldGroupId, newGroupId );
|
|
41
|
-
|
|
42
|
-
componentsActions.setOverridableProps( componentId, {
|
|
43
|
-
...overridableProps,
|
|
44
|
-
props: {
|
|
45
|
-
...overridableProps.props,
|
|
46
|
-
[ overrideKey ]: updatedProp,
|
|
47
|
-
},
|
|
48
|
-
groups: updatedGroups,
|
|
49
|
-
} );
|
|
50
|
-
|
|
51
|
-
return updatedProp;
|
|
52
|
-
}
|