From 1fde39b14ef539c3c7d92e88f8ac38c156abeb27 Mon Sep 17 00:00:00 2001 From: Loi Phan Date: Tue, 12 Sep 2023 09:38:53 +0700 Subject: [PATCH 1/3] Refactor constant file and controller project --- javascript-practice/src/js/app.js | 7 +++--- .../src/js/constants/config.js | 2 -- .../src/js/constants/constant.js | 25 ------------------- .../src/js/constants/message.js | 17 +++++++++++++ .../src/js/constants/variable.js | 20 +++++++++++++++ .../src/js/controllers/homeController.js | 14 +++++++++++ .../controllers/{controller.js => index.js} | 2 ++ .../src/js/controllers/loginController.js | 8 +++--- .../src/js/controllers/registerController.js | 6 ++--- javascript-practice/src/js/helpers/helpers.js | 21 ++++++++++++++-- 10 files changed, 83 insertions(+), 39 deletions(-) delete mode 100644 javascript-practice/src/js/constants/constant.js create mode 100644 javascript-practice/src/js/constants/message.js create mode 100644 javascript-practice/src/js/constants/variable.js create mode 100644 javascript-practice/src/js/controllers/homeController.js rename javascript-practice/src/js/controllers/{controller.js => index.js} (74%) diff --git a/javascript-practice/src/js/app.js b/javascript-practice/src/js/app.js index c3f6fc3..5f951bf 100644 --- a/javascript-practice/src/js/app.js +++ b/javascript-practice/src/js/app.js @@ -1,6 +1,6 @@ -import Controller from './controllers/controller'; -import Service from './services/service'; -import View from './views/view'; +import Controller from './controllers/index'; +import Service from './services/index'; +import View from './views/index'; import 'regenerator-runtime/runtime'; import 'core-js/stable'; @@ -12,5 +12,6 @@ export default class App { start() { this.controller.registerController.init(); this.controller.loginController.init(); + this.controller.homeController.init(); } } diff --git a/javascript-practice/src/js/constants/config.js b/javascript-practice/src/js/constants/config.js index 8a88e89..4950d70 100644 --- a/javascript-practice/src/js/constants/config.js +++ b/javascript-practice/src/js/constants/config.js @@ -1,5 +1,3 @@ export const DATABASE_URL = 'https://javascript-training-81f7a-default-rtdb.asia-southeast1.firebasedatabase.app'; export const TIME_OUT_SEC = 3; -export const REGEX_PASSWORD = - /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/; diff --git a/javascript-practice/src/js/constants/constant.js b/javascript-practice/src/js/constants/constant.js deleted file mode 100644 index 7cdf304..0000000 --- a/javascript-practice/src/js/constants/constant.js +++ /dev/null @@ -1,25 +0,0 @@ -export const MESSAGE = { - PASSWORD_NOT_MATCH: 'Password not match! Please try again!', - PASSWORD_NOT_STRONG: - 'Password must at least one uppercase, one lowercase letter, one number and one special character!', - ERROR_MESSAGE_DEFAULT: 'Something went wrong!', - TIME_OUT_ERROR: 'Connection time out! Please try again!', - ERROR_CREDENTIAL: { - title: 'Error Credential', - message: 'Email or password not match! Please try again!', - }, - DEFAULT_TITLE_ERROR_POPUP: 'Error', - USER_EXIST_ERROR: 'User is exists! Please try another email!', -}; - -export const BTN_CONTENT = { - GOT_IT: 'Got it!', - OK: 'Ok', -}; - -export const LOCAL_STORAGE = { - ACCESS_TOKEN: 'accessToken', -}; - -export const TYPE_POPUP = { success: 'success', error: 'error' }; -export const MARK_ICON = { success: 'check', error: 'error' }; diff --git a/javascript-practice/src/js/constants/message.js b/javascript-practice/src/js/constants/message.js new file mode 100644 index 0000000..b0e7995 --- /dev/null +++ b/javascript-practice/src/js/constants/message.js @@ -0,0 +1,17 @@ +export const PASSWORD_NOT_MATCH = 'Password not match! Please try again!'; + +export const PASSWORD_NOT_STRONG = + 'Password must at least one uppercase, one lowercase letter, one number and one special character!'; + +export const ERROR_MESSAGE_DEFAULT = 'Something went wrong!'; + +export const TIME_OUT_ERROR = 'Connection time out! Please try again!'; + +export const ERROR_CREDENTIAL = { + title: 'Error Credential', + message: 'Email or password not match! Please try again!', +}; + +export const DEFAULT_TITLE_ERROR_TOAST = 'Error'; + +export const USER_EXIST_ERROR = 'User is exists! Please try another email!'; diff --git a/javascript-practice/src/js/constants/variable.js b/javascript-practice/src/js/constants/variable.js new file mode 100644 index 0000000..423aaef --- /dev/null +++ b/javascript-practice/src/js/constants/variable.js @@ -0,0 +1,20 @@ +export const URL = { + LOGIN: 'login', + REGISTER: 'register', + HOME: '', +}; + +export const BTN_CONTENT = { + GOT_IT: 'Got it!', + OK: 'Ok', +}; + +export const LOCAL_STORAGE = { + ACCESS_TOKEN: 'accessToken', +}; + +export const TYPE_TOAST = { success: 'success', error: 'error' }; +export const MARK_ICON = { success: 'check', error: 'error' }; + +export const REGEX_PASSWORD = + /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/; diff --git a/javascript-practice/src/js/controllers/homeController.js b/javascript-practice/src/js/controllers/homeController.js new file mode 100644 index 0000000..18ac55f --- /dev/null +++ b/javascript-practice/src/js/controllers/homeController.js @@ -0,0 +1,14 @@ +export default class HomeController { + constructor(service, view) { + this.service = service; + this.homeView = view.homeView; + } + + init() { + if (this.homeView) { + this.homeView.handlerTabsTransfer(); + this.homeView.addCommonEventPage(); + this.homeView.addEventSelectCategoryDialog(); + } + } +} diff --git a/javascript-practice/src/js/controllers/controller.js b/javascript-practice/src/js/controllers/index.js similarity index 74% rename from javascript-practice/src/js/controllers/controller.js rename to javascript-practice/src/js/controllers/index.js index 1434739..1b81f42 100644 --- a/javascript-practice/src/js/controllers/controller.js +++ b/javascript-practice/src/js/controllers/index.js @@ -1,3 +1,4 @@ +import HomeController from './homeController'; import LoginController from './loginController'; import RegisterController from './registerController'; @@ -5,5 +6,6 @@ export default class Controller { constructor(service, view) { this.registerController = new RegisterController(service, view); this.loginController = new LoginController(service, view); + this.homeController = new HomeController(service, view); } } diff --git a/javascript-practice/src/js/controllers/loginController.js b/javascript-practice/src/js/controllers/loginController.js index 322b537..12a1117 100644 --- a/javascript-practice/src/js/controllers/loginController.js +++ b/javascript-practice/src/js/controllers/loginController.js @@ -4,13 +4,13 @@ export default class LoginController { this.loginView = view.loginView; } - handlerValidateUser(email, password) { - return this.service.userService.validateUser(email, password); + handlerLoginUser(email, password) { + return this.service.userService.loginUser(email, password); } init() { - if (this.loginView.isLoginPage()) { - this.loginView.addHandlerForm(this.handlerValidateUser.bind(this)); + if (this.loginView) { + this.loginView.addHandlerForm(this.handlerLoginUser.bind(this)); } } } diff --git a/javascript-practice/src/js/controllers/registerController.js b/javascript-practice/src/js/controllers/registerController.js index 0ecfc65..0722299 100644 --- a/javascript-practice/src/js/controllers/registerController.js +++ b/javascript-practice/src/js/controllers/registerController.js @@ -4,7 +4,7 @@ export default class RegisterController { this.service = service; } - hanlderCheckUserExist(email) { + handlerCheckUserExist(email) { return this.service.userService.checkUserExist(email); } @@ -13,9 +13,9 @@ export default class RegisterController { } init() { - if (this.registerView.isRegisterPage()) { + if (this.registerView) { this.registerView.addHandlerForm( - this.hanlderCheckUserExist.bind(this), + this.handlerCheckUserExist.bind(this), this.handlerSaveUser.bind(this), ); this.registerView.addHandlerInputFormChange(); diff --git a/javascript-practice/src/js/helpers/helpers.js b/javascript-practice/src/js/helpers/helpers.js index 7bb705a..46c44fe 100644 --- a/javascript-practice/src/js/helpers/helpers.js +++ b/javascript-practice/src/js/helpers/helpers.js @@ -1,6 +1,7 @@ -import { MESSAGE } from '../constants/constant'; -import { REGEX_PASSWORD, TIME_OUT_SEC } from '../constants/config'; +import * as MESSAGE from '../constants/message'; +import { TIME_OUT_SEC } from '../constants/config'; import FirebaseService from '../services/firebaseService'; +import { REGEX_PASSWORD } from '../constants/variable'; /** * Validate password @@ -62,3 +63,19 @@ export const convertDataObjectToModel = (data) => { return { id, ...object.data }; }; + +export const getSubdirectoryURL = () => { + const url = window.location.href; + + const parts = url.split('/'); // Results: ['http:', '', 'example.com', ''] + + const subDirectory = parts[3]; // Get subdirectory url only + + // Remove query behind subDirectory + const index = subDirectory.indexOf('?'); + if (index !== -1) { + return subDirectory.substring(0, index); + } + + return subDirectory; +}; From ac9b6622555c7bb46c7cc1363c1575398e5ce5da Mon Sep 17 00:00:00 2001 From: Loi Phan Date: Tue, 12 Sep 2023 10:07:04 +0700 Subject: [PATCH 2/3] Fix naming and format code --- javascript-practice/src/js/constants/variable.js | 2 +- javascript-practice/src/js/helpers/helpers.js | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/javascript-practice/src/js/constants/variable.js b/javascript-practice/src/js/constants/variable.js index 423aaef..4023721 100644 --- a/javascript-practice/src/js/constants/variable.js +++ b/javascript-practice/src/js/constants/variable.js @@ -1,4 +1,4 @@ -export const URL = { +export const SUBDIRECTORY_URL = { LOGIN: 'login', REGISTER: 'register', HOME: '', diff --git a/javascript-practice/src/js/helpers/helpers.js b/javascript-practice/src/js/helpers/helpers.js index 46c44fe..54b8fd5 100644 --- a/javascript-practice/src/js/helpers/helpers.js +++ b/javascript-practice/src/js/helpers/helpers.js @@ -66,13 +66,10 @@ export const convertDataObjectToModel = (data) => { export const getSubdirectoryURL = () => { const url = window.location.href; - const parts = url.split('/'); // Results: ['http:', '', 'example.com', ''] - const subDirectory = parts[3]; // Get subdirectory url only + const index = subDirectory.indexOf('?'); // Remove query behind subDirectory - // Remove query behind subDirectory - const index = subDirectory.indexOf('?'); if (index !== -1) { return subDirectory.substring(0, index); } From 10998f15d0cd89203aef2cacdcbc59357f95412f Mon Sep 17 00:00:00 2001 From: Loi Phan Date: Tue, 12 Sep 2023 11:21:35 +0700 Subject: [PATCH 3/3] Move code from variable.js to config.js --- .../src/js/constants/config.js | 23 +++++++++++++++++++ .../src/js/constants/variable.js | 20 ---------------- 2 files changed, 23 insertions(+), 20 deletions(-) delete mode 100644 javascript-practice/src/js/constants/variable.js diff --git a/javascript-practice/src/js/constants/config.js b/javascript-practice/src/js/constants/config.js index 4950d70..b879e6d 100644 --- a/javascript-practice/src/js/constants/config.js +++ b/javascript-practice/src/js/constants/config.js @@ -1,3 +1,26 @@ export const DATABASE_URL = 'https://javascript-training-81f7a-default-rtdb.asia-southeast1.firebasedatabase.app'; export const TIME_OUT_SEC = 3; + +export const URL = { + LOGIN: 'login', + REGISTER: 'register', + HOME: '', +}; + +export const BTN_CONTENT = { + GOT_IT: 'Got it!', + OK: 'Ok', +}; + +export const LOCAL_STORAGE = { + ACCESS_TOKEN: 'accessToken', +}; + +export const TYPE_TOAST = { success: 'success', error: 'error' }; +export const MARK_ICON = { success: 'check', error: 'error' }; + +export const REGEX = { + PASSWORD: + /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/, +}; diff --git a/javascript-practice/src/js/constants/variable.js b/javascript-practice/src/js/constants/variable.js deleted file mode 100644 index 4023721..0000000 --- a/javascript-practice/src/js/constants/variable.js +++ /dev/null @@ -1,20 +0,0 @@ -export const SUBDIRECTORY_URL = { - LOGIN: 'login', - REGISTER: 'register', - HOME: '', -}; - -export const BTN_CONTENT = { - GOT_IT: 'Got it!', - OK: 'Ok', -}; - -export const LOCAL_STORAGE = { - ACCESS_TOKEN: 'accessToken', -}; - -export const TYPE_TOAST = { success: 'success', error: 'error' }; -export const MARK_ICON = { success: 'check', error: 'error' }; - -export const REGEX_PASSWORD = - /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;