Browse Source

Merge branch 'dev' of https://github.com/abpframework/abp into dev

pull/1606/head
mehmet-erim 7 years ago
parent
commit
1716574c5b
  1. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js
  2. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert/abp-sweetalert.js
  3. 6
      npm/ng-packs/packages/core/src/lib/core.module.ts
  4. 26
      npm/ng-packs/packages/core/src/lib/directives/debounce.directive.ts
  5. 21
      npm/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts
  6. 2
      npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html
  7. 30
      npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts
  8. 2
      npm/ng-packs/packages/identity/src/lib/components/users/users.component.html
  9. 18
      npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts
  10. 2
      npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html
  11. 14
      npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts
  12. 3
      npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.html
  13. 23
      npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js

@ -160,7 +160,7 @@
formSaved = true;
$modal.modal('hide');
}
});
}, false);
}
});

6
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/sweetalert/abp-sweetalert.js

@ -73,17 +73,21 @@
return showMessage('error', message, title);
};
abp.message.confirm = function (message, titleOrCallback, callback) {
abp.message.confirm = function (message, titleOrCallback, callback, closeOnEsc) {
var userOpts = {
text: message
};
if ($.isFunction(titleOrCallback)) {
closeOnEsc = callback;
callback = titleOrCallback;
} else if (titleOrCallback) {
userOpts.title = titleOrCallback;
};
userOpts.closeOnEsc = closeOnEsc;
var opts = $.extend(
{},
abp.libs.sweetAlert.config['default'],

6
npm/ng-packs/packages/core/src/lib/core.module.ts

@ -20,6 +20,8 @@ import { SessionState } from './states/session.state';
import { getInitialData } from './utils/initial-utils';
import { EllipsisDirective } from './directives/ellipsis.directive';
import { AutofocusDirective } from './directives/autofocus.directive';
import { InputEventDebounceDirective } from './directives/debounce.directive';
import { ClickEventStopPropagationDirective } from './directives/stop-propagation.directive';
@NgModule({
imports: [
@ -40,6 +42,8 @@ import { AutofocusDirective } from './directives/autofocus.directive';
LocalizationPipe,
PermissionDirective,
VisibilityDirective,
InputEventDebounceDirective,
ClickEventStopPropagationDirective,
],
exports: [
CommonModule,
@ -54,7 +58,9 @@ import { AutofocusDirective } from './directives/autofocus.directive';
LocalizationPipe,
PermissionDirective,
VisibilityDirective,
InputEventDebounceDirective,
LocalizationPipe,
ClickEventStopPropagationDirective,
],
providers: [LocalizationPipe],
entryComponents: [RouterOutletComponent, DynamicLayoutComponent],

26
npm/ng-packs/packages/core/src/lib/directives/debounce.directive.ts

@ -0,0 +1,26 @@
import { Directive, Output, Renderer2, ElementRef, OnInit, EventEmitter, Input } from '@angular/core';
import { fromEvent } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
import { takeUntilDestroy } from '@ngx-validate/core';
@Directive({
selector: '[input.debounce]',
})
export class InputEventDebounceDirective implements OnInit {
@Input() debounce: number = 300;
@Output('input.debounce') debounceEvent = new EventEmitter<Event>();
constructor(private renderer: Renderer2, private el: ElementRef) {}
ngOnInit(): void {
fromEvent(this.el.nativeElement, 'input')
.pipe(
debounceTime(this.debounce),
takeUntilDestroy(this),
)
.subscribe((event: Event) => {
this.debounceEvent.emit(event);
});
}
}

21
npm/ng-packs/packages/core/src/lib/directives/stop-propagation.directive.ts

@ -0,0 +1,21 @@
import { Directive, ElementRef, EventEmitter, OnInit, Output, Renderer2 } from '@angular/core';
import { fromEvent } from 'rxjs';
import { takeUntilDestroy } from '@ngx-validate/core';
@Directive({
selector: '[click.stop]',
})
export class ClickEventStopPropagationDirective implements OnInit {
@Output('click.stop') stopPropEvent = new EventEmitter<MouseEvent>();
constructor(private renderer: Renderer2, private el: ElementRef) {}
ngOnInit(): void {
fromEvent(this.el.nativeElement, 'click')
.pipe(takeUntilDestroy(this))
.subscribe((event: MouseEvent) => {
event.stopPropagation();
this.stopPropEvent.emit(event);
});
}
}

2
npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html

@ -18,7 +18,7 @@
type="search"
class="form-control form-control-sm"
[placeholder]="'AbpUi::PagerSearch' | abpLocalization"
(input)="search$.next($event.target.value)"
(input.debounce)="onSearch($event.target.value)"
/></label>
</div>
<p-table

30
npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts

@ -1,25 +1,25 @@
import { Component, TemplateRef, ViewChild, OnInit } from '@angular/core';
import { Select, Store } from '@ngxs/store';
import { Observable, Subject } from 'rxjs';
import { ABP } from '@abp/ng.core';
import { ConfirmationService, Toaster } from '@abp/ng.theme.shared';
import { Component, TemplateRef, ViewChild } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { IdentityState } from '../../states/identity.state';
import { Identity } from '../../models/identity';
import { Select, Store } from '@ngxs/store';
import { Observable } from 'rxjs';
import { debounceTime, finalize, pluck } from 'rxjs/operators';
import {
IdentityUpdateRole,
IdentityAddRole,
IdentityDeleteRole,
IdentityGetRoleById,
IdentityGetRoles,
IdentityUpdateRole,
} from '../../actions/identity.actions';
import { pluck, debounceTime, finalize } from 'rxjs/operators';
import { ConfirmationService, Toaster } from '@abp/ng.theme.shared';
import { ABP } from '@abp/ng.core';
import { Identity } from '../../models/identity';
import { IdentityState } from '../../states/identity.state';
@Component({
selector: 'abp-roles',
templateUrl: './roles.component.html',
})
export class RolesComponent implements OnInit {
export class RolesComponent {
@Select(IdentityState.getRoles)
data$: Observable<Identity.RoleItem[]>;
@ -42,18 +42,14 @@ export class RolesComponent implements OnInit {
loading: boolean = false;
search$ = new Subject<string>();
@ViewChild('modalContent', { static: false })
modalContent: TemplateRef<any>;
constructor(private confirmationService: ConfirmationService, private fb: FormBuilder, private store: Store) {}
ngOnInit() {
this.search$.pipe(debounceTime(300)).subscribe(value => {
this.pageQuery.filter = value;
this.get();
});
onSearch(value) {
this.pageQuery.filter = value;
this.get();
}
createForm() {

2
npm/ng-packs/packages/identity/src/lib/components/users/users.component.html

@ -24,7 +24,7 @@
type="search"
class="form-control form-control-sm"
[placeholder]="'AbpUi::PagerSearch' | abpLocalization"
(input)="search$.next($event.target.value)"
(input.debounce)="onSearch($event.target.value)"
/></label>
</div>
<p-table

18
npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts

@ -1,10 +1,10 @@
import { ABP } from '@abp/ng.core';
import { ConfirmationService, Toaster } from '@abp/ng.theme.shared';
import { Component, OnInit, TemplateRef, TrackByFunction, ViewChild } from '@angular/core';
import { Component, TemplateRef, TrackByFunction, ViewChild } from '@angular/core';
import { AbstractControl, FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Select, Store } from '@ngxs/store';
import { combineLatest, Observable, Subject } from 'rxjs';
import { debounceTime, filter, map, pluck, take, finalize } from 'rxjs/operators';
import { combineLatest, Observable } from 'rxjs';
import { filter, finalize, map, pluck, take } from 'rxjs/operators';
import snq from 'snq';
import {
IdentityAddUser,
@ -20,7 +20,7 @@ import { IdentityState } from '../../states/identity.state';
selector: 'abp-users',
templateUrl: './users.component.html',
})
export class UsersComponent implements OnInit {
export class UsersComponent {
@Select(IdentityState.getUsers)
data$: Observable<Identity.UserItem[]>;
@ -50,8 +50,6 @@ export class UsersComponent implements OnInit {
loading: boolean = false;
search$ = new Subject<string>();
trackByFn: TrackByFunction<AbstractControl> = (index, item) => Object.keys(item)[0] || index;
get roleGroups(): FormGroup[] {
@ -60,11 +58,9 @@ export class UsersComponent implements OnInit {
constructor(private confirmationService: ConfirmationService, private fb: FormBuilder, private store: Store) {}
ngOnInit() {
this.search$.pipe(debounceTime(300)).subscribe(value => {
this.pageQuery.filter = value;
this.get();
});
onSearch(value) {
this.pageQuery.filter = value;
this.get();
}
buildForm() {

2
npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html

@ -27,7 +27,7 @@
type="search"
class="form-control form-control-sm"
[placeholder]="'AbpUi::PagerSearch' | abpLocalization"
(input)="search$.next($event.target.value)"
(input.debounce)="onSearch($event.target.value)"
/></label>
</div>
<p-table

14
npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts

@ -1,6 +1,6 @@
import { ABP } from '@abp/ng.core';
import { ConfirmationService, Toaster } from '@abp/ng.theme.shared';
import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
import { Component, TemplateRef, ViewChild } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Select, Store } from '@ngxs/store';
import { Observable, Subject } from 'rxjs';
@ -25,7 +25,7 @@ type SelectedModalContent = {
selector: 'abp-tenants',
templateUrl: './tenants.component.html',
})
export class TenantsComponent implements OnInit {
export class TenantsComponent {
@Select(TenantManagementState.get)
data$: Observable<ABP.BasicItem[]>;
@ -52,8 +52,6 @@ export class TenantsComponent implements OnInit {
loading: boolean = false;
search$ = new Subject<string>();
get useSharedDatabase(): boolean {
return this.defaultConnectionStringForm.get('useSharedDatabase').value;
}
@ -75,11 +73,9 @@ export class TenantsComponent implements OnInit {
private store: Store,
) {}
ngOnInit() {
this.search$.pipe(debounceTime(300)).subscribe(value => {
this.pageQuery.filter = value;
this.get();
});
onSearch(value) {
this.pageQuery.filter = value;
this.get();
}
private createTenantForm() {

3
npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.html

@ -1,5 +1,6 @@
<div
*ngIf="showModal"
(click)="onClickBackdrop()"
id="abp-modal"
tabindex="-1"
class="modal fade {{ modalClass }} d-block show"
@ -11,7 +12,7 @@
[class.modal-dialog-centered]="centered"
#abpModalContent
>
<div #content id="abp-modal-content" class="modal-content">
<div #content id="abp-modal-content" class="modal-content" (click)="$event.stopPropagation()">
<div id="abp-modal-header" class="modal-header">
<ng-container *ngTemplateOutlet="abpHeader"></ng-container>

23
npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts

@ -108,25 +108,6 @@ export class ModalComponent implements OnDestroy {
}
listen() {
fromEvent(document, 'click')
.pipe(
debounceTime(100),
takeUntil(this.destroy$),
filter((event: MouseEvent) => {
const isOpenConfirmation = this.isOpenConfirmation || document.querySelector('p-toastitem');
return (
event &&
this.closable &&
this.modalContent &&
!isOpenConfirmation &&
!this.modalContent.nativeElement.contains(event.target)
);
}),
)
.subscribe(_ => {
this.close();
});
fromEvent(document, 'keyup')
.pipe(
takeUntil(this.destroy$),
@ -175,6 +156,10 @@ export class ModalComponent implements OnDestroy {
this.visible = false;
}
}
onClickBackdrop() {
this.close();
}
}
function getFlatNodes(nodes: NodeList): HTMLElement[] {

Loading…
Cancel
Save