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; +};