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" >
2023-04-19 14:00:45 +02:00
IPFS Gateway URLs </ li >
< li className = "settings-tip" > Optional URLs of IPFS gateways .</ li >
2023-04-18 22:21:28 +02:00
< div className = "settings-input" >
2023-04-19 14:00:45 +02:00
< textarea placeholder = "IPFS Gateway URLs"
2023-04-19 13:56:38 +02:00
defaultValue = {[
"https://ipfs.io" ,
"https://ipfsgateway.xyz" ,
"https://cloudflare-ipfs.com"
]. join ( "\n" )}
/>
2023-04-18 22:21:28 +02:00
</ div >
</ ul >
< ul className = "settings-cat" style = {{ display : expanded . includes ( 2 ) ? 'block' : 'none' }}>
< li className = "settings-option disc" >
IPFS HTTP Client Options </ li >
2023-04-19 14:00:45 +02:00
< li className = "settings-tip" > Optional URL of an IPFS API or IpfsHttpClientOptions , http : //localhost:5001 to use a local IPFS node.</li>
2023-04-18 22:21:28 +02:00
< div className = "settings-input" >
2023-04-19 13:56:38 +02:00
< textarea placeholder = "IpfsHttpClientOptions" />
2023-04-18 22:21:28 +02:00
</ div >
</ ul >
< ul className = "settings-cat" style = {{ display : expanded . includes ( 2 ) ? 'block' : 'none' }}>
< li className = "settings-option disc" >
PubSub HTTP Client Options </ li >
2023-04-19 14:00:45 +02:00
< li className = "settings-tip" > Optional URL or IpfsHttpClientOptions used for pubsub publishing when ipfsHttpClientOptions isn 't available, like in the browser.</li>
2023-04-18 22:21:28 +02:00
<div className="settings-input">
2023-04-19 13:56:38 +02:00
<textarea placeholder="pubsubHttpClientOptions" defaultValue="https://pubsubprovider.xyz/api/v0" />
</div>
</ul>
<ul className="settings-cat" style={{ display: expanded.includes(2) ? ' block ' : ' none ' }} >
< li className = "settings-option disc" >
Data Path ( Node Only )</ li >
2023-04-19 14:00:45 +02:00
< li className = "settings-tip" > Optional folder path to create / resume the user and subplebbit databases .</ li >
2023-04-19 13:56:38 +02:00
< div className = "settings-input" >
< textarea placeholder = "dataPath" />
2023-04-18 22:21:28 +02:00
</ div >
</ ul >
</ ul >
2023-04-19 13:56:38 +02:00
< div >
< button className = "cache-button" > Clear Cache </ button >
</ div >
2023-04-18 22:21:28 +02:00
< 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 ;