Multiple style fixes, todos page improvements

This commit is contained in:
mrfry 2021-05-18 13:01:35 +02:00
parent e928ef87de
commit ef97239c5f
13 changed files with 121 additions and 76 deletions

View file

@ -66,41 +66,37 @@ export default function FeedbackArea({ from, allowFile }) {
return ( return (
<div className={styles.inputArea}> <div className={styles.inputArea}>
<center> <textarea
<textarea placeholder={'Ide kezdhetsz el írni...'}
placeholder={'Ide kezdhetsz el írni...'} onChange={(event) => setFeedback(event.target.value)}
onChange={(event) => setFeedback(event.target.value)} value={feedback}
value={feedback} className={styles.contactFeedback}
className={styles.contactFeedback} />
/> {allowFile && (
{allowFile && ( <div className={styles.fileContainer}>
<div className={styles.fileContainer}> <FileUploader
<FileUploader onChange={(e) => {
onChange={(e) => { setFile(e.target.files[0])
setFile(e.target.files[0])
}}
/>
</div>
)}
</center>
<center>
<div className={`${styles.send} buttonContainer`}>
<div
onClick={() => {
if (feedback) {
submitFeedback(from, feedback, file).then(() => {
alert('Üzenet elküldve!')
setFeedback('')
})
} else {
alert('Üresen hagytad az üzenet szövegének helyét!')
}
}} }}
> />
Küldés
</div>
</div> </div>
</center> )}
<div className={`${styles.send} buttonContainer`}>
<div
onClick={() => {
if (feedback) {
submitFeedback(from, feedback, file).then(() => {
alert('Üzenet elküldve!')
setFeedback('')
})
} else {
alert('Üresen hagytad az üzenet szövegének helyét!')
}
}}
>
Küldés
</div>
</div>
</div> </div>
) )
} }

View file

@ -11,7 +11,6 @@
.send { .send {
width: 20%; width: 20%;
margin-bottom: 60px;
} }
.inputArea { .inputArea {

View file

@ -27,21 +27,24 @@ export default function TodoBoard(props) {
<div className={styles.table}> <div className={styles.table}>
{Object.keys(columns).map((key) => { {Object.keys(columns).map((key) => {
const category = columns[key] const category = columns[key]
const cardsToShow = cards.filter((card) => {
const shouldHide =
card.state !== key ||
(selectedGroup !== null &&
selectedGroup !== 'uncat' &&
card.group !== selectedGroup) ||
(selectedGroup === 'uncat' && card.group !== undefined)
return !shouldHide
})
return ( return (
<div className={styles.tableCol} key={key}> <div className={styles.tableCol} key={key}>
<div className={styles.categoryName}>{category.name}</div> <div className={styles.categoryName}>{category.name}</div>
{cards.map((card, i) => {
const shouldHide =
card.state !== key ||
(selectedGroup !== null &&
selectedGroup !== 'uncat' &&
card.group !== selectedGroup) ||
(selectedGroup === 'uncat' && card.group !== undefined)
if (shouldHide) {
return null
}
{cardsToShow.length === 0 && (
<div className={styles.empty}>Üres</div>
)}
{cardsToShow.map((card, i) => {
return ( return (
<TodoCard <TodoCard
key={i} key={i}

View file

@ -22,3 +22,9 @@
.tableCol { .tableCol {
flex: 1; flex: 1;
} }
.empty {
display: flex;
justify-content: center;
padding: 10px 0px;
}

View file

@ -11,7 +11,7 @@ export default function TodoCard(props) {
<div <div
className={styles.card} className={styles.card}
style={{ style={{
border: `1px solid ${categories[category].color || '#f2cb05'}`, border: `1px solid ${group || '#f2cb05'}`,
}} }}
onClick={() => { onClick={() => {
onClick(props.cardData) onClick(props.cardData)

View file

@ -17,22 +17,25 @@ export default function TodoBoard(props) {
return card.state === key return card.state === key
}) })
const tableCardsToShow = tableCards.filter((card) => {
const shouldHide =
card.state !== key ||
(selectedGroup !== null &&
selectedGroup !== 'uncat' &&
card.group !== selectedGroup) ||
(selectedGroup === 'uncat' && card.group !== undefined)
return !shouldHide
})
return ( return (
<div className={styles.container} key={key}> <div className={styles.container} key={key}>
<div className={styles.title}>{table.name}</div> <div className={styles.title}>{table.name}</div>
<div className={styles.scroll}> <div className={styles.scroll}>
{tableCards.map((card, i) => { {tableCardsToShow.length === 0 && (
const shouldHide = <div className={styles.empty}>Üres</div>
card.state !== key || )}
(selectedGroup !== null && {tableCardsToShow.map((card, i) => {
selectedGroup !== 'uncat' &&
card.group !== selectedGroup) ||
(selectedGroup === 'uncat' && card.group !== undefined)
if (shouldHide) {
return null
}
return ( return (
<TodoRow <TodoRow
onClick={onClick} onClick={onClick}

View file

@ -25,3 +25,9 @@
overflow-y: auto; overflow-y: auto;
overflow-x: hidden; overflow-x: hidden;
} }
.empty {
display: flex;
justify-content: center;
padding: 10px 0px;
}

View file

@ -23,6 +23,8 @@ export default function Todos() {
const [namedGroups, setGroups] = useState(null) const [namedGroups, setGroups] = useState(null)
const [selectedGroup, setSelectedGroup] = useState(null) const [selectedGroup, setSelectedGroup] = useState(null)
const [activeGroups, setActiveGroups] = useState(null)
useEffect(() => { useEffect(() => {
fetch(`${constants.apiUrl}todos`, { fetch(`${constants.apiUrl}todos`, {
credentials: 'include', credentials: 'include',
@ -43,6 +45,23 @@ export default function Todos() {
setCards(data.todos.cards) setCards(data.todos.cards)
setColumns(data.todos.columns) setColumns(data.todos.columns)
setLoaded(true) setLoaded(true)
const notTables = Object.keys(data.todos.columns).reduce((acc, key) => {
const col = data.todos.columns[key]
if (col.type !== 'table') {
acc.push(key)
}
return acc
}, [])
setActiveGroups(
data.todos.cards.reduce((acc, card) => {
if (card.group && notTables.includes(card.state)) {
if (!acc.includes(card.group)) acc.push(card.group)
}
return acc
}, [])
)
} }
const onClick = (card) => { const onClick = (card) => {
@ -96,11 +115,17 @@ export default function Todos() {
<div className={'buttonContainer'}> <div className={'buttonContainer'}>
{groups.map((group) => { {groups.map((group) => {
const namedGroup = namedGroups[group] const namedGroup = namedGroups[group]
const shouldSkip = activeGroups && !activeGroups.includes(group)
if (shouldSkip) {
return null
}
return ( return (
<div <div
className={`${'buttonContainer'}, ${ className={`${'buttonContainer'}, ${styles.todoButtons} ${
styles.todoButtons group === selectedGroup && 'activeButton'
} ${group === selectedGroup && 'activeButton'}`} }`}
key={group} key={group}
onClick={() => { onClick={() => {
setSelectedGroup(group) setSelectedGroup(group)
@ -111,9 +136,9 @@ export default function Todos() {
) )
})} })}
<div <div
className={`${'buttonContainer'}, ${ className={`${'buttonContainer'}, ${styles.todoButtons} ${
styles.todoButtons 'uncat' === selectedGroup && 'activeButton'
} ${'uncat' === selectedGroup && 'activeButton'}`} }`}
onClick={() => { onClick={() => {
setSelectedGroup('uncat') setSelectedGroup('uncat')
}} }}
@ -121,8 +146,9 @@ export default function Todos() {
{'Kategorizálatlan'} {'Kategorizálatlan'}
</div> </div>
<div <div
className={`${'buttonContainer'}, ${styles.todoButtons} ${null === className={`${'buttonContainer'}, ${styles.todoButtons} ${
selectedGroup && 'activeButton'}`} null === selectedGroup && 'activeButton'
}`}
onClick={() => { onClick={() => {
setSelectedGroup(null) setSelectedGroup(null)
}} }}

View file

@ -4,6 +4,12 @@
padding: 3px; padding: 3px;
} }
@media screen and (max-width: 700px) {
.container {
flex-flow: column;
}
}
.container > div { .container > div {
display: flex; display: flex;
align-items: center; align-items: center;

View file

@ -13,7 +13,7 @@ export default function contribute() {
const [showFeedback, setShowFeedback] = useState(false) const [showFeedback, setShowFeedback] = useState(false)
return ( return (
<div className={'endofpage'}> <div>
<Head> <Head>
<title>Todos - Qmining | Frylabs.net</title> <title>Todos - Qmining | Frylabs.net</title>
</Head> </Head>

View file

@ -146,12 +146,6 @@ export default function RankList({ globalData }) {
<div <div
className={styles.infoText} className={styles.infoText}
>{`A felhasználó ID-d: #${selfUserId}`}</div> >{`A felhasználó ID-d: #${selfUserId}`}</div>
<div className={styles.text}>
<p>
Az adatok kb 2020. április eleje óta vannak gyűjtve, és azonnal
frissülnek.
</p>
</div>
<div className={'selectContainer'}> <div className={'selectContainer'}>
<div>Megjelenítés: </div> <div>Megjelenítés: </div>
<select <select

View file

@ -53,9 +53,6 @@ export default function Script() {
<ExternalLinkIcon size={15} /> <ExternalLinkIcon size={15} />
</a> </a>
</div> </div>
<center>
<h2 className={'subtitle'}>A userscript telepítése, és használata</h2>
</center>
<div> <div>
<p> <p>
Ez a userscript Moodle/Elearnig/KMOOC tesztek megoldása során Ez a userscript Moodle/Elearnig/KMOOC tesztek megoldása során
@ -68,6 +65,11 @@ export default function Script() {
{supportedSites.map((ss) => { {supportedSites.map((ss) => {
return <li key={ss}>{ss}</li> return <li key={ss}>{ss}</li>
})} })}
<li>
<Link href="/faq?tab=addsite">
<a>új oldal hozzáadásának menete itt</a>
</Link>
</li>
</ul> </ul>
</> </>
)} )}

View file

@ -1,3 +1,7 @@
.content b { .content b {
color: #fff; color: #fff;
} }
.content {
text-align: justify;
}