Files
myDrive/src/components/SettingsPage/index.js
T

1491 lines
48 KiB
JavaScript

import React from "react";
import Header from "../Header/index";
import axios from "../../axiosInterceptor"
import env from "../../enviroment/envFrontEnd";
import Swal from "sweetalert2"
import bytes from "bytes";
import moment from "moment"
import capitalize from "../../utils/capitalize";
import { resetCurrentRoute } from "../../actions/routes";
import { setFolders } from "../../actions/folders";
import { setQuickFiles } from "../../actions/quickFiles";
import { hideSettings } from "../../actions/settings";
import { startLogout, startLogoutAll } from "../../actions/auth";
import { setFiles, startResetCache } from "../../actions/files";
import {connect} from "react-redux"
import { setParent } from "../../actions/parent";
import uuid from "uuid"
import InvoiceItem from "../InvoiceItem";
import {setUpdateSettingsID} from "../../utils/updateSettings";
import HomepageSpinner from "../HomepageSpinner";
import { setLoading } from "../../actions/main";
// import {updateSettingsID} from "../MainSection"
// import { resetSettingsMain } from "../../actions/main";
class SettingsPageContainer extends React.Component {
constructor(props) {
super(props);
this.state = {
sideBarOpen: false,
mode: "general",
loaded: false,
userDetails: {},
addS3AccountOpen: false,
s3ID: "",
s3Key: "",
s3Bucket: "",
addGoogleAccountOpen: false,
googleID: "",
googleSecret: "",
invoiceData: {},
invoices: [],
invoicesLoaded: false,
showChangePassword: false,
oldPassword: "",
newPassword: "",
verifyNewPassword: "",
showAddName: false,
name: "",
listView: true,
dateSort: true,
descendingSort: true,
dropToUpload: true,
doubleClickFolders: false,
hideFolderTree: false,
showFolderTreeScrollBars: false
}
this.uploadReference = React.createRef()
}
getUserDetails = () => {
this.props.dispatch(setLoading(true));
axios.get("/user-service/user-detailed").then((response) => {
env.name = response.data.name;
env.emailAddress = response.data.email
this.props.dispatch(setParent(uuid.v4()))
console.log("user detailed", response.data)
this.setState(() => {
return {
...this.state,
loaded: true,
userDetails: response.data
}
}, () => {
// this.getInvoiceData();
this.props.dispatch(setLoading(false))
})
}).catch((err) => {
console.log("Loading user details error", err);
})
}
componentDidMount = () => {
this.getUserDetails();
this.setSettings();
//console.log("env sub", this.state.userDetails.activeSubscription)
}
setSettings = () => {
const gridMode = window.localStorage.getItem("grid-mode");
const nameMode = window.localStorage.getItem("name-mode");
const ascMode = window.localStorage.getItem("asc-mode");
const dropToUpload = window.localStorage.getItem("non_drop-mode");
const doubleClickFolders = window.localStorage.getItem("double-click-folders");
const hideFolderTree = window.localStorage.getItem("hide-folder-tree");
const showFolderTreeScrollBars = window.localStorage.getItem("show-folder-tree-scroll-bars")
this.setState(() => {
return {
...this.state,
listView: !gridMode,
dateSort: !nameMode,
descendingSort: !ascMode,
dropToUpload: !dropToUpload,
doubleClickFolders: doubleClickFolders,
hideFolderTree: hideFolderTree,
showFolderTreeScrollBars
}
})
}
showSideBar = () => {
this.setState(() => {
return {
...this.state,
sideBarOpen: !this.state.sideBarOpen
}
})
}
modeChangeFullScreen = (type) => {
this.setState(() => {
return {
...this.state,
mode: type
}
})
}
modeChange = (type) => {
this.setState(() => {
return {
...this.state,
mode: type
}
}, () => {
this.showSideBar()
})
//this.showSideBar()
}
getProfilePicName = () => {
if (!this.state.loaded) return "?";
if (this.state.userDetails.name) {
if (this.state.userDetails.name.length >= 1) {
return this.state.userDetails.name.substring(0, 1).toUpperCase();
} else {
return "?"
}
} else if (this.state.userDetails.email.length >= 1) {
return this.state.userDetails.email.substring(0,1).toUpperCase();
} else {
return "?"
}
}
onChangeS3ID = (e) => {
const value = e.target.value;
this.setState(() => {
return {
...this.state,
s3ID: value
}
})
}
onChangeS3Bucket = (e) => {
const value = e.target.value;
this.setState(() => {
return {
...this.state,
s3Bucket: value
}
})
}
onChangeS3Key = (e) => {
const value = e.target.value;
this.setState(() => {
return {
...this.state,
s3Key: value
}
})
}
onChangeGoogleID = (e) => {
const value = e.target.value;
this.setState(() => {
return {
...this.state,
googleID: value
}
})
}
onChangeGoogleSecret = (e) => {
const value = e.target.value;
this.setState(() => {
return {
...this.state,
googleSecret: value
}
})
}
showS3Account = () => {
this.setState(() => {
return {
...this.state,
addS3AccountOpen: !this.state.addS3AccountOpen
}
})
}
showGoogleAccount = () => {
this.setState(() => {
return {
...this.state,
addGoogleAccountOpen: !this.state.addGoogleAccountOpen
}
})
}
submitS3Account = (e) => {
e.preventDefault()
const data = {
id: this.state.s3ID,
bucket: this.state.s3Bucket,
key: this.state.s3Key
}
axios.post("/user-service/add-s3-storage", data).then((response) => {
Swal.fire(
'S3 Account Added',
'Amazon S3 Account has been linked with myDrive',
'success'
).then(() => {
//window.location.assign(env.url);
env.s3Enabled = true;
this.getUserDetails()
this.showS3Account()
// let newUser = this.state.userDetails;
// newUser = {...newUser, s3Enabled: true}
})
}).catch((err) => {
Swal.fire({
icon: 'error',
title: 'Add S3 Account Error',
text: 'Invalid S3 Credentials',
})
})
}
getInvoiceData = () => {
if (!env.commercialMode || !this.state.userDetails.activeSubscription) return;
axios.get("/user-service/payments").then((response) => {
const invoices = response.data.invoices;
let invoiceDetails = response.data;
//delete invoiceDetails.invoices;
this.setState(() => {
return {
...this.state,
invoiceData: invoiceDetails,
invoices,
invoicesLoaded: true}
})
}).catch((e) => {
console.log("invoice err", e)
})
}
removeS3Account = (e) => {
if (e) e.preventDefault();
Swal.fire({
title: 'Remove S3 Account?',
text: "This will unlink your Amazon S3 Account from myDrive.",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, remove account'
}).then((result) => {
if (result.value) {
axios.delete('/user-service/remove-s3-storage').then((response) => {
let newUser = this.state.userDetails;
delete newUser.s3Enabled;
env.s3Enabled = undefined;
this.setState(() => {
return {
...this.state,
userDetails: newUser
}
})
this.showS3Account()
Swal.fire(
'S3 Account Removed',
'Your Amazon S3 Account has been unlinked from myDrive',
'success'
)
}).catch((err) => {
console.log("could not remove google account", err);
})
}
})
}
refreshStorageSize = () => {
axios.patch("/user-service/refresh-storage-size", undefined).then((response) => {
this.getUserDetails()
}).catch((err) => {
console.log("refresh storage error")
})
}
submitGoogleAccount = (e) => {
e.preventDefault()
const clientID = this.state.googleID;
const clientKey = this.state.googleSecret;
const clientRedirect = "/add-google-account"
const data = {
clientID,
clientKey,
clientRedirect
}
axios.post("/user-service/create-google-storage-url", data).then((response) => {
const googleURL = response.data
window.location.assign(googleURL)
}).catch((err) => {
console.log("create url error", err)
})
}
removeGoogleAccount = (e) => {
e.preventDefault();
axios.delete('/user-service/remove-google-storage').then((response) => {
env.googleDriveEnable = undefined;
this.showGoogleAccount();
this.getUserDetails();
Swal.fire(
'Google Account Removed',
'Your Google Account has been unlinked from myDrive',
'success'
).then(() => {
// window.location.assign(env.url)
})
})
}
getStoragePercentage = () => {
let value = Math.floor((this.state.userDetails.storageData.storageSize / this.state.userDetails.storageData.storageLimit) * 100);
if (value < 0) value = 0;
if (value > 100) value = 100;
return value;
}
getStoragePercentageGoogle = () => {
let value = Math.floor((this.state.userDetails.storageDataGoogle.storageSize / this.state.userDetails.storageDataGoogle.storageLimit) * 100);
if (value < 0) value = 0;
if (value > 100) value = 100;
return value;
}
launchStoragePage = () => {
window.location.assign(env.url+"/add-storage")
}
logout = () => {
this.props.dispatch(resetCurrentRoute())
this.props.dispatch(setFolders([]));
this.props.dispatch(setFiles([]));
this.props.dispatch(setQuickFiles([]));
this.props.dispatch(hideSettings())
this.props.dispatch(startLogout())
}
logoutAll = () => {
this.props.dispatch(resetCurrentRoute())
this.props.dispatch(setFolders([]));
this.props.dispatch(setFiles([]));
this.props.dispatch(setQuickFiles([]));
this.props.dispatch(hideSettings());
this.props.dispatch(startLogoutAll());
}
changeShowChangePassword = () => {
this.setState(() => {
return {
...this.state,
showChangePassword: !this.state.showChangePassword,
oldPassword: "",
newPassword: "",
verifyNewPassword: ""
}
})
}
goHome = () => {
window.location.assign(env.url)
}
onChangeOldPassword = (e) => {
const value = e.target.value;
this.setState(() => {
return {
...this.state,
oldPassword: value
}
})
}
onChangeNewPassword = (e) => {
const value = e.target.value;
this.setState(() => {
return {
...this.state,
newPassword: value
}
})
}
onChangeVerifyNewPassword = (e) => {
const value = e.target.value;
this.setState(() => {
return {
...this.state,
verifyNewPassword: value
}
})
}
submitPasswordChange = (e) => {
e.preventDefault()
if (this.state.oldPassword.length === 0 || this.state.newPassword.length === 0 || this.state.verifyNewPassword.length === 0) {
Swal.fire({
icon: 'error',
title: 'Error',
text: 'Enter All Required Fields',
})
}
if (this.state.verifyNewPassword !== this.state.newPassword) {
Swal.fire({
icon: 'error',
title: 'Error',
text: 'New passwords do not match',
})
return;
}
const data = {
newPassword: this.state.newPassword,
oldPassword: this.state.oldPassword
}
axios.post(`/user-service/change-password/`, data).then((results) => {
//const newToken = results.data;
// window.localStorage.setItem("token", newToken);
this.changeShowChangePassword()
//this.getUserDetails()
Swal.fire(
'Password Changed',
'All other sessions have been logged out',
'success'
)
}).catch((err) => {
console.log(err)
Swal.fire({
icon: 'error',
title: 'Error',
text: 'Error changing password',
})
})
}
onChangeAddName = (e) => {
const value = e.target.value;
this.setState(() => {
return {
...this.state,
name: value
}
})
}
doubleClickOnChange = (e) => {
if (this.state.doubleClickFolders) {
localStorage.removeItem("double-click-folders");
} else {
localStorage.setItem("double-click-folders", "true");
}
this.setState(() => {
return {
...this.state,
doubleClickFolders: !this.state.doubleClickFolders
}
})
//this.props.dispatch(resetSettingsMain(uuid.v4()));
// updateSettingsID = uuid.v4();
// setUpdateSettingsID(uuid.v4());
}
changeShowAddName = () => {
this.setState(() => {
return {
...this.state,
showAddName: !this.state.showAddName,
name: ""
}
})
}
submitAddName = (e) => {
e.preventDefault()
if (this.state.name.length === 0) return;
const data = {
name: this.state.name
}
axios.patch("/user-service/add-name", data).then((response) => {
this.changeShowAddName();
this.getUserDetails()
Swal.fire(
'Name Updated',
'Your name has been sucessfully updated',
'success'
)
}).catch(() => {
console.log("could not change name")
Swal.fire({
icon: 'error',
title: 'Error',
text: 'Error changing name',
})
})
}
goHome = () => {
window.location.assign(env.url)
}
downloadPersonalFileList = (e) => {
e.preventDefault()
axios.post('/user-service/get-token').then((response) => {
const finalUrl = `/user-service/download-personal-file-list`;
const link = document.createElement('a');
document.body.appendChild(link);
link.href = finalUrl;
link.setAttribute('type', 'hidden');
link.setAttribute("download", true);
link.click();
})
}
uploadPersonalFileList = (e) => {
e.preventDefault();
if (this.uploadReference.current.files && this.uploadReference.current.files[0]) {
const currentFile = this.uploadReference.current.files[0];
const config = {
headers: {
'Content-Type': 'application/json'
}
}
axios.post('/user-service/upload-personal-file-list', currentFile, config).then((response) => {
this.uploadReference.current.value = ''
Swal.fire(
'Personal Data Uploaded',
'Your Peronsal Metadata has been uploaded to myDrive successfully',
'success'
)
}).catch((err) => {
console.log("upload personal file list error", err);
Swal.fire({
icon: 'error',
title: 'Error',
text: 'Error uploading personal file list',
})
})
}
}
removeS3Metadata = (e) => {
e.preventDefault();
Swal.fire({
title: 'Remove S3 Metadata?',
text: "This will remove all S3 Metadata from myDrive, please download your metadata list before removing.",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, remove metadata'
}).then((result) => {
if (result.value) {
axios.delete("/user-service/remove-s3-metadata").then((response) => {
Swal.fire(
'S3 Metadata removed',
'Your S3 metadata has been removed from myDrive successfully.',
'success'
)
}).catch((err) => {
console.log("delete s3 data err", err);
Swal.fire({
icon: 'error',
title: 'Error',
text: 'Error deleting S3 metadata',
})
})
}
})
}
listViewOnChange = (e) => {
if (this.state.listView) {
window.localStorage.setItem("grid-mode", true);
} else {
window.localStorage.removeItem("grid-mode");
}
this.setState(() => {
return {
...this.state,
listView: !this.state.listView
}
})
// this.setSettings();
}
sortByDateChange = () => {
if (this.state.dateSort) {
window.localStorage.setItem("name-mode", true);
} else {
window.localStorage.removeItem("name-mode")
}
this.setState(() => {
return {
...this.state,
dateSort: !this.state.dateSort
}
})
}
sortByDescendingChange = () => {
if (this.state.descendingSort) {
window.localStorage.setItem("asc-mode", true);
} else {
window.localStorage.removeItem("asc-mode")
}
this.setState(() => {
return {
...this.state,
descendingSort: !this.state.descendingSort
}
})
}
dropOnChange = () => {
if (this.state.dropToUpload) {
window.localStorage.setItem("non_drop-mode", true)
} else {
window.localStorage.removeItem("non_drop-mode");
}
this.setState(() => {
return {
...this.state,
dropToUpload: !this.state.dropToUpload
}
})
}
hideFolderTreeOnChange = () =>{
if (this.state.hideFolderTree) {
window.localStorage.removeItem("hide-folder-tree");
} else {
console.log("setting hide folder tree to true")
window.localStorage.setItem("hide-folder-tree", true);
}
this.setState(() => ({
...this.state,
hideFolderTree: !this.state.hideFolderTree
}))
}
showFolderTreeScrollBarsOnChange = () => {
if (this.state.showFolderTreeScrollBars) {
window.localStorage.removeItem("show-folder-tree-scroll-bars");
} else {
window.localStorage.setItem("show-folder-tree-scroll-bars", true);
}
this.setState(() => ({
...this.state,
showFolderTreeScrollBars: !this.state.showFolderTreeScrollBars
}))
}
render() {
if (this.props.loading) {
return <HomepageSpinner />
}
return (
<div>
<div class="main__wrapper">
<div onClick={this.showSideBar} class="overlay" style={this.state.sideBarOpen ? {display: "block"} : {display:"none"}}></div>
<Header goHome={this.goHome}/>
<div class="main__wrapper--container settings__container" style={this.props.loading ? {display: "none"} : {}}>
<div class="menu__block" style={this.state.sideBarOpen ? {left: "0px"} : {left:"-250px"}}>
<div class="file__settings">
<div class="back__button">
<a onClick={this.goHome}>
<span>
<img src="/assets/backarrow.svg" alt="backarrow" />
</span>{" "}
BACK TO FILES
</a>
</div>
<div class="settings__menu">
<ul>
<li
class={this.state.mode === "general" ? "active__settings" : ""}
data-settings="general__settings"
>
<a onMouseDown={() => this.modeChange("general")}>General</a>
</li>
<li class={this.state.mode === "storage" ? "active__settings" : ""} data-settings="storage__accounts">
<a onMouseDown={() => this.modeChange("storage")}>Storage accounts</a>
</li>
<li style={env.commercialMode ? {display: "block"} : {display:"none"}} class={this.state.mode === "billing" ? "active__settings" : ""} data-settings="billing__settings">
<a onMouseDown={() => this.modeChange("billing")}>Billing & payments</a>
</li>
<li class={this.state.mode === "notifications" ? "active__settings" : ""} data-settings="notification__settings">
<a onMouseDown={() => this.modeChange("notifications")}>Settings</a>
</li>
</ul>
</div>
</div>
</div>
<div class="menu__block">
<div class="file__settings">
<div class="back__button">
<a onClick={this.goHome}>
<span>
<img src="/assets/backarrow.svg" alt="backarrow" />
</span>{" "}
BACK TO FILES
</a>
</div>
<div class="settings__menu">
<ul>
<li
class={this.state.mode === "general" ? "active__settings" : ""}
data-settings="general__settings"
>
<a onMouseDown={() => this.modeChangeFullScreen("general")}>General</a>
</li>
<li class={this.state.mode === "storage" ? "active__settings" : ""} data-settings="storage__accounts">
<a onMouseDown={() => this.modeChangeFullScreen("storage")}>Storage accounts</a>
</li>
<li style={env.commercialMode ? {display: "block"} : {display:"none"}} class={this.state.mode === "billing" ? "active__settings" : ""} data-settings="billing__settings">
<a onMouseDown={() => this.modeChangeFullScreen("billing")}>Billing & payments</a>
</li>
<li class={this.state.mode === "notifications" ? "active__settings" : ""} data-settings="notification__settings">
<a onMouseDown={() => this.modeChangeFullScreen("notifications")}>Settings</a>
</li>
</ul>
</div>
</div>
</div>
<div class="content__block">
<div class="small__switcher--content">
<a onClick={this.showSideBar} class="menu__button">
<i class="fas fa-bars"></i>
</a>
{/* <a href="#" class="image__viewer">
<i class="fas fa-images"></i>
</a> */}
</div>
<div class="main__settings--block">
<div class="inner__settings general__settings" style={this.state.mode === "general" ? {display:"block"} : {display:"none"}}>
<div class="elem__settings">
<div class="head__settings">
<h2>Personal info</h2>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Profile picture</p>
</div>
<div class="control__value">
<div class="profile__picture">
<p style={{backgroundColor:"#3c85ee"}}>
<span style={{color:"#fff"}}>{this.getProfilePicName()}</span>
</p>
</div>
</div>
<div class="value__updater">
{/* <a href="#">Upload</a> */}
</div>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Name</p>
</div>
<div class="control__value">
<p>{this.state.loaded ? this.state.userDetails.name ? capitalize(this.state.userDetails.name) : "No Name Set" : "Loading..."}</p>
</div>
<div class="value__updater">
<a onClick={this.changeShowAddName}>Change</a>
</div>
</div>
</div>
<div class="elem__settings">
<div class="head__settings">
<h2>Security</h2>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Logout Account</p>
</div>
<div class="control__value">
<p></p>
</div>
<div class="value__updater">
<a onClick={this.logout}>Logout</a>
</div>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Email</p>
</div>
<div class="control__value">
<p>{this.state.loaded ? this.state.userDetails.email : "Loading..."}</p>
</div>
<div class="value__updater">
{/* <a href="#">Change</a> */}
</div>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Password</p>
</div>
<div class="control__value">
<p>{this.state.loaded ? this.state.userDetails.passwordLastModified ? `Updated ${moment(this.state.userDetails.passwordLastModified).calendar()}` : "Password Not Updated Yet" : "Loading..."}</p>
</div>
<div class="value__updater">
<a
onClick={this.changeShowChangePassword}
class="modal__button"
data-modal="password__modal"
>
Change
</a>
</div>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Logout All Accounts</p>
</div>
<div class="control__value">
<p></p>
</div>
<div class="value__updater">
<a onClick={this.logoutAll}>Logout All</a>
</div>
</div>
{/* <div class="elem__control--settings">
<div class="control__title">
<p>Two factor authentication</p>
</div>
<div class="control__value">
<p>Disabled</p>
</div>
<div class="value__updater">
<a href="#">Enable</a>
</div>
</div> */}
</div>
<div class="elem__settings" style={{display:"none"}}>
<div class="head__settings">
<h2>Preferences</h2>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Language</p>
</div>
<div class="control__value">
<p>English</p>
</div>
<div class="value__updater">
<a href="#">Change</a>
</div>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Date format</p>
</div>
<div class="control__value">
<p>MM / DD / YYYY</p>
</div>
<div class="value__updater">
<a href="#">Change</a>
</div>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Date Time zone</p>
</div>
<div class="control__value">
<p>GMT +7</p>
</div>
<div class="value__updater">
<a href="#">Change</a>
</div>
</div>
</div>
</div>
<div
class="inner__settings storage__accounts"
style={this.state.mode === "storage" ? {display:"block"} : {display:"none"}}
>
<div class="elem__settings">
<div class="head__settings">
<h2>Storage Accounts</h2>
</div>
<div class="elem__control--settings storage__control">
<div class="active__storage">
<div class="control__title">
<div class="double__title">
<p>{env.commercialMode ? "myDrive" : "Local Storage"}</p>
<span>{!this.state.loaded ? "Loading..." : (env.commercialMode && this.state.userDetails.activeSubscription) ? "Plan Type" : ""}</span>
</div>
</div>
<div class="control__value">
<div class="available__space--wrap">
<div class="space__bar" style={!this.state.loaded ? {} : (env.commercialMode && !this.state.userDetails.activeSubscription) ? {display:"none"} : {display:"block"}}>
<div
class="active__space--bar"
style={{backgroundColor:"#3c85ee",width: !this.state.loaded ? "0%" : env.commercialMode ? this.state.userDetails.activeSubscription ? `${this.getStoragePercentage()}%` : `100%` : "100%"}}
></div>
</div>
<span>{!this.state.loaded ? "Loading..." :
(env.commercialMode && this.state.userDetails.activeSubscription) ?
`${bytes(this.state.userDetails.storageData.storageSize)} of
${bytes(this.state.userDetails.storageData.storageLimit)} used` : !env.commercialMode ? `${bytes(this.state.userDetails.storageData.storageSize)} used` : ''}</span>
</div>
</div>
<div class="value__updater">
<a onClick={env.commercialMode ? this.launchStoragePage : this.refreshStorageSize}>{env.commercialMode ? "Upgrade" : "Refresh"}</a>
</div>
</div>
<div class="more__space" style={{display:"none"}}>
<p>
<img src="/assets/star.svg" alt="star" />{" "}
<span>Earn more free space.</span> Get an additional
10GB of storage for every friend you invite.
</p>
<a href="#">Invite Friends</a>
</div>
</div>
<div class="elem__control--settings">
<div class="control__title">
<div class="double__title">
<p>Google Drive</p>
<span>{!this.state.loaded ? "Loading..." : this.state.userDetails.googleDriveEnabled ? this.state.userDetails.googleDriveData.id : "No Google Account"}</span>
</div>
</div>
<div class="control__value">
<div class="available__space--wrap">
<div class="space__bar" style={!this.state.loaded ? {} : this.state.userDetails.googleDriveEnabled ? {display:"block"} : {display:"none"}}>
<div
class="active__space--bar"
style={{backgroundColor:"#3c85ee", width: !this.state.loaded ? "0%" : this.state.userDetails.googleDriveEnabled ? `${this.getStoragePercentageGoogle()}%` : '0%'}}
></div>
</div>
<span>{this.state.userDetails.googleDriveEnabled ? !this.state.userDetails.storageDataGoogle.failed ? `${bytes(this.state.userDetails.storageDataGoogle.storageSize)} of
${bytes(this.state.userDetails.storageDataGoogle.storageLimit)} used` : "Failed" : ""}
</span>
</div>
</div>
<div class="value__updater">
<a onClick={this.showGoogleAccount}>{!this.state.loaded ? "Loading..." : this.state.userDetails.googleDriveEnabled ? "Edit" : "Add"}</a>
</div>
</div>
<div class="elem__control--settings">
<div class="control__title">
<div class="double__title">
<p>Amazon S3</p>
<span>{!this.state.loaded ? "Loading..." : this.state.userDetails.s3Enabled ? this.state.userDetails.s3Data.bucket : "S3 Not Enabled"}</span>
</div>
</div>
<div class="control__value" style={!this.state.loaded ? {} : this.state.userDetails.s3Enabled ? {display:"block"} : {display:"none"}}>
<div class="available__space--wrap">
<div class="space__bar">
<div
class="active__space--bar"
style={{backgroundColor:"#3c85ee", width:"100%"}}
></div>
</div>
<span>{this.state.userDetails.s3Enabled ? !this.state.userDetails.storageDataPersonal.failed ?
`${bytes(this.state.userDetails.storageDataPersonal.storageSize)} used` : "Failed" : ""}</span>
</div>
</div>
<div class="value__updater">
<a onClick={this.showS3Account}>{!this.state.loaded ? "Loading..." : this.state.userDetails.s3Enabled ? "Edit" : "Add"}</a>
</div>
</div>
</div>
<div class="elem__settings more__accounts" style={{display:"none"}}>
<div class="head__settings">
<h2>Add more accounts</h2>
</div>
<div style={{display:"flex", flexDirection:"row", justifyContent:"center", alignItems:"center"}}>
<p>More Storage Options Coming Soon!</p>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>BackBlaze</p>
</div>
<div class="value__updater">
<a href="#">Enable</a>
</div>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Sia Network</p>
</div>
<div class="value__updater">
<a href="#">Enable</a>
</div>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Localhost</p>
</div>
<div class="value__updater">
<a href="#">Enable</a>
</div>
</div>
</div>
</div>
<div
class="inner__settings billing__settings"
style={this.state.mode === "billing" ? {display:"block"} : {display:"none"}}
>
<div class="elem__settings">
<div class="head__settings">
<h2>Payment</h2>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Payment method</p>
</div>
<div class="control__value">
<p>{(this.state.loaded && this.state.invoicesLoaded) ?
!this.state.invoiceData.card ? "No Payment Method" :
`${this.state.invoiceData.card.brand} ending in ${this.state.invoiceData.card.last4}` : "No Payment Method"}</p>
</div>
<div class="value__updater">
<a onClick={this.launchStoragePage}>Change</a>
</div>
</div>
<div class="elem__control--settings">
<div class="control__title">
<p>Billing cycle</p>
</div>
<div class="control__value">
<p>{(this.state.loaded && this.state.invoicesLoaded) ?
!this.state.invoiceData.subscription ? "No Subscription" :
capitalize(this.state.invoiceData.subscription.plan.interval) : "No Subscription"}</p>
</div>
<div class="value__updater">
<a onClick={this.launchStoragePage}>Change</a>
</div>
</div>
</div>
<div class="elem__settings">
<div class="head__settings">
<h2>History</h2>
</div>
<div class="history__table">
<table>
<tr>
<th class="date__history">DATE</th>
<th class="plan__history">PLAN</th>
<th class="amount__history">AMOUNT</th>
<th class="status__history">STATUS</th>
<th></th>
</tr>
{(!this.state.loaded || !this.state.invoicesLoaded) ? undefined : this.state.invoices.map((currentInvoice) => {
return <InvoiceItem currentInvoice={currentInvoice}/>
})}
{/* <tr>
<td class="date__history">May 1, 2020</td>
<td class="plan__history">myDrive Standard Plan</td>
<td class="amount__history">$9.99</td>
<td class="status__history unpaid">Unpaid</td>
<td>
<a href="#">Invoice</a>
</td>
</tr>
<tr>
<td class="date__history">May 1, 2020</td>
<td class="plan__history">myDrive Standard Plan</td>
<td class="amount__history">$9.99</td>
<td class="status__history paid">Paid</td>
<td>
<a href="#">Receipt</a>
</td>
</tr>
<tr>
<td class="date__history">May 1, 2020</td>
<td class="plan__history">myDrive Standard Plan</td>
<td class="amount__history">$9.99</td>
<td class="status__history paid">Paid</td>
<td>
<a href="#">Receipt</a>
</td>
</tr> */}
</table>
</div>
</div>
</div>
<div
class="inner__settings notification__settings"
style={this.state.mode === "notifications" ? {display:"block"} : {display:"none"}}
>
<div class="elem__settings">
<div class="head__settings">
<h2>Customization</h2>
</div>
<div class="settings__switchers">
<span>Set Defaults</span>
<p>
<input checked={this.state.listView} onChange={this.listViewOnChange} type="checkbox" id="test1" />
<label for="test1">List Style</label>
</p>
<p>
<input checked={this.state.dateSort} onChange={this.sortByDateChange} type="checkbox" id="test2" />
<label for="test2">
Sort By Date
</label>
</p>
<p>
<input checked={this.state.descendingSort} onChange={this.sortByDescendingChange} type="checkbox" id="test3" />
<label for="test3">
Descending Order
</label>
</p>
<p>
<input checked={this.state.dropToUpload} onChange={this.dropOnChange} type="checkbox" id="test4" />
<label for="test4">Drag And Drop To Upload</label>
</p>
<p>
<input checked={this.state.doubleClickFolders} onChange={this.doubleClickOnChange} type="checkbox" id="test5" />
<label for="test5">Double Click To Enter Folders On Mobile</label>
</p>
<p>
<input checked={this.state.hideFolderTree} onChange={this.hideFolderTreeOnChange} type="checkbox" id="test6" />
<label for="test6">Hide Folder Tree</label>
</p>
<p>
<input checked={this.state.showFolderTreeScrollBars} onChange={this.showFolderTreeScrollBarsOnChange} type="checkbox" id="test7" />
<label for="test7">Show Folder Tree Scroll Bars</label>
</p>
</div>
</div>
{/* <div class="elem__settings">
<div class="head__settings">
<h2>Marketing</h2>
</div>
<div class="settings__switchers">
<span>Email me about</span>
<p>
<input type="checkbox" id="test4" />
<label for="test4">New features and updates</label>
</p>
<p>
<input type="checkbox" id="test5" />
<label for="test5">Tips on using myDrive</label>
</p>
<p>
<input type="checkbox" id="test6" />
<label for="test6">
Feedback surveys to help improve myDrive
</label>
</p>
</div>
</div> */}
</div>
</div>
</div>
</div>
</div>
<div class="modal__wrap" style={this.state.addS3AccountOpen ? {display:"block"} : {display:"none"}}>
<div class="inner__modal">
<div class="password__modal">
<div class="head__password">
<h2>{!this.state.loaded ? "Loading..." : this.state.userDetails.s3Enabled ? "Edit Amazon S3 Account" : "Add Amazon S3 Account"}</h2>
<div class="close__modal">
<a onClick={this.showS3Account}><img src="/assets/close.svg" alt="close"/></a>
</div>
</div>
<div class="password__content">
<form onSubmit={!this.state.loaded ? this.submitS3Account : this.state.userDetails.s3Enabled ? this.removeS3Account : this.submitS3Account}>
<div class="group__password" style={!this.state.loaded ? {} : this.state.userDetails.s3Enabled ? {display:"none"} : {display:"block"}}>
<input value={this.state.s3ID} onChange={this.onChangeS3ID} placeholder="S3 ID"/>
</div>
<div class="group__password" style={!this.state.loaded ? {} : this.state.userDetails.s3Enabled ? {display:"none"} : {display:"block"}}>
<input value={this.state.s3Bucket} onChange={this.onChangeS3Bucket} placeholder="S3 Bucket"/>
</div>
<div class="group__password" style={!this.state.loaded ? {} : this.state.userDetails.s3Enabled ? {display:"none"} : {display:"block"}}>
<input value={this.state.s3Key} onChange={this.onChangeS3Key} type="password" placeholder="S3 Key"/>
</div>
<div class="password__submit">
<input type="submit" value={!this.state.loaded ? "Loading..." : this.state.userDetails.s3Enabled ? "Remove Account" : "Add Account"}/>
</div>
</form>
<form onSubmit={this.downloadPersonalFileList} style={!this.state.loaded ? {display:"none"} : this.state.userDetails.s3Enabled ? {display:"block", marginTop: "13px"} : {display:"none"}}>
<div class="password__submit">
{/* <input onClick={this.downloadPersonalFileList} value="Download S3 File List"/> */}
<button>Download S3 Metadata List</button>
</div>
</form>
<form style={!this.state.loaded ? {display:"none"} : this.state.userDetails.s3Enabled ? {display:"block", marginTop: "13px"} : {display:"none"}}>
<div class="password__submit">
<div>
<input ref={this.uploadReference} onChange={this.uploadPersonalFileList} type="file" multiple={false}/>
<p>Upload S3 Metadata List</p>
</div>
{/* <input onClick={this.downloadPersonalFileList} value="Download S3 File List"/> */}
</div>
</form>
<form onSubmit={this.removeS3Metadata} style={!this.state.loaded ? {display:"none"} : this.state.userDetails.s3Enabled ? {display:"block", marginTop: "13px"} : {display:"none"}}>
<div class="password__submit">
{/* <input onClick={this.downloadPersonalFileList} value="Download S3 File List"/> */}
<button>Delete S3 Metadata</button>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="modal__wrap" style={this.state.addGoogleAccountOpen ? {display:"block"} : {display:"none"}}>
<div class="inner__modal">
<div class="password__modal">
<div class="head__password">
<h2>{!this.state.loaded ? "Loading..." : this.state.userDetails.googleDriveEnabled ? "Remove Google Drive Account" : "Add Google Drive Account"}</h2>
<div class="close__modal">
<a onClick={this.showGoogleAccount}><img src="/assets/close.svg" alt="close"/></a>
</div>
</div>
<div class="password__content">
<form onSubmit={!this.state.loaded ? this.submitGoogleAccount : this.state.userDetails.googleDriveEnabled ? this.removeGoogleAccount : this.submitGoogleAccount}>
<div class="group__password" style={!this.state.loaded ? {} : this.state.userDetails.googleDriveEnabled ? {display:"none"} : {display:"block"}}>
<input value={this.state.googleID} onChange={this.onChangeGoogleID} placeholder="Drive Client ID"/>
</div>
<div class="group__password" style={!this.state.loaded ? {} : this.state.userDetails.googleDriveEnabled ? {display:"none"} : {display:"block"}}>
<input value={this.state.googleSecret} onChange={this.onChangeGoogleSecret} type="password" placeholder="Drive Client Secret"/>
</div>
<div class="password__submit">
<input type="submit" value={!this.state.loaded ? "Loading..." : this.state.userDetails.googleDriveEnabled ? "Remove Account" : "Add Account"}/>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="modal__wrap" style={this.state.showChangePassword ? {display:"block"} : {display:"none"}}>
<div class="inner__modal">
<div class="password__modal">
<div class="head__password">
<h2>Update password</h2>
<div class="close__modal">
<a onClick={this.changeShowChangePassword}><img src="/assets/close.svg" alt="close"/></a>
</div>
</div>
<div class="password__content">
<form onSubmit={this.submitPasswordChange}>
<div class="group__password">
<input onChange={this.onChangeOldPassword} value={this.state.oldPassword} type="password" placeholder="Old password"/>
</div>
<div class="group__password">
<input onChange={this.onChangeNewPassword} value={this.state.newPassword} type="password" placeholder="New password"/>
</div>
<div class="group__password">
<input onChange={this.onChangeVerifyNewPassword} value={this.state.verifyNewPassword} type="password" placeholder="Repeat new password"/>
</div>
<div class="password__submit">
<input type="submit" value="Update Password"/>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="modal__wrap" style={this.state.showAddName ? {display:"block"} : {display:"none"}}>
<div class="inner__modal">
<div class="password__modal">
<div class="head__password">
<h2>{"Update Name"}</h2>
<div class="close__modal">
<a onClick={this.changeShowAddName}><img src="/assets/close.svg" alt="close"/></a>
</div>
</div>
<div class="password__content">
<form onSubmit={this.submitAddName}>
<div class="group__password">
<input value={this.state.name} onChange={this.onChangeAddName} placeholder="Name"/>
</div>
<div class="password__submit">
<input type="submit" value="Update Name"/>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
);
}
}
const connectStoreToProp = (state) => ({
loading: state.main.loading
})
export default connect(connectStoreToProp)(SettingsPageContainer);