Click outside of a class selector
This commit is contained in:
parent
390cff2bff
commit
b8504fee70
@ -326,7 +326,7 @@ input#editBox{
|
|||||||
|
|
||||||
.popup{
|
.popup{
|
||||||
position:absolute;
|
position:absolute;
|
||||||
background-color: rgba(128,128,128,1);
|
background-color: rgba(128,128,128,0.9);
|
||||||
max-width: 250px;
|
max-width: 250px;
|
||||||
min-width: 100px;
|
min-width: 100px;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
|
39
src/App.js
39
src/App.js
@ -1,5 +1,7 @@
|
|||||||
import './App.css';
|
import './App.css';
|
||||||
import React, {useState,useEffect} from 'react';
|
import React, {useState,useEffect,useRef} from 'react';
|
||||||
|
import ReactWindow from 'reactjs-windows'
|
||||||
|
import 'reactjs-windows/dist/index.css'
|
||||||
|
|
||||||
function Col(p) {
|
function Col(p) {
|
||||||
return <div className="con">
|
return <div className="con">
|
||||||
@ -113,18 +115,47 @@ const ABILITIES = {
|
|||||||
|
|
||||||
const ABILITY_DEFAULT_ICON = "/ngsplanner/icons/UINGSItemSpecialAbility.png"
|
const ABILITY_DEFAULT_ICON = "/ngsplanner/icons/UINGSItemSpecialAbility.png"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hook that alerts clicks outside of the passed ref
|
||||||
|
*/
|
||||||
|
function useOutsideAlerter(ref,setEdit) {
|
||||||
|
useEffect(() => {
|
||||||
|
/**
|
||||||
|
* Alert if clicked on outside of element
|
||||||
|
*/
|
||||||
|
function handleClickOutside(event) {
|
||||||
|
if (ref.current && !ref.current.contains(event.target)) {
|
||||||
|
setEdit(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bind the event listener
|
||||||
|
document.addEventListener("mousedown", handleClickOutside);
|
||||||
|
return () => {
|
||||||
|
// Unbind the event listener on clean up
|
||||||
|
document.removeEventListener("mousedown", handleClickOutside);
|
||||||
|
};
|
||||||
|
}, [ref]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function Class(p) {
|
function Class(p) {
|
||||||
const class_obj = CLASSES[p.name]
|
const class_obj = CLASSES[p.name]
|
||||||
return <><img alt="" src={class_obj.icon}/>{class_obj.name}</>
|
return <><img alt="" src={class_obj.icon}/>{class_obj.name}</>
|
||||||
}
|
}
|
||||||
|
|
||||||
function ClassSelector(p){
|
function ClassSelector(p){
|
||||||
return <div className="popup">
|
const wrapperRef = useRef(null);
|
||||||
|
useOutsideAlerter(wrapperRef,p.setEdit);
|
||||||
|
return <div className="popup" ref={wrapperRef}>
|
||||||
Class Selector<br/>
|
Class Selector<br/>
|
||||||
{Object.keys(CLASSES).map((cl,i)=>{
|
{Object.keys(CLASSES).map((cl,i)=>{
|
||||||
return <button id={i} className="rounded" onClick={()=>{p.setClassName(cl);p.setEdit(false)}}><img alt="" src={CLASSES[cl].icon}/><br/>{CLASSES[cl].name}</button>
|
return <button id={i} className="rounded" onClick={()=>{p.setClassName(cl);p.setEdit(false)}}><img alt="" src={CLASSES[cl].icon}/><br/>{CLASSES[cl].name}</button>
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
|
/*return <ReactWindow title="Test Window">
|
||||||
|
This is a test window.
|
||||||
|
</ReactWindow>*/
|
||||||
}
|
}
|
||||||
|
|
||||||
function EditableClass(p){
|
function EditableClass(p){
|
||||||
@ -245,7 +276,7 @@ function EquippedWeaponBox(p) {
|
|||||||
},[currentPage,p.armorSlot1,p.armorSlot1EnhancementLv,p.armorSlot1AbilityList,p.armorSlot2,p.armorSlot2EnhancementLv,p.armorSlot2AbilityList,p.armorSlot3,p.armorSlot3EnhancementLv,p.armorSlot3AbilityList,p.weapon,p.weaponEnhancementLv,p.weaponAbilityList])
|
},[currentPage,p.armorSlot1,p.armorSlot1EnhancementLv,p.armorSlot1AbilityList,p.armorSlot2,p.armorSlot2EnhancementLv,p.armorSlot2AbilityList,p.armorSlot3,p.armorSlot3EnhancementLv,p.armorSlot3AbilityList,p.weapon,p.weaponEnhancementLv,p.weaponAbilityList])
|
||||||
|
|
||||||
return <Box title="Equipped Weapon">
|
return <Box title="Equipped Weapon">
|
||||||
<h2><img alt="" src="https://pso2na.arks-visiphone.com/images/b/bc/NGSUIItemAssaultRifleMini.png" />{selectedEquip}+{selectedEquipEnhancementLv}</h2>
|
<h2><img alt="" src="/ngsplanner/icons/NGSUIItemAssaultRifleMini.png" />{selectedEquip}+{selectedEquipEnhancementLv}</h2>
|
||||||
<PageControl pages={4} currentPage={currentPage} setCurrentPage={setCurrentPage} pageNames={["W",1,2,3]}/>
|
<PageControl pages={4} currentPage={currentPage} setCurrentPage={setCurrentPage} pageNames={["W",1,2,3]}/>
|
||||||
<div className="de">
|
<div className="de">
|
||||||
<div>
|
<div>
|
||||||
@ -297,7 +328,7 @@ function ListRow(p) {
|
|||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const [author,setAuthor] = useState("Dudley")
|
const [author,setAuthor] = useState("Dudley")
|
||||||
const [buildName,setBuildName] = useState("Fatimah")
|
const [buildName,setBuildName] = useState("Fatimah")
|
||||||
const [className,setClassName] = useState("RANGER")
|
const [className,setClassName] = useState("RANGER")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user