@actuate-media/cms-admin 0.12.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/components/notification-bell.test.js +146 -0
- package/dist/__tests__/components/notification-bell.test.js.map +1 -1
- package/dist/__tests__/lib/notifications-client.test.js +129 -1
- package/dist/__tests__/lib/notifications-client.test.js.map +1 -1
- package/dist/components/NotificationBell.d.ts +30 -9
- package/dist/components/NotificationBell.d.ts.map +1 -1
- package/dist/components/NotificationBell.js +57 -5
- package/dist/components/NotificationBell.js.map +1 -1
- package/dist/lib/api.d.ts +8 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +10 -0
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/notifications-client.d.ts +53 -0
- package/dist/lib/notifications-client.d.ts.map +1 -1
- package/dist/lib/notifications-client.js +89 -1
- package/dist/lib/notifications-client.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/components/notification-bell.test.tsx +167 -1
- package/src/__tests__/lib/notifications-client.test.ts +145 -1
- package/src/components/NotificationBell.tsx +84 -12
- package/src/lib/api.ts +11 -0
- package/src/lib/notifications-client.ts +147 -1
|
@@ -197,4 +197,150 @@ describe('NotificationBell — dropdown', () => {
|
|
|
197
197
|
await waitFor(() => expect(onError).toHaveBeenCalledWith('CSRF'));
|
|
198
198
|
});
|
|
199
199
|
});
|
|
200
|
+
// ---------------------------------------------------------------------------
|
|
201
|
+
// SSE push channel (Phase 7) — verify the bell wires up subscribe(),
|
|
202
|
+
// processes incoming notifications, and tears down on unmount.
|
|
203
|
+
// ---------------------------------------------------------------------------
|
|
204
|
+
describe('NotificationBell — SSE push', () => {
|
|
205
|
+
function withSubscribe(api) {
|
|
206
|
+
let captured;
|
|
207
|
+
let closed = false;
|
|
208
|
+
const handle = {
|
|
209
|
+
close: () => {
|
|
210
|
+
closed = true;
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
const subscribe = vi.fn((opts) => {
|
|
214
|
+
captured = opts;
|
|
215
|
+
return handle;
|
|
216
|
+
});
|
|
217
|
+
return {
|
|
218
|
+
api: { ...api, subscribe },
|
|
219
|
+
push: (n) => captured?.onNotification(n),
|
|
220
|
+
pushError: (e) => captured?.onError?.(e),
|
|
221
|
+
isClosed: () => closed,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
it('subscribes on mount and bumps the badge when a new notification arrives', async () => {
|
|
225
|
+
const fake = createFakeApi();
|
|
226
|
+
const wired = withSubscribe(fake.api);
|
|
227
|
+
render(_jsx(NotificationBell, { api: wired.api, pollIntervalMs: 0 }));
|
|
228
|
+
await waitFor(() => expect(fake.api.unread).toHaveBeenCalled());
|
|
229
|
+
await act(async () => {
|
|
230
|
+
wired.push(row({ id: 'sse-1' }));
|
|
231
|
+
});
|
|
232
|
+
await waitFor(() => expect(screen.getByTestId('bell-badge').textContent).toBe('1'));
|
|
233
|
+
});
|
|
234
|
+
it('does not double-count a notification that arrives via both SSE and REST', async () => {
|
|
235
|
+
const fake = createFakeApi();
|
|
236
|
+
const wired = withSubscribe(fake.api);
|
|
237
|
+
fake.setRows([row({ id: 'race' })]);
|
|
238
|
+
render(_jsx(NotificationBell, { api: wired.api, pollIntervalMs: 0 }));
|
|
239
|
+
// Open the dropdown so the row is in `items` from the REST list.
|
|
240
|
+
await waitFor(() => expect(screen.getByTestId('bell-badge').textContent).toBe('1'));
|
|
241
|
+
fireEvent.click(screen.getByTestId('bell-button'));
|
|
242
|
+
await waitFor(() => expect(screen.getByTestId('bell-row-race')).toBeTruthy());
|
|
243
|
+
// Now push the same row via SSE — must NOT add a duplicate or
|
|
244
|
+
// bump the badge above 1.
|
|
245
|
+
await act(async () => {
|
|
246
|
+
wired.push(row({ id: 'race' }));
|
|
247
|
+
});
|
|
248
|
+
expect(screen.getAllByTestId('bell-row-race')).toHaveLength(1);
|
|
249
|
+
expect(screen.getByTestId('bell-badge').textContent).toBe('1');
|
|
250
|
+
});
|
|
251
|
+
it('prepends new pushed rows to the open dropdown', async () => {
|
|
252
|
+
const fake = createFakeApi();
|
|
253
|
+
const wired = withSubscribe(fake.api);
|
|
254
|
+
fake.setRows([row({ id: 'old' })]);
|
|
255
|
+
render(_jsx(NotificationBell, { api: wired.api, pollIntervalMs: 0 }));
|
|
256
|
+
await waitFor(() => expect(screen.getByTestId('bell-badge').textContent).toBe('1'));
|
|
257
|
+
fireEvent.click(screen.getByTestId('bell-button'));
|
|
258
|
+
await waitFor(() => expect(screen.getByTestId('bell-row-old')).toBeTruthy());
|
|
259
|
+
await act(async () => {
|
|
260
|
+
wired.push(row({ id: 'fresh' }));
|
|
261
|
+
});
|
|
262
|
+
const rows = screen.getAllByTestId(/^bell-row-/);
|
|
263
|
+
expect(rows[0].getAttribute('data-testid')).toBe('bell-row-fresh');
|
|
264
|
+
});
|
|
265
|
+
it('does NOT bump the badge when the pushed notification is already read', async () => {
|
|
266
|
+
const fake = createFakeApi();
|
|
267
|
+
const wired = withSubscribe(fake.api);
|
|
268
|
+
render(_jsx(NotificationBell, { api: wired.api, pollIntervalMs: 0 }));
|
|
269
|
+
await waitFor(() => expect(fake.api.unread).toHaveBeenCalled());
|
|
270
|
+
await act(async () => {
|
|
271
|
+
wired.push(row({ id: 'already-read', readAt: '2026-01-02T00:00:00.000Z' }));
|
|
272
|
+
});
|
|
273
|
+
// Already-read notifications still appear in the list when the
|
|
274
|
+
// user opens the dropdown with includeRead=true, but they must
|
|
275
|
+
// NOT register a fresh unread bump.
|
|
276
|
+
expect(screen.queryByTestId('bell-badge')).toBeNull();
|
|
277
|
+
});
|
|
278
|
+
it('closes the SSE subscription when the bell unmounts', async () => {
|
|
279
|
+
const fake = createFakeApi();
|
|
280
|
+
const wired = withSubscribe(fake.api);
|
|
281
|
+
const { unmount } = render(_jsx(NotificationBell, { api: wired.api, pollIntervalMs: 0 }));
|
|
282
|
+
await waitFor(() => expect(fake.api.unread).toHaveBeenCalled());
|
|
283
|
+
unmount();
|
|
284
|
+
expect(wired.isClosed()).toBe(true);
|
|
285
|
+
});
|
|
286
|
+
it('does not surface transient SSE errors via onError (poll loop handles convergence)', async () => {
|
|
287
|
+
const fake = createFakeApi();
|
|
288
|
+
const wired = withSubscribe(fake.api);
|
|
289
|
+
const onError = vi.fn();
|
|
290
|
+
render(_jsx(NotificationBell, { api: wired.api, pollIntervalMs: 0, onError: onError }));
|
|
291
|
+
await waitFor(() => expect(fake.api.unread).toHaveBeenCalled());
|
|
292
|
+
await act(async () => {
|
|
293
|
+
wired.pushError(new Event('error'));
|
|
294
|
+
});
|
|
295
|
+
// Deliberately quiet — see NotificationBell SSE handler comment.
|
|
296
|
+
expect(onError).not.toHaveBeenCalled();
|
|
297
|
+
});
|
|
298
|
+
it('mark-all-read failure does not drop SSE rows that arrived mid-flight', async () => {
|
|
299
|
+
const fake = createFakeApi();
|
|
300
|
+
const wired = withSubscribe(fake.api);
|
|
301
|
+
fake.setRows([row({ id: 'before' })]);
|
|
302
|
+
// Hold the markAllRead promise so we can interleave an SSE push.
|
|
303
|
+
let resolveMark = () => undefined;
|
|
304
|
+
wired.api.markAllRead.mockImplementationOnce(() => new Promise((resolve) => {
|
|
305
|
+
resolveMark = resolve;
|
|
306
|
+
}));
|
|
307
|
+
const onError = vi.fn();
|
|
308
|
+
render(_jsx(NotificationBell, { api: wired.api, pollIntervalMs: 0, onError: onError }));
|
|
309
|
+
await waitFor(() => expect(screen.getByTestId('bell-badge').textContent).toBe('1'));
|
|
310
|
+
fireEvent.click(screen.getByTestId('bell-button'));
|
|
311
|
+
await waitFor(() => expect(screen.getByTestId('bell-row-before')).toBeTruthy());
|
|
312
|
+
// Click mark-all — handler optimistically marks 'before' read,
|
|
313
|
+
// but the API promise is still pending.
|
|
314
|
+
await act(async () => {
|
|
315
|
+
fireEvent.click(screen.getByTestId('bell-mark-all'));
|
|
316
|
+
});
|
|
317
|
+
// While in flight, a fresh notification arrives via SSE.
|
|
318
|
+
await act(async () => {
|
|
319
|
+
wired.push(row({ id: 'mid-flight' }));
|
|
320
|
+
});
|
|
321
|
+
// Now resolve the API with a failure.
|
|
322
|
+
await act(async () => {
|
|
323
|
+
resolveMark({ ok: false, error: 'server', status: 500 });
|
|
324
|
+
// flush promise chain
|
|
325
|
+
await Promise.resolve();
|
|
326
|
+
});
|
|
327
|
+
expect(onError).toHaveBeenCalledWith('server');
|
|
328
|
+
// The original row was rolled back to unread...
|
|
329
|
+
expect(screen.getByTestId('bell-row-before').getAttribute('data-read')).toBe('false');
|
|
330
|
+
// ...and the SSE arrival is still present (not dropped by the
|
|
331
|
+
// legacy snapshot-replace rollback).
|
|
332
|
+
expect(screen.getByTestId('bell-row-mid-flight')).toBeTruthy();
|
|
333
|
+
});
|
|
334
|
+
it('still mounts cleanly when api.subscribe is undefined (no SSE support)', async () => {
|
|
335
|
+
const fake = createFakeApi();
|
|
336
|
+
// Strip the `subscribe` member entirely — defaultApi has it,
|
|
337
|
+
// but consumer-provided test APIs may not.
|
|
338
|
+
const apiWithoutSubscribe = { ...fake.api };
|
|
339
|
+
delete apiWithoutSubscribe.subscribe;
|
|
340
|
+
render(_jsx(NotificationBell, { api: apiWithoutSubscribe, pollIntervalMs: 0 }));
|
|
341
|
+
await waitFor(() => expect(fake.api.unread).toHaveBeenCalled());
|
|
342
|
+
// No crash, badge from unread() shows nothing, no items.
|
|
343
|
+
expect(screen.queryByTestId('bell-badge')).toBeNull();
|
|
344
|
+
});
|
|
345
|
+
});
|
|
200
346
|
//# sourceMappingURL=notification-bell.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-bell.test.js","sourceRoot":"","sources":["../../../src/__tests__/components/notification-bell.test.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"notification-bell.test.js","sourceRoot":"","sources":["../../../src/__tests__/components/notification-bell.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,12 @@ import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
2
2
|
const cmsApiMock = vi.fn();
|
|
3
3
|
vi.mock('../../lib/api.js', () => ({
|
|
4
4
|
cmsApi: (...args) => cmsApiMock(...args),
|
|
5
|
+
// SSE uses EventSource, which doesn't go through cmsApi. The
|
|
6
|
+
// helper resolves the URL via getApiBase() — return the production
|
|
7
|
+
// default so tests don't need to know the prefix.
|
|
8
|
+
getApiBase: () => '/api/cms',
|
|
5
9
|
}));
|
|
6
|
-
const { listNotifications, markAllNotificationsRead, markNotificationRead, notificationSummary, unreadCount, } = await import('../../lib/notifications-client.js');
|
|
10
|
+
const { listNotifications, markAllNotificationsRead, markNotificationRead, notificationSummary, subscribeNotificationStream, unreadCount, } = await import('../../lib/notifications-client.js');
|
|
7
11
|
function row(overrides = {}) {
|
|
8
12
|
return {
|
|
9
13
|
id: 'n-1',
|
|
@@ -152,4 +156,128 @@ describe('notificationSummary', () => {
|
|
|
152
156
|
}))).toMatch(/^Someone replied/);
|
|
153
157
|
});
|
|
154
158
|
});
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
// SSE push channel — subscribeNotificationStream
|
|
161
|
+
// ---------------------------------------------------------------------------
|
|
162
|
+
/**
|
|
163
|
+
* In-memory `EventSource` double. Tests drive the wire by invoking
|
|
164
|
+
* `emit(event, payload)`; the subscriber dispatches the right
|
|
165
|
+
* listener. We deliberately keep the shape minimal — `EventSource`
|
|
166
|
+
* has dozens of properties our admin doesn't touch.
|
|
167
|
+
*/
|
|
168
|
+
function makeFakeSource() {
|
|
169
|
+
const listeners = new Map();
|
|
170
|
+
let closed = false;
|
|
171
|
+
const source = {
|
|
172
|
+
addEventListener: (type, listener) => {
|
|
173
|
+
if (closed)
|
|
174
|
+
return;
|
|
175
|
+
let set = listeners.get(type);
|
|
176
|
+
if (!set) {
|
|
177
|
+
set = new Set();
|
|
178
|
+
listeners.set(type, set);
|
|
179
|
+
}
|
|
180
|
+
set.add(listener);
|
|
181
|
+
},
|
|
182
|
+
removeEventListener: (type, listener) => {
|
|
183
|
+
listeners.get(type)?.delete(listener);
|
|
184
|
+
},
|
|
185
|
+
close: () => {
|
|
186
|
+
closed = true;
|
|
187
|
+
listeners.clear();
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
return {
|
|
191
|
+
source,
|
|
192
|
+
listenerCount: (type) => listeners.get(type)?.size ?? 0,
|
|
193
|
+
isClosed: () => closed,
|
|
194
|
+
emit(type, payload) {
|
|
195
|
+
const set = listeners.get(type);
|
|
196
|
+
if (!set)
|
|
197
|
+
return;
|
|
198
|
+
const event = typeof payload === 'string'
|
|
199
|
+
? { data: payload }
|
|
200
|
+
: payload === undefined
|
|
201
|
+
? new Event(type)
|
|
202
|
+
: { data: JSON.stringify(payload) };
|
|
203
|
+
for (const l of [...set])
|
|
204
|
+
l(event);
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function startStream(fake, overrides = {}) {
|
|
209
|
+
return subscribeNotificationStream({
|
|
210
|
+
onNotification: () => undefined,
|
|
211
|
+
factory: () => fake.source,
|
|
212
|
+
...overrides,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
describe('subscribeNotificationStream', () => {
|
|
216
|
+
it('dispatches `notification` frames as Notification objects', () => {
|
|
217
|
+
const fake = makeFakeSource();
|
|
218
|
+
const seen = [];
|
|
219
|
+
startStream(fake, { onNotification: (n) => seen.push(n) });
|
|
220
|
+
fake.emit('notification', row({ id: 'sse-1' }));
|
|
221
|
+
expect(seen.map((n) => n.id)).toEqual(['sse-1']);
|
|
222
|
+
});
|
|
223
|
+
it('dispatches `ready` frames once via onReady', () => {
|
|
224
|
+
const fake = makeFakeSource();
|
|
225
|
+
const readys = [];
|
|
226
|
+
startStream(fake, { onReady: (p) => readys.push(p) });
|
|
227
|
+
fake.emit('ready', { userId: 'user-1' });
|
|
228
|
+
expect(readys).toEqual([{ userId: 'user-1' }]);
|
|
229
|
+
});
|
|
230
|
+
it('ignores malformed payloads (defence against wire drift)', () => {
|
|
231
|
+
const fake = makeFakeSource();
|
|
232
|
+
const seen = [];
|
|
233
|
+
startStream(fake, { onNotification: (n) => seen.push(n) });
|
|
234
|
+
// Missing id + payload — must not throw, must not deliver.
|
|
235
|
+
fake.emit('notification', { userId: 'user-1', createdAt: 'now' });
|
|
236
|
+
fake.emit('notification', 'not json');
|
|
237
|
+
expect(seen).toEqual([]);
|
|
238
|
+
});
|
|
239
|
+
it('removes its listeners and closes the underlying source on close()', () => {
|
|
240
|
+
const fake = makeFakeSource();
|
|
241
|
+
const handle = startStream(fake);
|
|
242
|
+
expect(fake.listenerCount('notification')).toBe(1);
|
|
243
|
+
expect(fake.listenerCount('ready')).toBe(1);
|
|
244
|
+
expect(fake.listenerCount('error')).toBe(1);
|
|
245
|
+
handle.close();
|
|
246
|
+
expect(fake.isClosed()).toBe(true);
|
|
247
|
+
// Second close() is a no-op — guards against double-unmount loops.
|
|
248
|
+
handle.close();
|
|
249
|
+
expect(fake.isClosed()).toBe(true);
|
|
250
|
+
});
|
|
251
|
+
it('returns a no-op handle when no EventSource is available', () => {
|
|
252
|
+
// No factory + no global EventSource (vitest jsdom env doesn't
|
|
253
|
+
// ship one). The subscriber must NOT throw — admin code must
|
|
254
|
+
// remain mountable in SSR / Node environments.
|
|
255
|
+
const handle = subscribeNotificationStream({
|
|
256
|
+
onNotification: () => undefined,
|
|
257
|
+
factory: () => null,
|
|
258
|
+
});
|
|
259
|
+
expect(() => handle.close()).not.toThrow();
|
|
260
|
+
});
|
|
261
|
+
it('forwards error events to onError without crashing the page', () => {
|
|
262
|
+
const fake = makeFakeSource();
|
|
263
|
+
const errors = [];
|
|
264
|
+
startStream(fake, { onError: (e) => errors.push(e) });
|
|
265
|
+
fake.emit('error', undefined);
|
|
266
|
+
expect(errors).toHaveLength(1);
|
|
267
|
+
});
|
|
268
|
+
it('builds the stream URL from getApiBase() so consumers with a custom prefix connect to the right host', () => {
|
|
269
|
+
// Custom factory inspects the URL it's handed. Verifies the
|
|
270
|
+
// subscriber composes /<base>/notifications/stream rather than
|
|
271
|
+
// hardcoding the production prefix.
|
|
272
|
+
const seen = [];
|
|
273
|
+
subscribeNotificationStream({
|
|
274
|
+
onNotification: () => undefined,
|
|
275
|
+
factory: (url) => {
|
|
276
|
+
seen.push(url);
|
|
277
|
+
return null;
|
|
278
|
+
},
|
|
279
|
+
});
|
|
280
|
+
expect(seen).toEqual(['/api/cms/notifications/stream']);
|
|
281
|
+
});
|
|
282
|
+
});
|
|
155
283
|
//# sourceMappingURL=notifications-client.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications-client.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/notifications-client.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"notifications-client.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/notifications-client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7D,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;AAC1B,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IACnD,6DAA6D;IAC7D,mEAAmE;IACnE,kDAAkD;IAClD,UAAU,EAAE,GAAG,EAAE,CAAC,UAAU;CAC7B,CAAC,CAAC,CAAA;AAEH,MAAM,EACJ,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,WAAW,GACZ,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAA;AAOrD,SAAS,GAAG,CAAC,YAAmC,EAAE;IAChD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE;YACP,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,IAAI;SACd;QACD,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,0BAA0B;QACrC,GAAG,SAAS;KACb,CAAA;AACH,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACd,UAAU,CAAC,SAAS,EAAE,CAAA;AACxB,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,UAAU,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAChE,MAAM,GAAG,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACrC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,UAAU,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC3D,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;QAC5D,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,6CAA6C,EAAE;YACrF,MAAM,EAAE,KAAK;SACd,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QACjD,UAAU,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC7D,MAAM,GAAG,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACrC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAM;QACnB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,UAAU,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAChE,MAAM,GAAG,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACrC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,GAAG,CAAC,EAAE;YAAE,OAAM;QAClB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,UAAU,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QACrE,MAAM,GAAG,GAAG,MAAM,WAAW,EAAE,CAAA;QAC/B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAM;QACnB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,UAAU,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QACjD,MAAM,GAAG,GAAG,MAAM,WAAW,EAAE,CAAA;QAC/B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,UAAU,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC/E,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAC7C,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,yBAAyB,EAAE;YACjE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,UAAU,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC9D,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAA;QAClC,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CACrC,kBAAkB,kBAAkB,CAAC,MAAM,CAAC,OAAO,EACnD,MAAM,CAAC,QAAQ,EAAE,CAClB,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,EAAE,CAAC,CAAA;QAC1C,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC1B,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC3C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,UAAU,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QACrE,MAAM,GAAG,GAAG,MAAM,wBAAwB,EAAE,CAAA;QAC5C,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAM;QACnB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,yBAAyB,EAAE;YACjE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,UAAU,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAChE,MAAM,GAAG,GAAG,MAAM,wBAAwB,EAAE,CAAA;QAC5C,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CACJ,mBAAmB,CACjB,GAAG,CAAC;YACF,OAAO,EAAE;gBACP,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,GAAG;gBACZ,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,YAAY;aACtB;SACF,CAAC,CACH,CACF,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CACJ,mBAAmB,CACjB,GAAG,CAAC;YACF,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE;gBACP,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,GAAG;gBACZ,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,UAAU;aACxB;SACF,CAAC,CACH,CACF,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CACJ,mBAAmB,CACjB,GAAG,CAAC;YACF,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE;gBACP,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,GAAG;gBACZ,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,SAAS;aACnB;SACF,CAAC,CACH,CACF,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CACJ,mBAAmB,CACjB,GAAG,CAAC;YACF,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;SACjF,CAAC,CACH,CACF,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,8EAA8E;AAC9E,iDAAiD;AACjD,8EAA8E;AAE9E;;;;;GAKG;AACH,SAAS,cAAc;IACrB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkD,CAAA;IAC3E,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,MAAM,MAAM,GAAoB;QAC9B,gBAAgB,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;YACnC,IAAI,MAAM;gBAAE,OAAM;YAClB,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;gBACf,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAC1B,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACnB,CAAC;QACD,mBAAmB,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;YACtC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;QACvC,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,MAAM,GAAG,IAAI,CAAA;YACb,SAAS,CAAC,KAAK,EAAE,CAAA;QACnB,CAAC;KACF,CAAA;IACD,OAAO;QACL,MAAM;QACN,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC;QAC/D,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM;QACtB,IAAI,CAAC,IAAY,EAAE,OAAgB;YACjC,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,CAAC,GAAG;gBAAE,OAAM;YAChB,MAAM,KAAK,GACT,OAAO,OAAO,KAAK,QAAQ;gBACzB,CAAC,CAAE,EAAE,IAAI,EAAE,OAAO,EAAmB;gBACrC,CAAC,CAAC,OAAO,KAAK,SAAS;oBACrB,CAAC,CAAE,IAAI,KAAK,CAAC,IAAI,CAAW;oBAC5B,CAAC,CAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAmB,CAAA;YAC3D,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;gBAAE,CAAC,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAClB,IAAuC,EACvC,YAAgD,EAAE;IAElD,OAAO,2BAA2B,CAAC;QACjC,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;QAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM;QAC1B,GAAG,SAAS;KACb,CAAC,CAAA;AACJ,CAAC;AAED,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,IAAI,GAAmB,EAAE,CAAA;QAC/B,WAAW,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAC1D,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAA8B,EAAE,CAAA;QAC5C,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACrD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,IAAI,GAAmB,EAAE,CAAA;QAC/B,WAAW,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAC1D,2DAA2D;QAC3D,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QACjE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAClD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,CAAC,KAAK,EAAE,CAAA;QACd,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,mEAAmE;QACnE,MAAM,CAAC,KAAK,EAAE,CAAA;QACd,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,+DAA+D;QAC/D,6DAA6D;QAC7D,+CAA+C;QAC/C,MAAM,MAAM,GAAG,2BAA2B,CAAC;YACzC,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;YAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;SACpB,CAAC,CAAA;QACF,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAY,EAAE,CAAA;QAC1B,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACrD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qGAAqG,EAAE,GAAG,EAAE;QAC7G,4DAA4D;QAC5D,+DAA+D;QAC/D,oCAAoC;QACpC,MAAM,IAAI,GAAa,EAAE,CAAA;QACzB,2BAA2B,CAAC;YAC1B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;YAC/B,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACd,OAAO,IAAI,CAAA;YACb,CAAC;SACF,CAAC,CAAA;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { type Notification, type NotificationOutcome } from '../lib/notifications-client.js';
|
|
2
|
+
import { type Notification, type NotificationOutcome, type NotificationStreamHandle, type NotificationStreamOptions } from '../lib/notifications-client.js';
|
|
3
3
|
/**
|
|
4
4
|
* Top-bar notification bell + dropdown panel. Slice 6 of Phase 3
|
|
5
5
|
* surfaces every collaboration event that affects the current user —
|
|
@@ -8,19 +8,25 @@ import { type Notification, type NotificationOutcome } from '../lib/notification
|
|
|
8
8
|
*
|
|
9
9
|
* Design choices:
|
|
10
10
|
*
|
|
11
|
-
* - **
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
11
|
+
* - **SSE push, with poll fallback (Phase 7).** A persistent
|
|
12
|
+
* `EventSource` subscribes to `/api/cms/notifications/stream` for
|
|
13
|
+
* instant delivery; new notifications bump the badge immediately
|
|
14
|
+
* instead of after the next 30 s poll tick. The poll loop is kept
|
|
15
|
+
* alive at a back-pressure-friendly cadence (default 60 s — twice
|
|
16
|
+
* the legacy 30 s value because SSE handles the common case) and
|
|
17
|
+
* acts as a backstop for:
|
|
18
|
+
* 1. multi-node deployments where the in-process bus only
|
|
19
|
+
* publishes to subscribers on the same node, and
|
|
20
|
+
* 2. proxies / browsers that silently drop the EventSource
|
|
21
|
+
* without firing `onerror`.
|
|
17
22
|
* - **Optimistic read state.** When the user clicks a notification we
|
|
18
23
|
* mark it read locally before the server confirms — so the bell
|
|
19
24
|
* counter feels instant. Server failures roll the state back via
|
|
20
25
|
* the `onError` toast.
|
|
21
26
|
* - **API injection.** The dependency-injection seam matches the rest
|
|
22
27
|
* of the admin (`CommentSidePanel.api`) so unit tests can substitute
|
|
23
|
-
* in-memory fakes
|
|
28
|
+
* in-memory fakes — including the EventSource subscriber, which
|
|
29
|
+
* isn't available in JSDOM by default.
|
|
24
30
|
*/
|
|
25
31
|
export interface NotificationsApi {
|
|
26
32
|
list: (opts: {
|
|
@@ -29,9 +35,24 @@ export interface NotificationsApi {
|
|
|
29
35
|
unread: () => Promise<NotificationOutcome<number>>;
|
|
30
36
|
markRead: (id: string) => Promise<NotificationOutcome<Notification>>;
|
|
31
37
|
markAllRead: () => Promise<NotificationOutcome<number>>;
|
|
38
|
+
/**
|
|
39
|
+
* Open a per-user SSE subscription. Implementations MUST always
|
|
40
|
+
* return a handle — even in environments without `EventSource`
|
|
41
|
+
* (SSR, JSDOM without a polyfill), where a no-op `{ close() {} }`
|
|
42
|
+
* is the right answer. The bell's effect calls `handle.close()`
|
|
43
|
+
* unconditionally on unmount; a `null` return would crash.
|
|
44
|
+
* Omitting the member entirely is the supported way to opt out of
|
|
45
|
+
* SSE (the bell then runs poll-only).
|
|
46
|
+
*/
|
|
47
|
+
subscribe?: (opts: NotificationStreamOptions) => NotificationStreamHandle;
|
|
32
48
|
}
|
|
33
49
|
export interface NotificationBellProps {
|
|
34
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* Polling cadence in milliseconds for the fallback loop. Default
|
|
52
|
+
* 60,000 (twice the pre-SSE value — push handles the common case).
|
|
53
|
+
* Pass 0 to disable polling entirely (relies on SSE only — only
|
|
54
|
+
* safe on single-node deployments).
|
|
55
|
+
*/
|
|
35
56
|
pollIntervalMs?: number;
|
|
36
57
|
/** Optional click hook — called with the notification when a row is clicked. */
|
|
37
58
|
onSelect?: (notification: Notification) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationBell.d.ts","sourceRoot":"","sources":["../../src/components/NotificationBell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAEvE,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,mBAAmB,
|
|
1
|
+
{"version":3,"file":"NotificationBell.d.ts","sourceRoot":"","sources":["../../src/components/NotificationBell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAEvE,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAO/B,MAAM,gCAAgC,CAAA;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,CAAC,IAAI,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IACvF,MAAM,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAA;IAClD,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAA;IACpE,WAAW,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAA;IACvD;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,wBAAwB,CAAA;CAC1E;AAUD,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAA;IAC/C,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,uCAAuC;IACvC,GAAG,CAAC,EAAE,gBAAgB,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,cAAuB,EACvB,QAAQ,EACR,OAAO,EACP,GAAgB,EAChB,SAAS,GACV,EAAE,qBAAqB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAyM3C"}
|
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
|
-
import { listNotifications as defaultListNotifications, markAllNotificationsRead as defaultMarkAllRead, markNotificationRead as defaultMarkRead, notificationSummary, unreadCount as defaultUnreadCount, } from '../lib/notifications-client.js';
|
|
4
|
+
import { listNotifications as defaultListNotifications, markAllNotificationsRead as defaultMarkAllRead, markNotificationRead as defaultMarkRead, notificationSummary, subscribeNotificationStream as defaultSubscribeStream, unreadCount as defaultUnreadCount, } from '../lib/notifications-client.js';
|
|
5
5
|
const defaultApi = {
|
|
6
6
|
list: (opts) => defaultListNotifications(opts),
|
|
7
7
|
unread: () => defaultUnreadCount(),
|
|
8
8
|
markRead: (id) => defaultMarkRead(id),
|
|
9
9
|
markAllRead: () => defaultMarkAllRead(),
|
|
10
|
+
subscribe: (opts) => defaultSubscribeStream(opts),
|
|
10
11
|
};
|
|
11
|
-
export function NotificationBell({ pollIntervalMs =
|
|
12
|
+
export function NotificationBell({ pollIntervalMs = 60_000, onSelect, onError, api = defaultApi, className, }) {
|
|
12
13
|
const [open, setOpen] = useState(false);
|
|
13
14
|
const [unread, setUnread] = useState(0);
|
|
14
15
|
const [items, setItems] = useState([]);
|
|
15
16
|
const [loading, setLoading] = useState(false);
|
|
16
17
|
const mountedRef = useRef(true);
|
|
18
|
+
// Set of notification IDs we've already rendered. The SSE handler
|
|
19
|
+
// consults this synchronously so duplicate deliveries (REST refresh
|
|
20
|
+
// + SSE push, or two SSE retries) don't double-bump the badge.
|
|
21
|
+
// Kept in sync with `items` via an effect — the items state is the
|
|
22
|
+
// source of truth; this ref is a derived O(1) lookup index.
|
|
23
|
+
const seenIdsRef = useRef(new Set());
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
seenIdsRef.current = new Set(items.map((n) => n.id));
|
|
26
|
+
}, [items]);
|
|
17
27
|
useEffect(() => {
|
|
18
28
|
return () => {
|
|
19
29
|
mountedRef.current = false;
|
|
@@ -50,6 +60,37 @@ export function NotificationBell({ pollIntervalMs = 30_000, onSelect, onError, a
|
|
|
50
60
|
const id = setInterval(() => void refreshUnread(), pollIntervalMs);
|
|
51
61
|
return () => clearInterval(id);
|
|
52
62
|
}, [refreshUnread, pollIntervalMs]);
|
|
63
|
+
// SSE push subscription. Bumps the badge + prepends the new row to
|
|
64
|
+
// the open dropdown the instant the server publishes. Falls back
|
|
65
|
+
// silently when the api/runtime doesn't support EventSource — the
|
|
66
|
+
// poll loop above keeps the bell correct in that case.
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
if (!api.subscribe)
|
|
69
|
+
return;
|
|
70
|
+
const handle = api.subscribe({
|
|
71
|
+
onNotification: (n) => {
|
|
72
|
+
if (!mountedRef.current)
|
|
73
|
+
return;
|
|
74
|
+
// Defensive: SSE events can race with REST refreshes (or with
|
|
75
|
+
// their own retries). The seen-id ref is updated
|
|
76
|
+
// synchronously so a second delivery of the same row is a
|
|
77
|
+
// no-op for BOTH `items` and the unread badge — guarding only
|
|
78
|
+
// setItems would still let the counter drift.
|
|
79
|
+
if (seenIdsRef.current.has(n.id))
|
|
80
|
+
return;
|
|
81
|
+
seenIdsRef.current.add(n.id);
|
|
82
|
+
setItems((arr) => [n, ...arr]);
|
|
83
|
+
if (!n.readAt)
|
|
84
|
+
setUnread((v) => v + 1);
|
|
85
|
+
},
|
|
86
|
+
onError: () => {
|
|
87
|
+
// Don't surface every transient SSE disconnect as a UI error —
|
|
88
|
+
// the browser auto-reconnects, and the poll loop keeps state
|
|
89
|
+
// converging. We deliberately stay quiet here.
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
return () => handle.close();
|
|
93
|
+
}, [api]);
|
|
53
94
|
useEffect(() => {
|
|
54
95
|
if (!open)
|
|
55
96
|
return;
|
|
@@ -71,14 +112,25 @@ export function NotificationBell({ pollIntervalMs = 30_000, onSelect, onError, a
|
|
|
71
112
|
onSelect?.(n);
|
|
72
113
|
}, [api, onError, onSelect]);
|
|
73
114
|
const handleMarkAll = useCallback(async () => {
|
|
74
|
-
|
|
115
|
+
// Snapshot ONLY the previously-unread IDs (and their original
|
|
116
|
+
// readAt values, which are null by definition). On rollback we
|
|
117
|
+
// restore those specific rows and leave anything that arrived
|
|
118
|
+
// via SSE while the request was in flight alone — otherwise a
|
|
119
|
+
// failed mark-all-read would drop fresh notifications.
|
|
120
|
+
const previouslyUnreadIds = items.filter((n) => n.readAt === null).map((n) => n.id);
|
|
121
|
+
if (previouslyUnreadIds.length === 0)
|
|
122
|
+
return;
|
|
123
|
+
const ids = new Set(previouslyUnreadIds);
|
|
75
124
|
const now = new Date().toISOString();
|
|
76
|
-
setItems(
|
|
125
|
+
setItems((arr) => arr.map((n) => (ids.has(n.id) ? { ...n, readAt: n.readAt ?? now } : n)));
|
|
77
126
|
setUnread(0);
|
|
78
127
|
const out = await api.markAllRead();
|
|
79
128
|
if (!out.ok) {
|
|
80
129
|
onError?.(out.error);
|
|
81
|
-
|
|
130
|
+
// Functional rollback: only revert the rows we optimistically
|
|
131
|
+
// marked. Anything mid-flight (SSE arrivals, locally-added) is
|
|
132
|
+
// untouched.
|
|
133
|
+
setItems((arr) => arr.map((n) => (ids.has(n.id) ? { ...n, readAt: null } : n)));
|
|
82
134
|
await refreshUnread();
|
|
83
135
|
}
|
|
84
136
|
}, [api, items, onError, refreshUnread]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationBell.js","sourceRoot":"","sources":["../../src/components/NotificationBell.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvE,OAAO,
|
|
1
|
+
{"version":3,"file":"NotificationBell.js","sourceRoot":"","sources":["../../src/components/NotificationBell.tsx"],"names":[],"mappings":"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"}
|
package/dist/lib/api.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
export declare function setApiBase(path: string): void;
|
|
2
|
+
/**
|
|
3
|
+
* Current API base path. Exposed so non-`fetch` consumers (in
|
|
4
|
+
* particular `EventSource` for SSE channels) can resolve URLs against
|
|
5
|
+
* the same prefix configured via `setApiBase()`. Keep this read-only
|
|
6
|
+
* — mutation must always flow through `setApiBase()` so we never have
|
|
7
|
+
* two callers with diverging views of the base.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getApiBase(): string;
|
|
2
10
|
export declare function ensureCsrfToken(): Promise<void>;
|
|
3
11
|
export declare function cmsApi<T = unknown>(endpoint: string, options?: RequestInit): Promise<{
|
|
4
12
|
data?: T;
|
package/dist/lib/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,QAEtC;AAmBD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAcrD;AAcD,wBAAsB,MAAM,CAAC,CAAC,GAAG,OAAO,EACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAsCvD"}
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,QAEtC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAmBD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAcrD;AAcD,wBAAsB,MAAM,CAAC,CAAC,GAAG,OAAO,EACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAsCvD"}
|