13 changed files with 95 additions and 92 deletions
@ -1,58 +0,0 @@ |
|||||
///
|
|
||||
/// Copyright © 2016-2023 The Thingsboard Authors
|
|
||||
///
|
|
||||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||
/// you may not use this file except in compliance with the License.
|
|
||||
/// You may obtain a copy of the License at
|
|
||||
///
|
|
||||
/// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||
///
|
|
||||
/// Unless required by applicable law or agreed to in writing, software
|
|
||||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||
/// See the License for the specific language governing permissions and
|
|
||||
/// limitations under the License.
|
|
||||
///
|
|
||||
|
|
||||
import { Injectable } from '@angular/core'; |
|
||||
import { AttributeService } from '@core/http/attribute.service'; |
|
||||
import { Observable } from 'rxjs'; |
|
||||
import { initialUserPreferences, UserPreferences } from '@shared/models/user-preferences.models'; |
|
||||
import { getCurrentAuthUser } from '@core/auth/auth.selectors'; |
|
||||
import { Store } from '@ngrx/store'; |
|
||||
import { AppState } from '@core/core.state'; |
|
||||
import { EntityType } from '@shared/models/entity-type.models'; |
|
||||
import { AttributeScope } from '@shared/models/telemetry/telemetry.models'; |
|
||||
import { map } from 'rxjs/operators'; |
|
||||
import { AuthUser } from '@shared/models/user.model'; |
|
||||
|
|
||||
const USER_PREFERENCES_ATTRIBUTE_KEY = 'user_preferences'; |
|
||||
|
|
||||
@Injectable({ |
|
||||
providedIn: 'root' |
|
||||
}) |
|
||||
export class UserPreferencesService { |
|
||||
|
|
||||
constructor( |
|
||||
private store: Store<AppState>, |
|
||||
private attributeService: AttributeService |
|
||||
) {} |
|
||||
|
|
||||
public loadUserPreferences(authUser: AuthUser): Observable<UserPreferences> { |
|
||||
return this.attributeService.getEntityAttributes({id: authUser.userId, entityType: EntityType.USER}, |
|
||||
AttributeScope.SERVER_SCOPE, [USER_PREFERENCES_ATTRIBUTE_KEY], { ignoreLoading: true, ignoreErrors: true }).pipe( |
|
||||
map((attributes) => { |
|
||||
const found = ((attributes || []).find(data => data.key === USER_PREFERENCES_ATTRIBUTE_KEY)); |
|
||||
return found ? JSON.parse(found.value) : initialUserPreferences; |
|
||||
}) |
|
||||
); |
|
||||
} |
|
||||
|
|
||||
public saveUserPreferences(authUser: AuthUser, userPreferences: UserPreferences): Observable<void> { |
|
||||
return this.attributeService.saveEntityAttributes({id: authUser.userId, entityType: EntityType.USER}, |
|
||||
AttributeScope.SERVER_SCOPE, |
|
||||
[{key: USER_PREFERENCES_ATTRIBUTE_KEY, value: JSON.stringify(userPreferences)}], |
|
||||
{ ignoreLoading: true, ignoreErrors: true }); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
@ -0,0 +1,54 @@ |
|||||
|
///
|
||||
|
/// Copyright © 2016-2023 The Thingsboard Authors
|
||||
|
///
|
||||
|
/// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
/// you may not use this file except in compliance with the License.
|
||||
|
/// You may obtain a copy of the License at
|
||||
|
///
|
||||
|
/// http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
///
|
||||
|
/// Unless required by applicable law or agreed to in writing, software
|
||||
|
/// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
|
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
|
/// See the License for the specific language governing permissions and
|
||||
|
/// limitations under the License.
|
||||
|
///
|
||||
|
|
||||
|
import { Injectable } from '@angular/core'; |
||||
|
import { Observable } from 'rxjs'; |
||||
|
import { initialUserSettings, UserSettings } from '@shared/models/user-settings.models'; |
||||
|
import { map } from 'rxjs/operators'; |
||||
|
import { HttpClient } from '@angular/common/http'; |
||||
|
import { defaultHttpOptionsFromConfig } from '@core/http/http-utils'; |
||||
|
|
||||
|
@Injectable({ |
||||
|
providedIn: 'root' |
||||
|
}) |
||||
|
export class UserSettingsService { |
||||
|
|
||||
|
constructor( |
||||
|
private http: HttpClient |
||||
|
) {} |
||||
|
|
||||
|
public loadUserSettings(): Observable<UserSettings> { |
||||
|
return this.http.get<UserSettings>('/api/user/settings', defaultHttpOptionsFromConfig({ignoreLoading: true, ignoreErrors: true})).pipe( |
||||
|
map((settings) => (!settings || !Object.keys(settings).length) ? initialUserSettings : settings) |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
public saveUserSettings(userSettings: UserSettings): Observable<UserSettings> { |
||||
|
return this.http.post<UserSettings>('/api/user/settings', userSettings, |
||||
|
defaultHttpOptionsFromConfig({ignoreLoading: true, ignoreErrors: true})); |
||||
|
} |
||||
|
|
||||
|
public putUserSettings(userSettingsData: Partial<UserSettings>): Observable<void> { |
||||
|
return this.http.put<void>('/api/user/settings', userSettingsData, |
||||
|
defaultHttpOptionsFromConfig({ignoreLoading: true, ignoreErrors: true})); |
||||
|
} |
||||
|
|
||||
|
public deleteUserSettings(paths: string[]) { |
||||
|
return this.http.delete(`/api/user/settings/${paths.join(',')}`, |
||||
|
defaultHttpOptionsFromConfig({ignoreLoading: true, ignoreErrors: true})); |
||||
|
} |
||||
|
|
||||
|
} |
||||
Loading…
Reference in new issue