src/app/features/reporting/edit-report-mode/edit-report-mode.component.ts

Description

Edit a report's mode as a dropdown of the supported modes ("reporting", "exporting", "sql"), each with a tooltip explaining what it does.

Extends

CustomFormControlDirective<string>

Implements

EditComponent

Example

Metadata

Relationships

Used by

No results matching.

Index

Properties
Methods
Inputs
Outputs

Inputs

formFieldConfig
Type : FormFieldConfig
aria-describedby
Type : string
disabled
Type : boolean
ngControl
Type : any
Default value : inject(NgControl, { optional: true, self: true })
placeholder
Type : string
required
Type : boolean
value
Type : T

Outputs

valueChange
Type : EventEmitter

Methods

blur
blur()
Returns : void
focus
focus()
Returns : void
onContainerClick
onContainerClick(event: MouseEvent)
Parameters :
Name Type Optional
event MouseEvent No
Returns : void
registerOnChange
registerOnChange(fn: any)
Parameters :
Name Type Optional
fn any No
Returns : void
registerOnTouched
registerOnTouched(fn: any)
Parameters :
Name Type Optional
fn any No
Returns : void
setDescribedByIds
setDescribedByIds(ids: string[])
Parameters :
Name Type Optional
ids string[] No
Returns : void
setDisabledState
setDisabledState(isDisabled: boolean)
Parameters :
Name Type Optional
isDisabled boolean No
Returns : void
writeValue
writeValue(value: T, notifyFormControl: unknown)

Implementation for Angular ControlValueAccessor interface that links the form control value to the component value

Parameters :
Name Type Optional Default value Description
value T No

The new value to set

notifyFormControl unknown No false

Whether to notify the FormControl of this change (for internal updates)

Returns : void

Properties

Readonly reportingBackendEnabled
Type : unknown
Default value : resource({ loader: () => this.sqlReportService.isReportingBackendEnabled(), })

Whether the server-side reporting backend required for "sql" reports is available. Used to warn the user when they pick "sql" in an environment without the feature.

controlType
Type : string
Default value : "custom-control"
elementRef
Type : unknown
Default value : inject<ElementRef<HTMLElement>>(ElementRef)
Readonly enabled
Type : Signal<boolean>
Default value : computed(() => !this._disabled())

Whether the control is currently enabled, as a signal (tracks disabled).

errorStateMatcher
Type : unknown
Default value : inject(ErrorStateMatcher)
id
Type : unknown
Default value : `custom-form-control-${CustomFormControlDirective.nextId++}`
Static nextId
Type : number
Default value : 0
onChange
Type : unknown
Default value : () => {...}
onTouched
Type : unknown
Default value : () => {...}
parentForm
Type : unknown
Default value : inject(NgForm, { optional: true })
parentFormGroup
Type : unknown
Default value : inject(FormGroupDirective, { optional: true })
stateChanges
Type : unknown
Default value : new Subject<void>()
Readonly valueSignal
Type : Signal<T>
Default value : computed(() => this._value())

The current value of the control as a signal. Authoritative in both modes: it reflects the bound FormControl (synced in ngDoCheck) as well as [(value)] / writeValue updates.

import {
  ChangeDetectionStrategy,
  Component,
  inject,
  input,
  resource,
} from "@angular/core";
import { ReactiveFormsModule } from "@angular/forms";
import { MatFormFieldControl } from "@angular/material/form-field";
import { MatSelectModule } from "@angular/material/select";
import { MatTooltipModule } from "@angular/material/tooltip";
import { CustomFormControlDirective } from "#src/app/core/common-components/basic-autocomplete/custom-form-control.directive";
import { FeatureDisabledInfoComponent } from "#src/app/core/common-components/feature-disabled-info/feature-disabled-info.component";
import { FormFieldConfig } from "#src/app/core/common-components/entity-form/FormConfig";
import { DynamicComponent } from "#src/app/core/config/dynamic-components/dynamic-component.decorator";
import { EditComponent } from "#src/app/core/entity/entity-field-edit/dynamic-edit/edit-component.interface";
import { SqlReportService } from "../sql-report/sql-report.service";

/**
 * Edit a report's `mode` as a dropdown of the supported modes
 * ("reporting", "exporting", "sql"), each with a tooltip explaining what it does.
 */
@DynamicComponent("EditReportMode")
@Component({
  selector: "app-edit-report-mode",
  templateUrl: "./edit-report-mode.component.html",
  changeDetection: ChangeDetectionStrategy.OnPush,
  imports: [
    ReactiveFormsModule,
    MatSelectModule,
    MatTooltipModule,
    FeatureDisabledInfoComponent,
  ],
  providers: [
    { provide: MatFormFieldControl, useExisting: EditReportModeComponent },
  ],
})
export class EditReportModeComponent
  extends CustomFormControlDirective<string>
  implements EditComponent
{
  private readonly sqlReportService = inject(SqlReportService);

  formFieldConfig = input<FormFieldConfig>();

  /**
   * Whether the server-side reporting backend required for "sql" reports is available.
   * Used to warn the user when they pick "sql" in an environment without the feature.
   */
  readonly reportingBackendEnabled = resource({
    loader: () => this.sqlReportService.isReportingBackendEnabled(),
  });
}
<mat-select [formControl]="formControl">
  <mat-option
    value="reporting"
    matTooltip="Aggregated statistics (counts, groupings) calculated in the browser. No server-side reporting backend required."
    i18n-matTooltip="ReportConfig mode description"
    matTooltipPosition="right"
  >
    <span i18n="ReportConfig mode option">Reporting</span>
  </mat-option>
  <mat-option
    value="exporting"
    matTooltip="A flat export of the matching records. No server-side reporting backend required."
    i18n-matTooltip="ReportConfig mode description"
    matTooltipPosition="right"
  >
    <span i18n="ReportConfig mode option">Exporting</span>
  </mat-option>
  <mat-option
    value="sql"
    matTooltip="Custom server-side SQL queries for advanced reports. Requires the reporting backend to be enabled."
    i18n-matTooltip="ReportConfig mode description"
    matTooltipPosition="right"
  >
    <span i18n="ReportConfig mode option">SQL</span>
  </mat-option>
</mat-select>

@if (valueSignal() === "sql") {
  <app-feature-disabled-info
    featureName="SQL reports"
    i18n-featureName="ReportConfig SQL feature name"
    [featureEnabled]="reportingBackendEnabled.value()"
    [compactView]="true"
  ></app-feature-disabled-info>
}
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""