diff --git a/resources/js/components/Settings/SettingsIndex.js b/resources/js/components/Settings/SettingsIndex.js
index 802e2bc7..41439cca 100644
--- a/resources/js/components/Settings/SettingsIndex.js
+++ b/resources/js/components/Settings/SettingsIndex.js
@@ -1,20 +1,82 @@
+import Axios from 'axios';
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import Navbar from '../Navbar';
+import SettingsTabs from './SettingsTabs';
export default class SettingsIndex extends Component {
constructor(props) {
super(props)
this.state = {
-
+ data: null,
+ loading: true,
}
}
+ getData = () => {
+ var url = 'api/settings/?token=' + window.token;
+
+ Axios.get(url)
+ .then((resp) => {
+ this.setState({
+ data: this.sortSettings(resp.data),
+ loading: false,
+ });
+ })
+ .catch((err) => {
+ //
+ })
+ }
+
+ sortSettings = (data) => {
+ return {
+ General: [
+ {
+ obj: data.schedule,
+ type: 'text',
+ },
+ {
+ obj: data.server,
+ type: 'text',
+ },
+ {
+ obj: data.show_average,
+ type: 'checkbox',
+ },
+ {
+ obj: data.show_max,
+ type: 'checkbox',
+ },
+ {
+ obj: data.show_min,
+ type: 'checkbox',
+ }
+ ],
+ Graphs: {}
+ };
+ }
+
+ componentDidMount() {
+ this.getData();
+ }
+
render() {
+ var data = this.state.data;
+ var loading = this.state.loading;
+
+ if(loading) {
+ return (
+
Loading
+ );
+ }
+
return (
);
}
diff --git a/resources/js/components/Settings/SettingsInput.js b/resources/js/components/Settings/SettingsInput.js
new file mode 100644
index 00000000..ad9a04c8
--- /dev/null
+++ b/resources/js/components/Settings/SettingsInput.js
@@ -0,0 +1,92 @@
+import React, { Component } from 'react';
+import { Form } from 'react-bootstrap';
+import ReactDOM from 'react-dom';
+
+export default class SettingsInput extends Component {
+ constructor(props) {
+ super(props)
+
+ this.state = {
+ type: this.props.type,
+ name: this.props.name,
+ value: (this.props.value) ? this.props.value : '',
+ classes: this.props.classes,
+ id: this.props.id,
+ label: (this.props.label) ? this.props.label : false,
+ readonly: true,
+ description: (this.props.description) ? this.props.description : false,
+ }
+ }
+
+ componentDidMount() {
+ this.setState({
+ readonly: this.isReadOnly()
+ });
+ }
+
+ handleInput = (evt) => {
+ var val = evt.target.value;
+
+ if(this.state.type === 'checkbox') {
+ val = e.target.checked;
+ }
+
+ this.props.handleInput(
+ this.state.name.split(' ').join('_'),
+ val
+ );
+
+ this.setState({
+ value: val
+ });
+ }
+
+ isReadOnly = () => {
+ if(window.config.editable[this.state.name] == false) {
+ return true;
+ }
+
+ return false;
+ }
+
+ generateInput = () => {
+ var disabled = (this.state.readonly) ? true : false;
+
+ return
+ }
+
+ render() {
+ var input = this.generateInput();
+ var id = this.state.id;
+ var readonly = this.state.readonly;
+ var label = this.state.label;
+ var description = this.state.description;
+
+ return (
+
+ {label &&
+
+ }
+
+ {input}
+
+ {description &&
+
+ }
+
+ {readonly &&
+ This setting is defined as an env variable and is not editable.
+ }
+
+ );
+ }
+}
+
+if (document.getElementById('SettingsInput')) {
+ ReactDOM.render(, document.getElementById('SettingsInput'));
+}
diff --git a/resources/js/components/Settings/SettingsTabs.js b/resources/js/components/Settings/SettingsTabs.js
new file mode 100644
index 00000000..3d88d0bd
--- /dev/null
+++ b/resources/js/components/Settings/SettingsTabs.js
@@ -0,0 +1,76 @@
+import React, { Component } from 'react';
+import { Nav, Tab, Tabs } from 'react-bootstrap';
+import ReactDOM from 'react-dom';
+import GeneralSettings from './tabs/GeneralSettings';
+import GraphsSettings from './tabs/GraphsSettings';
+
+export default class SettingsTabs extends Component {
+ constructor(props) {
+ super(props)
+
+ this.state = {
+ tab: "General",
+ data: this.props.data
+ }
+ }
+
+ generateTabs = () => {
+ var tabs = [
+ 'General',
+ 'Graphs',
+ 'Notifications',
+ 'healthchecks.io',
+ 'Reset',
+ ];
+
+ return tabs.map((tab) => {
+ return
+ });
+ }
+
+ switchTab = (tab) => {
+ this.setState({
+ tab: tab
+ });
+ }
+
+ getTabContent = () => {
+ var data = this.state.data;
+ console.log(data);
+
+ switch(this.state.tab) {
+ case 'General':
+ return
+ break;
+ case 'Graphs':
+ return
+ break;
+ }
+ }
+
+ render() {
+ var tabs = this.generateTabs();
+ var activeTab = this.state.tab;
+ var tabContent = this.getTabContent();
+
+ return (
+
+
{ this.switchTab(tab) }}
+ activeKey={activeTab}
+ >
+ {tabs}
+
+
+
+ {tabContent}
+
+
+ );
+ }
+}
+
+if (document.getElementById('settingsTabs')) {
+ ReactDOM.render(, document.getElementById('settingsTabs'));
+}
diff --git a/resources/js/components/Settings/tabs/GeneralSettings.js b/resources/js/components/Settings/tabs/GeneralSettings.js
new file mode 100644
index 00000000..4b399c42
--- /dev/null
+++ b/resources/js/components/Settings/tabs/GeneralSettings.js
@@ -0,0 +1,55 @@
+import React, { Component } from 'react';
+import ReactDOM from 'react-dom';
+import { Modal, Button, Tab } from 'react-bootstrap';
+import Axios from 'axios';
+import { toast } from 'react-toastify';
+import SettingsInput from '../SettingsInput';
+
+export default class GeneralSettings extends Component {
+ constructor(props) {
+ super(props)
+
+ this.state = {
+ data: this.props.data
+ }
+ }
+
+ inputHandler = () => {
+ var settings = this.state.data;
+ var i = 0;
+ settings.forEach(ele => {
+ if(ele.obj.name == name) {
+ ele.obj.value = val;
+ }
+ settings[i] = ele;
+ i++;
+ });
+ this.setState({
+ data: settings
+ });
+ }
+
+ render() {
+ var settings = this.state.data[0];
+
+ return (
+
+ General
+
+
+ );
+ }
+}
+
+if (document.getElementById('GeneralSettings')) {
+ ReactDOM.render(, document.getElementById('GeneralSettings'));
+}