forked from DSpace/dspace-angular
-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy pathmy-dspace-configuration.service.ts
More file actions
158 lines (143 loc) · 5.34 KB
/
Copy pathmy-dspace-configuration.service.ts
File metadata and controls
158 lines (143 loc) · 5.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
import {
Inject,
Injectable,
InjectionToken,
} from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import {
APP_CONFIG,
AppConfig,
} from '@dspace/config/app-config.interface';
import { LinkService } from '@dspace/core/cache/builders/link.service';
import { RemoteDataBuildService } from '@dspace/core/cache/builders/remote-data-build.service';
import {
SortDirection,
SortOptions,
} from '@dspace/core/cache/models/sort-options.model';
import { RequestService } from '@dspace/core/data/request.service';
import { PaginationService } from '@dspace/core/pagination/pagination.service';
import { PaginationComponentOptions } from '@dspace/core/pagination/pagination-component-options.model';
import { RoleService } from '@dspace/core/roles/role.service';
import { RouteService } from '@dspace/core/services/route.service';
import { Context } from '@dspace/core/shared/context.model';
import { HALEndpointService } from '@dspace/core/shared/hal-endpoint.service';
import {
combineLatest,
Observable,
} from 'rxjs';
import {
first,
map,
} from 'rxjs/operators';
import { SearchConfigurationService } from '../shared/search/search-configuration.service';
import { SearchConfigurationOption } from '../shared/search/search-switch-configuration/search-configuration-option.model';
import { MyDSpaceConfigurationValueType } from './my-dspace-configuration-value-type';
export const MyDSpaceConfigurationToContextMap = new Map([
[MyDSpaceConfigurationValueType.Workspace, Context.Workspace],
[MyDSpaceConfigurationValueType.SupervisedItems, Context.SupervisedItems],
[MyDSpaceConfigurationValueType.Workflow, Context.Workflow],
]);
export const SEARCH_CONFIG_SERVICE: InjectionToken<SearchConfigurationService> = new InjectionToken<SearchConfigurationService>('searchConfigurationService');
/**
* Service that performs all actions that have to do with the current mydspace configuration
*/
@Injectable({ providedIn: 'root' })
export class MyDSpaceConfigurationService extends SearchConfigurationService {
/**
* Default pagination settings
*/
protected defaultPagination = Object.assign(new PaginationComponentOptions(), {
id: 'mydspace-page',
pageSize: 10,
currentPage: 1,
});
/**
* Default sort settings
*/
protected defaultSort = new SortOptions('dc.date.issued', SortDirection.DESC);
/**
* Default configuration parameter setting
*/
protected defaultConfiguration = 'workspace';
/**
* Default scope setting
*/
protected defaultScope = '';
/**
* Default query setting
*/
protected defaultQuery = '';
private isAdmin$: Observable<boolean>;
private isController$: Observable<boolean>;
private isSubmitter$: Observable<boolean>;
constructor(protected roleService: RoleService,
protected routeService: RouteService,
protected paginationService: PaginationService,
protected route: ActivatedRoute,
protected linkService: LinkService,
protected halService: HALEndpointService,
protected requestService: RequestService,
protected rdb: RemoteDataBuildService,
@Inject(APP_CONFIG) protected appConfig: AppConfig,
) {
super(
routeService,
paginationService,
route,
linkService,
halService,
requestService,
rdb,
appConfig,
);
// override parent class initialization
this._defaults = null;
this.initDefaults();
this.isSubmitter$ = this.roleService.isSubmitter();
this.isController$ = this.roleService.isController();
this.isAdmin$ = this.roleService.isAdmin();
}
/**
* Returns the list of available configuration depend on the user role
*
* @return {Observable<MyDSpaceConfigurationValueType[]>}
* Emits the available configuration list
*/
public getAvailableConfigurationTypes(): Observable<MyDSpaceConfigurationValueType[]> {
return combineLatest(this.isSubmitter$, this.isController$, this.isAdmin$).pipe(
first(),
map(([isSubmitter, isController, isAdmin]: [boolean, boolean, boolean]) => {
const availableConf: MyDSpaceConfigurationValueType[] = [];
if (isSubmitter) {
availableConf.push(MyDSpaceConfigurationValueType.Workspace);
}
if (isController || isAdmin) {
availableConf.push(MyDSpaceConfigurationValueType.SupervisedItems);
availableConf.push(MyDSpaceConfigurationValueType.Workflow);
}
availableConf.push(MyDSpaceConfigurationValueType.OtherWorkspace);
return availableConf;
}));
}
/**
* Returns the select options for the available configuration list
*
* @return {Observable<SearchConfigurationOption[]>}
* Emits the select options list
*/
public getAvailableConfigurationOptions(): Observable<SearchConfigurationOption[]> {
return this.getAvailableConfigurationTypes().pipe(
first(),
map((availableConfigurationTypes: MyDSpaceConfigurationValueType[]) => {
const configurationOptions: SearchConfigurationOption[] = [];
availableConfigurationTypes.forEach((type) => {
const value = type;
const label = `mydspace.show.${value}`;
const context = MyDSpaceConfigurationToContextMap.get(type);
configurationOptions.push({ value, label, context });
});
return configurationOptions;
}),
);
}
}