Skip to content

Commit f468036

Browse files
committed
feat(forms-manager): add support for configurable browser storage
Adds ability to use sessionStorage or other custom storage solution for persistence.
1 parent 07073ee commit f468036

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

projects/ngneat/forms-manager/src/lib/forms-manager.spec.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ import { fakeAsync, TestBed, tick } from '@angular/core/testing';
22
import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
33
import { NgFormsManager } from './forms-manager';
44
import { NgFormsManagerConfig } from './config';
5-
import { FORMS_MANAGER_STORAGE, LOCAL_STORAGE_TOKEN } from './injection-tokens';
5+
import {
6+
FORMS_MANAGER_SESSION_STORAGE_PROVIDER,
7+
FORMS_MANAGER_STORAGE,
8+
LOCAL_STORAGE_TOKEN,
9+
SESSION_STORAGE_TOKEN,
10+
} from './injection-tokens';
611
import { Provider } from '@angular/core';
712

813
// get forms snapshot
@@ -1454,6 +1459,10 @@ describe('FormsManager', () => {
14541459
'setItem',
14551460
'getItem',
14561461
]);
1462+
let sessionStorageMock: jasmine.SpyObj<Storage> = jasmine.createSpyObj('sessionStorage', [
1463+
'setItem',
1464+
'getItem',
1465+
]);
14571466
let customStorageMock: jasmine.SpyObj<Storage> = jasmine.createSpyObj('customStorage', [
14581467
'setItem',
14591468
'getItem',
@@ -1482,6 +1491,19 @@ describe('FormsManager', () => {
14821491
expect(localStorageMock.setItem).toHaveBeenCalled();
14831492
});
14841493

1494+
it('should store to sessionStorage when FORMS_MANAGER_SESSION_STORAGE_PROVIDER used', () => {
1495+
configureTestingModule([
1496+
{
1497+
provide: SESSION_STORAGE_TOKEN,
1498+
useValue: sessionStorageMock,
1499+
},
1500+
FORMS_MANAGER_SESSION_STORAGE_PROVIDER,
1501+
]);
1502+
1503+
expect(sessionStorageMock.getItem).toHaveBeenCalled();
1504+
expect(sessionStorageMock.setItem).toHaveBeenCalled();
1505+
});
1506+
14851507
it('should store to custom storage, provided through FORMS_MANAGER_STORAGE', () => {
14861508
configureTestingModule([
14871509
{

projects/ngneat/forms-manager/src/lib/forms-manager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export class NgFormsManager<FormsState = any> {
2323

2424
constructor(
2525
@Optional() @Inject(NG_FORMS_MANAGER_CONFIG) private config: NgFormsManagerConfig,
26-
@Optional() @Inject(FORMS_MANAGER_STORAGE) private readonly browserStorage?: Storage
26+
@Inject(FORMS_MANAGER_STORAGE) private readonly browserStorage?: Storage
2727
) {
2828
this.store = new FormsStore({} as FormsState);
2929
}

0 commit comments

Comments
 (0)