UNPKG

datajunction-ui

Version:
1 lines 8 kB
{"version":3,"file":"index-jSF4FAFZ.cjs","sources":["../src/app/pages/NotificationsPage/index.jsx"],"sourcesContent":["import { useContext, useEffect, useState } from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport LoadingIcon from '../../icons/LoadingIcon';\nimport { formatRelativeTime, groupByDate } from '../../utils/date';\n\n// Enrich history entries with node info from GraphQL\nconst enrichWithNodeInfo = (entries, nodes) => {\n const nodeMap = new Map(nodes.map(n => [n.name, n]));\n return entries.map(entry => {\n const node = nodeMap.get(entry.entity_name);\n return {\n ...entry,\n node_type: node?.type,\n display_name: node?.current?.displayName,\n };\n });\n};\n\nexport function NotificationsPage() {\n const djClient = useContext(DJClientContext).DataJunctionAPI;\n const [notifications, setNotifications] = useState([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n async function fetchNotifications() {\n try {\n const history = (await djClient.getSubscribedHistory(50)) || [];\n\n // Get unique entity names and fetch their info via GraphQL\n const nodeNames = Array.from(new Set(history.map(h => h.entity_name)));\n const nodes = nodeNames.length\n ? await djClient.getNodesByNames(nodeNames)\n : [];\n\n const enriched = enrichWithNodeInfo(history, nodes);\n setNotifications(enriched);\n } catch (error) {\n console.error('Error fetching notifications:', error);\n } finally {\n setLoading(false);\n }\n }\n fetchNotifications();\n }, [djClient]);\n\n const groupedNotifications = groupByDate(notifications);\n\n return (\n <div className=\"mid\">\n <div className=\"card\">\n <div className=\"card-header\">\n <h2>Notifications</h2>\n </div>\n <div className=\"card-body\">\n <div className=\"notifications-list\">\n {loading ? (\n <div style={{ padding: '2rem', textAlign: 'center' }}>\n <LoadingIcon />\n </div>\n ) : notifications.length === 0 ? (\n <div\n style={{\n padding: '2rem 1rem',\n color: '#666',\n textAlign: 'center',\n }}\n >\n No notifications yet. Watch nodes to receive updates when they\n change.\n </div>\n ) : (\n groupedNotifications.map(group => (\n <div key={group.label} className=\"notification-group\">\n <div\n style={{\n padding: '0.5rem 0.75rem',\n backgroundColor: '#f8f9fa',\n borderBottom: '1px solid #eee',\n fontSize: '12px',\n fontWeight: 600,\n color: '#666',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n {group.label}\n </div>\n {group.items.map(entry => {\n const version = entry.details?.version;\n const href = version\n ? `/nodes/${entry.entity_name}/revisions/${version}`\n : `/nodes/${entry.entity_name}/history`;\n\n return (\n <a\n key={entry.id}\n className=\"notification-item\"\n href={href}\n >\n <span className=\"notification-node\">\n <span className=\"notification-title\">\n {entry.display_name || entry.entity_name}\n {version && (\n <span className=\"badge version\">{version}</span>\n )}\n </span>\n {entry.display_name && (\n <span className=\"notification-entity\">\n {entry.entity_name}\n </span>\n )}\n </span>\n <span className=\"notification-meta\">\n {entry.node_type && (\n <span\n className={`node_type__${entry.node_type} badge node_type`}\n >\n {entry.node_type.toUpperCase()}\n </span>\n )}\n {entry.activity_type}d by{' '}\n <span style={{ color: '#333' }}>{entry.user}</span> ·{' '}\n {formatRelativeTime(entry.created_at)}\n </span>\n </a>\n );\n })}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["enrichWithNodeInfo","entries","nodes","nodeMap","entry","node","_a","NotificationsPage","djClient","useContext","DJClientContext","notifications","setNotifications","useState","loading","setLoading","useEffect","fetchNotifications","history","nodeNames","h","enriched","error","groupedNotifications","groupByDate","jsxs","jsx","LoadingIcon","group","version","href","formatRelativeTime"],"mappings":"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"}