Add announcement
This commit is contained in:
parent
7ac2e1c208
commit
594ac544dd
18 changed files with 285 additions and 8 deletions
|
@ -95,7 +95,8 @@ class WebSocketClient {
|
|||
TrackRepository.handler,
|
||||
UserRepository.handler,
|
||||
WorkGroupRepository.handler,
|
||||
PostRepository.handler
|
||||
PostRepository.handler,
|
||||
AnnouncementRepository.handler
|
||||
)
|
||||
|
||||
init {
|
||||
|
|
|
@ -2,6 +2,7 @@ package de.kif.frontend
|
|||
|
||||
import de.kif.frontend.views.board.initBoard
|
||||
import de.kif.frontend.views.calendar.initCalendar
|
||||
import de.kif.frontend.views.initAnnouncement
|
||||
import de.kif.frontend.views.table.initTableLayout
|
||||
import de.kif.frontend.views.initWorkGroupConstraints
|
||||
import de.kif.frontend.views.overview.initOverviewMain
|
||||
|
@ -34,4 +35,7 @@ fun main() = init {
|
|||
if (document.getElementsByClassName("board").length > 0) {
|
||||
initBoard()
|
||||
}
|
||||
if (document.getElementsByClassName("announcement").length > 0) {
|
||||
initAnnouncement()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
package de.kif.frontend.repository
|
||||
|
||||
import de.kif.common.Message
|
||||
import de.kif.common.Repository
|
||||
import de.kif.common.RepositoryType
|
||||
import de.kif.common.Serialization
|
||||
import de.kif.common.model.Room
|
||||
import de.kif.frontend.MessageHandler
|
||||
import de.westermann.kobserve.event.EventHandler
|
||||
import kotlinx.serialization.DynamicObjectParser
|
||||
import kotlinx.serialization.list
|
||||
import kotlinx.serialization.serializer
|
||||
|
||||
object AnnouncementRepository {
|
||||
|
||||
private val prefix = js("prefix")
|
||||
|
||||
val onUpdate = EventHandler<Unit>()
|
||||
|
||||
private val parser = DynamicObjectParser()
|
||||
|
||||
suspend fun getAnnouncement(): String {
|
||||
val json = repositoryGet("$prefix/api/announcement") ?: return ""
|
||||
return parser.parse(json, String.serializer())
|
||||
}
|
||||
|
||||
suspend fun setAnnouncement(value: String){
|
||||
return repositoryPost("$prefix/api/announcement", Serialization.stringify(String.serializer(), value))
|
||||
?: throw IllegalStateException("Cannot set announcement!")
|
||||
}
|
||||
|
||||
val handler = object : MessageHandler(RepositoryType.ROOM) {
|
||||
|
||||
override fun onCreate(id: Long) {}
|
||||
|
||||
override fun onUpdate(id: Long) = onUpdate.emit(Unit)
|
||||
|
||||
override fun onDelete(id: Long) {}
|
||||
}
|
||||
}
|
21
src/jsMain/kotlin/de/kif/frontend/views/Announcements.kt
Normal file
21
src/jsMain/kotlin/de/kif/frontend/views/Announcements.kt
Normal file
|
@ -0,0 +1,21 @@
|
|||
package de.kif.frontend.views
|
||||
|
||||
import de.kif.frontend.launch
|
||||
import de.kif.frontend.repository.AnnouncementRepository
|
||||
import org.w3c.dom.HTMLElement
|
||||
import org.w3c.dom.get
|
||||
import kotlin.browser.document
|
||||
|
||||
fun initAnnouncement() {
|
||||
val announcement = document.getElementsByClassName("announcement")[0] as? HTMLElement ?: return
|
||||
val span = announcement.children[0] as? HTMLElement ?: return
|
||||
|
||||
AnnouncementRepository.onUpdate {
|
||||
launch {
|
||||
val text = AnnouncementRepository.getAnnouncement()
|
||||
|
||||
announcement.classList.toggle("announcement-blank", text.isBlank())
|
||||
span.textContent = text
|
||||
}
|
||||
}
|
||||
}
|
|
@ -205,3 +205,10 @@
|
|||
margin-top: -1px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.board-announcement {
|
||||
position: fixed;
|
||||
bottom: 3rem;
|
||||
z-index: 10;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
|
|
@ -181,4 +181,21 @@ body.offline {
|
|||
.offline-banner {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.announcement {
|
||||
height: 3rem;
|
||||
line-height: 3rem;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
font-size: 1.2rem;
|
||||
background-color: var(--primary-color);
|
||||
color: var(--primary-text-color);
|
||||
box-shadow: 0 1px 4px var(--shadow-color);
|
||||
margin-bottom: 1rem;
|
||||
display: block;
|
||||
|
||||
&.announcement-blank {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue