Skip to content

Commit

Permalink
Merge pull request #22 from Astra-Interactive/fix-paging
Browse files Browse the repository at this point in the history
fix ratings gui paging
  • Loading branch information
makeevrserg authored Jun 10, 2024
2 parents 04defd8 + 194d7fb commit d2e7153
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 43 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ makeevrserg.java.ktarget=21
# Project
makeevrserg.project.name=AstraRating
makeevrserg.project.group=ru.astrainteractive.astrarating
makeevrserg.project.version.string=1.17.2
makeevrserg.project.version.string=1.17.3
makeevrserg.project.description=Rating plugin for EmpireProjekt
makeevrserg.project.developers=makeevrserg|Makeev Roman|makeevrserg@gmail.com
makeevrserg.project.url=https://empireprojekt.ru
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ package ru.astrainteractive.astrarating.gui.playerratings
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.runBlocking
import net.kyori.adventure.text.Component
import org.bukkit.entity.Player
import org.bukkit.event.inventory.ClickType
Expand All @@ -16,6 +14,9 @@ import ru.astrainteractive.astralibs.menu.holder.PlayerHolder
import ru.astrainteractive.astralibs.menu.inventory.PaginatedInventoryMenu
import ru.astrainteractive.astralibs.menu.inventory.model.InventorySize
import ru.astrainteractive.astralibs.menu.inventory.model.PageContext
import ru.astrainteractive.astralibs.menu.inventory.util.PageContextExt.getIndex
import ru.astrainteractive.astralibs.menu.inventory.util.PageContextExt.isFirstPage
import ru.astrainteractive.astralibs.menu.inventory.util.PageContextExt.isLastPage
import ru.astrainteractive.astralibs.menu.slot.InventorySlot
import ru.astrainteractive.astralibs.menu.slot.util.InventorySlotBuilderExt.editMeta
import ru.astrainteractive.astralibs.menu.slot.util.InventorySlotBuilderExt.setIndex
Expand Down Expand Up @@ -94,10 +95,7 @@ class PlayerRatingsGUI(
private val sortButton: InventorySlot
get() = sortSlots.playerRatingsSortSlot(
sort = playerRatingsComponent.model.value.sort,
click = {
playerRatingsComponent.onSortClicked()
setMenuItems()
}
click = { playerRatingsComponent.onSortClicked() }
)

override var pageContext: PageContext = PageContext(
Expand All @@ -117,45 +115,38 @@ class PlayerRatingsGUI(
}

private fun setManageButtons() {
prevPageButton.setInventorySlot()
nextPageButton.setInventorySlot()
if (!pageContext.isFirstPage) prevPageButton.setInventorySlot()
if (!pageContext.isLastPage) nextPageButton.setInventorySlot()
backPageButton.setInventorySlot()
}

override fun onInventoryCreated() {
playerRatingsComponent.model
.map { it.userRatings.size }
.onEach { pageContext = pageContext.copy(maxItems = it) }
.flowOn(dispatchers.Main)
.launchIn(menuScope)

playerRatingsComponent.model
.onEach {
pageContext = pageContext.copy(maxItems = it.userRatings.size)
if (it.isLoading) {
inventory.clear()
setManageButtons()
runBlocking { loadingIndicator.display() }
loadingIndicator.display()
} else {
runBlocking { loadingIndicator.stop() }
setMenuItems()
loadingIndicator.stop()
render()
}
}
.flowOn(dispatchers.Main)
.launchIn(menuScope)
}

@Suppress("CyclomaticComplexMethod", "LongMethod")
private fun setMenuItems(model: PlayerRatingsComponent.Model = playerRatingsComponent.model.value) {
override fun render() {
val model: PlayerRatingsComponent.Model = playerRatingsComponent.model.value
inventory.clear()
setManageButtons()
sortButton.setInventorySlot()
val list = model.userRatings
for (i in 0 until pageContext.maxItemsPerPage) {
val index = pageContext.maxItemsPerPage * pageContext.page + i
if (index >= list.size) {
continue
}
val userAndRating = list[index]
val index = pageContext.getIndex(i)
val userAndRating = list.getOrNull(index) ?: continue
val color = if (userAndRating.rating > 0) translation.positiveColor else translation.negativeColor
InventorySlot.Builder()
.setIndex(i)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ package ru.astrainteractive.astrarating.gui.ratings
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.runBlocking
import net.kyori.adventure.text.Component
import org.bukkit.entity.Player
import org.bukkit.event.inventory.InventoryClickEvent
Expand All @@ -15,6 +13,9 @@ import ru.astrainteractive.astralibs.menu.holder.PlayerHolder
import ru.astrainteractive.astralibs.menu.inventory.PaginatedInventoryMenu
import ru.astrainteractive.astralibs.menu.inventory.model.InventorySize
import ru.astrainteractive.astralibs.menu.inventory.model.PageContext
import ru.astrainteractive.astralibs.menu.inventory.util.PageContextExt.getIndex
import ru.astrainteractive.astralibs.menu.inventory.util.PageContextExt.isFirstPage
import ru.astrainteractive.astralibs.menu.inventory.util.PageContextExt.isLastPage
import ru.astrainteractive.astralibs.menu.slot.InventorySlot
import ru.astrainteractive.astralibs.menu.slot.util.InventorySlotBuilderExt.editMeta
import ru.astrainteractive.astralibs.menu.slot.util.InventorySlotBuilderExt.setIndex
Expand Down Expand Up @@ -111,45 +112,38 @@ class RatingsGUI(
}

private fun setManageButtons() {
prevPageButton.setInventorySlot()
nextPageButton.setInventorySlot()
if (!pageContext.isFirstPage) prevPageButton.setInventorySlot()
if (!pageContext.isLastPage) nextPageButton.setInventorySlot()
backPageButton.setInventorySlot()
}

override fun onInventoryCreated() {
allRatingsComponent.model
.map { it.userRatings.size }
.onEach { pageContext = pageContext.copy(maxItems = it) }
.flowOn(dispatchers.Main)
.launchIn(menuScope)

allRatingsComponent.model
.onEach {
pageContext = pageContext.copy(maxItems = it.userRatings.size)
if (it.isLoading) {
inventory.clear()
setManageButtons()
runBlocking { loadingIndicator.display() }
loadingIndicator.display()
} else {
runBlocking { loadingIndicator.stop() }
setMenuItems()
loadingIndicator.stop()
render()
}
}
.flowOn(dispatchers.Main)
.launchIn(menuScope)
}

@Suppress("LongMethod")
private fun setMenuItems(model: AllRatingsComponent.Model = allRatingsComponent.model.value) {
override fun render() {
val model: AllRatingsComponent.Model = allRatingsComponent.model.value
inventory.clear()
setManageButtons()
sortButton.setInventorySlot()

for (i in 0 until pageContext.maxItemsPerPage) {
val index = pageContext.maxItemsPerPage * pageContext.page + i
if (index >= model.userRatings.size) {
continue
}
val userAndRating = model.userRatings[index]
val index = pageContext.getIndex(i)
val userAndRating = model.userRatings.getOrNull(index) ?: continue
InventorySlot.Builder()
.setIndex(i)
.setItemStack(PlayerHeadUtil.getHead(userAndRating.userDTO.normalName))
Expand Down

0 comments on commit d2e7153

Please sign in to comment.