myrtex-mf-competition 1.0.72 → 1.0.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/.browserslistrc +16 -0
  2. package/karma.conf.js +44 -0
  3. package/ng-package.json +7 -0
  4. package/package.json +13 -33
  5. package/src/lib/modules/competition-header/competition-header.module.ts +46 -0
  6. package/src/lib/modules/competition-header/components/competition-header.component.html +164 -0
  7. package/src/lib/modules/competition-header/components/competition-header.component.ts +584 -0
  8. package/src/lib/modules/competition-header/constants.ts +1 -0
  9. package/src/lib/modules/competition-header/directives/competition-header-custom-buttons.directive.ts +10 -0
  10. package/src/lib/modules/competition-header/directives/index.ts +1 -0
  11. package/{lib/modules/competition-header/index.d.ts → src/lib/modules/competition-header/index.ts} +1 -1
  12. package/src/lib/modules/competition-header/models/competition-header-version.model.ts +13 -0
  13. package/src/lib/modules/competition-header/models/competition-rejection.model.ts +5 -0
  14. package/{lib/modules/competition-header/models/competition-status.model.d.ts → src/lib/modules/competition-header/models/competition-status.model.ts} +4 -3
  15. package/src/lib/modules/competition-header/models/competition-version.model.ts +12 -0
  16. package/{lib/modules/competition-header/models/eb-links.model.d.ts → src/lib/modules/competition-header/models/eb-links.model.ts} +1 -1
  17. package/src/lib/modules/competition-header/services/competition-header.service.ts +47 -0
  18. package/src/lib/modules/competition-header/services/settings.service.ts +17 -0
  19. package/src/lib/modules/competition-header/store/competition-header.actions.ts +102 -0
  20. package/src/lib/modules/competition-header/store/competition-header.effects.ts +193 -0
  21. package/src/lib/modules/competition-header/store/competition-header.reducers.ts +39 -0
  22. package/src/lib/modules/competition-header/store/competition-header.selector.ts +45 -0
  23. package/src/lib/modules/competition-header/store/competition-header.state.ts +21 -0
  24. package/{public-api.d.ts → src/public-api.ts} +4 -0
  25. package/src/test.ts +27 -0
  26. package/tsconfig.lib.json +15 -0
  27. package/tsconfig.lib.prod.json +10 -0
  28. package/tsconfig.spec.json +17 -0
  29. package/esm2020/lib/modules/competition-header/competition-header.module.mjs +0 -76
  30. package/esm2020/lib/modules/competition-header/components/competition-header.component.mjs +0 -495
  31. package/esm2020/lib/modules/competition-header/constants.mjs +0 -2
  32. package/esm2020/lib/modules/competition-header/directives/competition-header-custom-buttons.directive.mjs +0 -16
  33. package/esm2020/lib/modules/competition-header/directives/index.mjs +0 -2
  34. package/esm2020/lib/modules/competition-header/index.mjs +0 -5
  35. package/esm2020/lib/modules/competition-header/models/competition-header-version.model.mjs +0 -2
  36. package/esm2020/lib/modules/competition-header/models/competition-rejection.model.mjs +0 -2
  37. package/esm2020/lib/modules/competition-header/models/competition-status.model.mjs +0 -2
  38. package/esm2020/lib/modules/competition-header/models/competition-version.model.mjs +0 -2
  39. package/esm2020/lib/modules/competition-header/models/eb-links.model.mjs +0 -2
  40. package/esm2020/lib/modules/competition-header/models/index.mjs +0 -2
  41. package/esm2020/lib/modules/competition-header/services/competition-header.service.mjs +0 -40
  42. package/esm2020/lib/modules/competition-header/services/settings.service.mjs +0 -20
  43. package/esm2020/lib/modules/competition-header/store/competition-header.actions.mjs +0 -37
  44. package/esm2020/lib/modules/competition-header/store/competition-header.effects.mjs +0 -96
  45. package/esm2020/lib/modules/competition-header/store/competition-header.reducers.mjs +0 -31
  46. package/esm2020/lib/modules/competition-header/store/competition-header.selector.mjs +0 -14
  47. package/esm2020/lib/modules/competition-header/store/competition-header.state.mjs +0 -9
  48. package/esm2020/myrtex-mf-competition.mjs +0 -5
  49. package/esm2020/public-api.mjs +0 -6
  50. package/fesm2015/myrtex-mf-competition.mjs +0 -811
  51. package/fesm2015/myrtex-mf-competition.mjs.map +0 -1
  52. package/fesm2020/myrtex-mf-competition.mjs +0 -804
  53. package/fesm2020/myrtex-mf-competition.mjs.map +0 -1
  54. package/lib/modules/competition-header/competition-header.module.d.ts +0 -16
  55. package/lib/modules/competition-header/components/competition-header.component.d.ts +0 -89
  56. package/lib/modules/competition-header/constants.d.ts +0 -1
  57. package/lib/modules/competition-header/directives/competition-header-custom-buttons.directive.d.ts +0 -8
  58. package/lib/modules/competition-header/directives/index.d.ts +0 -1
  59. package/lib/modules/competition-header/models/competition-header-version.model.d.ts +0 -11
  60. package/lib/modules/competition-header/models/competition-rejection.model.d.ts +0 -5
  61. package/lib/modules/competition-header/models/competition-version.model.d.ts +0 -11
  62. package/lib/modules/competition-header/services/competition-header.service.d.ts +0 -20
  63. package/lib/modules/competition-header/services/settings.service.d.ts +0 -14
  64. package/lib/modules/competition-header/store/competition-header.actions.d.ts +0 -78
  65. package/lib/modules/competition-header/store/competition-header.effects.d.ts +0 -42
  66. package/lib/modules/competition-header/store/competition-header.reducers.d.ts +0 -3
  67. package/lib/modules/competition-header/store/competition-header.selector.d.ts +0 -7
  68. package/lib/modules/competition-header/store/competition-header.state.d.ts +0 -12
  69. package/myrtex-mf-competition.d.ts +0 -5
  70. /package/{lib/modules/competition-header/models/index.d.ts → src/lib/modules/competition-header/models/index.ts} +0 -0
@@ -0,0 +1,47 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Injectable, Injector } from '@angular/core';
3
+ import { Observable } from 'rxjs';
4
+ import { CompetitionHeaderVersionModel } from '../models/competition-header-version.model';
5
+ import { CompetitionVersionStatusEnum, EndpointBaseService } from 'myrtex-mf-ui-composite';
6
+
7
+ @Injectable()
8
+ export class CompetitionHeaderService extends EndpointBaseService {
9
+
10
+ private url = '/application' + this.restPath + '/competition';
11
+
12
+ constructor(http: HttpClient, injector: Injector) {
13
+ super(http, injector);
14
+ }
15
+
16
+ public getHeader(competitionId?: string): Observable<CompetitionHeaderVersionModel> {
17
+ return this.http.get<CompetitionHeaderVersionModel>(`${this.url}/${competitionId}/header`);
18
+ }
19
+
20
+ public createVersion(competitionId?: string): Observable<string> {
21
+ return this.http.post<string>(`${this.url}/${competitionId}/version`, {});
22
+ }
23
+
24
+ public deleteVersion(competitionId?: string, versionId?: string): Observable<boolean> {
25
+ return this.http.delete<boolean>(`${this.url}/${competitionId}/version/${versionId}`);
26
+ }
27
+
28
+ public versionChangeStatus(competitionId?: string, versionId?: string, status?: CompetitionVersionStatusEnum): Observable<boolean> {
29
+ return this.http.post<boolean>(`${this.url}/${competitionId}/version/${versionId}/to-status/${status}`, {});
30
+ }
31
+
32
+ public activate(competitionId?: string): Observable<any> {
33
+ return this.http.post<any>(`${this.url}/${competitionId}/activate`, {});
34
+ }
35
+
36
+ public pause(competitionId?: string): Observable<any> {
37
+ return this.http.post<any>(`${this.url}/${competitionId}/pause`, {});
38
+ }
39
+
40
+ public complete(competitionId?: string): Observable<any> {
41
+ return this.http.post<any>(`${this.url}/${competitionId}/complete`, {});
42
+ }
43
+
44
+ public cancel(competitionId?: string): Observable<any> {
45
+ return this.http.post<any>(`${this.url}/${competitionId}/cancel`, {});
46
+ }
47
+ }
@@ -0,0 +1,17 @@
1
+ import {HttpClient} from '@angular/common/http';
2
+ import {Injectable, Injector} from '@angular/core';
3
+ import {EndpointBaseService} from 'myrtex-mf-ui-composite';
4
+ import {Observable} from 'rxjs';
5
+ import { EBLinksModel } from '../models/eb-links.model';
6
+
7
+ @Injectable()
8
+ export class SettingsService extends EndpointBaseService {
9
+
10
+ constructor(protected http: HttpClient, protected injector: Injector) {
11
+ super(http, injector);
12
+ }
13
+
14
+ public getSelelectionEditEbLinks(): Observable<EBLinksModel> {
15
+ return this.http.get<EBLinksModel>('/m-data/minfin/selection/edit/eb-links');
16
+ }
17
+ }
@@ -0,0 +1,102 @@
1
+ import { createAction, props } from '@ngrx/store';
2
+ import {CompetitionHeaderVersionModel} from '../models/competition-header-version.model';
3
+ import { CompetitionVersionStatusEnum } from 'myrtex-mf-ui-composite';
4
+
5
+ export enum ECompetitionHeaderActions {
6
+
7
+ LoadCompetitionHeader = '[Competition] Load Header',
8
+ LoadCompetitionHeaderSuccess = '[Competition] Load Header Success',
9
+
10
+ DeleteCompetitionVersion = '[Competition] Delete Version',
11
+ DeleteCompetitionVersionSuccess = '[Competition] Delete Version Success',
12
+
13
+ CreateCompetitionVersion = '[Competition] Create Version',
14
+ CreateCompetitionVersionSuccess = '[Competition] Create Version Success',
15
+
16
+ CompetitionVersionChangeStatus = '[Competition] Version Change Status',
17
+ CompetitionVersionChangeStatusSuccess = '[Competition] Version Change Status Success',
18
+ CompetitionVersionChangeStatusManual = '[Competition] Version Change Status Manual',
19
+
20
+ SelectCompetitionVersion = '[Competition] Select Version',
21
+
22
+ ActivateCompetition = '[Competition] Activate',
23
+ PauseCompetition = '[Competition] Pause',
24
+ CancelCompetition = '[Competition] Cancel',
25
+ CancelCompetitionWithValidation = '[Competition] Cancel With Validation',
26
+ CompleteCompetition = '[Competition] Complete',
27
+
28
+ CompetitionChangeStatusSuccess = '[Competition] ChangeStatus Success',
29
+ }
30
+
31
+ export const loadCompetitionHeader = createAction(
32
+ ECompetitionHeaderActions.LoadCompetitionHeader
33
+ );
34
+
35
+ export const loadCompetitionHeaderSuccess = createAction(
36
+ ECompetitionHeaderActions.LoadCompetitionHeaderSuccess,
37
+ props<{ competitionHeader: CompetitionHeaderVersionModel }>()
38
+ );
39
+
40
+ export const deleteCompetitionVersion = createAction(
41
+ ECompetitionHeaderActions.DeleteCompetitionVersion,
42
+ props<{ versionId: string }>()
43
+ );
44
+
45
+ export const deleteCompetitionVersionSuccess = createAction(
46
+ ECompetitionHeaderActions.DeleteCompetitionVersionSuccess,
47
+ props<{ versionId: string }>()
48
+ );
49
+
50
+ export const createCompetitionVersion = createAction(
51
+ ECompetitionHeaderActions.CreateCompetitionVersion
52
+ );
53
+
54
+ export const competitionVersionChangeStatus = createAction(
55
+ ECompetitionHeaderActions.CompetitionVersionChangeStatus,
56
+ props<{ versionId: string, status: CompetitionVersionStatusEnum }>()
57
+ );
58
+
59
+ export const competitionVersionChangeStatusSuccess = createAction(
60
+ ECompetitionHeaderActions.CompetitionVersionChangeStatusSuccess,
61
+ props<{ versionId: string, status: CompetitionVersionStatusEnum }>()
62
+ );
63
+
64
+ export const competitionVersionChangeStatusManual = createAction(
65
+ ECompetitionHeaderActions.CompetitionVersionChangeStatusManual,
66
+ props<{ versionId: string, status: CompetitionVersionStatusEnum }>()
67
+ );
68
+
69
+ export const createCompetitionVersionSuccess = createAction(
70
+ ECompetitionHeaderActions.CreateCompetitionVersionSuccess,
71
+ props<{ versionId: string }>()
72
+ );
73
+
74
+ export const selectCompetitionVersion = createAction(
75
+ ECompetitionHeaderActions.SelectCompetitionVersion,
76
+ props<{ versionId: string }>()
77
+ );
78
+
79
+ export const activateCompetition = createAction(
80
+ ECompetitionHeaderActions.ActivateCompetition
81
+ );
82
+
83
+ export const pauseCompetition = createAction(
84
+ ECompetitionHeaderActions.PauseCompetition
85
+ );
86
+
87
+ export const cancelCompetition = createAction(
88
+ ECompetitionHeaderActions.CancelCompetition
89
+ );
90
+
91
+ export const cancelCompetitionWithValidation = createAction(
92
+ ECompetitionHeaderActions.CancelCompetitionWithValidation,
93
+ props<{ versionId: string }>()
94
+ );
95
+
96
+ export const completeCompetition = createAction(
97
+ ECompetitionHeaderActions.CompleteCompetition
98
+ );
99
+
100
+ export const competitionChangeStatusSuccess = createAction(
101
+ ECompetitionHeaderActions.CompetitionChangeStatusSuccess
102
+ );
@@ -0,0 +1,193 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Actions, createEffect, ofType } from '@ngrx/effects';
3
+ import { select, Store } from '@ngrx/store';
4
+ import { EMPTY } from 'rxjs';
5
+ import { catchError, map, switchMap, tap, withLatestFrom } from 'rxjs/operators';
6
+ import * as CompetitionHeaderActions from './competition-header.actions';
7
+ import { cancelCompetitionWithValidation, ECompetitionHeaderActions } from './competition-header.actions';
8
+ import { CompetitionHeaderVersionModel } from '../models/competition-header-version.model';
9
+ import { CompetitionHeaderService } from '../services/competition-header.service';
10
+ import {
11
+ AlertService,
12
+ CompetitionVersionStatusEnum,
13
+ MessageSeverity,
14
+ selectCompetitionId,
15
+ Utilities
16
+ } from 'myrtex-mf-ui-composite';
17
+
18
+
19
+ @Injectable()
20
+ export class CompetitionHeaderEffects {
21
+
22
+ loadCompetitionHeader$ = createEffect(() => this.actions$.pipe(
23
+ ofType(ECompetitionHeaderActions.LoadCompetitionHeader),
24
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
25
+ switchMap(([, competitionId]) => {
26
+ return this.competitionHeaderService.getHeader(competitionId).pipe(
27
+ map((result: CompetitionHeaderVersionModel) => CompetitionHeaderActions.loadCompetitionHeaderSuccess({competitionHeader: result})),
28
+ catchError((err) => {
29
+ this.alertService.showMessage(err, null, MessageSeverity.error);
30
+ return EMPTY;
31
+ })
32
+ );
33
+ })));
34
+
35
+ deleteCompetitionVersion$ = createEffect(() => this.actions$.pipe(
36
+ ofType(ECompetitionHeaderActions.DeleteCompetitionVersion),
37
+ map((action: { versionId: string }) => action.versionId),
38
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
39
+ switchMap(([versionId, competitionId]) => {
40
+ return this.competitionHeaderService.deleteVersion(competitionId, versionId).pipe(
41
+ map((result: boolean) => CompetitionHeaderActions.deleteCompetitionVersionSuccess({versionId})),
42
+ catchError((err) => {
43
+ this.alertService.showMessage(err, null, MessageSeverity.error);
44
+ return EMPTY;
45
+ })
46
+ );
47
+ })));
48
+
49
+ deleteCompetitionVersionSuccess$ = createEffect(() => this.actions$.pipe(
50
+ ofType(ECompetitionHeaderActions.DeleteCompetitionVersionSuccess),
51
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
52
+ tap(([, competitionId]) => window.location.href = `/application/competitions/item?competitionId=${competitionId}`)
53
+ ), {dispatch: false});
54
+
55
+ createCompetitionVersion$ = createEffect(() => this.actions$.pipe(
56
+ ofType(ECompetitionHeaderActions.CreateCompetitionVersion),
57
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
58
+ switchMap(([, competitionId]) => {
59
+ return this.competitionHeaderService.createVersion(competitionId).pipe(
60
+ map((result: string) => CompetitionHeaderActions.createCompetitionVersionSuccess({versionId: result})),
61
+ catchError((err) => {
62
+ this.alertService.showMessage(err, null, MessageSeverity.error);
63
+ return EMPTY;
64
+ })
65
+ );
66
+ })));
67
+
68
+ createCompetitionVersionSuccess$ = createEffect(() => this.actions$.pipe(
69
+ ofType(ECompetitionHeaderActions.CreateCompetitionVersionSuccess),
70
+ map((action: { versionId: string }) => action.versionId),
71
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
72
+ tap(([versionId, competitionId]) =>
73
+ window.location.href = `/application/competitions/item?competitionId=${competitionId}&versionId=${versionId}`)
74
+ ), {dispatch: false});
75
+
76
+ competitionVersionChangeStatus$ = createEffect(() => this.actions$.pipe(
77
+ ofType(ECompetitionHeaderActions.CompetitionVersionChangeStatus),
78
+ map((action: { versionId: string, status: CompetitionVersionStatusEnum }) => action),
79
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
80
+ switchMap(([action, competitionId]) => {
81
+ return this.competitionHeaderService.versionChangeStatus(competitionId, action.versionId, action.status).pipe(
82
+ map((result: boolean) => {
83
+ return CompetitionHeaderActions.competitionVersionChangeStatusSuccess({
84
+ versionId: action.versionId,
85
+ status: action.status
86
+ });
87
+ }),
88
+ catchError((err) => {
89
+ this.alertService.showMessage(err, null, MessageSeverity.error);
90
+ return EMPTY;
91
+ })
92
+ );
93
+ })));
94
+
95
+ competitionVersionChangeStatusSuccess$ = createEffect(() => this.actions$.pipe(
96
+ ofType(ECompetitionHeaderActions.CompetitionVersionChangeStatusSuccess),
97
+ map((action: { versionId: string, status: CompetitionVersionStatusEnum }) => action),
98
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
99
+ tap(([action, competitionId]) => {
100
+ if (action.status === CompetitionVersionStatusEnum.Validation) {
101
+ window.location.href = `/m-data/minfin/selection/edit?competitionId=${competitionId}&versionId=${action.versionId}`;
102
+ } else {
103
+ window.location.reload();
104
+ }
105
+ })
106
+ ), {dispatch: false});
107
+
108
+ selectCompetitionVersion$ = createEffect(() => this.actions$.pipe(
109
+ ofType(ECompetitionHeaderActions.SelectCompetitionVersion),
110
+ map((action: { versionId: string }) => action.versionId),
111
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
112
+ tap(([versionId, competitionId]) => {
113
+ const newUri = Utilities.updateQueryStringParameter(window.location.href, 'versionId', versionId);
114
+ window.location.href = newUri;
115
+ })
116
+ ), {dispatch: false});
117
+
118
+ activateCompetition$ = createEffect(() => (this.actions$.pipe(
119
+ ofType(ECompetitionHeaderActions.ActivateCompetition),
120
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
121
+ switchMap(([, competitionId]) => {
122
+ return this.competitionHeaderService.activate(competitionId).pipe(
123
+ map((result: any) => CompetitionHeaderActions.competitionChangeStatusSuccess()),
124
+ catchError((err, caught) => {
125
+ this.alertService.showStickyMessage(err, 'Ошибка активации', MessageSeverity.error);
126
+ return EMPTY;
127
+ })
128
+ );
129
+ })
130
+ )));
131
+
132
+ pauseCompetition$ = createEffect(() => (this.actions$.pipe(
133
+ ofType(ECompetitionHeaderActions.PauseCompetition),
134
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
135
+ switchMap(([, competitionId]) => {
136
+ return this.competitionHeaderService.pause(competitionId).pipe(
137
+ map((result: any) => CompetitionHeaderActions.competitionChangeStatusSuccess()),
138
+ catchError((err, caught) => {
139
+ this.alertService.showStickyMessage(err, 'Ошибка приостановки', MessageSeverity.error);
140
+ return EMPTY;
141
+ })
142
+ );
143
+ })
144
+ )));
145
+
146
+ completeCompetition$ = createEffect(() => (this.actions$.pipe(
147
+ ofType(ECompetitionHeaderActions.CompleteCompetition),
148
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
149
+ switchMap(([, competitionId]) => {
150
+ return this.competitionHeaderService.complete(competitionId).pipe(
151
+ map((result: any) => CompetitionHeaderActions.competitionChangeStatusSuccess()),
152
+ catchError((err, caught) => {
153
+ this.alertService.showStickyMessage(err, 'Ошибка при завершении', MessageSeverity.error);
154
+ return EMPTY;
155
+ })
156
+ );
157
+ })
158
+ )));
159
+
160
+ cancelCompetition$ = createEffect(() => (this.actions$.pipe(
161
+ ofType(ECompetitionHeaderActions.CancelCompetition),
162
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
163
+ switchMap(([, competitionId]) => {
164
+ return this.competitionHeaderService.cancel(competitionId).pipe(
165
+ map((result: any) => CompetitionHeaderActions.competitionChangeStatusSuccess()),
166
+ catchError((err, caught) => {
167
+ this.alertService.showStickyMessage(err, 'Ошибка при отмене', MessageSeverity.error);
168
+ return EMPTY;
169
+ })
170
+ );
171
+ })
172
+ )));
173
+
174
+ cancelCompetitionWithValidation$ = createEffect(() => this.actions$.pipe(
175
+ ofType(ECompetitionHeaderActions.CancelCompetitionWithValidation),
176
+ map((action: { versionId: string }) => action.versionId),
177
+ withLatestFrom(this.store.pipe(select(selectCompetitionId))),
178
+ tap(([versionId, competitionId]) =>
179
+ window.location.href = `/m-data/minfin/selection/edit/cancel?competitionId=${competitionId}&versionId=${versionId}`)
180
+ ), {dispatch: false});
181
+
182
+ competitionChangeStatusSuccess$ = createEffect(() => this.actions$.pipe(
183
+ ofType(ECompetitionHeaderActions.CompetitionChangeStatusSuccess),
184
+ tap(() => window.location.reload())
185
+ ), {dispatch: false});
186
+
187
+ constructor(private competitionHeaderService: CompetitionHeaderService,
188
+ private actions$: Actions,
189
+ private store: Store,
190
+ private alertService: AlertService
191
+ ) {
192
+ }
193
+ }
@@ -0,0 +1,39 @@
1
+ import {Action, createReducer, on} from '@ngrx/store';
2
+ import * as CompetitionActions from './competition-header.actions';
3
+ import {CompetitionHeaderState, initialCompetitionHeaderState} from './competition-header.state';
4
+ import {CompetitionStatusModel} from '../models/competition-status.model';
5
+
6
+ const competitionHeaderReducerCreator = createReducer(
7
+ initialCompetitionHeaderState,
8
+
9
+ on(CompetitionActions.loadCompetitionHeaderSuccess, (state, {competitionHeader}) => {
10
+ const versions = competitionHeader.versions;
11
+ const competition = {
12
+ id: competitionHeader.id,
13
+ status: competitionHeader.status,
14
+ mode: competitionHeader.mode
15
+ } as CompetitionStatusModel;
16
+ return {
17
+ ...state,
18
+ competitionVersions: versions,
19
+ defaultVersionVersionId: competitionHeader.selectedCompetitionVersionId,
20
+ competition, activityId: competitionHeader.activityId,
21
+ type: competitionHeader.type
22
+ };
23
+ }),
24
+
25
+ on(CompetitionActions.competitionVersionChangeStatusManual, (state, {versionId, status}) => {
26
+ const versions = [...state.competitionVersions];
27
+ const version = versions.find(s => s.id === versionId);
28
+ if (version) {
29
+ const newVersion = {...version};
30
+ newVersion.status = status;
31
+ versions.splice(versions.indexOf(version), 1, newVersion);
32
+ }
33
+ return {...state, competitionVersions: versions, manualVersionStatusChanged: true};
34
+ })
35
+ );
36
+
37
+ export function competitionHeaderReducer(state: CompetitionHeaderState | undefined, action: Action) {
38
+ return competitionHeaderReducerCreator(state, action);
39
+ }
@@ -0,0 +1,45 @@
1
+ import {createFeatureSelector, createSelector} from '@ngrx/store';
2
+ import {CompetitionHeaderState} from './competition-header.state';
3
+ import {COMPETITION_HEADER_FEATURE_NAME} from '../constants';
4
+ import { selectCompetitionIdAndVersionId } from 'myrtex-mf-ui-composite';
5
+
6
+ const competitionVersionsFeature =
7
+ createFeatureSelector<CompetitionHeaderState>(COMPETITION_HEADER_FEATURE_NAME);
8
+
9
+ export const selectCompetitionVersions = createSelector(
10
+ competitionVersionsFeature,
11
+ (state: CompetitionHeaderState) => state.competitionVersions
12
+ );
13
+
14
+ export const selectCompetitionDefaultVersionId = createSelector(
15
+ competitionVersionsFeature,
16
+ (state: CompetitionHeaderState) => state.defaultVersionVersionId
17
+ );
18
+
19
+ export const selectCompetitionSelectedVersionId = createSelector(
20
+ selectCompetitionIdAndVersionId,
21
+ selectCompetitionDefaultVersionId,
22
+ (cv: {competitionId: string | undefined, versionId: string | undefined}, dv: string) => {
23
+ return cv.versionId ? cv.versionId : dv;
24
+ }
25
+ );
26
+
27
+ export const selectCompetitionStatus = createSelector(
28
+ competitionVersionsFeature,
29
+ (state: CompetitionHeaderState) => state.competition
30
+ );
31
+
32
+ export const selectManualVersionStatusChanged = createSelector(
33
+ competitionVersionsFeature,
34
+ (state: CompetitionHeaderState) => state.manualVersionStatusChanged
35
+ );
36
+
37
+ export const selectActivityId = createSelector(
38
+ competitionVersionsFeature,
39
+ (state: CompetitionHeaderState) => state.activityId
40
+ );
41
+
42
+ export const selectCompetitionType = createSelector(
43
+ competitionVersionsFeature,
44
+ (state: CompetitionHeaderState) => state.type
45
+ );
@@ -0,0 +1,21 @@
1
+ import { CompetitionTypeEnum } from 'myrtex-mf-ui-composite';
2
+ import {CompetitionStatusModel} from '../models/competition-status.model';
3
+ import {CompetitionVersionModel} from '../models/competition-version.model';
4
+
5
+ export interface CompetitionHeaderState {
6
+ competition: CompetitionStatusModel | null;
7
+ competitionVersions: CompetitionVersionModel[];
8
+ defaultVersionVersionId: string;
9
+ manualVersionStatusChanged: boolean;
10
+ activityId: string | undefined;
11
+ type: CompetitionTypeEnum | undefined;
12
+ }
13
+
14
+ export const initialCompetitionHeaderState: CompetitionHeaderState = {
15
+ competition: null,
16
+ competitionVersions: [],
17
+ defaultVersionVersionId: '',
18
+ manualVersionStatusChanged: false,
19
+ activityId: undefined,
20
+ type: undefined
21
+ };
@@ -1,2 +1,6 @@
1
+ /*
2
+ * Public API Surface of myrtex-mf-competition
3
+ */
4
+
1
5
  export * from './lib/modules/competition-header/competition-header.module';
2
6
  export * from './lib/modules/competition-header/index';
package/src/test.ts ADDED
@@ -0,0 +1,27 @@
1
+ // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2
+
3
+ import 'zone.js';
4
+ import 'zone.js/testing';
5
+ import { getTestBed } from '@angular/core/testing';
6
+ import {
7
+ BrowserDynamicTestingModule,
8
+ platformBrowserDynamicTesting
9
+ } from '@angular/platform-browser-dynamic/testing';
10
+
11
+ declare const require: {
12
+ context(path: string, deep?: boolean, filter?: RegExp): {
13
+ <T>(id: string): T;
14
+ keys(): string[];
15
+ };
16
+ };
17
+
18
+ // First, initialize the Angular testing environment.
19
+ getTestBed().initTestEnvironment(
20
+ BrowserDynamicTestingModule,
21
+ platformBrowserDynamicTesting(),
22
+ );
23
+
24
+ // Then we find all the tests.
25
+ const context = require.context('./', true, /\.spec\.ts$/);
26
+ // And load the modules.
27
+ context.keys().map(context);
@@ -0,0 +1,15 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "../../tsconfig.json",
4
+ "compilerOptions": {
5
+ "outDir": "../../out-tsc/lib",
6
+ "declaration": true,
7
+ "declarationMap": true,
8
+ "inlineSources": true,
9
+ "types": []
10
+ },
11
+ "exclude": [
12
+ "src/test.ts",
13
+ "**/*.spec.ts"
14
+ ]
15
+ }
@@ -0,0 +1,10 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "./tsconfig.lib.json",
4
+ "compilerOptions": {
5
+ "declarationMap": false
6
+ },
7
+ "angularCompilerOptions": {
8
+ "compilationMode": "partial"
9
+ }
10
+ }
@@ -0,0 +1,17 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "../../tsconfig.json",
4
+ "compilerOptions": {
5
+ "outDir": "../../out-tsc/spec",
6
+ "types": [
7
+ "jasmine"
8
+ ]
9
+ },
10
+ "files": [
11
+ "src/test.ts"
12
+ ],
13
+ "include": [
14
+ "**/*.spec.ts",
15
+ "**/*.d.ts"
16
+ ]
17
+ }
@@ -1,76 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { EffectsModule } from '@ngrx/effects';
4
- import { StoreModule } from '@ngrx/store';
5
- import { CompetitionHeaderComponent } from './components/competition-header.component';
6
- import { FormsModule } from '@angular/forms';
7
- import { COMPETITION_HEADER_FEATURE_NAME } from './constants';
8
- import { competitionHeaderReducer } from './store/competition-header.reducers';
9
- import { CompetitionHeaderService } from './services/competition-header.service';
10
- import { CompetitionHeaderCustomButtonsDirective } from './directives/competition-header-custom-buttons.directive';
11
- import { NgSelectModule } from '@ng-select/ng-select';
12
- import { MyrtexMfUiCompositeModule, MyrtexUiComponentsModule, TenantSettingsModule } from 'myrtex-mf-ui-composite';
13
- import { MyrtexSignerModule } from 'myrtex-mf-signer';
14
- import { CompetitionHeaderEffects } from './store/competition-header.effects';
15
- import { SettingsService } from './services/settings.service';
16
- import { DropdownModule } from 'myrta-ui';
17
- import * as i0 from "@angular/core";
18
- import * as i1 from "@ngrx/effects";
19
- import * as i2 from "@ngrx/store";
20
- export class CompetitionHeaderModule {
21
- }
22
- CompetitionHeaderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
23
- CompetitionHeaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderModule, declarations: [CompetitionHeaderComponent,
24
- CompetitionHeaderCustomButtonsDirective], imports: [CommonModule, i1.EffectsFeatureModule, i2.StoreFeatureModule, TenantSettingsModule,
25
- FormsModule,
26
- MyrtexUiComponentsModule,
27
- MyrtexMfUiCompositeModule,
28
- MyrtexSignerModule,
29
- NgSelectModule,
30
- DropdownModule], exports: [CompetitionHeaderComponent,
31
- CompetitionHeaderCustomButtonsDirective] });
32
- CompetitionHeaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderModule, providers: [
33
- CompetitionHeaderService,
34
- SettingsService
35
- ], imports: [[
36
- CommonModule,
37
- EffectsModule.forFeature([CompetitionHeaderEffects]),
38
- StoreModule.forFeature(COMPETITION_HEADER_FEATURE_NAME, competitionHeaderReducer),
39
- TenantSettingsModule,
40
- FormsModule,
41
- MyrtexUiComponentsModule,
42
- MyrtexMfUiCompositeModule,
43
- MyrtexSignerModule,
44
- NgSelectModule,
45
- DropdownModule
46
- ]] });
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderModule, decorators: [{
48
- type: NgModule,
49
- args: [{
50
- declarations: [
51
- CompetitionHeaderComponent,
52
- CompetitionHeaderCustomButtonsDirective,
53
- ],
54
- imports: [
55
- CommonModule,
56
- EffectsModule.forFeature([CompetitionHeaderEffects]),
57
- StoreModule.forFeature(COMPETITION_HEADER_FEATURE_NAME, competitionHeaderReducer),
58
- TenantSettingsModule,
59
- FormsModule,
60
- MyrtexUiComponentsModule,
61
- MyrtexMfUiCompositeModule,
62
- MyrtexSignerModule,
63
- NgSelectModule,
64
- DropdownModule
65
- ],
66
- providers: [
67
- CompetitionHeaderService,
68
- SettingsService
69
- ],
70
- exports: [
71
- CompetitionHeaderComponent,
72
- CompetitionHeaderCustomButtonsDirective,
73
- ]
74
- }]
75
- }] });
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGV0aXRpb24taGVhZGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBldGl0aW9uLWhlYWRlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbkgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7O0FBNEIxQyxNQUFNLE9BQU8sdUJBQXVCOztxSEFBdkIsdUJBQXVCO3NIQUF2Qix1QkFBdUIsaUJBeEJoQywwQkFBMEI7UUFDMUIsdUNBQXVDLGFBR3ZDLFlBQVksa0RBR1osb0JBQW9CO1FBQ3BCLFdBQVc7UUFDWCx3QkFBd0I7UUFDeEIseUJBQXlCO1FBQ3pCLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2QsY0FBYyxhQU9kLDBCQUEwQjtRQUMxQix1Q0FBdUM7c0hBRzlCLHVCQUF1QixhQVR2QjtRQUNULHdCQUF3QjtRQUN4QixlQUFlO0tBQ2hCLFlBZlE7WUFDUCxZQUFZO1lBQ1osYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDcEQsV0FBVyxDQUFDLFVBQVUsQ0FBQywrQkFBK0IsRUFBRSx3QkFBd0IsQ0FBQztZQUNqRixvQkFBb0I7WUFDcEIsV0FBVztZQUNYLHdCQUF3QjtZQUN4Qix5QkFBeUI7WUFDekIsa0JBQWtCO1lBQ2xCLGNBQWM7WUFDZCxjQUFjO1NBQ2Y7NEZBVVUsdUJBQXVCO2tCQTFCbkMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osMEJBQTBCO3dCQUMxQix1Q0FBdUM7cUJBQ3hDO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO3dCQUNwRCxXQUFXLENBQUMsVUFBVSxDQUFDLCtCQUErQixFQUFFLHdCQUF3QixDQUFDO3dCQUNqRixvQkFBb0I7d0JBQ3BCLFdBQVc7d0JBQ1gsd0JBQXdCO3dCQUN4Qix5QkFBeUI7d0JBQ3pCLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxjQUFjO3FCQUNmO29CQUNELFNBQVMsRUFBRTt3QkFDVCx3QkFBd0I7d0JBQ3hCLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCwwQkFBMEI7d0JBQzFCLHVDQUF1QztxQkFDeEM7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBFZmZlY3RzTW9kdWxlIH0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XHJcbmltcG9ydCB7IFN0b3JlTW9kdWxlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xyXG5pbXBvcnQgeyBDb21wZXRpdGlvbkhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb21wZXRpdGlvbi1oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENPTVBFVElUSU9OX0hFQURFUl9GRUFUVVJFX05BTUUgfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IGNvbXBldGl0aW9uSGVhZGVyUmVkdWNlciB9IGZyb20gJy4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLnJlZHVjZXJzJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25IZWFkZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jb21wZXRpdGlvbi1oZWFkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBldGl0aW9uSGVhZGVyQ3VzdG9tQnV0dG9uc0RpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jb21wZXRpdGlvbi1oZWFkZXItY3VzdG9tLWJ1dHRvbnMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgTmdTZWxlY3RNb2R1bGUgfSBmcm9tICdAbmctc2VsZWN0L25nLXNlbGVjdCc7XHJcbmltcG9ydCB7IE15cnRleE1mVWlDb21wb3NpdGVNb2R1bGUsIE15cnRleFVpQ29tcG9uZW50c01vZHVsZSwgVGVuYW50U2V0dGluZ3NNb2R1bGUgfSBmcm9tICdteXJ0ZXgtbWYtdWktY29tcG9zaXRlJztcclxuaW1wb3J0IHsgTXlydGV4U2lnbmVyTW9kdWxlIH0gZnJvbSAnbXlydGV4LW1mLXNpZ25lcic7XHJcbmltcG9ydCB7IENvbXBldGl0aW9uSGVhZGVyRWZmZWN0cyB9IGZyb20gJy4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLmVmZmVjdHMnO1xyXG5pbXBvcnQgeyBTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ215cnRhLXVpJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBDb21wZXRpdGlvbkhlYWRlckNvbXBvbmVudCxcclxuICAgIENvbXBldGl0aW9uSGVhZGVyQ3VzdG9tQnV0dG9uc0RpcmVjdGl2ZSxcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEVmZmVjdHNNb2R1bGUuZm9yRmVhdHVyZShbQ29tcGV0aXRpb25IZWFkZXJFZmZlY3RzXSksXHJcbiAgICBTdG9yZU1vZHVsZS5mb3JGZWF0dXJlKENPTVBFVElUSU9OX0hFQURFUl9GRUFUVVJFX05BTUUsIGNvbXBldGl0aW9uSGVhZGVyUmVkdWNlciksXHJcbiAgICBUZW5hbnRTZXR0aW5nc01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTXlydGV4VWlDb21wb25lbnRzTW9kdWxlLFxyXG4gICAgTXlydGV4TWZVaUNvbXBvc2l0ZU1vZHVsZSxcclxuICAgIE15cnRleFNpZ25lck1vZHVsZSxcclxuICAgIE5nU2VsZWN0TW9kdWxlLFxyXG4gICAgRHJvcGRvd25Nb2R1bGVcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgQ29tcGV0aXRpb25IZWFkZXJTZXJ2aWNlLFxyXG4gICAgU2V0dGluZ3NTZXJ2aWNlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBDb21wZXRpdGlvbkhlYWRlckNvbXBvbmVudCxcclxuICAgIENvbXBldGl0aW9uSGVhZGVyQ3VzdG9tQnV0dG9uc0RpcmVjdGl2ZSxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21wZXRpdGlvbkhlYWRlck1vZHVsZSB7XHJcbn1cclxuIl19