Skip to content

Commit df84abc

Browse files
committed
Settings tutorial
1 parent 6194284 commit df84abc

File tree

7 files changed

+110
-1
lines changed

7 files changed

+110
-1
lines changed

cloudapp/src/app/app-routing.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ import { Routes, RouterModule } from '@angular/router';
33
import { MainComponent } from './main/main.component';
44
import { NewrouteComponent } from './newroute/newroute.component';
55
import { ThemingComponent } from './theming/theming.component';
6+
import { SettingsComponent } from './settings/settings.component';
67

78
const routes: Routes = [
89
{ path: '', component: MainComponent },
910
{ path: 'newroute', component: NewrouteComponent },
1011
{ path: 'theming', component: ThemingComponent },
12+
{ path: 'settings', component: SettingsComponent },
1113
];
1214

1315
@NgModule({

cloudapp/src/app/app.module.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import { BrowserModule, Title } from '@angular/platform-browser';
44
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
55
import { MaterialModule, getTranslateModule } from '@exlibris/exl-cloudapp-angular-lib';
66
import { ToastrModule } from 'ngx-toastr';
7+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
78

89
import { AppComponent } from './app.component';
910
import { AppRoutingModule } from './app-routing.module';
1011
import { MainComponent } from './main/main.component';
1112
import { TopmenuComponent } from './topmenu/topmenu.component';
1213
import { NewrouteComponent } from './newroute/newroute.component';
1314
import { ThemingComponent } from './theming/theming.component';
15+
import { SettingsComponent } from './settings/settings.component';
1416

1517
export function getToastrModule() {
1618
return ToastrModule.forRoot({
@@ -25,14 +27,17 @@ export function getToastrModule() {
2527
MainComponent,
2628
TopmenuComponent,
2729
NewrouteComponent,
28-
ThemingComponent,
30+
ThemingComponent,
31+
SettingsComponent
2932
],
3033
imports: [
3134
MaterialModule,
3235
BrowserModule,
3336
BrowserAnimationsModule,
3437
AppRoutingModule,
3538
HttpClientModule,
39+
FormsModule,
40+
ReactiveFormsModule,
3641
getTranslateModule(),
3742
getToastrModule()
3843
],

cloudapp/src/app/main/main.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ <h1>
66
<ul>
77
<li><a [routerLink]="['newroute']">Adding additional routes</a></li>
88
<li><a [routerLink]="['theming']">Using Material Components & Theming</a></li>
9+
<li><a [routerLink]="['settings']">Using the Settings Service</a></li>
910
</ul>
1011
</section>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface Settings {
2+
showValue: boolean,
3+
pageSize: number
4+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<form [formGroup]="form">
2+
<section class="settings-section">
3+
<mat-checkbox labelPosition="before" formControlName="showValue">Show Value</mat-checkbox>
4+
</section>
5+
<section class="settings-section">
6+
<label class="example-margin">Align:</label>
7+
<mat-radio-group formControlName="pageSize">
8+
<mat-radio-button class="settings-control" [value]="5">5</mat-radio-button>
9+
<mat-radio-button class="settings-control" [value]="10">10</mat-radio-button>
10+
<mat-radio-button class="settings-control" [value]="20">20</mat-radio-button>
11+
</mat-radio-group>
12+
</section>
13+
</form>
14+
15+
<div class="commands-container">
16+
<button mat-stroked-button type="button" color="primary" (click)="save()" [disabled]="!form.dirty">Save</button>
17+
<mat-spinner diameter="30" class="spinner" *ngIf="saving"></mat-spinner>
18+
</div>
19+
20+
<pre *ngIf="form.get('showValue').value">{{ form.value | json }}</pre>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
.commands-container {
2+
margin: 20px 0;
3+
width: fit-content;
4+
}
5+
6+
.spinner {
7+
float: right;
8+
}
9+
10+
.commands-container button {
11+
margin-right: 10px;
12+
}
13+
14+
.settings-section {
15+
display: flex;
16+
align-content: center;
17+
align-items: center;
18+
margin: 10px 0;
19+
}
20+
21+
.settings-control {
22+
margin: 0 10px;
23+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { Component, OnInit } from '@angular/core';
2+
import { AppService } from '../app.service';
3+
import { FormBuilder, FormGroup } from '@angular/forms';
4+
import { CloudAppSettingsService } from '@exlibris/exl-cloudapp-angular-lib';
5+
import { ToastrService } from 'ngx-toastr';
6+
import { Settings } from '../models/settings';
7+
8+
@Component({
9+
selector: 'app-settings',
10+
templateUrl: './settings.component.html',
11+
styleUrls: ['./settings.component.scss']
12+
})
13+
export class SettingsComponent implements OnInit {
14+
form: FormGroup;
15+
saving = false;
16+
17+
constructor(
18+
private appService: AppService,
19+
private fb: FormBuilder,
20+
private settingsService: CloudAppSettingsService,
21+
private toastr: ToastrService
22+
) { }
23+
24+
ngOnInit() {
25+
this.appService.setTitle('Settings');
26+
this.form = this.fb.group({
27+
showValue: this.fb.control(false),
28+
pageSize: this.fb.control(10)
29+
});
30+
//this.settingsService.remove().subscribe(()=>this.load());
31+
this.load();
32+
}
33+
34+
load() {
35+
this.settingsService.getAsFormGroup().subscribe( settings => {
36+
if (Object.keys(settings.value).length!=0) {
37+
this.form = settings;
38+
}
39+
});
40+
}
41+
42+
save() {
43+
this.saving = true;
44+
this.settingsService.set(this.form.value).subscribe(
45+
response => {
46+
this.toastr.success('Settings successfully saved.');
47+
this.form.markAsPristine();
48+
},
49+
err => this.toastr.error(err.message),
50+
() => this.saving = false
51+
);
52+
}
53+
54+
}

0 commit comments

Comments
 (0)