diff --git a/static/src/app/admin/admin.module.ts b/static/src/app/admin/admin.module.ts index 94fbef5..7e41389 100644 --- a/static/src/app/admin/admin.module.ts +++ b/static/src/app/admin/admin.module.ts @@ -1,7 +1,6 @@ import {NgModule} from '@angular/core'; import {AdminComponent} from './admin.component'; import {SharedModule} from '../shared.module'; -import {AppUserStore} from '../services/stores/app-user.store'; import {AppUserService} from '../services/app-user-service/app-user.service'; import {CommonModule} from '@angular/common'; import {RouterModule} from '@angular/router'; @@ -9,7 +8,7 @@ import {RouterModule} from '@angular/router'; @NgModule({ declarations: [AdminComponent], imports: [CommonModule, SharedModule, RouterModule.forChild([{path: '', component: AdminComponent}])], - providers: [AppUserStore, AppUserService] + providers: [AppUserService] }) export class AdminModule { } diff --git a/static/src/app/app.module.ts b/static/src/app/app.module.ts index f4f295c..6ad16a0 100644 --- a/static/src/app/app.module.ts +++ b/static/src/app/app.module.ts @@ -5,10 +5,7 @@ import {AppComponent} from './app.component'; import {LoginService} from './services/app-user-service/login-service'; import {appRouting, routingComponents, routingProviders} from './app.routing'; import {SquadService} from './services/army-management/squad.service'; -import {SquadStore} from './services/stores/squad.store'; -import {DecorationStore} from './services/stores/decoration.store'; import {DecorationService} from './services/army-management/decoration.service'; -import {RankStore} from './services/stores/rank.store'; import {RankService} from './services/army-management/rank.service'; import {AppConfig} from './app.config'; import {LoginGuardAdmin, LoginGuardHL, LoginGuardSQL} from './login'; @@ -19,7 +16,6 @@ import {PromotionService} from './services/army-management/promotion.service'; import {SharedModule} from './shared.module'; import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; import {UserService} from './services/army-management/user.service'; -import {UserStore} from './services/stores/user.store'; import {CookieService} from 'ngx-cookie-service'; import {SnackBarService} from './services/user-interface/snack-bar/snack-bar.service'; import {HttpClientModule} from '@angular/common/http'; @@ -48,14 +44,10 @@ import {SettingsService} from './services/settings.service'; LoginGuardHL, LoginGuardAdmin, UserService, - UserStore, ArmyService, SquadService, - SquadStore, DecorationService, - DecorationStore, RankService, - RankStore, AwardingService, PromotionService, AppConfig, diff --git a/static/src/app/manage/manage.module.ts b/static/src/app/manage/manage.module.ts index 6106680..4534d5e 100644 --- a/static/src/app/manage/manage.module.ts +++ b/static/src/app/manage/manage.module.ts @@ -1,18 +1,11 @@ import {NgModule} from '@angular/core'; import {SharedModule} from '../shared.module'; import {CommonModule} from '@angular/common'; -import {RankService} from '../services/army-management/rank.service'; -import {DecorationService} from '../services/army-management/decoration.service'; - import {TranslateLoader, TranslateModule} from '@ngx-translate/core'; import {HttpClient} from '@angular/common/http'; import {TranslateHttpLoader} from '@ngx-translate/http-loader'; import {manageRouterModule, manageRoutingComponents} from './manage.routing'; import {InfiniteScrollModule} from 'ngx-infinite-scroll'; -import {DecorationStore} from '../services/stores/decoration.store'; -import {RankStore} from '../services/stores/rank.store'; -import {SquadStore} from '../services/stores/squad.store'; -import {SquadService} from '../services/army-management/squad.service'; export function createTranslateLoader(http: HttpClient) { return new TranslateHttpLoader(http, './assets/i18n/manage/', '.json'); @@ -35,15 +28,6 @@ export function createTranslateLoader(http: HttpClient) { }, isolate: true }) - ], - - providers: [ - RankStore, - RankService, - DecorationStore, - DecorationService, - SquadStore, - SquadService ] }) export class ManageModule { diff --git a/static/src/app/manage/users/user-list/user-list.component.ts b/static/src/app/manage/users/user-list/user-list.component.ts index b1e614b..0ed4ea4 100644 --- a/static/src/app/manage/users/user-list/user-list.component.ts +++ b/static/src/app/manage/users/user-list/user-list.component.ts @@ -5,7 +5,7 @@ import {ActivatedRoute, Router} from '@angular/router'; import {Observable} from 'rxjs/Observable'; import {UserService} from '../../../services/army-management/user.service'; import {User} from '../../../models/model-interfaces'; -import {ADD, LOAD} from '../../../services/stores/user.store'; +import {ADD, LOAD} from '../../../services/stores/generic-store'; import {Fraction} from '../../../utils/fraction.enum'; import {MatButtonToggleGroup} from '@angular/material'; import {UIHelpers} from '../../../utils/global.helpers'; diff --git a/static/src/app/services/app-user-service/app-user.service.ts b/static/src/app/services/app-user-service/app-user.service.ts index 3b41aac..9a1c7f8 100644 --- a/static/src/app/services/app-user-service/app-user.service.ts +++ b/static/src/app/services/app-user-service/app-user.service.ts @@ -1,20 +1,20 @@ import {Injectable} from '@angular/core'; import {AppUser} from '../../models/model-interfaces'; import {Observable} from 'rxjs/Observable'; -import {EDIT, LOAD, REMOVE} from '../stores/user.store'; +import {EDIT, LOAD, REMOVE, Store} from '../stores/generic-store'; import {AppConfig} from '../../app.config'; import {HttpClient} from '../http-client'; -import {AppUserStore} from '../stores/app-user.store'; @Injectable() export class AppUserService { users$: Observable; + private appUserStore = new Store(); + constructor(private http: HttpClient, - private appUserStore: AppUserStore, private config: AppConfig) { - this.users$ = appUserStore.items$; + this.users$ = this.appUserStore.items$; } getUsers() { @@ -43,5 +43,4 @@ export class AppUserService { this.appUserStore.dispatch({type: REMOVE, data: user}); }); } - } diff --git a/static/src/app/services/army-management/awarding.service.ts b/static/src/app/services/army-management/awarding.service.ts index 0961e92..46f0c43 100644 --- a/static/src/app/services/army-management/awarding.service.ts +++ b/static/src/app/services/army-management/awarding.service.ts @@ -12,7 +12,7 @@ export class AwardingService { private config: AppConfig) { } - getAwardings(fraction = '' , userId = '', inProgress = false, squadId = '') { + getAwardings(fraction = '', userId = '', inProgress = false, squadId = '') { const getUrl = this.config.apiAwardPath .concat('?inProgress=').concat(inProgress.toString()) .concat('&fractFilter=').concat(fraction) diff --git a/static/src/app/services/army-management/decoration.service.ts b/static/src/app/services/army-management/decoration.service.ts index 2ee21d4..6403970 100644 --- a/static/src/app/services/army-management/decoration.service.ts +++ b/static/src/app/services/army-management/decoration.service.ts @@ -2,22 +2,21 @@ import {Injectable} from '@angular/core'; import {Decoration} from '../../models/model-interfaces'; import {RequestMethod, RequestOptions, URLSearchParams} from '@angular/http'; import {Observable} from 'rxjs/Observable'; -import {ADD, DecorationStore, EDIT, LOAD, REMOVE} from '../stores/decoration.store'; +import {ADD, EDIT, LOAD, REMOVE, Store} from '../stores/generic-store'; import {AppConfig} from '../../app.config'; import {HttpClient} from '../http-client'; - @Injectable() export class DecorationService { decorations$: Observable; - constructor(private http: HttpClient, - private decorationStore: DecorationStore, - private config: AppConfig) { - this.decorations$ = decorationStore.items$; - } + decorationStore = new Store(); + constructor(private http: HttpClient, + private config: AppConfig) { + this.decorations$ = this.decorationStore.items$; + } findDecorations(query = '', fractionFilter?) { const searchParams = new URLSearchParams(); @@ -72,7 +71,6 @@ export class DecorationService { body = decoration; } - const options = new RequestOptions({ body: body, method: requestMethod, @@ -86,7 +84,6 @@ export class DecorationService { }); } - deleteDecoration(decoration: Decoration) { return this.http.delete(this.config.apiDecorationPath + decoration._id) .do(res => { @@ -94,4 +91,3 @@ export class DecorationService { }); } } - diff --git a/static/src/app/services/army-management/rank.service.ts b/static/src/app/services/army-management/rank.service.ts index f704a46..7ff6603 100644 --- a/static/src/app/services/army-management/rank.service.ts +++ b/static/src/app/services/army-management/rank.service.ts @@ -1,24 +1,22 @@ import {Injectable} from '@angular/core'; -import {Decoration, Rank} from '../../models/model-interfaces'; +import {Rank} from '../../models/model-interfaces'; import {RequestMethod, RequestOptions, URLSearchParams} from '@angular/http'; import {Observable} from 'rxjs/Observable'; -import {LOAD} from '../stores/decoration.store'; -import {ADD, EDIT, RankStore, REMOVE} from '../stores/rank.store'; +import {ADD, EDIT, LOAD, REMOVE, Store} from '../stores/generic-store'; import {AppConfig} from '../../app.config'; import {HttpClient} from '../http-client'; - @Injectable() export class RankService { ranks$: Observable; - constructor(private http: HttpClient, - private rankStore: RankStore, - private config: AppConfig) { - this.ranks$ = rankStore.items$; - } + rankStore = new Store(); + constructor(private http: HttpClient, + private config: AppConfig) { + this.ranks$ = this.rankStore.items$; + } findRanks(query = '', fractionFilter?) { const searchParams = new URLSearchParams(); @@ -90,55 +88,10 @@ export class RankService { }); } - /** - * send PATCH request to update db entry - * - * @param rank - Rank object with data to update, must contain _id - * @returns {Observable} - */ - updateRank(rank: Rank) { - const options = new RequestOptions({ - body: rank, - method: RequestMethod.Patch - }); - - return this.http.request(this.config.apiRankPath + rank._id, options) - .map(res => res.json()) - .do(savedRank => { - const action = {type: EDIT, data: savedRank}; - this.rankStore.dispatch(action); - }); - } - - /** - * sends PATCH with multiform data to - * update rank graphic with newly provided file - * - * @param rankID - id of rank to be updated - * @param imageFile - new image file to upload - */ - updateRankGraphic(rankId: string, imageFile: File) { - const formData: FormData = new FormData(); - formData.append('_id', rankId); - formData.append('image', imageFile, imageFile.name); - - // provide token as query value, because there is no actual body - // and x-access-token is ignored in multipart request - return this.http.patch(this.config.apiRankPath + rankId, formData) - .map(res => res.json()) - .do(savedDecoration => { - const action = {type: EDIT, data: savedDecoration}; - this.rankStore.dispatch(action); - }); - } - deleteRank(rank: Rank) { return this.http.delete(this.config.apiRankPath + rank._id) .do(res => { this.rankStore.dispatch({type: REMOVE, data: rank}); }); } - - } - diff --git a/static/src/app/services/army-management/squad.service.ts b/static/src/app/services/army-management/squad.service.ts index 75a7ae6..dd08de3 100644 --- a/static/src/app/services/army-management/squad.service.ts +++ b/static/src/app/services/army-management/squad.service.ts @@ -2,8 +2,7 @@ import {Injectable} from '@angular/core'; import {Squad} from '../../models/model-interfaces'; import {RequestMethod, RequestOptions, URLSearchParams} from '@angular/http'; import {Observable} from 'rxjs/Observable'; - -import {ADD, EDIT, LOAD, REMOVE, SquadStore} from '../stores/squad.store'; +import {ADD, EDIT, LOAD, REMOVE, Store} from '../stores/generic-store'; import {AppConfig} from '../../app.config'; import {HttpClient} from '../http-client'; @@ -12,10 +11,11 @@ export class SquadService { squads$: Observable; + squadStore = new Store(); + constructor(private http: HttpClient, - private squadStore: SquadStore, private config: AppConfig) { - this.squads$ = squadStore.items$; + this.squads$ = this.squadStore.items$; } findSquads(query = '', fractionFilter = '') { @@ -33,13 +33,11 @@ export class SquadService { return this.squads$; } - getSquad(id: number | string): Observable { return this.http.get(this.config.apiSquadPath + id) .map(res => res.json()); } - /** * For creating new data with POST or * update existing with patch PATCH @@ -90,6 +88,4 @@ export class SquadService { this.squadStore.dispatch({type: REMOVE, data: squad}); }); } - } - diff --git a/static/src/app/services/army-management/user.service.ts b/static/src/app/services/army-management/user.service.ts index 5970781..a44decf 100644 --- a/static/src/app/services/army-management/user.service.ts +++ b/static/src/app/services/army-management/user.service.ts @@ -2,7 +2,7 @@ import {Injectable} from '@angular/core'; import {User} from '../../models/model-interfaces'; import {URLSearchParams} from '@angular/http'; import {Observable} from 'rxjs/Observable'; -import {ADD, EDIT, LOAD, REMOVE, UserStore} from '../stores/user.store'; +import {ADD, EDIT, LOAD, REMOVE, Store} from '../stores/generic-store'; import {AppConfig} from '../../app.config'; import {HttpClient} from '../http-client'; @@ -11,12 +11,13 @@ export class UserService { users$: Observable; + userStore = new Store(); + totalCount = 0; constructor(private http: HttpClient, - private userStore: UserStore, private config: AppConfig) { - this.users$ = userStore.items$; + this.users$ = this.userStore.items$; } findUsers(filter, limit?, offset?, action = LOAD) { @@ -81,6 +82,4 @@ export class UserService { this.userStore.dispatch({type: REMOVE, data: user}); }); } - } - diff --git a/static/src/app/services/army-service/army.service.ts b/static/src/app/services/army-service/army.service.ts index bf2d90c..44a22b2 100644 --- a/static/src/app/services/army-service/army.service.ts +++ b/static/src/app/services/army-service/army.service.ts @@ -14,5 +14,4 @@ export class ArmyService { return this.http.get(this.config.apiOverviewPath) .map(res => res.json()); } - } diff --git a/static/src/app/services/http-client.ts b/static/src/app/services/http-client.ts index ad77701..7a35436 100644 --- a/static/src/app/services/http-client.ts +++ b/static/src/app/services/http-client.ts @@ -25,7 +25,6 @@ export class HttpClient { this.router.navigate(['/login']); } } - } get(url, searchParams?) { @@ -73,5 +72,4 @@ export class HttpClient { return this.patch(requestUrl, options.body); } } - } diff --git a/static/src/app/services/logs/campaign.service.ts b/static/src/app/services/logs/campaign.service.ts index 7e1d552..ce3e57e 100644 --- a/static/src/app/services/logs/campaign.service.ts +++ b/static/src/app/services/logs/campaign.service.ts @@ -42,4 +42,3 @@ export class CampaignService { .map(res => res.json()); } } - diff --git a/static/src/app/services/stores/app-user.store.ts b/static/src/app/services/stores/app-user.store.ts deleted file mode 100644 index 54a4638..0000000 --- a/static/src/app/services/stores/app-user.store.ts +++ /dev/null @@ -1,41 +0,0 @@ -import {BehaviorSubject} from 'rxjs/BehaviorSubject'; -import {AppUser} from '../../models/model-interfaces'; - -export const LOAD = 'LOAD'; -export const ADD = 'ADD'; -export const EDIT = 'EDIT'; -export const REMOVE = 'REMOVE'; - -export class AppUserStore { - - private appUsers: AppUser[] = []; - - items$ = new BehaviorSubject([]); - - dispatch(action) { - this.appUsers = this._reduce(this.appUsers, action); - this.items$.next(this.appUsers); - } - - _reduce(users: AppUser[], action) { - switch (action.type) { - case LOAD: - return [...action.data]; - case ADD: - return [...users, action.data]; - case EDIT: - return users.map(user => { - const editedUser = action.data; - if (user._id !== editedUser._id) { - return user; - } - return editedUser; - }); - case REMOVE: - return users.filter(user => user._id !== action.data._id); - default: - return users; - } - } - -} diff --git a/static/src/app/services/stores/decoration.store.ts b/static/src/app/services/stores/decoration.store.ts deleted file mode 100644 index 3bdde1d..0000000 --- a/static/src/app/services/stores/decoration.store.ts +++ /dev/null @@ -1,41 +0,0 @@ -import {BehaviorSubject} from 'rxjs/BehaviorSubject'; -import {Decoration} from '../../models/model-interfaces'; - -export const LOAD = 'LOAD'; -export const ADD = 'ADD'; -export const EDIT = 'EDIT'; -export const REMOVE = 'REMOVE'; - -export class DecorationStore { - - private decorations: Decoration[] = []; - - items$ = new BehaviorSubject([]); - - dispatch(action) { - this.decorations = this._reduce(this.decorations, action); - this.items$.next(this.decorations); - } - - _reduce(decorations: Decoration[], action) { - switch (action.type) { - case LOAD: - return [...action.data]; - case ADD: - return [...decorations, action.data]; - case EDIT: - return decorations.map(decoration => { - const editedDecoration = action.data; - if (decoration._id !== editedDecoration._id) { - return decoration; - } - return editedDecoration; - }); - case REMOVE: - return decorations.filter(decoration => decoration._id !== action.data._id); - default: - return decorations; - } - } - -} diff --git a/static/src/app/services/stores/generic-store.ts b/static/src/app/services/stores/generic-store.ts index 6271879..80baa40 100644 --- a/static/src/app/services/stores/generic-store.ts +++ b/static/src/app/services/stores/generic-store.ts @@ -9,7 +9,7 @@ export const REMOVE = 'REMOVE'; type Id = string | number; interface Identifiable { - id?: Id; + _id?: Id; } export class Store { @@ -28,15 +28,15 @@ export class Store { case ADD: return [...items, action.data]; case EDIT: - return items.map(task => { - const editedTask = action.data; - if (task.id !== editedTask.id) { - return task; + return items.map(item => { + const editedItem = action.data; + if (item._id !== editedItem._id) { + return item; } - return editedTask; + return editedItem; }); case REMOVE: - return items.filter(task => task.id !== action.data.id); + return items.filter(item => item._id !== action.data._id); default: return items; } diff --git a/static/src/app/services/stores/rank.store.ts b/static/src/app/services/stores/rank.store.ts deleted file mode 100644 index bcca9b5..0000000 --- a/static/src/app/services/stores/rank.store.ts +++ /dev/null @@ -1,41 +0,0 @@ -import {BehaviorSubject} from 'rxjs/BehaviorSubject'; -import {Rank} from '../../models/model-interfaces'; - -export const LOAD = 'LOAD'; -export const ADD = 'ADD'; -export const EDIT = 'EDIT'; -export const REMOVE = 'REMOVE'; - -export class RankStore { - - private ranks: Rank[] = []; - - items$ = new BehaviorSubject([]); - - dispatch(action) { - this.ranks = this._reduce(this.ranks, action); - this.items$.next(this.ranks); - } - - _reduce(ranks: Rank[], action) { - switch (action.type) { - case LOAD: - return [...action.data]; - case ADD: - return [...ranks, action.data]; - case EDIT: - return ranks.map(decoration => { - const editedRank = action.data; - if (decoration._id !== editedRank._id) { - return decoration; - } - return editedRank; - }); - case REMOVE: - return ranks.filter(decoration => decoration._id !== action.data._id); - default: - return ranks; - } - } - -} diff --git a/static/src/app/services/stores/squad.store.ts b/static/src/app/services/stores/squad.store.ts deleted file mode 100644 index 558beee..0000000 --- a/static/src/app/services/stores/squad.store.ts +++ /dev/null @@ -1,41 +0,0 @@ -import {BehaviorSubject} from 'rxjs/BehaviorSubject'; -import {Squad} from '../../models/model-interfaces'; - -export const LOAD = 'LOAD'; -export const ADD = 'ADD'; -export const EDIT = 'EDIT'; -export const REMOVE = 'REMOVE'; - -export class SquadStore { - - private squads: Squad[] = []; - - items$ = new BehaviorSubject([]); - - dispatch(action) { - this.squads = this._reduce(this.squads, action); - this.items$.next(this.squads); - } - - _reduce(squads: Squad[], action) { - switch (action.type) { - case LOAD: - return [...action.data]; - case ADD: - return [...squads, action.data]; - case EDIT: - return squads.map(squad => { - const editedSquad = action.data; - if (squad._id !== editedSquad._id) { - return squad; - } - return editedSquad; - }); - case REMOVE: - return squads.filter(squad => squad._id !== action.data._id); - default: - return squads; - } - } - -} diff --git a/static/src/app/services/stores/user.store.ts b/static/src/app/services/stores/user.store.ts deleted file mode 100644 index 7af7a94..0000000 --- a/static/src/app/services/stores/user.store.ts +++ /dev/null @@ -1,44 +0,0 @@ -import {BehaviorSubject} from 'rxjs/BehaviorSubject'; -import {User} from '../../models/model-interfaces'; - -export const LOAD = 'LOAD'; -export const ADD = 'ADD'; -export const EDIT = 'EDIT'; -export const REMOVE = 'REMOVE'; - -export class UserStore { - - private users: User[] = []; - - items$ = new BehaviorSubject([]); - - dispatch(action) { - this.users = this._reduce(this.users, action); - this.items$.next(this.users); - } - - _reduce(users: User[], action) { - switch (action.type) { - case LOAD: - return [...action.data]; - case ADD: - if (action.data instanceof Array) { - return users.concat(action.data); - } - return [...users, action.data]; - case EDIT: - return users.map(user => { - const editedUser = action.data; - if (user._id !== editedUser._id) { - return user; - } - return editedUser; - }); - case REMOVE: - return users.filter(user => user._id !== action.data._id); - default: - return users; - } - } - -}