mirror of
https://gitlab.com/MrFry/qmining-page
synced 2025-04-01 20:23:44 +02:00
Added user file vote
This commit is contained in:
parent
9ef2c10af1
commit
d3f45e62f5
4 changed files with 207 additions and 23 deletions
48
src/components/upDownVote.js
Normal file
48
src/components/upDownVote.js
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
import React from 'react'
|
||||||
|
|
||||||
|
import styles from './upDownVote.module.css'
|
||||||
|
|
||||||
|
export default function UpDownVote({
|
||||||
|
onUp,
|
||||||
|
onDown,
|
||||||
|
onClear,
|
||||||
|
upvotes,
|
||||||
|
downvotes,
|
||||||
|
userId,
|
||||||
|
}) {
|
||||||
|
const upvoted = upvotes.includes(userId)
|
||||||
|
const downvoted = downvotes.includes(userId)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={styles.container}>
|
||||||
|
<div
|
||||||
|
className={styles.action}
|
||||||
|
onClick={(e) => {
|
||||||
|
e.stopPropagation()
|
||||||
|
if (!upvoted) {
|
||||||
|
onUp()
|
||||||
|
} else {
|
||||||
|
onClear()
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div>👍</div>
|
||||||
|
<div className={`${upvoted && styles.voted}`}>{upvotes.length}</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
className={styles.action}
|
||||||
|
onClick={(e) => {
|
||||||
|
e.stopPropagation()
|
||||||
|
if (!downvoted) {
|
||||||
|
onDown()
|
||||||
|
} else {
|
||||||
|
onClear()
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div>👎</div>
|
||||||
|
<div className={`${downvoted && styles.voted}`}>{downvotes.length}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
26
src/components/upDownVote.module.css
Normal file
26
src/components/upDownVote.module.css
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
.container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container > div {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container > div > * {
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action {
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action:hover {
|
||||||
|
background-color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
.voted {
|
||||||
|
color: var(--text-color);
|
||||||
|
}
|
|
@ -4,12 +4,40 @@ import Head from 'next/head'
|
||||||
import LoadingIndicator from '../components/LoadingIndicator'
|
import LoadingIndicator from '../components/LoadingIndicator'
|
||||||
import Modal from '../components/modal'
|
import Modal from '../components/modal'
|
||||||
import SearchBar from '../components/searchBar'
|
import SearchBar from '../components/searchBar'
|
||||||
|
import UpDownVote from '../components/upDownVote'
|
||||||
|
|
||||||
import styles from './userfiles.module.css'
|
import styles from './userfiles.module.css'
|
||||||
import constants from '../constants.json'
|
import constants from '../constants.json'
|
||||||
|
|
||||||
|
function vote(to, item) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
fetch(`${constants.apiUrl}voteFile`, {
|
||||||
|
method: 'POST',
|
||||||
|
credentials: 'include',
|
||||||
|
headers: {
|
||||||
|
Accept: 'application/json',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
path: item.path,
|
||||||
|
to: to,
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
.then((resp) => {
|
||||||
|
return resp.json()
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
if (res.success) {
|
||||||
|
resolve(res)
|
||||||
|
} else {
|
||||||
|
reject(res)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function listUserDir(subdir) {
|
function listUserDir(subdir) {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve, reject) => {
|
||||||
fetch(
|
fetch(
|
||||||
`${constants.apiUrl}listUserDir${subdir ? `?subdir=${subdir}` : ''}`,
|
`${constants.apiUrl}listUserDir${subdir ? `?subdir=${subdir}` : ''}`,
|
||||||
{
|
{
|
||||||
|
@ -23,7 +51,7 @@ function listUserDir(subdir) {
|
||||||
if (res.success) {
|
if (res.success) {
|
||||||
resolve(res)
|
resolve(res)
|
||||||
} else {
|
} else {
|
||||||
alert(res.msg)
|
reject(res)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -180,13 +208,21 @@ export default function UserFiles({ router, globalData }) {
|
||||||
setSearchTerm()
|
setSearchTerm()
|
||||||
|
|
||||||
if (router.query.dir) {
|
if (router.query.dir) {
|
||||||
listUserDir(dir).then((res) => {
|
listUserDir(dir)
|
||||||
setDirs(res.files)
|
.then((res) => {
|
||||||
})
|
setDirs(res.files)
|
||||||
|
})
|
||||||
|
.catch((res) => {
|
||||||
|
alert(res.msg)
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
listUserDir().then((res) => {
|
listUserDir()
|
||||||
setDirs(res.dirs)
|
.then((res) => {
|
||||||
})
|
setDirs(res.dirs)
|
||||||
|
})
|
||||||
|
.catch((res) => {
|
||||||
|
alert(res.msg)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}, [router.query.dir])
|
}, [router.query.dir])
|
||||||
|
|
||||||
|
@ -248,6 +284,8 @@ export default function UserFiles({ router, globalData }) {
|
||||||
<div name="name">Fájl név</div>
|
<div name="name">Fájl név</div>
|
||||||
<div name="date">Feltöltés dátuma</div>
|
<div name="date">Feltöltés dátuma</div>
|
||||||
<div name="size">Méret</div>
|
<div name="size">Méret</div>
|
||||||
|
<div name="upCount">Hasznos</div>
|
||||||
|
<div name="views">Letöltések</div>
|
||||||
<div name="user">Feltöltő user</div>
|
<div name="user">Feltöltő user</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -263,7 +301,17 @@ export default function UserFiles({ router, globalData }) {
|
||||||
{dirs.length !== 0 && (
|
{dirs.length !== 0 && (
|
||||||
<>
|
<>
|
||||||
{dirs.sort(dirSorter).map((dir) => {
|
{dirs.sort(dirSorter).map((dir) => {
|
||||||
const { name, date, path, size, user } = dir
|
const {
|
||||||
|
name,
|
||||||
|
date,
|
||||||
|
path,
|
||||||
|
size,
|
||||||
|
views,
|
||||||
|
user,
|
||||||
|
upvotes,
|
||||||
|
downvotes,
|
||||||
|
} = dir
|
||||||
|
|
||||||
if (
|
if (
|
||||||
searchTerm &&
|
searchTerm &&
|
||||||
!name.toLowerCase().includes(searchTerm.toLowerCase())
|
!name.toLowerCase().includes(searchTerm.toLowerCase())
|
||||||
|
@ -272,6 +320,7 @@ export default function UserFiles({ router, globalData }) {
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
className={styles.row}
|
||||||
title={name}
|
title={name}
|
||||||
key={name}
|
key={name}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
@ -296,6 +345,43 @@ export default function UserFiles({ router, globalData }) {
|
||||||
? (size / 1000000).toFixed(2).toString() + ' MB'
|
? (size / 1000000).toFixed(2).toString() + ' MB'
|
||||||
: size + ' fájl'}
|
: size + ' fájl'}
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
{Array.isArray(upvotes) && Array.isArray(downvotes) && (
|
||||||
|
<UpDownVote
|
||||||
|
onUp={() => {
|
||||||
|
vote('up', dir)
|
||||||
|
.then((res) => {
|
||||||
|
setDirs(res.files)
|
||||||
|
})
|
||||||
|
.catch((res) => {
|
||||||
|
alert(res.msg)
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
onDown={() => {
|
||||||
|
vote('down', dir)
|
||||||
|
.then((res) => {
|
||||||
|
setDirs(res.files)
|
||||||
|
})
|
||||||
|
.catch((res) => {
|
||||||
|
alert(res.msg)
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
onClear={() => {
|
||||||
|
vote('clear', dir)
|
||||||
|
.then((res) => {
|
||||||
|
setDirs(res.files)
|
||||||
|
})
|
||||||
|
.catch((res) => {
|
||||||
|
alert(res.msg)
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
upvotes={upvotes}
|
||||||
|
downvotes={downvotes}
|
||||||
|
userId={userId}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<div>{!isNaN(views) && `${views} db`}</div>
|
||||||
<div>
|
<div>
|
||||||
{user &&
|
{user &&
|
||||||
user !== -1 &&
|
user !== -1 &&
|
||||||
|
@ -306,9 +392,13 @@ export default function UserFiles({ router, globalData }) {
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
if (confirm(`Biztos törlöd '${name}'-t ?`)) {
|
if (confirm(`Biztos törlöd '${name}'-t ?`)) {
|
||||||
deleteFile(currDir, name).then(() => {
|
deleteFile(currDir, name).then(() => {
|
||||||
listUserDir(currDir).then((res) => {
|
listUserDir(currDir)
|
||||||
setDirs(res.files)
|
.then((res) => {
|
||||||
})
|
setDirs(res.files)
|
||||||
|
})
|
||||||
|
.catch((res) => {
|
||||||
|
alert(res.msg)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
@ -394,10 +484,14 @@ export default function UserFiles({ router, globalData }) {
|
||||||
setUploading(true)
|
setUploading(true)
|
||||||
uploadFile(currDir, file).then(() => {
|
uploadFile(currDir, file).then(() => {
|
||||||
setUploading(false)
|
setUploading(false)
|
||||||
listUserDir(currDir).then((res) => {
|
listUserDir(currDir)
|
||||||
setDirs(res.files)
|
.then((res) => {
|
||||||
setAddingNew(null)
|
setDirs(res.files)
|
||||||
})
|
setAddingNew(null)
|
||||||
|
})
|
||||||
|
.catch((res) => {
|
||||||
|
alert(res.msg)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
@ -418,10 +512,14 @@ export default function UserFiles({ router, globalData }) {
|
||||||
setUploading(true)
|
setUploading(true)
|
||||||
newSubj(newSubjName).then(() => {
|
newSubj(newSubjName).then(() => {
|
||||||
setUploading(false)
|
setUploading(false)
|
||||||
listUserDir().then((res) => {
|
listUserDir()
|
||||||
setDirs(res.dirs)
|
.then((res) => {
|
||||||
setAddingNew(null)
|
setDirs(res.dirs)
|
||||||
})
|
setAddingNew(null)
|
||||||
|
})
|
||||||
|
.catch((res) => {
|
||||||
|
alert(res.msg)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|
|
@ -15,20 +15,28 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.tableContainer > div > div:nth-child(1) {
|
.tableContainer > div > div:nth-child(1) {
|
||||||
flex: 1;
|
flex: 1 0 100px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tableContainer > div > div:nth-child(2) {
|
.tableContainer > div > div:nth-child(2) {
|
||||||
flex: 0 240px;
|
flex: 0 200px;
|
||||||
}
|
}
|
||||||
.tableContainer > div > div:nth-child(3) {
|
.tableContainer > div > div:nth-child(3) {
|
||||||
flex: 0 160px;
|
flex: 0 90px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tableContainer > div > div:nth-child(4) {
|
.tableContainer > div > div:nth-child(4) {
|
||||||
flex: 0 100px;
|
flex: 0 100px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tableContainer > div > div:nth-child(5) {
|
||||||
|
flex: 0 110px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tableContainer > div > div:nth-child(6) {
|
||||||
|
flex: 0 100px;
|
||||||
|
}
|
||||||
|
|
||||||
.rows > div {
|
.rows > div {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
@ -102,3 +110,7 @@
|
||||||
.title > div:nth-child(2) {
|
.title > div:nth-child(2) {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.row > div {
|
||||||
|
word-wrap: anywhere;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue