src/app/features/matching-entities/admin-matching-entities/edit-matching-entity-side/edit-matching-entity-side.component.ts

Metadata

Relationships

Depends on

Index

Properties
Methods
Inputs
Outputs

Inputs

sideConfig
Type : MatchingSideConfig

Outputs

sideConfig
Type : MatchingSideConfig

Methods

onColumnsChange
onColumnsChange(newCols: ColumnConfig[])
Parameters :
Name Type Optional
newCols ColumnConfig[] No
Returns : void
onEntityTypeChange
onEntityTypeChange(entityType: string | string[])
Parameters :
Name Type Optional
entityType string | string[] No
Returns : void
onFiltersChange
onFiltersChange(newFilters: ColumnConfig[])
Parameters :
Name Type Optional
newFilters ColumnConfig[] No
Returns : void
onPrefilterChange
onPrefilterChange(updatedPrefilter: any)
Parameters :
Name Type Optional
updatedPrefilter any No
Returns : void

Properties

Readonly additionalFields
Type : unknown
Default value : computed<ColumnConfig[]>(() => [ { id: "distance", label: $localize`:column for matching view:Distance` }, { id: "_id", label: $localize`:label for field represented as DisplayEntity block to select in Admin UI:Name (record preview)`, additional: this.sideConfig().entityType, noSorting: true, viewComponent: "DisplayEntity", }, ])
Readonly availableEntityTypes
Type : string[]
Default value : this.entityRegistry .getEntityTypes() .map((ctor) => ctor.value.ENTITY_TYPE)
Readonly columns
Type : unknown
Default value : computed<ColumnConfig[]>( () => this.sideConfig()?.columns ?? [], )
Readonly entityConstructor
Type : unknown
Default value : computed<EntityConstructor | null>(() => this.entityRegistry.get(this.sideConfig()?.entityType), )
Readonly entityRegistry
Type : unknown
Default value : inject(EntityRegistry)
Readonly filters
Type : unknown
Default value : computed<string[]>( () => this.sideConfig()?.availableFilters?.map((f) => f.id) ?? [], )
import {
  Component,
  computed,
  inject,
  model,
  ChangeDetectionStrategy,
} from "@angular/core";
import { EntityConstructor } from "#src/app/core/entity/model/entity";
import { MatFormFieldModule } from "@angular/material/form-field";
import { MatSelectModule } from "@angular/material/select";
import { MatOptionModule } from "@angular/material/core";

import { AdminListManagerComponent } from "../../../../core/admin/admin-list-manager/admin-list-manager.component";
import { ColumnConfig } from "#src/app/core/common-components/entity-form/FormConfig";
import { MatchingSideConfig } from "#src/app/features/matching-entities/matching-entities/matching-entities-config";
import { EntityRegistry } from "#src/app/core/entity/database-entity.decorator";
import { EntityTypeSelectComponent } from "#src/app/core/entity/entity-type-select/entity-type-select.component";
import { ConditionsEditorComponent } from "app/core/common-components/conditions-editor/conditions-editor.component";

@Component({
  changeDetection: ChangeDetectionStrategy.OnPush,
  selector: "app-edit-matching-entity-side",
  standalone: true,
  imports: [
    MatFormFieldModule,
    MatSelectModule,
    MatOptionModule,
    AdminListManagerComponent,
    EntityTypeSelectComponent,
    ConditionsEditorComponent,
  ],
  templateUrl: "./edit-matching-entity-side.component.html",
  styleUrls: ["./edit-matching-entity-side.component.scss"],
})
export class EditMatchingEntitySideComponent {
  readonly entityRegistry = inject(EntityRegistry);

  sideConfig = model<MatchingSideConfig>({});

  readonly availableEntityTypes: string[] = this.entityRegistry
    .getEntityTypes()
    .map((ctor) => ctor.value.ENTITY_TYPE);

  readonly additionalFields = computed<ColumnConfig[]>(() => [
    { id: "distance", label: $localize`:column for matching view:Distance` },
    {
      id: "_id",
      label: $localize`:label for field represented as DisplayEntity block to select in Admin UI:Name (record preview)`,
      additional: this.sideConfig().entityType,
      noSorting: true,
      viewComponent: "DisplayEntity",
    },
  ]);

  readonly entityConstructor = computed<EntityConstructor | null>(() =>
    this.entityRegistry.get(this.sideConfig()?.entityType),
  );

  readonly columns = computed<ColumnConfig[]>(
    () => this.sideConfig()?.columns ?? [],
  );

  readonly filters = computed<string[]>(
    () => this.sideConfig()?.availableFilters?.map((f) => f.id) ?? [],
  );

  onEntityTypeChange(entityType: string | string[]): void {
    entityType = <string>entityType; // assert this is a string because we don't use multi-select mode
    if (this.sideConfig().entityType === entityType) return;

    this.sideConfig.set({
      entityType,
      columns: [],
      availableFilters: [],
      prefilter: {},
    });
  }

  onColumnsChange(newCols: ColumnConfig[]) {
    this.sideConfig.set({
      ...this.sideConfig(),
      columns: newCols,
    });
  }

  onFiltersChange(newFilters: ColumnConfig[]) {
    const updatedFilters = newFilters.map((f) =>
      typeof f === "string" ? f : f.id,
    );
    this.sideConfig.set({
      ...this.sideConfig(),
      availableFilters: updatedFilters.map((id) => ({ id })),
    });
  }

  onPrefilterChange(updatedPrefilter: any) {
    this.sideConfig.set({
      ...this.sideConfig(),
      prefilter: updatedPrefilter ?? {},
    });
  }
}
<div class="padding-regular">
  <mat-form-field appearance="fill" class="full-width">
    <mat-label i18n>Select Record Type</mat-label>
    <app-entity-type-select
      [value]="sideConfig().entityType"
      (valueChange)="onEntityTypeChange($event)"
    >
    </app-entity-type-select>
  </mat-form-field>

  <h4 i18n>Available columns</h4>
  <app-admin-list-manager
    [entityType]="entityConstructor()"
    [items]="columns()"
    [activeFields]="columns()"
    [additionalFields]="additionalFields()"
    fieldLabel="These columns will appear in the top summary view and in the table
      view below when matching; Add columns:"
    i18n-fieldLabel
    (itemsChange)="onColumnsChange($event)"
  ></app-admin-list-manager>

  <h4 i18n>Available Filters</h4>
  <app-admin-list-manager
    [entityType]="entityConstructor()"
    [items]="filters()"
    [activeFields]="filters()"
    templateType="filter"
    fieldLabel="These filters (and any prefilters) are only applied to the table list view during matching; Add filters:"
    i18n-fieldLabel
    (itemsChange)="onFiltersChange($event)"
  ></app-admin-list-manager>

  <div>
    <h4 i18n>Records available for matching</h4>
    <p i18n>
      Configure filters to only show certain records for matching, that fulfill
      the required criteria (e.g. having a required status).
    </p>
    <app-conditions-editor
      [conditions]="sideConfig().prefilter"
      [entityConstructor]="entityConstructor()"
      (conditionsChange)="onPrefilterChange($event)"
    ></app-conditions-editor>
  </div>
</div>

./edit-matching-entity-side.component.scss

Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""