From 90f0bf9641fa219d70e329f5684d991e43e359ce Mon Sep 17 00:00:00 2001
From: Bagas <priambudibagaskara@gmail.com>
Date: Mon, 2 Dec 2019 20:38:22 +0700
Subject: [PATCH 1/7] add Utils.js and refactor few line of codes on Profile &
 EditProfile

---
 assets/js/EditProfile.jsx | 21 ++-------------------
 assets/js/ProfilePage.jsx | 19 ++++---------------
 assets/js/Utils.js        |  6 ++++++
 3 files changed, 12 insertions(+), 34 deletions(-)
 create mode 100644 assets/js/Utils.js

diff --git a/assets/js/EditProfile.jsx b/assets/js/EditProfile.jsx
index 289ecdaa..33c349bc 100644
--- a/assets/js/EditProfile.jsx
+++ b/assets/js/EditProfile.jsx
@@ -13,6 +13,7 @@ import Server from './lib/Server';
 import Storage from './lib/Storage';
 import ModalAlert from './components/ModalAlert';
 import Dumper from './lib/Dumper';
+import { isFromGithubLinkValid, gotoLink } from './Utils';
 
 export default class EditProfile extends React.Component {
   static propTypes = {
@@ -97,9 +98,6 @@ export default class EditProfile extends React.Component {
     this.handleCheckbox = this.handleCheckbox.bind(this);
     this.handleSubmit = this.handleSubmit.bind(this);
     this.handleFile = this.handleFile.bind(this);
-    this.gotoLink = this.gotoLink.bind(this);
-    this.gotoStudentResume = this.gotoStudentResume.bind(this);
-    this.gotoStudentTranscript = this.gotoStudentTranscript.bind(this);
     this.getProfile();
   }
 
@@ -164,12 +162,6 @@ export default class EditProfile extends React.Component {
     );
   }
 
-  isFromGithubLinkValid = () => {
-    const github_link = this.state.form.github_url;
-    if (github_link == null) return;
-    return github_link.includes('https://github.com/');
-  };
-
   parseIndonesianDateFormat(dateIndex) {
     const monthNameIndex = {
       '01': 'Januari',
@@ -194,7 +186,7 @@ export default class EditProfile extends React.Component {
 
   handleSubmit = (e) => {
     e.preventDefault();
-    if (!this.isFromGithubLinkValid()) {
+    if (!isFromGithubLinkValid(this.state.form.github_url)) {
       this.modalAlert.open(
         'Pembaharuan profil gagal',
         'Pastikan link github yang anda tulis benar.(Berpola : https://github.com/<username>',
@@ -258,15 +250,6 @@ export default class EditProfile extends React.Component {
     this.setState({ form });
   };
 
-  gotoLink = (url) => {
-    const win = window.open(url);
-    win.focus();
-  };
-
-  gotoStudentResume = () => this.gotoLink(this.state.resume || '#');
-
-  gotoStudentTranscript = () => this.gotoLink(`transkrip/${this.state.id}`);
-
   updateForm(show) {
     if (show) {
       return (
diff --git a/assets/js/ProfilePage.jsx b/assets/js/ProfilePage.jsx
index 218bbc99..11d602be 100755
--- a/assets/js/ProfilePage.jsx
+++ b/assets/js/ProfilePage.jsx
@@ -16,6 +16,7 @@ import Server from './lib/Server';
 import Storage from './lib/Storage';
 import ModalAlert from './components/ModalAlert';
 import Dumper from './lib/Dumper';
+import { isFromGithubLinkValid, gotoLink } from './Utils';
 
 export default class ProfilePage extends React.Component {
   static propTypes = {
@@ -104,7 +105,6 @@ export default class ProfilePage extends React.Component {
     this.handleCheckbox = this.handleCheckbox.bind(this);
     this.handleSubmit = this.handleSubmit.bind(this);
     this.handleFile = this.handleFile.bind(this);
-    this.gotoLink = this.gotoLink.bind(this);
     this.gotoStudentResume = this.gotoStudentResume.bind(this);
     this.gotoStudentTranscript = this.gotoStudentTranscript.bind(this);
     this.getProfile();
@@ -179,12 +179,6 @@ export default class ProfilePage extends React.Component {
     );
   }
 
-  isFromGithubLinkValid = () => {
-    const github_link = this.state.form.github_url;
-    if (github_link == null) return;
-    return github_link.includes('https://github.com/');
-  };
-
   gitlabURL_is_valid = () => {
     if (this.state.form.gitlab_url != null) {
       return this.state.form.gitlab_url.includes('https://gitlab.com/');
@@ -239,7 +233,7 @@ export default class ProfilePage extends React.Component {
 
   handleSubmit = (e) => {
     e.preventDefault();
-    if (!this.isFromGithubLinkValid()) {
+    if (!isFromGithubLinkValid(this.state.form.github_url)) {
       this.modalAlert.open(
         'Pembaharuan profil gagal',
         'Pastikan link github yang anda tulis benar.(Berpola : https://github.com/<username>',
@@ -309,14 +303,9 @@ export default class ProfilePage extends React.Component {
     this.setState({ form });
   };
 
-  gotoLink = (url) => {
-    const win = window.open(url);
-    win.focus();
-  };
-
-  gotoStudentResume = () => this.gotoLink(this.state.resume || '#');
+  gotoStudentResume = () => gotoLink(this.state.resume || '#');
 
-  gotoStudentTranscript = () => this.gotoLink(`transkrip/${this.state.id}`);
+  gotoStudentTranscript = () => gotoLink(`transkrip/${this.state.id}`);
 
   updateForm(show) {
     if (show) {
diff --git a/assets/js/Utils.js b/assets/js/Utils.js
new file mode 100644
index 00000000..860ca4c0
--- /dev/null
+++ b/assets/js/Utils.js
@@ -0,0 +1,6 @@
+export const isFromGithubLinkValid = github_link => {
+    if (github_link == null) return;
+    return github_link.includes('https://github.com/');
+  };
+
+export const gotoLink = url => window.open(url).focus();
-- 
GitLab


From 1cd576c8dfec2cdec225884cd85fe1ba063ec009 Mon Sep 17 00:00:00 2001
From: Bagas <priambudibagaskara@gmail.com>
Date: Mon, 2 Dec 2019 20:54:30 +0700
Subject: [PATCH 2/7] aeextract modal

---
 assets/js/components/ModalComponent.jsx | 20 ++++++++++++++++++++
 assets/js/components/ModalSuccess.jsx   | 22 +++++++++-------------
 2 files changed, 29 insertions(+), 13 deletions(-)
 create mode 100644 assets/js/components/ModalComponent.jsx

diff --git a/assets/js/components/ModalComponent.jsx b/assets/js/components/ModalComponent.jsx
new file mode 100644
index 00000000..8168a500
--- /dev/null
+++ b/assets/js/components/ModalComponent.jsx
@@ -0,0 +1,20 @@
+import React from 'react';
+import {
+  Button, Header, Icon, Modal,
+} from 'semantic-ui-react';
+
+export const ModalComponent = (props) => (
+  <Modal open={props.open} basic size="small">
+    <Header icon={props.icon} content={props.header} />
+    <Modal.Content>
+      <p style={props.style}>{props.content}</p>
+    </Modal.Content>
+    <Modal.Actions>
+      <Button color="green" inverted onClick={props.onClick}>
+        <Icon name="checkmark" />
+        {' '}
+        OK
+      </Button>
+    </Modal.Actions>
+  </Modal>
+);
diff --git a/assets/js/components/ModalSuccess.jsx b/assets/js/components/ModalSuccess.jsx
index 36aa8722..4a438dbd 100644
--- a/assets/js/components/ModalSuccess.jsx
+++ b/assets/js/components/ModalSuccess.jsx
@@ -2,6 +2,7 @@ import React from 'react';
 import {
   Button, Header, Icon, Modal,
 } from 'semantic-ui-react';
+import {ModalComponent} from "./ModalComponent";
 
 export default class ModalSuccess extends React.Component {
   constructor(props) {
@@ -41,19 +42,14 @@ export default class ModalSuccess extends React.Component {
   render = () => {
     const style = { whiteSpace: 'pre-wrap' };
     return (
-      <Modal open={this.state.open} basic size="small">
-        <Header icon="checkmark sign" content={this.state.header} />
-        <Modal.Content>
-          <p style={style}>{this.state.content}</p>
-        </Modal.Content>
-        <Modal.Actions>
-          <Button color="green" inverted onClick={this.close}>
-            <Icon name="checkmark" />
-            {' '}
-OK
-          </Button>
-        </Modal.Actions>
-      </Modal>
+      <ModalComponent
+        open={this.state.open}
+        icon={"checkmark sign"}
+        header={this.state.header}
+        style={style}
+        content={this.state.content}
+        onClick={this.close}
+      />
     );
   };
 }
-- 
GitLab


From 4598672b5c8f0a8d6a66d17273ca51fd3c69ce24 Mon Sep 17 00:00:00 2001
From: Bagas <priambudibagaskara@gmail.com>
Date: Mon, 2 Dec 2019 20:56:12 +0700
Subject: [PATCH 3/7] extract alert modal

---
 assets/js/components/ModalAlert.jsx   | 25 +++++++++----------------
 assets/js/components/ModalSuccess.jsx |  3 ---
 2 files changed, 9 insertions(+), 19 deletions(-)

diff --git a/assets/js/components/ModalAlert.jsx b/assets/js/components/ModalAlert.jsx
index af4b095f..324a92df 100755
--- a/assets/js/components/ModalAlert.jsx
+++ b/assets/js/components/ModalAlert.jsx
@@ -1,7 +1,5 @@
 import React from 'react';
-import {
-  Button, Header, Icon, Modal,
-} from 'semantic-ui-react';
+import {ModalComponent} from "./ModalComponent";
 
 export default class ModalAlert extends React.Component {
   constructor(props) {
@@ -46,19 +44,14 @@ export default class ModalAlert extends React.Component {
   render = () => {
     const style = { whiteSpace: 'pre-wrap' };
     return (
-      <Modal open={this.state.open} basic size="small">
-        <Header icon="warning sign" content={this.state.header} />
-        <Modal.Content>
-          <p style={style}>{this.state.content}</p>
-        </Modal.Content>
-        <Modal.Actions>
-          <Button color="green" inverted onClick={this.close}>
-            <Icon name="checkmark" />
-            {' '}
-OK
-          </Button>
-        </Modal.Actions>
-      </Modal>
+      <ModalComponent
+        open={this.state.open}
+        icon={"warning sign"}
+        header={this.state.header}
+        style={style}
+        content={this.state.content}
+        onClick={this.close}
+      />
     );
   };
 }
diff --git a/assets/js/components/ModalSuccess.jsx b/assets/js/components/ModalSuccess.jsx
index 4a438dbd..769b8b30 100644
--- a/assets/js/components/ModalSuccess.jsx
+++ b/assets/js/components/ModalSuccess.jsx
@@ -1,7 +1,4 @@
 import React from 'react';
-import {
-  Button, Header, Icon, Modal,
-} from 'semantic-ui-react';
 import {ModalComponent} from "./ModalComponent";
 
 export default class ModalSuccess extends React.Component {
-- 
GitLab


From 4e35047527c4307a0c6559caefd5220cb0e2b351 Mon Sep 17 00:00:00 2001
From: Bagas <priambudibagaskara@gmail.com>
Date: Mon, 2 Dec 2019 21:02:49 +0700
Subject: [PATCH 4/7] refactor modal

---
 assets/js/components/ModalAlert.jsx   | 17 +++--------------
 assets/js/components/ModalSuccess.jsx | 13 +++----------
 2 files changed, 6 insertions(+), 24 deletions(-)

diff --git a/assets/js/components/ModalAlert.jsx b/assets/js/components/ModalAlert.jsx
index 324a92df..8f9da9ab 100755
--- a/assets/js/components/ModalAlert.jsx
+++ b/assets/js/components/ModalAlert.jsx
@@ -6,9 +6,8 @@ export default class ModalAlert extends React.Component {
     super(props);
     /* istanbul ignore next */
     this.state = {
-      open: false, header: '', content: '', callback: () => {},
+      isOpen: false, header: '', content: '', callback: () => {},
     };
-    this.open = this.open.bind(this);
     this.close = this.close.bind(this);
   }
 
@@ -26,18 +25,8 @@ export default class ModalAlert extends React.Component {
     if (anotherModal > 0) document.body.classList.add('scrolling', 'dimmable', 'dimmed');
   };
 
-  open = (
-    header = this.state.header,
-    content = this.state.content,
-    callback = this.state.callback,
-  ) => {
-    this.setState({
-      open: true, header, content, callback,
-    });
-  };
-
   close = () => {
-    this.setState({ open: false });
+    this.setState({ isOpen: false });
     this.state.callback();
   };
 
@@ -45,7 +34,7 @@ export default class ModalAlert extends React.Component {
     const style = { whiteSpace: 'pre-wrap' };
     return (
       <ModalComponent
-        open={this.state.open}
+        open={this.state.isOpen}
         icon={"warning sign"}
         header={this.state.header}
         style={style}
diff --git a/assets/js/components/ModalSuccess.jsx b/assets/js/components/ModalSuccess.jsx
index 769b8b30..dcf3d498 100644
--- a/assets/js/components/ModalSuccess.jsx
+++ b/assets/js/components/ModalSuccess.jsx
@@ -6,9 +6,8 @@ export default class ModalSuccess extends React.Component {
     super(props);
     /* istanbul ignore next */
     this.state = {
-      open: false, header: '', content: '', callback: () => {},
+      isOpen: false, header: '', content: '', callback: () => {},
     };
-    this.open = this.open.bind(this);
     this.close = this.close.bind(this);
   }
 
@@ -25,14 +24,8 @@ export default class ModalSuccess extends React.Component {
     if (anotherModal > 0) document.body.classList.add('scrolling', 'dimmable', 'dimmed');
   };
 
-  open = (header = this.state.header, content = this.state.content, callback = this.state.callback) => {
-    this.setState({
-      open: true, header, content, callback,
-    });
-  };
-
   close = () => {
-    this.setState({ open: false });
+    this.setState({ isOpen: false });
     this.state.callback();
   };
 
@@ -40,7 +33,7 @@ export default class ModalSuccess extends React.Component {
     const style = { whiteSpace: 'pre-wrap' };
     return (
       <ModalComponent
-        open={this.state.open}
+        open={this.state.isOpen}
         icon={"checkmark sign"}
         header={this.state.header}
         style={style}
-- 
GitLab


From 3e93eae68732ca2cb3a82f64544cec852e839ef2 Mon Sep 17 00:00:00 2001
From: Bagas <priambudibagaskara@gmail.com>
Date: Mon, 2 Dec 2019 21:12:46 +0700
Subject: [PATCH 5/7] fix code modal

---
 assets/js/components/ModalAlert.jsx   | 17 ++++++++++++++---
 assets/js/components/ModalSuccess.jsx | 16 +++++++++++++---
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/assets/js/components/ModalAlert.jsx b/assets/js/components/ModalAlert.jsx
index 8f9da9ab..324a92df 100755
--- a/assets/js/components/ModalAlert.jsx
+++ b/assets/js/components/ModalAlert.jsx
@@ -6,8 +6,9 @@ export default class ModalAlert extends React.Component {
     super(props);
     /* istanbul ignore next */
     this.state = {
-      isOpen: false, header: '', content: '', callback: () => {},
+      open: false, header: '', content: '', callback: () => {},
     };
+    this.open = this.open.bind(this);
     this.close = this.close.bind(this);
   }
 
@@ -25,8 +26,18 @@ export default class ModalAlert extends React.Component {
     if (anotherModal > 0) document.body.classList.add('scrolling', 'dimmable', 'dimmed');
   };
 
+  open = (
+    header = this.state.header,
+    content = this.state.content,
+    callback = this.state.callback,
+  ) => {
+    this.setState({
+      open: true, header, content, callback,
+    });
+  };
+
   close = () => {
-    this.setState({ isOpen: false });
+    this.setState({ open: false });
     this.state.callback();
   };
 
@@ -34,7 +45,7 @@ export default class ModalAlert extends React.Component {
     const style = { whiteSpace: 'pre-wrap' };
     return (
       <ModalComponent
-        open={this.state.isOpen}
+        open={this.state.open}
         icon={"warning sign"}
         header={this.state.header}
         style={style}
diff --git a/assets/js/components/ModalSuccess.jsx b/assets/js/components/ModalSuccess.jsx
index dcf3d498..d9216143 100644
--- a/assets/js/components/ModalSuccess.jsx
+++ b/assets/js/components/ModalSuccess.jsx
@@ -6,8 +6,9 @@ export default class ModalSuccess extends React.Component {
     super(props);
     /* istanbul ignore next */
     this.state = {
-      isOpen: false, header: '', content: '', callback: () => {},
+      open: false, header: '', content: '', callback: () => {},
     };
+    this.open = this.open.bind(this);
     this.close = this.close.bind(this);
   }
 
@@ -24,8 +25,17 @@ export default class ModalSuccess extends React.Component {
     if (anotherModal > 0) document.body.classList.add('scrolling', 'dimmable', 'dimmed');
   };
 
+  open = (header = this.state.header, content = this.state.content, callback = this.state.callback) => {
+    this.setState({
+      open: true,
+      header,
+      content,
+      callback,
+    });
+  };
+
   close = () => {
-    this.setState({ isOpen: false });
+    this.setState({ open: false });
     this.state.callback();
   };
 
@@ -33,7 +43,7 @@ export default class ModalSuccess extends React.Component {
     const style = { whiteSpace: 'pre-wrap' };
     return (
       <ModalComponent
-        open={this.state.isOpen}
+        open={this.state.open}
         icon={"checkmark sign"}
         header={this.state.header}
         style={style}
-- 
GitLab


From 057a0e9ff3a16a188b3c0d69e2a1408fc702ee3b Mon Sep 17 00:00:00 2001
From: PRIAMBUDI LINTANG BAGASKARA <priambudi.lintang@ui.ac.id>
Date: Mon, 2 Dec 2019 21:20:01 +0700
Subject: [PATCH 6/7] 1606895171 177

---
 assets/js/EditProfile.jsx               | 21 ++---------------
 assets/js/ProfilePage.jsx               | 19 ++++------------
 assets/js/Utils.js                      |  6 +++++
 assets/js/components/ModalAlert.jsx     | 25 ++++++++-------------
 assets/js/components/ModalComponent.jsx | 20 +++++++++++++++++
 assets/js/components/ModalSuccess.jsx   | 30 +++++++++++--------------
 6 files changed, 54 insertions(+), 67 deletions(-)
 create mode 100644 assets/js/Utils.js
 create mode 100644 assets/js/components/ModalComponent.jsx

diff --git a/assets/js/EditProfile.jsx b/assets/js/EditProfile.jsx
index 289ecdaa..33c349bc 100644
--- a/assets/js/EditProfile.jsx
+++ b/assets/js/EditProfile.jsx
@@ -13,6 +13,7 @@ import Server from './lib/Server';
 import Storage from './lib/Storage';
 import ModalAlert from './components/ModalAlert';
 import Dumper from './lib/Dumper';
+import { isFromGithubLinkValid, gotoLink } from './Utils';
 
 export default class EditProfile extends React.Component {
   static propTypes = {
@@ -97,9 +98,6 @@ export default class EditProfile extends React.Component {
     this.handleCheckbox = this.handleCheckbox.bind(this);
     this.handleSubmit = this.handleSubmit.bind(this);
     this.handleFile = this.handleFile.bind(this);
-    this.gotoLink = this.gotoLink.bind(this);
-    this.gotoStudentResume = this.gotoStudentResume.bind(this);
-    this.gotoStudentTranscript = this.gotoStudentTranscript.bind(this);
     this.getProfile();
   }
 
@@ -164,12 +162,6 @@ export default class EditProfile extends React.Component {
     );
   }
 
-  isFromGithubLinkValid = () => {
-    const github_link = this.state.form.github_url;
-    if (github_link == null) return;
-    return github_link.includes('https://github.com/');
-  };
-
   parseIndonesianDateFormat(dateIndex) {
     const monthNameIndex = {
       '01': 'Januari',
@@ -194,7 +186,7 @@ export default class EditProfile extends React.Component {
 
   handleSubmit = (e) => {
     e.preventDefault();
-    if (!this.isFromGithubLinkValid()) {
+    if (!isFromGithubLinkValid(this.state.form.github_url)) {
       this.modalAlert.open(
         'Pembaharuan profil gagal',
         'Pastikan link github yang anda tulis benar.(Berpola : https://github.com/<username>',
@@ -258,15 +250,6 @@ export default class EditProfile extends React.Component {
     this.setState({ form });
   };
 
-  gotoLink = (url) => {
-    const win = window.open(url);
-    win.focus();
-  };
-
-  gotoStudentResume = () => this.gotoLink(this.state.resume || '#');
-
-  gotoStudentTranscript = () => this.gotoLink(`transkrip/${this.state.id}`);
-
   updateForm(show) {
     if (show) {
       return (
diff --git a/assets/js/ProfilePage.jsx b/assets/js/ProfilePage.jsx
index 218bbc99..11d602be 100755
--- a/assets/js/ProfilePage.jsx
+++ b/assets/js/ProfilePage.jsx
@@ -16,6 +16,7 @@ import Server from './lib/Server';
 import Storage from './lib/Storage';
 import ModalAlert from './components/ModalAlert';
 import Dumper from './lib/Dumper';
+import { isFromGithubLinkValid, gotoLink } from './Utils';
 
 export default class ProfilePage extends React.Component {
   static propTypes = {
@@ -104,7 +105,6 @@ export default class ProfilePage extends React.Component {
     this.handleCheckbox = this.handleCheckbox.bind(this);
     this.handleSubmit = this.handleSubmit.bind(this);
     this.handleFile = this.handleFile.bind(this);
-    this.gotoLink = this.gotoLink.bind(this);
     this.gotoStudentResume = this.gotoStudentResume.bind(this);
     this.gotoStudentTranscript = this.gotoStudentTranscript.bind(this);
     this.getProfile();
@@ -179,12 +179,6 @@ export default class ProfilePage extends React.Component {
     );
   }
 
-  isFromGithubLinkValid = () => {
-    const github_link = this.state.form.github_url;
-    if (github_link == null) return;
-    return github_link.includes('https://github.com/');
-  };
-
   gitlabURL_is_valid = () => {
     if (this.state.form.gitlab_url != null) {
       return this.state.form.gitlab_url.includes('https://gitlab.com/');
@@ -239,7 +233,7 @@ export default class ProfilePage extends React.Component {
 
   handleSubmit = (e) => {
     e.preventDefault();
-    if (!this.isFromGithubLinkValid()) {
+    if (!isFromGithubLinkValid(this.state.form.github_url)) {
       this.modalAlert.open(
         'Pembaharuan profil gagal',
         'Pastikan link github yang anda tulis benar.(Berpola : https://github.com/<username>',
@@ -309,14 +303,9 @@ export default class ProfilePage extends React.Component {
     this.setState({ form });
   };
 
-  gotoLink = (url) => {
-    const win = window.open(url);
-    win.focus();
-  };
-
-  gotoStudentResume = () => this.gotoLink(this.state.resume || '#');
+  gotoStudentResume = () => gotoLink(this.state.resume || '#');
 
-  gotoStudentTranscript = () => this.gotoLink(`transkrip/${this.state.id}`);
+  gotoStudentTranscript = () => gotoLink(`transkrip/${this.state.id}`);
 
   updateForm(show) {
     if (show) {
diff --git a/assets/js/Utils.js b/assets/js/Utils.js
new file mode 100644
index 00000000..860ca4c0
--- /dev/null
+++ b/assets/js/Utils.js
@@ -0,0 +1,6 @@
+export const isFromGithubLinkValid = github_link => {
+    if (github_link == null) return;
+    return github_link.includes('https://github.com/');
+  };
+
+export const gotoLink = url => window.open(url).focus();
diff --git a/assets/js/components/ModalAlert.jsx b/assets/js/components/ModalAlert.jsx
index af4b095f..324a92df 100755
--- a/assets/js/components/ModalAlert.jsx
+++ b/assets/js/components/ModalAlert.jsx
@@ -1,7 +1,5 @@
 import React from 'react';
-import {
-  Button, Header, Icon, Modal,
-} from 'semantic-ui-react';
+import {ModalComponent} from "./ModalComponent";
 
 export default class ModalAlert extends React.Component {
   constructor(props) {
@@ -46,19 +44,14 @@ export default class ModalAlert extends React.Component {
   render = () => {
     const style = { whiteSpace: 'pre-wrap' };
     return (
-      <Modal open={this.state.open} basic size="small">
-        <Header icon="warning sign" content={this.state.header} />
-        <Modal.Content>
-          <p style={style}>{this.state.content}</p>
-        </Modal.Content>
-        <Modal.Actions>
-          <Button color="green" inverted onClick={this.close}>
-            <Icon name="checkmark" />
-            {' '}
-OK
-          </Button>
-        </Modal.Actions>
-      </Modal>
+      <ModalComponent
+        open={this.state.open}
+        icon={"warning sign"}
+        header={this.state.header}
+        style={style}
+        content={this.state.content}
+        onClick={this.close}
+      />
     );
   };
 }
diff --git a/assets/js/components/ModalComponent.jsx b/assets/js/components/ModalComponent.jsx
new file mode 100644
index 00000000..8168a500
--- /dev/null
+++ b/assets/js/components/ModalComponent.jsx
@@ -0,0 +1,20 @@
+import React from 'react';
+import {
+  Button, Header, Icon, Modal,
+} from 'semantic-ui-react';
+
+export const ModalComponent = (props) => (
+  <Modal open={props.open} basic size="small">
+    <Header icon={props.icon} content={props.header} />
+    <Modal.Content>
+      <p style={props.style}>{props.content}</p>
+    </Modal.Content>
+    <Modal.Actions>
+      <Button color="green" inverted onClick={props.onClick}>
+        <Icon name="checkmark" />
+        {' '}
+        OK
+      </Button>
+    </Modal.Actions>
+  </Modal>
+);
diff --git a/assets/js/components/ModalSuccess.jsx b/assets/js/components/ModalSuccess.jsx
index 36aa8722..d9216143 100644
--- a/assets/js/components/ModalSuccess.jsx
+++ b/assets/js/components/ModalSuccess.jsx
@@ -1,7 +1,5 @@
 import React from 'react';
-import {
-  Button, Header, Icon, Modal,
-} from 'semantic-ui-react';
+import {ModalComponent} from "./ModalComponent";
 
 export default class ModalSuccess extends React.Component {
   constructor(props) {
@@ -29,7 +27,10 @@ export default class ModalSuccess extends React.Component {
 
   open = (header = this.state.header, content = this.state.content, callback = this.state.callback) => {
     this.setState({
-      open: true, header, content, callback,
+      open: true,
+      header,
+      content,
+      callback,
     });
   };
 
@@ -41,19 +42,14 @@ export default class ModalSuccess extends React.Component {
   render = () => {
     const style = { whiteSpace: 'pre-wrap' };
     return (
-      <Modal open={this.state.open} basic size="small">
-        <Header icon="checkmark sign" content={this.state.header} />
-        <Modal.Content>
-          <p style={style}>{this.state.content}</p>
-        </Modal.Content>
-        <Modal.Actions>
-          <Button color="green" inverted onClick={this.close}>
-            <Icon name="checkmark" />
-            {' '}
-OK
-          </Button>
-        </Modal.Actions>
-      </Modal>
+      <ModalComponent
+        open={this.state.open}
+        icon={"checkmark sign"}
+        header={this.state.header}
+        style={style}
+        content={this.state.content}
+        onClick={this.close}
+      />
     );
   };
 }
-- 
GitLab


From 5913d99db758bef6e25d8611f5f57864b70c3b6d Mon Sep 17 00:00:00 2001
From: Bagas <priambudibagaskara@gmail.com>
Date: Mon, 2 Dec 2019 22:06:09 +0700
Subject: [PATCH 7/7] remove unnecessary imports and states

---
 assets/js/CompanyProfile.jsx          | 20 +++------------
 assets/js/EditProfile.jsx             | 35 +--------------------------
 assets/js/components/ModalAlert.jsx   |  8 +++---
 assets/js/components/ModalSuccess.jsx | 10 +++++---
 4 files changed, 17 insertions(+), 56 deletions(-)

diff --git a/assets/js/CompanyProfile.jsx b/assets/js/CompanyProfile.jsx
index 1216c767..4608142d 100644
--- a/assets/js/CompanyProfile.jsx
+++ b/assets/js/CompanyProfile.jsx
@@ -1,6 +1,8 @@
 import React from 'react';
 import PropTypes from 'prop-types';
-import { Segment, Header, Image, Container, Form, Button, Icon, TextArea } from 'semantic-ui-react';
+import {
+  Segment, Header, Image, Container, Form, Button, Icon, TextArea,
+} from 'semantic-ui-react';
 import { Doughnut } from 'react-chartjs-2';
 import Server from './lib/Server';
 import Dumper from './lib/Dumper';
@@ -8,8 +10,6 @@ import ModalAlert from './components/ModalAlert';
 
 export default class CompanyProfile extends React.Component {
   static propTypes = {
-    route: PropTypes.object.isRequired,
-    params: PropTypes.object.isRequired,
     user: PropTypes.object.isRequired,
   };
 
@@ -41,17 +41,6 @@ export default class CompanyProfile extends React.Component {
     this.handleChange = this.handleChange.bind(this);
     this.handleSubmit = this.handleSubmit.bind(this);
 
-    Server.get(
-      `/companies/${this.props.user.data.company.id}/vacancies/`,
-      false,
-    ).then((result) => {
-      this.setState({ vacancies: result.results });
-    },
-    (error) => error.then(() => {
-      console.log(error);
-    }),
-    );
-    
     Server.get(
       `/companies/${this.props.user.data.company.id}/applications/`,
       false,
@@ -60,8 +49,7 @@ export default class CompanyProfile extends React.Component {
     },
     (error) => error.then(() => {
       console.log(error);
-    }),
-    );
+    }));
   }
 
   getProfile() {
diff --git a/assets/js/EditProfile.jsx b/assets/js/EditProfile.jsx
index 33c349bc..b8a2eb60 100644
--- a/assets/js/EditProfile.jsx
+++ b/assets/js/EditProfile.jsx
@@ -2,7 +2,6 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import {
   Segment,
-  Image,
   Header,
   Icon,
   Checkbox,
@@ -13,7 +12,7 @@ import Server from './lib/Server';
 import Storage from './lib/Storage';
 import ModalAlert from './components/ModalAlert';
 import Dumper from './lib/Dumper';
-import { isFromGithubLinkValid, gotoLink } from './Utils';
+import { isFromGithubLinkValid } from './Utils';
 
 export default class EditProfile extends React.Component {
   static propTypes = {
@@ -27,26 +26,14 @@ export default class EditProfile extends React.Component {
     /* istanbul ignore next */
     this.state = {
       id: '',
-      npm: '',
       name: '',
-      major: '',
-      batch: '',
       email: '',
-      gender: '',
       region: '',
       alamat: '',
-      cityOfBirth: '',
-      dateOfBirth: '',
-      resume: '',
       phone_number: '',
       portfolio_link: '',
       show_transcript: '',
-      photo: '',
-      age: '',
       intro: '',
-      expected_salary: '',
-      job_seeking_status: '',
-      volunteer: '',
       skills: '',
       form: {
         picture: '',
@@ -72,14 +59,10 @@ export default class EditProfile extends React.Component {
         seminar: '',
         interests: '',
       },
-      bagikanTranskrip: '',
-      acceptedNo: 0,
-      readNo: 0,
       refresh: 1,
       loading: false,
       linkedin_url: '',
       hackerrank_url: '',
-      self_description: '',
       student_gpa: 0.0,
       website_url: '',
       latest_work: '',
@@ -110,32 +93,16 @@ export default class EditProfile extends React.Component {
         this.setState({
           id: data.id,
           name: data.full_name,
-          npm: data.npm,
-          resume: data.resume,
-          major: data.major,
-          batch: data.batch,
           email: data.user.email,
-          gender: data.gender,
           region: data.region,
           alamat: data.alamat,
-          cityOfBirth: data.birth_place,
-          dateOfBirth: this.parseIndonesianDateFormat(data.birth_date),
           phone_number: data.phone_number,
           portfolio_link: data.portfolio_link,
-          photo: data.photo,
           show_transcript: data.show_transcript,
-          acceptedNo: data.accepted_no,
-          readNo: data.read_no,
-          bagikanTranskrip: data.show_transcript,
           refresh: this.state.refresh + 1,
-          age: data.age,
           intro: data.intro,
-          expected_salary: data.expected_salary,
-          job_seeking_status: data.job_seeking_status,
-          volunteer: data.volunteer,
           linkedin_url: data.linkedin_url,
           hackerrank_url: data.hackerrank_url,
-          self_description: data.self_description,
           student_gpa: data.student_gpa,
           website_url: data.website_url,
           latest_work: data.latest_work,
diff --git a/assets/js/components/ModalAlert.jsx b/assets/js/components/ModalAlert.jsx
index 324a92df..1acc2f45 100755
--- a/assets/js/components/ModalAlert.jsx
+++ b/assets/js/components/ModalAlert.jsx
@@ -1,5 +1,5 @@
 import React from 'react';
-import {ModalComponent} from "./ModalComponent";
+import { ModalComponent } from './ModalComponent';
 
 export default class ModalAlert extends React.Component {
   constructor(props) {
@@ -37,7 +37,9 @@ export default class ModalAlert extends React.Component {
   };
 
   close = () => {
-    this.setState({ open: false });
+    this.setState({
+      open: false,
+    });
     this.state.callback();
   };
 
@@ -46,7 +48,7 @@ export default class ModalAlert extends React.Component {
     return (
       <ModalComponent
         open={this.state.open}
-        icon={"warning sign"}
+        icon="warning sign"
         header={this.state.header}
         style={style}
         content={this.state.content}
diff --git a/assets/js/components/ModalSuccess.jsx b/assets/js/components/ModalSuccess.jsx
index d9216143..371fa492 100644
--- a/assets/js/components/ModalSuccess.jsx
+++ b/assets/js/components/ModalSuccess.jsx
@@ -1,5 +1,5 @@
 import React from 'react';
-import {ModalComponent} from "./ModalComponent";
+import { ModalComponent } from './ModalComponent';
 
 export default class ModalSuccess extends React.Component {
   constructor(props) {
@@ -25,7 +25,11 @@ export default class ModalSuccess extends React.Component {
     if (anotherModal > 0) document.body.classList.add('scrolling', 'dimmable', 'dimmed');
   };
 
-  open = (header = this.state.header, content = this.state.content, callback = this.state.callback) => {
+  open = (
+    header = this.state.header,
+    content = this.state.content,
+    callback = this.state.callback,
+  ) => {
     this.setState({
       open: true,
       header,
@@ -44,7 +48,7 @@ export default class ModalSuccess extends React.Component {
     return (
       <ModalComponent
         open={this.state.open}
-        icon={"checkmark sign"}
+        icon="checkmark sign"
         header={this.state.header}
         style={style}
         content={this.state.content}
-- 
GitLab