Skip to content

Commit 51756fe

Browse files
committed
add handling for comstock mappings
1 parent 400ca93 commit 51756fe

6 files changed

Lines changed: 74 additions & 22 deletions

File tree

src/app/modules/organizations/columns/list/list-properties.component.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { MatInputModule } from '@angular/material/input'
55
import { MatPaginator } from '@angular/material/paginator'
66
import { MatTableModule } from '@angular/material/table'
77
import { MatTooltip } from '@angular/material/tooltip'
8-
import { map, takeUntil } from 'rxjs'
8+
import { combineLatest, takeUntil } from 'rxjs'
99
import { TableContainerComponent } from '@seed/components'
1010
import { SharedImports } from '@seed/directives'
1111
import { naturalSort } from '@seed/utils'
@@ -22,14 +22,16 @@ export class ListPropertiesComponent extends ListComponent implements AfterViewI
2222
@ViewChild(MatPaginator) paginator: MatPaginator
2323

2424
ngOnInit(): void {
25-
this._columnService.propertyColumns$
25+
combineLatest([
26+
this._columnService.propertyColumns$,
27+
this._organizationService.currentOrganization$,
28+
])
2629
.pipe(takeUntil(this._unsubscribeAll$))
27-
.pipe(
28-
map((columns) => {
29-
this.columnTableDataSource.data = columns.sort((a, b) => naturalSort(a.display_name, b.display_name))
30-
}),
31-
)
32-
.subscribe()
30+
.subscribe(([columns, organization]) => {
31+
this.organization = organization
32+
this.columnTableDataSource.data = columns.sort((a, b) => naturalSort(a.display_name, b.display_name))
33+
this.buildColumnList()
34+
})
3335
}
3436

3537
ngAfterViewInit(): void {

src/app/modules/organizations/columns/list/list-taxlots.component.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { MatInputModule } from '@angular/material/input'
55
import { MatPaginator } from '@angular/material/paginator'
66
import { MatTableModule } from '@angular/material/table'
77
import { MatTooltip } from '@angular/material/tooltip'
8-
import { map, takeUntil } from 'rxjs'
8+
import { combineLatest, takeUntil } from 'rxjs'
99
import { TableContainerComponent } from '@seed/components'
1010
import { SharedImports } from '@seed/directives'
1111
import { naturalSort } from '@seed/utils'
@@ -22,14 +22,16 @@ export class ListTaxLotComponent extends ListComponent implements AfterViewInit,
2222
@ViewChild(MatPaginator) paginator: MatPaginator
2323

2424
ngOnInit(): void {
25-
this._columnService.taxLotColumns$
25+
combineLatest([
26+
this._columnService.taxLotColumns$,
27+
this._organizationService.currentOrganization$,
28+
])
2629
.pipe(takeUntil(this._unsubscribeAll$))
27-
.pipe(
28-
map((columns) => {
29-
this.columnTableDataSource.data = columns.sort((a, b) => naturalSort(a.display_name, b.display_name))
30-
}),
31-
)
32-
.subscribe()
30+
.subscribe(([columns, organization]) => {
31+
this.organization = organization
32+
this.columnTableDataSource.data = columns.sort((a, b) => naturalSort(a.display_name, b.display_name))
33+
this.buildColumnList()
34+
})
3335
}
3436

3537
ngAfterViewInit() {

src/app/modules/organizations/columns/list/list.component.html

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<seed-page-table-container>
1+
<seed-page-table-container *transloco="let t">
22
<mat-form-field class="w-full">
33
<mat-label>Filter</mat-label>
44
<input #input (keyup)="applyFilter($event)" matInput placeholder="Ex. ium" />
@@ -27,6 +27,11 @@
2727
<td *matCellDef="let c" mat-cell>{{ c.column_description }}</td>
2828
</ng-container>
2929

30+
<ng-container matColumnDef="comstock_mapping">
31+
<th *matHeaderCellDef mat-header-cell>Comstock Mapping</th>
32+
<td *matCellDef="let c" mat-cell>{{ c.comstock_mapping ? t(`comstock.${c.comstock_mapping}`) : '' }}</td>
33+
</ng-container>
34+
3035
<ng-container matColumnDef="actions">
3136
<th class="select-none" *matHeaderCellDef mat-header-cell>Actions</th>
3237
<td class="w-50 py-2" *matCellDef="let c" mat-cell>

src/app/modules/organizations/columns/list/list.component.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { MatDialog } from '@angular/material/dialog'
33
import { MatTableDataSource } from '@angular/material/table'
44
import { Subject, takeUntil, tap } from 'rxjs'
55
import { type Column, ColumnService } from '@seed/api/column'
6+
import { type Organization, OrganizationService } from '@seed/api/organization'
67
import { SharedImports } from '@seed/directives'
78
import { DeleteModalComponent } from './modal/delete-modal.component'
89
import { FormModalComponent } from './modal/form-modal.component'
@@ -15,11 +16,13 @@ import { FormModalComponent } from './modal/form-modal.component'
1516
})
1617
export class ListComponent implements OnDestroy {
1718
protected _columnService = inject(ColumnService)
19+
protected _organizationService = inject(OrganizationService)
1820
protected readonly _unsubscribeAll$ = new Subject<void>()
1921
private _dialog = inject(MatDialog)
2022
columnTableDataSource = new MatTableDataSource<Column>([])
21-
columnTableColumns = ['canonical', 'display_name', 'column_name', 'column_description', 'actions']
23+
columnTableColumns: string[]
2224
type: string
25+
organization: Organization
2326

2427
ngOnDestroy(): void {
2528
this._unsubscribeAll$.next()
@@ -51,10 +54,18 @@ export class ListComponent implements OnDestroy {
5154
console.log('Rename called for column: ', column)
5255
}
5356

57+
buildColumnList() {
58+
if (this.organization.comstock_enabled) {
59+
this.columnTableColumns = ['canonical', 'display_name', 'column_name', 'column_description', 'comstock_mapping', 'actions']
60+
} else {
61+
this.columnTableColumns = ['canonical', 'display_name', 'column_name', 'column_description', 'actions']
62+
}
63+
}
64+
5465
edit(column: Column) {
5566
const dialogRef = this._dialog.open(FormModalComponent, {
5667
width: '40rem',
57-
data: { column },
68+
data: { column, organization: this.organization },
5869
})
5970

6071
dialogRef.afterClosed().pipe(takeUntil(this._unsubscribeAll$)).subscribe()

src/app/modules/organizations/columns/list/modal/form-modal.component.html

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<h2 class="text-3xl font-extrabold capitalize leading-7 tracking-tight sm:leading-10 md:text-4xl" mat-dialog-title>Edit Column</h2>
2-
<form class="flex flex-col gap-4" [formGroup]="form">
2+
<form class="flex flex-col gap-4" [formGroup]="form" *transloco="let t">
33
<mat-form-field>
44
<mat-label>Display Name</mat-label>
55
<input matInput formControlName="display_name" placeholder="Display Name" />
@@ -15,6 +15,31 @@ <h2 class="text-3xl font-extrabold capitalize leading-7 tracking-tight sm:leadin
1515
<mat-error>Column Description is a required field</mat-error>
1616
}
1717
</mat-form-field>
18+
@if (data.organization.comstock_enabled) {
19+
<mat-form-field >
20+
<mat-label>Comstock Mapping</mat-label>
21+
<mat-select formControlName="comstock_mapping">
22+
<mat-option value=""></mat-option>
23+
<mat-option value="division">{{ t('comstock.division') }}</mat-option>
24+
<mat-option value="hvac_system_type">{{ t('comstock.hvac_system_type') }}</mat-option>
25+
<mat-option value="rentable_area">{{ t('comstock.rentable_area') }}</mat-option>
26+
<mat-option value="number_of_stories">{{ t('comstock.number_of_stories') }}</mat-option>
27+
<mat-option value="year_built">{{ t('comstock.year_built') }}</mat-option>
28+
<mat-option value="weekend_start_time">{{ t('comstock.weekend_start_time') }}</mat-option>
29+
<mat-option value="weekend_duration">{{ t('comstock.weekend_duration') }}</mat-option>
30+
<mat-option value="weekday_start_time">{{ t('comstock.weekday_start_time') }}</mat-option>
31+
<mat-option value="weekday_duration">{{ t('comstock.weekday_duration') }}</mat-option>
32+
<mat-option value="building_shape">{{ t('comstock.building_shape') }}</mat-option>
33+
<mat-option value="built_code">{{ t('comstock.built_code') }}</mat-option>
34+
<mat-option value="rotation">{{ t('comstock.rotation') }}</mat-option>
35+
<mat-option value="aspect_ratio">{{ t('comstock.aspect_ratio') }}</mat-option>
36+
<mat-option value="building_type">{{ t('comstock.building_type') }}</mat-option>
37+
<mat-option value="state">{{ t('comstock.state') }}</mat-option>
38+
<mat-option value="county">{{ t('comstock.county') }}</mat-option>
39+
<mat-option value="climate_zone">{{ t('comstock.climate_zone') }}</mat-option>
40+
</mat-select>
41+
</mat-form-field>
42+
}
1843
@if (inProgress) {
1944
<mat-progress-bar [value]="progressBarObj.progress" mode="determinate"></mat-progress-bar>
2045
}

src/app/modules/organizations/columns/list/modal/form-modal.component.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@ import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/materia
77
import { MatFormFieldModule } from '@angular/material/form-field'
88
import { MatInputModule } from '@angular/material/input'
99
import { MatProgressBarModule } from '@angular/material/progress-bar'
10+
import { MatSelectModule } from '@angular/material/select'
1011
import { type Observable, Subject, switchMap, takeUntil, tap } from 'rxjs'
1112
import { type Column, ColumnService } from '@seed/api/column'
13+
import { type Organization } from '@seed/api/organization'
1214
import type { ProgressResponse } from '@seed/api/progress'
15+
import { SharedImports } from '@seed/directives'
1316
import { UploaderService } from '@seed/services/uploader/uploader.service'
1417
import type { ProgressBarObj } from '@seed/services/uploader/uploader.types'
1518
import { SnackBarService } from 'app/core/snack-bar/snack-bar.service'
@@ -25,7 +28,9 @@ import { SnackBarService } from 'app/core/snack-bar/snack-bar.service'
2528
FormsModule,
2629
MatInputModule,
2730
MatProgressBarModule,
31+
MatSelectModule,
2832
ReactiveFormsModule,
33+
SharedImports,
2934
],
3035
})
3136
export class FormModalComponent implements OnDestroy, OnInit {
@@ -35,8 +40,9 @@ export class FormModalComponent implements OnDestroy, OnInit {
3540
private _uploaderService = inject(UploaderService)
3641
private readonly _unsubscribeAll$ = new Subject<void>()
3742
column: Column
43+
organization: Organization
3844
refreshFn: (organization_id: number) => Observable<Column[]>
39-
data = inject(MAT_DIALOG_DATA) as { column: Column }
45+
data = inject(MAT_DIALOG_DATA) as { column: Column; organization: Organization }
4046
inProgress = false
4147
progressBarObj: ProgressBarObj = {
4248
message: '',
@@ -51,6 +57,7 @@ export class FormModalComponent implements OnDestroy, OnInit {
5157
column_description: new FormControl<string | null>(null, [Validators.required]),
5258
organization_id: new FormControl<number | null>(null, [Validators.required]),
5359
table_name: new FormControl<string | null>('', [Validators.required]),
60+
comstock_mapping: new FormControl<string | null>(null),
5461
id: new FormControl<number | null>(null),
5562
})
5663

@@ -78,7 +85,7 @@ export class FormModalComponent implements OnDestroy, OnInit {
7885
const c = this.form.value as Column
7986
const changes = {}
8087
this.inProgress = true
81-
changes[`${c.id}`] = { display_name: c.display_name, column_description: c.column_description }
88+
changes[`${c.id}`] = { display_name: c.display_name, column_description: c.column_description, comstock_mapping: c.comstock_mapping }
8289
this._columnService
8390
.updateMultipleColumns(c.organization_id, c.table_name, changes)
8491
.pipe(

0 commit comments

Comments
 (0)