2023-04-18 22:21:28 +02:00
|
|
|
import React, { useState } from "react";
|
2023-04-09 08:37:29 +02:00
|
|
|
import { StyledModal } from "./styled/SettingsModal.styled";
|
2023-03-15 15:25:09 +01:00
|
|
|
import { Link, useLocation, useNavigate } from "react-router-dom";
|
|
|
|
|
import Modal from "react-modal";
|
2023-04-08 13:27:17 +02:00
|
|
|
import useGeneralStore from "../hooks/stores/useGeneralStore";
|
2023-03-15 15:25:09 +01:00
|
|
|
|
|
|
|
|
const customOverlayStyles = {
|
|
|
|
|
overlay: {
|
|
|
|
|
backgroundColor: 'rgba(0,0,0,.25)'
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const SettingsModal = ({ isOpen, closeModal }) => {
|
2023-04-08 13:27:17 +02:00
|
|
|
const selectedStyle = useGeneralStore(state => state.selectedStyle);
|
2023-03-15 15:25:09 +01:00
|
|
|
const navigate = useNavigate();
|
|
|
|
|
const location = useLocation();
|
2023-04-18 22:21:28 +02:00
|
|
|
const [expanded, setExpanded] = useState([]);
|
2023-03-15 15:25:09 +01:00
|
|
|
|
|
|
|
|
const handleCloseModal = () => {
|
|
|
|
|
closeModal();
|
|
|
|
|
|
|
|
|
|
if (location.pathname === "/settings") {
|
|
|
|
|
navigate(-1, { replace: true });
|
|
|
|
|
} else {
|
|
|
|
|
navigate("/settings", { state: { from: location } });
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2023-04-18 22:21:28 +02:00
|
|
|
const toggleExpanded = (index) => {
|
|
|
|
|
setExpanded((prevExpanded) => {
|
|
|
|
|
const newExpanded = [...prevExpanded];
|
|
|
|
|
if (newExpanded.includes(index)) {
|
|
|
|
|
newExpanded.splice(newExpanded.indexOf(index), 1);
|
|
|
|
|
} else {
|
|
|
|
|
newExpanded.push(index);
|
|
|
|
|
}
|
|
|
|
|
return newExpanded;
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const expandAll = () => {
|
|
|
|
|
if (expanded.length === 3) {
|
|
|
|
|
setExpanded([]);
|
|
|
|
|
} else {
|
|
|
|
|
setExpanded([0, 1, 2]);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-03-15 15:25:09 +01:00
|
|
|
return (
|
|
|
|
|
<StyledModal
|
|
|
|
|
isOpen={isOpen}
|
|
|
|
|
onRequestClose={closeModal}
|
|
|
|
|
contentLabel="Settings"
|
|
|
|
|
style={customOverlayStyles}
|
|
|
|
|
selectedStyle={selectedStyle}
|
2023-04-18 22:21:28 +02:00
|
|
|
expanded={expanded}
|
2023-03-15 15:25:09 +01:00
|
|
|
>
|
|
|
|
|
<div className="panel">
|
|
|
|
|
<div className="panel-header">
|
|
|
|
|
Settings
|
|
|
|
|
<Link to="" onClick={handleCloseModal}>
|
|
|
|
|
<span className="icon" title="close" />
|
|
|
|
|
</Link>
|
|
|
|
|
</div>
|
2023-04-18 22:21:28 +02:00
|
|
|
<div className="all-div">
|
|
|
|
|
[
|
|
|
|
|
<button className="all-button"
|
|
|
|
|
onClick={expandAll} style={{all: "unset", cursor: "pointer"}}>
|
|
|
|
|
{expanded.length === 3 ? "Collapse All Settings" : "Expand All Settings"}
|
|
|
|
|
</button>
|
|
|
|
|
]
|
|
|
|
|
</div>
|
|
|
|
|
<ul>
|
|
|
|
|
<li className="settings-cat-lbl">
|
|
|
|
|
<span className={`${expanded.includes(0) ? 'minus' : 'plus'}`}
|
|
|
|
|
onClick={() => toggleExpanded(0)}
|
|
|
|
|
/>
|
|
|
|
|
<span className="settings-pointer" style={{cursor: "pointer"}}
|
|
|
|
|
onClick={() => toggleExpanded(0)}
|
|
|
|
|
>Account</span>
|
|
|
|
|
</li>
|
|
|
|
|
<ul className="settings-cat" style={{ display: expanded.includes(0) ? 'block' : 'none' }}>
|
|
|
|
|
<li>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</ul>
|
|
|
|
|
<ul>
|
|
|
|
|
<li className="settings-cat-lbl">
|
|
|
|
|
<span className={`${expanded.includes(1) ? 'minus' : 'plus'}`}
|
|
|
|
|
onClick={() => toggleExpanded(1)}
|
|
|
|
|
/>
|
|
|
|
|
<span className="settings-pointer" style={{cursor: "pointer"}}
|
|
|
|
|
onClick={() => toggleExpanded(1)}
|
|
|
|
|
>Profile</span>
|
|
|
|
|
</li>
|
|
|
|
|
<ul className="settings-cat" style={{ display: expanded.includes(1) ? 'block' : 'none' }}>
|
|
|
|
|
<li>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</ul>
|
|
|
|
|
<ul>
|
|
|
|
|
<li className="settings-cat-lbl">
|
|
|
|
|
<span className={`${expanded.includes(2) ? 'minus' : 'plus'}`}
|
|
|
|
|
onClick={() => toggleExpanded(2)}
|
|
|
|
|
/>
|
|
|
|
|
<span className="settings-pointer" style={{cursor: "pointer"}}
|
|
|
|
|
onClick={() => toggleExpanded(2)}
|
|
|
|
|
>Plebbit Options</span>
|
|
|
|
|
</li>
|
|
|
|
|
<ul className="settings-cat" style={{ display: expanded.includes(2) ? 'block' : 'none' }}>
|
|
|
|
|
<li className="settings-option disc">
|
|
|
|
|
IPFS Gateway URL</li>
|
|
|
|
|
<li className="settings-tip">Optional URL of an IPFS gateway</li>
|
|
|
|
|
<div className="settings-input">
|
|
|
|
|
<input type="text" placeholder="IPFS Gateway URL" />
|
|
|
|
|
</div>
|
|
|
|
|
</ul>
|
|
|
|
|
<ul className="settings-cat" style={{ display: expanded.includes(2) ? 'block' : 'none' }}>
|
|
|
|
|
<li className="settings-option disc">
|
|
|
|
|
IPFS HTTP Client Options</li>
|
|
|
|
|
<li className="settings-tip">Optional URL of an IPFS API or IpfsHttpClientOptions, http://localhost:5001 to use a local IPFS node</li>
|
|
|
|
|
<div className="settings-input">
|
|
|
|
|
<input type="text" placeholder="IpfsHttpClientOptions" />
|
|
|
|
|
</div>
|
|
|
|
|
</ul>
|
|
|
|
|
<ul className="settings-cat" style={{ display: expanded.includes(2) ? 'block' : 'none' }}>
|
|
|
|
|
<li className="settings-option disc">
|
|
|
|
|
PubSub HTTP Client Options</li>
|
|
|
|
|
<li className="settings-tip">Optional URL or IpfsHttpClientOptions used for pubsub publishing when ipfsHttpClientOptions isn't available, like in the browser</li>
|
|
|
|
|
<div className="settings-input">
|
|
|
|
|
<input type="text" placeholder="pubsubHttpClientOptions" />
|
|
|
|
|
</div>
|
|
|
|
|
</ul>
|
|
|
|
|
</ul>
|
|
|
|
|
<div className="center">
|
|
|
|
|
<button className="save-button">Save</button>
|
|
|
|
|
<button className="reset-button">Reset</button>
|
|
|
|
|
</div>
|
2023-03-15 15:25:09 +01:00
|
|
|
</div>
|
|
|
|
|
</StyledModal>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Modal.setAppElement("#root");
|
|
|
|
|
|
|
|
|
|
export default SettingsModal;
|