Skip to content

Commit 2e83355

Browse files
committed
wip
1 parent 121f4a2 commit 2e83355

File tree

2 files changed

+54
-11
lines changed

2 files changed

+54
-11
lines changed

packages/signals/signals/src/core/buffer/__tests__/buffer.test.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,49 @@ describe(getSignalBuffer, () => {
8686
await expect(buffer.getAll()).resolves.toHaveLength(0)
8787
})
8888
})
89+
90+
describe('SignalStoreSessionStorage', () => {
91+
let buffer: SignalBuffer
92+
93+
beforeEach(async () => {
94+
sessionStorage.clear()
95+
buffer = getSignalBuffer({
96+
maxBufferSize: 10,
97+
storageType: 'session',
98+
})
99+
await buffer.clear()
100+
})
101+
102+
it('should instantiate without throwing an error', () => {
103+
expect(buffer).toBeTruthy()
104+
})
105+
106+
it('should add and clear', async () => {
107+
const mockSignal = createInteractionSignal({
108+
eventType: 'submit',
109+
target: {},
110+
})
111+
await buffer.add(mockSignal)
112+
await expect(buffer.getAll()).resolves.toEqual([mockSignal])
113+
await buffer.clear()
114+
await expect(buffer.getAll()).resolves.toHaveLength(0)
115+
})
116+
117+
it('should delete older signals when maxBufferSize is exceeded', async () => {
118+
const signals = range(15).map((_, idx) =>
119+
createInteractionSignal({
120+
idx: idx,
121+
eventType: 'change',
122+
target: {},
123+
})
124+
)
125+
126+
for (const signal of signals) {
127+
await buffer.add(signal)
128+
}
129+
130+
const storedSignals = await buffer.getAll()
131+
expect(storedSignals).toHaveLength(10)
132+
expect(storedSignals).toEqual(signals.slice(-10).reverse())
133+
})
134+
})

packages/signals/signals/src/core/buffer/index.ts

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -141,25 +141,22 @@ export class SignalStoreSessionStorage implements SignalPersistentStorage {
141141
}
142142

143143
add(signal: Signal): void {
144-
const signals = this.getAllSync()
145-
signals.push(signal)
144+
const signals = this.getAll()
145+
signals.unshift(signal)
146146
if (signals.length > this.maxBufferSize) {
147-
signals.splice(0, signals.length - this.maxBufferSize)
147+
// delete the last one
148+
signals.splice(-1)
148149
}
149150
sessionStorage.setItem(this.storageKey, JSON.stringify(signals))
150151
}
151152

152-
getAll(): Promise<Signal[]> {
153-
return Promise.resolve(this.getAllSync())
153+
clear(): void {
154+
sessionStorage.removeItem(this.storageKey)
154155
}
155156

156-
private getAllSync(): Signal[] {
157+
getAll(): Signal[] {
157158
const signals = sessionStorage.getItem(this.storageKey)
158-
return signals ? JSON.parse(signals).reverse() : []
159-
}
160-
161-
clear(): void {
162-
sessionStorage.removeItem(this.storageKey)
159+
return signals ? JSON.parse(signals) : []
163160
}
164161
}
165162

0 commit comments

Comments
 (0)