UNPKG

phx-react

Version:

PHX REACT

705 lines 63.9 kB
import { __awaiter, __generator, __spreadArray } from "tslib"; import { fas } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { Dialog, Menu, Transition } from '@headlessui/react'; import { Bars3Icon, LockClosedIcon, XMarkIcon } from '@heroicons/react/24/outline'; import React, { Fragment, useEffect, useState } from 'react'; import { PHXModal } from '../Modal'; import { PHXSkeleton } from '../Skeleton'; import Cookies from 'js-cookie'; import { ACTION_PERMISSION, AUTH_TOKEN, DEFAULT_AVATAR, DEFAULT_LOGO_DASHBOARD, DEFAULT_LOGO_LOGIN, DF_HEADER_BG_COLOR, DF_MENU_BG_ACTIVE_COLOR, DF_MENU_BG_COLOR, DF_MENU_HOVER_BG_COLOR, DF_MENU_ICON_ACTICE_COLOR, DF_MENU_ICON_AND_TEXT_HOVER_COLOR, DF_MENU_ICON_COLOR, DF_MENU_ICON_HOVER_COLOR, DF_MENU_TEXT_COLOR, DF_SEARCH_BG_COLOR, DF_SEARCH_BORDER_COLOR, DF_SEARCH_BORDER_HOVER_COLOR, DF_SEARCH_ICON_COLOR, DF_SEARCH_TEXT_COLOR, DF_SKELETON_COLOR, isLoggedCookie, KEY_SETTING, switchSchool, } from '../../utils/constants'; import { ArrowLeftIcon } from '@heroicons/react/20/solid'; import { library } from '@fortawesome/fontawesome-svg-core'; import SearchDetail from './search/search-bar'; import { PHXBanner } from '../Banner'; import { CheckIcon } from '@heroicons/react/24/solid'; import PHXFuncGetLoggedInfo from '../Func/getLoginInfo'; import PHXClientQueryV3 from '../Func/clientQueryV3'; import { styles } from '../MainWrap/style/sub-menu-style'; import NavMobile from '../MainWrap/navigator/nav-mobile'; import StyledCustomeLayout from '../MainWrap/appearance/appearance-styled'; import { GET_PERMISSION_DETAIL_USER_V3, GET_SCHOOL_V3, getCampaignNameV3, queryGetProfileV3 } from '../../query'; import { PHXCard } from '../Card'; import PHXGetEnvPublicV3 from '../Func/getEnvPublic'; import saveCookiesClient from '../Func/saveCookiesClient'; import { encryptDataSync } from '../Func/getActionPermission'; import { useLoading } from '../LoadingProvider'; library.add(fas); function classNames() { var classes = []; for (var _i = 0; _i < arguments.length; _i++) { classes[_i] = arguments[_i]; } return classes.filter(Boolean).join(' '); } export var PHXMainWrapV3 = function (_a) { var _b, _c, _d, _e; var children = _a.children, params = _a.params, pathName = _a.pathName, router = _a.router, _f = _a.hiddenLeftMenu, hiddenLeftMenu = _f === void 0 ? false : _f, _g = _a.logoHeight, logoHeight = _g === void 0 ? '28px' : _g, getDataCookies = _a.getDataCookies, _h = _a.multipleMenu, multipleMenu = _h === void 0 ? false : _h; var pid = (params ? params : {}).pid; var _j = useState(false), modal = _j[0], setModal = _j[1]; var _k = useState(true), openSubMenu = _k[0], setOpenSubMenu = _k[1]; var _l = useState(''), campaignName = _l[0], setCampaignName = _l[1]; var _m = useState(false), sidebarOpen = _m[0], setSidebarOpen = _m[1]; var _o = useState([]), subNavigation = _o[0], setSubNavigation = _o[1]; var _p = useState([]), navigation = _p[0], setNavigation = _p[1]; var _q = useState([]), menu = _q[0], setMenu = _q[1]; var _r = useState(true), loadingSchool = _r[0], setLoadingSchool = _r[1]; var _s = useState(true), loadingMenu = _s[0], setLoadingMenu = _s[1]; var _t = useState(false), modalSignOut = _t[0], setModalSignOut = _t[1]; var _u = useState([]), infoSchool = _u[0], setInfoSchool = _u[1]; var _v = useState(), dataSchool = _v[0], setDataSchool = _v[1]; var _w = useState([]), roleCode = _w[0], setRoleCode = _w[1]; var _x = useState([]), perCode = _x[0], setPerCode = _x[1]; var _y = useState(null), schoolId = _y[0], setSchoolId = _y[1]; var _z = useState(true), showBanner = _z[0], setShowBanner = _z[1]; var _0 = useState({}), configLayout = _0[0], setConfigLayout = _0[1]; var _1 = useState(true), isLoading = _1[0], setIsLoading = _1[1]; var _2 = useState(true), isLoadingPermission = _2[0], setIsLoadingPermission = _2[1]; var locationPathname = typeof window !== 'undefined' ? window.location.pathname : ''; var pathArr = locationPathname.split('/'); var pathNameWithBasePath = "/".concat(pathArr[1]).concat(pathName); var setGlobalLoading = useLoading().setLoading; function enablePer(code, arr) { if (!code) return true; return arr === null || arr === void 0 ? void 0 : arr.some(function (item) { return item === code; }); } var _3 = useState({ path: '', height: logoHeight }), logo = _3[0], setLogo = _3[1]; var cookie = typeof window !== 'undefined' ? localStorage.getItem(isLoggedCookie) : null; var authen = Cookies.get(AUTH_TOKEN); function compareObjects(settingQuery, settingCookies) { var keysSettingQuery = Object.keys(settingQuery); if (keysSettingQuery.length !== Object.keys(settingCookies).length) { return false; } for (var _i = 0, keysSettingQuery_1 = keysSettingQuery; _i < keysSettingQuery_1.length; _i++) { var key = keysSettingQuery_1[_i]; if (!Object.prototype.hasOwnProperty.call(settingCookies, key)) { return false; } if (settingQuery[key] !== settingCookies[key]) { return false; } } return true; } var schoolInfo = PHXFuncGetLoggedInfo(); var schoolInfoId = schoolInfo === null || schoolInfo === void 0 ? void 0 : schoolInfo.school_id; var userId = schoolInfo === null || schoolInfo === void 0 ? void 0 : schoolInfo.id; // Lấy code phân quyền trong menu từ path hiện tại function getCodesByPath(dataMenu, currentPath) { var lastMatchingCode = null; var normalizedPath = currentPath.replace(/\/$/, ''); function traverse(items, prefix) { for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { var item = items_1[_i]; var fullPath = item.path.startsWith('/') ? prefix + item.path : item.path; var normalizedFullPath = fullPath.replace(/\/$/, ''); if (normalizedPath === normalizedFullPath || normalizedPath.startsWith(normalizedFullPath + '/')) { lastMatchingCode = item.code; } if (item.child) { traverse(item.child, prefix); } } } for (var _i = 0, dataMenu_1 = dataMenu; _i < dataMenu_1.length; _i++) { var rootItem = dataMenu_1[_i]; var rootPath = rootItem.path; var prefix = rootPath.split('/').slice(0, 2).join('/'); traverse([rootItem], prefix); } return lastMatchingCode ? lastMatchingCode : null; } // code phân quyền path hiện tại var currentCode = getCodesByPath(navigation, locationPathname); var getProfileData = function () { return __awaiter(void 0, void 0, void 0, function () { var response, profileStaff, profileTeacher, error_1; var _a, _b, _c, _d, _e, _f; return __generator(this, function (_g) { switch (_g.label) { case 0: _g.trys.push([0, 2, , 3]); return [4 /*yield*/, PHXClientQueryV3({ query: queryGetProfileV3, variables: { user_id: userId, school_id: schoolInfoId } })]; case 1: response = _g.sent(); profileStaff = (_c = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.profile_staff) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.is_quit_job; profileTeacher = (_f = (_e = (_d = response.data) === null || _d === void 0 ? void 0 : _d.profile_teacher) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.is_quit_job; if (profileStaff || profileTeacher) { console.log('Phiên đăng nhập đã hết hạn'); Object.keys(Cookies.get()).forEach(function (cookieName) { Cookies.remove(cookieName); }); localStorage.removeItem(isLoggedCookie); } return [3 /*break*/, 3]; case 2: error_1 = _g.sent(); console.log(error_1); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }; useEffect(function () { getProfileData(); Cookies.remove(isLoggedCookie); }, []); useEffect(function () { var _a; if (!cookie || !authen) { // Require login if production mode requireLoginValidation(); } else { var data = JSON.parse(cookie); var allRoleCodes = (_a = data === null || data === void 0 ? void 0 : data.user_roles) === null || _a === void 0 ? void 0 : _a.map(function (userRole) { var _a; return (_a = userRole === null || userRole === void 0 ? void 0 : userRole.role) === null || _a === void 0 ? void 0 : _a.role_code; }); var _b = data.school, group_id_1 = _b.school_name.group_id, school_name_id_1 = _b.school_name_id, school_id_1 = data.school_id, id_1 = data.id; setRoleCode(allRoleCodes); setSchoolId(data === null || data === void 0 ? void 0 : data.school_id); var fetchData = function () { return __awaiter(void 0, void 0, void 0, function () { var res, data_1, dataLength, settingFetchData, cleanedJsonString, jsonObjectSetting, getSeting, dataCompare, error_2; var _a, _b, _c, _d; return __generator(this, function (_e) { switch (_e.label) { case 0: setIsLoading(true); _e.label = 1; case 1: _e.trys.push([1, 3, , 4]); return [4 /*yield*/, PHXClientQueryV3({ query: GET_SCHOOL_V3, variables: { group_id: group_id_1, school_name_id: school_name_id_1, user_id: id_1 }, isDelay: false })]; case 2: res = _e.sent(); setDataSchool(res === null || res === void 0 ? void 0 : res.data); data_1 = (_b = (_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.school_name[0]) === null || _b === void 0 ? void 0 : _b.schools; dataLength = data_1.length; if (data_1 && dataLength > 0) { setLoadingSchool(false); } setInfoSchool(data_1); setIsLoading(false); settingFetchData = (_d = (_c = res === null || res === void 0 ? void 0 : res.data) === null || _c === void 0 ? void 0 : _c.setting_site[0]) === null || _d === void 0 ? void 0 : _d.value_setting; if (settingFetchData) { cleanedJsonString = settingFetchData.replace(/^"(.*)"$/, '$1'); jsonObjectSetting = JSON.parse(cleanedJsonString); setConfigLayout(jsonObjectSetting); getSeting = Cookies.get(KEY_SETTING); // Nếu chưa có cookeis if (!getSeting) { Cookies.set(KEY_SETTING, JSON.stringify(jsonObjectSetting)); return [2 /*return*/]; } dataCompare = compareObjects(jsonObjectSetting, JSON.parse(getSeting)); if (dataCompare) { console.log('log debug database === cookies'); return [2 /*return*/]; } console.log('log debug database !== cookies'); Cookies.set(KEY_SETTING, JSON.stringify(jsonObjectSetting)); } return [3 /*break*/, 4]; case 3: error_2 = _e.sent(); setIsLoading(false); console.error('Error fetching school data:', error_2); return [3 /*break*/, 4]; case 4: return [2 /*return*/]; } }); }); }; fetchData()["catch"](function (err) { console.log(err); setIsLoading(false); }); var allRoleCodesLength = allRoleCodes === null || allRoleCodes === void 0 ? void 0 : allRoleCodes.length; if (allRoleCodes && allRoleCodesLength > 0) { var fetchDataPer = function () { return __awaiter(void 0, void 0, void 0, function () { var res, userPermission, rolePermission, dataPermissionUser, permissionRouter, permissionAction, objPermissionAction, encryptedData, uniqueValues, error_3; var _a, _b, _c, _d; return __generator(this, function (_e) { switch (_e.label) { case 0: _e.trys.push([0, 3, 4, 5]); return [4 /*yield*/, PHXClientQueryV3({ query: GET_PERMISSION_DETAIL_USER_V3, variables: { id: id_1, school_id: school_id_1 } })]; case 1: res = _e.sent(); userPermission = (_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.permission_user; rolePermission = (_b = res === null || res === void 0 ? void 0 : res.data) === null || _b === void 0 ? void 0 : _b.permission_role; dataPermissionUser = __spreadArray(__spreadArray([], userPermission, true), rolePermission, true); permissionRouter = (_c = dataPermissionUser === null || dataPermissionUser === void 0 ? void 0 : dataPermissionUser.filter(function (value) { var _a; return !((_a = value === null || value === void 0 ? void 0 : value.permission) === null || _a === void 0 ? void 0 : _a.is_action); })) === null || _c === void 0 ? void 0 : _c.map(function (item) { var _a; return (_a = item === null || item === void 0 ? void 0 : item.permission) === null || _a === void 0 ? void 0 : _a.code; }); permissionAction = (_d = dataPermissionUser === null || dataPermissionUser === void 0 ? void 0 : dataPermissionUser.filter(function (value) { var _a; return (_a = value === null || value === void 0 ? void 0 : value.permission) === null || _a === void 0 ? void 0 : _a.is_action; })) === null || _d === void 0 ? void 0 : _d.map(function (item) { var _a; return (_a = item === null || item === void 0 ? void 0 : item.permission) === null || _a === void 0 ? void 0 : _a.code; }); objPermissionAction = Object.fromEntries(permissionAction.map(function (key) { return [key, true]; })); encryptedData = encryptDataSync(objPermissionAction); return [4 /*yield*/, saveCookiesClient(ACTION_PERMISSION, JSON.stringify(encryptedData), true)]; case 2: _e.sent(); uniqueValues = Array.from(new Set(permissionRouter)); setPerCode(uniqueValues); return [3 /*break*/, 5]; case 3: error_3 = _e.sent(); console.error('Error fetching school data:', error_3); return [3 /*break*/, 5]; case 4: setIsLoadingPermission(false); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; fetchDataPer()["catch"](console.error); } } }, [cookie, authen]); useEffect(function () { // Let load left menu data if (loadingMenu) { var fetchDataMenu = function () { return __awaiter(void 0, void 0, void 0, function () { var envPublic, menuUrl, logoMenuTop, data, json; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, PHXGetEnvPublicV3()]; case 1: envPublic = _a.sent(); menuUrl = envPublic === null || envPublic === void 0 ? void 0 : envPublic['SCHOOL_MENU']; logoMenuTop = envPublic === null || envPublic === void 0 ? void 0 : envPublic['SCHOOL_TOP_MENU_LOGO']; if (!menuUrl || !logoMenuTop) { console.error('menu or logo not found'); } return [4 /*yield*/, fetch(menuUrl)]; case 2: data = _a.sent(); return [4 /*yield*/, data.json()]; case 3: json = _a.sent(); setMenu(json); setLogo({ path: logoMenuTop, height: logoHeight }); setLoadingMenu(false); return [2 /*return*/]; } }); }); }; fetchDataMenu()["catch"](console.error); } }, [loadingMenu, menu]); var requireLoginValidation = function () { var currentURL = window.location.href; var url = currentURL.split('/'); var loginPush = "".concat(url[0], "//").concat(url[2], "/login-sso"); window.location.replace(loginPush); }; var isEqualUrl = function (parentHref, pathName) { if (!parentHref || !pathName) { return false; } var pathNameSplit = pathName.split('/'); var hrefSplit = parentHref.split('/'); if (!pathNameSplit || !hrefSplit) { return false; } var urlRouter; var currentMenu; if (multipleMenu) { urlRouter = pathNameSplit[1] + pathNameSplit[2]; currentMenu = hrefSplit[1] + hrefSplit[2]; } else { urlRouter = pathNameSplit[1]; currentMenu = hrefSplit[1]; } return urlRouter === currentMenu; }; var isBelongParent = function (parentUrl, pathName) { var parentSplit = parentUrl.split('/'); var pathNameSplit = pathName.split('/'); if (parentSplit.length > 2 && !parentSplit.includes('list')) { return parentSplit[1] === pathNameSplit[2] && parentSplit[2] === pathNameSplit[3]; } else { return parentSplit[1] === pathNameSplit[2]; } }; var checkAdmissions = function (path) { var pathNameSplit = path.split('/'); return pathNameSplit[1] === 'admissions'; }; var loadParentNavigation = function (path) { var mainNavigation = menu; var naviSize = mainNavigation.length; for (var i = 0; i < naviSize; i++) { var item = mainNavigation[i]; item.current = false; if (item.path === path || isEqualUrl(item.path, path)) { item.current = true; // Find sub modules var itemLength = item.child.length; var listChildren = []; for (var j = 0; j < itemLength; j++) { var childItem = item.child[j]; // Active child item childItem.current = isBelongParent(childItem.path, path); if (childItem.child) { var childItemLength = childItem.child.length; var count = 0; for (var k = 0; k < childItemLength; k++) { var subChild = childItem.child[k]; subChild.current = isBelongParent(subChild.path, path); if (isBelongParent(subChild.path, path) || isBelongParent(childItem.path, path)) { count++; } count > 0 ? (childItem.showChild = true) : (childItem.showChild = false); subChild.path === childItem.path ? (childItem.current = false) : null; } } listChildren.push(childItem); } setSubNavigation(listChildren); } } setNavigation(mainNavigation); }; var loadChildrenCampaign = function (path) { var mainNavigation = menu; var naviSize = mainNavigation.length; for (var i = 0; i < naviSize; i++) { var item = mainNavigation[i]; item.current = false; if (item.path === path || isEqualUrl(item.path, path)) { item.current = true; // Find sub modules // const itemLength = item.child.length; var campaign = item.child.filter(function (child) { return child.path === '/campaign/list'; }); var listCampaign = campaign[0]; var itemLength = listCampaign === null || listCampaign === void 0 ? void 0 : listCampaign.childrenByParentDetail.length; var listChildren = []; for (var j = 0; j < itemLength; j++) { var childItem = listCampaign === null || listCampaign === void 0 ? void 0 : listCampaign.childrenByParentDetail[j]; // Active child item childItem.current = isBelongParent(childItem.path, path); if (childItem.child) { var childItemLength = childItem.child.length; for (var k = 0; k < childItemLength; k++) { var subChild = childItem.child[k]; subChild.current = isBelongParent(subChild.path, path); if (isBelongParent(subChild.path, path) || isBelongParent(childItem.path, path)) childItem.showChild = true; subChild.path === childItem.path ? (childItem.current = false) : null; } } listChildren.push(childItem); } setSubNavigation(listChildren); } } setNavigation(mainNavigation); }; var checkChildrenCampaign = function (path) { var campaignMenu = menu === null || menu === void 0 ? void 0 : menu.find(function (item) { return item.path === '/admissions/campaign/list'; }); var campaignChild = campaignMenu === null || campaignMenu === void 0 ? void 0 : campaignMenu.child; var listChild = campaignChild === null || campaignChild === void 0 ? void 0 : campaignChild.find(function (item) { return item.path === '/campaign/list'; }); var isChild = listChild === null || listChild === void 0 ? void 0 : listChild.childrenByParentDetail.find(function (item) { return isBelongParent(item.path, path); }); return isChild !== undefined; }; useEffect(function () { var isAdmissions = checkAdmissions(pathNameWithBasePath); if (isAdmissions && checkChildrenCampaign(pathNameWithBasePath)) { if (pathNameWithBasePath.includes('/admissions/overview/list/') && pid) { PHXClientQueryV3({ query: getCampaignNameV3, variables: { id: pid }, isDelay: false }).then(function (res) { var data = res.data.admissions_campaigns_by_pk; setCampaignName(data.campaign_name); Cookies.set('campaign_name', JSON.stringify(data.campaign_name)); }); loadChildrenCampaign(pathNameWithBasePath); } else if (pathNameWithBasePath === '/admissions/campaign/list') { loadParentNavigation(pathNameWithBasePath); } else { loadChildrenCampaign(pathNameWithBasePath); } } else { loadParentNavigation(pathNameWithBasePath); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [menu, pid, pathNameWithBasePath]); useEffect(function () { var isAdmissions = checkAdmissions(pathNameWithBasePath); if (isAdmissions) { if (pathNameWithBasePath === '/admissions/campaign/list' || !checkChildrenCampaign(pathNameWithBasePath)) { setOpenSubMenu(true); } else { setOpenSubMenu(true); var campaign_name = Cookies.get('campaign_name'); setCampaignName(campaign_name ? JSON.parse(campaign_name) : campaignName); loadChildrenCampaign(pathNameWithBasePath); } } else { setOpenSubMenu(true); } }, [pathNameWithBasePath, menu]); var loadSubNavigation = function (path, isChild, childPath) { var subLength = subNavigation.length; var newSub = []; for (var i = 0; i < subLength; i++) { var item = subNavigation[i]; item.current = item.path === path && !isChild; if (item.child) { item.showChild = item.path === path; for (var j = 0; j < item.child.length; j++) { var child = item.child[j]; child.current = child.path === childPath; if (child.path === item.path) { item.current = false; child.current = childPath ? child.path === childPath : child.path === path; } } } newSub.push(item); } setSubNavigation(newSub); }; var triggerClicked = function (path) { loadParentNavigation(path); }; var handleClicked = function (path) { triggerClicked(path); }; var subNavigationTriggerClicked = function (item, parent) { parent ? loadSubNavigation(parent.path, true, item.path) : loadSubNavigation(item.path, false); var queryString = window.location.search; var urlParams = new URLSearchParams(queryString); var campaign = Number(urlParams.get('campaignId')); setGlobalLoading(true); // handle for admissions if (campaign) { router.push("".concat(item.path, "?campaignId=").concat(campaign)); } else { router.push(item.path); } }; var path = logo.path, height = logo.height; var handleModalSignOut = function () { return setModalSignOut(true); }; var handleRedirectRouter = function (path) { var currentURL = window.location.href; var url = currentURL.split('/'); var pushPath = "".concat(url[0], "//").concat(url[2], "/").concat(path); window.location.replace(pushPath); }; var handleSignOut = function () { setModalSignOut(false); Object.keys(Cookies.get()).forEach(function (cookieName) { Cookies.remove(cookieName); }); localStorage.removeItem(isLoggedCookie); console.log('Đăng xuất tài khoản'); handleRedirectRouter('login-sso'); }; var handleProfilePage = function () { handleRedirectRouter('profile'); }; var handleBackMenu = function () { router.push('/campaign/list'); loadParentNavigation('/admissions/campaign/list'); }; var checkChildBefore = function (item, currentItem) { var currentIndexActive = item.find(function (s) { return s.current; }); return currentIndexActive ? currentIndexActive.id > currentItem.id : false; }; var _4 = useState(false), openNavName = _4[0], setOpenNavName = _4[1]; var _5 = useState(false), showSearchBar = _5[0], setShowSearchBar = _5[1]; var _6 = useState(null), selected = _6[0], setSelected = _6[1]; var handleOpenModal = function (id) { setModal(id !== schoolId); setSelected(id); }; var handlePrimaryModal = function () { if (cookie) { try { var data = JSON.parse(cookie); if (data) { var newSchoolId = selected; if (newSchoolId && newSchoolId !== data.school_id) { data.school_id = newSchoolId; var updatedCookie = JSON.stringify(data); localStorage.setItem(isLoggedCookie, updatedCookie); window.location.replace('/'); } } } catch (error) { console.error(error); } } setModal(false); }; var avatar = (_b = dataSchool === null || dataSchool === void 0 ? void 0 : dataSchool.users[0]) === null || _b === void 0 ? void 0 : _b.avatar; var sourceAvatar = !avatar ? DEFAULT_AVATAR : avatar; // settings page var isSettings = function () { var pathNameSplit = pathNameWithBasePath.split('/'); return pathNameSplit[1] === 'setting'; }; var defaultSettingLayout = { df_header_bg_color: DF_HEADER_BG_COLOR, df_logo_login: DEFAULT_LOGO_LOGIN, df_logo_dashboard: DEFAULT_LOGO_DASHBOARD, df_color_loading_skeleton: DF_SKELETON_COLOR, df_search_icon_color: DF_SEARCH_ICON_COLOR, df_search_bg_color: DF_SEARCH_BG_COLOR, df_search_border_color: DF_SEARCH_BORDER_COLOR, df_search_border_hover_color: DF_SEARCH_BORDER_HOVER_COLOR, df_search_text_color: DF_SEARCH_TEXT_COLOR, df_menu_bg_color: DF_MENU_BG_COLOR, df_menu_text_color: DF_MENU_TEXT_COLOR, df_menu_bg_active: DF_MENU_BG_ACTIVE_COLOR, df_menu_icon_color: DF_MENU_ICON_COLOR, df_menu_icon_hover: DF_MENU_ICON_HOVER_COLOR, df_menu_text_and_icon_hover_color: DF_MENU_ICON_AND_TEXT_HOVER_COLOR, df_menu_icon_active: DF_MENU_ICON_ACTICE_COLOR, df_menu_hover_bg: DF_MENU_HOVER_BG_COLOR }; var settingLength = (_d = (_c = dataSchool === null || dataSchool === void 0 ? void 0 : dataSchool.setting_site) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0; var df_logo_dashboard = defaultSettingLayout === null || defaultSettingLayout === void 0 ? void 0 : defaultSettingLayout.df_logo_dashboard; var logo_dashboard = configLayout === null || configLayout === void 0 ? void 0 : configLayout.logo_dashboard; var checkLogoHeader = settingLength === 0 ? df_logo_dashboard : logo_dashboard || path; return (React.createElement(React.Fragment, null, React.createElement("div", { className: 'flex min-h-full flex-col' }, React.createElement(StyledCustomeLayout, { defaultSettingLayout: defaultSettingLayout, data: dataSchool, configLayout: configLayout, settingLocal: getDataCookies }), React.createElement("header", { className: 'fixed top-0 z-50 min-w-full border-gray-200 bg-white header-color-styled' }, React.createElement("div", { className: 'mx-auto flex h-14 items-center justify-between pr-4 bg-[#1a1a1a] header-styled' }, React.createElement("div", { className: 'flex items-center lg:w-32 gap-x-3' }, React.createElement("a", { href: '/', className: 'w-full flex items-center' }, path ? (React.createElement(React.Fragment, null, isLoading ? (React.createElement("div", { className: 'animate-pulse w-full h-8 ml-3 header-loading-logo' })) : (React.createElement("img", { alt: 'Logo', className: 'w-auto ml-3', src: checkLogoHeader, style: { height: height } })))) : (React.createElement(React.Fragment, null))), React.createElement("div", { className: 'lg:hidden flex items-center' }, React.createElement("button", { className: 'bg-grey-100 mr-3 inline-flex p-1 items-center justify-center rounded-md text-gray-600 hover:bg-white focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white', onClick: function () { return setSidebarOpen(true); }, type: 'button' }, React.createElement("span", { className: 'sr-only' }, "Open sidebar"), React.createElement(Bars3Icon, { "aria-hidden": 'true', className: 'h-6 w-6' })))), React.createElement("div", { "aria-hidden": true, className: 'hidden sm:block w-[30%] h-8 bg-indigo-700 rounded-lg border border-indigo-500 relative hover:border-gray-200 cursor-pointer search-box-styled', onClick: function () { return setShowSearchBar(true); } }, React.createElement("div", { className: 'relative text-indigo-400 flex items-center gap-x-3 text-xs top-1.5 left-2.5' }, React.createElement("div", { className: 'flex items-center' }, React.createElement("svg", { xmlns: 'http://www.w3.org/2000/svg', fill: 'none', viewBox: '0 0 24 24', strokeWidth: '1.5', stroke: 'currentColor', className: 'w-4 h-4' }, React.createElement("path", { strokeLinecap: 'round', strokeLinejoin: 'round', d: 'M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z' })), React.createElement("p", { className: 'ml-2' }, "T\u00ECm ki\u1EBFm")))), React.createElement(SearchDetail, { open: showSearchBar, onClose: function () { return setShowSearchBar(false); } }), React.createElement("div", { className: 'flex items-center gap-x-8' }, React.createElement("div", { className: '-m-1.5 p-1.5' }, React.createElement(Menu, { as: 'div', className: 'relative ml-3' }, React.createElement("div", null, React.createElement(Menu.Button, { className: 'flex max-w-xs items-center rounded-full bg-gray-800 text-sm focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-gray-800' }, React.createElement("span", { className: 'sr-only' }, "Open user menu"), isLoading ? (React.createElement("div", { className: 'animate-pulse flex' }, React.createElement("div", { className: 'rounded-full h-8 w-8 header-loading-avatar' }))) : (React.createElement("img", { alt: '', className: 'h-8 w-8 rounded-full', src: sourceAvatar })))), React.createElement(Transition, { as: Fragment, enter: 'transition ease-out duration-100', enterFrom: 'transform opacity-0 scale-95', enterTo: 'transform opacity-100 scale-100', leave: 'transition ease-in duration-75', leaveFrom: 'transform opacity-100 scale-100', leaveTo: 'transform opacity-0 scale-95' }, React.createElement(Menu.Items, { className: ' px-2 absolute right-0 z-10 mt-2 w-[340px] origin-top-right rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none' }, React.createElement(Menu.Item, null, React.createElement("div", { "aria-hidden": true, className: 'px-2 pt-4 pb-2 font-semibold text-gray-900 text-sm ' }, "Ch\u1ECDn tr\u01B0\u1EDDng")), !loadingSchool ? (React.createElement(React.Fragment, null, infoSchool .filter(function (val) { if (!enablePer(switchSchool, perCode)) { return val.id === schoolId; } else { return true; } }) .map(function (item) { return (React.createElement(Menu.Item, { key: item.id }, React.createElement("div", { "aria-hidden": true, className: "".concat(item.id === schoolId && infoSchool.length > 1 && !enablePer(switchSchool, perCode) === false ? 'rounded-lg bg-zinc-200 text-gray-900 font-semibold ' : 'font-normal ', " \n ").concat(item.id !== schoolId && (infoSchool.length === 1 || !enablePer(switchSchool, perCode)) === false ? 'hover:bg-gray-100 hover:rounded-lg cursor-pointer' : '', "\n py-1.5 relative px-2 mb-1 text-gray-900 text-sm flex justify-between items-center"), onClick: function () { return handleOpenModal(item.id); } }, React.createElement("p", { className: 'truncate max-w-[95%]' }, item.name), item.id === schoolId && infoSchool.length > 1 && !enablePer(switchSchool, perCode) === false && (React.createElement(CheckIcon, { "aria-hidden": 'true', className: 'h-4 w-4' }))))); }))) : (React.createElement(PHXSkeleton, { className: 'flex-1 py-2 px-2', type: 'single' })), React.createElement("div", { className: 'border-b pt-1.5' }), React.createElement(Menu.Item, null, React.createElement("div", { "aria-hidden": true, className: 'pt-4 px-2 pb-2 font-semibold text-gray-900 text-sm' }, "T\u00F9y ch\u1ECDn")), React.createElement(Menu.Item, null, React.createElement("div", { "aria-hidden": true, className: 'py-1.5 px-2 cursor-pointer text-gray-900 text-sm hover:bg-gray-100 hover:rounded-lg', onClick: handleProfilePage }, "Th\u00F4ng tin c\u00E1 nh\u00E2n")), React.createElement(Menu.Item, null, React.createElement("div", { "aria-hidden": true, className: 'py-1.5 px-2 mb-2.5 cursor-pointer text-[#8e1f0c] text-sm hover:bg-gray-100 hover:rounded-lg', onClick: handleModalSignOut }, "\u0110\u0103ng xu\u1EA5t")))))))))), React.createElement("div", null, React.createElement(PHXModal, { dangerActionText: '\u0110\u0103ng xu\u1EA5t', onDangerClick: handleSignOut, onHide: function () { return setModalSignOut(false); }, primaryActionText: '', show: modalSignOut, title: '\u0110\u0103ng xu\u1EA5t' }, React.createElement("div", { className: 'text-gray-700 text-sm' }, "Khi th\u1EF1c hi\u1EC7n thao t\u00E1c n\u00E0y b\u1EA1n s\u1EBD tho\u00E1t kh\u1ECFi trang qu\u1EA3n tr\u1ECB v\u00E0 tr\u1EDF v\u1EC1 trang \u0111\u0103ng nh\u1EADp"))), React.createElement(PHXModal, { onHide: function () { return setModal(false); }, primaryActionText: 'X\u00E1c nh\u1EADn', show: modal, onPrimaryClick: handlePrimaryModal, title: 'X\u00E1c nh\u1EADn thay \u0111\u1ED5i tr\u01B0\u1EDDng' }, React.createElement(PHXBanner, { description: 'Khi thay \u0111\u1ED5i tr\u01B0\u1EDDng t\u1EA5t c\u1EA3 d\u1EEF li\u1EC7u s\u1EBD hi\u1EC3n th\u1ECB theo tr\u01B0\u1EDDng v\u1EEBa \u0111\u01B0\u1EE3c ch\u1ECDn', onClose: function () { return setShowBanner(false); }, show: showBanner, title: 'L\u01B0u \u00FD', type: 'warning' })), React.createElement("div", { className: 'relative flex min-h-screen bg-[#f1f1f1]' }, React.createElement(Transition.Root, { as: Fragment, show: sidebarOpen }, React.createElement(Dialog, { as: 'div', className: 'relative z-40 lg:hidden', onClose: setSidebarOpen }, React.createElement(Transition.Child, { as: Fragment, enter: 'transition-opacity ease-linear duration-300', enterFrom: 'opacity-0', enterTo: 'opacity-100', leave: 'transition-opacity ease-linear duration-300', leaveFrom: 'opacity-100', leaveTo: 'opacity-0' }, React.createElement("div", { className: 'fixed inset-0 bg-gray-600 bg-opacity-75' })), React.createElement("div", { className: 'fixed inset-0 z-40 flex' }, React.createElement(Transition.Child, { as: Fragment, enter: 'transition ease-in-out duration-300 transform', enterFrom: '-translate-x-full', enterTo: 'translate-x-0', leave: 'transition ease-in-out duration-300 transform', leaveFrom: 'translate-x-0', leaveTo: '-translate-x-full' }, React.createElement(Dialog.Panel, { className: 'relative flex w-full max-w-xs flex-1 flex-col bg-[#ebebeb]' }, React.createElement(Transition.Child, { as: Fragment, enter: 'ease-in-out duration-300', enterFrom: 'opacity-0', enterTo: 'opacity-100', leave: 'ease-in-out duration-300', leaveFrom: 'opacity-100', leaveTo: 'opacity-0' }, React.createElement("div", { className: 'absolute right-0 top-0 -mr-12 pt-2' }, React.createElement("button", { className: 'ml-1 flex h-10 w-10 items-center justify-center rounded-full focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white', onClick: function () { return setSidebarOpen(false); }, type: 'button' }, React.createElement("span", { className: 'sr-only' }, "Close sidebar"), React.createElement(XMarkIcon, { "aria-hidden": 'true', className: 'h-6 w-6 text-white' })))), React.createElement("div", { className: 'mt-8 h-0 flex-1 overflow-y-auto pb-4 pt-5' }, React.createElement(NavMobile, { setSideBarOpen: function () { return setSidebarOpen(false); }, permission: perCode, menu: menu, path: pathNameWithBasePath, router: router })))), React.createElement("div", { "aria-hidden": 'true', className: 'w-14 flex-shrink-0' })))), React.createElement("div", { className: 'hidden lg:flex lg:flex-shrink-0' }, React.createElement("div", { className: 'flex' }, React.createElement("div", { className: 'mt-14 flex lg:inset-y-0' }, React.createElement("div", { "aria-hidden": true, className: "".concat(openNavName ? 'w-64' : 'w-14', " transition-all duration-300 z-10 flex h-full flex-col justify-between border-r bg-[#f1f1f1] lg:fixed menu-styled"), onMouseOver: function () { return setOpenNavName(true); }, onMouseOut: function () { return setOpenNavName(false); } }, React.createElement("div", { className: classNames('#ebebeb flex flex-1 flex-col', openNavName ? 'overflow-y-auto' : 'overflow-y-hidden') }, React.createElement("div", { className: 'flex-1 relative' }, React.createElement("div", { "aria-label": 'Sidebar', className: 'hidden md:block md:flex-shrink-0 md:overflow-y-auto overflow-x-hidden' }, !hiddenLeftMenu && (React.createElement("div", { className: "space-y- flex ".concat(openNavName ? 'w-64' : 'w-12', " flex-col overflow-hidden p-3") }, navigation.map(function (item, index) { return (React.createElement("div", { key: index, className: 'w-full' }, (roleCode === null || roleCode === void 0 ? void 0 : roleCode.length) > 0 ? (React.createElement(React.Fragment, null, enablePer(item.code, perCode) && (React.createElement("a", { className: "".concat(classNames(item.current && !openNavName ? 'font-semibold menu-bg-color-icon-active-styled' // màu background của icon đang active của menu : 'font-medium menu-icon-color-styled', // màu icon của menu !openNavName ? 'mb-1.5 inline-flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg' : 'mb-1.5 inline-flex h-8 flex-shrink-0 items-center rounded-lg min-w-full', openNavName && item.current ? 'rounded-lg menu-bg-color-icon-active-styled' : 'hover:rounded-lg hover:bg-opacity-50 menu-hover-bg')), href: item.path, onClick: function () { return handleClicked(item.path); }, onMouseOver: function () { return setOpenNavName(true); } }, React.createElement("span", { className: 'sr-only' }, item.name), React.createElement("span", { className: classNames(!openNavName ? 'group cursor-pointer hover:fixed hover:z-10 focus-visible:outline-none mt-0.5' : "flex gap-x-2 ".concat(item.menuIconSL ? 'pl-[3px] pt-[2px]' : 'pl-[0.45rem]')) }, item.menuIconSL ? (React.createElement("img", { src: item.menuIconSL, className: 'w-[1.6rem]', alt: 'icon' })) : (React.createElement(FontAwesomeIcon, { className: 'h-[1.125rem] w-[1.125rem] mt-1', icon: item.image })), openNavName && (React.createElement("div", { className: 'h-6' }, React.createElement("p", { className: "transition-all h-full duration-300 text-[0.86rem] mt-0.5 ".concat(openNavName ? 'opacity-100' : 'opacity-0', " ").concat(item.current ? 'font-semibold' : '') }, item.name)))))))) : (React.createElement("a", { className: classNames(item.current && !openNavName ? 'text-indigo-900 font-semibold menu-bg-color-icon-active-styled' // màu background của icon đang active trong menu : 'text-gray-700 font-medium menu-icon-color-styled', // màu icon !openNavName ? 'mb-1.5 inline-flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg' : 'mb-1.5 inline-flex h-8 flex-shrink-0 items-center rounded-lg min-w-full', openNavName && item.current ? 'rounded-lg text-indigo-900 menu-bg-color-icon-active-styled' // màu background của icon đang active : 'hover:rounded-lg hover:bg-opacity-50 menu-hover-bg'), href: item.path, onClick: function () { return handleClicked(item.path); }, onMouseOver: function () { return setOpenNavName(true); } }, React.createElement("span", { className: classNames(!openNavName ? 'group cursor-pointer hover:fixed hover:z-10 focus-visible:outline-none mt-0.5' : "flex gap-x-2 ".concat(item.menuIconSL ? 'pl-[3px] pt-[2px]' : 'pl-[0.45rem]')) }, item.menuIconSL ? (React.createElement("img", { src: item.menuIconSL, className: 'w-[1.6rem]', alt: 'icon' })) : (React.createElement(FontAwesomeIcon, { className: 'h-[1.125rem] w-[1.125rem] mt-1', icon: item.image })), openNavName && (React.createElement("div", { className: 'h-6' }, React.createElement("p", { className: "transition-all h-full duration-300 text-[0.86rem] mt-0.5 ".concat(openNavName ? 'opacity-100' : 'opacity-0', " ").concat(item.current ? 'font-semibold' : '', " ") }, item.name)))))))); })))))), React.createElement("div", { className: classNames('border-t', navigation.length > 0 && ((_e = navigation[0]) === null || _e === void 0 ? void 0 : _e.isSchoolink) ? 'border-[#1c222b]' : 'border-indigo-100') }, React.createElement("div", { className: "mb-14 space-y- flex ".concat(openNavName ? 'w-64' : 'w-12', " overflow-hidden p-3") }, React.createElement("a", { className: class