feat(workbench): persist topbar notification state
This commit is contained in:
38
web/src/services/notificationStates.js
Normal file
38
web/src/services/notificationStates.js
Normal file
@@ -0,0 +1,38 @@
|
||||
import { apiRequest } from './api.js'
|
||||
|
||||
function normalizeStateItem(item) {
|
||||
const notificationId = String(item?.notification_id || item?.notificationId || '').trim()
|
||||
if (!notificationId) {
|
||||
return null
|
||||
}
|
||||
|
||||
return {
|
||||
notification_id: notificationId,
|
||||
read: Boolean(item?.read),
|
||||
hidden: Boolean(item?.hidden),
|
||||
context_json: item?.context_json && typeof item.context_json === 'object'
|
||||
? item.context_json
|
||||
: {}
|
||||
}
|
||||
}
|
||||
|
||||
export async function fetchNotificationStates() {
|
||||
const payload = await apiRequest('/notification-states')
|
||||
return Array.isArray(payload?.states) ? payload.states : []
|
||||
}
|
||||
|
||||
export async function patchNotificationStates(states = []) {
|
||||
const normalizedStates = (Array.isArray(states) ? states : [])
|
||||
.map(normalizeStateItem)
|
||||
.filter(Boolean)
|
||||
|
||||
if (!normalizedStates.length) {
|
||||
return []
|
||||
}
|
||||
|
||||
const payload = await apiRequest('/notification-states', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ states: normalizedStates })
|
||||
})
|
||||
return Array.isArray(payload?.states) ? payload.states : []
|
||||
}
|
||||
Reference in New Issue
Block a user