Browse Source

Started to remove ngModel

pull/1/head
Sebastian 10 years ago
parent
commit
23046fd11b
  1. 4
      src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.html
  2. 47
      src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.ts
  3. 12
      src/Squidex/app/features/settings/pages/clients/clients-page.component.html
  4. 14
      src/Squidex/app/features/settings/pages/clients/clients-page.component.ts
  5. 30
      src/Squidex/app/features/settings/pages/contributors/contributors-page.component.html
  6. 4
      src/Squidex/app/features/settings/pages/contributors/contributors-page.component.scss
  7. 34
      src/Squidex/app/features/settings/pages/contributors/contributors-page.component.ts
  8. 12
      src/Squidex/app/features/settings/pages/languages/languages-page.component.html
  9. 15
      src/Squidex/app/features/settings/pages/languages/languages-page.component.ts
  10. 2
      src/Squidex/app/framework/angular/autocomplete.component.ts
  11. 8
      src/Squidex/app/framework/module.ts

4
src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.html

@ -16,7 +16,7 @@
</button> </button>
</div> </div>
<div class="search-form"> <div class="search-form">
<input class="form-control form-control-dark" [(ngModel)]="schemasFilter" [ngModelOptions]="{standalone: true}" placeholder="Search for schemas..." /> <input class="form-control form-control-dark" [formControl]="schemasFilter" placeholder="Search for schemas..." />
<i class="icon-search"></i> <i class="icon-search"></i>
</div> </div>
@ -25,7 +25,7 @@
<div class="panel-content"> <div class="panel-content">
<div class="schemas"> <div class="schemas">
<div class="schema" *ngFor="let schema of filteredSchemas" [routerLink]="[schema.name]" routerLinkActive="active"> <div class="schema" *ngFor="let schema of schemasFiltered | async" [routerLink]="[schema.name]" routerLinkActive="active">
<div class="schema-inner"> <div class="schema-inner">
<div class="row"> <div class="row">
<div class="col-xs-4"> <div class="col-xs-4">

47
src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.ts

@ -6,7 +6,8 @@
*/ */
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
import { BehaviorSubject, Observable } from 'rxjs';
import { import {
AppComponentBase, AppComponentBase,
@ -33,29 +34,29 @@ const FALLBACK_NAME = 'my-schema';
export class SchemasPageComponent extends AppComponentBase { export class SchemasPageComponent extends AppComponentBase {
public modalDialog = new ModalView(); public modalDialog = new ModalView();
public schemasFilter: string; public schemas = new BehaviorSubject(ImmutableArray.empty<SchemaDto>());
public schemas = ImmutableArray.empty<SchemaDto>(); public schemasFilter = new FormControl();
public schemasFiltered =
Observable.of(null).merge(this.schemasFilter.valueChanges.debounceTime(100)).combineLatest(this.schemas,
(query, schemas) => {
public get filteredSchemas() { if (query && query.length > 0) {
let result = this.schemas; schemas = schemas.filter(t => t.name.indexOf(query) >= 0);
}
if (this.schemasFilter && this.schemasFilter.length > 0) { schemas =
result = result.filter(t => t.name.indexOf(this.schemasFilter) >= 0); schemas.sort((a, b) => {
} if (a.name < b.name) {
return -1;
}
if (a.name > b.name) {
return 1;
}
return 0;
});
result = return schemas;
result.sort((a, b) => { });
if (a.name < b.name) {
return -1;
}
if (a.name > b.name) {
return 1;
}
return 0;
});
return result;
}
constructor(apps: AppsStoreService, notifications: NotificationService, users: UsersProviderService, constructor(apps: AppsStoreService, notifications: NotificationService, users: UsersProviderService,
private readonly formBuilder: FormBuilder, private readonly formBuilder: FormBuilder,
@ -72,14 +73,14 @@ export class SchemasPageComponent extends AppComponentBase {
this.appName() this.appName()
.switchMap(app => this.schemasService.getSchemas(app).retry(2)) .switchMap(app => this.schemasService.getSchemas(app).retry(2))
.subscribe(dtos => { .subscribe(dtos => {
this.schemas = ImmutableArray.of(dtos); this.schemas.next(ImmutableArray.of(dtos));
}, error => { }, error => {
this.notifyError(error); this.notifyError(error);
}); });
} }
public onSchemaCreationCompleted(dto: SchemaDto) { public onSchemaCreationCompleted(dto: SchemaDto) {
this.schemas = this.schemas.push(dto); this.schemas.next(this.schemas.getValue().push(dto));
this.modalDialog.hide(); this.modalDialog.hide();
} }

12
src/Squidex/app/features/settings/pages/clients/clients-page.component.html

@ -20,16 +20,16 @@
</div> </div>
<div class="table-items-footer"> <div class="table-items-footer">
<form class="form-inline" [formGroup]="createForm" (submit)="attachClient()"> <form class="form-inline" [formGroup]="addClientForm" (submit)="attachClient()">
<div class="errors-box" *ngIf="createForm.get('name').invalid && createForm.get('name').dirty"> <div class="errors-box" *ngIf="addClientForm.get('name').invalid && addClientForm.get('name').dirty">
<div class="errors"> <div class="errors">
<span *ngIf="createForm.get('name').hasError('required')"> <span *ngIf="addClientForm.get('name').hasError('required')">
Name is required. Name is required.
</span> </span>
<span *ngIf="createForm.get('name').hasError('maxlength')"> <span *ngIf="addClientForm.get('name').hasError('maxlength')">
Name can not have more than 40 characters. Name can not have more than 40 characters.
</span> </span>
<span *ngIf="createForm.get('name').hasError('pattern')"> <span *ngIf="addClientForm.get('name').hasError('pattern')">
Name can contain lower case letters (a-z), numbers and dashes (not at the end). Name can contain lower case letters (a-z), numbers and dashes (not at the end).
</span> </span>
</div> </div>
@ -39,7 +39,7 @@
<input type="text" class="form-control" id="app-name" formControlName="name" maxlength="40" placeholder="Enter client name" /> <input type="text" class="form-control" id="app-name" formControlName="name" maxlength="40" placeholder="Enter client name" />
</div> </div>
<button type="submit" class="btn btn-success" [disabled]="createForm.invalid">Add Client</button> <button type="submit" class="btn btn-success" [disabled]="addClientForm.invalid">Add Client</button>
</form> </form>
</div> </div>
</div> </div>

14
src/Squidex/app/features/settings/pages/clients/clients-page.component.ts

@ -32,7 +32,7 @@ function rename(client: AppClientDto, name: string) {
export class ClientsPageComponent extends AppComponentBase implements OnInit { export class ClientsPageComponent extends AppComponentBase implements OnInit {
public appClients: ImmutableArray<AppClientDto>; public appClients: ImmutableArray<AppClientDto>;
public createForm: FormGroup = public addClientForm: FormGroup =
this.formBuilder.group({ this.formBuilder.group({
name: ['', name: ['',
[ [
@ -84,12 +84,12 @@ export class ClientsPageComponent extends AppComponentBase implements OnInit {
} }
public attachClient() { public attachClient() {
this.createForm.markAsDirty(); this.addClientForm.markAsDirty();
if (this.createForm.valid) { if (this.addClientForm.valid) {
this.createForm.disable(); this.addClientForm.disable();
const dto = new CreateAppClientDto(this.createForm.controls['name'].value); const dto = new CreateAppClientDto(this.addClientForm.controls['name'].value);
this.appName() this.appName()
.switchMap(app => this.appClientsService.postClient(app, dto)) .switchMap(app => this.appClientsService.postClient(app, dto))
@ -104,8 +104,8 @@ export class ClientsPageComponent extends AppComponentBase implements OnInit {
} }
private reset() { private reset() {
this.createForm.reset(); this.addClientForm.reset();
this.createForm.enable(); this.addClientForm.enable();
} }
} }

30
src/Squidex/app/features/settings/pages/contributors/contributors-page.component.html

@ -13,13 +13,30 @@
<div class="panel-content"> <div class="panel-content">
<table class="table table-items table-fixed"> <table class="table table-items table-fixed">
<colgroup> <colgroup>
<col style="width: 50px" /> <col style="width: 70px" />
<col style="width: 50%" /> <col style="width: 50%" />
<col style="width: 50%" /> <col style="width: 50%" />
<col style="width: 150px" /> <col style="width: 150px" />
<col style="width: 80px" /> <col style="width: 80px" />
</colgroup> </colgroup>
<thead>
<tr>
<th>
&nbsp;
</th>
<th>
Name
</th>
<th>
Email
</th>
<th>
Options
</th>
</tr>
</thead>
<tbody> <tbody>
<template ngFor let-contributor [ngForOf]="appContributors"> <template ngFor let-contributor [ngForOf]="appContributors">
<tr> <tr>
@ -49,17 +66,12 @@
</table> </table>
<div class="table-items-footer"> <div class="table-items-footer">
<form class="form-inline" (submit)="assignContributor()" > <form class="form-inline" [formGroup]="addContributorForm" (submit)="assignContributor()" >
<div class="form-group"> <div class="form-group">
<sqx-autocomplete [source]="usersDataSource" <sqx-autocomplete [source]="usersDataSource" formControlName="user" [inputName]="contributor"></sqx-autocomplete>
(ngModelChange)="selectUser($event.model)"
[ngModel]="selectedUser"
[ngModelOptions]="{standalone: true}"
[inputName]="contributor">
</sqx-autocomplete>
</div> </div>
<button type="submit" class="btn btn-success" [disabled]="!selectedUser">Add Contributor</button> <button type="submit" class="btn btn-success" [disabled]="!addContributorForm.valid">Add Contributor</button>
</form> </form>
</div> </div>
</div> </div>

4
src/Squidex/app/features/settings/pages/contributors/contributors-page.component.scss

@ -6,6 +6,10 @@
max-width: 800px; max-width: 800px;
} }
.panel-content {
overflow-y: scroll;
}
.card { .card {
max-width: 700px; max-width: 700px;
} }

34
src/Squidex/app/features/settings/pages/contributors/contributors-page.component.ts

@ -6,6 +6,7 @@
*/ */
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { import {
@ -62,11 +63,6 @@ function changePermission(contributor: AppContributorDto, permission: string): A
export class ContributorsPageComponent extends AppComponentBase implements OnInit { export class ContributorsPageComponent extends AppComponentBase implements OnInit {
public appContributors = ImmutableArray.empty<AppContributorDto>(); public appContributors = ImmutableArray.empty<AppContributorDto>();
public currentUserId: string;
public selectedUserName: string | null = null;
public selectedUser: UserDto | null = null;
public usersDataSource: UsersDataSource; public usersDataSource: UsersDataSource;
public usersPermissions = [ public usersPermissions = [
'Owner', 'Owner',
@ -74,10 +70,19 @@ export class ContributorsPageComponent extends AppComponentBase implements OnIni
'Editor' 'Editor'
]; ];
public addContributorForm: FormGroup =
this.formBuilder.group({
user: [null,
[
Validators.required
]]
});
constructor(apps: AppsStoreService, notifications: NotificationService, users: UsersProviderService, constructor(apps: AppsStoreService, notifications: NotificationService, users: UsersProviderService,
private readonly appContributorsService: AppContributorsService, private readonly appContributorsService: AppContributorsService,
private readonly usersService: UsersService, private readonly usersService: UsersService,
private readonly authService: AuthService private readonly authService: AuthService,
private readonly formBuilder: FormBuilder
) { ) {
super(apps, notifications, users); super(apps, notifications, users);
@ -85,8 +90,6 @@ export class ContributorsPageComponent extends AppComponentBase implements OnIni
} }
public ngOnInit() { public ngOnInit() {
this.currentUserId = this.authService.user.id;
this.load(); this.load();
} }
@ -101,14 +104,7 @@ export class ContributorsPageComponent extends AppComponentBase implements OnIni
} }
public assignContributor() { public assignContributor() {
if (!this.selectedUser) { const contributor = new AppContributorDto(this.addContributorForm.get('user').value.model.id, 'Editor');
return;
}
const contributor = new AppContributorDto(this.selectedUser.id, 'Editor');
this.selectedUser = null;
this.selectedUserName = null;
this.appName() this.appName()
.switchMap(app => this.appContributorsService.postContributor(app, contributor)) .switchMap(app => this.appContributorsService.postContributor(app, contributor))
@ -117,6 +113,8 @@ export class ContributorsPageComponent extends AppComponentBase implements OnIni
}, error => { }, error => {
this.notifyError(error); this.notifyError(error);
}); });
this.addContributorForm.reset();
} }
public changePermission(contributor: AppContributorDto, permission: string) { public changePermission(contributor: AppContributorDto, permission: string) {
@ -140,9 +138,5 @@ export class ContributorsPageComponent extends AppComponentBase implements OnIni
this.notifyError(error); this.notifyError(error);
}); });
} }
public selectUser(selection: UserDto) {
this.selectedUser = selection;
}
} }

12
src/Squidex/app/features/settings/pages/languages/languages-page.component.html

@ -47,8 +47,8 @@
</span> </span>
</td> </td>
<td> <td>
<label class="language-default"> <label class="language-default" (click)="setMasterLanguage(language)">
<input type="radio" [value]="true" [ngModel]="language.isMasterLanguage" (ngModelChange)="setMasterLanguage(language)"> Master Language <input type="radio" [value]="true" [checked]="language.isMasterLanguage"> Master Language
</label> </label>
</td> </td>
<td> <td>
@ -63,14 +63,14 @@
</table> </table>
<div class="table-items-footer"> <div class="table-items-footer">
<form class="form-inline" (submit)="addLanguage()" name="addLanguageForm"> <form class="form-inline" [formGroup]="addLanguageForm" (ngSubmit)="createSchema()" (submit)="addLanguage()">
<div class="form-group"> <div class="form-group">
<select class="form-control language-select" [(ngModel)]="selectedLanguage" name="newLanguage"> <select class="form-control language-select" formControlName="language">
<option *ngFor="let language of allLanguages" [ngValue]="language">{{language.englishName}}</option> <option *ngFor="let language of newLanguages" [ngValue]="language">{{language.englishName}}</option>
</select> </select>
</div> </div>
<button type="submit" class="btn btn-success" [disabled]="!selectedLanguage">Add Language</button> <button type="submit" class="btn btn-success" [disabled]="!addLanguageForm.valid">Add Language</button>
</form> </form>
</div> </div>
</div> </div>

15
src/Squidex/app/features/settings/pages/languages/languages-page.component.ts

@ -6,6 +6,7 @@
*/ */
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { import {
AddAppLanguageDto, AddAppLanguageDto,
@ -30,7 +31,12 @@ export class LanguagesPageComponent extends AppComponentBase implements OnInit {
public allLanguages: LanguageDto[] = []; public allLanguages: LanguageDto[] = [];
public appLanguages = ImmutableArray.empty<AppLanguageDto>(); public appLanguages = ImmutableArray.empty<AppLanguageDto>();
public selectedLanguage: LanguageDto | null = null; public addLanguageForm: FormGroup =
this.formBuilder.group({
language: [null,
Validators.required
]
});
public get newLanguages() { public get newLanguages() {
return this.allLanguages.filter(x => !this.appLanguages.find(l => l.iso2Code === x.iso2Code)); return this.allLanguages.filter(x => !this.appLanguages.find(l => l.iso2Code === x.iso2Code));
@ -38,7 +44,8 @@ export class LanguagesPageComponent extends AppComponentBase implements OnInit {
constructor(apps: AppsStoreService, notifications: NotificationService, users: UsersProviderService, constructor(apps: AppsStoreService, notifications: NotificationService, users: UsersProviderService,
private readonly appLanguagesService: AppLanguagesService, private readonly appLanguagesService: AppLanguagesService,
private readonly languagesService: LanguageService private readonly languagesService: LanguageService,
private readonly formBuilder: FormBuilder
) { ) {
super(apps, notifications, users); super(apps, notifications, users);
} }
@ -66,14 +73,14 @@ export class LanguagesPageComponent extends AppComponentBase implements OnInit {
public addLanguage() { public addLanguage() {
this.appName() this.appName()
.switchMap(app => this.appLanguagesService.postLanguages(app, new AddAppLanguageDto(this.selectedLanguage.iso2Code))) .switchMap(app => this.appLanguagesService.postLanguages(app, new AddAppLanguageDto(this.addLanguageForm.get('language').value.iso2Code)))
.subscribe(dto => { .subscribe(dto => {
this.appLanguages = this.appLanguages.push(dto); this.appLanguages = this.appLanguages.push(dto);
}, error => { }, error => {
this.notifyError(error); this.notifyError(error);
}); });
this.selectedLanguage = null; this.addLanguageForm.reset();
} }
public removeLanguage(language: AppLanguageDto) { public removeLanguage(language: AppLanguageDto) {

2
src/Squidex/app/framework/angular/autocomplete.component.ts

@ -61,7 +61,7 @@ export class AutocompleteComponent implements ControlValueAccessor, OnDestroy {
public queryInput = new FormControl(); public queryInput = new FormControl();
constructor() { constructor() {
this.queryInput.valueChanges.delay(100).subscribe(query => this.loadItems(query)); this.queryInput.valueChanges.debounceTime(100).subscribe(query => this.loadItems(query));
} }
public writeValue(value: any) { public writeValue(value: any) {

8
src/Squidex/app/framework/module.ts

@ -44,8 +44,8 @@ import {
HttpModule, HttpModule,
FormsModule, FormsModule,
CommonModule, CommonModule,
ReactiveFormsModule, RouterModule,
RouterModule ReactiveFormsModule
], ],
declarations: [ declarations: [
AutocompleteComponent, AutocompleteComponent,
@ -103,8 +103,8 @@ import {
HttpModule, HttpModule,
FormsModule, FormsModule,
CommonModule, CommonModule,
ReactiveFormsModule, RouterModule,
RouterModule ReactiveFormsModule
] ]
}) })
export class SqxFrameworkModule { } export class SqxFrameworkModule { }
Loading…
Cancel
Save