import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, computed, input, model, } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatInputModule } from '@angular/material/input'; import { MatSelectModule } from '@angular/material/select'; import { EnumMessage, ListMessage, MapMessage, MessageConfiguration, MessageTypeEnum, NumericMessage, ObjectMessage, StringMessage, } 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'; import { StringFieldComponent } from '../string-field/string-field.component'; @Component({ selector: 'app-proto-field', imports: [ CommonModule, FormsModule, ListFieldComponent, MapFieldComponent, MatCheckboxModule, MatFormFieldModule, MatSelectModule, MatInputModule, ObjectFieldComponent, StringFieldComponent, ], template: `@switch (configuration().type) { @case (MessageTypeEnum.String) { } @case (MessageTypeEnum.Numeric) { {{ label() }} Number should not be less than {{ numericConfiguration().min }} Number should not greater than {{ numericConfiguration().max }} } @case (MessageTypeEnum.Boolean) {

{{ label() }}

} @case(MessageTypeEnum.Enum) { {{ label() }} @for(option of enumConfiguration().options; track enumConfiguration()!.options) { None {{ option }} } } @case (MessageTypeEnum.List) { } @case (MessageTypeEnum.Map){ } @case (MessageTypeEnum.Object) { } @case (MessageTypeEnum.Raw) {}}`, styleUrl: './proto-field.component.scss', changeDetection: ChangeDetectionStrategy.OnPush }) export class ProtoFieldComponent { label = input(); configuration = input.required(); value = model(); protected stringConfiguration = computed( () => this.configuration() as StringMessage ); protected numericConfiguration = computed( () => this.configuration() as NumericMessage ); protected enumConfiguration = computed( () => this.configuration() as EnumMessage ); protected listConfiguration = computed( () => this.configuration() as ListMessage ); protected mapConfiguration = computed( () => this.configuration() as MapMessage ); protected objectConfiguration = computed( () => this.configuration() as ObjectMessage ); protected readonly MessageTypeEnum = MessageTypeEnum; }