From 445346b29b4e98cdcd9199a7cf9119c667d9ad3c Mon Sep 17 00:00:00 2001 From: vato007 Date: Sat, 6 Jul 2024 15:12:26 +0930 Subject: [PATCH] Fix select theming, add object field --- src/app/editor/editor.component.ts | 2 +- .../object-field/object-field.component.scss | 0 .../object-field/object-field.component.ts | 48 +++++++++++++++++++ .../proto-field/proto-field.component.ts | 15 +++++- src/styles.scss | 1 + 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 src/app/editor/object-field/object-field.component.scss create mode 100644 src/app/editor/object-field/object-field.component.ts diff --git a/src/app/editor/editor.component.ts b/src/app/editor/editor.component.ts index 98b425a..50ea3e2 100644 --- a/src/app/editor/editor.component.ts +++ b/src/app/editor/editor.component.ts @@ -32,7 +32,7 @@ export class EditorComponent { private code = viewChild>('code'); - constructor(private sanitizer: DomSanitizer) { + constructor(sanitizer: DomSanitizer) { effect(() => { const element = this.code()?.nativeElement; if (element) { diff --git a/src/app/editor/object-field/object-field.component.scss b/src/app/editor/object-field/object-field.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/editor/object-field/object-field.component.ts b/src/app/editor/object-field/object-field.component.ts new file mode 100644 index 0000000..882e53f --- /dev/null +++ b/src/app/editor/object-field/object-field.component.ts @@ -0,0 +1,48 @@ +import { CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + OnInit, + computed, + effect, + forwardRef, + input, + model, +} from '@angular/core'; +import { ObjectMessage } from '../../model/proto-message.model'; +import { ProtoFieldComponent } from '../proto-field/proto-field.component'; + +@Component({ + selector: 'app-object-field', + standalone: true, + imports: [CommonModule, forwardRef(() => ProtoFieldComponent)], + template: `

+ {{ label() }} ({{ configuration().messageDefinition.name }}) +

+
+ @for (item of configuration().messageDefinition.values; track $index) { + + } +
`, + styleUrl: './object-field.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class ObjectFieldComponent { + label = input(); + configuration = input.required(); + + values = model>(); + + currentValue = computed(() => this.values() ?? {}); + + protected updateValue(key: string, value: any) { + const existingValue = { ...this.currentValue() }; + existingValue[key] = value; + this.values.set(existingValue); + } +} diff --git a/src/app/editor/proto-field/proto-field.component.ts b/src/app/editor/proto-field/proto-field.component.ts index 53ccf08..2ec8ca4 100644 --- a/src/app/editor/proto-field/proto-field.component.ts +++ b/src/app/editor/proto-field/proto-field.component.ts @@ -17,9 +17,11 @@ import { MapMessage, MessageConfiguration, MessageTypeEnum, + ObjectMessage, } from '../../model/proto-message.model'; import { ListFieldComponent } from '../list-field/list-field.component'; import { MapFieldComponent } from '../map-field/map-field.component'; +import { ObjectFieldComponent } from '../object-field/object-field.component'; @Component({ selector: 'app-proto-field', @@ -33,6 +35,7 @@ import { MapFieldComponent } from '../map-field/map-field.component'; MatFormFieldModule, MatSelectModule, MatInputModule, + ObjectFieldComponent, ], template: `@switch (configuration().type) { @case (MessageTypeEnum.String) { @@ -71,7 +74,13 @@ import { MapFieldComponent } from '../map-field/map-field.component'; [(values)]="value" [configuration]="mapConfiguration()" > - } @case (MessageTypeEnum.Object) {} @case (MessageTypeEnum.Raw) {}}`, + } @case (MessageTypeEnum.Object) { + + } @case (MessageTypeEnum.Raw) {}}`, styleUrl: './proto-field.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, }) @@ -92,5 +101,9 @@ export class ProtoFieldComponent { () => this.configuration() as MapMessage ); + protected objectConfiguration = computed( + () => this.configuration() as ObjectMessage + ); + protected readonly MessageTypeEnum = MessageTypeEnum; } diff --git a/src/styles.scss b/src/styles.scss index 7da354a..80a4f4e 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -28,6 +28,7 @@ html { @include mat.icon-theme(theme.$rose-theme); @include mat.form-field-theme(theme.$rose-theme); @include mat.list-theme(theme.$rose-theme); + @include mat.select-theme(theme.$rose-theme); @include custom-colours(theme.$rose-theme); }