src/app/features/matching-entities/admin-matching-entities/edit-matching-entity-side/edit-matching-entity-side.component.ts
| changeDetection | ChangeDetectionStrategy.OnPush |
| selector | app-edit-matching-entity-side |
| standalone | true |
| imports |
MatFormFieldModule
MatSelectModule
MatOptionModule
|
| styleUrls | ./edit-matching-entity-side.component.scss |
| templateUrl | ./edit-matching-entity-side.component.html |
MatFormFieldModule
MatSelectModule
MatOptionModule
AdminListManagerComponent
EntityTypeSelectComponent
ConditionsEditorComponent
Properties |
|
Methods |
Inputs |
Outputs |
| sideConfig | |
Type : MatchingSideConfig
|
|
| sideConfig | |
Type : MatchingSideConfig
|
|
| onColumnsChange | ||||||
onColumnsChange(newCols: ColumnConfig[])
|
||||||
|
Parameters :
Returns :
void
|
| onEntityTypeChange | ||||||
onEntityTypeChange(entityType: string | string[])
|
||||||
|
Parameters :
Returns :
void
|
| onFiltersChange | ||||||
onFiltersChange(newFilters: ColumnConfig[])
|
||||||
|
Parameters :
Returns :
void
|
| onPrefilterChange | ||||||
onPrefilterChange(updatedPrefilter: any)
|
||||||
|
Parameters :
Returns :
void
|
| 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