Browse Source

Merge pull request #6169 from abpframework/chore/6130

Removed all deprecated components, services, etc. from Angular packages
pull/6181/head
Bunyamin Coskuner 6 years ago
committed by GitHub
parent
commit
a60da4832a
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      npm/ng-packs/packages/core/src/lib/actions/index.ts
  2. 13
      npm/ng-packs/packages/core/src/lib/actions/replaceable-components.actions.ts
  3. 3
      npm/ng-packs/packages/core/src/lib/core.module.ts
  4. 4
      npm/ng-packs/packages/core/src/lib/directives/visibility.directive.ts
  5. 8
      npm/ng-packs/packages/core/src/lib/services/rest.service.ts
  6. 1
      npm/ng-packs/packages/core/src/lib/states/index.ts
  7. 74
      npm/ng-packs/packages/core/src/lib/states/replaceable-components.state.ts
  8. 59
      npm/ng-packs/packages/core/src/lib/tests/replaceable-components.state.spec.ts
  9. 17
      npm/ng-packs/packages/feature-management/src/lib/actions/feature-management.actions.ts
  10. 1
      npm/ng-packs/packages/feature-management/src/lib/actions/index.ts
  11. 12
      npm/ng-packs/packages/feature-management/src/lib/feature-management.module.ts
  12. 44
      npm/ng-packs/packages/feature-management/src/lib/models/feature-management.ts
  13. 23
      npm/ng-packs/packages/feature-management/src/lib/services/feature-management-state.service.ts
  14. 42
      npm/ng-packs/packages/feature-management/src/lib/services/feature-management.service.ts
  15. 2
      npm/ng-packs/packages/feature-management/src/lib/services/index.ts
  16. 39
      npm/ng-packs/packages/feature-management/src/lib/states/feature-management.state.ts
  17. 1
      npm/ng-packs/packages/feature-management/src/lib/states/index.ts
  18. 61
      npm/ng-packs/packages/feature-management/src/lib/tests/feature-management-state.service.spec.ts
  19. 2
      npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts
  20. 63
      npm/ng-packs/packages/identity/src/lib/models/identity.ts
  21. 150
      npm/ng-packs/packages/identity/src/lib/services/identity.service.ts
  22. 1
      npm/ng-packs/packages/identity/src/lib/services/index.ts
  23. 4
      npm/ng-packs/packages/identity/src/lib/states/identity.state.ts
  24. 7
      npm/ng-packs/packages/permission-management/src/lib/actions/permission-management.actions.ts
  25. 37
      npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts
  26. 50
      npm/ng-packs/packages/permission-management/src/lib/models/permission-management.ts
  27. 1
      npm/ng-packs/packages/permission-management/src/lib/services/index.ts
  28. 45
      npm/ng-packs/packages/permission-management/src/lib/services/permission-management.service.ts
  29. 5
      npm/ng-packs/packages/permission-management/src/lib/states/permission-management.state.ts
  30. 9
      npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts
  31. 40
      npm/ng-packs/packages/tenant-management/src/lib/models/tenant-management.ts
  32. 1
      npm/ng-packs/packages/tenant-management/src/lib/services/index.ts
  33. 111
      npm/ng-packs/packages/tenant-management/src/lib/services/tenant-management.service.ts
  34. 2
      npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts
  35. 3
      npm/ng-packs/packages/theme-shared/src/lib/directives/table-sort.directive.ts

3
npm/ng-packs/packages/core/src/lib/actions/index.ts

@ -1,5 +1,4 @@
export { SetEnvironment, GetAppConfiguration } from './config.actions';
export { GetAppConfiguration, SetEnvironment } from './config.actions';
export * from './loader.actions';
export * from './profile.actions';
export * from './replaceable-components.actions';
export * from './rest.actions';

13
npm/ng-packs/packages/core/src/lib/actions/replaceable-components.actions.ts

@ -1,13 +0,0 @@
import { ReplaceableComponents } from '../models/replaceable-components';
// tslint:disable: max-line-length
/**
* @deprecated To be deleted in v4.0. Use ReplaceableComponentsService instead. See the doc (https://docs.abp.io/en/abp/latest/UI/Angular/Component-Replacement)
*/
export class AddReplaceableComponent {
static readonly type = '[ReplaceableComponents] Add';
constructor(
public payload: ReplaceableComponents.ReplaceableComponent,
public reload?: boolean,
) {}
}

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

@ -30,7 +30,6 @@ import { SortPipe } from './pipes/sort.pipe';
import { LocaleProvider } from './providers/locale.provider';
import { LocalizationService } from './services/localization.service';
import { ProfileState } from './states/profile.state';
import { ReplaceableComponentsState } from './states/replaceable-components.state';
import { oAuthStorage } from './strategies/auth-flow.strategy';
import { coreOptionsFactory, CORE_OPTIONS } from './tokens/options.token';
import { noop } from './utils/common-utils';
@ -113,7 +112,7 @@ export class BaseCoreModule {}
imports: [
BaseCoreModule,
LocalizationModule,
NgxsModule.forFeature([ReplaceableComponentsState, ProfileState]),
NgxsModule.forFeature([ProfileState]),
NgxsRouterPluginModule.forRoot(),
OAuthModule.forRoot(),
HttpClientXsrfModule.withOptions({

4
npm/ng-packs/packages/core/src/lib/directives/visibility.directive.ts

@ -1,10 +1,10 @@
import { Directive, Input, Optional, ElementRef, Renderer2, AfterViewInit } from '@angular/core';
import { AfterViewInit, Directive, ElementRef, Input, Optional, Renderer2 } from '@angular/core';
import { Subject } from 'rxjs';
import snq from 'snq';
/**
*
* @deprecated To be deleted in v3.3
* @deprecated To be deleted in v5.0
*/
@Directive({
selector: '[abpVisibility]',

8
npm/ng-packs/packages/core/src/lib/services/rest.service.ts

@ -1,13 +1,13 @@
import { HttpClient, HttpRequest } from '@angular/common/http';
import { Injectable, Inject } from '@angular/core';
import { Inject, Injectable } from '@angular/core';
import { Store } from '@ngxs/store';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { RestOccurError } from '../actions/rest.actions';
import { Rest } from '../models/rest';
import { isUndefinedOrEmptyString } from '../utils/common-utils';
import { ABP } from '../models/common';
import { Rest } from '../models/rest';
import { CORE_OPTIONS } from '../tokens/options.token';
import { isUndefinedOrEmptyString } from '../utils/common-utils';
import { EnvironmentService } from './environment.service';
@Injectable({
@ -30,7 +30,7 @@ export class RestService {
return throwError(err);
}
// TODO: Deprecate service or improve interface in v3.0
// TODO: Deprecate service or improve interface in v5.0
request<T, R>(
request: HttpRequest<T> | Rest.Request<T>,
config?: Rest.Config,

1
npm/ng-packs/packages/core/src/lib/states/index.ts

@ -1,3 +1,2 @@
export * from './replaceable-components.state';
export * from './config.state';
export * from './profile.state';

74
npm/ng-packs/packages/core/src/lib/states/replaceable-components.state.ts

@ -1,74 +0,0 @@
import { Injectable, isDevMode } from '@angular/core';
import { Action, createSelector, Selector, State, StateContext } from '@ngxs/store';
import snq from 'snq';
import { AddReplaceableComponent } from '../actions/replaceable-components.actions';
import { ReplaceableComponents } from '../models/replaceable-components';
import { ReplaceableComponentsService } from '../services/replaceable-components.service';
function logDeprecationMsg() {
if (isDevMode()) {
console.warn(`
ReplacableComponentsState has been deprecated. Use ReplaceableComponentsService instead.
See the doc https://docs.abp.io/en/abp/latest/UI/Angular/Component-Replacement
`);
}
}
// tslint:disable: max-line-length
/**
* @deprecated To be deleted in v4.0. Use ReplaceableComponentsService instead. See the doc (https://docs.abp.io/en/abp/latest/UI/Angular/Component-Replacement)
*/
@State<ReplaceableComponents.State>({
name: 'ReplaceableComponentsState',
defaults: { replaceableComponents: [] } as ReplaceableComponents.State,
})
@Injectable()
export class ReplaceableComponentsState {
@Selector()
static getAll({
replaceableComponents,
}: ReplaceableComponents.State): ReplaceableComponents.ReplaceableComponent[] {
logDeprecationMsg();
return replaceableComponents || [];
}
static getComponent(key: string) {
const selector = createSelector(
[ReplaceableComponentsState],
(state: ReplaceableComponents.State): ReplaceableComponents.ReplaceableComponent => {
logDeprecationMsg();
return snq(() => state.replaceableComponents.find(component => component.key === key));
},
);
return selector;
}
constructor(private service: ReplaceableComponentsService) {}
@Action(AddReplaceableComponent)
replaceableComponentsAction(
{ getState, patchState }: StateContext<ReplaceableComponents.State>,
{ payload, reload }: AddReplaceableComponent,
) {
logDeprecationMsg();
let { replaceableComponents } = getState();
const index = snq(
() => replaceableComponents.findIndex(component => component.key === payload.key),
-1,
);
if (index > -1) {
replaceableComponents[index] = payload;
} else {
replaceableComponents = [...replaceableComponents, payload];
}
patchState({
replaceableComponents,
});
this.service.add(payload, reload);
}
}

59
npm/ng-packs/packages/core/src/lib/tests/replaceable-components.state.spec.ts

@ -1,59 +0,0 @@
import { APP_BASE_HREF } from '@angular/common';
import { Component } from '@angular/core';
import { Router, RouterModule } from '@angular/router';
import { SpyObject } from '@ngneat/spectator';
import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest';
import { NgxsModule, Store } from '@ngxs/store';
import { AddReplaceableComponent } from '../actions';
import { ReplaceableComponentsState } from '../states/replaceable-components.state';
@Component({ selector: 'abp-dummy', template: 'dummy works' })
class DummyComponent {}
describe('ReplaceableComponentsState', () => {
let spectator: SpectatorHost<DummyComponent>;
let router: SpyObject<Router>;
const createHost = createHostFactory({
component: DummyComponent,
providers: [{ provide: APP_BASE_HREF, useValue: '/' }],
imports: [RouterModule.forRoot([]), NgxsModule.forRoot([ReplaceableComponentsState])],
});
beforeEach(() => {
spectator = createHost('<abp-dummy></abp-dummy>');
router = spectator.inject(Router);
});
it('should add a component to the state', () => {
const store = spectator.inject(Store);
expect(store.selectSnapshot(ReplaceableComponentsState.getAll)).toEqual([]);
store.dispatch(new AddReplaceableComponent({ component: DummyComponent, key: 'Dummy' }));
expect(store.selectSnapshot(ReplaceableComponentsState.getComponent('Dummy'))).toEqual({
component: DummyComponent,
key: 'Dummy',
});
});
it('should replace a exist component', () => {
const store = spectator.inject(Store);
store.dispatch(new AddReplaceableComponent({ component: DummyComponent, key: 'Dummy' }));
store.dispatch(new AddReplaceableComponent({ component: null, key: 'Dummy' }));
expect(store.selectSnapshot(ReplaceableComponentsState.getComponent('Dummy'))).toEqual({
component: null,
key: 'Dummy',
});
expect(store.selectSnapshot(ReplaceableComponentsState.getAll)).toHaveLength(1);
});
it('should call reloadRoute when reload parameter is given as true to AddReplaceableComponent', async () => {
const spy = jest.spyOn(router, 'navigateByUrl');
const store = spectator.inject(Store);
store.dispatch(new AddReplaceableComponent({ component: DummyComponent, key: 'Dummy' }));
store.dispatch(new AddReplaceableComponent({ component: null, key: 'Dummy' }, true));
await spectator.fixture.whenStable();
expect(spy).toHaveBeenCalledTimes(1);
expect(spy).toHaveBeenCalledWith(router.url);
});
});

17
npm/ng-packs/packages/feature-management/src/lib/actions/feature-management.actions.ts

@ -1,17 +0,0 @@
import { FeatureManagement } from '../models';
/**
* @deprecated To be deleted in v4.0.
*/
export class GetFeatures {
static readonly type = '[FeatureManagement] Get Features';
constructor(public payload: FeatureManagement.Provider) {}
}
/**
* @deprecated To be deleted in v4.0.
*/
export class UpdateFeatures {
static readonly type = '[FeatureManagement] Update Features';
constructor(public payload: FeatureManagement.Provider & FeatureManagement.Features) {}
}

1
npm/ng-packs/packages/feature-management/src/lib/actions/index.ts

@ -1 +0,0 @@
export * from './feature-management.actions';

12
npm/ng-packs/packages/feature-management/src/lib/feature-management.module.ts

@ -1,22 +1,16 @@
import { CoreModule } from '@abp/ng.core';
import { ThemeSharedModule } from '@abp/ng.theme.shared';
import { NgModule } from '@angular/core';
import { NgxsModule } from '@ngxs/store';
import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap';
import { FreeTextInputDirective } from './directives/free-text-input.directive';
import { NgxsModule } from '@ngxs/store';
import { FeatureManagementComponent } from './components/feature-management/feature-management.component';
import { FeatureManagementState } from './states/feature-management.state';
import { FreeTextInputDirective } from './directives/free-text-input.directive';
const exported = [FeatureManagementComponent, FreeTextInputDirective];
@NgModule({
declarations: [...exported],
imports: [
CoreModule,
ThemeSharedModule,
NgbNavModule,
NgxsModule.forFeature([FeatureManagementState]),
],
imports: [CoreModule, ThemeSharedModule, NgbNavModule, NgxsModule.forFeature([])],
exports: [...exported],
})
export class FeatureManagementModule {}

44
npm/ng-packs/packages/feature-management/src/lib/models/feature-management.ts

@ -1,50 +1,6 @@
import { EventEmitter } from '@angular/core';
export namespace FeatureManagement {
/**
* @deprecated To be deleted in v4.0.
*/
export interface State {
features: Feature[];
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface ValueType {
name: string;
properties: object;
validator: object;
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface Feature {
name: string;
displayName: string;
value: string;
description?: string;
valueType?: ValueType;
depth?: number;
parentName?: string;
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface Features {
features: Feature[];
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface Provider {
providerName: string;
providerKey: string;
}
export interface FeatureManagementComponentInputs {
visible: boolean;
readonly providerName: string;

23
npm/ng-packs/packages/feature-management/src/lib/services/feature-management-state.service.ts

@ -1,23 +0,0 @@
import { Injectable } from '@angular/core';
import { Store } from '@ngxs/store';
import { GetFeatures, UpdateFeatures } from '../actions/feature-management.actions';
import { FeatureManagementState } from '../states/feature-management.state';
@Injectable({
providedIn: 'root',
})
export class FeatureManagementStateService {
constructor(private store: Store) {}
getFeatures() {
return this.store.selectSnapshot(FeatureManagementState.getFeatures);
}
dispatchGetFeatures(...args: ConstructorParameters<typeof GetFeatures>) {
return this.store.dispatch(new GetFeatures(...args));
}
dispatchUpdateFeatures(...args: ConstructorParameters<typeof UpdateFeatures>) {
return this.store.dispatch(new UpdateFeatures(...args));
}
}

42
npm/ng-packs/packages/feature-management/src/lib/services/feature-management.service.ts

@ -1,42 +0,0 @@
import { Injectable } from '@angular/core';
import { RestService, Rest } from '@abp/ng.core';
import { Store } from '@ngxs/store';
import { Observable } from 'rxjs';
import { FeatureManagement } from '../models';
@Injectable({
providedIn: 'root',
})
/**
* @deprecated Use FeaturesService instead. To be deleted in v4.0.
*/
export class FeatureManagementService {
apiName = 'FeatureManagement';
constructor(private rest: RestService, private store: Store) {}
getFeatures(params: FeatureManagement.Provider): Observable<FeatureManagement.Features> {
const request: Rest.Request<null> = {
method: 'GET',
url: '/api/feature-management/features',
params,
};
return this.rest.request<FeatureManagement.Provider, FeatureManagement.Features>(request, {
apiName: this.apiName,
});
}
updateFeatures({
features,
providerKey,
providerName,
}: FeatureManagement.Provider & FeatureManagement.Features): Observable<null> {
const request: Rest.Request<FeatureManagement.Features> = {
method: 'PUT',
url: '/api/feature-management/features',
body: { features },
params: { providerKey, providerName },
};
return this.rest.request<FeatureManagement.Features, null>(request, { apiName: this.apiName });
}
}

2
npm/ng-packs/packages/feature-management/src/lib/services/index.ts

@ -1,2 +0,0 @@
export * from './feature-management.service';
export * from './feature-management-state.service';

39
npm/ng-packs/packages/feature-management/src/lib/states/feature-management.state.ts

@ -1,39 +0,0 @@
import { Action, Selector, State, StateContext } from '@ngxs/store';
import { tap } from 'rxjs/operators';
import { GetFeatures, UpdateFeatures } from '../actions/feature-management.actions';
import { FeatureManagement } from '../models/feature-management';
import { FeatureManagementService } from '../services/feature-management.service';
import { Injectable } from '@angular/core';
/**
* @deprecated To be deleted in v4.0.
*/
@State<FeatureManagement.State>({
name: 'FeatureManagementState',
defaults: { features: {} } as FeatureManagement.State,
})
@Injectable()
export class FeatureManagementState {
@Selector()
static getFeatures({ features }: FeatureManagement.State) {
return features || [];
}
constructor(private featureManagementService: FeatureManagementService) {}
@Action(GetFeatures)
getFeatures({ patchState }: StateContext<FeatureManagement.State>, { payload }: GetFeatures) {
return this.featureManagementService.getFeatures(payload).pipe(
tap(({ features = [] }) =>
patchState({
features,
}),
),
);
}
@Action(UpdateFeatures)
updateFeatures(_, { payload }: UpdateFeatures) {
return this.featureManagementService.updateFeatures(payload);
}
}

1
npm/ng-packs/packages/feature-management/src/lib/states/index.ts

@ -1 +0,0 @@
export * from './feature-management.state';

61
npm/ng-packs/packages/feature-management/src/lib/tests/feature-management-state.service.spec.ts

@ -1,61 +0,0 @@
import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest';
import { Store } from '@ngxs/store';
import { FeatureManagementStateService } from '../services/feature-management-state.service';
import { FeatureManagementState } from '../states';
import * as FeatureManagementActions from '../actions';
describe('FeatureManagementStateService', () => {
let service: FeatureManagementStateService;
let spectator: SpectatorService<FeatureManagementStateService>;
let store: SpyObject<Store>;
const createService = createServiceFactory({
service: FeatureManagementStateService,
mocks: [Store],
});
beforeEach(() => {
spectator = createService();
service = spectator.service;
store = spectator.inject(Store);
});
test('should have the all FeatureManagementState static methods', () => {
const reg = /(?<=static )(.*)(?=\()/gm;
FeatureManagementState.toString()
.match(reg)
.forEach(fnName => {
expect(service[fnName]).toBeTruthy();
const spy = jest.spyOn(store, 'selectSnapshot');
spy.mockClear();
const isDynamicSelector = FeatureManagementState[fnName].name !== 'memoized';
if (isDynamicSelector) {
FeatureManagementState[fnName] = jest.fn((...args) => args);
service[fnName]('test', 0, {});
expect(FeatureManagementState[fnName]).toHaveBeenCalledWith('test', 0, {});
} else {
service[fnName]();
expect(spy).toHaveBeenCalledWith(FeatureManagementState[fnName]);
}
});
});
test('should have a dispatch method for every FeatureManagementState action', () => {
const reg = /(?<=dispatch)(\w+)(?=\()/gm;
FeatureManagementStateService.toString()
.match(reg)
.forEach(fnName => {
expect(FeatureManagementActions[fnName]).toBeTruthy();
const spy = jest.spyOn(store, 'dispatch');
spy.mockClear();
const params = Array.from(new Array(FeatureManagementActions[fnName].length));
service[`dispatch${fnName}`](...params);
expect(spy).toHaveBeenCalledWith(new FeatureManagementActions[fnName](...params));
});
});
});

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

@ -36,7 +36,6 @@ import {
IdentityRoleDto,
IdentityUserDto,
} from '../../proxy/identity/models';
import { IdentityService } from '../../services/identity.service';
import { IdentityState } from '../../states/identity.state';
@Component({
@ -88,7 +87,6 @@ export class UsersComponent implements OnInit {
private confirmationService: ConfirmationService,
private fb: FormBuilder,
private store: Store,
private identityService: IdentityService,
private identityUserService: IdentityUserService,
) {}

63
npm/ng-packs/packages/identity/src/lib/models/identity.ts

@ -1,4 +1,4 @@
import { ABP, PagedResultDto } from '@abp/ng.core';
import { PagedResultDto } from '@abp/ng.core';
import { IdentityRoleDto, IdentityUserDto } from '../proxy/identity/models';
export namespace Identity {
@ -9,65 +9,4 @@ export namespace Identity {
selectedUser: IdentityUserDto;
selectedUserRoles: IdentityRoleDto[];
}
/**
* @deprecated To be deleted in v4.0.
*/
export type RoleResponse = ABP.PagedResponse<RoleItem>;
/**
* @deprecated To be deleted in v4.0.
*/
export interface RoleSaveRequest {
name: string;
isDefault: boolean;
isPublic: boolean;
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface RoleItem extends RoleSaveRequest {
isStatic: boolean;
concurrencyStamp: string;
id: string;
}
/**
* @deprecated To be deleted in v4.0.
*/
export type UserResponse = ABP.PagedResponse<UserItem>;
/**
* @deprecated To be deleted in v4.0.
*/
export interface UserItem extends User {
tenantId: string;
emailConfirmed: boolean;
phoneNumberConfirmed: boolean;
isLockedOut: boolean;
concurrencyStamp: string;
id: string;
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface User {
userName: string;
name: string;
surname: string;
email: string;
phoneNumber: string;
twoFactorEnabled: true;
lockoutEnabled: true;
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface UserSaveRequest extends User {
password: string;
roleNames: string[];
}
}

150
npm/ng-packs/packages/identity/src/lib/services/identity.service.ts

@ -1,150 +0,0 @@
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { RestService, Rest, ABP } from '@abp/ng.core';
import { Identity } from '../models/identity';
@Injectable({
providedIn: 'root',
})
export class IdentityService {
apiName = 'AbpIdentity';
constructor(private rest: RestService) {}
getRoles(params = {} as ABP.PageQueryParams): Observable<Identity.RoleResponse> {
const request: Rest.Request<null> = {
method: 'GET',
url: '/api/identity/roles',
params,
};
return this.rest.request<null, Identity.RoleResponse>(request, { apiName: this.apiName });
}
getAllRoles(): Observable<Identity.RoleResponse> {
const request: Rest.Request<null> = {
method: 'GET',
url: '/api/identity/roles/all',
};
return this.rest.request<null, Identity.RoleResponse>(request, { apiName: this.apiName });
}
getRoleById(id: string): Observable<Identity.RoleItem> {
const request: Rest.Request<null> = {
method: 'GET',
url: `/api/identity/roles/${id}`,
};
return this.rest.request<null, Identity.RoleItem>(request, { apiName: this.apiName });
}
deleteRole(id: string): Observable<Identity.RoleItem> {
const request: Rest.Request<null> = {
method: 'DELETE',
url: `/api/identity/roles/${id}`,
};
return this.rest.request<null, Identity.RoleItem>(request, { apiName: this.apiName });
}
createRole(body: Identity.RoleSaveRequest): Observable<Identity.RoleItem> {
const request: Rest.Request<Identity.RoleSaveRequest> = {
method: 'POST',
url: '/api/identity/roles',
body,
};
return this.rest.request<Identity.RoleSaveRequest, Identity.RoleItem>(request, {
apiName: this.apiName,
});
}
updateRole(body: Identity.RoleItem): Observable<Identity.RoleItem> {
const url = `/api/identity/roles/${body.id}`;
delete body.id;
const request: Rest.Request<Identity.RoleItem> = {
method: 'PUT',
url,
body,
};
return this.rest.request<Identity.RoleItem, Identity.RoleItem>(request, {
apiName: this.apiName,
});
}
getUsers(params = {} as ABP.PageQueryParams): Observable<Identity.UserResponse> {
const request: Rest.Request<null> = {
method: 'GET',
url: '/api/identity/users',
params,
};
return this.rest.request<null, Identity.UserResponse>(request, { apiName: this.apiName });
}
getUserById(id: string): Observable<Identity.UserItem> {
const request: Rest.Request<null> = {
method: 'GET',
url: `/api/identity/users/${id}`,
};
return this.rest.request<null, Identity.UserItem>(request, { apiName: this.apiName });
}
getUserRoles(id: string): Observable<Identity.RoleResponse> {
const request: Rest.Request<null> = {
method: 'GET',
url: `/api/identity/users/${id}/roles`,
};
return this.rest.request<null, Identity.RoleResponse>(request, { apiName: this.apiName });
}
getUserAssingableRoles(): Observable<Identity.RoleResponse> {
const request: Rest.Request<null> = {
method: 'GET',
url: '/api/identity/users/assignable-roles',
};
return this.rest.request<null, Identity.RoleResponse>(request, { apiName: this.apiName });
}
deleteUser(id: string): Observable<null> {
const request: Rest.Request<null> = {
method: 'DELETE',
url: `/api/identity/users/${id}`,
};
return this.rest.request<null, null>(request, { apiName: this.apiName });
}
createUser(body: Identity.UserSaveRequest): Observable<Identity.UserItem> {
const request: Rest.Request<Identity.UserSaveRequest> = {
method: 'POST',
url: '/api/identity/users',
body,
};
return this.rest.request<Identity.UserSaveRequest, Identity.UserItem>(request, {
apiName: this.apiName,
});
}
updateUser(body: Identity.UserItem): Observable<Identity.UserItem> {
const url = `/api/identity/users/${body.id}`;
delete body.id;
const request: Rest.Request<Identity.UserItem> = {
method: 'PUT',
url,
body,
};
return this.rest.request<Identity.UserItem, Identity.UserItem>(request, {
apiName: this.apiName,
});
}
}

1
npm/ng-packs/packages/identity/src/lib/services/index.ts

@ -1,2 +1 @@
export * from './identity.service';
export * from './identity-state.service';

4
npm/ng-packs/packages/identity/src/lib/states/identity.state.ts

@ -17,7 +17,7 @@ import {
import { Identity } from '../models/identity';
import { IdentityRoleService } from '../proxy/identity/identity-role.service';
import { IdentityUserService } from '../proxy/identity/identity-user.service';
import { IdentityUserDto } from '../proxy/identity/models';
import { IdentityRoleDto, IdentityUserDto } from '../proxy/identity/models';
@State<Identity.State>({
name: 'IdentityState',
@ -26,7 +26,7 @@ import { IdentityUserDto } from '../proxy/identity/models';
@Injectable()
export class IdentityState {
@Selector()
static getRoles({ roles }: Identity.State): Identity.RoleItem[] {
static getRoles({ roles }: Identity.State): IdentityRoleDto[] {
return roles.items || [];
}

7
npm/ng-packs/packages/permission-management/src/lib/actions/permission-management.actions.ts

@ -1,12 +1,11 @@
import { PermissionManagement } from '../models/permission-management';
import { UpdatePermissionsDto } from '../proxy/models';
import { ProviderInfoDto, UpdatePermissionsDto } from '../proxy/models';
export class GetPermissions {
static readonly type = '[PermissionManagement] Get Permissions';
constructor(public payload: PermissionManagement.GrantedProvider) {}
constructor(public payload: ProviderInfoDto) {}
}
export class UpdatePermissions {
static readonly type = '[PermissionManagement] Update Permissions';
constructor(public payload: PermissionManagement.GrantedProvider & UpdatePermissionsDto) {}
constructor(public payload: ProviderInfoDto & UpdatePermissionsDto) {}
}

37
npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts

@ -4,16 +4,22 @@ import {
ConfigStateService,
} from '@abp/ng.core';
import { LocaleDirection } from '@abp/ng.theme.shared';
import { Component, EventEmitter, Input, Output, Renderer2, TrackByFunction } from '@angular/core';
import { Component, EventEmitter, Input, Output, TrackByFunction } from '@angular/core';
import { Select, Store } from '@ngxs/store';
import { Observable, of } from 'rxjs';
import { finalize, map, pluck, switchMap, take, tap } from 'rxjs/operators';
import { GetPermissions, UpdatePermissions } from '../actions/permission-management.actions';
import { PermissionManagement } from '../models/permission-management';
import { UpdatePermissionDto } from '../proxy/models';
import {
GetPermissionListResultDto,
PermissionGrantInfoDto,
PermissionGroupDto,
ProviderInfoDto,
UpdatePermissionDto,
} from '../proxy/models';
import { PermissionManagementState } from '../states/permission-management.state';
type PermissionWithStyle = PermissionManagement.Permission & {
type PermissionWithStyle = PermissionGrantInfoDto & {
style: string;
};
@ -68,14 +74,14 @@ export class PermissionManagementComponent
@Output() readonly visibleChange = new EventEmitter<boolean>();
@Select(PermissionManagementState.getPermissionGroups)
groups$: Observable<PermissionManagement.Group[]>;
groups$: Observable<PermissionGroupDto[]>;
@Select(PermissionManagementState.getEntityDisplayName)
entityName$: Observable<string>;
selectedGroup: PermissionManagement.Group;
selectedGroup: PermissionGroupDto;
permissions: PermissionManagement.Permission[] = [];
permissions: PermissionGrantInfoDto[] = [];
selectThisTab = false;
@ -83,7 +89,7 @@ export class PermissionManagementComponent
modalBusy = false;
trackByFn: TrackByFunction<PermissionManagement.Group> = (_, item) => item.name;
trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;
get selectedGroupPermissions$(): Observable<PermissionWithStyle[]> {
const margin = `margin-${
@ -96,7 +102,7 @@ export class PermissionManagementComponent
? groups.find(group => group.name === this.selectedGroup.name).permissions
: [],
),
map<PermissionManagement.Permission[], PermissionWithStyle[]>(permissions =>
map<PermissionGrantInfoDto[], PermissionWithStyle[]>(permissions =>
permissions.map(
permission =>
(({
@ -119,14 +125,14 @@ export class PermissionManagementComponent
return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;
}
isGrantedByOtherProviderName(grantedProviders: PermissionManagement.GrantedProvider[]): boolean {
isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {
if (grantedProviders.length) {
return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;
}
return false;
}
onClickCheckbox(clickedPermission: PermissionManagement.Permission, value) {
onClickCheckbox(clickedPermission: PermissionGrantInfoDto, value) {
if (
clickedPermission.isGranted &&
this.isGrantedByOtherProviderName(clickedPermission.grantedProviders)
@ -212,7 +218,7 @@ export class PermissionManagementComponent
this.selectThisTab = !this.selectAllTab;
}
onChangeGroup(group: PermissionManagement.Group) {
onChangeGroup(group: PermissionGroupDto) {
this.selectedGroup = group;
this.setTabCheckboxState();
}
@ -274,7 +280,7 @@ export class PermissionManagementComponent
)
.pipe(
pluck('PermissionManagementState', 'permissionRes'),
tap((permissionRes: PermissionManagement.Response) => {
tap((permissionRes: GetPermissionListResultDto) => {
this.selectedGroup = permissionRes.groups[0];
this.permissions = getPermissions(permissionRes.groups);
}),
@ -306,10 +312,7 @@ export class PermissionManagementComponent
}
}
function findMargin(
permissions: PermissionManagement.Permission[],
permission: PermissionManagement.Permission,
) {
function findMargin(permissions: PermissionGrantInfoDto[], permission: PermissionGrantInfoDto) {
const parentPermission = permissions.find(per => per.name === permission.parentName);
if (parentPermission && parentPermission.parentName) {
@ -320,6 +323,6 @@ function findMargin(
return parentPermission ? 20 : 0;
}
function getPermissions(groups: PermissionManagement.Group[]): PermissionManagement.Permission[] {
function getPermissions(groups: PermissionGroupDto[]): PermissionGrantInfoDto[] {
return groups.reduce((acc, val) => [...acc, ...val.permissions], []);
}

50
npm/ng-packs/packages/permission-management/src/lib/models/permission-management.ts

@ -1,55 +1,9 @@
import { EventEmitter } from '@angular/core';
import { GetPermissionListResultDto } from '../proxy/models';
export namespace PermissionManagement {
export interface State {
permissionRes: Response;
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface Response {
entityDisplayName: string;
groups: Group[];
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface Group {
name: string;
displayName: string;
permissions: Permission[];
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface MinimumPermission {
name: string;
isGranted: boolean;
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface Permission extends MinimumPermission {
displayName: string;
parentName: string;
allowedProviders: string[];
grantedProviders: GrantedProvider[];
}
export interface GrantedProvider {
providerName: string;
providerKey: string;
}
/**
* @deprecated To be deleted in v4.0.
*/
export interface UpdateRequest {
permissions: MinimumPermission[];
permissionRes: GetPermissionListResultDto;
}
export interface PermissionManagementComponentInputs {

1
npm/ng-packs/packages/permission-management/src/lib/services/index.ts

@ -1,2 +1 @@
export * from './permission-management.service';
export * from './permission-management-state.service';

45
npm/ng-packs/packages/permission-management/src/lib/services/permission-management.service.ts

@ -1,45 +0,0 @@
import { Injectable } from '@angular/core';
import { RestService, Rest } from '@abp/ng.core';
import { Observable } from 'rxjs';
import { PermissionManagement } from '../models/permission-management';
@Injectable({
providedIn: 'root',
})
export class PermissionManagementService {
apiName = 'AbpPermissionManagement';
constructor(private rest: RestService) {}
getPermissions(
params: PermissionManagement.GrantedProvider,
): Observable<PermissionManagement.Response> {
const request: Rest.Request<PermissionManagement.GrantedProvider> = {
method: 'GET',
url: '/api/permission-management/permissions',
params,
};
return this.rest.request<PermissionManagement.GrantedProvider, PermissionManagement.Response>(
request,
{ apiName: this.apiName },
);
}
updatePermissions({
permissions,
providerKey,
providerName,
}: PermissionManagement.GrantedProvider & PermissionManagement.UpdateRequest): Observable<null> {
const request: Rest.Request<PermissionManagement.UpdateRequest> = {
method: 'PUT',
url: '/api/permission-management/permissions',
body: { permissions },
params: { providerKey, providerName },
};
return this.rest.request<PermissionManagement.UpdateRequest, null>(request, {
apiName: this.apiName,
});
}
}

5
npm/ng-packs/packages/permission-management/src/lib/states/permission-management.state.ts

@ -3,6 +3,7 @@ import { Action, Selector, State, StateContext } from '@ngxs/store';
import { tap } from 'rxjs/operators';
import { GetPermissions, UpdatePermissions } from '../actions/permission-management.actions';
import { PermissionManagement } from '../models/permission-management';
import { ProviderInfoDto } from '../proxy/models';
import { PermissionsService } from '../proxy/permissions.service';
@State<PermissionManagement.State>({
@ -26,9 +27,7 @@ export class PermissionManagementState {
@Action(GetPermissions)
permissionManagementGet(
{ patchState }: StateContext<PermissionManagement.State>,
{
payload: { providerKey, providerName } = {} as PermissionManagement.GrantedProvider,
}: GetPermissions,
{ payload: { providerKey, providerName } = {} as ProviderInfoDto }: GetPermissions,
) {
return this.service.get(providerName, providerKey).pipe(
tap(permissionResponse =>

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

@ -14,7 +14,7 @@ import {
UpdateTenant,
} from '../../actions/tenant-management.actions';
import { GetTenantsInput, TenantDto } from '../../proxy/models';
import { TenantManagementService } from '../../services/tenant-management.service';
import { TenantService } from '../../proxy/tenant.service';
import { TenantManagementState } from '../../states/tenant-management.state';
interface SelectedModalContent {
@ -103,7 +103,7 @@ export class TenantsComponent implements OnInit {
public readonly list: ListService<GetTenantsInput>,
private injector: Injector,
private confirmationService: ConfirmationService,
private tenantService: TenantManagementService,
private tenantService: TenantService,
private fb: FormBuilder,
private store: Store,
) {}
@ -206,10 +206,7 @@ export class TenantsComponent implements OnInit {
});
} else {
this.tenantService
.updateDefaultConnectionString({
id: this.selected.id,
defaultConnectionString: this.connectionString,
})
.updateDefaultConnectionString(this.selected.id, this.connectionString)
.pipe(
take(1),
finalize(() => (this.modalBusy = false)),

40
npm/ng-packs/packages/tenant-management/src/lib/models/tenant-management.ts

@ -1,4 +1,4 @@
import { ABP, PagedResultDto } from '@abp/ng.core';
import { PagedResultDto } from '@abp/ng.core';
import { TenantDto } from '../proxy/models';
export namespace TenantManagement {
@ -6,42 +6,4 @@ export namespace TenantManagement {
result: PagedResultDto<TenantDto>;
selectedItem: TenantDto;
}
/**
* @deprecated To be deleted in v4.0
*/
export type Response = ABP.PagedResponse<Item>;
/**
* @deprecated To be deleted in v4.0
*/
export interface Item {
id: string;
name: string;
}
/**
* @deprecated To be deleted in v4.0
*/
export interface AddRequest {
adminEmailAddress: string;
adminPassword: string;
name: string;
}
/**
* @deprecated To be deleted in v4.0
*/
export interface UpdateRequest {
id: string;
name: string;
}
/**
* @deprecated To be deleted in v4.0
*/
export interface DefaultConnectionStringRequest {
id: string;
defaultConnectionString: string;
}
}

1
npm/ng-packs/packages/tenant-management/src/lib/services/index.ts

@ -1,2 +1 @@
export * from './tenant-management.service';
export * from './tenant-management-state.service';

111
npm/ng-packs/packages/tenant-management/src/lib/services/tenant-management.service.ts

@ -1,111 +0,0 @@
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { RestService, Rest, ABP } from '@abp/ng.core';
import { TenantManagement } from '../models/tenant-management';
@Injectable({
providedIn: 'root',
})
/**
* @deprecated Use TenantService instead. To be deleted in v4.0.
*/
export class TenantManagementService {
apiName = 'AbpTenantManagement';
constructor(private rest: RestService) {}
getTenant(params = {} as ABP.PageQueryParams): Observable<TenantManagement.Response> {
const request: Rest.Request<null> = {
method: 'GET',
url: '/api/multi-tenancy/tenants',
params,
};
return this.rest.request<null, TenantManagement.Response>(request, { apiName: this.apiName });
}
getTenantById(id: string): Observable<ABP.BasicItem> {
const request: Rest.Request<null> = {
method: 'GET',
url: `/api/multi-tenancy/tenants/${id}`,
};
return this.rest.request<null, ABP.BasicItem>(request, { apiName: this.apiName });
}
deleteTenant(id: string): Observable<null> {
const request: Rest.Request<null> = {
method: 'DELETE',
url: `/api/multi-tenancy/tenants/${id}`,
};
return this.rest.request<null, null>(request, { apiName: this.apiName });
}
createTenant(body: TenantManagement.AddRequest): Observable<ABP.BasicItem> {
const request: Rest.Request<TenantManagement.AddRequest> = {
method: 'POST',
url: '/api/multi-tenancy/tenants',
body,
};
return this.rest.request<TenantManagement.AddRequest, ABP.BasicItem>(request, {
apiName: this.apiName,
});
}
updateTenant(body: TenantManagement.UpdateRequest): Observable<ABP.BasicItem> {
const url = `/api/multi-tenancy/tenants/${body.id}`;
delete body.id;
const request: Rest.Request<TenantManagement.UpdateRequest> = {
method: 'PUT',
url,
body,
};
return this.rest.request<TenantManagement.UpdateRequest, ABP.BasicItem>(request, {
apiName: this.apiName,
});
}
getDefaultConnectionString(id: string): Observable<string> {
const url = `/api/multi-tenancy/tenants/${id}/default-connection-string`;
const request: Rest.Request<TenantManagement.DefaultConnectionStringRequest> = {
method: 'GET',
responseType: Rest.ResponseType.Text,
url,
};
return this.rest.request<TenantManagement.DefaultConnectionStringRequest, string>(request, {
apiName: this.apiName,
});
}
updateDefaultConnectionString(
payload: TenantManagement.DefaultConnectionStringRequest,
): Observable<any> {
const url = `/api/multi-tenancy/tenants/${payload.id}/default-connection-string`;
const request: Rest.Request<TenantManagement.DefaultConnectionStringRequest> = {
method: 'PUT',
url,
params: { defaultConnectionString: payload.defaultConnectionString },
};
return this.rest.request<TenantManagement.DefaultConnectionStringRequest, any>(request, {
apiName: this.apiName,
});
}
deleteDefaultConnectionString(id: string): Observable<string> {
const url = `/api/multi-tenancy/tenants/${id}/default-connection-string`;
const request: Rest.Request<TenantManagement.DefaultConnectionStringRequest> = {
method: 'DELETE',
url,
};
return this.rest.request<TenantManagement.DefaultConnectionStringRequest, any>(request, {
apiName: this.apiName,
});
}
}

2
npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts

@ -13,7 +13,7 @@ import {
/**
*
* @deprecated use ngx-datatale instead.
* @deprecated To be deleted in v5.0. Use ngx-datatale instead.
*/
@Component({
selector: 'abp-table',

3
npm/ng-packs/packages/theme-shared/src/lib/directives/table-sort.directive.ts

@ -18,10 +18,9 @@ export interface TableSortOptions {
order: SortOrder;
}
/**
*
* @deprecated To be deleted in v3.3
* @deprecated To be deleted in v5.0
*/
@Directive({
selector: '[abpTableSort]',

Loading…
Cancel
Save