//import './App.css'; Old CSS
import './reset.css'; // Generic reset
import './style.css'; // The new new
import React, {useState,useEffect,useRef,useReducer} from 'react';
import ReactWindow from 'reactjs-windows'
import 'reactjs-windows/dist/index.css'
import {XSquareFill} from 'react-bootstrap-icons'
import {
BrowserRouter as Router,
Switch,
Route
} from "react-router-dom";
import { HashLink as Link } from 'react-router-hash-link';
import TestHeader from './TestHeader'; // Test Header!
import TestPanel from './TestPanel'; // Dudley's Test Panel
const axios = require('axios');
const BACKEND_URL = 'https://projectdivar.com:4504';
function Col(p) {
return
{p.children}
}
function Box(p) {
return <>
♦ {p.title}
{p.children}
>
}
function EditBox(p) {
useEffect(()=>{
var timer1 = setTimeout(()=>{document.getElementById("editBox").focus()},100)
return () => {
clearTimeout(timer1);
};
})
return {
if (e.key==="Enter") {p.setEdit(false)}
else if (e.key==="Escape") {p.setEdit(false)}
}} maxLength={p.maxlength?p.maxlength:20} onBlur={()=>{p.setEdit(false)}} value={p.value} onChange={(f)=>{f.currentTarget.value.length>0?p.setName(f.currentTarget.value):p.setName(p.originalName)}}>
}
function EditableBox(p) {
const [edit,setEdit] = useState(false)
useEffect(()=>{
if (p.callback) {
p.callback()
}
},[edit,p])
return <>
{setEdit(true)}}>
{edit?
:<>{p.data}>}
>
}
const CLASSES = {
HUNTER:{
name:"Hunter",
icon:process.env.PUBLIC_URL+"/icons/UINGSClassHu.png"
},
FIGHTER:{
name:"Fighter",
icon:process.env.PUBLIC_URL+"/icons/UINGSClassFi.png"
},
RANGER:{
name:"Ranger",
icon:process.env.PUBLIC_URL+"/icons/UINGSClassRa.png"
},
GUNNER:{
name:"Gunner",
icon:process.env.PUBLIC_URL+"/icons/UINGSClassGu.png"
},
FORCE:{
name:"Force",
icon:process.env.PUBLIC_URL+"/icons/UINGSClassFo.png"
},
TECHTER:{
name:"Techter",
icon:process.env.PUBLIC_URL+"/icons/UINGSClassTe.png"
}
}
const EFFECTS = {
"Food Boost Effect":{
perks:[
"[Meat] Potency +10.0%",
"[Crisp] Potency to Weak Point +5.0%"
],
icon:process.env.PUBLIC_URL+"/icons/TQ8EBW2.png"
},
"Shifta / Deband":{
perks:[
"Potency +5.0%",
"Damage Resistance +10.0%"
],
icon:process.env.PUBLIC_URL+"/icons/VIYYNIm.png"
},
"Region Mag Boost":{
perks:[
"Potency +5.0%",
],
icon:process.env.PUBLIC_URL+"/icons/N6M74Qr.png"
},
}
const EQUIPMENT = {
"Ophistia Shooter":{
icon:process.env.PUBLIC_URL+"/icons/uc1iBck.png"
},
"Klauzdyne":{
icon:process.env.PUBLIC_URL+"/icons/uldt9lR.png"
},
"Klauznum":{
icon:process.env.PUBLIC_URL+"/icons/F0t58xP.png"
},
"Klauzment":{
icon:process.env.PUBLIC_URL+"/icons/20M6Z7t.png"
}
}
const ABILITIES = {
"Wellspring Unit Lv.3":{
icon:process.env.PUBLIC_URL+"/icons/NGSUIItemPotentialAbility.png"
},
"Fixa Fatale Lv.5":{
icon:process.env.PUBLIC_URL+"/icons/UINGSItemPresetAbility.png"
}
}
const ABILITY_DEFAULT_ICON = process.env.PUBLIC_URL+"/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,setEdit]);
}
function Class(p) {
const class_obj = CLASSES[p.name]
return <> {class_obj.name}>
}
function ClassSelector(p){
const wrapperRef = useRef(null);
useOutsideAlerter(wrapperRef,p.setEdit);
return
Class Selector
{Object.keys(CLASSES).map((cl,i)=>{
return
{p.setClassName(cl);p.setEdit(false)}}> {CLASSES[cl].name}
})}
/*return
This is a test window.
*/
}
function EditableClass(p){
const [edit,setEdit] = useState(false)
return <>{setEdit(!edit)}}>
{edit&&}
>
}
function Table(p) {
return
}
function MainBox(p) {
return
}>Lv.20
>}>Lv.15
Share Save
}
function StatsBox(p) {
return
+{p.weaponUp1*100}% >}> +{p.weaponUp2*100}%
+{p.weaponUp3*100}% >}>
}
function EffectListing(p) {
return {p.name}
{EFFECTS[p.name].perks.map((perk,i)=>{
return {perk}
})}
}
function PageControlButton(p) {
return {p.setCurrentPage(p.page)}} className={(p.currentPage===p.page)?"selected":""}>{p.pageName?p.pageName:p.page}
}
function PageControl(p) {
var pages = []
for (var i=0;i)
}
return
{pages.map((page,i)=>{return {page} })}
}
function EffectsBox(p) {
const [currentPage,setCurrentPage]=useState(1)
return
Effect Name
{
currentPage===1?
{p.effectList.map((ef,i)=>{
return
})}
:
<>>
}
}
function EquipBox(p) {
return
Weapon {p.weapon}+{p.weaponEnhancementLv}
Slot 1 {p.armorSlot1}+{p.armorSlot1EnhancementLv}
Slot 2 {p.armorSlot2}+{p.armorSlot2EnhancementLv}
Slot 3 {p.armorSlot3}+{p.armorSlot3EnhancementLv}
}
function EquippedWeaponBox(p) {
const [currentPage,setCurrentPage] = useState(1)
const [selectedEquip,setSelectedEquip] = useState(p.weapon)
const [selectedEquipEnhancementLv,setSelectedEquipEnhancementLv] = useState(p.weaponEnhancementLv)
const [selectedEquipAbilities,setSelectedEquipAbilities] = useState(p.weaponAbilityList)
useEffect(()=>{
switch (currentPage) {
case 2:
setSelectedEquip(p.armorSlot1)
setSelectedEquipEnhancementLv(p.armorSlot1EnhancementLv)
setSelectedEquipAbilities(p.armorSlot1AbilityList)
break;
case 3:
setSelectedEquip(p.armorSlot2)
setSelectedEquipEnhancementLv(p.armorSlot2EnhancementLv)
setSelectedEquipAbilities(p.armorSlot2AbilityList)
break;
case 4:
setSelectedEquip(p.armorSlot3)
setSelectedEquipEnhancementLv(p.armorSlot3EnhancementLv)
setSelectedEquipAbilities(p.armorSlot3AbilityList)
break;
default:{
setSelectedEquip(p.weapon)
setSelectedEquipEnhancementLv(p.weaponEnhancementLv)
setSelectedEquipAbilities(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
{selectedEquip}+{selectedEquipEnhancementLv}
Abilitiy Details
{
selectedEquipAbilities?selectedEquipAbilities.map((ability,i)=>{
return {ability}
}):<>>
}
Properties
Enhancement Lv. +{selectedEquipEnhancementLv}
Multi-Weapon -
Element -
}
function DamageBox(p) {
const [currentPage,setCurrentPage] = useState(1)
return
{
currentPage===1&&
{p.criticalHitRate*100}%
{p.criticalMultiplier*100}%
{p.midRange}
{p.critical}
{p.effective}
}
}
function ListRow(p) {
return
{p.title}
{p.content}
{p.children}
}
function PopupWindow(p) {
return
This is a test window.
}
function EditBackendBox(p) {
useEffect(()=>{
var timer1 = setTimeout(()=>{document.getElementById("editBox").focus()},100)
return () => {
clearTimeout(timer1);
};
})
return {
if (e.key==="Enter") {p.setEdit(false);p.setUpdate(true)}
else if (e.key==="Escape") {p.setEdit(false)}
}} maxLength={p.maxlength?p.maxlength:20} onBlur={()=>{p.setEdit(false);p.setUpdate(true)}} value={p.value} onChange={(f)=>{f.currentTarget.value.length>0?p.setName(f.currentTarget.value):p.setName(p.originalName)}}>
}
function EditableBackendBox(p) {
const [update,setUpdate] = useState(false)
const [edit,setEdit] = useState(false)
const [value,setValue] = useState(p.children)
const [originalValue,setOriginalValue] = useState(p.children)
useEffect(()=>{
if (p.callback&&update) {
p.callback(value)
.then(()=>{
setUpdate(false)
setOriginalValue(value)
})
.catch(()=>{
setUpdate(false)
setValue(originalValue)
})
}
},[update,originalValue,p,value])
return <>
{setEdit(true)}}>
{edit?
:<>{value}>}
>
}
function TableEditor(p) {
const initialVals={}
function updateVals(state,update) {
if (update==='Clear') {
return initialVals
}
state[update.field]=update.value
return state
}
const [fields,setFields] = useState([])
const [data,setData] = useState([])
const [update,setUpdate] = useState(false)
const [submitVals,setSubmitVal] = useReducer(updateVals,initialVals)
function SubmitBoxes() {
axios.post(BACKEND_URL+p.path,submitVals)
.then(()=>{
setUpdate(true)
})
.catch((err)=>{
alert(JSON.stringify(err.response.data))
})
}
useEffect(()=>{
setUpdate(true)
},[p.path])
useEffect(()=>{
if (update) {
axios.get(BACKEND_URL+p.path)
.then((data)=>{
var cols = data.data.fields
var rows = data.data.rows
setFields(cols.filter((col)=>col.name!=="id").map((col)=>col.name))
setData(rows)
})
setUpdate(false)
}
},[update,p.path])
return <>
>
}
function AdminPanel(p) {
return
Class
Class Data
Class-Weapon Compatibility
Weapons
Weapon Existence Data
Weapon Types
Class-Weapon Compatibility
Armor
Potentials
Potential Data
Builds
Skills
Skill Types
Skill Data
Augments
Augment Types
Food
Food Multipliers
Roles
Users
}
function App() {
const [author,setAuthor] = useState("Dudley")
const [buildName,setBuildName] = useState("Fatimah")
const [className,setClassName] = useState("RANGER")
const [secondaryClassName,setSecondaryClassName] = useState("FORCE")
const [bp,setBP] = useState(1344)
const [hp,setHP] = useState(289)
const [pp,setPP] = useState(100)
const [def,setDef] = useState(402)
const [weaponUp1,setWeaponUp1] = useState(0.34)
const [weaponUp2,setWeaponUp2] = useState(0.34)
const [weaponUp3,setWeaponUp3] = useState(0.34)
const [damageResist,setDamageResist] = useState(0.18)
const [effectList,setEffectList] = useState([
"Food Boost Effect",
"Shifta / Deband",
"Region Mag Boost"
])
const [weapon,setWeapon] = useState("Ophistia Shooter")
const [armorSlot1,setArmorSlot1] = useState("Klauzdyne")
const [armorSlot2,setArmorSlot2] = useState("Klauznum")
const [armorSlot3,setArmorSlot3] = useState("Klauzment")
const [weaponEnhancementLv,setWeaponEnhancementLv] = useState(35)
const [armorSlot1EnhancementLv,setArmorSlot1EnhancementLv] = useState(10)
const [armorSlot2EnhancementLv,setArmorSlot2EnhancementLv] = useState(10)
const [armorSlot3EnhancementLv,setArmorSlot3EnhancementLv] = useState(10)
const [weaponAbilityList,setWeaponAbilityList] = useState([
"Wellspring Unit Lv.3",
"Fixa Fatale Lv.5",
"Legaro S Attack II",
"Legaro S Efficiet",
"Legaro S Efficiet",
"Legaro Souls 2",
"Legaro Reverij",
"Legaro Factalz",
"Legaro Crakus",
"Legaro Attack Vaz III",
])
const [armor1AbilityList,setArmor1AbilityList] = useState([])
const [armor2AbilityList,setArmor2AbilityList] = useState([])
const [armor3AbilityList,setArmor3AbilityList] = useState([])
const [criticalHitRate,setCriticalHitRate] = useState(0.05)
const [criticalMultiplier,setCriticalMultiplier] = useState(1.2)
const [midRange,setMidRange] = useState(126)
const [critical,setCritical] = useState(152)
const [effective,setEffective] = useState(127)
return (
<>
>
);
}
export default App;