Skip to content

Commit 95ee35a

Browse files
committed
extend column types to include derived column, pinnedLeft and related to enable column filtering, add multiselect for x/y axis fields
1 parent 7e94739 commit 95ee35a

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

src/@seed/api/column/column.types.ts

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ export type Column = {
3333
column_description: string;
3434
derived_column: number | null;
3535
is_excluded_from_hash: boolean;
36+
related?: boolean;
37+
pinnedLeft?: boolean;
3638
}
3739

3840
export type ColumnsResponse = {

src/app/modules/organizations/settings/default-display-fields/default-display-fields.component.html

+34
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,40 @@
4949
</mat-form-field>
5050
</div>
5151
<mat-divider role="separator" class="mat-divider mat-divider-horizontal mb-6 mt-4" aria-orientation="horizontal"></mat-divider>
52+
<div class="flex flex-col">
53+
<div class="text-lg font-medium">Columns to Include in Reports x axis Options
54+
</div>
55+
56+
<mat-form-field class="mb-6">
57+
<mat-label>X Axis Columns
58+
</mat-label>
59+
<mat-select formControlName="default_reports_x_axis_options" multiple>
60+
<mat-option value="">None</mat-option>
61+
@for (col of xAxisColumns; track col.id) {
62+
<mat-option [value]="col.id">{{ col.display_name }}</mat-option>
63+
}
64+
</mat-select>
65+
66+
</mat-form-field>
67+
</div>
68+
<mat-divider role="separator" class="mat-divider mat-divider-horizontal mb-6 mt-4" aria-orientation="horizontal"></mat-divider>
69+
<div class="flex flex-col">
70+
<div class="text-lg font-medium">Columns to Include in Reports Y Axis Options
71+
</div>
72+
73+
<mat-form-field class="mb-6">
74+
<mat-label>Y Axis Columns
75+
</mat-label>
76+
<mat-select formControlName="default_reports_y_axis_options" multiple>
77+
<mat-option value="">None</mat-option>
78+
@for (col of yAxisColumns; track col.id) {
79+
<mat-option [value]="col.id">{{ col.display_name }}</mat-option>
80+
}
81+
</mat-select>
82+
83+
</mat-form-field>
84+
</div>
85+
<mat-divider role="separator" class="mat-divider mat-divider-horizontal mb-6 mt-4" aria-orientation="horizontal"></mat-divider>
5286

5387
<div>
5488
<button mat-flat-button [disabled]="defaultDisplayFieldsForm.invalid || defaultDisplayFieldsForm.pending" color="primary">

src/app/modules/organizations/settings/default-display-fields/default-display-fields.component.ts

+9
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { type Column, ColumnService } from '@seed/api/column'
1212
import { type Organization, OrganizationService } from '@seed/api/organization'
1313
import { PageComponent } from '@seed/components'
1414
import { SharedImports } from '@seed/directives'
15+
import { naturalSort } from '@seed/utils'
1516

1617
@Component({
1718
selector: 'seed-organizations-settings-default-display-fields',
@@ -26,6 +27,8 @@ export class DefaultDisplayFieldComponent implements OnDestroy, OnInit {
2627
organization: Organization
2728
propertyColumns: Column[]
2829
taxLotColumns: Column[]
30+
xAxisColumns: Column[]
31+
yAxisColumns: Column[]
2932
defaultDisplayFieldsForm = new FormGroup({
3033
property_display_field: new FormControl('address_line_1'),
3134
taxlot_display_field: new FormControl('address_line_1'),
@@ -38,9 +41,13 @@ export class DefaultDisplayFieldComponent implements OnDestroy, OnInit {
3841
this.organization = organization
3942
this.defaultDisplayFieldsForm.get('property_display_field').setValue(this.organization.property_display_field)
4043
this.defaultDisplayFieldsForm.get('taxlot_display_field').setValue(this.organization.taxlot_display_field)
44+
this.defaultDisplayFieldsForm.get('default_reports_x_axis_options').setValue(this.organization.default_reports_x_axis_options.map((c) => c.id))
45+
this.defaultDisplayFieldsForm.get('default_reports_y_axis_options').setValue(this.organization.default_reports_y_axis_options.map((c) => c.id))
4146
})
4247
this._columnService.propertyColumns$.pipe(takeUntil(this._unsubscribeAll$)).subscribe((propertyColumns) => {
4348
this.propertyColumns = propertyColumns
49+
this.xAxisColumns = propertyColumns.filter((c) => !c.related && !c.pinnedLeft).sort((a, b) => naturalSort(a.display_name, b.display_name))
50+
this.yAxisColumns = this.xAxisColumns.filter((c) => ['area', 'eui', 'float', 'integer', 'number'].includes(c.data_type) || c.derived_column).sort((a, b) => naturalSort(a.display_name, b.display_name))
4451
})
4552
this._columnService.taxLotColumns$.pipe(takeUntil(this._unsubscribeAll$)).subscribe((taxLotColumns) => {
4653
this.taxLotColumns = taxLotColumns
@@ -56,6 +63,8 @@ export class DefaultDisplayFieldComponent implements OnDestroy, OnInit {
5663
if (this.defaultDisplayFieldsForm.valid) {
5764
this.organization.property_display_field = this.defaultDisplayFieldsForm.get('property_display_field').value
5865
this.organization.taxlot_display_field = this.defaultDisplayFieldsForm.get('taxlot_display_field').value
66+
this.organization.default_reports_x_axis_options = this.propertyColumns.filter((c) => this.defaultDisplayFieldsForm.get('default_reports_x_axis_options').value.includes(c.id))
67+
this.organization.default_reports_y_axis_options = this.propertyColumns.filter((c) => this.defaultDisplayFieldsForm.get('default_reports_y_axis_options').value.includes(c.id))
5968
this._organizationService.updateSettings(this.organization).subscribe()
6069
}
6170
}

0 commit comments

Comments
 (0)