mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-11-02 11:57:04 +08:00
110 lines
3.3 KiB
JavaScript
110 lines
3.3 KiB
JavaScript
import React from "react";
|
|
import { Link } from "react-router-dom";
|
|
|
|
import { Session } from "../model/";
|
|
import { Container, Loader, Icon } from "../components/";
|
|
import { memory, currentShare } from "../helpers/";
|
|
import { t } from "../locales/";
|
|
|
|
import "../pages/error.scss";
|
|
|
|
export function LoggedInOnly(WrappedComponent){
|
|
memory.set("user::authenticated", false);
|
|
|
|
return class extends React.Component {
|
|
constructor(props){
|
|
super(props);
|
|
this.state = {
|
|
is_logged_in: memory.get("user::authenticated")
|
|
};
|
|
}
|
|
|
|
componentDidMount(){
|
|
if(this.state.is_logged_in === false && currentShare() === null){
|
|
Session.currentUser().then((res) => {
|
|
if(res.is_authenticated === false){
|
|
this.props.error({message: "Authentication Required"});
|
|
return;
|
|
}
|
|
memory.set("user::authenticated", true);
|
|
this.setState({is_logged_in: true});
|
|
}).catch((err) => {
|
|
if(err.code === "NO_INTERNET"){
|
|
this.setState({is_logged_in: true});
|
|
return;
|
|
}
|
|
this.props.error(err);
|
|
});
|
|
}
|
|
}
|
|
|
|
render(){
|
|
if(this.state.is_logged_in === true || currentShare() !== null){
|
|
return <WrappedComponent {...this.props} />;
|
|
}
|
|
return null;
|
|
}
|
|
};
|
|
}
|
|
|
|
export function ErrorPage(WrappedComponent){
|
|
return class extends React.Component {
|
|
constructor(props){
|
|
super(props);
|
|
this.state = {
|
|
error: null,
|
|
has_back_button: false
|
|
};
|
|
this.unlisten = this.props.history.listen(() => {
|
|
this.setState({has_back_button: false});
|
|
this.unlisten();
|
|
});
|
|
}
|
|
|
|
componentWillUnmount(){
|
|
if(this.unlisten) this.unlisten();
|
|
}
|
|
|
|
update(obj){
|
|
this.setState({error: obj});
|
|
}
|
|
|
|
navigate(e) {
|
|
if(this.state.has_back_button){
|
|
e.preventDefault();
|
|
this.props.history.goBack();
|
|
}
|
|
}
|
|
|
|
render(){
|
|
if(this.state.error !== null){
|
|
const message = this.state.error.message || t("There is nothing in here");
|
|
return (
|
|
<div>
|
|
<Link onClick={this.navigate.bind(this)} to={`/${window.location.search}`} className="backnav">
|
|
<Icon name="arrow_left" />{ this.state.has_back_button ? "back" : "home" }
|
|
</Link>
|
|
<Container>
|
|
<div className="error-page">
|
|
<h1>{ t("Oops!") }</h1>
|
|
<h2>{ message }</h2>
|
|
</div>
|
|
</Container>
|
|
</div>
|
|
);
|
|
}
|
|
return (
|
|
<WrappedComponent error={this.update.bind(this)} {...this.props} />
|
|
);
|
|
}
|
|
};
|
|
}
|
|
|
|
export const LoadingPage = () => {
|
|
return (
|
|
<div style={{marginTop: parseInt(window.innerHeight / 3)+"px"}}>
|
|
<Loader />
|
|
</div>
|
|
);
|
|
};
|