From 0a4577b3f552bb07944619fd4fd47899cf2322c2 Mon Sep 17 00:00:00 2001
From: Juan Pakpahan <juan.alexander@ui.ac.id>
Date: Thu, 5 Dec 2019 15:12:15 +0700
Subject: [PATCH 1/2] make a parent class for EditProfile and ProfilePage

---
 assets/js/EditProfile.jsx    | 71 +-----------------------------------
 assets/js/ProfileHandler.jsx | 70 +++++++++++++++++++++++++++++++++++
 assets/js/ProfilePage.jsx    | 33 +----------------
 3 files changed, 74 insertions(+), 100 deletions(-)
 create mode 100644 assets/js/ProfileHandler.jsx

diff --git a/assets/js/EditProfile.jsx b/assets/js/EditProfile.jsx
index 9fc6f4c8..c524b935 100644
--- a/assets/js/EditProfile.jsx
+++ b/assets/js/EditProfile.jsx
@@ -11,10 +11,9 @@ import {
 import Server from './lib/Server';
 import Storage from './lib/Storage';
 import ModalAlert from './components/ModalAlert';
-import Dumper from './lib/Dumper';
-import { isFromGithubLinkValid } from './Utils';
+import ProfileHandler from './ProfileHandler';
 
-export default class EditProfile extends React.Component {
+export default class EditProfile extends ProfileHandler {
   static propTypes = {
     route: PropTypes.object.isRequired,
     params: PropTypes.object.isRequired,
@@ -157,72 +156,6 @@ export default class EditProfile extends React.Component {
     return dateIndexArray.reverse().join(' ');
   }
 
-  handleSubmit = (e) => {
-    e.preventDefault();
-    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>',
-      );
-    } else {
-      const submitForm = {};
-      Object.keys(this.state.form).forEach((key) => {
-        if (this.state.form[key] !== '') {
-          submitForm[key] = this.state.form[key];
-        }
-      });
-      this.setState({ loading: true });
-      Server.submit(
-        `/students/${this.state.id}/profile/`,
-        submitForm,
-        'PATCH',
-      ).then(
-        () => {
-          this.setState({ loading: false });
-          this.modalAlert.open(
-            'Profil berhasil diperbaharui',
-            'Silakan periksa kembali profil anda',
-            this.getProfile,
-          );
-        },
-        (error) => error.then((r) => {
-          this.setState({ loading: false });
-          this.modalAlert.open('Pembaharuan profil gagal', Dumper.dump(r));
-        }),
-      );
-    }
-  };
-
-  handleFile = (e) => {
-    const { form } = this.state;
-    form[e.target.name] = e.target.files[0];
-    this.setState({ form });
-  };
-
-  handleChange = (e) => {
-    const { form } = this.state;
-    form[e.target.name] = e.target.value;
-    this.setState({ form });
-  };
-
-  handleCheckbox = (e, d) => {
-    const { form } = this.state;
-    form[d.name] = d.checked;
-    this.setState({ form, show_transcript: d.checked });
-  };
-
-  handleRadioGender = (e, { value }) => {
-    const { form } = this.state;
-    form.gender = value;
-    this.setState({ form });
-  };
-
-  handleRadio = (e, { value }) => {
-    const { form } = this.state;
-    form.job_seeking_status = value;
-    this.setState({ form });
-  };
-
   updateForm(show) {
     if (show) {
       return (
diff --git a/assets/js/ProfileHandler.jsx b/assets/js/ProfileHandler.jsx
new file mode 100644
index 00000000..d750a876
--- /dev/null
+++ b/assets/js/ProfileHandler.jsx
@@ -0,0 +1,70 @@
+
+
+
+export default class ProfileHandler extends React.Component {
+    handleSubmit = (e) => {
+        e.preventDefault();
+        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>',
+        );
+        } else {
+        const submitForm = {};
+        Object.keys(this.state.form).forEach((key) => {
+            if (this.state.form[key] !== '') {
+            submitForm[key] = this.state.form[key];
+            }
+        });
+        this.setState({ loading: true });
+        Server.submit(
+            `/students/${this.state.id}/profile/`,
+            submitForm,
+            'PATCH',
+        ).then(
+            () => {
+            this.setState({ loading: false });
+            this.modalAlert.open(
+                'Profil berhasil diperbaharui',
+                'Silakan periksa kembali profil anda',
+                this.getProfile,
+            );
+            },
+            (error) => error.then((r) => {
+            this.setState({ loading: false });
+            this.modalAlert.open('Pembaharuan profil gagal', Dumper.dump(r));
+            }),
+        );
+        }
+    };
+
+    handleFile = (e) => {
+        const { form } = this.state;
+        form[e.target.name] = e.target.files[0];
+        this.setState({ form });
+    };
+
+    handleChange = (e) => {
+        const { form } = this.state;
+        form[e.target.name] = e.target.value;
+        this.setState({ form });
+    };
+
+    handleCheckbox = (e, d) => {
+        const { form } = this.state;
+        form[d.name] = d.checked;
+        this.setState({ form, show_transcript: d.checked });
+    };
+
+    handleRadioGender = (e, { value }) => {
+        const { form } = this.state;
+        form.gender = value;
+        this.setState({ form });
+    };
+
+    handleRadio = (e, { value }) => {
+        const { form } = this.state;
+        form.job_seeking_status = value;
+        this.setState({ form });
+    };
+}
\ No newline at end of file
diff --git a/assets/js/ProfilePage.jsx b/assets/js/ProfilePage.jsx
index db2278db..2c34322a 100755
--- a/assets/js/ProfilePage.jsx
+++ b/assets/js/ProfilePage.jsx
@@ -15,10 +15,11 @@ import {
 import Server from './lib/Server';
 import Storage from './lib/Storage';
 import ModalAlert from './components/ModalAlert';
+import ProfileHandler from './ProfileHandler';
 import Dumper from './lib/Dumper';
 import { isFromGithubLinkValid, gotoLink } from './Utils';
 
-export default class ProfilePage extends React.Component {
+export default class ProfilePage extends ProfileHandler {
   static propTypes = {
     route: PropTypes.object.isRequired,
     params: PropTypes.object.isRequired,
@@ -281,36 +282,6 @@ export default class ProfilePage extends React.Component {
     }
   };
 
-  handleFile = (e) => {
-    const { form } = this.state;
-    form[e.target.name] = e.target.files[0];
-    this.setState({ form });
-  };
-
-  handleChange = (e) => {
-    const { form } = this.state;
-    form[e.target.name] = e.target.value;
-    this.setState({ form });
-  };
-
-  handleCheckbox = (e, d) => {
-    const { form } = this.state;
-    form[d.name] = d.checked;
-    this.setState({ form, show_transcript: d.checked });
-  };
-
-  handleRadioGender = (e, { value }) => {
-    const { form } = this.state;
-    form.gender = value;
-    this.setState({ form });
-  };
-
-  handleRadio = (e, { value }) => {
-    const { form } = this.state;
-    form.job_seeking_status = value;
-    this.setState({ form });
-  };
-
   gotoStudentResume = () => gotoLink(this.state.resume || '#');
 
   gotoStudentToeflFile = () => gotoLink(this.state.student_toefl_file || '#');
-- 
GitLab


From 2a2f585493f8d6edf62cad4934e764030dcb2834 Mon Sep 17 00:00:00 2001
From: Juan Pakpahan <juan.alexander@ui.ac.id>
Date: Thu, 5 Dec 2019 15:30:57 +0700
Subject: [PATCH 2/2] add react library

---
 assets/js/ProfileHandler.jsx | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/assets/js/ProfileHandler.jsx b/assets/js/ProfileHandler.jsx
index d750a876..e21b96aa 100644
--- a/assets/js/ProfileHandler.jsx
+++ b/assets/js/ProfileHandler.jsx
@@ -1,5 +1,6 @@
-
-
+import React from 'react';
+import Dumper from './lib/Dumper';
+import { isFromGithubLinkValid } from './Utils';
 
 export default class ProfileHandler extends React.Component {
     handleSubmit = (e) => {
-- 
GitLab