Skip to content

Commit ab7af98

Browse files
committed
Application metadata fields are now a column each
1 parent 9b39ca9 commit ab7af98

File tree

16 files changed

+251
-140
lines changed

16 files changed

+251
-140
lines changed

src/app/applications/application-detail/application-detail.component.html

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,18 @@ <h3>{{ 'APPLICATION.DETAILS' | translate }}</h3>
1414
<p *ngIf="application.description">
1515
<strong>{{ 'APPLICATION.DESCRIPTION' | translate }}</strong></p>
1616
<pre><p>{{application.description}}</p></pre>
17-
<app-metadata-details [metadataJson]="application.metadata"></app-metadata-details>
17+
<app-metadata-details [status]="application.status" [startDate]="application.startDate"
18+
[endDate]="application.endDate"
19+
[category]="application.category"
20+
[owner]="application.owner"
21+
[contactPerson]="application.contactPerson"
22+
[contactEmail]="application.contactEmail"
23+
[contactPhone]="application.contactPhone"
24+
[personalData]="application.personalData"
25+
[hardware]="application.hardware"
26+
[controlledProperties]="application.controlledProperties"
27+
[deviceTypes]="application.deviceTypes"
28+
></app-metadata-details>
1829
</div>
1930
</div>
2031
</div>

src/app/applications/application.model.ts

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
import { ControlledPropertyTypes } from '@app/device-model/Enums/controlled-propperty.enum';
2+
import { ApplicationDeviceTypeUnion } from '@shared/enums/device-type';
3+
import { ControlledProperty } from '@shared/models/controlled-property.model';
14
import { Organisation } from '../admin/organisation/organisation.model';
5+
import { ApplicationStatus } from './enums/status.enum';
26
import { IotDevice } from './iot-devices/iot-device.model';
7+
import { ApplicationDeviceType } from './models/application-device-type.model';
38

49
export class Application {
510
public id: number;
@@ -13,20 +18,40 @@ export class Application {
1318
public updatedBy: number;
1419
public createdByName: string;
1520
public updatedByName: string;
16-
public metadata: string;
21+
public status?: ApplicationStatus;
22+
public startDate?: Date;
23+
public endDate?: Date;
24+
public category?: string;
25+
public owner?: string;
26+
public contactPerson?: string;
27+
public contactEmail?: string;
28+
public contactPhone?: string;
29+
public personalData?: boolean;
30+
public hardware?: string;
31+
public controlledProperties?: ControlledProperty[];
32+
public deviceTypes?: ApplicationDeviceType[];
1733
}
1834

1935
export class ApplicationRequest {
2036
public name: string;
2137
public description: string;
2238
public organizationId: number;
23-
public metadata: string;
39+
public status?: ApplicationStatus;
40+
public startDate?: Date;
41+
public endDate?: Date;
42+
public category?: string;
43+
public owner?: string;
44+
public contactPerson?: string;
45+
public contactEmail?: string;
46+
public contactPhone?: string;
47+
public personalData?: boolean;
48+
public hardware?: string;
49+
public controlledProperties?: ControlledPropertyTypes[];
50+
public deviceTypes?: ApplicationDeviceTypeUnion[];
2451
}
2552

2653
export interface ApplicationData {
2754
data: Application[];
2855
ok?: boolean;
2956
count?: number;
3057
}
31-
32-
export type ApplicationMetadata = Record<string, unknown>;
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { recordToEntries } from '@shared/helpers/record.helper';
22

33
export enum ApplicationStatus {
4-
'NONE' = 0,
5-
'IN-OPERATION' = 1,
6-
'PROJECT' = 2,
7-
'PROTOTYPE' = 3,
8-
'OTHER' = 4,
4+
'NONE' = 'NONE',
5+
'IN-OPERATION' = 'IN-OPERATION',
6+
'PROJECT' = 'PROJECT',
7+
'PROTOTYPE' = 'PROTOTYPE',
8+
'OTHER' = 'OTHER',
99
}
1010

1111
export const ApplicationStatusEntries = recordToEntries(ApplicationStatus);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Application } from '@applications/application.model';
2+
import { ApplicationDeviceTypeUnion } from '@shared/enums/device-type';
3+
4+
export class ApplicationDeviceType {
5+
public applications: Application[];
6+
public type: ApplicationDeviceTypeUnion;
7+
}

src/app/device-model/Enums/controlled-propperty.enum.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export enum ControlledPropperty {
1+
export enum ControlledPropertyTypes {
22
AIRPOLLUTION = "airPollution",
33
ATMOSPHERICPRESSURE = "atmosphericPressure",
44
CDOM = "cdom",

src/app/device-model/device-model-edit/device-model-edit.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { BackButton } from '@shared/models/back-button.model';
88
import { ScrollToTopService } from '@shared/services/scroll-to-top.service';
99
import { DeviceModelService } from '../device-model.service';
1010
import { DeviceModel } from '../device.model';
11-
import { ControlledPropperty } from '../Enums/controlled-propperty.enum';
11+
import { ControlledPropertyTypes } from '../Enums/controlled-propperty.enum';
1212
import { DeviceCategory } from '../Enums/device-category.enum';
1313
import { DeviceFunction } from '../Enums/device-function.enum';
1414
import { EnergyLimitationClass } from '../Enums/energy-limitation-class.model';
@@ -58,7 +58,7 @@ export class DeviceModelEditComponent implements OnInit {
5858
}
5959

6060
mapEnumsToArray() {
61-
this.controlledPropperties = Object.values(ControlledPropperty);
61+
this.controlledPropperties = Object.values(ControlledPropertyTypes);
6262
this.categories = Object.values(DeviceCategory);
6363
this.deviceFunctions = Object.values(DeviceFunction);
6464
this.supportedProtocol = Object.values(SupportedProtocol);

src/app/shared/components/forms/form-body-application/form-body-application.component.html

Lines changed: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</li>
77
</ul>
88
</div>
9-
<div class="row" *ngIf="metadata">
9+
<div class="row">
1010
<div class="form-group mt-3">
1111
<label class="form-label" for="name">{{'GEN.NAME' | translate}}*</label>
1212

@@ -25,116 +25,118 @@
2525
</div>
2626

2727
<div class="form-group mt-3">
28-
<label class="form-label" for="metadata.status">{{'APPLICATION.METADATA-FIELD.STATUS' | translate}}</label>
29-
<mat-select class="form-control" name="metadata.statusOptions" [(ngModel)]="metadata.status"
30-
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('metadata.status'), 'is-valid' : formFailedSubmit && !errorFields.includes('metadata.status')}">
28+
<label class="form-label" for="application.status">{{'APPLICATION.METADATA-FIELD.STATUS' | translate}}</label>
29+
<mat-select class="form-control" name="application.statusOptions" [(ngModel)]="application.status"
30+
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('application.status'), 'is-valid' : formFailedSubmit && !errorFields.includes('application.status')}">
3131
<mat-option *ngFor="let statusOption of statuses" [value]="statusOption.value">
3232
{{statusOption.label}}
3333
</mat-option>
3434
</mat-select>
3535
</div>
3636

3737
<div class="form-group mt-3">
38-
<label class="form-label" for="metadata.startDate">{{'APPLICATION.METADATA-FIELD.START-DATE' | translate}}</label>
38+
<label class="form-label" for="application.startDate">{{'APPLICATION.METADATA-FIELD.START-DATE' |
39+
translate}}</label>
3940
<mat-form-field appearance="fill">
4041
<mat-label>{{'QUESTION.APPLICATION.START-DATE-PLACEHOLDER' | translate}}</mat-label>
4142
<input matInput [min]="today" [max]="serializedEndDate.value" [matDatepicker]="startDatePicker"
4243
[formControl]="serializedStartDate"
43-
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('metadata.startDate'), 'is-valid' : formFailedSubmit && !errorFields.includes('metadata.startDate')}">
44+
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('application.startDate'), 'is-valid' : formFailedSubmit && !errorFields.includes('application.startDate')}">
4445
<mat-datepicker-toggle matSuffix [for]="startDatePicker"></mat-datepicker-toggle>
4546
<mat-datepicker panelClass="datepicker-table-fix" #startDatePicker></mat-datepicker>
4647
</mat-form-field>
4748
</div>
4849

4950
<div class="form-group mt-3">
50-
<label class="form-label" for="metadata.endDate">{{'APPLICATION.METADATA-FIELD.END-DATE' | translate}}</label>
51-
<mat-form-field appearance="fill" [ngClass]="'datepicker-table-fix'">
51+
<label class="form-label" for="application.endDate">{{'APPLICATION.METADATA-FIELD.END-DATE' | translate}}</label>
52+
<mat-form-field appearance="fill">
5253
<mat-label>{{'QUESTION.APPLICATION.END-DATE-PLACEHOLDER' | translate}}</mat-label>
5354
<input matInput [min]="serializedStartDate.value" [matDatepicker]="endDatePicker"
5455
[formControl]="serializedEndDate"
55-
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('metadata.endDate'), 'is-valid' : formFailedSubmit && !errorFields.includes('metadata.endDate')}">
56+
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('application.endDate'), 'is-valid' : formFailedSubmit && !errorFields.includes('application.endDate')}">
5657
<mat-datepicker-toggle matSuffix [for]="endDatePicker"></mat-datepicker-toggle>
5758
<mat-datepicker panelClass="datepicker-table-fix" #endDatePicker></mat-datepicker>
5859
</mat-form-field>
5960
</div>
6061

6162
<div class="form-group mt-3">
62-
<label class="form-label" for="metadata.category">{{'APPLICATION.METADATA-FIELD.CATEGORY' | translate}}</label>
63+
<label class="form-label" for="application.category">{{'APPLICATION.METADATA-FIELD.CATEGORY' | translate}}</label>
6364
<input type="text" class="form-control" id="category" name="category"
6465
[placeholder]="'QUESTION.APPLICATION.CATEGORY-PLACEHOLDER' | translate" maxlength="100"
65-
[(ngModel)]="metadata.category"
66-
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('metadata.category'), 'is-valid' : formFailedSubmit && !errorFields.includes('metadata.category')}">
66+
[(ngModel)]="application.category"
67+
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('application.category'), 'is-valid' : formFailedSubmit && !errorFields.includes('application.category')}">
6768
</div>
6869

6970
<div class="form-group mt-3">
70-
<label class="form-label" for="metadata.owner">{{'APPLICATION.METADATA-FIELD.OWNER' | translate}}</label>
71+
<label class="form-label" for="application.owner">{{'APPLICATION.METADATA-FIELD.OWNER' | translate}}</label>
7172
<input type="text" class="form-control" id="owner" name="owner"
7273
[placeholder]="'QUESTION.APPLICATION.OWNER-PLACEHOLDER' | translate" maxlength="100"
73-
[(ngModel)]="metadata.owner"
74-
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('metadata.owner'), 'is-valid' : formFailedSubmit && !errorFields.includes('metadata.owner')}">
74+
[(ngModel)]="application.owner"
75+
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('application.owner'), 'is-valid' : formFailedSubmit && !errorFields.includes('application.owner')}">
7576
</div>
7677

7778
<div class="form-group mt-3">
78-
<label class="form-label" for="metadata.contactPerson">{{'APPLICATION.METADATA-FIELD.CONTACT-PERSON' |
79+
<label class="form-label" for="application.contactPerson">{{'APPLICATION.METADATA-FIELD.CONTACT-PERSON' |
7980
translate}}</label>
8081
<input type="text" class="form-control" id="contactPerson" name="contactPerson"
8182
[placeholder]="'QUESTION.APPLICATION.CONTACT-PERSON-PLACEHOLDER' | translate" maxlength="100"
82-
[(ngModel)]="metadata.contactPerson"
83-
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('metadata.contactPerson'), 'is-valid' : formFailedSubmit && !errorFields.includes('metadata.contactPerson')}">
83+
[(ngModel)]="application.contactPerson"
84+
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('application.contactPerson'), 'is-valid' : formFailedSubmit && !errorFields.includes('application.contactPerson')}">
8485
</div>
8586

8687
<div class="form-group mt-3">
87-
<label class="form-label" for="metadata.contactEmail">{{'APPLICATION.METADATA-FIELD.CONTACT-EMAIL' |
88+
<label class="form-label" for="application.contactEmail">{{'APPLICATION.METADATA-FIELD.CONTACT-EMAIL' |
8889
translate}}</label>
8990
<input type="email" class="form-control" id="contactEmail" name="contactEmail"
9091
[placeholder]="'QUESTION.APPLICATION.CONTACT-EMAIL-PLACEHOLDER' | translate" maxlength="50" [email]="true"
91-
[(ngModel)]="metadata.contactEmail"
92-
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('metadata.contactEmail'), 'is-valid' : formFailedSubmit && !errorFields.includes('metadata.contactEmail')}">
92+
[(ngModel)]="application.contactEmail"
93+
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('application.contactEmail'), 'is-valid' : formFailedSubmit && !errorFields.includes('application.contactEmail')}">
9394
</div>
9495

9596
<div class="form-group mt-3">
96-
<label class="form-label" for="metadata.contactPhone">{{'APPLICATION.METADATA-FIELD.CONTACT-PHONE' |
97+
<label class="form-label" for="application.contactPhone">{{'APPLICATION.METADATA-FIELD.CONTACT-PHONE' |
9798
translate}}</label>
9899
<input type="text" class="form-control" id="contactPhone" name="contactPhone" [formControl]="phoneCtrl"
99100
[placeholder]="'QUESTION.APPLICATION.CONTACT-PHONE-PLACEHOLDER' | translate" maxlength="12"
100-
[(ngModel)]="metadata.contactPhone"
101-
[ngClass]="{'is-invalid' : metadata.contactPhone && phoneCtrl.invalid, 'is-valid' : !phoneCtrl.invalid}">
101+
[ngClass]="{'is-invalid' : application.contactPhone && phoneCtrl.invalid, 'is-valid' : !phoneCtrl.invalid}">
102102
</div>
103103

104104
<div class="form-group mt-3">
105-
<mat-checkbox id="metadata.personalData" name="metadata.personalData" [(ngModel)]="metadata.personalData">
106-
<mat-label for="metadata.personalData" class="form-check-label text--bold margin-top-25px"
105+
<mat-checkbox id="application.personalData" name="application.personalData"
106+
[(ngModel)]="application.personalData">
107+
<mat-label for="application.personalData" class="form-check-label text--bold margin-top-25px"
107108
style="white-space: initial">{{'QUESTION.APPLICATION.PERSONAL-DATA-PLACEHOLDER' | translate}}</mat-label>
108109
</mat-checkbox>
109110
</div>
110111

111112
<div class="form-group mt-3">
112-
<label class="form-label" for="metadata.hardware">{{'APPLICATION.METADATA-FIELD.HARDWARE' | translate}}</label>
113-
<textarea id="metadata.hardware" name="metadata.hardware"
113+
<label class="form-label" for="application.hardware">{{'APPLICATION.METADATA-FIELD.HARDWARE' | translate}}</label>
114+
<textarea id="application.hardware" name="application.hardware"
114115
[placeholder]="'QUESTION.APPLICATION.HARDWARE-PLACEHOLDER' | translate" [maxLength]="1024" [rows]="6"
115-
class="form-control" [(ngModel)]="metadata.hardware"
116-
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('metadata.hardware'), 'is-valid' : formFailedSubmit && !errorFields.includes('metadata.hardware')}"></textarea>
116+
class="form-control" [(ngModel)]="application.hardware"
117+
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('application.hardware'), 'is-valid' : formFailedSubmit && !errorFields.includes('application.hardware')}"></textarea>
117118
</div>
118119

119120
<div class="form-group mt-3">
120-
<label class="form-label" for="metadata.controlledProperty">{{'APPLICATION.METADATA-FIELD.CONTROLLED-PROPERTY' |
121+
<label class="form-label" for="application.controlledProperty">{{'APPLICATION.METADATA-FIELD.CONTROLLED-PROPERTY'
122+
|
121123
translate}}</label>
122-
<mat-select class="form-control" name="metadata.controlledProperty" multiple="true"
123-
[(ngModel)]="metadata.controlledProperty"
124+
<mat-select class="form-control" name="application.controlledProperty" multiple="true"
125+
[(ngModel)]="application.controlledProperties"
124126
[placeholder]="'QUESTION.APPLICATION.CONTROLLED-PROPERTY-PLACEHOLDER' | translate"
125-
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('metadata.controlledProperty'), 'is-valid' : formFailedSubmit && !errorFields.includes('metadata.controlledProperty')}">
127+
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('application.controlledProperty'), 'is-valid' : formFailedSubmit && !errorFields.includes('application.controlledProperty')}">
126128
<mat-option *ngFor="let ctrlProperty of controlledProperties" [value]="ctrlProperty">
127129
{{ctrlProperty}}
128130
</mat-option>
129131
</mat-select>
130132
</div>
131133

132134
<div class="form-group mt-3">
133-
<label class="form-label" for="metadata.deviceType">{{'APPLICATION.METADATA-FIELD.DEVICE-TYPE' |
135+
<label class="form-label" for="application.deviceType">{{'APPLICATION.METADATA-FIELD.DEVICE-TYPE' |
134136
translate}}</label>
135-
<mat-select class="form-control" name="metadata.deviceType" multiple="true" [(ngModel)]="metadata.deviceType"
136-
[placeholder]="'QUESTION.APPLICATION.DEVICE-TYPE-PLACEHOLDER' | translate"
137-
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('metadata.deviceType'), 'is-valid' : formFailedSubmit && !errorFields.includes('metadata.deviceType')}">
137+
<mat-select class="form-control" name="application.deviceType" multiple="true"
138+
[(ngModel)]="application.deviceTypes" [placeholder]="'QUESTION.APPLICATION.DEVICE-TYPE-PLACEHOLDER' | translate"
139+
[ngClass]="{'is-invalid' : formFailedSubmit && errorFields.includes('application.deviceType'), 'is-valid' : formFailedSubmit && !errorFields.includes('application.deviceType')}">
138140
<mat-option *ngFor="let deviceType of deviceTypes" [value]="deviceType.value">
139141
{{deviceType.label}}
140142
</mat-option>

0 commit comments

Comments
 (0)