penambahan page monitoring building dan monitoring room

This commit is contained in:
Fuzi_fauzia 2024-04-23 17:02:47 +07:00
parent 970c903ff4
commit dc987d78c9
10 changed files with 1798 additions and 9 deletions

View File

@ -0,0 +1,329 @@
.tab-content .tab-pane {
padding-top: 20px;
}
.alert {
padding: 8px;
margin-bottom: 8px;
}
.form-control.is-invalid {
border-color: #CACFE7;
background-image: none !important;
}
:host ::ng-deep .block-ui-wrapper {
background: rgba(255, 249, 249, 0.5) !important;
}
:host ::ng-deep .wizard-steps.vertical {
width: 90%;
}
:host ::ng-deep .vertical .large-filled-symbols {
width: 10;
}
@media screen and (max-width: 480px) {
.wizard-steps.vertical {
width: 80% !important;
}
}
@media screen and (max-width: 480px) {
.vertical .large-filled-symbols {
width: 20% !important;
}
}
:host ::ng-deep .horizontal.large-filled-symbols ul.steps-indicator li .step-indicator {
color: #999;
font-size: 19px;
text-align: center;
border: 5px solid #f4f5fa;
background-color: #fff;
line-height: 40px;
}
:host ::ng-deep .horizontal.large-filled-symbols ul.steps-indicator li.editing:after {
color: #e6e6e6;
border: 3px solid #e6e6e6 !important;
background-color: #fff;
line-height: 40px;
}
:host ::ng-deep .horizontal.large-filled-symbols ul.steps-indicator li.editing1:after {
color: #666EE8;
border: 5px solid #666EE8 !important;
background-color: #fff;
line-height: 40px;
}
:host ::ng-deep.horizontal.large-filled-symbols ul.steps-indicator li.done .step-indicator {
color: #fff;
border: 5px solid #666EE8;
background-color: #666EE8;
line-height: 40px;
}
:host ::ng-deep .horizontal.large-filled-symbols ul.steps-indicator li:not(:last-child):before {
background-color: #e6e6e6;
content: '';
position: absolute;
height: 5px !important;
width: calc(100% - 50px);
top: -25px;
left: calc(50% + 25px);
}
:host ::ng-deep .horizontal.large-filled-symbols ul.steps-indicator li.done:before {
background-color: #666EE8;
content: '';
position: absolute;
height: 5px !important;
width: calc(100% - 50px);
top: -25px;
left: calc(50% + 25px);
}
:host ::ng-deep :host ::ng-deep .vertical.large-filled-symbols ul.steps-indicator li.done:not(:last-child):before {
background-color: #f4f5fa;
height: 10px;
line-height: 40px;
}
:host ::ng-deep .vertical.large-filled-symbols ul.steps-indicator li.done:not(:last-child):before {
background-color: #666EE8;
height: 5px;
line-height: 40px;
}
:host ::ng-deep .vertical.large-filled-symbols ul.steps-indicator li .step-indicator {
color: #999;
font-size: 18px;
border: 5px solid #f4f5fa;
background-color: #fff;
line-height: 40px;
}
:host ::ng-deep .vertical.large-filled-symbols ul.steps-indicator li.editing:after {
color: #666EE8;
border: 5px solid #666EE8 !important;
background-color: #fff;
line-height: 40px;
}
:host ::ng-deep .vertical.large-filled-symbols ul.steps-indicator li.current .step-indicator {
color: #666EE8;
border: 5px solid #666EE8;
background-color: #fff;
line-height: 40px;
}
:host ::ng-deep .vertical.large-filled-symbols ul.steps-indicator li.done .step-indicator {
color: #fff;
border: 5px solid #666EE8;
background-color: #666EE8;
line-height: 40px;
}
:host ::ng-deep .vertical.large-filled-symbols ul.steps-indicator li:not(:last-child):before {
background-color: #f4f5fa;
height: 10px;
line-height: 10px;
}
:host ::ng-deep .vertical.large-filled-symbols ul.steps-indicator li.navigable.done a:hover .step-indicator {
background-color: #666EE8;
color: #FFF;
}
:host ::ng-deep .vertical.large-filled-symbols ul.steps-indicator li:not(:last-child):after {
background-color: #666EE8;
content: "";
position: absolute;
left: -25px;
top: 50px;
height: 10px;
width: 1px;
}
:host ::ng-deep .vertical.large-filled-symbols ul.steps-indicator li.current:after {
color: #666EE8;
border: 1px solid #f4f5fa;
background-color: #fff;
line-height: 40px;
}
:host ::ng-deep .vertical.large-filled-symbols ul.steps-indicator li.editing:after {
color: #e6e6e6;
border: 1px solid #e6e6e6 !important;
background-color: #fff;
line-height: 40px;
}
:host ::ng-deep .horizontal.large-filled-symbols ul.steps-indicator li.done.step:after {
background-color: #666EE8;
border-color: #666EE8;
color: #FFF;
line-height: 40px;
}
:host ::ng-deep .horizontal ul.steps-indicator li .step-indicator {
position: relative;
margin: 0px;
text-align: center;
}
:host ::ng-deep .horizontal.large-filled-symbols ul.steps-indicator li.navigable.done a:hover .step-indicator {
background-color: #666EE8;
color: #FFF;
}
:host ::ng-deep .btn-light:not(:disabled):not(.disabled):active {
color: unset !important;
background-color: unset !important;
border-color: #d3d9df !important;
}
:host ::ng-deep .btn-light:hover:not(.disabled):active {
background-color: #e2e6ea !important;
border-color: #dae0e5 !important;
}
:host ::ng-deep .btn-light {
color: unset !important;
background-color: unset !important;
border-color: unset !important;
}
:host ::ng-deep .bg-primary {
background-color: #007bff !important;
}
:host ::ng-deep .text-white {
color: #fff !important;
}
:host ::ng-deep .custom-day {
text-align: center;
padding: .185rem .25rem;
display: inline-block;
height: 2rem;
width: 2rem;
}
:host ::ng-deep .custom-day:active {
color: #6d7183 !important;
background-color: #fff !important;
border-block-color: rgb(2, 117, 216) !important;
}
.bg-light {
background-color: #f8f9fa !important;
}
:host ::ng-deep .hidden {
display: block !important;
}
.ngb-dp-weekday {
color: #17a2b8;
}
.ngb-dp-week-number,
.ngb-dp-weekday {
line-height: 2rem;
text-align: center;
font-style: italic;
}
.ngb-datepicker-month-view {
pointer-events: auto;
}
:host ::ng-deep .ngb-dp-header {
background-color: var(--light) !important;
}
:host ::ng-deep .ngb-dp-weekdays {
background-color: var(--light);
}
:host ::ng-deep .ngb-dp-month-name {
background-color: var(--light);
}
.small {
font-size: 80%;
font-weight: 400;
}
.ngb-dp-day {
cursor: pointer !important;
}
.ngb-dp-month {
pointer-events: none;
}
.btn-light:hover {
color: #212529 !important;
background-color: #e2e6ea !important;
border-color: #dae0e5 !important;
}
.ngb-datepicker-month-view {
pointer-events: auto;
}
.ngb-dp-header {
border-bottom: 0;
border-radius: .25rem .25rem 0 0;
padding-top: .25rem;
}
.ngb-dp-day,
.ngb-dp-week-number,
.ngb-dp-weekday {
width: 2rem;
height: 2rem;
}
.custom-day {
text-align: center;
padding: 0.185rem 0.25rem;
display: inline-block;
height: 2rem;
width: 2rem;
}
.custom-day.focused {
background-color: #e6e6e6;
}
.custom-day.range,
.custom-day:hover {
background-color: rgb(2, 117, 216);
color: white;
}
.custom-day.faded {
background-color: rgba(2, 117, 216, 0.5);
}
:host ::ng-deep .block-ui-wrapper {
background: rgba(255, 249, 249, 0.5) !important;
}
:host ::ng-deep .horizontal.large-filled-symbols ul.steps-indicator li.current .step-indicator {
color: #666EE8;
border: 5px solid #666EE8;
background-color: #fff;
line-height: 40px;
}

View File

@ -0,0 +1,720 @@
<div class="app-content content">
<div class="content-wrapper">
<div class="content-header row mb-1">
<app-breadcrumb class="col-12" [breadcrumb]="breadcrumb"></app-breadcrumb>
</div>
<div class="number-tabs">
<section id="basic-form-layouts">
<div class="row">
<div class="col-12" *blockUI="'numberTabs'; message: 'Loading'">
<m-card>
<ng-container mCardHeaderTitle>
<h2>Add New</h2>
</ng-container>
<ng-container mCardBody>
<div class="card-block">
<aw-wizard #wizard navBarLayout="large-filled-symbols">
<aw-wizard-step
[stepTitle]="'General Information'"
[navigationSymbol]="{
symbol: '&#xf0f7;',
fontFamily: 'FontAwesome'
}"
>
<form [formGroup]="numberTab">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="form-control-label" for="buildName"
>Building Name :</label
>
<input
class="form-control"
type="text"
formControlName="buildName"
/>
</div>
<div class="form-group">
<label class="form-control-label" for="email"
>Email Address :</label
>
<input
class="form-control"
type="text"
formControlName="email"
/>
</div>
<div class="form-group">
<label
class="form-control-label"
for="phoneNumber"
>Phone Number :</label
>
<input
class="form-control"
type="text"
formControlName="phoneNumber"
/>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="form-control-label" for="address"
>Address :</label
>
<input
class="form-control"
type="text"
formControlName="address"
/>
</div>
<div class="form-group">
<label class="form-control-label" for="owned"
>Owned :</label
>
<input
class="form-control"
type="text"
formControlName="owned"
/>
</div>
<div class="form-group">
<label class="form-control-label" for="phone"
>Phone :</label
>
<input
class="form-control"
type="text"
formControlName="phone"
/>
</div>
</div>
</div>
<div class="form-group text-center">
<button
uiSref="personal"
type="button"
class="btn btn-raised btn-danger mr-1"
(click)="cancel()"
>
<span style="margin-right: 10px">
<i class="feather ft-x"></i>
</span>
Cancel
</button>
<button
type="button"
uiSref="work"
class="btn btn-info btn-raised"
[disabled]="numberTab.valid"
awNextStep
>
Next
<span style="margin-left: 10px">
<i class="feather ft-chevron-right"></i>
</span>
</button>
</div>
</form>
</aw-wizard-step>
<aw-wizard-step
[stepTitle]="'Room'"
[navigationSymbol]="{
symbol: '&#xf01c;',
fontFamily: 'FontAwesome'
}"
>
<div class="form-group overflow-hidden">
<div class="col-12">
<button
data-repeater-create
class="btn btn-primary"
(click)="addRepeat()"
>
<i class="feather ft-plus"></i> Add
</button>
</div>
</div>
<form [formGroup]="repeatForm">
<div class="card-body" formArrayName="repeatArray">
<div class="row">
<div
class="col-12"
*ngFor="
let repeatForm of repeatFormGroup.controls;
let i = index
"
>
<div class="repeater-default">
<div [formGroupName]="i" class="row">
<div
class="form-group mb-1 col-sm-12 col-md-3"
>
<label for="roomName">Room</label>
<br />
<div class="input-group">
<select
class="form-control"
formControlName="roomName"
>
<option
*ngFor="let interest of countries"
[value]="interest"
>
{{ interest }}
</option>
</select>
<div class="input-group-append">
<button
type="button"
class="btn btn-primary"
>
<i class="feather ft-plus"></i>
</button>
</div>
</div>
</div>
<div
class="form-group mb-1 col-sm-12 col-md-3"
>
<label for="room">Room Name</label>
<br />
<input
type="text"
formControlName="room"
class="form-control"
placeholder="room"
/>
</div>
<div
class="form-group mb-1 col-sm-12 col-md-2"
>
<label for="floor">Floor</label>
<br />
<select
class="form-control"
formControlName="floor"
>
<option
*ngFor="let interest of countries"
[value]="interest"
>
{{ interest }}
</option>
</select>
</div>
<div
class="form-group mb-1 col-sm-12 col-md-2"
>
<label for="status">Status</label>
<br />
<select
class="form-control"
formControlName="status"
>
<option
*ngFor="let interest of countries"
[value]="interest"
>
{{ interest }}
</option>
</select>
</div>
<div
class="form-group col-sm-12 col-md-2 text-center mt-2"
>
<button
type="button"
class="btn btn-danger"
(click)="removeRepeat(i)"
>
<i class="feather ft-x"></i> Delete
</button>
</div>
</div>
</div>
</div>
</div>
<hr />
</div>
<div class="form-group text-center space-20">
<button
uiSref="personal"
type="button"
class="btn btn-raised btn-secondary mr-1"
awPreviousStep
>
<span style="margin-right: 10px">
<i class="feather ft-chevron-left"></i>
</span>
Previous
</button>
<button
uiSref="address"
type="button"
class="btn btn-raised btn-info"
[disabled]="numberTab.valid"
awNextStep
>
Next
<span style="margin-left: 10px">
<i class="feather ft-chevron-right"></i>
</span>
</button>
</div>
</form>
</aw-wizard-step>
<aw-wizard-step
[stepTitle]="'Device'"
[navigationSymbol]="{
symbol: '&#xf0a0;',
fontFamily: 'FontAwesome'
}"
>
<div class="form-group overflow-hidden">
<div class="col-12">
<button
data-repeater-create
class="btn btn-primary"
(click)="addRepeat()"
>
<i class="feather ft-plus"></i> Add
</button>
</div>
</div>
<form [formGroup]="repeatForm">
<div class="card-body" formArrayName="repeatArray">
<div class="row">
<div
class="col-12"
*ngFor="
let repeatForm of repeatFormGroup.controls;
let i = index
"
>
<div class="repeater-default">
<div [formGroupName]="i" class="row">
<div
class="form-group mb-1 col-sm-12 col-md-3"
>
<label for="roomName">Room</label>
<br />
<div class="input-group">
<select
class="form-control"
formControlName="roomName"
>
<option
*ngFor="let interest of countries"
[value]="interest"
>
{{ interest }}
</option>
</select>
<div class="input-group-append">
<button
type="button"
class="btn btn-primary"
>
<i class="feather ft-plus"></i>
</button>
</div>
</div>
</div>
<div
class="form-group mb-1 col-sm-12 col-md-3"
>
<label for="room">Room Name</label>
<br />
<input
type="text"
formControlName="room"
class="form-control"
placeholder="room"
/>
</div>
<div
class="form-group mb-1 col-sm-12 col-md-2"
>
<label for="floor">Floor</label>
<br />
<select
class="form-control"
formControlName="floor"
>
<option
*ngFor="let interest of countries"
[value]="interest"
>
{{ interest }}
</option>
</select>
</div>
<div
class="form-group mb-1 col-sm-12 col-md-2"
>
<label for="status">Status</label>
<br />
<select
class="form-control"
formControlName="status"
>
<option
*ngFor="let interest of countries"
[value]="interest"
>
{{ interest }}
</option>
</select>
</div>
<div
class="form-group col-sm-12 col-md-2 text-center mt-2"
>
<button
type="button"
class="btn btn-danger"
(click)="removeRepeat(i)"
>
<i class="feather ft-x"></i> Delete
</button>
</div>
</div>
</div>
</div>
</div>
<hr />
</div>
<div class="form-group text-center space-20">
<button
uiSref="personal"
type="button"
class="btn btn-raised btn-secondary mr-1"
awPreviousStep
>
<span style="margin-right: 10px">
<i class="feather ft-chevron-left"></i>
</span>
Previous
</button>
<button
uiSref="address"
type="button"
class="btn btn-raised btn-info"
[disabled]="numberTab.valid"
awNextStep
>
Next
<span style="margin-left: 10px">
<i class="feather ft-chevron-right"></i>
</span>
</button>
</div>
</form>
</aw-wizard-step>
<aw-wizard-step
[stepTitle]="'Estimasi Energy'"
[navigationSymbol]="{
symbol: '&#xf0e7;',
fontFamily: 'FontAwesome'
}"
>
<div class="form-group overflow-hidden">
<div class="col-12">
<button
data-repeater-create
class="btn btn-primary"
(click)="addRepeat()"
>
<i class="feather ft-plus"></i> Add
</button>
</div>
</div>
<form [formGroup]="repeatForm">
<div class="card-body" formArrayName="repeatArray">
<div class="row">
<div
class="col-12"
*ngFor="
let repeatForm of repeatFormGroup.controls;
let i = index
"
>
<div class="repeater-default">
<div [formGroupName]="i" class="row">
<div
class="form-group mb-1 col-sm-12 col-md-3"
>
<label for="roomName">Room</label>
<br />
<div class="input-group">
<select
class="form-control"
formControlName="roomName"
>
<option
*ngFor="let interest of countries"
[value]="interest"
>
{{ interest }}
</option>
</select>
<div class="input-group-append">
<button
type="button"
class="btn btn-primary"
>
<i class="feather ft-plus"></i>
</button>
</div>
</div>
</div>
<div
class="form-group mb-1 col-sm-12 col-md-3"
>
<label for="room">Room Name</label>
<br />
<input
type="text"
formControlName="room"
class="form-control"
placeholder="room"
/>
</div>
<div
class="form-group mb-1 col-sm-12 col-md-2"
>
<label for="floor">Floor</label>
<br />
<select
class="form-control"
formControlName="floor"
>
<option
*ngFor="let interest of countries"
[value]="interest"
>
{{ interest }}
</option>
</select>
</div>
<div
class="form-group mb-1 col-sm-12 col-md-2"
>
<label for="status">Status</label>
<br />
<select
class="form-control"
formControlName="status"
>
<option
*ngFor="let interest of countries"
[value]="interest"
>
{{ interest }}
</option>
</select>
</div>
<div
class="form-group col-sm-12 col-md-2 text-center mt-2"
>
<button
type="button"
class="btn btn-danger"
(click)="removeRepeat(i)"
>
<i class="feather ft-x"></i> Delete
</button>
</div>
</div>
</div>
</div>
</div>
<hr />
</div>
<div class="form-group text-center space-20">
<button
uiSref="personal"
type="button"
class="btn btn-raised btn-secondary mr-1"
awPreviousStep
>
<span style="margin-right: 10px">
<i class="feather ft-chevron-left"></i>
</span>
Previous
</button>
<button
uiSref="address"
type="button"
class="btn btn-raised btn-info"
[disabled]="numberTab.valid"
awNextStep
>
Next
<span style="margin-left: 10px">
<i class="feather ft-chevron-right"></i>
</span>
</button>
</div>
</form>
</aw-wizard-step>
<aw-wizard-step
[stepTitle]="'User Access'"
[navigationSymbol]="{
symbol: '&#xf0c0;',
fontFamily: 'FontAwesome'
}"
>
<div class="form-group overflow-hidden">
<div class="col-12">
<button
data-repeater-create
class="btn btn-primary"
(click)="addRepeat()"
>
<i class="feather ft-plus"></i> Add
</button>
</div>
</div>
<form [formGroup]="repeatForm">
<div class="card-body" formArrayName="repeatArray">
<div class="row">
<div
class="col-12"
*ngFor="
let repeatForm of repeatFormGroup.controls;
let i = index
"
>
<div class="repeater-default">
<div [formGroupName]="i" class="row">
<div
class="form-group mb-1 col-sm-12 col-md-3"
>
<label for="roomName">Room</label>
<br />
<div class="input-group">
<select
class="form-control"
formControlName="roomName"
>
<option
*ngFor="let interest of countries"
[value]="interest"
>
{{ interest }}
</option>
</select>
<div class="input-group-append">
<button
type="button"
class="btn btn-primary"
>
<i class="feather ft-plus"></i>
</button>
</div>
</div>
</div>
<div
class="form-group mb-1 col-sm-12 col-md-3"
>
<label for="room">Room Name</label>
<br />
<input
type="text"
formControlName="room"
class="form-control"
placeholder="room"
/>
</div>
<div
class="form-group mb-1 col-sm-12 col-md-2"
>
<label for="floor">Floor</label>
<br />
<select
class="form-control"
formControlName="floor"
>
<option
*ngFor="let interest of countries"
[value]="interest"
>
{{ interest }}
</option>
</select>
</div>
<div
class="form-group mb-1 col-sm-12 col-md-2"
>
<label for="status">Status</label>
<br />
<select
class="form-control"
formControlName="status"
>
<option
*ngFor="let interest of countries"
[value]="interest"
>
{{ interest }}
</option>
</select>
</div>
<div
class="form-group col-sm-12 col-md-2 text-center mt-2"
>
<button
type="button"
class="btn btn-danger"
(click)="removeRepeat(i)"
>
<i class="feather ft-x"></i> Delete
</button>
</div>
</div>
</div>
</div>
</div>
<hr />
</div>
<div class="form-group text-center space-20">
<button
uiSref="personal"
type="button"
class="btn btn-raised btn-secondary mr-1"
awPreviousStep
(click)="previousFourthStep()"
>
<span style="margin-right: 10px">
<i class="feather ft-chevron-left"></i>
</span>
Previous
</button>
<button
uiSref="address"
type="button"
class="btn btn-raised btn-info"
[disabled]="!numberTab.valid"
(click)="submit()"
>
Submit
</button>
</div>
</form>
</aw-wizard-step>
</aw-wizard>
</div>
</ng-container>
</m-card>
</div>
</div>
</section>
</div>
</div>
</div>

View File

@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AddNewBuildingRoomComponent } from './add-new-building-room.component';
describe('AddNewBuildingRoomComponent', () => {
let component: AddNewBuildingRoomComponent;
let fixture: ComponentFixture<AddNewBuildingRoomComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ AddNewBuildingRoomComponent ]
})
.compileComponents();
fixture = TestBed.createComponent(AddNewBuildingRoomComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,141 @@
import { Component, OnInit } from "@angular/core";
import { FormArray, FormBuilder, FormGroup, Validators } from "@angular/forms";
import { Router } from "@angular/router";
import { BlockUI, NgBlockUI } from "ng-block-ui";
@Component({
selector: "app-add-new-building-room",
templateUrl: "./add-new-building-room.component.html",
styleUrls: ["./add-new-building-room.component.css"],
})
export class AddNewBuildingRoomComponent implements OnInit {
public breadcrumb: any;
numberTab: FormGroup;
stepOneForm: FormGroup;
stepTwoForm: FormGroup;
stepThreeForm: FormGroup;
stepFourForm: FormGroup;
isStepFourReached = false;
repeatForm: FormGroup;
public repeatList: FormArray;
get repeatFormGroup() {
return this.repeatForm.get('repeatArray') as FormArray;
}
@BlockUI('numberTabs') blockUINumberTabs: NgBlockUI;
@BlockUI('iconTabs') blockUIIconTabs: NgBlockUI;
countries = ["Amsterdam", "Berlin", "Frankfurt"];
eventType = ["Banquet", "Fund Raiser", "Dinner Party", "Wedding"];
eventLocation = ["Amsterdam", "Berlin", "Frankfurt"];
eventStatus = ["Planning", "In Progress", "Finished"];
requirements1 = [
{ id: 1, name: "Staffing" },
{ id: 2, name: "Catering" },
];
agendaItems1 = [
{ id: 1, name: "1st item", idName: "item1" },
{ id: 2, name: "2st item", idName: "item2" },
{ id: 3, name: "3st item", idName: "item3" },
{ id: 4, name: "4st item", idName: "item4" },
{ id: 5, name: "5st item", idName: "item5" },
];
constructor(private formBuilder: FormBuilder, private router: Router,) {}
ngOnInit() {
this.breadcrumb = {
mainlabel: "Device",
links: [
{
name: "Home",
isLink: false,
link: "/dashboard/sales",
},
{
name: "Device",
isLink: false,
},
],
};
this.numberTab = this.formBuilder.group({
buildName: ["", Validators.required],
phone: ["", Validators.required],
phoneNumber: ["", [Validators.required]],
email: ["", [Validators.required, Validators.email]],
address: ["", [Validators.required]],
owned: ["", [Validators.required]],
});
this.repeatForm = this.formBuilder.group({
repeatArray: this.formBuilder.array([this.createRepeat()])
});
this.repeatList = this.repeatForm.get('repeatArray') as FormArray;
}
createRepeat(): FormGroup {
return this.formBuilder.group({
roomName: ['', Validators.required],
room: ['', Validators.required],
floor: ['', Validators.required],
status: ['', Validators.required],
});
}
addRepeat() {
this.repeatList.push(this.createRepeat());
}
removeRepeat(index) {
this.repeatList.removeAt(index);
}
getRepeatFormGroup(index): FormGroup {
const formGroup = this.repeatList.controls[index] as FormGroup;
return formGroup;
}
public previousFourthStep() {
this.isStepFourReached = true;
}
get f() {
return this.stepOneForm.controls;
}
get i() {
return this.stepTwoForm.controls;
}
get j() {
return this.stepThreeForm.controls;
}
get k() {
return this.stepFourForm.controls;
}
submit() {
window.alert('Form submitted.');
}
cancel() {
this.router.navigate(["/monitoring"]);
}
reloadNumberTabs() {
this.blockUINumberTabs.start('Loading..');
setTimeout(() => {
this.blockUINumberTabs.stop();
}, 2500);
}
reloadIconTabs() {
this.blockUIIconTabs.start('Loading..');
setTimeout(() => {
this.blockUIIconTabs.stop();
}, 2500);
}
}

View File

@ -5,6 +5,23 @@
</div>
<div class="content-body">
<section id="social-cards">
<div class="row mb-2">
<div class="col-md-6">
<input
type="text"
class="form-control"
placeholder="Search..."
/>
</div>
<div class="col-md-6 text-right">
<button
class="btn btn-secondary"
[routerLink]="['/monitoring/add-new-room']"
>
<i class="feather ft-plus"></i>&nbsp; Add new building
</button>
</div>
</div>
<div class="row mt-2">
<div class="col-xl-4 col-md-6 col-12" *ngFor="let data of dataArray">
<div class="card">

View File

@ -31,6 +31,24 @@ export class BuildingComponent {
labels: [],
},
},
{
id: 3,
build_name: "PT Ikea",
total: "342",
donut: {
series: [50, 50],
labels: [],
},
},
{
id: 4,
build_name: "PT Tokopedia",
total: "342",
donut: {
series: [90, 10],
labels: [],
},
},
];
constructor(private chartApiservice: ChartApiService) {}

View File

@ -4,8 +4,8 @@ import { RouterModule } from '@angular/router';
import { ChartistModule } from 'ng-chartist';
import { NgxDatatableModule } from '@swimlane/ngx-datatable';
import { FormsModule } from '@angular/forms';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { NgbDatepickerModule, NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { CardModule } from '../../../content/partials/general/card/card.module';
import { NgChartsModule } from 'ng2-charts';
import { BlockUIModule } from 'ng-block-ui';
@ -15,14 +15,18 @@ import { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';
import { BuildingComponent } from './building/building.component';
import { RoomComponent } from './room/room.component';
import { BreadcrumbModule } from 'src/app/_layout/breadcrumb/breadcrumb.module';
import { AddNewBuildingRoomComponent } from './add-new-building-room/add-new-building-room.component';
import { ArchwizardModule } from 'angular-archwizard';
@NgModule({
declarations: [
BuildingComponent,
RoomComponent
RoomComponent,
AddNewBuildingRoomComponent
],
imports: [
CommonModule,
ReactiveFormsModule,
ChartistModule,
FormsModule,
NgChartsModule,
@ -30,6 +34,8 @@ import { BreadcrumbModule } from 'src/app/_layout/breadcrumb/breadcrumb.module';
MatchHeightModule,
NgxDatatableModule,
PerfectScrollbarModule,
NgbDatepickerModule,
ArchwizardModule,
BreadcrumbModule,
NgbModule,
BlockUIModule.forRoot({
@ -44,6 +50,10 @@ import { BreadcrumbModule } from 'src/app/_layout/breadcrumb/breadcrumb.module';
path: 'monitoring-room',
component: RoomComponent
},
{
path: 'add-new-room',
component: AddNewBuildingRoomComponent
},
])
]
})

View File

@ -0,0 +1,190 @@
:host ::ng-deep .ngx-datatable.bootstrap .datatable-header .datatable-header-cell .datatable-header-cell-label {
font-family: inherit;
font-size: medium;
font-weight: bold;
color: #6B6F82;
}
:host ::ng-deep .ngx-datatable .datatable-row-center, .ngx-datatable .datatable-row-group, .ngx-datatable .datatable-row-right {
position: relative;
height: 50px !important;
}
:host ::ng-deep .datatable-icon-right:before {
font-family: 'icofont';
font-style: normal;
}
:host ::ng-deep .datatable-icon-skip:before {
font-family: 'icofont';
font-style: normal;
}
:host ::ng-deep .datatable-icon-left:before {
font-family: 'icofont';
font-style: normal;
}
:host ::ng-deep .datatable-icon-left:before {
content: "\2039";
font-size: x-large;
}
:host ::ng-deep .datatable-icon-prev:before {
content: "\00AB";
font-size: x-large;
}
:host ::ng-deep .datatable-icon-right:before {
content: "\203A";
font-size: x-large;
}
:host ::ng-deep .datatable-icon-skip:before {
content: "\00BB";
font-size: x-large;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager .datatable-icon-left,
.ngx-datatable.bootstrap .datatable-footer .datatable-pager .datatable-icon-right,
.ngx-datatable.bootstrap .datatable-footer .datatable-pager .datatable-icon-prev {
font-size: 16px;
line-height: 22px;
padding: 0px 09px;
background-color: #d4d2e7;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager .datatable-icon-right,
.ngx-datatable.bootstrap .datatable-footer .datatable-pager .datatable-icon-right {
font-size: 16px;
line-height: 22px;
padding: 0px 09px;
background-color: #d4d2e7;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager .datatable-icon-skip {
font-size: 16px;
line-height: 22px;
padding: 0px 09px;
background-color: #d4d2e7;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager .datatable-icon-prev {
font-size: 16px;
line-height: 22px;
padding: 0px 09px;
background-color: #d4d2e7;
}
:host ::ng-deep .datatable-footer .datatable-pager ul li:not(.disabled).active a,
.ngx-datatable.bootstrap[_ngcontent-c11] .datatable-footer[_ngcontent-c11] .datatable-pager[_ngcontent-c11] ul[_ngcontent-c11] li[_ngcontent-c11]:not(.disabled):hover a[_ngcontent-c11] {
background-color: #d4d2e7;
font-weight: bold;
font-size: larger;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager a {
height: 32px;
min-width: 34px;
line-height: 22px;
padding: 0;
border-radius: 3px;
margin: 0 3px;
text-align: center;
vertical-align: top;
padding-top: 3px;
text-decoration: none;
vertical-align: bottom;
color: #7c8091;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager .datatable-icon-left,
.ngx-datatable.bootstrap[_ngcontent-c11] .datatable-footer[_ngcontent-c11] .datatable-pager[_ngcontent-c11] .datatable-icon-right[_ngcontent-c11],
.ngx-datatable.bootstrap[_ngcontent-c11] .datatable-footer[_ngcontent-c11] .datatable-pager[_ngcontent-c11] .datatable-icon-prev[_ngcontent-c11] {
font-size: 14px;
line-height: 9px;
padding: 0px 08px;
background-color: #ffffff;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager .datatable-icon-left,
.ngx-datatable.bootstrap[_ngcontent-c11] .datatable-footer[_ngcontent-c11] .datatable-pager[_ngcontent-c11] .datatable-icon-right[_ngcontent-c11],
.ngx-datatable.bootstrap[_ngcontent-c11] .datatable-footer[_ngcontent-c11] .datatable-pager[_ngcontent-c11] .datatable-icon-prev[_ngcontent-c11] {
font-size: 0px;
line-height: 22px;
padding: 0px 09px;
background-color: #ffffff;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager .datatable-icon-right,
.ngx-datatable.bootstrap[_ngcontent-c11] .datatable-footer[_ngcontent-c11] .datatable-pager[_ngcontent-c11] .datatable-icon-right[_ngcontent-c11],
.ngx-datatable.bootstrap[_ngcontent-c11] .datatable-footer[_ngcontent-c11] .datatable-pager[_ngcontent-c11] .datatable-icon-prev[_ngcontent-c11] {
font-size: 0px;
line-height: 22px;
padding: 0px 09px;
background-color: #ffffff;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager .datatable-icon-skip,
.ngx-datatable.bootstrap[_ngcontent-c11] .datatable-footer[_ngcontent-c11] .datatable-pager[_ngcontent-c11] .datatable-icon-right[_ngcontent-c11],
.ngx-datatable.bootstrap[_ngcontent-c11] .datatable-footer[_ngcontent-c11] .datatable-pager[_ngcontent-c11] .datatable-icon-prev[_ngcontent-c11] {
font-size: 0px;
line-height: 22px;
padding: 0px 09px;
background-color: #ffffff;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager .datatable-icon-prev,
.ngx-datatable.bootstrap[_ngcontent-c11] .datatable-footer[_ngcontent-c11] .datatable-pager[_ngcontent-c11] .datatable-icon-right[_ngcontent-c11],
.ngx-datatable.bootstrap[_ngcontent-c11] .datatable-footer[_ngcontent-c11] .datatable-pager[_ngcontent-c11] .datatable-icon-prev[_ngcontent-c11] {
font-size: 0px;
line-height: 22px;
padding: 0px 09px;
background-color: #ffffff;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager ul li:not(.disabled):hover a {
background-color: #545454;
font-weight: bold;
color: white;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager ul li:not(.disabled).active a,
.ngx-datatable.bootstrap .datatable-footer .datatable-pager ul li:not(.disabled):hover a {
background-color: #545454;
font-weight: bold;
color: white;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer {
background: #727e8e;
color: #ededed;
margin-top: -1px;
overflow: inherit;
}
:host ::ng-deep .ngx-datatable.bootstrap .datatable-header {
font-weight: bold;
height: unset !important;
overflow: inherit
}
:host ::ng-deep .ngx-datatable .datatable-footer .datatable-pager {
flex: 0 0 0%;
}
:host ::ng-deep .ngx-datatable .datatable-footer .datatable-pager .pager {
display: flex;
}
:host ::ng-deep .block-ui-wrapper {
background: rgba(255, 249, 249, 0.5) !important;
}
:host ::ng-deep .ngx-datatable .datatable-footer .selected-count .datatable-pager {
flex: 0 0 0%;
}
:host ::ng-deep .ngx-datatable {
display: -webkit-box;
}

View File

@ -1 +1,149 @@
<p>room works!</p>
<div class="app-content content">
<div class="content-wrapper">
<div class="content-header row mb-1">
<app-breadcrumb class="col-12" [breadcrumb]="breadcrumb"></app-breadcrumb>
</div>
<div class="content-body">
<section id="configuration">
<div class="row">
<div
class="col-12"
*blockUI="'zeroConfiguration'; message: 'Loading'"
>
<m-card>
<ng-container mCardHeaderTitle> Room Table </ng-container>
<ng-container mCardBody>
<div class="row mb-2">
<div class="col-md-6">
<input
type="text"
class="form-control"
placeholder="Search..."
[(ngModel)]="searchTerm"
(input)="filterRows()"
/>
</div>
<div class="col-md-6 text-right">
<button
class="btn btn-secondary"
[routerLink]="['/monitoring/add-new-room']"
>
<i class="feather ft-plus"></i>&nbsp; Add new room
</button>
</div>
</div>
<div class="card-dashboard">
<ngx-datatable
class="bootstrap table-bordered"
[limit]="10"
[rows]="filteredRows"
[columnMode]="'force'"
[headerHeight]="50"
[footerHeight]="50"
[rowHeight]="50"
fxFlex="auto"
[scrollbarH]="true"
>
<ngx-datatable-column
name="product"
[flexGrow]="1"
[minWidth]="90"
>
<ng-template ngx-datatable-header-template>
<span>Room Name</span>
</ng-template>
<ng-template
let-value="value"
ngx-datatable-cell-template
>
{{ value }}
</ng-template>
</ngx-datatable-column>
<ngx-datatable-column
name="buttonname"
[flexGrow]="1"
[minWidth]="90"
>
<ng-template ngx-datatable-header-template>
<span>Category</span>
</ng-template>
<ng-template
ngx-datatable-cell-template
let-value="value"
>
<span>
<button
type="button"
class="btn btn-sm btn-outline-primary round"
>
{{ value }}
</button>
</span>
</ng-template>
</ngx-datatable-column>
<ngx-datatable-column
name="value"
[flexGrow]="1"
[minWidth]="90"
>
<ng-template ngx-datatable-header-template>
<span>Popularity</span>
</ng-template>
<ng-template
ngx-datatable-cell-template
let-value="value"
>
<ngb-progressbar
height="7px"
type="danger"
[value]="value"
>
</ngb-progressbar>
</ng-template>
</ngx-datatable-column>
<ngx-datatable-column
name="amount"
[flexGrow]="1"
[minWidth]="90"
>
<ng-template ngx-datatable-header-template>
<span>Amount</span>
</ng-template>
<ng-template
ngx-datatable-cell-template
let-value="value"
>
{{value}}
</ng-template>
</ngx-datatable-column>
<ngx-datatable-column
name="Actions"
[flexGrow]="1"
[minWidth]="150"
>
<ng-template
ngx-datatable-cell-template
let-rowIndex="rowIndex"
let-row="row"
>
<button
class="btn btn-sm btn-info mr-1"
(click)="viewRow(row)"
>
<i class="ficon feather ft-eye"></i>
</button>
</ng-template>
</ngx-datatable-column>
</ngx-datatable>
</div>
</ng-container>
</m-card>
</div>
</div>
</section>
</div>
</div>
</div>

View File

@ -1,10 +1,203 @@
import { Component } from '@angular/core';
import { Component, OnInit } from "@angular/core";
@Component({
selector: 'app-room',
templateUrl: './room.component.html',
styleUrls: ['./room.component.css']
selector: "app-room",
templateUrl: "./room.component.html",
styleUrls: ["./room.component.css"],
})
export class RoomComponent {
export class RoomComponent implements OnInit {
public breadcrumb: any;
// filteredRows: any[];
searchTerm: string = "";
firstRow = [
"../../../assets/images/portrait/small/avatar-s-4.png",
"../../../assets/images/portrait/small/avatar-s-5.png",
"../../../assets/images/portrait/small/avatar-s-6.png",
];
secondRow = [
"../../../assets/images/portrait/small/avatar-s-7.png",
"../../../assets/images/portrait/small/avatar-s-8.png",
];
thirdRow = [
"../../../assets/images/portrait/small/avatar-s-1.png",
"../../../assets/images/portrait/small/avatar-s-2.png",
"../../../assets/images/portrait/small/avatar-s-3.png",
];
fourthRow = [
"../../../assets/images/portrait/small/avatar-s-11.png",
"../../../assets/images/portrait/small/avatar-s-12.png",
];
fifthRow = [
"../../../assets/images/portrait/small/avatar-s-6.png",
"../../../assets/images/portrait/small/avatar-s-4.png",
];
filteredRows = [
{
type: "danger",
value: 100,
product: "iPhone X",
image: this.firstRow,
buttonname: "Mobile",
amount: "$ 1200.00",
bagde: "+8 more",
},
{
type: "success",
value: 75,
product: "iPad",
image: this.secondRow,
buttonname: "Teblet",
amount: "$ 1190.00",
bagde: "+5 more",
},
{
type: "danger",
value: 65,
product: "OnePlus",
image: this.thirdRow,
buttonname: "Mobile",
amount: "$ 999.00",
bagde: "+3 more",
},
{
type: "success",
value: 55,
product: "ZenPad",
image: this.fourthRow,
buttonname: "Teblet",
amount: "$ 1150.00",
},
{
type: "danger",
value: 45,
product: "Pixel 2",
image: this.fifthRow,
buttonname: "Mobile",
amount: "$ 1180.00",
},
{
type: "danger",
value: 100,
product: "iPhone X",
image: this.firstRow,
buttonname: "Mobile",
amount: "$ 1200.00",
bagde: "+8 more",
},
{
type: "success",
value: 75,
product: "iPad",
image: this.secondRow,
buttonname: "Teblet",
amount: "$ 1190.00",
bagde: "+5 more",
},
{
type: "danger",
value: 65,
product: "OnePlus",
image: this.thirdRow,
buttonname: "Mobile",
amount: "$ 999.00",
bagde: "+3 more",
},
{
type: "success",
value: 55,
product: "ZenPad",
image: this.fourthRow,
buttonname: "Teblet",
amount: "$ 1150.00",
},
{
type: "danger",
value: 45,
product: "Pixel 2",
image: this.fifthRow,
buttonname: "Mobile",
amount: "$ 1180.00",
},
{
type: "danger",
value: 100,
product: "iPhone X",
image: this.firstRow,
buttonname: "Mobile",
amount: "$ 1200.00",
bagde: "+8 more",
},
{
type: "success",
value: 75,
product: "iPad",
image: this.secondRow,
buttonname: "Teblet",
amount: "$ 1190.00",
bagde: "+5 more",
},
{
type: "danger",
value: 65,
product: "OnePlus",
image: this.thirdRow,
buttonname: "Mobile",
amount: "$ 999.00",
bagde: "+3 more",
},
{
type: "success",
value: 55,
product: "ZenPad",
image: this.fourthRow,
buttonname: "Teblet",
amount: "$ 1150.00",
},
{
type: "danger",
value: 45,
product: "Pixel 2",
image: this.fifthRow,
buttonname: "Mobile",
amount: "$ 1180.00",
},
];
constructor() {}
ngOnInit() {
this.breadcrumb = {
mainlabel: "Device",
links: [
{
name: "Home",
isLink: false,
link: "/dashboard/sales",
},
{
name: "Device",
isLink: false,
},
],
};
}
filterRows() {
if (!this.searchTerm) {
this.filteredRows = [...this.filteredRows];
} else {
this.filteredRows = this.filteredRows.filter((row) =>
this.rowContainsSearchTerm(row)
);
}
}
rowContainsSearchTerm(row: any): boolean {
const searchTermLC = this.searchTerm.toLowerCase();
return Object.values(row).some(
(value) =>
value !== null && value.toString().toLowerCase().includes(searchTermLC)
);
}
}