extend state service

This commit is contained in:
Robyn MacCallum 2021-12-16 09:39:46 -05:00
parent 81ee086be0
commit a49f9fad06
34 changed files with 185 additions and 47 deletions

View File

@ -1,6 +1,6 @@
import { NotificationsService } from 'jslib-common/abstractions/notifications.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';
import { StateService } from '../services/abstractions/state.service';
const IdleInterval = 60 * 5; // 5 minutes

View File

@ -25,7 +25,6 @@ import { ProviderService } from 'jslib-common/services/provider.service';
import { SearchService } from 'jslib-common/services/search.service';
import { SendService } from 'jslib-common/services/send.service';
import { SettingsService } from 'jslib-common/services/settings.service';
import { StateService } from 'jslib-common/services/state.service';
import { StateMigrationService } from 'jslib-common/services/stateMigration.service';
import { SyncService } from 'jslib-common/services/sync.service';
import { SystemService } from 'jslib-common/services/system.service';
@ -59,7 +58,6 @@ import { ProviderService as ProviderServiceAbstraction } from 'jslib-common/abst
import { SearchService as SearchServiceAbstraction } from 'jslib-common/abstractions/search.service';
import { SendService as SendServiceAbstraction } from 'jslib-common/abstractions/send.service';
import { SettingsService as SettingsServiceAbstraction } from 'jslib-common/abstractions/settings.service';
import { StateService as StateServiceAbstraction } from 'jslib-common/abstractions/state.service';
import { StorageService as StorageServiceAbstraction } from 'jslib-common/abstractions/storage.service';
import { SyncService as SyncServiceAbstraction } from 'jslib-common/abstractions/sync.service';
import { SystemService as SystemServiceAbstraction } from 'jslib-common/abstractions/system.service';
@ -81,6 +79,7 @@ import TabsBackground from './tabs.background';
import WebRequestBackground from './webRequest.background';
import WindowsBackground from './windows.background';
import { Utils } from 'jslib-common/misc/utils';
import { PopupUtilsService } from '../popup/services/popup-utils.service';
import AutofillService from '../services/autofill.service';
import { BrowserCryptoService } from '../services/browserCrypto.service';
@ -89,7 +88,8 @@ import BrowserPlatformUtilsService from '../services/browserPlatformUtils.servic
import BrowserStorageService from '../services/browserStorage.service';
import I18nService from '../services/i18n.service';
import VaultTimeoutService from '../services/vaultTimeout.service';
import { Utils } from 'jslib-common/misc/utils';
import { StateService } from '../services/state.service';
import { StateService as StateServiceAbstraction } from '../services/abstractions/state.service'
export default class MainBackground {
messagingService: MessagingServiceAbstraction;

View File

@ -19,13 +19,13 @@ import { Utils } from 'jslib-common/misc/utils';
import { PolicyType } from 'jslib-common/enums/policyType';
import { StateService } from '../services/abstractions/state.service';
import AddChangePasswordQueueMessage from './models/addChangePasswordQueueMessage';
import AddLoginQueueMessage from './models/addLoginQueueMessage';
import AddLoginRuntimeMessage from './models/addLoginRuntimeMessage';
import ChangePasswordRuntimeMessage from './models/changePasswordRuntimeMessage';
import LockedVaultPendingNotificationsItem from './models/lockedVaultPendingNotificationsItem';
import { NotificationQueueMessageType } from './models/notificationQueueMessageType';
import { StateService } from 'jslib-common/abstractions/state.service';
export default class NotificationBackground {

32
src/models/account.ts Normal file
View File

@ -0,0 +1,32 @@
import { Account as BaseAccount } from 'jslib-common/models/domain/account';
import { BrowserComponentState } from './browserComponentState';
import { BrowserGroupingsComponentState } from './browserGroupingsComponentState';
import { BrowserSendComponentState } from './browserSendComponentState';
export class Account extends BaseAccount {
groupings?: BrowserGroupingsComponentState;
send?: BrowserSendComponentState;
ciphers?: BrowserComponentState;
sendType?: BrowserComponentState;
constructor(init: Partial<Account>) {
super(init);
this.groupings = init.groupings ??
new BrowserGroupingsComponentState();
this.send = init.send ??
new BrowserSendComponentState();
this.ciphers = init.ciphers ??
new BrowserComponentState();
this.sendType = init.sendType ??
new BrowserComponentState();
}
reset() {
super.reset();
this.groupings = new BrowserGroupingsComponentState();
this.send = new BrowserSendComponentState();
this.ciphers = new BrowserComponentState();
this.sendType = new BrowserComponentState();
}
}

View File

@ -0,0 +1,4 @@
export class BrowserComponentState {
scrollY: number;
searchText: string;
}

View File

@ -0,0 +1,15 @@
import { CipherType } from 'jslib-common/enums/cipherType';
import { CipherView } from 'jslib-common/models/view/cipherView';
import { CollectionView } from 'jslib-common/models/view/collectionView';
import { FolderView } from 'jslib-common/models/view/folderView';
import { BrowserComponentState } from './browserComponentState';
export class BrowserGroupingsComponentState extends BrowserComponentState {
favoriteCiphers: CipherView[];
noFolderCiphers: CipherView[];
collectionCounts: Map<string, number>;
typeCounts: Map<CipherType, number>;
folders: FolderView[];
collections: CollectionView[];
deletedCount: number;
}

View File

@ -0,0 +1,8 @@
import { SendType } from 'jslib-common/enums/sendType';
import { SendView } from 'jslib-common/models/view/sendView';
import { BrowserComponentState } from './browserComponentState';
export class BrowserSendComponentState extends BrowserComponentState {
sends: SendView[];
typeCounts: Map<SendType, number>;
}

View File

@ -4,7 +4,7 @@ import { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.
import { EnvironmentService } from 'jslib-common/abstractions/environment.service';
import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/abstractions/state.service';
import { Utils } from 'jslib-common/misc/utils';

View File

@ -9,7 +9,7 @@ import { I18nService } from 'jslib-common/abstractions/i18n.service';
import { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service';
import { LogService } from 'jslib-common/abstractions/log.service';
import { MessagingService } from 'jslib-common/abstractions/messaging.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/state.service';
import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';
import { LockComponent as BaseLockComponent } from 'jslib-angular/components/lock.component';

View File

@ -37,4 +37,9 @@ export class LoginComponent extends BaseLoginComponent {
settings() {
this.router.navigate(['environment']);
}
async submit() {
await super.submit();
this.stateService.setRememberedEmail(this.email);
}
}

View File

@ -13,7 +13,7 @@ import { I18nService } from 'jslib-common/abstractions/i18n.service';
import { LogService } from 'jslib-common/abstractions/log.service';
import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/abstractions/state.service';
import { SyncService } from 'jslib-common/abstractions/sync.service';
import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';

View File

@ -1,4 +1,4 @@
import { Component, NgZone, ChangeDetectorRef } from '@angular/core';
import { ChangeDetectorRef, Component, NgZone } from '@angular/core';
import {
ActivatedRoute,
Router,
@ -21,8 +21,8 @@ import { TwoFactorComponent as BaseTwoFactorComponent } from 'jslib-angular/comp
import { PopupUtilsService } from '../services/popup-utils.service';
import { BrowserApi } from '../../browser/browserApi';
import { StateService } from 'jslib-common/abstractions/state.service';
import { BrowserApi } from '../../browser/browserApi';
const BroadcasterSubscriptionId = 'TwoFactorComponent';

View File

@ -11,7 +11,7 @@ import { PolicyService } from 'jslib-common/abstractions/policy.service';
import { SyncService } from 'jslib-common/abstractions/sync.service';
import { UpdateTempPasswordComponent as BaseUpdateTempPasswordComponent } from 'jslib-angular/components/update-temp-password.component';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/abstractions/state.service';
interface MasterPasswordScore {
Color: string;

View File

@ -23,11 +23,11 @@ import { BroadcasterService } from 'jslib-common/abstractions/broadcaster.servic
import { I18nService } from 'jslib-common/abstractions/i18n.service';
import { MessagingService } from 'jslib-common/abstractions/messaging.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../services/abstractions/state.service';
import { StorageService } from 'jslib-common/abstractions/storage.service';
import { routerTransition } from './app-routing.animations';
import { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service';
import { routerTransition } from './app-routing.animations';
@Component({
selector: 'app-root',

View File

@ -15,8 +15,8 @@ import { EventService } from 'jslib-common/abstractions/event.service';
import { I18nService } from 'jslib-common/abstractions/i18n.service';
import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { StateService } from '../../services/abstractions/state.service';
import { TotpService } from 'jslib-common/abstractions/totp.service';
import { StateService } from 'jslib-common/abstractions/state.service';
@Component({
selector: 'app-action-buttons',

View File

@ -4,7 +4,7 @@ import { Component } from '@angular/core';
import { I18nService } from 'jslib-common/abstractions/i18n.service';
import { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/abstractions/state.service';
import { CipherView } from 'jslib-common/models/view/cipherView';

View File

@ -24,7 +24,7 @@ import { TokenService } from 'jslib-common/abstractions/token.service';
import { PopupUtilsService } from '../services/popup-utils.service';
import { AddEditComponent as BaseAddEditComponent } from 'jslib-angular/components/send/add-edit.component';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/abstractions/state.service';
@Component({
selector: 'app-send-add-edit',

View File

@ -20,13 +20,13 @@ import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.se
import { PolicyService } from 'jslib-common/abstractions/policy.service';
import { SearchService } from 'jslib-common/abstractions/search.service';
import { SendService } from 'jslib-common/abstractions/send.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/abstractions/state.service';
import { SyncService } from 'jslib-common/abstractions/sync.service';
import { PopupUtilsService } from '../services/popup-utils.service';
import { SendType } from 'jslib-common/enums/sendType';
import { BrowserSendComponentState } from 'jslib-common/models/domain/browserSendComponentState';
import { BrowserSendComponentState } from '../../models/browserSendComponentState';
const ComponentId = 'SendComponent';
const ScopeStateId = ComponentId + 'Scope';

View File

@ -25,12 +25,12 @@ import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.se
import { PolicyService } from 'jslib-common/abstractions/policy.service';
import { SearchService } from 'jslib-common/abstractions/search.service';
import { SendService } from 'jslib-common/abstractions/send.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/abstractions/state.service';
import { PopupUtilsService } from '../services/popup-utils.service';
import { SendType } from 'jslib-common/enums/sendType';
import { BrowserComponentState } from 'jslib-common/models/domain/browserComponentState';
import { BrowserComponentState } from '../../models/browserComponentState';
const ComponentId = 'SendTypeComponent';
@ -88,7 +88,7 @@ export class SendTypeComponent extends BaseSendComponent {
// Restore state and remove reference
if (this.applySavedState && this.state != null) {
window.setTimeout(() => this.popupUtils.setContentScrollY(window, this.state.scrollY), 0);
window.setTimeout(() => this.popupUtils.setContentScrollY(window, this.state?.scrollY), 0);
}
this.stateService.setBrowserSendComponentState(null);

View File

@ -43,7 +43,6 @@ import { ProviderService } from 'jslib-common/abstractions/provider.service';
import { SearchService as SearchServiceAbstraction } from 'jslib-common/abstractions/search.service';
import { SendService } from 'jslib-common/abstractions/send.service';
import { SettingsService } from 'jslib-common/abstractions/settings.service';
import { StateService as StateServiceAbstraction } from 'jslib-common/abstractions/state.service';
import { StorageService } from 'jslib-common/abstractions/storage.service';
import { SyncService } from 'jslib-common/abstractions/sync.service';
import { TokenService } from 'jslib-common/abstractions/token.service';
@ -53,16 +52,17 @@ import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.serv
import { AutofillService } from '../../services/abstractions/autofill.service';
import BrowserMessagingService from '../../services/browserMessaging.service';
import { StateService as StateServiceAbstraction } from '../../services/abstractions/state.service';
import { AuthService } from 'jslib-common/services/auth.service';
import { ConsoleLogService } from 'jslib-common/services/consoleLog.service';
import { SearchService } from 'jslib-common/services/search.service';
import { StateService } from 'jslib-common/services/state.service';
import { PopupSearchService } from './popup-search.service';
import { PopupUtilsService } from './popup-utils.service';
import { ThemeType } from 'jslib-common/enums/themeType';
import { StateService } from '../../services/state.service';
function getBgService<T>(service: string) {
return (): T => {

View File

@ -13,8 +13,8 @@ import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.se
import { BrowserApi } from '../../browser/browserApi';
import { StateService } from '../../services/abstractions/state.service';
import { Utils } from 'jslib-common/misc/utils';
import { StateService } from 'jslib-common/abstractions/state.service';
interface ExcludedDomain {
uri: string;

View File

@ -8,8 +8,8 @@ import { UriMatchType } from 'jslib-common/enums/uriMatchType';
import { I18nService } from 'jslib-common/abstractions/i18n.service';
import { MessagingService } from 'jslib-common/abstractions/messaging.service';
import { StateService } from '../../services/abstractions/state.service';
import { TotpService } from 'jslib-common/abstractions/totp.service';
import { StateService } from 'jslib-common/abstractions/state.service';
@Component({
selector: 'app-options',

View File

@ -7,7 +7,7 @@ import { LogService } from 'jslib-common/abstractions/log.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { PremiumComponent as BasePremiumComponent } from 'jslib-angular/components/premium.component';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/abstractions/state.service';
@Component({
selector: 'app-premium',

View File

@ -23,8 +23,8 @@ import { PopupUtilsService } from '../services/popup-utils.service';
import { ModalService } from 'jslib-angular/services/modal.service';
import { StateService } from '../../services/abstractions/state.service';
import { SetPinComponent } from '../components/set-pin.component';
import { StateService } from 'jslib-common/abstractions/state.service';
const RateUrls = {
[DeviceType.ChromeExtension]:

View File

@ -21,7 +21,7 @@ import { OrganizationService } from 'jslib-common/abstractions/organization.serv
import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { PolicyService } from 'jslib-common/abstractions/policy.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/abstractions/state.service';
import { PopupUtilsService } from '../services/popup-utils.service';

View File

@ -12,7 +12,7 @@ import { LogService } from 'jslib-common/abstractions/log.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { AttachmentsComponent as BaseAttachmentsComponent } from 'jslib-angular/components/attachments.component';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/abstractions/state.service';
@Component({
selector: 'app-vault-attachments',

View File

@ -22,7 +22,7 @@ import { FolderService } from 'jslib-common/abstractions/folder.service';
import { I18nService } from 'jslib-common/abstractions/i18n.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { SearchService } from 'jslib-common/abstractions/search.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/abstractions/state.service';
import { CipherType } from 'jslib-common/enums/cipherType';
@ -34,8 +34,8 @@ import { TreeNode } from 'jslib-common/models/domain/treeNode';
import { CiphersComponent as BaseCiphersComponent } from 'jslib-angular/components/ciphers.component';
import { BrowserComponentState } from '../../models/browserComponentState';
import { PopupUtilsService } from '../services/popup-utils.service';
import { BrowserComponentState } from 'jslib-common/models/domain/browserComponentState';
const ComponentId = 'CiphersComponent';
@ -74,8 +74,8 @@ export class CiphersComponent extends BaseCiphersComponent implements OnInit, On
this.searchTypeSearch = !this.platformUtilsService.isSafari();
this.route.queryParams.pipe(first()).subscribe(async params => {
if (this.applySavedState) {
this.state = await this.stateService.getBrowserCipherComponentState();
if (this.state.searchText) {
// this.state = await this.stateService.getBrowserCipherComponentState();
if (this.state?.searchText) {
this.searchText = this.state.searchText;
}
}
@ -134,10 +134,10 @@ export class CiphersComponent extends BaseCiphersComponent implements OnInit, On
}
if (this.applySavedState && this.state != null) {
window.setTimeout(() => this.popupUtils.setContentScrollY(window, this.state.scrollY,
window.setTimeout(() => this.popupUtils.setContentScrollY(window, this.state?.scrollY,
this.scrollingContainer), 0);
}
this.stateService.setBrowserCipherComponentState(null);
// this.stateService.setBrowserCipherComponentState(null);
});
this.broadcasterService.subscribe(ComponentId, (message: any) => {
@ -230,6 +230,6 @@ export class CiphersComponent extends BaseCiphersComponent implements OnInit, On
scrollY: this.popupUtils.getContentScrollY(window, this.scrollingContainer),
searchText: this.searchText,
};
await this.stateService.setBrowserCipherComponentState(this.state);
// await this.stateService.setBrowserCipherComponentState(this.state);
}
}

View File

@ -26,8 +26,8 @@ import { AutofillService } from '../../services/abstractions/autofill.service';
import { PopupUtilsService } from '../services/popup-utils.service';
import { StateService } from '../../services/abstractions/state.service';
import { Utils } from 'jslib-common/misc/utils';
import { StateService } from 'jslib-common/abstractions/state.service';
const BroadcasterSubscriptionId = 'CurrentTabComponent';

View File

@ -27,12 +27,12 @@ import { CollectionService } from 'jslib-common/abstractions/collection.service'
import { FolderService } from 'jslib-common/abstractions/folder.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { SearchService } from 'jslib-common/abstractions/search.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { SyncService } from 'jslib-common/abstractions/sync.service';
import { GroupingsComponent as BaseGroupingsComponent } from 'jslib-angular/components/groupings.component';
import { PopupUtilsService } from '../services/popup-utils.service';
import { StateService } from 'src/services/abstractions/state.service';
const ComponentId = 'GroupingsComponent';
const ScopeStateId = ComponentId + 'Scope';
@ -88,7 +88,7 @@ export class GroupingsComponent extends BaseGroupingsComponent implements OnInit
async ngOnInit() {
this.searchTypeSearch = !this.platformUtilsService.isSafari();
this.showLeftHeader = !(this.popupUtils.inSidebar(window) && this.platformUtilsService.isFirefox());
this.stateService.setBrowserCipherComponentState(null);
// this.stateService.setBrowserCipherComponentState(null);
this.broadcasterService.subscribe(ComponentId, (message: any) => {
this.ngZone.run(async () => {
@ -108,8 +108,8 @@ export class GroupingsComponent extends BaseGroupingsComponent implements OnInit
const restoredScopeState = await this.restoreState();
this.route.queryParams.pipe(first()).subscribe(async params => {
this.state = (await this.stateService.getBrowserGroupingComponentState()) || {};
if (this.state.searchText) {
//this.state = (await this.stateService.getBrowserGroupingComponentState()) || {};
if (this.state?.searchText) {
this.searchText = this.state.searchText;
} else if (params.searchText) {
this.searchText = params.searchText;
@ -127,7 +127,7 @@ export class GroupingsComponent extends BaseGroupingsComponent implements OnInit
}
if (!this.syncService.syncInProgress || restoredScopeState) {
window.setTimeout(() => this.popupUtils.setContentScrollY(window, this.state.scrollY), 0);
window.setTimeout(() => this.popupUtils.setContentScrollY(window, this.state?.scrollY), 0);
}
});
}
@ -312,11 +312,11 @@ export class GroupingsComponent extends BaseGroupingsComponent implements OnInit
collections: this.collections,
deletedCount: this.deletedCount,
};
await this.stateService.setBrowserGroupingComponentState(this.scopeState);
// await this.stateService.setBrowserGroupingComponentState(this.scopeState);
}
private async restoreState(): Promise<boolean> {
this.scopeState = await this.stateService.getBrowserGroupingComponentState();
// this.scopeState = await this.stateService.getBrowserGroupingComponentState();
if (this.scopeState == null) {
return false;
}

View File

@ -22,7 +22,7 @@ import { LogService } from 'jslib-common/abstractions/log.service';
import { MessagingService } from 'jslib-common/abstractions/messaging.service';
import { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../../services/abstractions/state.service';
import { TokenService } from 'jslib-common/abstractions/token.service';
import { TotpService } from 'jslib-common/abstractions/totp.service';

View File

@ -0,0 +1,20 @@
import { StateService as BaseStateServiceAbstraction } from "jslib-common/abstractions/state.service";
import { StorageOptions } from "jslib-common/models/domain/storageOptions";
import { Account } from "src/models/account";
import { BrowserComponentState } from "src/models/browserComponentState";
import { BrowserGroupingsComponentState } from "src/models/browserGroupingsComponentState";
import { BrowserSendComponentState } from "src/models/browserSendComponentState";
export abstract class StateService extends BaseStateServiceAbstraction<Account> {
getBrowserGroupingComponentState: (options?: StorageOptions) => Promise<BrowserGroupingsComponentState>;
setBrowserGroupingComponentState: (value: BrowserGroupingsComponentState, options?: StorageOptions) => Promise<void>;
getBrowserCipherComponentState: (options?: StorageOptions) => Promise<BrowserComponentState>;
setBrowserCipherComponentState: (value: BrowserComponentState, options?: StorageOptions) => Promise<void>;
getBrowserSendComponentState: (options?: StorageOptions) => Promise<BrowserSendComponentState>;
setBrowserSendComponentState: (value: BrowserSendComponentState, options?: StorageOptions) => Promise<void>;
getBrowserSendTypeComponentState: (options?: StorageOptions) => Promise<BrowserComponentState>;
setBrowserSendTypeComponentState: (value: BrowserComponentState, options?: StorageOptions) => Promise<void>;
}

View File

@ -17,8 +17,8 @@ import AutofillField from '../models/autofillField';
import AutofillPageDetails from '../models/autofillPageDetails';
import AutofillScript from '../models/autofillScript';
import { StateService } from '../services/abstractions/state.service';
import { BrowserApi } from '../browser/browserApi';
import { StateService } from 'jslib-common/abstractions/state.service';
const CardAttributes: string[] = ['autoCompleteType', 'data-stripe', 'htmlName', 'htmlID', 'label-tag',
'placeholder', 'label-left', 'label-top', 'data-recurly'];

View File

@ -6,7 +6,7 @@ import { ThemeType } from 'jslib-common/enums/themeType';
import { MessagingService } from 'jslib-common/abstractions/messaging.service';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
import { StateService } from 'jslib-common/abstractions/state.service';
import { StateService } from '../services/abstractions/state.service';
const DialogPromiseExpiration = 600000; // 10 minutes

View File

@ -0,0 +1,54 @@
import { Account as BaseAccount } from 'jslib-common/models/domain/account';
import { StorageOptions } from 'jslib-common/models/domain/storageOptions';
import { StateService as BaseStateService } from 'jslib-common/services/state.service';
import { StateMigrationService } from 'jslib-common/services/stateMigration.service';
import { Account } from 'src/models/account';
import { BrowserComponentState } from '../models/browserComponentState';
import { BrowserGroupingsComponentState } from '../models/browserGroupingsComponentState';
import { BrowserSendComponentState } from '../models/browserSendComponentState';
import { StateService as StateServiceAbstraction } from './abstractions/state.service';
export class StateService extends BaseStateService<Account> implements StateServiceAbstraction {
async getBrowserGroupingComponentState(options?: StorageOptions): Promise<BrowserGroupingsComponentState> {
return (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())))?.groupings;
}
async setBrowserGroupingComponentState(value: BrowserGroupingsComponentState, options?: StorageOptions): Promise<void> {
const account = await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()));
account.groupings = value;
await this.saveAccount(account, this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()));
}
async getBrowserCipherComponentState(options?: StorageOptions): Promise<BrowserComponentState> {
return (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())))?.ciphers;
}
async setBrowserCipherComponentState(value: BrowserComponentState, options?: StorageOptions): Promise<void> {
const account = await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()));
account.ciphers = value;
await this.saveAccount(account, this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()));
}
async getBrowserSendComponentState(options?: StorageOptions): Promise<BrowserSendComponentState> {
return (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())))?.send;
}
async setBrowserSendComponentState(value: BrowserSendComponentState, options?: StorageOptions): Promise<void> {
const account = await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()));
account.send = value;
await this.saveAccount(account, this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()));
}
async getBrowserSendTypeComponentState(options?: StorageOptions): Promise<BrowserComponentState> {
return (await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())))?.sendType;
}
async setBrowserSendTypeComponentState(value: BrowserComponentState, options?: StorageOptions): Promise<void> {
const account = await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()));
account.sendType = value;
await this.saveAccount(account, this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()));
}
}