Merge branch 'master' of gitlab.com:MrFry/qmining-page into master

This commit is contained in:
MrFry 2020-11-10 16:31:56 +01:00
commit 90a04b61b3
2 changed files with 127 additions and 41 deletions

View file

@ -13,10 +13,49 @@ const selectOptions = {
count: { name: 'Megoldott tesztek' },
}
async function getListFromServer() {
const sinceOptions = {
all: {
name: 'All time',
},
monthly: { name: 'Havi' },
weekly: { name: 'Heti' },
daily: { name: 'Napi' },
}
function getTimeString(date) {
return (
date.getFullYear() +
'-' +
('0' + (date.getMonth() + 1)).slice(-2) +
'-' +
('0' + date.getDate()).slice(-2)
)
}
function getSinceDate(keyword) {
if (keyword === 'all') {
return null
}
const date = new Date()
if (keyword === 'daily') {
date.setDate(date.getDate() - 1)
} else if (keyword === 'weekly') {
date.setDate(date.getDate() - 7)
} else if (keyword === 'monthly') {
date.setDate(date.getDate() - 30)
}
return date
}
async function getListFromServer(since) {
return new Promise((resolve, reject) => {
console.info('Fetching data')
fetch(`${constants.apiUrl}ranklist`, {
let query = ''
if (since && since !== 'all') {
query = `?since=${getTimeString(getSinceDate(since))}`
}
fetch(`${constants.apiUrl}ranklist${query}`, {
credentials: 'include',
Accept: 'application/json',
'Content-Type': 'application/json',
@ -47,14 +86,18 @@ function sortDataBy(data, key) {
export default function RankList() {
const [ranklist, setRanklist] = useState(null)
const [selfUserId, setSelfUserId] = useState(null)
const [selfUserId, setSelfUserId] = useState('...')
const [key, setKey] = useState('newQuestions')
const [since, setSince] = useState('all')
const [sum, setSum] = useState({})
const getList = () => {
setSum({})
setRanklist(null)
getListFromServer(key)
getListFromServer(since)
.then((data) => {
setRanklist(data.list)
setSum(data.sum)
setSelfUserId(data.selfuserId)
})
.catch((error) => {
@ -67,11 +110,15 @@ export default function RankList() {
getList()
}, [])
if (!ranklist) {
return <LoadingIndicator />
}
useEffect(() => {
getList()
}, [since])
const list = sortDataBy(ranklist, key)
const list = ranklist && sortDataBy(ranklist, key)
const updateSince = (keyword) => {
setSince(keyword)
}
return (
<div>
@ -84,6 +131,25 @@ export default function RankList() {
frissülnek.
</div>
<Sleep />
<div className={styles.sinceTable}>
<div className={styles.sinceHeaderRow}>
{Object.keys(sinceOptions).map((key) => {
const val = sinceOptions[key]
return (
<div
key={key}
className={`${styles.clickable} ${key === since &&
styles.selected}`}
onClick={() => {
updateSince(key)
}}
>
{val.name}
</div>
)
})}
</div>
</div>
<div className={styles.table}>
<div className={styles.headerRow}>
<div>{'Rank'}</div>
@ -104,22 +170,33 @@ export default function RankList() {
)
})}
</div>
{list.map((listItem, i) => {
return (
<div
className={`${styles.row} ${listItem.userId === selfUserId &&
styles.selfRow}`}
key={i}
>
<div>{i + 1}</div>
<div>{'#' + listItem.userId}</div>
{Object.keys(selectOptions).map((listKey) => {
const val = listItem[listKey]
return <div key={listKey}>{val}</div>
})}
</div>
)
})}
<div className={`${styles.row} ${styles.sumrow}`}>
<div />
<div>{'Összesen'}</div>
<div>{sum.newQuestions}</div>
<div>{sum.allQuestions}</div>
<div>{sum.count}</div>
</div>
{list ? (
list.map((listItem, i) => {
return (
<div
className={`${styles.row} ${listItem.userId === selfUserId &&
styles.selfRow}`}
key={i}
>
<div>{i + 1}</div>
<div>{'#' + listItem.userId}</div>
{Object.keys(selectOptions).map((listKey) => {
const val = listItem[listKey]
return <div key={listKey}>{val}</div>
})}
</div>
)
})
) : (
<LoadingIndicator />
)}
</div>
</div>
</div>

View file

@ -1,7 +1,20 @@
.row,
.headerRow {
.table,
.sinceTable {
display: flex;
padding: 3px;
flex-direction: column;
padding: 0px 10px;
}
.table :nth-child(1),
.sinceTable :nth-child(1) {
color: white;
}
.row,
.headerRow,
.sinceHeaderRow {
display: flex;
padding: 1px;
}
.row:hover {
@ -9,13 +22,15 @@
}
.row div,
.headerRow div {
.headerRow div,
.sinceHeaderRow div {
flex: 1;
padding: 0px 5px;
text-align: center;
}
.headerRow div {
.headerRow div,
.sinceHeaderRow div {
padding: 15px 5px;
}
@ -30,20 +45,14 @@
text-align: left;
}
.table {
display: flex;
flex-direction: column;
padding: 10px;
}
.table :nth-child(1) {
color: white;
}
.clickable:hover {
background-color: #666666;
}
.clickable {
cursor: pointer;
}
.selfRow {
background-color: #9999ff;
color: black;
@ -67,6 +76,6 @@
background-color: #9999ff;
}
.clickable {
cursor: pointer;
.sumrow {
color: white;
}