Skip to content

Commit 38a19e8

Browse files
committed
feat: added user lastbranchoffice
1 parent 789e800 commit 38a19e8

26 files changed

+351
-24
lines changed

package.json

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
{
22
"name": "craftsjs",
3-
"version": "0.0.0",
3+
"version": "0.0.1",
4+
"author": "craftsjs",
5+
"description": "Boilerplate",
6+
"license": "MIT",
7+
"homepage": "https://github.com/addapptables/angular-boilerplate",
48
"scripts": {
59
"ng": "ng",
610
"start": "ng serve",
@@ -13,7 +17,7 @@
1317
"add:lib": "ng generate library",
1418
"postinstall": "ngcc --properties es5 browser module main --first-only --create-ivy-entry-points && ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points"
1519
},
16-
"private": true,
20+
"private": false,
1721
"dependencies": {
1822
"@angular/animations": "^9.1.0",
1923
"@angular/cdk": "^9.2.0",
@@ -66,5 +70,22 @@
6670
"ts-node": "~8.3.0",
6771
"tslint": "~5.18.0",
6872
"typescript": "3.8.3"
69-
}
73+
},
74+
"repository": {
75+
"type": "git",
76+
"url": "git+https://github.com/addapptables/angular-boilerplate.git"
77+
},
78+
"bugs": {
79+
"url": "https://github.com/addapptables/angular-boilerplate/issues"
80+
},
81+
"keywords": [
82+
"craftsjs",
83+
"angular",
84+
"boilerplate",
85+
"alert",
86+
"card",
87+
"menu",
88+
"modal",
89+
"notifier"
90+
]
7091
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { createAction, props } from '@ngrx/store';
2+
import { OrganizationUnitDto } from '../models/organization-unit-dto.model';
3+
4+
5+
export enum RoleOrganizationUnitActionTypes {
6+
LoadRoleOrganizationUnits = '[RoleOrganizationUnit] Load RoleOrganizationUnits',
7+
RoleOrganizationUnitsLoaded = '[RoleOrganizationUnit] RoleOrganizationUnits Loaded',
8+
RoleOrganizationUnitClearStore = '[RoleOrganizationUnit] RoleOrganizationUnit Clear Store',
9+
CancelRoleOrganizationUnitRequest = '[RoleOrganizationUnit] Cancel RoleOrganizationUnit Request',
10+
selectRoleOrganizationUnits = '[RoleOrganizationUnit] Select RoleOrganizationUnits',
11+
}
12+
13+
14+
export const cancelRoleOrganizationUnitRequest = createAction(RoleOrganizationUnitActionTypes.CancelRoleOrganizationUnitRequest);
15+
16+
export const roleOrganizationUnitClearStore = createAction(RoleOrganizationUnitActionTypes.RoleOrganizationUnitClearStore);
17+
18+
export const roleOrganizationUnitsLoaded = createAction(RoleOrganizationUnitActionTypes.RoleOrganizationUnitsLoaded,
19+
props<{ organizationUnits: OrganizationUnitDto[] }>());
20+
21+
export const loadRoleOrganizationUnits = createAction(RoleOrganizationUnitActionTypes.LoadRoleOrganizationUnits);
22+
23+
export const selectRoleOrganizationUnit = createAction(RoleOrganizationUnitActionTypes.selectRoleOrganizationUnits,
24+
props<{ organizationUnit: OrganizationUnitDto }>());
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { Injectable } from '@angular/core';
2+
import { Actions, ofType, createEffect } from '@ngrx/effects';
3+
import { OrganizationUnitService } from '../services/organization-unit.service';
4+
import * as RoleOrganizationActions from '../actions/role-organization-unit.actions';
5+
import { switchMap, takeUntil, catchError, map } from 'rxjs/operators';
6+
import { of } from 'rxjs';
7+
import { OrganizationUnitDto } from '../models/organization-unit-dto.model';
8+
9+
@Injectable()
10+
export class RoleOrganizationUnitEffects {
11+
12+
constructor(
13+
private _actions$: Actions,
14+
private _organizationUnitService: OrganizationUnitService
15+
) { }
16+
17+
loadData$ = createEffect(() => this._actions$.pipe(
18+
ofType(RoleOrganizationActions.loadRoleOrganizationUnits),
19+
switchMap(() =>
20+
this._organizationUnitService.getRoleOrganizationUnits().pipe(
21+
takeUntil(this._actions$.pipe(ofType(RoleOrganizationActions.cancelRoleOrganizationUnitRequest))),
22+
catchError(() => of([] as OrganizationUnitDto[]))
23+
)
24+
),
25+
map((result) => RoleOrganizationActions.roleOrganizationUnitsLoaded({ organizationUnits: result }))
26+
));
27+
28+
}

projects/craftsjs-app/src/app/@redux/organization-unit/models/organization-unit-store.model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ import { StoreModel } from '@redux/shared/models/store.model';
22
import { OrganizationUnitDto } from './organization-unit-dto.model';
33

44
export interface OrganizationUnitStoreModel extends StoreModel<OrganizationUnitDto> {
5-
5+
selectedOrganizationUnit: OrganizationUnitDto
66
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { createSelector } from '@ngrx/store';
2+
import { OrganizationUnitStoreModel } from '../models/organization-unit-store.model';
3+
import { selectAll } from '../stores/role-organization-unit.store';
4+
5+
6+
export const selectRoleOrganizationUnitState = state => state.roleOrganizationUnit.store as OrganizationUnitStoreModel;
7+
8+
export const selectAllRoleOrganizationUnits = createSelector(
9+
selectRoleOrganizationUnitState,
10+
selectAll
11+
);
12+
13+
export const selectRoleOrganizationUnit = createSelector(
14+
selectRoleOrganizationUnitState,
15+
state => state.selectedOrganizationUnit
16+
);
17+
18+
export const selectRoleOrganizationUnitLoading = createSelector(
19+
selectRoleOrganizationUnitState,
20+
state => state.loading
21+
);

projects/craftsjs-app/src/app/@redux/organization-unit/services/organization-unit.service.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ export class OrganizationUnitService extends ServiceApiBase {
2727
return this.get<OrganizationUnitRoleDto[]>(url);
2828
}
2929

30+
getRoleOrganizationUnits() {
31+
const url = `user/organization-units`;
32+
return this.get<OrganizationUnitDto[]>(url);
33+
}
34+
3035
getRoles(organizationUnitId: string) {
3136
const url = `roles/${organizationUnitId}`;
3237
return this.get<RoleDto[]>(url);

projects/craftsjs-app/src/app/@redux/organization-unit/stores/organization-unit.store.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ const initialState = adapter.getInitialState({
1111
loading: false,
1212
loadingAction: false,
1313
ActionState: ActionType.none,
14-
total: 0
14+
total: 0,
15+
selectedOrganizationUnit: undefined
1516
});
1617

1718
@Store<OrganizationUnitStoreModel>(initialState)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { EntityAdapter, createEntityAdapter } from '@ngrx/entity';
2+
import { OrganizationUnitDto } from '../models/organization-unit-dto.model';
3+
import { ActionType } from '@redux/shared/models/action-type.model';
4+
import { Store, Action } from '@craftsjs/ngrx-action';
5+
import { OrganizationUnitStoreModel } from '../models/organization-unit-store.model';
6+
import * as OrganizationUnitActions from '../actions/role-organization-unit.actions';
7+
8+
export const adapter: EntityAdapter<OrganizationUnitDto> = createEntityAdapter<OrganizationUnitDto>();
9+
10+
const initialState = adapter.getInitialState({
11+
loading: false,
12+
loadingAction: false,
13+
ActionState: ActionType.none,
14+
total: 0,
15+
selectedOrganizationUnit: undefined
16+
});
17+
18+
@Store<OrganizationUnitStoreModel>(initialState)
19+
export class RoleOrganizationUnitStore {
20+
21+
@Action(OrganizationUnitActions.loadRoleOrganizationUnits)
22+
loadOrganizationUnits(state: OrganizationUnitStoreModel) {
23+
return { ...state, loading: true };
24+
}
25+
26+
@Action(OrganizationUnitActions.selectRoleOrganizationUnit)
27+
selectedOrganizationUnit(state: OrganizationUnitStoreModel, { organizationUnit }) {
28+
return { ...state, selectedOrganizationUnit: organizationUnit };
29+
}
30+
31+
@Action(OrganizationUnitActions.cancelRoleOrganizationUnitRequest)
32+
cancelOrganizationUnitRequest(state: OrganizationUnitStoreModel) {
33+
return { ...state, loading: false, loadingAction: false };
34+
}
35+
36+
@Action(OrganizationUnitActions.roleOrganizationUnitsLoaded)
37+
organizationUnitsLoaded(state: OrganizationUnitStoreModel, { organizationUnits }) {
38+
return adapter.upsertMany<OrganizationUnitStoreModel>(organizationUnits, {
39+
...state,
40+
loading: false
41+
});
42+
}
43+
44+
@Action(OrganizationUnitActions.roleOrganizationUnitClearStore)
45+
organizationUnitClearStore(state: OrganizationUnitStoreModel) {
46+
return adapter.removeAll({ ...state });
47+
}
48+
}
49+
50+
export const {
51+
selectAll
52+
} = adapter.getSelectors();

projects/craftsjs-app/src/app/@redux/user/services/user.service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export class UserService extends ServiceApiBase {
3636
return this.put<ChangePasswordDto, boolean>('profile/update/change-password', input);
3737
}
3838

39-
changeOrganizationUnit(organizationUnitId: number) {
40-
return this.post<any, any>('ChangeOrganizationUnit', { id: organizationUnitId });
39+
changeOrganizationUnit(organizationUnitId: string) {
40+
return this.put<any, any>('update/last-organization-unit', { organizationUnitId });
4141
}
4242
}

projects/craftsjs-app/src/app/admin/tenant/components/tenant-list/tenant-list.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<button *ngIf="'Page.Tenants.Delete' | isGranted" mat-icon-button (click)="deleteTenant(tenant)">
1919
<mat-icon suffix>delete</mat-icon>
2020
</button>
21-
<button mat-icon-button (click)="openModalImpersonation(tenant.id)"
21+
<button *ngIf="'Page.Tenants.Impersonation' | isGranted" mat-icon-button (click)="openModalImpersonation(tenant.id)"
2222
[matTooltip]="'tenant.impersonation' | translateAsync" matTooltipPosition="above">
2323
<mat-icon suffix>supervisor_account</mat-icon>
2424
</button>

0 commit comments

Comments
 (0)