mirror of
				https://gitlab.com/questable/questable-web-ui
				synced 2025-10-31 18:40:07 +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) => { | export default (player, swal) => { | ||||||
| 	function Login(props) { | 	function Login(props) { | ||||||
| 		const [input, setInput] = useState(localStorage.getItem("token") ? localStorage.getItem("token"): "" ); | 		const [input, setInput] = useState(""); | ||||||
| 		return ( | 		return ( | ||||||
| 			<div className="login"> | 			<div className="login"> | ||||||
| 				<div className="wrapper"> | 				<div className="wrapper"> | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ import { useState } from "react"; | |||||||
| import PropTypes from "prop-types"; | import PropTypes from "prop-types"; | ||||||
| import Stats from "./stats"; | import Stats from "./stats"; | ||||||
| import Quests from "./quests"; | import Quests from "./quests"; | ||||||
| import Quest from "./quest"; | import QuestGen from "./quest"; | ||||||
| import AddQuest from "./addquest"; | import AddQuest from "./addquest"; | ||||||
|  |  | ||||||
| export default (player, quest, sideQuest) => { | export default (player, quest, sideQuest) => { | ||||||
| @@ -23,6 +23,7 @@ export default (player, quest, sideQuest) => { | |||||||
| 		const [ display, setDisplay ] = useState({ type: "main"}); | 		const [ display, setDisplay ] = useState({ type: "main"}); | ||||||
|  |  | ||||||
| 		const token = localStorage.getItem("token"); | 		const token = localStorage.getItem("token"); | ||||||
|  | 		const Quest = QuestGen(quest, sideQuest); | ||||||
| 		if (playerStats === null) | 		if (playerStats === null) | ||||||
| 			player.player(token).then((res) => setPlayerStats(res)); | 			player.player(token).then((res) => setPlayerStats(res)); | ||||||
|  |  | ||||||
| @@ -62,18 +63,38 @@ export default (player, quest, sideQuest) => { | |||||||
| 				</>); | 				</>); | ||||||
| 			break; | 			break; | ||||||
| 		case "quests": | 		case "quests": | ||||||
| 			body = <Quests display={display} quests={quests} setDisplay={setDisplay} />; | 			body = ( | ||||||
|  | 				<Quests | ||||||
|  | 					display={display} | ||||||
|  | 					quests={quests} | ||||||
|  | 					setDisplay={setDisplay} | ||||||
|  | 				/>); | ||||||
| 			break; | 			break; | ||||||
| 		case "sideQuests": | 		case "sideQuests": | ||||||
| 			body = <Quests display={display} quests={sideQuests} setDisplay={setDisplay} />; | 			body = ( | ||||||
|  | 				<Quests | ||||||
|  | 					display={display} | ||||||
|  | 					quests={sideQuests} | ||||||
|  | 					setDisplay={setDisplay} | ||||||
|  | 				/>); | ||||||
| 			break; | 			break; | ||||||
| 		case "quest": | 		case "quest": | ||||||
| 		case "sideQuest": | 		case "sideQuest": | ||||||
| 			body = <Quest display={display} setDisplay={setDisplay} />; | 			body = ( | ||||||
|  | 				<Quest | ||||||
|  | 					display={display} | ||||||
|  | 					setDisplay={setDisplay} | ||||||
|  | 					quest={quest} | ||||||
|  | 					sideQuest={sideQuest} | ||||||
|  | 				/>); | ||||||
| 			break; | 			break; | ||||||
| 		case "addQuest": | 		case "addQuest": | ||||||
| 		case "addSideQuest": | 		case "addSideQuest": | ||||||
| 			body = <AddQuest display={display} setDisplay={setDisplay} />; | 			body = ( | ||||||
|  | 				<AddQuest | ||||||
|  | 					display={display} | ||||||
|  | 					setDisplay={setDisplay} | ||||||
|  | 				/>); | ||||||
| 		} | 		} | ||||||
| 		return ( | 		return ( | ||||||
| 			<div className="main"> | 			<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 { | 	.body { | ||||||
| 		padding: 0 1em; | 		padding: 0 1em; | ||||||
| 		div { | 		.stats { | ||||||
| 			margin: 1em 0; | 			margin: 1em 0; | ||||||
| 			box-sizing: border-box; | 			box-sizing: border-box; | ||||||
| 			button { | 			button { | ||||||
| @@ -48,6 +48,29 @@ body { | |||||||
| 				box-sizing: border-box; | 				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 { | 		.quests { | ||||||
| 			width: 100%; | 			width: 100%; | ||||||
| 			display: flex; | 			display: flex; | ||||||
| @@ -107,9 +130,25 @@ body { | |||||||
| 					margin: 0.25em 1%; | 					margin: 0.25em 1%; | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			.quests { | 			.quest { | ||||||
| 				.quests_head { | 				.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 { | 				.quest_tile { | ||||||
| 					width: 95%; | 					width: 95%; | ||||||
| 				} | 				} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user