Add overflow to editor, maximise field widths, add toggle for preview
This commit is contained in:
@@ -8,6 +8,13 @@
|
|||||||
>
|
>
|
||||||
<mat-icon [class.filled]="leftSideOpen()">dock_to_right</mat-icon>
|
<mat-icon [class.filled]="leftSideOpen()">dock_to_right</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
(click)="previewOpen.set(!previewOpen())"
|
||||||
|
title="Toggle editor preview"
|
||||||
|
>
|
||||||
|
<mat-icon [class.filled]="previewOpen()">dock_to_bottom</mat-icon>
|
||||||
|
</button>
|
||||||
<button
|
<button
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
(click)="rightSideOpen.set(!rightSideOpen())"
|
(click)="rightSideOpen.set(!rightSideOpen())"
|
||||||
@@ -37,7 +44,10 @@
|
|||||||
</mat-sidenav>
|
</mat-sidenav>
|
||||||
<mat-sidenav-content>
|
<mat-sidenav-content>
|
||||||
@if(selectedMessage()) {
|
@if(selectedMessage()) {
|
||||||
<app-editor [selectedMessage]="selectedMessage()!"></app-editor>
|
<app-editor
|
||||||
|
[selectedMessage]="selectedMessage()!"
|
||||||
|
[showRaw]="previewOpen()"
|
||||||
|
></app-editor>
|
||||||
}
|
}
|
||||||
</mat-sidenav-content>
|
</mat-sidenav-content>
|
||||||
</mat-sidenav-container>
|
</mat-sidenav-container>
|
||||||
|
|||||||
@@ -16,6 +16,14 @@ mat-sidenav-container {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mat-sidenav-content {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
app-editor {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
.mat-sidenav.mat-drawer-end,
|
.mat-sidenav.mat-drawer-end,
|
||||||
.mat-sidenav {
|
.mat-sidenav {
|
||||||
padding: var(--mat-sidenav-container-shape);
|
padding: var(--mat-sidenav-container-shape);
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ export class AppComponent {
|
|||||||
protected selectedMessage = signal<ProtoMessage | undefined>(undefined);
|
protected selectedMessage = signal<ProtoMessage | undefined>(undefined);
|
||||||
protected rightSideOpen = signal(true);
|
protected rightSideOpen = signal(true);
|
||||||
protected leftSideOpen = signal(true);
|
protected leftSideOpen = signal(true);
|
||||||
|
protected previewOpen = signal(true);
|
||||||
|
|
||||||
protected isMobile = signal(
|
protected isMobile = signal(
|
||||||
this.breakpointObserver.isMatched(mobileBreakpoints)
|
this.breakpointObserver.isMatched(mobileBreakpoints)
|
||||||
|
|||||||
@@ -10,4 +10,4 @@
|
|||||||
} }
|
} }
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<pre><code #code></code></pre>
|
<pre *ngIf="showRaw()"><code #code></code></pre>
|
||||||
|
|||||||
@@ -1,3 +1,15 @@
|
|||||||
:host {
|
:host {
|
||||||
padding: var(--mat-sidenav-container-shape);
|
padding: var(--mat-sidenav-container-shape);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre,
|
||||||
|
div {
|
||||||
|
flex: 1;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
div {
|
||||||
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ export class EditorComponent {
|
|||||||
fileContents = input<string>();
|
fileContents = input<string>();
|
||||||
selectedMessage = input.required<ProtoMessage>();
|
selectedMessage = input.required<ProtoMessage>();
|
||||||
|
|
||||||
|
showRaw = input<boolean>(true);
|
||||||
|
|
||||||
protected values = signal<any>(undefined);
|
protected values = signal<any>(undefined);
|
||||||
|
|
||||||
private code = viewChild<ElementRef<HTMLElement>>('code');
|
private code = viewChild<ElementRef<HTMLElement>>('code');
|
||||||
@@ -53,7 +55,7 @@ export class EditorComponent {
|
|||||||
const message = this.selectedMessage();
|
const message = this.selectedMessage();
|
||||||
this.values.set(
|
this.values.set(
|
||||||
Object.fromEntries(
|
Object.fromEntries(
|
||||||
message.values.map((value) => [[value.name, null]])
|
message.values.map((value) => [[value.name, undefined]])
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,7 +1,17 @@
|
|||||||
:host {
|
:host {
|
||||||
display: block;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.row-wrapper {
|
.row-wrapper {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
align-items: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
app-proto-field {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.add-button {
|
||||||
|
align-self: flex-end;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,9 @@ import { ProtoFieldComponent } from '../proto-field/proto-field.component';
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
} }
|
} }
|
||||||
<button mat-icon-button (click)="add()"><mat-icon>add</mat-icon></button>`,
|
<button mat-icon-button class="add-button" (click)="add()">
|
||||||
|
<mat-icon>add</mat-icon>
|
||||||
|
</button>`,
|
||||||
styleUrl: './list-field.component.scss',
|
styleUrl: './list-field.component.scss',
|
||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
@@ -48,10 +50,10 @@ export class ListFieldComponent {
|
|||||||
const existingValues = this.values();
|
const existingValues = this.values();
|
||||||
if (existingValues) {
|
if (existingValues) {
|
||||||
const newValues = [...existingValues];
|
const newValues = [...existingValues];
|
||||||
newValues.push(undefined);
|
newValues.push('');
|
||||||
this.values.set(newValues);
|
this.values.set(newValues);
|
||||||
} else {
|
} else {
|
||||||
this.values.set([undefined]);
|
this.values.set(['']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
:host {
|
:host {
|
||||||
display: block;
|
display: block;
|
||||||
|
|
||||||
|
& > * {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,14 +76,14 @@ export class ProtoFieldComponent {
|
|||||||
if (this.configuration().type === MessageTypeEnum.Enum) {
|
if (this.configuration().type === MessageTypeEnum.Enum) {
|
||||||
return this.configuration() as EnumMessage;
|
return this.configuration() as EnumMessage;
|
||||||
}
|
}
|
||||||
return null;
|
return;
|
||||||
});
|
});
|
||||||
|
|
||||||
protected listConfiguration = computed(() => {
|
protected listConfiguration = computed(() => {
|
||||||
if (this.configuration().type === MessageTypeEnum.List) {
|
if (this.configuration().type === MessageTypeEnum.List) {
|
||||||
return this.configuration() as ListMessage;
|
return this.configuration() as ListMessage;
|
||||||
}
|
}
|
||||||
return null;
|
return;
|
||||||
});
|
});
|
||||||
|
|
||||||
protected readonly MessageTypeEnum = MessageTypeEnum;
|
protected readonly MessageTypeEnum = MessageTypeEnum;
|
||||||
|
|||||||
Reference in New Issue
Block a user