(state)
| 110 | } |
| 111 | |
| 112 | export function selectPinnedMessage(state) { |
| 113 | const metadata = selectMetadata(state); |
| 114 | const { messages, dismissed } = selectMessages(state); |
| 115 | |
| 116 | if (metadata?.app?.banner) { |
| 117 | return { safeHtmlBody: metadata.app.banner }; |
| 118 | } |
| 119 | |
| 120 | if (!messages) { |
| 121 | return null; |
| 122 | } |
| 123 | |
| 124 | const activeMessages = messages |
| 125 | .filter(({ id }) => !dismissed.includes(id)) |
| 126 | .filter(({ displayUntil }) => { |
| 127 | return !displayUntil || Date.now() <= new Date(displayUntil); |
| 128 | }); |
| 129 | |
| 130 | if (activeMessages.length <= 0) { |
| 131 | return null; |
| 132 | } |
| 133 | |
| 134 | return activeMessages[0]; |
| 135 | } |
| 136 | |
| 137 | export function selectPages(state) { |
| 138 | return selectMetadata(state).pages; |
no test coverage detected