mirror of
				https://gitlab.com/questable/questable-web-ui
				synced 2025-11-04 04:20:06 +01:00 
			
		
		
		
	Add list (side) quest UI and scss.
This commit is contained in:
		@@ -3,7 +3,7 @@ import PropTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
export default (player, swal) => {
 | 
			
		||||
	function Login(props) {
 | 
			
		||||
		const [input, setInput] = useState(localStorage.getItem("token") ? localStorage.getItem("token"): "" );
 | 
			
		||||
		const [input, setInput] = useState("");
 | 
			
		||||
		return (
 | 
			
		||||
			<div className="login">
 | 
			
		||||
				<div className="wrapper">
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ import { useState } from "react";
 | 
			
		||||
import PropTypes from "prop-types";
 | 
			
		||||
import Stats from "./stats";
 | 
			
		||||
import Quests from "./quests";
 | 
			
		||||
import Quest from "./quest";
 | 
			
		||||
import QuestGen from "./quest";
 | 
			
		||||
import AddQuest from "./addquest";
 | 
			
		||||
 | 
			
		||||
export default (player, quest, sideQuest) => {
 | 
			
		||||
@@ -23,6 +23,7 @@ export default (player, quest, sideQuest) => {
 | 
			
		||||
		const [ display, setDisplay ] = useState({ type: "main"});
 | 
			
		||||
 | 
			
		||||
		const token = localStorage.getItem("token");
 | 
			
		||||
		const Quest = QuestGen(quest, sideQuest);
 | 
			
		||||
		if (playerStats === null)
 | 
			
		||||
			player.player(token).then((res) => setPlayerStats(res));
 | 
			
		||||
 | 
			
		||||
@@ -62,18 +63,38 @@ export default (player, quest, sideQuest) => {
 | 
			
		||||
				</>);
 | 
			
		||||
			break;
 | 
			
		||||
		case "quests":
 | 
			
		||||
			body = <Quests display={display} quests={quests} setDisplay={setDisplay} />;
 | 
			
		||||
			body = (
 | 
			
		||||
				<Quests
 | 
			
		||||
					display={display}
 | 
			
		||||
					quests={quests}
 | 
			
		||||
					setDisplay={setDisplay}
 | 
			
		||||
				/>);
 | 
			
		||||
			break;
 | 
			
		||||
		case "sideQuests":
 | 
			
		||||
			body = <Quests display={display} quests={sideQuests} setDisplay={setDisplay} />;
 | 
			
		||||
			body = (
 | 
			
		||||
				<Quests
 | 
			
		||||
					display={display}
 | 
			
		||||
					quests={sideQuests}
 | 
			
		||||
					setDisplay={setDisplay}
 | 
			
		||||
				/>);
 | 
			
		||||
			break;
 | 
			
		||||
		case "quest":
 | 
			
		||||
		case "sideQuest":
 | 
			
		||||
			body = <Quest display={display} setDisplay={setDisplay} />;
 | 
			
		||||
			body = (
 | 
			
		||||
				<Quest
 | 
			
		||||
					display={display}
 | 
			
		||||
					setDisplay={setDisplay}
 | 
			
		||||
					quest={quest}
 | 
			
		||||
					sideQuest={sideQuest}
 | 
			
		||||
				/>);
 | 
			
		||||
			break;
 | 
			
		||||
		case "addQuest":
 | 
			
		||||
		case "addSideQuest":
 | 
			
		||||
			body = <AddQuest display={display} setDisplay={setDisplay} />;
 | 
			
		||||
			body = (
 | 
			
		||||
				<AddQuest
 | 
			
		||||
					display={display}
 | 
			
		||||
					setDisplay={setDisplay}
 | 
			
		||||
				/>);
 | 
			
		||||
		}
 | 
			
		||||
		return (
 | 
			
		||||
			<div className="main">
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,116 @@
 | 
			
		||||
import React, { useState } from "react";
 | 
			
		||||
import PropTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
function Input(props) {
 | 
			
		||||
	return (
 | 
			
		||||
		<label>
 | 
			
		||||
			<input
 | 
			
		||||
				checked={props.const === props.value}
 | 
			
		||||
				type="radio"
 | 
			
		||||
				name={props.name}
 | 
			
		||||
				value={props.value}
 | 
			
		||||
				className="nes-radio is-dark"
 | 
			
		||||
				onClick={() => props.change(props.value)}
 | 
			
		||||
			/>
 | 
			
		||||
			<span>{["Low", "Medium", "High"][props.value - 1]}</span>
 | 
			
		||||
		</label>
 | 
			
		||||
	);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Input.propTypes = {
 | 
			
		||||
	const: PropTypes.number,
 | 
			
		||||
	value: PropTypes.number,
 | 
			
		||||
	name: PropTypes.string,
 | 
			
		||||
	change: PropTypes.func,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default (quest, sideQuest) => {
 | 
			
		||||
	function Quest(props) {
 | 
			
		||||
		const [ currQuest, setCurrQuest ] = useState(null);
 | 
			
		||||
		const [ name, setName ] = useState("");
 | 
			
		||||
		const [ difficulty, setDifficulty ] = useState(0);
 | 
			
		||||
		const [ priority, setPriority ] = useState(0);
 | 
			
		||||
 | 
			
		||||
		const type = {
 | 
			
		||||
			quest: "Quest",
 | 
			
		||||
			sideQuest: "Side Quest"
 | 
			
		||||
		}[props.display.type];
 | 
			
		||||
		const token = localStorage.getItem("token");
 | 
			
		||||
 | 
			
		||||
		if (currQuest === null) {
 | 
			
		||||
			if (props.display.type === "quest")
 | 
			
		||||
				quest.getQuest(token, props.display.id)
 | 
			
		||||
					.then((res) => {
 | 
			
		||||
						setCurrQuest(res);
 | 
			
		||||
						setName(res.name);
 | 
			
		||||
						setDifficulty(res.difficulty);
 | 
			
		||||
						setPriority(res.priority);
 | 
			
		||||
					});
 | 
			
		||||
			else
 | 
			
		||||
				sideQuest.getSideQuest(token, props.display.id)
 | 
			
		||||
					.then((res) => {
 | 
			
		||||
						setCurrQuest(res);
 | 
			
		||||
						setName(res.name);
 | 
			
		||||
						setDifficulty(res.difficulty);
 | 
			
		||||
						setPriority(res.priority);
 | 
			
		||||
					});
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		if (currQuest === null) {
 | 
			
		||||
			return (
 | 
			
		||||
				<div className="loader">
 | 
			
		||||
					<img alt="loader" src="./loader.svg"></img>
 | 
			
		||||
				</div>
 | 
			
		||||
			);
 | 
			
		||||
		}
 | 
			
		||||
		else {
 | 
			
		||||
			return (
 | 
			
		||||
				<div className="quest nes-container with-title is-dark">
 | 
			
		||||
					<p className="title">{type}</p>
 | 
			
		||||
					<div className="quest_element">
 | 
			
		||||
						<label>Name</label>
 | 
			
		||||
						<input
 | 
			
		||||
							type="text"
 | 
			
		||||
							className="nes-input is-dark"
 | 
			
		||||
							value={name}
 | 
			
		||||
							onChange={(e) => setName(e.target.value)}
 | 
			
		||||
						/>
 | 
			
		||||
					</div>
 | 
			
		||||
					<div className="quest_element">
 | 
			
		||||
						<label>Priority</label>
 | 
			
		||||
						<div className="radios">
 | 
			
		||||
							{[1, 2, 3].map((cur) =>
 | 
			
		||||
								<Input
 | 
			
		||||
									name="priority"
 | 
			
		||||
									value={cur}
 | 
			
		||||
									const={priority}
 | 
			
		||||
									key={cur}
 | 
			
		||||
									change={setPriority}
 | 
			
		||||
								/>)}
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
					<div className="quest_element">
 | 
			
		||||
						<label>Difficulty</label>
 | 
			
		||||
						<div className="radios">
 | 
			
		||||
							{[1, 2, 3].map((cur) =>
 | 
			
		||||
								<Input
 | 
			
		||||
									name="difficulty"
 | 
			
		||||
									value={cur}
 | 
			
		||||
									const={difficulty}
 | 
			
		||||
									key={cur}
 | 
			
		||||
									change={setDifficulty}
 | 
			
		||||
								/>)}
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
			);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Quest.propTypes = {
 | 
			
		||||
		display: PropTypes.object,
 | 
			
		||||
		setDisplay: PropTypes.func,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	return Quest;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ body {
 | 
			
		||||
	}
 | 
			
		||||
	.body {
 | 
			
		||||
		padding: 0 1em;
 | 
			
		||||
		div {
 | 
			
		||||
		.stats {
 | 
			
		||||
			margin: 1em 0;
 | 
			
		||||
			box-sizing: border-box;
 | 
			
		||||
			button {
 | 
			
		||||
@@ -48,6 +48,29 @@ body {
 | 
			
		||||
				box-sizing: border-box;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		.quest {
 | 
			
		||||
			width: 100%;
 | 
			
		||||
			display: flex;
 | 
			
		||||
			flex-direction: column;
 | 
			
		||||
			.quest_element {
 | 
			
		||||
				margin: 1em 0;
 | 
			
		||||
				display: flex;
 | 
			
		||||
				width: 100%;
 | 
			
		||||
				justify-content: space-between;
 | 
			
		||||
				align-items: center;
 | 
			
		||||
				flex-wrap: wrap;
 | 
			
		||||
				input[type="text"] {
 | 
			
		||||
					width: 80%;
 | 
			
		||||
				}
 | 
			
		||||
				.radios {
 | 
			
		||||
					width: 80%;
 | 
			
		||||
					display: flex;
 | 
			
		||||
					flex-direction: row;
 | 
			
		||||
					justify-content: space-between;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		.quests {
 | 
			
		||||
			width: 100%;
 | 
			
		||||
			display: flex;
 | 
			
		||||
@@ -107,9 +130,25 @@ body {
 | 
			
		||||
					margin: 0.25em 1%;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			.quests {
 | 
			
		||||
				.quests_head {
 | 
			
		||||
			.quest {
 | 
			
		||||
				.quest_element {
 | 
			
		||||
					flex-direction: column;
 | 
			
		||||
					justify-content: flex-start;
 | 
			
		||||
					align-items: flex-start;
 | 
			
		||||
					label {
 | 
			
		||||
						text-align: left;
 | 
			
		||||
					}
 | 
			
		||||
					input[type="text"] {
 | 
			
		||||
						width: 100%;
 | 
			
		||||
					}
 | 
			
		||||
					.radios {
 | 
			
		||||
						width: 100%;
 | 
			
		||||
						flex-direction: column;
 | 
			
		||||
						justify-content: flex-start;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			.quests {
 | 
			
		||||
				.quest_tile {
 | 
			
		||||
					width: 95%;
 | 
			
		||||
				}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user