Skip to content

Commit 479d809

Browse files
committed
Support delete component in editor panel
1 parent 6b5b08b commit 479d809

File tree

5 files changed

+45
-5
lines changed

5 files changed

+45
-5
lines changed

mesop/editor/editor_codemod.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class DeleteComponentCodemod(VisitorBasedCodemodCommand):
4242
METADATA_DEPENDENCIES = (PositionProvider,)
4343

4444
def __init__(
45-
self, context: CodemodContext, input: pb.EditorNewComponent
45+
self, context: CodemodContext, input: pb.EditorDeleteComponent
4646
) -> None:
4747
super().__init__(context)
4848
self.input = input

mesop/editor/editor_handler.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import mesop.protos.ui_pb2 as pb
1010
from mesop.editor.editor_codemod import (
11+
DeleteComponentCodemod,
1112
NewComponentCodemod,
1213
UpdateCallsiteCodemod,
1314
)
@@ -29,6 +30,12 @@ def handle_editor_event(event: pb.EditorEvent):
2930
NewComponentCodemod(CodemodContext(), event.new_component),
3031
)
3132
return
33+
if event.HasField("delete_component"):
34+
run_codemod(
35+
event.delete_component.source_code_location,
36+
DeleteComponentCodemod(CodemodContext(), event.delete_component),
37+
)
38+
return
3239
raise MesopInternalException("Not yet event implemented event", event)
3340

3441

mesop/web/src/dev_tools/editor_panel/editor_panel.ng.html

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
@if(hasFocusedComponent()) {
2-
<div class="component-name">
3-
{{getFocusedComponent()?.getType()?.getName() ?? "[root]"}}
2+
<div class="component-header">
3+
<span class="component-name">
4+
{{getFocusedComponent()?.getType()?.getName() ?? "[root]"}}
5+
</span>
6+
<mat-icon
7+
class="delete-component"
8+
(click)="deleteComponent(getFocusedComponent()!.getSourceCodeLocation()!)"
9+
>delete</mat-icon
10+
>
411
</div>
512
<mesop-editor-fields
613
[fields]="getFields()"

mesop/web/src/dev_tools/editor_panel/editor_panel.scss

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,16 @@
66
height: 100%;
77
}
88

9+
.component-header {
10+
padding: 8px;
11+
display: flex;
12+
justify-content: space-between;
13+
align-items: center;
14+
}
15+
916
.component-name {
1017
font-weight: 500;
1118
font-size: 16px;
12-
padding: 8px;
1319
text-transform: capitalize;
1420
}
1521

mesop/web/src/dev_tools/editor_panel/editor_panel.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,27 @@ import {
77
FieldType,
88
ComponentConfig,
99
EditorField,
10+
EditorEvent,
11+
EditorDeleteComponent,
12+
SourceCodeLocation,
1013
} from 'mesop/mesop/protos/ui_jspb_proto_pb/mesop/protos/ui_pb';
1114
import {MatDividerModule} from '@angular/material/divider';
1215
import {EditorFields} from './editor_fields/editor_fields';
16+
import {MatIconModule} from '@angular/material/icon';
17+
import {Channel} from '../../services/channel';
1318

1419
@Component({
1520
selector: 'mesop-editor-panel',
1621
templateUrl: 'editor_panel.ng.html',
1722
styleUrl: 'editor_panel.css',
1823
standalone: true,
19-
imports: [ObjectTree, EditorFields, MatDividerModule, ComponentTree],
24+
imports: [
25+
ObjectTree,
26+
EditorFields,
27+
MatDividerModule,
28+
ComponentTree,
29+
MatIconModule,
30+
],
2031
})
2132
export class EditorPanel {
2233
@Input()
@@ -28,8 +39,17 @@ export class EditorPanel {
2839
constructor(
2940
private logger: Logger,
3041
private editorService: EditorService,
42+
private channel: Channel,
3143
) {}
3244

45+
deleteComponent(location: SourceCodeLocation): void {
46+
const editorEvent = new EditorEvent();
47+
const deleteComponent = new EditorDeleteComponent();
48+
deleteComponent.setSourceCodeLocation(location);
49+
editorEvent.setDeleteComponent(deleteComponent);
50+
this.channel.dispatchEditorEvent(editorEvent);
51+
}
52+
3353
hasFocusedComponent(): boolean {
3454
return Boolean(this.editorService.getFocusedComponent());
3555
}

0 commit comments

Comments
 (0)