Sort Admin Board by Least or Most votes
This commit is contained in:
parent
f1ccac7963
commit
7f9a65760f
@ -38,6 +38,8 @@ const loadAdminBoardPage = async () => {
|
||||
<option value="newest" selected>Sort by Date</option>
|
||||
<option value="name">Sort by Name</option>
|
||||
<option value="recent-comments">Newest Comments</option>
|
||||
<option value="least-votes">Least Votes</option>
|
||||
<option value="most-votes">Most Votes</option>
|
||||
</select>
|
||||
<div id="encrypted-cards-container" class="cards-container" style="margin-top: 20px;"></div>
|
||||
<div id="publish-card-view" class="publish-card-view" style="display: none; text-align: left; padding: 20px;">
|
||||
@ -340,6 +342,95 @@ const fetchAllEncryptedCards = async (isRefresh = false) => {
|
||||
finalCards.sort((a, b) =>
|
||||
(b.newestCommentTimestamp || 0) - (a.newestCommentTimestamp || 0)
|
||||
)
|
||||
} else if (selectedSort === 'least-votes') {
|
||||
// TODO: Add the logic to sort by LEAST total ADMIN votes, then totalYesWeight
|
||||
const minterGroupMembers = await fetchMinterGroupMembers()
|
||||
const minterAdmins = await fetchMinterGroupAdmins()
|
||||
for (const finalCard of finalCards) {
|
||||
try {
|
||||
const pollName = finalCard.decryptedCardData.poll
|
||||
// If card or poll is missing, default to zero
|
||||
if (!pollName) {
|
||||
finalCard._adminTotalVotes = 0
|
||||
finalCard._yesWeight = 0
|
||||
continue
|
||||
}
|
||||
const pollResults = await fetchPollResults(pollName)
|
||||
if (!pollResults || pollResults.error) {
|
||||
finalCard._adminTotalVotes = 0
|
||||
finalCard._yesWeight = 0
|
||||
continue
|
||||
}
|
||||
// Pull only the adminYes/adminNo/totalYesWeight from processPollData
|
||||
const {
|
||||
adminYes,
|
||||
adminNo,
|
||||
totalYesWeight
|
||||
} = await processPollData(
|
||||
pollResults,
|
||||
minterGroupMembers,
|
||||
minterAdmins,
|
||||
finalCard.decryptedCardData.creator,
|
||||
finalCard.card.identifier
|
||||
)
|
||||
finalCard._adminTotalVotes = adminYes + adminNo
|
||||
finalCard._yesWeight = totalYesWeight
|
||||
} catch (error) {
|
||||
console.warn(`Error fetching or processing poll for card ${finalCard.card.identifier}:`, error)
|
||||
finalCard._adminTotalVotes = 0
|
||||
finalCard._yesWeight = 0
|
||||
}
|
||||
}
|
||||
// Sort ascending by (adminYes + adminNo), then descending by totalYesWeight
|
||||
finalCards.sort((a, b) => {
|
||||
const diffAdminTotal = a._adminTotalVotes - b._adminTotalVotes
|
||||
if (diffAdminTotal !== 0) return diffAdminTotal
|
||||
// If there's a tie, show the card with higher yesWeight first
|
||||
return b._yesWeight - a._yesWeight
|
||||
})
|
||||
} else if (selectedSort === 'most-votes') {
|
||||
// TODO: Add the logic to sort by MOST total ADMIN votes, then totalYesWeight
|
||||
const minterGroupMembers = await fetchMinterGroupMembers()
|
||||
const minterAdmins = await fetchMinterGroupAdmins()
|
||||
for (const finalCard of finalCards) {
|
||||
try {
|
||||
const pollName = finalCard.decryptedCardData.poll
|
||||
if (!pollName) {
|
||||
finalCard._adminTotalVotes = 0
|
||||
finalCard._yesWeight = 0
|
||||
continue
|
||||
}
|
||||
const pollResults = await fetchPollResults(pollName)
|
||||
if (!pollResults || pollResults.error) {
|
||||
finalCard._adminTotalVotes = 0
|
||||
finalCard._yesWeight = 0
|
||||
continue
|
||||
}
|
||||
const {
|
||||
adminYes,
|
||||
adminNo,
|
||||
totalYesWeight
|
||||
} = await processPollData(
|
||||
pollResults,
|
||||
minterGroupMembers,
|
||||
minterAdmins,
|
||||
finalCard.decryptedCardData.creator,
|
||||
finalCard.card.identifier
|
||||
)
|
||||
finalCard._adminTotalVotes = adminYes + adminNo
|
||||
finalCard._yesWeight = totalYesWeight
|
||||
} catch (error) {
|
||||
console.warn(`Error fetching or processing poll for card ${finalCard.card.identifier}:`, error)
|
||||
finalCard._adminTotalVotes = 0
|
||||
finalCard._yesWeight = 0
|
||||
}
|
||||
}
|
||||
// Sort descending by (adminYes + adminNo), then descending by totalYesWeight
|
||||
finalCards.sort((a, b) => {
|
||||
const diffAdminTotal = b._adminTotalVotes - a._adminTotalVotes
|
||||
if (diffAdminTotal !== 0) return diffAdminTotal
|
||||
return b._yesWeight - a._yesWeight
|
||||
})
|
||||
} else {
|
||||
// Sort cards by timestamp (most recent first)
|
||||
finalCards.sort((a, b) => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user