{"version":3,"sources":["core/components/MyControl/InputPassword.js","core/components/MyControl/InputSelect.js","core/components/MyControl/InputCheckbox.js","core/components/MyControl/InputSwitch.js","core/components/MyControl/InputRadio.js","core/components/MyControl/InputRange.js","core/components/MyControl/InputColor.js","core/components/MyControl/InputDate.js","core/components/MyControl/InputTime.js","core/components/MyControl/SelectCheckbox.js","core/components/MyControl/SelectRadio.js","core/components/MyControl/SelectSwitch.js","core/components/MyControl/MyControlTypes.js","modules/app_sigo/helpers/ui.ts","modules/app_sigo/images/user.png","core/helpers/api.ts","modules/app_sigo/assets/imgs/no-image.jpg","core/helpers/json.ts","core/helpers/regex.ts","core/helpers/link.ts","core/helpers/query.tsx","core/helpers/i18n.ts","core/helpers/c.ts","core/helpers/config.ts","core/helpers/serviceWorker.ts","core/helpers/format.ts","core/helpers/index.ts","modules/app_sigo/constants/paths.ts","services/apiServices.js","core/components/MyControl/Ext_Control.tsx","helpers/Flows/TableCell.js","core/components/MyForm/MyForm.tsx","modules/app_sigo/components/MyPage/LoadingHelper/CategoryLoading.tsx","modules/app_sigo/components/MyPage/LoadingHelper/HomeLoading.tsx","modules/app_sigo/components/MyPage/LoadingHelper/HeaderCategoryFullv2Loading.tsx","modules/app_sigo/components/MyPage/LoadingHelper/index.ts","libs/ReactAwesomeLightbox/index.js","core/components/MyModal/MyLightbox.tsx","helpers/Flows/TableExtraData.js","modules/app_sigo/assets/imgs/gplay.jpg","modules/app_sigo/assets/imgs/ios.jpg","helpers/Flows/Api.js","core/helpers/utils.ts","core/components/Others/Tooltip/index.tsx","core/modules/setting2fa/helpers.ts","core/components/MyForm/MyFormControl.tsx","core/components/MyIcon/MyIcon.tsx","modules/app_sigo/assets/imgs/bg-hotro.png","core/components/MyControl/InputText.js","core/components/MyControl/InputTextarea.js","modules/app_sigo/assets/imgs/qr-download-app.png","modules/app_sigo/components/MyLoading/index.tsx","core/helpers/options.tsx","modules/app_sigo/assets/imgs/download-app-background.png","libs/ReactGooglePlacesAutocomplete/hooks/use-places-service.ts","libs/ReactGooglePlacesAutocomplete/hooks/use-fetch-suggestions.ts","libs/ReactGooglePlacesAutocomplete/helpers/autocompletion-request-builder.ts","helpers/K.js","modules/app_sigo/components/MyPage/LoadingHelper/BlogListLoading.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/MessageAboveActions.tsx","helpers/Flows/Form.js","core/components/MyForm/MyFormControlHelpers.ts","../../src/configs/ConfigPagination.ts","../../src/components/MyComponent/CSuppense.tsx","../../src/components/MyComponent/CErrorBoundary.tsx","../../src/helpers/Regex.ts","../../src/helpers/Is.ts","../../src/helpers/Log.ts","../../src/helpers/Json.ts","../../src/components/MyComponent/Types.tsx","../../src/components/MyComponent/Helpers.tsx","../../src/components/MyPageLayout/Helpers.ts","../../src/components/MyPageLayout/index.tsx","../../src/components/MyPage/Helpers.ts","../../src/helpers/Constants.ts","../../src/configs/ConfigPage.ts","../../src/helpers/Format.ts","../../src/components/MyIcon/Helpers.tsx","../../src/components/MyIcon/index.tsx","../../src/helpers/Component.tsx","../../src/helpers/Utils.ts","../../src/helpers/LocalStorage.ts","../../src/helpers/Text.ts","../../src/configs/ConfigSearch.ts","../../src/model/OneTable.ts","../../src/helpers/Options.ts","../../src/model/OneScreenConfig.ts","../../src/configs/ConfigFilter.ts","../../src/helpers/Filter.ts","../../src/model/OneFilter.ts","../../src/model/OneFilters.ts","../../src/components/MyButton/Helpers.ts","../../src/model/OneButton.tsx","../../src/components/MyTableFilterControl/Helpers.ts","../../src/model/OneHelpers.tsx","../../src/model/OneTableFilterControl.tsx","../../src/configs/ConfigOnClick.ts","../../src/helpers/Color.ts","../../src/model/OneTableCell.tsx","../../src/model/OnePage.ts","../../src/helpers/Link.ts","../../src/helpers/UI.ts","../../src/helpers/More.ts","../../src/helpers/Modules.ts","../../src/helpers/FakeData.ts","../../src/helpers/Valid.ts","../../src/helpers/CF.ts","../../src/helpers/EventEmitter.js","../../src/components/MyPage/index.tsx","../../src/components/MyUI/Helpers.ts","../../src/components/MyUI/index.tsx","../../src/components/MyCard/Helpers.ts","../../src/components/MyCard/index.tsx","../../src/components/MyLayout/Helpers.ts","../../src/components/MyLayout/index.tsx","../../src/components/MyTableCell/Helpers.ts","../../src/components/MyTableCell/index.tsx","../../src/components/MyTableFilterControl/index.tsx","../../src/components/MyFormControl/Helpers.ts","../../src/components/MyFormControl/index.tsx","../../src/components/MyButton/index.tsx","../../src/components/MyLoading/Helpers.tsx","../../src/components/MyLoading/index.tsx","../../src/components/MyBase/Helpers.ts","../../src/components/MyBase/index.tsx","../../src/components/MyLib/Helpers.ts","../../src/components/MyLib/index.tsx","../../src/components/MyTableHeader/Helpers.ts","../../src/components/MyTableHeader/index.tsx","../../src/components/MyChart/Helpers.ts","../../src/components/MyChart/index.tsx","../../src/components/MySVG/Helpers.ts","../../src/components/MySVG/index.tsx","../../src/components/MyControl/Helpers.ts","../../src/components/MyControl/index.tsx","../../src/components/MyControl/MyControl_Ext.tsx","../../src/components/MyControl/MyControl_Ext_Select.tsx","../../src/packages/v1/V1CellHelpers.ts","../../src/index.tsx","modules/app_sigo/constants/index.ts","core/modules/dev_simulator/MyUI/index.ts","core/modules/dev_simulator/index.ts","libs/NumeralJs/numeral.js","modules/app_sigo/components/MyLib/Types/search_address_mobile.js","core/helpers/auth.ts","assets/images/avatar.jpg","modules/app_sigo/constants/fields.ts","App/App.constants.ts","App/App.actions.ts","core/components/MyComponent/index.tsx","helpers/Log.ts","core/components/MyModal/MyModal.tsx","modules/app_sigo/hooks/useForceUpdate.ts","core/helpers/ui.tsx","core/components/MyUI/MyUIHelpers.ts","helpers/fnList.js","modules/app_sigo/images/logo-sigo.png","core/helpers/localStorage.ts","core/helpers/log.ts","core/hook/useCountdown.js","modules/check_idle/MyUI/Types/checkidle_countdown.js","modules/check_idle/MyUI/index.js","modules/check_idle/index.js","guards/AuthenticatedGuard.tsx","helpers/paths.ts","components/Header/Header.tsx","components/SideNav/SideNav.styles.ts","components/SideNav/SideNavHeader.tsx","assets/images/logo.png","components/SideNav/SideNav.tsx","layouts/MainLayout.tsx","pages/PageGeneric/PageGeneric.tsx","components/Loading/Loading.tsx","routes/routes.tsx","App/App.tsx","core/modules/firstsetting.ts","core/components/MyPage/MyPageHelpers.ts","core/modules/v1page/MyPage/index.ts","core/modules/v1page/MyUI/index.ts","core/modules/v1page/MyTableCell/index.ts","core/components/MyTableFilterControl/MyTableFilterControlHelpers.ts","core/modules/v1page/MyTableFilterControl/index.ts","core/modules/v1page/MyForm/index.ts","core/components/MyButton/MyButtonHelpers.ts","core/modules/v1page/MyButton/index.ts","core/modules/v1page/MyLoading/index.tsx","core/modules/v1page/MyControl/index.ts","core/modules/v1page/index.ts","core/modules/dev/MyPage/index.ts","core/modules/dev/index.ts","core/components/MyIcon/MyIconHelpers.tsx","core/modules/iconHiOutline/MyIcon/index.ts","core/modules/iconHiOutline/index.ts","core/modules/setting/MyPage/index.ts","core/modules/setting/index.ts","core/modules/setting2fa/MyUI/index.ts","core/modules/setting2fa/index.ts","core/modules/setting2fa/lang/i18n.ts","core/modules/redirectToken/MyPage/index.ts","core/modules/redirectToken/index.ts","core/modules/core/MyUI/Types/html.tsx","core/modules/core/MyUI/Types/_helpers.js","core/modules/core/MyUI/Types/data_obj.js","core/modules/core/MyUI/Types/data_array.js","core/modules/core/MyUI/Types/data_tag.js","core/modules/core/MyUI/index.ts","core/modules/core/MyUI/Types/data_span_autoresize.js","core/modules/core/index.ts","modules/reactga/index.js","modules/admintable/MyUI/index.js","modules/admintable/MyTableCell/index.js","modules/admintable/index.js","helpers/E.js","modules/app_sigo/components/MyUI/Types/Login/Login.tsx","pages/Login/Login.actions.ts","modules/app_sigo/assets/imgs/ic-google.png","modules/app_sigo/assets/imgs/ic-facebook.png","modules/app_sigo/components/MyUI/Types/Home/HomeRentalCar.tsx","modules/app_sigo/components/MyUI/Types/Helmet.tsx","modules/app_sigo/components/MyUI/Types/Category/ButtonRefresh.tsx","modules/app_sigo/components/MyUI/Types/HeaderCategoryFullv2.tsx","modules/app_sigo/components/MyUI/Types/HeaderCategory.tsx","modules/app_sigo/components/MyUI/Types/ButtonForm.tsx","modules/app_sigo/components/MyUI/Types/WLoadingSkeleton.tsx","modules/app_sigo/components/MyUI/Types/SlideCard.tsx","modules/app_sigo/components/MyUI/Types/Avatar.tsx","modules/app_sigo/components/MyUI/Types/Banner.tsx","modules/app_sigo/components/MyUI/Types/Header.tsx","modules/app_sigo/components/MyUI/Types/Home/Searchbar.tsx","modules/app_sigo/components/MyUI/Types/HeaderMobilev2.tsx","modules/app_sigo/components/MyUI/Types/Fancybox.tsx","modules/app_sigo/components/MyUI/Types/WContentOverlay.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/index.tsx","modules/app_sigo/components/MyUI/Types/Detail/CarName.tsx","modules/app_sigo/components/MyUI/Types/Detail/CarImageSlide.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/AddressDirection.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/RentalDocuments.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/GeneralInfo.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/UITypes.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/VehicleInfo.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/RetalPriceDetails.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/SurchargeDetails.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/PaymentInfo.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/OwnerInfo.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/SupportInfo.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/BlogSuggestion.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/InsuranceInfo.tsx","modules/app_sigo/components/MyUI/Types/TripDetail/Action.tsx","modules/app_sigo/components/MyUI/Types/SGEstimatedIncome.tsx","modules/app_sigo/components/MyUI/index.ts","modules/app_sigo/components/MyPage/index.ts","modules/app_sigo/components/MyControl/index.ts","modules/app_sigo/components/MyFormControl/index.ts","modules/app_sigo/components/MyIcon/Types/ic_self_driving.tsx","modules/app_sigo/components/MyIcon/Types/ic_long_term_rent.tsx","modules/app_sigo/components/MyIcon/Types/ic_has_driver.tsx","modules/app_sigo/components/MyIcon/index.ts","modules/app_sigo/components/MyButton/index.js","modules/app_sigo/components/MyLib/index.js","modules/app_sigo/components/MyCard/Types/HomeCategory.tsx","modules/app_sigo/components/MyCard/Types/HomeBlog.tsx","modules/app_sigo/components/MyCard/Types/HomeUsage.tsx","modules/app_sigo/components/MyCard/Types/HomePromotion.tsx","modules/app_sigo/components/MyCard/Types/HomeLanding.tsx","modules/app_sigo/components/MyAnimationIcon/Types/index.ts","modules/app_sigo/components/MyAnimationIcon/AnimationIcon.tsx","modules/app_sigo/components/MyCard/Types/HomeDiscoverService.tsx","modules/app_sigo/components/MyCard/Types/HomeHelps.tsx","modules/app_sigo/components/MyCard/Types/HomeAdvantage.tsx","modules/app_sigo/components/MyCard/Types/HomeCar.tsx","modules/app_sigo/components/MyCard/Types/NowCard.tsx","modules/app_sigo/components/MyCard/Types/RowImageTextHoverBorderCard.tsx","modules/app_sigo/components/MyCard/Types/ColumnContentCard.tsx","modules/app_sigo/components/MyCard/Types/ImageRowContentCard.tsx","modules/app_sigo/components/MyCard/index.ts","modules/app_sigo/components/MyForm/index.ts","modules/app_sigo/components/MyTableFilterControl/index.ts","modules/app_sigo/components/MyTableCell/index.js","modules/app_sigo/index.ts","modules/app_sigo/components/MyUI/Types/SlideCardV2.tsx","modules/app_sigo_responsive/components/MyUI/Types/Header.tsx","modules/app_sigo_responsive/components/MyUI/Types/Home/EnterAddress.tsx","modules/app_sigo_responsive/components/MyUI/Types/Home/EnterDate.tsx","modules/app_sigo_responsive/components/MyUI/Types/Home/EnterTime.tsx","modules/app_sigo_responsive/components/MyUI/Types/Home/Searchbar.tsx","modules/app_sigo_responsive/components/MyUI/Types/Detail/CarImageSlide.tsx","modules/app_sigo_responsive/components/MyUI/Types/TripDetail/GeneralInfo.tsx","modules/app_sigo_responsive/components/MyUI/Types/SGEstimatedIncome.tsx","modules/app_sigo_responsive/components/MyUI/index.ts","modules/app_sigo_responsive/components/MyPage/index.ts","modules/app_sigo_responsive/components/MyCard/Types/HomeCategory.tsx","modules/app_sigo_responsive/components/MyCard/Types/HomeDiscoverService.tsx","modules/app_sigo_responsive/components/MyCard/Types/HomeCar.tsx","modules/app_sigo_responsive/components/MyCard/Types/RowImageTextHoverBorderCard.tsx","modules/app_sigo_responsive/components/MyCard/index.ts","modules/app_sigo_responsive/index.ts","modules/app_sigo_generic/index.ts","modules/app_sigo_generic/Config.ts","App/AppConfig.ts","serviceWorker.ts","index.tsx","App/App.reducer.ts","pages/Login/Login.reducer.ts","reducer/reducer.ts","store/store.ts","helpers/Flows/Auth.js","core/helpers/constant.ts","pages/Login/Login.constants.ts","modules/app_sigo/components/MyUI/Types/WEaseLayout.tsx","core/components/MyControl/Ext_Select.tsx","core/components/MyControl/Ext_Input.tsx","core/components/MyControl/Badge.js","core/components/MyControl/Alert.tsx","core/components/MyLoading/MyLoading.tsx","core/components/MyModal/MyDialog.tsx","core/components/Others/Popover/index.tsx","core/components/Others/LockScreen/index.tsx"],"names":["InputPassword","state","showPassword","this","InputGroup","Input","getPropsInput","type","InputGroupText","onClick","setState","data","Ext_Input","InputSelect","onUpdateValue","getOnUpdateValue","sourceData","getSourceData","props","onBlur","onChange","ev","currentTarget","value","HOptions","getListSelectTagBySourceData","Ext_Select","InputCheckbox","propsInput","e","className","React","Component","InputRadio","InputRange","classnames","InputColor","InputDate","InputTime","SelectCheckbox","length","map","v","i","FormGroup","getInLine","style","minWidth","checked","isChecked","onCheckOption","Label","Text","getMulti","name","getFieldName","InputSwitch","ListNoLazy","text","InputText","password","textarea","InputTextarea","select","checkbox","switch","radio","range","color","date","time","select_checkbox","select_switch","SelectSwitch","select_radio","SelectRadio","MyControlHelpers","addTypesFromListWithoutLazy","showAlert","component","opts","MyModal","showMyDialog","title","size","showFooter","showHeader","modalClassName","ApiMethod","ApiContentType","ApiConfig","baseUrl","timeout","fnLogout","appName","firstloadID","initApi","configApi","mergeObjIfExist","Math","random","toString","slice","Date","getTime","apiShareError","config","error","resolve","reject","logApi","response","statusCode","get","_msgError","_url","url","path","forceLogout","authLogout","showToastError","i18next","t","hideMsgError","undefined","toJSON","AIPUrl","Data","Error","HC","getConfig","HConstant","ConfigAppExt","urlForLogException","_userId","getAuthUserId","_userName","getAuthUserName","_data","LogBy","Url","window","location","href","console","warn","startsWith","_match","RegExp","exec","_encrypt","encodeURIComponent","xorCrypt","_newData","replace","axios","method","then","catch","logException","status","userAgent","navigator","apiBuildAxiosRequestHeader","_config","Accept","customContentType","customHeader","_authorization","authGetAuthorizationHeader","Authorization","apiBuildAxiosRequestUrl","indexOf","buildRequestDataForPost","requestData","UI_StartAt","UI_FirstID","AppName","DocumentWidth","screen","width","UI_TimezoneOffset","getTimezoneOffset","buildRequestData","toLowerCase","FormData","apiBuildAxiosRequestConfig","apiDefaultAxiosRequestConfig","headers","apiGeneric","uiConfig","noLockScreen","GlobalLockScreen","show","Promise","StatusCode","HUtils","objHasKey","showApiMsg","Msg","code","msginui","MsgShowInUI","msg","apiShareSuccess","hide","apiGet","apiPost","apiUpload","_formData","_files","append","apiPostForm","Object","keys","key","join","apiWithConfigApi","query","getObj","HJson","getString","json2Obj","obj2Json","HRegex","RGSquareBracket","initLink","info","usingHash","history","createHashHistory","createBrowserHistory","HLink","openUrl","push","parseResponseButtonApi","res","target","autoOpenLink","FullPath","showDialog","FullPathTitle","wordWrap","FullPathInfo","download","FullPathDownload","initI18n","init","C","HConfig","initC","getDefaultFormatDate","dateFormat","Config","appInfo","home","configApp","configAppExt","configI18n","configLink","configAuth","configModules","configRoutes","routesPublic","routesPrivate","configSidebar","list","extAfterLogin","extSettingParts","headerComponent","initConfigAppExt","HCF","setCFMultiObj","initConfigApp","k","initLocalStorage","initAuth","afterLogin","fn","isFunction","HModules","initModules","modules","runFuntion","fnList","ConfigApp","FnList","onAfterInit","UIAppConfig","hasOwnProperty","getPublicRoutes","getPrivateRoutes","addPublicRoutes","addArray2Array","addPrivateRoutes","addSidebarItems","registerAfterLogin","registerExtSettingParts","registerHeaderTitle","changeTitle","headerTitle","document","goToHome","replaceToHome","getUserName","getUserID","getAppName","addBodyClass","body","classList","add","removeBodyClass","remove","getConfigFooter","_configFooter","footer","ServiceWorker","isSupported","registerSW","link","serviceWorker","register","getSW","getRegistration","enableNotification","linkSW","Notification","requestPermission","result","disableNotification","sw","unregister","showNotification","tag","options","createdAt","now","message","HFormat","Types","format","configFormat","HIs","isDateValue","moment","Numberal","HColor","getTextWB","HUI","SGPaths","searchxe","chitietxe","chuyendicuatoi","lichsuchuyendi","cauhoithuonggap","huongdandangkyxe","huongdandatxe","xecuatoi","themxe","chinhsuaxe","taikhoancuatoi","xacthuctaikhoan","thongtintaikhoan","tichluy","slug","thongbao","thanhtoan","dev_test","donhanghientai","lichhoatdong","danhmucxe","taikhoan","notfound","sigotravelling","SGNewPaths","ApiGeneric","request","successCallBack","errorCallBack","Control_Ext","getDefaultValue","defaultValue","getControlOpts","controlOpts","getFnList","fieldName","getAttributes4Selenium","relativeControls","getRelativeControls","_attr","includes","actionType","onUpdateValueWithFieldName","onUpdateMulti","obj","getFormat","renderMessage","ui","showError","textError","styleError","html","flex","showInfo","textInfo","Info","styled","div","KMore","styleByValue","configIcon","configCheckbox","icon","linkTitle","fLinkTitle","newWindow","showPhoto","maxHeight","maxWidth","noScale","styleImg","fLink","fColor","min","fMin","max","fMax","styleInput","classNameWithColField","modal","placeHolder","datetimeFormat","dateTextFormat","fBorderLeftColor","configPage","fSelectValue","querySelectValue","clickToSelect","button","cbNormal","cbPositive","cbNegative","configEditIcon","configFileIcon","configTextDisplay","typeAdmin","titleConfirm","confirmMsg","fConfirmMsg","myui","styleByValueField","showDisplayWithMyUI","showClear","configClear","hideWhenEmpty","hideWhenNull","showDeleteRow","showPreviewHTML","configDisplay","virtualized","virtualizedMin","showSelectedOnFirstRow","apiCheckShowModal","overideDefaultValues","rows","needReExpand","needReloadOptionsAndList","needReloadRow","needReload","needReloadList","needReloadTable","needReloadPage","needSendMsg","configProgress","configPopover","configTitleTooltip","KConfigInRow","_UI_Loading","_UI_Error","_UI_NeedUpdateUI","KTypeCellShared","FlowGetExtraDataFromExtra","extra","extraData","FlowGetFieldNameFromExtra","FlowGetExtraOfFieldName","_extraCol","FlowTableExtraData","FlowGetMore","more","_fieldName","FlowActionClickApi","FlowActionClickForm","FlowActionClickLink","row","_more","_link","FlowGetLink","open","FlowGetLinkTarget","FlowParseResponseAndNeedReload","oneTableCell","_configApi","getConfigApi","parseResponse","parseNeedReload","FlowCheckShowModal","_configModal","_canShowModal","canShowModal","fCanShowModal","FlowGetRequestFromConfigObj","_request","getTextWithData","FlowGetRequestQueryFromConfigObj","_query","df","assign","_value","FlowCheckApiShowModal","cb","_configCheckShow","activeElement","blur","canShow","FlowApi","configFullPath","IsShow","_resultModel","newRow","FlowCheckConfirmMsg","_confirmMsg","_confirmTitle","fnListUI","fnshowConfirm","onClickOK","FlowGetConfigMyUI","_configMyUI","FlowRenderIconFromMore","_icon","isString","isObject","FlowGetTextDisplay","cell","valueCell","isButton","_configTextDisplay","FlowGetConfigTextDisplayOfButton","getTextDisplay","FlowGetCustomDisplay","defaultConfigDisplay","configMyUI","dataIsRow","moreProps","_valueDisplay","_configDisplay","showShortText","_countShort","countShort","isHide","String","_configButton","hasIconAndText","FlowRenderStatus","canEdit","_ui","using","FlowRenderTitleOfLink","_maxHeight","_maxWidth","_styleImg","height","display","alt","src","_uiIcon","_title","FlowGetStyleInput","_styleInput","defaultStyle","FlowGetMoreAttrsInput","_attrs","defaultAttrs","placeholder","Type","FlowGetHeaderTitle","notUseFieldName","customTitle","_extraOfColumn","Header","_objHeader","header","FlowGetTitleOfColumn","FlowGetTitleTooltipOfColumn","_configTitleTooltip","FlowGetConfigOfMore","fTitle","FlowGetTableConfig","_fnList","FlowGetFnList","fnGetTableConfig","fnListMyPage","fnGetConfigPageTable","FlowGetConfigTrueByAllLevel","_configInTableConfig","getCF","FlowGetBackgroundStyleCell","_style","bgF","background","FlowGetStyleCell","overideStyle","_styleDefaultCell","KConfigApp","styleDefaultCell","_styleInRow","StyleRow","UI_StyleRow","isJsonString","Style","colorF","_valueCell","configByValue","_moreStyle","borderLeft","FlowGetClassCell","_className","defaultClass","ClassName","showClassFieldOnCell","FlowGetCanEdit","_canEdit","IsLocked","CanEdit","fCanEdit","canEditF","_arrcanEditF","split","f","lockF","fLock","_fLock","_arrLock","fKey","FlowGetConfigModal","KConfigModal","FlowClickToSelectInput","FlowGetDateFormat","defaultFormat","_format","FlowGetDateTimeFormat","FlowGetColor","defaultColor","_color","FlowGetIsUpdatingCell","FlowAfterUpdateCell","fnShowToast","Id","_arrFieldNeedReload","_fieldNeedReload","KConfigPageTable","needReloadAfterUpdateFields","Array","isArray","fnReloadList","FlowUpdateCell","newValue","alwaysUpdate","fnForceUpdateCell","fnSuccessCallBack","_canUpdate","fnRequestUpdate","fnUpdateUILoading","isLoading","forceUpdate","fnUpdateUIError","apiController","fnGetApiPath","sharedRequestData","fnGetSharedRequestData","multiObjUpdate","cbSuccess","fnForceUpdateTable","cbError","FlowGetQueryFromConfigQuery","configQuery","_newQuery","_keys","FlowRenderLoading","uiLoading","FlowRenderOverlay","FlowCheckUpdateValueAfterWillReceiveProps","nextProps","valueDefault","newCell","_UI_NeedUpdate","needUpdate","MyForm","currentValues","toucheds","errorsValid","effectControls","controlsByFieldName","controlsOptsByFieldName","fnListFromWrap","fnListFromExtControl","keyForceUpdate","closeMyModal","inMyModal","_buildRelativeControls","configForm","controls","_control","groups","j","_controlInGrp","_moreCtlInGrp","_fieldNameCtlInGrp","relativeTo","concat","conditionShow","fieldRelative","effectedBy","_fieldParent","_onTouch","updateValueEffect","fieldNameJustHasUpdate","_onSubmit","event","preventDefault","onSubmitForm","defaultValues","myForm","rs","closeMyModalAfterSubmit","err","getCurrentValues","getSourceList","getConfigControlByFieldName","getConfigInMoreOfControl","configControl","_configControl","getRulesOfControl","checkValidAll","_result","_resultOfControl","checkValidOfField","_rules","HValid","validAllRulesOfValue","_renderFooter","renderFooter","_isUsingDefaultSubmit","_isShowBtnReset","configFormControl","formErrorsValid","initWrapControl","fnFromWrap","initExtControl","fnFromExtControl","getDefaultValues","control","onJustUpdateValueMultiCurrentValuesForm","onUpdateControlWithNewValue","updateValue","onUpdateValueMulti","registerControl","onTouch","LoadMore","WrapSkeletonLoading","WrapPageContent","RightMenu","WrapTopHeader","WrapBottomHeader","MyLoadingContent","onlyRenderBlog","useState","screenWidth","setScreenWidth","useEffect","ResizeObserver","entries","observer","entry","contentRect","left","top","observe","getItemList4Render","defaultConfig","responsive","item","every","configScreen","Number","nextConfigScreen","items","from","_","index","itemList","WrapHomeBlog","renderBlog","WrapLandingPage","renderLandingPage","nav","loop","WrapHomeService","renderService","WrapHomeCategory","renderCategory","WrapHomePromotion","renderPromotion","itemPerRow","getItemList4CarSuggest","WrapHomeCar","renderCarSuggest","margin","WrapHomeHelps","renderHelps","WrapHomeAdvantage","renderAdvantage","WrapDownloadApp","WrapContent","WrapLoadingSkeleton","WrapMobileHeader","getLoadingPage","pageKey","category","firstLoading","tabList","arr","loadingMore","moreConfig","logo","HAuth","getUserLogoApp","dfLogo","_arr","scroll_end","classNames","rel","id","getLoadingCategory","dfConfigDownloadApp","isCustom","custom","qrImg","qr_code_img_url","imgQRCode","linkGgPlayStore","android_url","linkAppStore","app_store_url","description","dangerouslySetInnerHTML","__html","imgAppleStore","imgGGPlayStore","marginTop","imgBgDownloadApp","renderApp","getLoadingHome","onlyHeader","isShowBottomHeader","getLoadingHeader","sgTravelling","getLoadingBlogList","DEFAULT_ZOOM_STEP","getXY","x","y","touches","pageX","pageY","Cond","condition","Fragment","children","Lightbox","initX","initY","lastX","lastY","_cont","createRef","zoom","rotate","loading","moving","current","startIndex","multi","images","createTransform","stopSideEffect","stopPropagation","getCurrentImage","s","p","image","getCurrentTitle","resetZoom","shockZoom","zoomStep","allowZoom","doubleClickZoom","_z","ceil","_xy","_cbr","getBoundingClientRect","_ccx","_ccy","navigateImage","direction","startMove","xy","duringMove","endMove","applyZoom","newZoom","applyRotate","reset","exit","onClose","shouldShowReset","canvasClick","clickOutsideToExit","keyboardNavigation","allowReset","keyboardInteraction","addEventListener","removeEventListener","allowRotate","buttonAlign","showTitle","_reset","justifyContent","order","textAlign","ref","draggable","transform","cursor","transition","onMouseDown","onTouchStart","onMouseMove","onTouchMove","onMouseUp","onMouseLeave","onTouchEnd","onDoubleClick","onLoad","MyLightbox","isShow","Helpers","defaultConfigModal","toggle","_getConfig","_renderBody","_props","_renderHeaderContent","_getClassname","modalCentered","modalScrollInside","initComponent","backdrop","Modal","isOpen","fade","usingModalBody","types","lightbox","components","showWithOpts","FlowGetColumnFromExtraData","FlowGetMoreFilterOfCellFromExtraData","_colExtra","_moreFilterObj","Filter","FlowGetMoreOfCellFromExtraData","_moreObj","FlowApiPost","FlowApiGet","FlowApiGeneric","cbFinal","rest","FlowApiUpdateFields","apiName","ProjectId","RequestData","Values","FieldName","NewValue","FlowApiRefreshCache","FlowApiShowFullPath","_target","_autoOpenLink","FullPathNewWindow","fnshowDialog","isNotEmpty","isNotEmptyIncludeZero","srcObj","mergeObj","args","apply","logOne","safeInvoke","initMCore","moreArr","isLocalDev","localStorage","getItem","Dev","Key","_DEBUG_","onKeyDownEnter","delay","ms","setTimeout","debounce","LodashDebounce","LodashGet","checkConditionShow","conditionValue","_canShow","checkConditionShowWithOperator","operator","_valueNeedCmp","cmpWith","getFullYear","isValidEmail","str","test","isValid_AUS_PhoneNumber","_pattern","K","mobileNumberValidRegexPattern","_regex","isValidUsername","output","fromCharCode","charCodeAt","compareValueEqual","v1","v2","trim","convertArrayString2String","string","forEach","convertString2ArrayString","strSplit","isOnScreen","element","offsetTop","curTop","heightOfWindow","innerHeight","offsetYOfWindow","scrollY","squareBracketReplace","regex","ext","_m","extract","newS","_item","rg","isHTMLString","RcTooltip","t_bottom_2fa_setup","t_bottom_2fa_verify","Setting2FAHelpers","Auth2FAEnabled","UniqueId","fnUpdateSetting2FAPart","FA2Methods","seletedMethod","updateSettingByResponse","forceUpdateSetting2FAPart","updateSettingOneMethodByResponse","_method","updateFnUpdateSetting2FAPart","fnUpdate","getCurrentMethod","getCurrentMethodId","getCurrentOtpRecipientRequired","getCurrentOTPDescription","getCurrentFA2MethodName","MyFormControl","MyIcon","disabled","WrapLoading","MyLoadingPage","OptionsInfo","noAddAutoEmpty","_text","label","Value","convertSourceDataToString","getOptionByValue","sourceList","getTextByValue","_option","convertSourceDataToArrayValue","getSourceDataFromSourceList","getSourceListFromFnList","isHasLevelOptionKey","optionKey","convertOptionKeyLevelMissingField","fieldNames","_optionKey","_countDot","_add","getOptionsByLevel","_newOptionKey","_options","_split","_prefixK","_k","_hasItem","isExistValueInSourceList","_isExist","usePlacesService","apiKey","apiOptions","onLoadFailed","placesService","setPlacesService","sessionToken","setSessionToken","initializeService","google","maps","places","AutocompleteService","AutocompleteSessionToken","a","Loader","libraries","load","useFetchSuggestions","arg","autocompletionRequest","minLengthAutocomplete","withSessionToken","useDebouncedCallback","autocompletionReq","getPlacePredictions","input","bounds","LatLngBounds","LatLng","autocompletionRequestBuilder","suggestions","suggestion","addExtraColumns","showDetails","showDetailsMulti","hideColDelete","hideColDeleteOnSmallWidth","customDelete","canDelete","hasCustomHeader","hasWrapHeader","noBorder","noBorderCol","borderLight","hasBigBorderBottom","classNameTable","forceFullExpandDetail","showLoadingWhenFilter","showID","colsActions","customProps","needRebuildColAfterGetList","hasExpand","sizePerPage","hideSizePerPage","optionsTable","hasPagingRemote","tableProps","deleteTitle","deleteContent","deleteContentHtml","deleteWithNote","fDelete","styleHeader","belowTable","needReloadChartAfterUpdateFields","hideTableWhenEmpty","configSelectRow","canSort","fixHeightScrollTable","fixHeightStickyNumColumn","fixHeightStickyFooter","showTotal","configTotal","needReloadAfterDelete","fieldId","showLoadMore","autoLoadMore","autoLoadMoreMode","autoLoadMoreOffset","loadMoreSelectorScroll","loadMoreAutoSwitchScrollWindow","KConfigPageTableDefault","KConfigPageFilter","customQueryFromSever","position","searchServer","showSearch","needCheckLastItemQueryServer","KConfigPageHeader","hideTitle","showAddNew","showProjectHeader","hideButtons","preButtons","sufButtons","onlyShowButtonInSmallWidth","KConfigPagePage","topTable","topHeader","belowHeader","belowFilter","configCard","hasSwitchView","listSwitchView","defaultSwitchView","prefixId","configChart","defaultTypeHubFilter","defaultPositionFilter","GoogleClientId","GooglePlaceApiKey","hasRegisterAccount","hasForgotPassword","hasLoginSocialFacebook","hasLoginSocialGoogle","widthMobile","isDevMode","home_url","DefaultHomeURL","AuthInfo","appLogo_url","verAdmin","defaultTagInputCell","hasSetting2FA","serviceWorkersRun","hasSignalR","signalRHub","signalRKey","hasPushNotify","fileUploadSupport","numberLocale","currencyLocaleOptions","expandIconHideColor","autoRedirectLoginPageNotFound","mtf_datefromto_showRange","charSplitArray","showClearLocalCache","dateFPFormat","datetimeFPFormat","numeralFormat","hasSwitchTheme","typeMyPage","KUI","fnShowLoadingScreen","fnForceUpdateRoutes","KApiName","List","Options","UpdateFields","KOnePageMore","_currentSearchText","_componentTable","_componentTableLoading","_waitingComponentTableForFilter","_configRowById","_isShowLoadMore","_configLoadMore","_pageUUID","_dataTotal","kRequestFromClient","UI_TextSearch","UI_Sorts","KStorage","_localConfig","_localBaseUrl","_usingLocalBaseUrl","redirectAfterLogin","HomeURL","KObserver","beforeSearchTable","beforeFilterTable","window_resize","fnGetListExtraData","fnGetConfigFilter","fnGetOptions","KConstant","_NullOrEmpty_","KMyUITypeCommon","kMyUICore","myData","myChange","myBlur","marginBottom","fill","Wrap","MessageAboveActions","headerInfo","historyFields","fHeaderInfo","endtime","Title","fEndTime","getText","Content","CanShow","getConfigFromFirstSettingByKey","getConfigMsgFromFirstSetting","fOrderStatusCode","matches","match","before","after","footerInfo","fFooterInfo","endTime","onFinishCountdown","onReload","renderMessageAbove","FlowGetConfigFormFromConfigServer","configV1","moreDefaultValues","_controls","_moreOfForm","More","_defaultValues","DefaultValues","Props","hint","Hint","Disabled","Source","SourceField","MyFormControlHelpers","ConfigPagination","_pageStart","_pageCurrent","_totalItems","_pageSize","next","previous","go","goFist","update","page","pageSize","totalItems","validSetPageNumber","afterChange","getQuery","updateFromOneScreenConfig","oneScreenConfig","updateFromDataList","createFromCellMore","pageStart","configPagination","CSuppense","fallback","ErrorBoundary","hasError","getDerivedStateFromError","componentDidCatch","render","RGSquareBracketReplace","RGHexColor","patern","_rg","isBoolean","isRegex","isHexColor","isNullOrEmpty","isNotNullOrEmpty","JSON","d","origLog","origWarn","origInfo","LogInfo","logTypeOne","countTest","listNoPage","listNoMyUI","listNoAnyType","logW","logParseJson","msgs","shift","call","logExistType","logNoType","_list","logNoAnyType","prefix","logOneObj","logNeedOveride","arguments","_s","stringJson","MyComponentTypes","addTypesGeneric","classMy","_key","addTypesGenericFromListLazy","listWithKey","addTypesGenericFromListWithoutLazy","Tag","removeTypeGeneric","_empty","TypesWrap","MyComponentHelpers","getMyComponentTypeFn","_type","MyPageLayoutHelpers","setDefaultMyPageLayout","setEmptyMyPageLayout","addTypes","addTypesFromListLazy","MyPageLayout","MyHelpers","MyTypeFn","MyPageHelpers","setDefaultMyPage","buildConfigPageFromConfigDetail","configDetail","_requestData","APIName","ScreenCode","UIType","UIUrl","Constant","DefaultUITypeWhenNull","Table","Page","Detail","colors","AppConfig","ConfigPage","parseConfigPageServer","getApiController","getScreenCode","getTitle","getId","getType","getWrapMyPageLayout","_typeWrapLayout","_configWrapLayout","wrapLayout","getMyPageFn","getMyPage","_myPageFn","createFromConfigPageServer","cp","parseCategoryScreenList","Format","thousandSeparator","decimalSeparator","decimals","currencyChar","currencyPos","currencyThousandSeparator","currencyDecimalSeparator","datetime","loadConfigByLang","compare","_compareValue","money","money_vnd","number","_number","number_format","n","isFinite","prec","sep","thousands_sep","dec","dec_point","toFixedFix","MyIconHelpers","HComponent","_moreProps","_component","myIcon","ReactDOMServer","has","set","mergeObjIfNotExist","getCustomData","_customData","customData","squareBracket","hideshowWhenNull","_fields","getArrayFieldFromSquareBracketOfText","_obj","isMobile","Android","BlackBerry","iOS","Opera","Windows","any","currArr","htmlString","autoPrint","_idPrintfGloabl","_idPrintfGloablIframe","_eContain","el","_eIframe","_height","sortType","sortDataType","sortByField","_sortType","_sortDataType","_itemA","_itemB","b","_compare","mergeRecursive","obj1","obj2","LocalStorageConfig","kPrefix","getKey","_v","saveObj","saveString","ConfigScreen","filter","setConfig","clearAllConfig","getSavedFilter","clearSavedFilter","setSavedFilter","clearCustomField","screenCode","setCustomField","getCustomField","xoaDauInText","removeSpace","removeSpecialChars","validSearchTextTV","sourceText","searchText","_source","_search","validSearchText","configSearch","ConfigText","DataByLangCode","defaultLang","currentLang","kLastLangCode","getLastCurrentLangCode","HLocalStorage","buildTextForSearch","configText","langcode","dataLang","arrayKey","_ss","textSearch","_textSearch","ConfigSearch","instant","noSymbol","getFiltered","OnePage","getTableConfigBootstrapv1","updateListInList","listInList","listData","listFieldTextByFieldOptionsInList","_listOnly","getTextDisplayOfValueFromOptions","valuesSelected","arraySplitChar","_arrSelected","OneScreenConfig","_table","_header","_page","_detail","_filter","require4ShowData","_objFilterSearch","initDefault","parseFromOptions","parseFromScreenConfig","screenConfig","parseFromListAndExtraData","_col","_moreFilter","_objFilter","fieldQuery","debug","ConfigFilter","typeBSTv1","getBootstrapTableV1","_test","select_multi","FilterBootstrapV1","SelectFilter","RegexFilter","ArrayFilter","CustomFilter","BetweenFilter","Compare","eq","fnCompare","valueFilter","of","_valueItemString","_newRegex","bw","_from","_to","valueItem","compareTrue","compareTrueForBootstrapV1","_targetValue","OneFilter","isFilterHide","isServer","isSharedDetail","valueFilterServer","getValueFilterServer","getDataByThisFilter","HFilter","getQueryFilterClient","getQueryFilter","_valueServer","_fQuery","OneFilters","needRequestServerAfterFilter","needRequestLast","clearByFieldName","listFilter","updateCurrentSort","Field","Dir","updateCurrentFiters","currentFilters","_oneFilter","getQueryFilterClients","getQuerySort","listSort","getDataWithCurrentFilter","_listDataFilterd","MyButtonHelpers","addTypesWrap","OneButton","_isLoading","_inDropdown","setOnePage","setInDropdown","setFromComponent","changeIsLoading","parseMore","configButton","getTitleDisplay","getLinkTarget","getMorePropsButton","outline","getUrlLink","getApiRequest","_apiName","_apiController","_onePage","getApiQuery","getMyButtonFn","getMyButton","_myButtonFn","oneButton","renderMyButton","_fromComponent","createListButtonList","_oneButton","onePage","fromOnePage","MyTableFilterControlHelpers","OneHelpers","getUIFn","nameOne","getUIWrapFn","one","ComponentWrap","OneTableFilterControl","prefixKey","setFnGetFilterOutFromValue","getFilterOutFromValue","_fnGetFilterOutFromValue","updateCurrentValue","updateCurrentFilter","getKeyLocal","getTypeWrap","clear","parseFilterFromValue","loadLocal","saveLocal","_sourceList","getUI","_myFn","oneFilterControl","getAllFilterOutFromListFilterControls","_filterouts","_one","clearAllFilter","ConfigOnClick","getOnClickFromMoreCell","configOnClick","_args","hexColor","_colorForDark","_colorForLight","getLumina","c","rgb","parseInt","nameOfColorsBootstrap","validColorBootstrap","randomHextColor","OneTableCell","customMore","parseQueryFromConfigQuery","getListAction","updateOnePage","initFromConfigColumn","_configColumn","parseExtraType","_moreFromCustom","_custom","getMore","getRowId","getValue","getExtraStyle","dfStyle","customStyle","_styleEx","_styleRow","getStyleContainer","_configExpandArea","_currentLevelDetail","_paddingLeft","getExtraClassName","getOnClick","getConfigButton","_objSwitch","getConfigTextDisplay","optionValue","_display","_hasIconAndText","getDateFormat","dfFormat","getConfigTooltip","_configTooltip","getTooltip","configTooltip","getConfigModal","getConfigForm","getConfigHtml","_configHtml","createFromExtraData","configColumn","createFromCellV1","_buttonList","_filterList","_filterListByFieldName","_oneTableColumnByField","onForceUpdateUI","parseConfigPage","getScreenGUID","_configPage","getPageContents","getQueryOptions","getQueryList","getQueryShared","_screenGUID","_df","getQueryPagination","_oneScreenConfig","_configPagination","FilterQuery","_oneFilters","getQueryFilterServer","requestOptions","requestList","parseOptions","parseListAndExtraData","_dataExtraData","_cfFilter","getDataList","getDataWithFilterClient","getDataOptions","getDataExtraData","getOneTableColumnByFieldname","getPageTitle","getButtonsList","getFilterList","clearFilter","onSearch","onFilter","onChangeFilter","_allFilterOut","forceUpdateUI","getAllParamOnUrl","_params","_indexQuestionMark","_folowQuestion","_arrParam","_rs","decodeURIComponent","updateUrlWithAllParams","allParams","updateUrlWithoutReload","_newUrl","setNewUrlWithoutReload","clearParamOnUrl","_allPrams","LinkInfo","getLinkPushInHash","getHrefByUrlInHash","results","names","_arrRemove","HUI_NeedOveride","showToast","showMsg","defaultObjMsg","configMsg","showLoadingScreen","showModal","showPhotoViewer","_jsonObj","configDialog","configToast","configLoadingScreen","configModal","configPhotoViewer","Cell","fCanShow","hideOfIds","getConfigFromMore","extraOfColumn","Modules","moduleByKey","_oneModule","_moduleKey","getConfigModuleByKey","module","listComponent","addUI","ModuleFnList","registerFnList","runFunctionInModuleFnList","moduleKey","fnName","addRoutes","fnAddRoutes","FakeData","getLorem","getLoremWord","getLoremWithRandom","getRandomWordOfString","_total","getName","getNumberInt","getNumber","getDateUTCTime","_current","_min","pastDay","_max","futureDay","getAge","getHextColor","getArrayObj","total","fnGetObj","valid","_typeRule","_valueCheck","rules","_rsType","required","check","valueCheck","minLength","CF","Events","EE","context","once","addListener","emitter","TypeError","listener","evt","clearEvent","EventEmitter","_eventsCount","events","handlers","_events","l","ee","listeners","a1","a2","a3","a4","a5","len","removeListener","HEE","MyPage","MyPageTypeFn","MyUIHelpers","MyUI","MyCardHelpers","MyCard","MyLayoutHelpers","MyLayout","MyTableCellHelpers","MyTableCell","MyTableFilterControl","MyButton","MyLoadingHelpers","_default","_defaultlazy","MyLoading","MyBaseHelpers","MyBase","MyLibHelpers","MyLib","MyTableHeaderHelpers","MyTableHeader","MyChartHelpers","MyChart","MySVGHelpers","MySVG","MyControl","MyControl_Ext","getDefaultValueWhenAllThingNull","getThisValue","getThisValueByCheckValid","getIsUnControlled","changeValue","MyControl_Ext_Select","getAllSelected","thisValue","_sourceData","option","clearAll","selectAll","isMulti","_index","_objDefault","getMoreInType","getConfigTrueByAllLevel","getTableConfig","fncGetRow","fncGetMore","fncGetConfigByKeyInMore","fncGetQuery","fncNeedReload","getConfigByKeyInMore","_styleInMore","Allias","HApi","showPhotosViewer","arrPhotos","currentIndex","addAllias","kObjCategoryLocal","kFirstSettingData","kRoleUserActive","myuiOrderNav","myuiDfNav","rentalTypes","mobileWidth","headerTabList","MUI_dev_simulator","lazy","MyUIOne","ModuleDevSimulator","usingLocalBaseUrlKey","localBaseUrlKey","usingLocalBaseUrl","runAfterInit","localBaseUrl","getLocalBaseUrl","isUsingLocalBaseUrl","getIsUsingLocalBaseUrl","showUIDevSimulator","log","setLocalBaseUrl","setIsUsingLocalBaseUrl","newBaseUrl","getElementById","createElement","innerHTML","onclick","showFromMyUI","appendChild","global","factory","numeral","formats","locales","defaults","currentLocale","zeroFormat","nullFormat","scalePercentBy100","Numeral","_input","kind","unformatFunction","regexp","isNumeral","isNaN","regexps","unformat","stringToNumber","version","numberToFormat","roundingFunction","leadingCount","abbrForce","abs","int","precision","signed","thousands","locale","negP","optDec","abbr","trillion","billion","million","decimal","neg","abbreviations","thousand","toFixed","delimiters","abbreviation","stringOriginal","currency","symbol","pow","search","insert","subString","start","reduce","array","callback","multiplier","parts","correctionFactor","prototype","accum","mn","maxDecimals","optionals","boundedPrecision","optionalsRegExp","power","splitValue","minDecimals","localeData","property","validate","val","culture","_decimalSep","_thousandSep","_currSymbol","_valArray","_abbrObj","_thousandRegEx","temp","substr","clone","inputString","formatFunction","round","corrFactor","curr","currI","O","subtract","multiply","divide","difference","ordinal","exports","SelectList","onSelect","stylePopover","noOptionsMessage","inputValue","innerRef","setData","updateList","_uiEmpty","emptyMsg","emptyValueMsg","WrapPopover","minHeight","onMouseOver","setIsManual","renderCustomOption","hideSearch","hideCheckbox","styleContainer","itemOption","renderOptions","GooglePlacesAutocompleteCustom","selectProps","suggestList","setSuggestList","visible","setVisible","rInput","useRef","currentDefaultValue","isManual","currentList","currentText","currentValue","firstDropdown","setFirstDropdown","isFocus","setIsFocus","fetchSuggestions","useImperativeHandle","getSessionToken","refreshSessionToken","focusSearchInput","click","closeDropdownAddress","lostFocusInput","hasFirstDropDown","readonly","autoFocus","spellCheck","focus","onFocus","setFocusing","_onFocus","cbChange","isWaiting","fnRenderRecentlyAddress","fnRenderPopularrLocation","renderDropdownMenu","forwardRef","kAuthToken","kAuthType","kAuthInfo","kAuthInfoSocial","token","infoSocial","info2FA","checkBeforeLogout","listAfterLogout","AuthConfig","afterLogout","loadLastSaved","setCF","KAuth","fnUpdateAuthInfo","authInfo","authCheckSavedAuthorized","registerCheckBeforeLogout","registerAfterLogout","_fn","authLogin","getInfoFromData","_info","parse2FAfromData","fa2_needenable","fa2_needverify","fa2_token","user_uniqueid","user_id","fa2_method","authLoginWithRes","access_token","token_type","authLoginSocialWithRes","Token","SocialInfo","authLogoutWithNothing","removeItem","cbLogout","_isWillLogout","authLogoutWithReload","reload","authIsLogged","getUserInfo","getInfo2FA","getUserEmail","user_name","getUserAvatar","avatar_url","checkShow2FAFromTokenResponse","resToken","categoryFields","fAddress","fLatitude","fLongitude","fFromDate","fToDate","fPDAvatarUrl","fPDName","fPDRate","fPDTripCount","fPDNumberOfSeat","fPDDistance","fPDRentalPrice","fPDRentalPriceOriginal","fOrderBy","fVehicleNoOfSeatIds","fMinRentalPrice","fMaxRentalPrice","fVehicleTransmissionTypeIds","fVehicleMakeIds","fYearModels","fVehicleColorIds","fFuelTypeIds","fRentalSettings","fDocumentIds","fFeatureIds","fSlug","fDeliveryAddress","fVehicleTypeSubIds","fVehicleModelIds","fRentalDayCount_Text","fImageUrls","fRentalPriceByDayOriginal","fRentalPriceByDay","fVehicleMinYearModel","fVehicleMaxYearModel","fRentalPriceDetails","fFreeDaySegment_Text","detailFields","fServedCount","fCharacteristics","fOwnerInfo","fOwnerInfoUrl","fJoinedDate","fReplyWithin","fFullDescription","fFeatures","fDocuments","fSecurities","fTerm","fCancelBookingPolicy","fReview","fReviewByRenters","fRVUser","fRVRating","fRVTime","fRVContent","fInsuranceShortDescription","fVouchers","fBookingInfoItems","fTotalPrice","fVoucherCode","fVoucherDiscountPrice","fCanBooking","fRentalServiceCategoryCode","fCanChangeDeliveryAddress","fReviewByAvatarUrl","fName","fAvatarUrl","fJoinedWhen","fBookingFeatureInfos","fDeliveryInfo","fThingsToKnow","fPlateNumber","fPaymentInstructionInfo","fCancelBookingPolicyInfo","fGeneralProvisionInfo","fSecurity","fOrderNumber","fNewOrderLinks","fNewOrderContent","fNewOrderBookingDate","fInsuranceInfo","fRentalDate","fRentalServiceName","fEntDate_Text","fAnotherUsername","fFromDate_Text","fToDate_Text","fTotalPrice_Text","fAnotherUserContacts","fAnotherUserContactsType","fAnotherUserContactsIconUrl","fAnotherUserContactsIsDisable","fAnotherUserContactsValue","fAnotherUserRole","fAnotherUserAvatarUrl","fAnotherUserRate","fAnotherUserInfo","fAnotherUserInfoUrl","fAnotherUserPhone","fAnotherUserJoinedWhen","fAnotherUserTotalRatingCount","fAnotherUserIsVerified","fIsUserTakeSelected","fStatusIconUrl","fStatusName","fStatusColorCode","fButtons","fRating","fReviewRating","fReviewContent","fInsuranceContact","fPaymentInfos","fMoneyToPay","fTransferContent","fBankInfo","fQRCodeUrl","fCancelReasonId","fCancelReasonDetail","fOrderSteps","fHaveInsurance","fInsuranceContractUrl","fInsuranceDescription","fEntDate","fPaymentTypeName","fBillingForOwnerInfo","fBillingForOwnerTotalRentPrice","fBillingForOwnerCompletionFeePercentage","fBillingForOwnerCompletionFeeMoney","fBillingForOwnerTotal","fDepositAmount","fAmountRemain","fUserName","fMessageToOwner","fHotline","fRentalServiceStatus","fMyRentalServiceUrl","fReceiveImages","fServiceImageTypeName","fFiles","fThumbnailUrl","fIsRequired","fLimit","fHeaderInfoTitle","fHeaderInfoDescription","fMyRating","fReviewOption","fDescription","fOrders","fBlogs","fOwnerAddress","fDaysBeforeDeparture_Text","fRentalDate_Text","fIcon","fIconColor","fRentalService_PlateNumber","fOrderStatus","fOrderUserType","fID_GUID","fExtraSurcharges","fAnotherUserDescription","fRentalServiceItemImageUrls","fFromDate_Format_1","fToDate_Format_1","fButtonReport","fReportReasonId","fReportReasonNote","fDetailInsuranceInfo","fDetailInsuranceIcon","fDetailInsuranceDescription","fDetailInsuranceContent","fDetailInsuranceTitle","fDetailInsuranceUrl","fFromDate_Format_2","fToDate_Format_2","fEntDate_Format_2","userProfileFields","fId","fCanReportThisUser","fCanEditProfile","fTotalRatingCount","fRatingByRenterCount","fRatingByOwnerCount","fReviewByOwners","fReview_Rating","fReview_ReviewBy","fReview_ReviewAt","fReview_ReviewContent","fServedAndRentCount","fVerified","fIconUrl","fContent","fCanShowButtonVerified","fVerifiedInfos","fVerifiedInfos_Text","fVerifiedInfos_IsVerified","fVerifiedInfos_RefText","fVerifiedInfos_RefUrl","fOwnerInteracts","fOwnerInteracts_Text","fOwnerInteracts_Value","fPersonalInfo","fPersonalInfo_Nickname","fPersonalInfo_NeedChangePassword","fPersonalInfo_NewPassword","fPersonalInfo_ConfirmNewPassword","fPersonalInfo_FullName","fPersonalInfo_PhoneNumber","fPersonalInfo_Email","fPersonalInfo_DateOfBirth","fPersonalInfo_GenderCode","fReportUserReasonId","fReportReason","fUserLoginId","fVerificationSteps","fStep_IsUploaded","fStep_IconUrl","fStep_Content","fStep_Code","fImages","fUserImageTypeDetailName","fUserImageTypeDetailId","fImage_Id","fMessageShowInUI","myServiceFields","fStatus","fModel","fRate_Txt","fRentalPrice_Txt","homeSlidesFields","fSlides","fSlideImages","fOneSlideImageUrl","fOneSlideTitle","fOneSlideMoreInfo","fOneSlideDescription","fTimeStart","fTimeEnd","savingFields","fUsername","fPoint","fImageUrl","fInvitedFriendCount","fCoinCollected","fInviteCode","fBonusScreen","fHistoryDate","fHistoryPointChange","fHistoryStatus","fHistoryTitle","fInvitedFriendScreen","fColorCode","fInvitedDate","fInvitedPointChange","fInvitedStatus","fInvitedTitle","fInvitedDisplayName","contentPageFields","fBody","fLastUpdated","fRelatedPosts","fCreatedDate_Text","fPostLink","fPostTitle","fPostCreatedDate","fAllowComment","notificationFields","fEntity","fSubject","fMessage","fIsSeen","fNotifedAt","fRequestData","fUserLoginRole","fEntityCode","paymentFields","fBankAccount","fAccountName","fAccountNumber_NotFull","fAccountNumber","fBeneficiaryBankName","fBeneficiaryBankId","fIsDefault","fIsVerified","fNeedDelete","fPaymentWallet","fWithdrawFee","fWithdrawFee_Text","fWalletMoney","fWalletMoney_Number","fMaximumMoneyCanWithdraw","fMaximumMoneyCanWithdraw_Text","fCanWithdraw","fMinimumMoneyCanWithdraw","fMinMoneyCanWithdraw_Text","fWithdrawAmount","fTransactionHistories","fTransactionAt","fDetail","fPaidBy","fBalanceChange","travellingFields","fFiles_0","fAvatarPhoto","fPost_Title","fPost_UpdatedDate_Text","fPost_Slug","fPost_Url_Slug","fPost_CreatedDate_Text","fPost_AvatarUrl","LOGOUT","FETCH_FS_PENDING","FETCH_FS_SUCCESS","FETCH_FS_ERROR","INIT_FS_DATA","SIDE_NAV_CLOSE","SIDE_NAV_UPDATE","HEADER_TITLE_UPDATE","HEADER_QUICKOVERVIEW_UPDATE","NAVBAR_UITYPE_UPDATE","logout","toggleSideNav","sideNavUpdate","fetchFirstSettingSuccess","initFirstSettingData","updateHeaderTitle","changeUITypeNavbar","_errorMsg","stack","_stack","ErrorComponent","marginRight","showLoading","hideScrollContent","onScrollContent","overflowY","hideLoading","skipHideScrollContent","_renderContent","mydialog","configFromModal","msgHtml","myform","ModalBody","classNameBody","_renderHeader","mProps","showHeaderClose","ModalHeader","padding","borderBottom","usingModalHeader","ModalFooter","showFooterClose","Button","colorBtnClose","onClickClose","titleBtnClose","showFooterOK","disabledBtnOk","colorBtnOK","titleBtnOK","_renderOverlay","elements","getElementsByTagName","getModal","hideModal","showLoadingModal","hideLoadingModal","mypage","showWithType","showFromMyForm","showFromComponent","showConfirm","wordBreak","whiteSpace","hideModalComponent","hideModalMyUI","hideModalScrollContent","useForceUpdate","count","setCount","hideProgressBar","pauseOnHover","autoClose","ToastType","toast","success","showToastWithCheckMsg","defaultType","msgWarningType","alert","showToastSuccess","showToastWarning","showToastLikeToast","POSITION","BOTTOM_CENTER","hideInMyModalFromProps","MyDialog","kfnUpdatePageTitle","kfnGetApiPath","kfnGetScreenCode","kgetSourceList","kfnHandleSearchText","kfnLoadLocalFilter","kfnGetConfigPageScreenConfig","kfnGetConfigPageHeader","kfnGetConfigPageTable","kfnGetConfigPageDetail","kfnGetConfigPageFilter","kfnGetConfigPagePage","kfnGetConfigChart","kgetCurrentValues","kfnGetSourceData","kfnRenderBadge","kgetTabsIndexSelected","kgetTabLevel","konChangeTab","kgetDefaultValues","kfnForceUpdateTable","kgetDataList","kfnGetComponentTable","kfnGetOnePage","kfnGetOptions","kfnGetExtraDataTable","kfnGetDataTableFilterd","kfnGetDataTable","kaddFnListFromControl","kresetFormControl","kfnReloadList","kfnReloadOptionsAndList","kfnGetHeaderTitle","kfnGetConfigInMore","kfnGetIsInTableExpand","kfnGetIsInModal","kfnGetColumnSelect","kfnGetConfigModal","kfnGetTypeWrapControl","kfnGetIsHide","kfnChangeSwitchView","kfnGetCurrentSwitchView","kfnGetButtonList","kfnRequestUpdateFromExpand","rf","listFnMyForm","kfnRenderFormControl","fnListMyForm","addFnListFromControl","kfnGetSharedRequestData","kfnGetDataTotal","kfnGetTableCols","fnReloadOptionsAndList","fnReloadPage","fnUpdatePageTitle","fnGetScreenCode","fnHandleSearchText","fnLoadLocalFilter","fnGetConfigPageScreenConfig","fnGetConfigPageHeader","fnGetConfigPageDetail","fnGetConfigPageFilter","fnGetConfigPagePage","fnGetConfigChart","getTabsIndexSelected","onChangeTab","getTabLevel","fnGetOnePage","fnGetExtraDataTable","fnGetDataTableFilterd","fnGetDataTable","fnGetComponentTable","fnGetDefaultScreenConfig","fnGetIsInTableExpand","fnGetIsInModal","fnChangeSwitchView","fnGetCurrentSwitchView","fnGetButtonList","fnGetDataTotal","fnGetTableCols","fnRequestUpdateFromExpand","fnListConfigApp","getHasLoginSocial","getHasLoginSocialGoogle","getHasLoginSocialFacebook","getHasForgotPassword","getHasRegisterAccount","getGoogleClientID","getScreenWidth","offsetWidth","getIsMobileByWidth","_widthMobile","getDefaultTypeHubFilter","getDefaultPositionFilter","getIsDevMode","getHomeUrl","getAppLogo","getAuthInfo","getAppTitle","getVerAdmin","fnGetConfigTable","_configAll","_fnListUI","HLog","logTest","getReturnValues","countDown","floor","TextDisplay","days","hours","minutes","seconds","CheckIdleCountDown","countSeconds","onlyShowMsg","targetDate","stopWhenFinish","countDownDate","needStopInterval","setCountDown","interval","setInterval","clearInterval","_countDown","useCountdown","totalSeconds","checkidle_countdown","MUI_checkidle_countdown","KCheckIdle","ModuleCheckIdle","resetTimerDebounce","onIdle","timer","countdown","onTimeout","onSignOut","onKeepSignIn","onBackToSignIn","updateTimeIdle","idleAfterSecond","timerIncrement","checkAfterSecond","resetTimer","_currentTime","_currentTimeIdle","checkIdleAfterInit","_hasCheckIdle","_previousIdleLocalTime","previousIdleLocalTime","onCloseAlert","checkIdleAfterLogin","getMyKey","LodashThrottle","_checkSecond","_checkCountdown","_checkIdleInterval","connect","isAuthenticated","app","redirectTo","searchParams","newUrl","to","PATH","mapDispatchToProps","connector","useHistory","Footer","Menu","ul","Nav","BREAKPOINT","Sidebar","CloseSidebar","closeSideNav","objectFit","sideNavItems","exact","isDev","MainLayout","isHideHeader","isHideFooter","isHideSideNav","isFull","setNeedReload","configFooter","getElementsByClassName","WrapReload","Bg","backgroundSize","xmlns","xmlnsXlink","viewBox","xmlSpace","PageGeneric","CMyPage","configMainLayout","Loading","PageNotFoundv2","Routes","getHistory","publicRoutes","privateRoutes","RedirectUrl","App","ModuleFirstSetting","requestFirstSetting","_uiAppConfig","parseFirstSetting","PTable","PTab","PPanel","PTable_in_card","PTable_no_action","MyPageOne","v1_page_header","v1_page_header_buttons","v1_page_filter","v1_page_table","v1_page_table_expand","v1_page_msginui","V1_mtc_readonly","V1_mtc_text","V1_mtc_default_actions","V1_mtc_date","V1_mtc_files","V1_mtc_select","V1_mtc_api","V1_mtc_form","V1_mtc_with_myui","V1_mtc_action","V1_mtc_html","v1_mtc_readonly","v1_mtc_text","v1_mtc_default_actions","v1_mtc_date","v1_mtc_files","v1_mtc_select","v1_mtc_api","v1_mtc_form","v1_mtc_with_myui","v1_mtc_action","v1_mtc_html","ListCustom","v1_mtc_readonly_date","v1_mtc_readonly_html","ListMapV1","MyTableCellOne","mapWithV1","MyFilterControlSelect","MyFilterControlSelect2","MyFilterControlSelect2content","MyFilterControlSelect2icon","MyTFCWrap","MyFilterControlCheckbox","MyFilterControlDateFromTo","MTF_text","MyTableFilterControlOne","_mapControl","select2","select2content","select2_icon","datefromto_v1","V1_mfc_mycontrol","V1_mfc_group","V1_mfc_group_row","V1_mfc_lable_control_inline","MyFormOne","typeControl","MyButtonLink","MyButtonApi","MyButtonForm","CCircle","CArc","CEllipsis","MyLoadingOne","MCSelect2","MCSelect2Icon","MC_select2_customfilter","MCDate_flatpickr","MCComponent","MyControlOne","MyControlTypes","ModuleV1Page","MyButtonOne","PDev_ListMyControl","PDev_CategoryList","PDev_MyPage","PDev_MyForm","PDev_Notification","PDev_Other","PDev_Resize","PDev_UseScript","PDev_CustomHook","PDev_Test","ModuleDev","dispatchFromStore","actions","ListIconHi","HiBadgeCheck","HiBell","HiCheck","HiMenu","HiOutlineEye","HiOutlineEyeOff","HiOutlineHome","HiOutlineKey","HiOutlineLockClosed","HiOutlineMail","HiOutlinePencilAlt","HiOutlinePhone","HiOutlineTrash","HiOutlineUser","HiOutlineViewGrid","HiRefresh","HiUser","HiUsers","HiX","toLocaleLowerCase","ModuleIconHiOutline","MyIconOne","PSetting_main","ModuleUserSetting","MUIGeneration2FA","MUIVerify2FA","MUICheck2FA","MUISelectMethod2FA","Generation2FA","Disable2FA","Setting2FA","Verify2FA","ModuleSetting2FA","addResourceBundle","Lang_en","showGenerate2FA","fromOneMethod","IsEnable","showVerify2FA","requestSetting","PRedirectToken","ModuleRedirectToken","MyUI_HTML","_html","KConfigMyUI","getMoreProps","getData","_moreData","_configFormat","getStyle","getTypeMyLayout","getTypeMyUI","MyUI_Data_Obj","_configChild","configChild","MyUI_Data_Array","MyUI_Data_Tag","_childIsMyUI","_childIsText","_textDisplay","MUI_html","data_obj","MUI_data_obj","data_array","MUI_data_array","data_tag","data_span_autoresize","_fontSize","fontSize","_fontSizeInStyle","r","clientHeight","scrollHeight","ModuleCorePage","trackPageView","gtag","ModuleReactGA","isUniversal","ReactGA","send","hitType","ReactGA4","gaTrackCurrentPageView","initGAdone","isUsingDev","pathname","hash","gaTrackPageView","gaTrackEvent","action","GAIdDev","GAId","initialize","initGA","listen","h","admintable_table","select_box_search_v2","admintable_filter","with_myui","TagCell","notexist","api","moreAttrs","moreOptions","enableTime","ModuleAdminTable","z","F","T","H","S","getXCheckKey","N","eXCheckOne","q","eCheck","TabCode","loginSuccessWithResponse","dispatch","WrapEnterPhone","WrapEnterPassword","field","tabActive","setTabActive","mobileNumber","setMobileNumber","setPassword","showPwd","setShowPwd","setLoading","pwdMsg","setPwsMsg","verifyToken","setVerifyToken","dfResendTime","setDfResendTime","isForgotPwd","setIsForgotPwd","dfMsgInfo","keyPwd","setKeyPwd","invalidMobileMsg","setInvalidMobileMsg","handleBeforeUnload","requestGetOTP","cusActionType","_actionType","nextScreen","NextScreen","_verifyToken","VerifyToken","_dfResendTime","PinResendInSecond","requestVerifyOTP","otp","ActionType","OTP","_msg","requestResendOTP","onSetVerifyToken","_mobileNumber","cusMobileNumber","MobilePhone","requestCreateAccount","PhoneNumber","requestLogin","getDisabledLoginBtn","Password","getConfigFormEnterPhone","configInputPhoneNumber","config_input_phone_number","notFocus","needUpdateImmediately","showPrefix","iconPrefix","handleKeyDown","getDisabledContinueBtn","handlePressEnter","handleChkValidMobieNumber","getConfigFromWebsiteSettings","getDescriptionWithField","onHandleClose","onFormatMobileNumber4UI","mobile","cleaned","breakCharacter","config_format_phonenumber_ui","break_character","handlePassword","handleForgetPassword","fnClick","dfConfig","go_next_after_press_enter","returnValue","regexPhoneNumber","regex_check_phone_number","getRegexPhoneNumber","configMsgError","isValid","whenInvalid","whenNull","isActive","enter_phone_number_des","showOtherMethod","show_other_login_method","configHeaderTitle","classNameHeader","showLoadingIcon","afterUpdateValueControl","btnName","loadingColor","renderTabEnterPhone","onVerifyOTP","onGoBack","onResendOTP","func","onGetDescription","renderTabEnterOtp","des","autoComplete","onKeyDown","renderTabEnterPwd","onCreateAccount","renderTabUserRegister","_isActive","requestSetNewPwd","renderTabEnterNewPwd","bgImage","MyUIHomeRentalCar","slideImages","imgUrl","dataFirstSetting","dfMetaConfig","metaTitle","MetaTitle","metaKeyWords","MetaKeyWords","metaDescription","MetaDescription","Description","metaUrl","MetaUrl","canonicalUrl","CanonicalURL","noindex","NoIndex","appTitle","appLogo","seoInfo","telephone","supportEmail","socialLinks","businessInfo","founderInfo","Helmet","content","origin","stringify","alternateName","sameAs","email","numberOfEmployees","hasMap","news","additionalType","identifications","founder","URL","Address","address","geo","latitude","longitude","openingHoursSpecification","dayOfWeek","opens","closes","areaServed","department","contactPoint","contactType","availableLanguage","socials","jobTitle","worksFor","WrapButton","MUIButtonRefresh","configFilter","valuesFilter","defaultActive","checkNotempty","getSourceListFilter","isActiveFilter","listField","listOption","findIndex","listFieldOption","rsOption","getActiveFilter","placement","overlay","onClearFilter","configKeyHeader","viewportHeight","WrapMobileView","fnOpenFilter","arrayTypeFields","dropdownOpen","setDropdownOpen","curTab","dfAvatar","avatar","setAvatar","userName","setUsername","isMobileView","setIsMobileView","isMobileViewV2","setIsMobileViewV2","curData","setCurData","refSearchForm","myFilter","keySearchForm","forceUpdateFnc","isFocusSearch","setIsFocusSearch","needClearOtherFilter","setNeedClearOtherFilter","setViewportHeight","configFirstSetting","setConfigFirstSetting","activeSelectTime","setActiveSelectTime","mobileWidthV2","_updateAuthInfo","on","eeUpdateAuthInfo","off","newData","closeDropdownMobile","contains","updateViewportHeight","morePropsRange","fields","getLabelTop","getMin","getMax","getStep","classNameWrapForm","classNameForm","classNameWrap","classNameItem","dateFromToConfig","DateFromTo","classNameGroup","morePropsInputAddress","mappingFields","fieldAddress","configBtnAddress","morePropsDateFlatPickr","calendarStartDay","moreOptionsDateFlatPickr","disable","setHours","configMergeText","titleWhenMergeText","mappingField","fFrom","fTo","configSelectTime","titleTimeFrom","titleTimeTo","configSelectDate","placeholderTo","placeholderFrom","labelFrom","labelTo","defaultActiveDropdown","config_search_in_header","onUpdateFilter","other","onSetFilterObject","onHandleCollapseNav","navbar","sticky","pageYOffset","skipShowFullHeader","configFormFilter","props4Search","configSelect","configDate","minDate","placeholderDate","configTime","placeholderTime","hideDefaultMobile","isShowInMobile","prevState","configFilterList","onCloseModal","menuLeft","subMenu","isDropdown","renderMenuLeft","menuRight","renderMenuRight","abouts","renderMobile","renderSearchForm","cfAddress","onSetShowOverlay","parse","end","afterCloseSelectTime","needFormatValue","ToDate","FromDate","_newToDate","_newFromDate","endHours","getHours","endMinute","getMinutes","startHours","startMinute","afterUpdateMultiValues","values","afterUpdate","objUpdate","lat","lng","updateAddress","Name","autoCloseAfterUpdate","needAutoClose","updateAddressWithTime","fnIsExpired","isFormat","onFilterAddress","MoreInfo","newAddress","needSaveLocal","newValueLocal","renderRightHeader","menuItem","renderTopHeader","onlyShowLogo","customLoading","isEmpty","isHideBottomFilter","MyUIHeader","setMyFilter","defaultShowAmount","isShowAmount","setIsShowAmount","marginLeft","checkShow","classNameOption","subTitle","subLabel","titleFrom","titleTo","splitStep","getLabelFrom","getLabelTo","useCollapse","minItemCollapse","filterList","getDefaultActiveResetFilterBtn","isFilterMore","onSetShowAmount","renderBottom","ModalForm","refMyForm","WrapModalForm","MUIButtonForm","setOpen","getActiveButton","Dropdown","DropdownToggle","DropdownMenu","Message","MyUIWLoadingSkeleton","classNameEmpty","keepDataLoading","isError","msgEmpty","msgError","renderLoadMore","isSearching","renderMain","renderEmpty","renderError","renderLoading","configKeySlide","WrapTitle","configDots","bottom","defaultWidth","activeColor","activeWidth","configBtnNavigation","default","leftDefault","rightDefault","leftDefaultMobile","rightDefaultMobile","WrapShowMore","MyUISlideCard","moreInfo","configOptions","slideSetting","rewind","autoplay","dots","navText","alwaysShowNav","onDragged","onChanged","lazyLoad","cardType","_configBtnNavigation","_configDots","classNameSlide","isCenter","needCenter","getIsCenter","config4SEO","useHeading","headingTag","renderTitle","configMoreInfo","paddingTop","btnConfig","btnShowMoreConfig","styleWrap","renderShowMore","li","MyUIBanner","bgImg","onScroll","Search","datetimefrom","datetimeto","refTopForm","getDisabledSearch","isDisabled","_newDateTimeTo","alertType","long","replaceAll","getLinkSearch","MUISearchbar","WrapMobile","MyUIHeaderMobileV2","hideMenuLeft","hideMenuRight","MyUIFancybox","containerRef","container","delegate","Fancybox","bind","unbind","close","MyUIContentOverlay","renderMore","fromRight","WrapHeaderFixed","actionsHeight","WrapButtons","btnLength","setMyData","setActionsHeight","topFixedHeight","setTopFixedHeight","actionsRef","topFixedRef","actionsRefObserver","disconnect","topFixedRefObserve","notLoading","OrderNumber","getMyFnList","getCanShowByBtnList","getActionButtonCode","getButtonConfigByCode","orderDetail","btnList","Code","_btnConfig","buttonList","onCloseDetailOrder","hideDetailOrder","renderMap","UserTakeLat","UserTakeLng","statusNotPaidYet","notPaidYet","titleMaker","hideTooltip","renderGeneralInfo","statusCodeList","buttonCode","renderVehicleInfo","vehicalInfoCf","renderActions","moreConfigActions","listButtonNeedRemoveInFooter","listStatusCode","OWNER2CONFIRM","Color_BG","Color","NeedReloadList","fnOnClick","getButtonList","renderHeaderFixed","timeText","renderBlogsSuggestion","blogs","MyUICarName","getConfigFromFirstSettingDetail","getDataFirstSettingByKey","detail","isShowLike","shareSettings","WrapImage","MyUICarImageSlide","allData","configFromFirstSetting","itemCount","setItemCount","imageSlides","fancyboxSettings","getNewArray","renderImage","fancyboxName","otherImgs","firstImg","emptyImgs","hiddenImgs","showEmptyImg","canShowPreview","showBtnPreview","infinite","Carousel","Thumbs","showOnStart","Toolbar","share","tpl","middle","right","classNameBtnPreview","textBtnPreview","WrapMessage","AddressDirection","isPaid","canShowButton","copied","setCopied","copyLink","clipboard","writeText","openLink","renderDescription","isShowRedMarker","WrapDocuments","RentalDocuments","getDescription","Icon","IconUrl","isIconFont","renderRentalDocuments","renderSelectedSecurity","UITypes","documents","fieldData","WrapOnePart","address_direction","getIsPaid","getCanShowDirectionButton","popup_html","listThingsToKnow","fullDescription","moreStyleIcon","WrapRentalDate","WrapParts","GeneralInfo","keyUI","renderRating","rating","Review","canReview","defaultRating","DONE","review","reviewContent","reviewRating","avatarField","_slideConfig","dfImage","defaultImage","imgList","fromDate","toDate","only_image","slide_options","default_image","SlideImages","UrlTarget","renderRetalDate","classWrap","renderInformationAndGuide","part_with_icon","call_with_icon","CallWithIcon","showFull","cancel_order","Cancel","WrapPartWithIcon","WrapPartWithModal","DotList","VehicleInfo","plate","img","orderNumber","onOpenFile","file","renderCharacteristics","dataField","renderPart","RentalPriceDetails","isTotal","information","IsShowTitleOnly","Information","PriceText","SurchargesDetails","TitleLeft","TitleRight","PaymentInfo","amountRemain","deposit","handleOpenExtraSurcharges","extraSurcharges","SurchargeDetails","rentalPrice","OwnerInfo","ownerInfo","avt","phoneNumber","SupportInfo","callCenter","linkCommonQuestion","renderParts","BlogSuggestion","_ui_type","default_ui_type","default_ui_type_mobile","use_data","InsuranceInfo","insuranceInfo","ReviewModal","onSubmit","isEdited","setIsEdited","quickReview","setQuickReview","keyReview","refReviewForm","getQuickReviewContent","_reviewList","WrapReview","configRate","fieldRating","titleList","fnGetOptionList","_newReviewValue","_tmp","find","getQuickReview","_str","modalData","PaymentModal","paymentInfos","isCopied","setShowCountdown","setIsPaid","setMsg","canCheck","setCanCheck","intervalRef","timeoutRef","reloadList","WrapPayment","moneyToPay","transferContent","bankInfo","qrCode","messageWaiting","defaultWaitingTime","setSeconds","getSeconds","getEndTime","onlyShowSecond","clearTimeout","messageCheckFail","CancelModal","msgWarning","WrapCancel","morePropsSelect2","isSearchable","OptionList","Text_Display","OneFile","deleting","setDeleting","multiple","maxFile","onDrop","acceptedFiles","files","cbUpload","accept","getRootProps","getInputProps","cbDelete","NoImage","RentModal","receiveImages","listImg","WrapRent","myFiles","Pay","showPopup","config4Modal","apiUrl","requestSubmitReview","Insurance","iloading","setILoading","contacts","ContactNumbers","requestSubmitCancel","requestGetCancelInfo","RentCarBegin","isSubmited","setIsSubmited","requestSubmitRentBegin","RentAgain","mapParamsNFields","rqData","params","canFillParam","Understand","NewCancel","MWEaseLayout","idHeader","afterSubmit","NewReview","disabledReview","setDisabledReview","configBtn","openWithType","danhgiachuyendi","closeWithType","submitData","MyUIOrderAction","buttons","getMyButtons","fnReloadListWith","fnRequestList","AnyReactComponent","$hover","tooltip","isHover","setIsHover","WrapMaker","onMouseEnter","UIOdometer","setValue","UIChangeDate","fnChangeValue","curValue","setCurValue","onToggleDropdown","prev","WrapChangeDate","WrapIncome","WrapMap","MUIIncomeAndMap","amountIncome","setAmountIncome","slider","setSliderValue","handleChangeDate","paddingLeft","thumbsDisabled","rangeSlideDisabled","step","onInput","onThumbDragEnd","points","price","center","totalLat","totalLng","getCenter","defaultProps","bootstrapURLKeys","language","defaultZoom","scrollwheel","fullscreenControl","MyUIWLoadingOverlay","MyUISGButton","MUIComingSoon","MUINotAvailable","MUIInsurrance","MUIWContent","MUIAutoLoadList","MUIAlertTemplate","MUIImageSlides","MUISearchBoxWData","MUIListCard","MyUIPopover","MyUIDownloadAppInfo","MyUIHomeCarSuggest","MUIFilterCategory","MUIFilterSpecialAttribute","MUIProduct","MUIBookingInfo","MUIConfirmBooking","MUIHeaderDetail","MUIVehicleMap","MUIVehicleDeliveryAdress","MyUIBookingConfirm","MyUIMessageForOwner","MyUIPriceDetails","MyUISelectSecurity","MyUIBookingSuccess","MUIOrderAction","MUIOrderProgress","MUIOrderInsurrance","MUIOrderImages","MUIOrderPrices","MUIOrderOthers","MUIOrderTrader","MUIOrderHeader","MUIOrderDetail","MUIOrderDetailGeneralInfo","MUIOrderDetailRenterInfo","MUIOrderdetailBookingInfo","MUIOrderDetailPaymentInfo","MUIOrderDetailInsuranceInfo","MUIOrderDetailAction","MUIOrderDetailProfitInfo","MyUIHeaderOrders","MUIAdmintableTablListCard","MyUICountdownTime","MyUIUserAvatar","MyUIUserMainInfo","MyUIReportUser","MyUIUserReview","MyUIUploadType","MyUIVerifyFace","MyUIEnterOtp","MyUIUserRegister","MyUIForgotPassword","MyUIEnterNewPassword","MyUIFooter","MyUIHelpusDirection","MyUIFAQs","MyUITopic","MyUIBlog","MyUIOneNotification","MyUIPaymentWallet","MyUIBankAccount","MyUIWithdrawPayment","MyUIAddBankAccount","MyUITransactionHistories","MyUIVerifyLoadingAnimation","MyUISavingCoin","MyUISelectAddress","MyUIShare","MyUIOrderDetailOld","MyUICancelOrder","MyUIReviewOrder","WrapModalCustomHeader","MyUILandingPageGrid","MyUILandingPageCollapseGroup","MyUIHtml","MyUIRowVideoStepsGuide","MyUISEOTitle","MyUIHeaderBlogList","MyUISGTravelling","MyUISGTravellingFilter","sg_header","MUIHeader","sg_footer","sg_banner","MUIBanner","sg_avatar","MUIAvatar","sg_insurance","sg_comming_soon","sg_not_available","wcontent","autoload_list","button_form","image_slides","fancybox","MUIFancybox","search_box_withdata","list_card","slide_card","MUISlideCard","popover","helmet","MUIHelmet","sg_download_app_info","verify_loading_animation","sg_home_searchbar","MUIHomeSearchbar","sg_home_rental_car","sg_home_car_suggest","sg_header_category","MUIHeaderCategory","sg_filter_category","sg_header_category_full_v2","MUIHeaderCategoryFullv2","sg_filter_special_attribute","sg_button_refresh","sg_product","sg_booking_info","sg_confirm_booking","sg_header_detail","sg_vehicle_map","sg_vehicle_delivery_adress","sg_car_name","sg_car_img_slide","sg_booking_confirm","sg_message_for_owner","sg_price_details","sg_select_secutity","sg_booking_success","sg_login","MUILogin","sg_enter_otp","sg_user_register","sg_forgot_pwd","sg_enter_new_pwd","sg_order_action","sg_order_detail","sg_order_progress","sg_order_insurrance","sg_order_images","sg_order_prices","sg_order_others","sg_order_trader","sg_order_header","admintable_table_list_card","countdown_time","sg_user_avatar","sg_user_main_info","sg_user_report_user","sg_user_review","sg_verify_face","sg_verify_upload_types","sg_helpus_direction","sg_faqs","sg_blog_content","sg_topic_content","sg_one_notification","sg_payment_wallet","sg_bank_account","sg_withdraw_payment","sg_add_bank_account","sg_transactions_histories","sg_orderdetail_general_info","sg_orderdetail_renter_info","sg_orderdetail_booking_info","sg_orderdetail_payment_info","sg_orderdetail_insurance_info","sg_orderdetail_action","sg_orderdetail_profit_info","sg_header_orders","sg_saving_card","sg_loading_overlay","sg_button","sg_select_address","sg_loading_skeleton","sg_header_mobile_v2","sg_share","sg_content_overlay","sg_order_detail_old","sg_trip_detail","MyUITripDetail","tripdetail_general_info","tripdetail_vehicle_info","tripdetail_payment_info","tripdetail_owner_info","tripdetail_support_info","tripdetail_blog_suggestion","tripdetail_insurance_info","tripdetail_action","Action","sg_cancel_order","sg_review_order","sg_wrap_modal_custom_header","sg_landing_page","sg_landing_page_grid","sg_landing_page_collapse_group","sg_html","sg_row_video_steps_guide","sg_estimated_income","MyUISGEstimatedIncome","sg_seo_title","sg_header_blog_list","sg_travelling","sg_travelling_filter","PageHome","PageCategory","PageDetail","PageHistory","PageAdminListCard","PageUserProfile","PageVerifyAccount","PageMyService","PageEditMyService","PageAddService","PageWSlug","PageSaving","PageHelpUs","PageNotification","PagePayment","Dev_Test","PageMyTrips","PageMyTripsNow","PageMyTripsHistoty","PageMyOrders","PageMyActivitySchedule","PageNotFound","PageSGTravelling","admin_list_card","sg_user_profile","sg_verify_account","sg_my_service","sg_edit_my_service","sg_add_service","sg_saving","helpus","sg_notification","sg_payment","sg_dev_test","mytrips","my_trips_now","my_trips_history","my_orders","my_activity_schedule","sg_not_found","MCInputAddress","MCRadioList","MCCheckboxList","MCInputRange","MCInputSelect","MCInputDatetime","MCNiceSelect","MCInputRate","MCButtonModalForm","MCInputDate","MCSelectCustom","MCInputText","MCInputPassword","MCInputDateString","MCInputCurrency","MCInputPhoneNumber","input_address","input_range","list_radio","list_checkbox","input_select","input_datetime","nice_select","input_rate","button_modal_form","input_date","select_custom","input_text","input_password","input_date_string","input_currency","input_phone_number","input_password_v2","input_date_from_to","input_date_from_to_v2","button_select_address","check_with_icon","input_dual_range","select2_custom_filter","input_datetime_v2","input_address_v2","input_date_from_to_detail","input_date_from_to_search","input_time_from_to_search","ListControl","MyFormControlOne","MC_ic_self_driving","MC_ic_long_term_rent","MC_ic_has_driver","ic_location_pin","ic_heart","ic_vehicle_type","ic_vehicle_make","ic_chevron_down","ic_refresh","ic_filter_category","ic_facebook","ic_youtube","ic_tiktok","ic_instagram","ic_taxi_download","self_driving","long_term_rent","has_driver","ic_qrdownload","discount","car_insurance","mortgage","ic_flag","ic_insurance","ic_gg_map_location_pin","ic_minus","ic_plus","ic_back","filter_table","react_google_places_autocomplete","react_google_places_autocomplete_custom","react_google_places_autocomplete_custom_dropdown","react_google_places_autocomplete_sg_mobile","MyLibOne","HomeCategoryFields","HomeCategoryCard","carCount","config4EachCard","HomeBlogFields","HomeBlogCard","HomeUsageCard","HomePromotionCard","configImage","defaultHeight","backgroundPosition","desktopWidth","desktopHeight","desktopBackgroundPosition","configContent","isTextCenterDesktop","tabletWidth","tabletHeight","tabletBackgroundPosition","mobileHeight","mobileBackgroundPosition","isTextCenterMobile","HomeLandingCard","defaultRel","showBtn","aic_insurance","aic_car","aic_price_tag","aic_minicar","getIconPath","iconName","MAnimationIcon","defaultOptions","animationData","rendererSettings","preserveAspectRatio","HomeDiscoverService","HomeDiscoverServiceCard","itemConfig","wrapStyle","hight","iconAnimationConfig","imgStyle","titleStyle","descriptionStyle","HomeHelps","bgColor","HomeAdvantageCard","WrapSlider","WrapContentItem","HomeCarCard","detailUrl","slideOptions","showAddWishList","renderImgSlider","rate","freeDay","rentalPriceOriginalByDay","rentalPriceByDay","showOriginal","renderContentItem","OneOrderCard","setCanShow","departureDate","rentalDate","iconColor","navBar","BlogUrl","AvatarUrl","WrapOrder","NowCard","getShowTitle","orders","renderOthers","configHover","borderColor","titleColor","RowImageTextHoverBorderCard","classNameLeft","wrapImgStyle","classNameRight","ColumnContentFields","ColumnContentCard","numberOfItems","ImageRowContentCard","imageUrl","dataConfig","contentData","ProductCard","DiscountCard","HistoryCard","ServiceCard","HistoryCardOld","OrderCard","OrderDetailBlogCard","product_card","discount_card","history_card","history_card_old","service_card","now_card","home_card_category","home_card_blog","home_card_promotion","home_card_usage","home_card_landing","home_card_discover_service","home_card_helps","HomeHelpsCard","home_card_advantage","home_card_car","review_card","order_card","order_detail_blog","row_text_image_card","row_image_text_arrow_card","only_text_card","html_table_card","guide_by_images","guide_by_video","column_content_card","row_image_text_hover_border_card","image_row_content_card","sg_travelling_card","only_label","MyControlForm","datefromto","ListMyUI","readonly_configstyle","ModuleAppSigo","MyCardOne","firstSettingLocal","store","GetData","UpdateData","UpdateAvatar","ReportUser","SampleNextArrow","SamplePrevArrow","MUISlideCardV2","refWrapSlide","slickList","querySelector","parentNode","wrapperDiv","insertBefore","swipeToSlide","slidesToShow","speed","slidesToScroll","accessibility","nextArrow","prevArrow","centerPadding","uiNavbarType","EnterAddress","focusing","autoCompleteRef","getDateText","yyyy","mm","getMonth","getDate","getCurAddressText","_address","onRemoveVietNam","updateAdress","doUpdate","skipCloseDropdown","onHanleDropdown","onUpdate","fieldAddressInfo","_placeId","geocodeByPlaceId","_formated","renderRecentlyAddress","WrapRecentlyAddress","recentSearch","_start","_end","updateWithTime","onHandleSelectAddressFromListRecently","defaultRecentlyLocationTimeText","renderPopularLocation","PopularPlaces","WrapPopularAddress","popularAddressTitle","onHandleSelectAddressFromList","onHandleHideFooter","componentRestrictions","country","placeholderInputAddress","configMsg4InputAddress","EnterDate","keySearchDateUI","forceUpdateSearchDate","dataFilter","setDataFilter","configFormBooking","numberOfMonths","orientation","titleDatePicker","classNameControl","needReloadUI","onHandleUpdate","onCloseSelectTime","onCloseCollapse","afterSaveSelectTime","onUpdateDate","EnterTime","titleTimePicker","descriptionTimePicker","onUpdateTime","getHourStringFromTime","padStart","OneCollapse","classNameCollapse","defaultStatus","onChangeCollapseActive","WrapOneCollapse","curCollapseOpen","setCurCollapseOpen","setFocusingAddress","requiredFields","convertHourStringToMilliseconds","timeString","updateDataOnSearchBar","newValuesUpdate","timeStart","timeEnd","resetTimeOfValue","setMilliseconds","isFormatted","getDateToShow","dateStart","dateEnd","_dateStart","m","_dateEnd","getTimeToShow","_timeStart","_timeEnd","btnHideModal","onHandleClear","collapseList","moreCfAddress","getConfigCollapseList","active","renderContent","goBackHome","getDataFilter","_dataFilter","getTimeText","onHanleShare","back","onOpenModal","NavbarDefault","NavbarOrder","AccountSettings","MyUIHomeCarSuggestMobile","sg_nav_default","sg_nav_order","sg_account_settings","sg_header_filter","sg_booking_select_date","slide_card_v2","sg_home_car_suggest_mobile","sg_mobile_search_blog_list","sg_account","relMobile","classNameMobile","titleStyleMobile","imgStyleMobile","descriptionStyleMobile","rightStyle","rightStyleMobile","isHorizontalInMobile","ModuleAppSigoResponsive","ModuleAppSigoGeneric","innerWidth","logoUrl","targetLogoUrl","acceptFiles","hasCheckIdle","checkIdleSecond","checkIdleInterval","checkIdleCountdown","configLogin","showRegister","textWelcome","facebookAppId","facebookAdmins","defaultNS","resources","en","common","vi","Lang_vi","fnGetRequestUIAppConfigFirstSetting","mobileNumberInvalidMessage","acceptedTypeIDUpload","acceptedTypeIDUploadName","afterCallFirstSetting","ModuleCore","ModuleSetting","numeralFormatMoney","timeFormat","symbolDecimal","symbolThousand","Boolean","hostname","MLib","HCore","ReactDOM","I18nextProvider","i18n","zIndex","dom_firstLoading","visibility","ready","registration","initialState","quickOverviewData","clientWidth","rootReducer","combineReducers","produce","draft","FETCH_LOGIN_SUCCESS","login","enhancer","composeEnhancers","compose","applyMiddleware","thunk","createStore","FlowParseAuthInfo","configs","_configs","FlowUpdateAuthInfo","_authInfo","emit","Api","Auth","dispatchLoginSuccess","ExtModulesName","sidenavitems","ScreenConfig","isCheckInvalidProject","titleField","controller","queryFromParent","FETCH_LOGIN_PENDING","FETCH_LOGIN_ERROR","Select_Ext","getValueState","getValueForChange","_defaultChecks","getDefaultValueCheck","getPropsSelect2ByKey","inline","splice","_valueForChange","defaultCheckAll","handleUpdateDefaultValues","initInnerRef","Ext_Control","NotPropsInput","PropsInput","_cInput","getRefInput","getInputValue","onAfterSetValue","kk","Badge","cssModule","pill","attributes","_objectWithoutPropertiesLoose","classes","mapToCssModules","_extends","cModal","RcPopover","trigger","onVisibleChange","overlayClassName","onPopupAlign","node","align","autoScrollIntoViewWhenOutOfScreen","scrollIntoView","behavior","hidePopover"],"mappings":"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","file":"static/js/main.299a5daf.chunk.js","sourcesContent":["import React from \"react\"\r\nimport { Input, InputGroup, InputGroupText } from \"reactstrap\"\r\nimport { MyIcon } from \"src/core/components\"\r\nimport Ext_Input from \"./Ext_Input\"\r\nclass InputPassword extends Ext_Input {\r\n state = {\r\n showPassword: false,\r\n }\r\n render() {\r\n const { showPassword } = this.state\r\n return (\r\n \r\n \r\n {\r\n this.setState({\r\n showPassword: !showPassword,\r\n })\r\n }}\r\n >\r\n \r\n \r\n \r\n )\r\n }\r\n}\r\nexport default InputPassword\r\n","import React from \"react\"\r\nimport { Input } from \"reactstrap\"\r\nimport { HOptions } from \"src/core/helpers\"\r\nimport Ext_Select from \"./Ext_Select\"\r\nclass InputSelect extends Ext_Select {\r\n render() {\r\n const onUpdateValue = this.getOnUpdateValue()\r\n const sourceData = this.getSourceData()\r\n return (\r\n {}}\r\n onChange={ev => {\r\n if (onUpdateValue) {\r\n onUpdateValue(ev.currentTarget.value)\r\n }\r\n }}\r\n >\r\n {HOptions.getListSelectTagBySourceData(sourceData)}\r\n \r\n )\r\n }\r\n}\r\n\r\n//value: string\r\n//defaultValue: string\r\n//onChange: value = string\r\n\r\nexport default InputSelect\r\n","import React from \"react\"\r\nimport { Input } from \"reactstrap\"\r\nimport Ext_Input from \"./Ext_Input\"\r\nclass InputCheckbox extends Ext_Input {\r\n render() {\r\n const propsInput = this.getPropsInput()\r\n return (\r\n {}}\r\n onChange={e => {\r\n if (this.props?.onBlur) {\r\n this.props.onBlur(e)\r\n }\r\n }}\r\n />\r\n )\r\n }\r\n}\r\n\r\n//value: string\r\n//defaultValue: string\r\n//onChange: value = string\r\n\r\nexport default InputCheckbox\r\n","import React from \"react\"\r\nimport { Input } from \"reactstrap\"\r\nclass InputCheckbox extends React.Component {\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default InputCheckbox\r\n","import React from \"react\"\r\nimport { Input } from \"reactstrap\"\r\nclass InputRadio extends React.Component {\r\n render() {\r\n return \r\n }\r\n}\r\n\r\n//value: string\r\n//defaultValue: string\r\n//onChange: value = string\r\n\r\nexport default InputRadio\r\n","import React from \"react\"\r\nimport { Input } from \"reactstrap\"\r\nimport classnames from \"classnames\"\r\nclass InputRange extends React.Component {\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\n//value: string\r\n//defaultValue: string\r\n//onChange: value = string\r\n\r\nexport default InputRange\r\n","import React from \"react\"\r\nimport { Input } from \"reactstrap\"\r\nclass InputColor extends React.Component {\r\n render() {\r\n return \r\n }\r\n}\r\n\r\n//value: string\r\n//defaultValue: string\r\n//onChange: value = string\r\n\r\nexport default InputColor\r\n","import React from \"react\"\r\nimport { Input } from \"reactstrap\"\r\nclass InputDate extends React.Component {\r\n render() {\r\n return \r\n }\r\n}\r\n\r\n//value: string\r\n//defaultValue: string\r\n//onChange: value = string\r\n\r\nexport default InputDate\r\n","import React from \"react\"\r\nimport { Input } from \"reactstrap\"\r\nclass InputTime extends React.Component {\r\n render() {\r\n return \r\n }\r\n}\r\n\r\n//value: string\r\n//defaultValue: string\r\n//onChange: value = string\r\n\r\nexport default InputTime\r\n","import React from \"react\"\r\nimport classnames from \"classnames\"\r\nimport { FormGroup, Label } from \"reactstrap\"\r\nimport InputCheckbox from \"./InputCheckbox\"\r\nimport Ext_Select from \"./Ext_Select\"\r\nclass SelectCheckbox extends Ext_Select {\r\n render() {\r\n const sourceData = this.getSourceData()\r\n return (\r\n
\r\n {sourceData &&\r\n sourceData.length > 0 &&\r\n sourceData.map((v, i) => {\r\n return (\r\n \r\n {\r\n this.onCheckOption(v)\r\n }}\r\n />\r\n {\r\n this.onCheckOption(v)\r\n }}\r\n >\r\n {v.Text}\r\n \r\n \r\n )\r\n })}\r\n
\r\n )\r\n }\r\n}\r\n\r\n//value: string\r\n//defaultValue: string\r\n//onChange: value = string\r\n\r\nexport default SelectCheckbox\r\n","import React from \"react\"\r\nimport classnames from \"classnames\"\r\nimport { FormGroup, Label } from \"reactstrap\"\r\nimport InputRadio from \"./InputRadio\"\r\nimport Ext_Select from \"./Ext_Select\"\r\nclass SelectCheckbox extends Ext_Select {\r\n getMulti = () => {\r\n return false\r\n }\r\n render() {\r\n const sourceData = this.getSourceData()\r\n return (\r\n
\r\n {sourceData &&\r\n sourceData.length > 0 &&\r\n sourceData.map((v, i) => {\r\n return (\r\n \r\n {\r\n this.onCheckOption(v)\r\n }}\r\n />\r\n {\r\n this.onCheckOption(v)\r\n }}\r\n >\r\n {v.Text}\r\n \r\n \r\n )\r\n })}\r\n
\r\n )\r\n }\r\n}\r\n\r\n//value: string\r\n//defaultValue: string\r\n//onChange: value = string\r\n\r\nexport default SelectCheckbox\r\n","import React from \"react\"\r\nimport classnames from \"classnames\"\r\nimport { FormGroup, Label } from \"reactstrap\"\r\nimport InputSwitch from \"./InputSwitch\"\r\nimport Ext_Select from \"./Ext_Select\"\r\nclass SelectCheckbox extends Ext_Select {\r\n render() {\r\n const sourceData = this.getSourceData()\r\n return (\r\n
\r\n {sourceData &&\r\n sourceData.length > 0 &&\r\n sourceData.map((v, i) => {\r\n return (\r\n \r\n {\r\n this.onCheckOption(v)\r\n }}\r\n />\r\n {\r\n this.onCheckOption(v)\r\n }}\r\n >\r\n {v.Text}\r\n \r\n \r\n )\r\n })}\r\n
\r\n )\r\n }\r\n}\r\n\r\n//value: string\r\n//defaultValue: string\r\n//onChange: value = string\r\n\r\nexport default SelectCheckbox\r\n","import { MyControlHelpers } from \"@macashipo/mlib\"\r\nimport InputText from \"./InputText\"\r\nimport InputPassword from \"./InputPassword\"\r\nimport InputTextarea from \"./InputTextarea\"\r\nimport InputSelect from \"./InputSelect\"\r\nimport InputCheckbox from \"./InputCheckbox\"\r\nimport InputSwitch from \"./InputSwitch\"\r\nimport InputRadio from \"./InputRadio\"\r\nimport InputRange from \"./InputRange\"\r\nimport InputColor from \"./InputColor\"\r\nimport InputDate from \"./InputDate\"\r\nimport InputTime from \"./InputTime\"\r\nimport SelectCheckbox from \"./SelectCheckbox\"\r\nimport SelectRadio from \"./SelectRadio\"\r\nimport SelectSwitch from \"./SelectSwitch\"\r\nconst ListNoLazy = {\r\n text: InputText,\r\n password: InputPassword,\r\n textarea: InputTextarea,\r\n select: InputSelect,\r\n checkbox: InputCheckbox,\r\n switch: InputSwitch,\r\n radio: InputRadio,\r\n range: InputRange,\r\n color: InputColor,\r\n date: InputDate,\r\n time: InputTime,\r\n select_checkbox: SelectCheckbox,\r\n select_switch: SelectSwitch,\r\n select_radio: SelectRadio,\r\n}\r\n\r\nMyControlHelpers.addTypesFromListWithoutLazy(ListNoLazy)\r\n\r\nexport default MyControlHelpers\r\n","import { MyModal } from \"src/core/components\"\r\n\r\nexport const showAlert = ({ component, className = \"\", opts = {} }) => {\r\n MyModal.showMyDialog({\r\n title: \"\",\r\n component: component,\r\n size: \"md\",\r\n showFooter: false,\r\n showHeader: false,\r\n modalClassName: className,\r\n ...opts,\r\n })\r\n}\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAADcCAYAAAAbWs+BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAydpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDcuMS1jMDAwIDc5LmIwZjhiZTkwLCAyMDIxLzEyLzE1LTIxOjI1OjE1ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjMuMiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyMEY4MjdCNEFFREMxMUVDODFCRjg0M0Q0ODk4RTM0MyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyMEY4MjdCNUFFREMxMUVDODFCRjg0M0Q0ODk4RTM0MyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjI3QjQ3MEVEQUU1MDExRUM4MUJGODQzRDQ4OThFMzQzIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjI3QjQ3MEVFQUU1MDExRUM4MUJGODQzRDQ4OThFMzQzIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+45+JKQAAGWVJREFUeNrs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\"","import axios, { AxiosRequestConfig } from \"axios\"\r\nimport i18next from \"i18next\"\r\nimport { authGetAuthorizationHeader, authLogout } from \"./auth\"\r\nimport { mergeObjIfExist, get, xorCrypt } from \"./utils\"\r\nimport { logApi } from \"./log\"\r\nimport { showApiMsg } from \"./ui\"\r\nimport { showToastError } from \"./ui\"\r\nimport { HUtils, HC, HConstant } from \".\"\r\nimport { GlobalLockScreen } from \"../components\"\r\nconst ApiMethod = {\r\n post: \"POST\",\r\n get: \"GET\",\r\n}\r\nconst ApiContentType = {\r\n json: \"application/json\",\r\n form: \"application/x-www-form-urlencoded\",\r\n multipart: \"multipart/form-data\",\r\n}\r\n\r\nconst ApiConfig: IConfigApi = {\r\n baseUrl: \"\",\r\n timeout: 5 * 60 * 1000,\r\n fnLogout: () => {},\r\n appName: \"\",\r\n firstloadID: \"\",\r\n}\r\n\r\nexport const initApi = (configApi?: IConfigApi) => {\r\n mergeObjIfExist(ApiConfig, configApi)\r\n ApiConfig.firstloadID = `${Math.random()\r\n .toString(36)\r\n .slice(2, 6)}_${new Date().getTime()}`\r\n}\r\n\r\nconst apiShareError = (config: IApiRequestConfig, error, resolve, reject) => {\r\n logApi(\"apiShareError:\", error, config, error.response)\r\n const statusCode = get(error, \"response.status\")\r\n let _msgError = \"Error!\"\r\n let _url = config.url || `${config.path}/${config.name}`\r\n if (statusCode === 401) {\r\n if (ApiConfig.fnLogout) {\r\n ApiConfig.fnLogout({ forceLogout: true })\r\n } else {\r\n authLogout({ forceLogout: true })\r\n }\r\n } else if (statusCode === 404) {\r\n showToastError(\r\n i18next.t(\"api.Api not found\", {\r\n name: _url,\r\n })\r\n )\r\n } else if (statusCode === 406) {\r\n showToastError(\r\n i18next.t(\"api.Not Acceptable\", {\r\n name: _url,\r\n })\r\n )\r\n } else if (statusCode === 413) {\r\n showToastError(\r\n i18next.t(\"api.Your request was too large\", {\r\n name: _url,\r\n })\r\n )\r\n } else if (statusCode === 400) {\r\n _msgError = get(error, \"response.data.error_description\")\r\n if (_msgError && config.hideMsgError !== true) {\r\n showToastError(_msgError)\r\n }\r\n } else if (error.response === undefined && error.toJSON) {\r\n _msgError = get(error.toJSON(), \"message\")\r\n if (_msgError) {\r\n showToastError(_msgError)\r\n }\r\n }\r\n logException({\r\n AIPUrl: _url,\r\n Data: config.data || {},\r\n Error: {\r\n status: statusCode || -1,\r\n userAgent: `${navigator?.userAgent}`,\r\n },\r\n })\r\n reject(error, get(error, \"response.data\"))\r\n}\r\nconst apiShareSuccess = (\r\n config: IApiRequestConfig,\r\n response,\r\n resolve,\r\n reject\r\n) => {\r\n logApi(\"apiShareSuccess:\", response)\r\n if (response && response.data) {\r\n if (\r\n response.data.StatusCode === 1 ||\r\n response.data.StatusCode === 200 ||\r\n config[\"noCheckStatusCode\"] === true ||\r\n HUtils.objHasKey(response.data, \"user_id\") //token\r\n ) {\r\n showApiMsg(response.data.Msg, config)\r\n resolve(response.data)\r\n } else {\r\n if (config.hideMsgError !== true) {\r\n showToastError(response.data.Msg)\r\n }\r\n reject(\r\n {\r\n code: \"2\",\r\n msginui: response.data.MsgShowInUI,\r\n msg: response.data.Msg || \"Error from server\",\r\n response: response,\r\n },\r\n response\r\n )\r\n if (response.data.StatusCode === 401) {\r\n if (ApiConfig.fnLogout) {\r\n ApiConfig.fnLogout({ forceLogout: true })\r\n } else {\r\n authLogout({ forceLogout: true })\r\n }\r\n }\r\n }\r\n } else {\r\n reject(\r\n {\r\n code: \"1\",\r\n msg: \"No response data\",\r\n response: response,\r\n },\r\n response\r\n )\r\n }\r\n}\r\nconst apiBuildAxiosRequestHeader = function (config: IApiRequestConfig): any {\r\n let _config: any = {\r\n Accept: ApiContentType.json,\r\n \"Content-Type\": config.customContentType || ApiContentType.json,\r\n ...config.customHeader,\r\n }\r\n let _authorization = authGetAuthorizationHeader()\r\n if (_authorization) {\r\n _config.Authorization = _authorization\r\n }\r\n return _config\r\n}\r\nconst apiBuildAxiosRequestUrl = function (config: IApiRequestConfig) {\r\n let _url = \"\"\r\n if (config.url) {\r\n if (config.url.startsWith(\"http\")) {\r\n _url = config.url\r\n } else if (config.url.startsWith(\"/\")) {\r\n _url = `${ApiConfig.baseUrl}${config.url}`\r\n } else if (config.url.indexOf(\"api/v1\") > -1) {\r\n _url = `${ApiConfig.baseUrl}/${config.url}`\r\n } else {\r\n _url = `${ApiConfig.baseUrl}/api/v1/${config.url}`\r\n }\r\n } else if (config.path || config.name) {\r\n _url = `${ApiConfig.baseUrl}/api/v1/${config.path}/${config.name}`\r\n }\r\n return _url\r\n}\r\nconst buildRequestDataForPost = (requestData: any) => {\r\n // console.warn(\"buildRequestDataForPost:\", requestData)\r\n let _request = {\r\n UI_StartAt: new Date().getTime(),\r\n UI_FirstID: ApiConfig.firstloadID,\r\n AppName: ApiConfig.appName,\r\n Url: window.location.href,\r\n DocumentWidth: window.screen.width,\r\n ...requestData,\r\n UI_TimezoneOffset: new Date().getTimezoneOffset(),\r\n }\r\n return _request\r\n}\r\nconst buildRequestDataForForm = (requestData: any) => {\r\n return Object.keys(requestData)\r\n .map(function (key) {\r\n return (\r\n encodeURIComponent(key) + \"=\" + encodeURIComponent(requestData[key])\r\n )\r\n })\r\n .join(\"&\")\r\n}\r\nconst buildRequestData = (config: IApiRequestConfig) => {\r\n var data = config.data\r\n if (config.method && config.method.toLowerCase() === \"post\") {\r\n if (data instanceof FormData) {\r\n return data\r\n }\r\n if (data && typeof data === \"object\") {\r\n data = buildRequestDataForPost(config.data)\r\n }\r\n }\r\n return data\r\n}\r\nconst apiDefaultAxiosRequestConfig = function (config: IApiRequestConfig) {\r\n return {\r\n timeout: config.timeout || ApiConfig.timeout, //5 minute\r\n }\r\n}\r\nconst apiBuildAxiosRequestConfig = function (\r\n config: IApiRequestConfig\r\n): AxiosRequestConfig {\r\n let _config: AxiosRequestConfig = {\r\n ...apiDefaultAxiosRequestConfig(config),\r\n method: config.method,\r\n url: apiBuildAxiosRequestUrl(config),\r\n headers: apiBuildAxiosRequestHeader(config),\r\n data: buildRequestData(config),\r\n }\r\n if (config[\"responseType\"]) {\r\n _config[\"responseType\"] = config[\"responseType\"]\r\n }\r\n return _config\r\n}\r\nexport const apiGeneric = (config: IApiRequestConfig | any) => {\r\n let _config = apiBuildAxiosRequestConfig(config)\r\n logApi(\"apiGeneric:\", _config)\r\n !config?.uiConfig?.noLockScreen && GlobalLockScreen.show()\r\n return new Promise(\r\n (resolve: (response: IServer.IApiResponse) => void, reject) => {\r\n return axios(_config)\r\n .then(response => {\r\n apiShareSuccess(config, response, resolve, reject)\r\n GlobalLockScreen.hide()\r\n })\r\n .catch(error => {\r\n apiShareError(config, error, resolve, reject)\r\n GlobalLockScreen.hide()\r\n })\r\n }\r\n )\r\n}\r\n\r\nexport const apiGet = (config: IApiRequestConfig) => {\r\n return apiGeneric({\r\n ...config,\r\n method: ApiMethod.get,\r\n customContentType: ApiContentType.json,\r\n })\r\n}\r\n\r\nexport const apiPost = (config: IApiRequestConfig) => {\r\n return apiGeneric({\r\n ...config,\r\n method: ApiMethod.post,\r\n customContentType: ApiContentType.json,\r\n data: config.data,\r\n })\r\n}\r\n\r\nexport const apiUpload = (config: IApiRequestConfig) => {\r\n var _formData = new FormData()\r\n let _files = HUtils.get(config, \"files\")\r\n if (_files && _files.length > 0) {\r\n for (let i = 0; i < _files.length; i++) {\r\n _formData.append(\"file[]\", _files[i])\r\n }\r\n }\r\n return apiGeneric({\r\n ...config,\r\n method: ApiMethod.post,\r\n data: _files ? _formData : config.data,\r\n customContentType: ApiContentType.multipart,\r\n })\r\n // return apiGeneric({\r\n // ...config,\r\n // method: ApiMethod.post,\r\n // customContentType: ApiContentType.multipart,\r\n // })\r\n}\r\n\r\nexport const apiPostForm = (config: IApiRequestConfig) => {\r\n return apiGeneric({\r\n ...config,\r\n method: ApiMethod.post,\r\n customContentType: ApiContentType.form,\r\n data: buildRequestDataForForm(config.data),\r\n })\r\n}\r\n\r\nexport const apiWithConfigApi = (configApi: any) => {\r\n let _config: any = {\r\n method: configApi.method,\r\n url: configApi.url,\r\n }\r\n if (configApi.query) {\r\n _config.data = configApi.query\r\n console.warn(\"data:\", _config.data)\r\n }\r\n if (configApi.path && configApi.name) {\r\n _config.path = configApi.path\r\n _config.name = configApi.name\r\n }\r\n if (configApi.timeout) {\r\n _config.timeout = configApi.timeout\r\n }\r\n return apiGeneric({\r\n ..._config,\r\n method: ApiMethod.post,\r\n customContentType: ApiContentType.json,\r\n data: buildRequestDataForPost(_config.data),\r\n })\r\n}\r\n\r\nfunction logException({\r\n AIPUrl,\r\n Data,\r\n Error,\r\n}: {\r\n AIPUrl: any\r\n Data: any\r\n Error: any\r\n}) {\r\n let _url =\r\n HC.getConfig(HConstant.ConfigAppExt.urlForLogException) ||\r\n `${ApiConfig.baseUrl}/api/v1/Exception/SaveLog`\r\n let _userId = HC.getAuthUserId() || \"\"\r\n let _userName = HC.getAuthUserName() || \"\"\r\n let _data = {\r\n LogBy: `[${_userId}] ${_userName}`,\r\n AIPUrl: AIPUrl,\r\n Url: window.location.href,\r\n Error: Error,\r\n Data: Data,\r\n }\r\n console.warn(\"logException:\", _data)\r\n if (\r\n _data.Data &&\r\n typeof _data.Data == \"string\" &&\r\n _data.Data.startsWith(\"grant_type\")\r\n ) {\r\n let _rg = new RegExp(\"&password=([^&]*)&\")\r\n let _match = _rg.exec(_data.Data)\r\n if (_match && _match[1]) {\r\n let _encrypt = encodeURIComponent(xorCrypt(_match[1]))\r\n let _newData = _data.Data.replace(\r\n `password=${_match[1]}`,\r\n `password=${_encrypt}`\r\n )\r\n _data.Data = _newData\r\n // console.log(\"_newData:\", _newData)\r\n }\r\n }\r\n axios({\r\n method: \"POST\",\r\n url: _url,\r\n data: _data,\r\n })\r\n .then(function (response) {\r\n console.warn(\"axios response:\", response)\r\n })\r\n .catch(function (error) {\r\n console.warn(\"axios error:\", error)\r\n })\r\n}\r\n","export default \"data:image/jpeg;base64,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\"","import { HJson } from \"@macashipo/mlib\"\r\n\r\nexport const getObj = HJson.getObj\r\nexport const getString = HJson.getString\r\nexport const json2Obj = HJson.json2Obj\r\nexport const obj2Json = HJson.getString\r\n","import { HRegex } from \"@macashipo/mlib\"\r\nexport const RGSquareBracket = HRegex.RGSquareBracket\r\n","import { createBrowserHistory, createHashHistory } from \"history\"\r\nimport { HLink } from \"@macashipo/mlib\"\r\n// import { mergeObjIfExist } from \"./utils\"\r\n// export const getParameterByName = HLink.getParameterByName\r\n\r\n// const LinkInfo: any = {\r\n// usingHash: false,\r\n// history: null,\r\n// }\r\n\r\n// export const initLink = (info: any) => {\r\n// mergeObjIfExist(LinkInfo, info)\r\n// if (LinkInfo.usingHash) {\r\n// LinkInfo.history = createHashHistory()\r\n// } else {\r\n// LinkInfo.history = createBrowserHistory()\r\n// }\r\n// console.warn(\"initLink:\", LinkInfo)\r\n// }\r\n\r\n// export const getHistory = () => {\r\n// return LinkInfo.history\r\n// }\r\n\r\n// export const push = (link: string) => {\r\n// if (LinkInfo.history) {\r\n// LinkInfo.history.push(link)\r\n// } else {\r\n// window.location.href = link\r\n// }\r\n// }\r\n\r\n// export const openUrl = function (link: string, target: string = \"_blank\") {\r\n// if (link) {\r\n// if (link.startsWith(\"http\")) {\r\n// return window.open(link, target)\r\n// } else if (link.indexOf(\"://\") > -1) {\r\n// return window.open(link, target)\r\n// }\r\n// }\r\n// if (target === \"_blank\") {\r\n// window.open(link, target)\r\n// } else {\r\n// push(link)\r\n// }\r\n// }\r\n\r\nexport const initLink = (info: any) => {\r\n if (info.usingHash) {\r\n info.history = createHashHistory()\r\n } else {\r\n info.history = createBrowserHistory()\r\n }\r\n HLink.initLink(info)\r\n}\r\nexport const openUrl = HLink.openUrl\r\nexport const push = HLink.push\r\nexport default HLink\r\n","import { openUrl } from \"./link\"\r\nimport { showDialog } from \"./ui\"\r\nexport const parseResponseButtonApi = function (\r\n res: any,\r\n { target = \"_blank\", autoOpenLink = false } = {}\r\n) {\r\n if (res && res.Data) {\r\n let _data = res.Data\r\n if (_data.FullPath) {\r\n if (autoOpenLink === true) {\r\n openUrl(_data.FullPath, target)\r\n } else {\r\n showDialog({\r\n title: _data.FullPathTitle || \"Link\",\r\n msg: (\r\n
\r\n
{_data.FullPathInfo}
\r\n \r\n {_data.FullPath}\r\n \r\n
\r\n ),\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import i18next from \"i18next\"\r\nexport const initI18n = (config?: any) => {\r\n i18next.init(config)\r\n}\r\n","import HConstant from \"./constant\"\r\nconst C: {\r\n HConfig: IHConfig | null\r\n initC: (HConfig: IHConfig) => void\r\n getAuthUserName: () => any\r\n getAuthUserId: () => any\r\n getConfig: (key: string) => any\r\n getDefaultFormatDate: () => string\r\n} = {\r\n HConfig: null,\r\n initC(HConfig: IHConfig) {\r\n C.HConfig = HConfig\r\n },\r\n getAuthUserName() {\r\n return C.HConfig?.getAuthUserName()\r\n },\r\n getAuthUserId() {\r\n return C.HConfig?.getAuthUserId()\r\n },\r\n getConfig(key: string) {\r\n return C.HConfig?.getConfig(key)\r\n },\r\n getDefaultFormatDate() {\r\n return C.HConfig?.getConfig(HConstant.ConfigAppExt.dateFormat) || \"DD-MMMYY\"\r\n },\r\n}\r\n\r\nexport default C\r\n","import HConstant from \"./constant\"\r\nimport { initApi } from \"./api\"\r\nimport { initAuth, getUserID, getUserName } from \"./auth\"\r\nimport { initLink, push } from \"./link\"\r\nimport { initI18n } from \"./i18n\"\r\nimport C from \"./c\"\r\nimport { initLocalStorage } from \"./localStorage\"\r\nimport {\r\n addArray2Array,\r\n // isArray,\r\n isFunction,\r\n mergeObjIfExist,\r\n runFuntion,\r\n} from \"./utils\"\r\nimport { HModules, HCF } from \"@macashipo/mlib\"\r\nconst configApi: IConfigApi = {\r\n baseUrl: \"\",\r\n timeout: 120000,\r\n}\r\n\r\nconst configRoutes: IRouteConfig = {\r\n routesPublic: [],\r\n routesPrivate: [],\r\n}\r\n\r\nconst configLink: IConfigLink = {\r\n usingHash: false,\r\n}\r\n\r\nconst configSidebar = {\r\n list: [],\r\n}\r\nconst Config: IHConfig = {\r\n appInfo: {\r\n title: \"AllianceITSC\",\r\n appName: \"allianceitsc\",\r\n home: \"/home\",\r\n },\r\n configApp: null,\r\n configAppExt: null,\r\n configI18n: {},\r\n configLink: configLink,\r\n configApi: configApi,\r\n configAuth: {},\r\n configModules: {},\r\n configRoutes: configRoutes,\r\n configSidebar: configSidebar,\r\n extAfterLogin: [],\r\n extSettingParts: [],\r\n headerComponent: null,\r\n initConfigAppExt() {\r\n if (window[\"_ConfigApp\"]) {\r\n Config.configAppExt = window[\"_ConfigApp\"]\r\n HCF.setCFMultiObj(Config.configAppExt)\r\n mergeObjIfExist(Config.appInfo, window[\"_ConfigApp\"])\r\n //\r\n if (\r\n Config.configAppExt &&\r\n Config.configAppExt.baseUrl &&\r\n Config.configApi\r\n ) {\r\n Config.configApi.baseUrl = Config.configAppExt.baseUrl\r\n }\r\n }\r\n },\r\n initConfigApp(configApp: IConfigApp = {}) {\r\n for (let k of Object.keys(configApp)) {\r\n if (\r\n k.startsWith(\"config\") ||\r\n k === \"fnList\" ||\r\n k === \"appInfo\" ||\r\n k === \"UIAppConfig\"\r\n ) {\r\n HCF.setCFMultiObj(configApp[k])\r\n mergeObjIfExist(Config[k], configApp[k])\r\n }\r\n }\r\n Config.configApp = configApp\r\n Config.initConfigAppExt()\r\n C.initC(Config)\r\n //other helpers\r\n initLink(Config.configLink)\r\n initI18n(Config.configI18n)\r\n initLocalStorage({})\r\n initApi({ ...Config.configApi, appName: Config.appInfo.appName })\r\n initAuth({\r\n ...configApp.configAuth,\r\n afterLogin: () => {\r\n // console.warn(\"afterLogin\")\r\n if (configApp.configAuth && configApp.configAuth.afterLogin) {\r\n configApp.configAuth.afterLogin()\r\n } else {\r\n //go to home - shouldnot push -> create loop\r\n // console.warn(\"push to home\")\r\n // push(Config.appInfo.home)\r\n }\r\n if (Config.extAfterLogin && Config.extAfterLogin.length > 0) {\r\n for (let fn of Config.extAfterLogin) {\r\n if (isFunction(fn)) {\r\n ;(fn as () => void)()\r\n }\r\n }\r\n }\r\n },\r\n })\r\n\r\n //modules\r\n HModules.initModules(\r\n configApp.modules as any[],\r\n Config.configModules,\r\n Config\r\n )\r\n // if (configApp.modules && configApp.modules.length > 0) {\r\n // for (let i = 0; i < configApp.modules.length; i++) {\r\n // runFuntion(\r\n // configApp.modules[i],\r\n // HConstant.Modules.FnList.runAfterInit,\r\n // [Config]\r\n // )\r\n // }\r\n // }\r\n runFuntion(configApp.fnList, HConstant.ConfigApp.FnList.onAfterInit, [\r\n Config,\r\n ])\r\n },\r\n fnList: {},\r\n UIAppConfig: {},\r\n getConfig(key: string) {\r\n if (Config.configAppExt && Config.configAppExt.hasOwnProperty(key)) {\r\n return Config.configAppExt[key]\r\n }\r\n if (Config.UIAppConfig && Config.UIAppConfig.hasOwnProperty(key)) {\r\n return Config.UIAppConfig[key]\r\n }\r\n return Config[key]\r\n },\r\n getPublicRoutes() {\r\n return Config.configRoutes.routesPublic\r\n },\r\n getPrivateRoutes() {\r\n return Config.configRoutes.routesPrivate\r\n },\r\n addPublicRoutes(list: IServer.IConfigPage[]) {\r\n addArray2Array(Config.configRoutes.routesPublic, list)\r\n },\r\n addPrivateRoutes(list: IServer.IConfigPage[]) {\r\n addArray2Array(Config.configRoutes.routesPrivate, list)\r\n },\r\n addSidebarItems(list) {\r\n addArray2Array(Config.configSidebar.list, list)\r\n },\r\n registerAfterLogin(fn: never) {\r\n Config.extAfterLogin.push(fn)\r\n },\r\n registerExtSettingParts(fn: never) {\r\n Config.extSettingParts.push(fn)\r\n },\r\n registerHeaderTitle(component) {\r\n Config.headerComponent = component\r\n },\r\n changeTitle(title?: any, headerTitle?: any) {\r\n window.document.title = `${title != null ? title + \" - \" : \"\"}${\r\n Config.appInfo.title\r\n }`\r\n if (headerTitle != null && Config.fnList[\"updateHeaderTitle\"]) {\r\n Config.fnList[\"updateHeaderTitle\"](headerTitle)\r\n }\r\n },\r\n goToHome() {\r\n push(Config.appInfo.home)\r\n },\r\n replaceToHome() {\r\n window.location.replace(Config.appInfo.home)\r\n },\r\n getAuthUserName() {\r\n return getUserName()\r\n },\r\n getAuthUserId() {\r\n return getUserID()\r\n },\r\n getAppName() {\r\n return Config.appInfo.appName\r\n },\r\n addBodyClass(className: string) {\r\n document.body.classList.add(className)\r\n },\r\n removeBodyClass(className: string) {\r\n document.body.classList.remove(className)\r\n },\r\n getConfigFooter() {\r\n let _footer =\r\n 'Powered by AllianceITSC'\r\n let _configFooter = {\r\n show: true,\r\n footer: _footer,\r\n }\r\n if (Config.configAppExt) {\r\n if (Config.configAppExt.hasOwnProperty(\"footer\")) {\r\n _configFooter.footer = Config.configAppExt[\"footer\"]\r\n }\r\n }\r\n return _configFooter\r\n },\r\n}\r\nwindow[\"HConfig\"] = Config\r\nexport default Config\r\n","const ServiceWorker = {\r\n isSupported() {\r\n if (!(\"serviceWorker\" in navigator)) {\r\n // Service Worker isn't supported on this browser, disable or hide UI.\r\n return false\r\n }\r\n\r\n if (!(\"PushManager\" in window)) {\r\n // Push isn't supported on this browser, disable or hide UI.\r\n return false\r\n }\r\n\r\n return true\r\n },\r\n registerSW(link) {\r\n return navigator.serviceWorker.register(link)\r\n },\r\n getSW(link) {\r\n return navigator.serviceWorker.getRegistration(link)\r\n },\r\n enableNotification(linkSW) {\r\n Notification.requestPermission().then(result => {\r\n if (result === \"granted\") {\r\n return ServiceWorker.registerSW(linkSW)\r\n }\r\n })\r\n },\r\n disableNotification(linkSW) {\r\n ServiceWorker.getSW(linkSW).then(sw => {\r\n if (sw) {\r\n sw.unregister()\r\n }\r\n })\r\n },\r\n showNotification(linkSW, body, tag, data) {\r\n ServiceWorker.getSW(linkSW).then(sw => {\r\n if (sw) {\r\n const title = \"Notification with Data\"\r\n const options = {\r\n body:\r\n body ||\r\n \"This notification has data attached to it that is printed \" +\r\n \"to the console when it's clicked.\",\r\n tag: tag || \"data-notification\",\r\n data: data || {\r\n createdAt: new Date(Date.now()).toString(),\r\n message: \"Hello, World!\",\r\n },\r\n }\r\n sw.showNotification(title, options)\r\n } else {\r\n console.warn(\"Missing service worker\", sw)\r\n }\r\n })\r\n },\r\n}\r\n\r\nexport default ServiceWorker\r\n","import { HFormat, HIs, HColor } from \"@macashipo/mlib\"\r\nimport HC from \"./c\"\r\nimport moment from \"moment\"\r\nimport Numberal from \"src/libs/NumeralJs/numeral\"\r\n\r\nHFormat.Types[\"date\"] = {\r\n format: (value: any, configFormat: any) => {\r\n // console.warn(\"format date:\", value, configFormat)\r\n if (HIs.isDateValue(value)) {\r\n return moment(value).format(\r\n configFormat.format || HC.getDefaultFormatDate()\r\n )\r\n }\r\n return \"\"\r\n },\r\n}\r\nHFormat.Types[\"money\"] = {\r\n format: (value: any) => {\r\n let _value = value\r\n _value = Numberal(value).format(\"0,0.00\")\r\n\r\n return _value\r\n },\r\n}\r\n\r\nHFormat.Types[\"colorTextByBackground\"] = {\r\n format: (value: any, configFormat: any) => {\r\n let _color = HColor.getTextWB(value, configFormat)\r\n return _color\r\n },\r\n}\r\nexport default HFormat\r\n","import { HIs, HLink } from \"@macashipo/mlib\"\r\nimport * as HJson from \"./json\"\r\nimport * as HUtils from \"./utils\"\r\nimport * as HLocalStorage from \"./localStorage\"\r\nimport * as HLog from \"./log\"\r\nimport * as HApi from \"./api\"\r\nimport * as HAuth from \"./auth\"\r\nimport * as HUI from \"./ui\"\r\nimport * as HRegex from \"./regex\"\r\n// import * as HLink from \"./link\"\r\nimport * as HQuery from \"./query\"\r\nimport * as HOptions from \"./options\"\r\nimport HConfig from \"./config\"\r\nimport HConstant from \"./constant\"\r\nimport HServiceWorker from \"./serviceWorker\"\r\nimport HFormat from \"./format\"\r\nimport HC from \"./c\"\r\nexport {\r\n HIs,\r\n HC,\r\n HLink,\r\n HJson,\r\n HUtils,\r\n HLocalStorage,\r\n HLog,\r\n HConfig,\r\n HApi,\r\n HAuth,\r\n HConstant,\r\n HUI,\r\n HRegex,\r\n HServiceWorker,\r\n HQuery,\r\n HOptions,\r\n HFormat,\r\n}\r\n\r\nHUtils.initMCore(\"HJson\", HJson)\r\nHUtils.initMCore(\"HUtils\", HUtils)\r\nHUtils.initMCore(\"HUI\", HUI)\r\n// HUtils.initMCore(\"HApi\", HApi)\r\n// HUtils.initMCore(\"HAuth\", HAuth)\r\n","export const SGPaths = {\r\n home: \"/\",\r\n searchxe: \"/searchxe\",\r\n chitietxe: \"/:vehicle/:code\",\r\n chuyendicuatoi: \"/tai-khoan/chuyendi\",\r\n lichsuchuyendi: \"/tai-khoan/chuyendi/\",\r\n cauhoithuonggap: \"/cau-hoi-thuong-gap\",\r\n huongdandangkyxe: \"/huong-dan-dang-ky-xe\",\r\n huongdandatxe: \"/huong-dan-dat-xe\",\r\n xecuatoi: \"/tai-khoan/doixe\",\r\n themxe: \"/tai-khoan/add\",\r\n chinhsuaxe: \"/tai-khoan/edit/:id\",\r\n taikhoancuatoi: \"/tai-khoan/info\",\r\n xacthuctaikhoan: \"/tai-khoan/xac-thuc\",\r\n thongtintaikhoan: \"/thong-tin/:id\",\r\n tichluy: \"/tai-khoan/sigo-xu\",\r\n slug: \"/:slug\",\r\n thongbao: \"/tai-khoan/thong-bao\",\r\n thanhtoan: \"/tai-khoan/thanh-toan\",\r\n dev_test: \"/dev_test\",\r\n donhanghientai: \"/tai-khoan/don-hang-hien-tai\",\r\n lichhoatdong: \"/tai-khoan/lich-hoat-dong\",\r\n danhmucxe: \"/tai-khoan/danh-muc-xe\",\r\n taikhoan: \"/account\",\r\n notfound: \"/404\",\r\n sigotravelling: \"/sigo-travelling\",\r\n}\r\nexport const SGNewPaths = {\r\n searchxe: \"/search\",\r\n chuyendicuatoi: \"/account/my-trips\",\r\n lichsuchuyendi: \"/account/my-trips\",\r\n xecuatoi: \"/account/my-cars\",\r\n themxe: \"/account/my-cars/add\",\r\n chinhsuaxe: \"/account/my-cars/edit/:id\",\r\n taikhoancuatoi: \"/account/personal-info\",\r\n xacthuctaikhoan: \"/account/verify\",\r\n thongtintaikhoan: \"/profile/:id\",\r\n tichluy: \"/account/savings\",\r\n thongbao: \"/account/notifications\",\r\n thanhtoan: \"/account/payments\",\r\n donhanghientai: \"/account/my-orders\",\r\n lichhoatdong: \"/account/activity-schedule\",\r\n danhmucxe: \"/account/my-cars\",\r\n}\r\n","import { apiGeneric } from \"src/core/helpers/api\"\r\nconst ApiGeneric = ({\r\n request,\r\n data,\r\n successCallBack,\r\n errorCallBack,\r\n customHeader,\r\n}) => {\r\n apiGeneric({\r\n method: request.method || \"POST\",\r\n url: request.url || `${request.path}/${request.name}` || \"NoApiUrl\",\r\n data,\r\n customHeader: customHeader,\r\n })\r\n .then(v => {\r\n if (successCallBack) {\r\n successCallBack(v)\r\n }\r\n })\r\n .catch(e => {\r\n if (errorCallBack) {\r\n errorCallBack(e)\r\n }\r\n })\r\n}\r\nexport { ApiGeneric }\r\n","import React from \"react\"\r\nimport { BiInfoCircle } from \"react-icons/bi\"\r\nimport styled from \"styled-components\"\r\nimport { MyUI } from \"@macashipo/mlib\"\r\n\r\ninterface IProps {\r\n controlOpts?: IControlOpts\r\n value?: any\r\n onChange?: (ev: any) => void\r\n invalid?: any\r\n defaultValue?: any\r\n}\r\n\r\nclass Control_Ext extends React.Component {\r\n getDefaultValue = () => {\r\n return this.props.defaultValue\r\n }\r\n getControlOpts = () => {\r\n const { controlOpts } = this.props\r\n return controlOpts || {}\r\n }\r\n getFnList = () => {\r\n const controlOpts = this.getControlOpts()\r\n return controlOpts.fnList || {}\r\n }\r\n getFieldName = () => {\r\n const { controlOpts } = this.props\r\n if (controlOpts && controlOpts.fieldName) {\r\n return controlOpts.fieldName\r\n }\r\n return \"\"\r\n }\r\n getOnUpdateValue = () => {\r\n const { controlOpts } = this.props\r\n console.warn(\"getOnUpdateValue\", controlOpts)\r\n if (controlOpts && controlOpts.onUpdateValue) {\r\n return controlOpts.onUpdateValue\r\n }\r\n return () => {\r\n console.warn(\"Missing onUpdateValue on controlOpts\", this.props)\r\n }\r\n }\r\n getAttributes4Selenium = () => {\r\n const controlOpts: any = this.getControlOpts()\r\n let relativeControls: any = null\r\n if (controlOpts?.fnList?.getRelativeControls) {\r\n relativeControls = controlOpts.fnList.getRelativeControls()\r\n }\r\n let _attr = {}\r\n if (relativeControls) {\r\n const _relativeFields = Object.keys(relativeControls)\r\n if (_relativeFields.includes(this.getFieldName())) {\r\n _attr[\"data-action-type\"] = \"changeUI\"\r\n }\r\n }\r\n if (!_attr[\"data-action-type\"]) {\r\n if (controlOpts?.actionType) {\r\n _attr[\"data-action-type\"] = controlOpts?.actionType\r\n }\r\n }\r\n return _attr\r\n }\r\n onUpdateValue = (v, opts: any = null) => {\r\n const onUpdateValue = this.getOnUpdateValue()\r\n if (onUpdateValue) {\r\n onUpdateValue(v, opts)\r\n }\r\n }\r\n onUpdateValueWithFieldName = (v, fieldName = \"\") => {\r\n const { controlOpts } = this.props\r\n if (fieldName) {\r\n if (controlOpts && controlOpts.onUpdateValueWithFieldName) {\r\n controlOpts.onUpdateValueWithFieldName(v, fieldName)\r\n }\r\n }\r\n }\r\n onUpdateMulti = (obj = {}) => {\r\n const { controlOpts } = this.props\r\n if (controlOpts && controlOpts.onUpdateMulti) {\r\n controlOpts.onUpdateMulti(obj)\r\n }\r\n }\r\n getFormat = () => {\r\n const controlOpts = this.getControlOpts()\r\n return controlOpts.format\r\n }\r\n renderMessage = () => {\r\n const controlOpts = this.getControlOpts()\r\n const { ui }: any = controlOpts\r\n if (ui?.showError && ui.textError) {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n } else if (ui?.showInfo && ui.textInfo) {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n }\r\n return <>\r\n }\r\n render() {\r\n return
\r\n }\r\n}\r\n\r\nconst Info = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-start;\r\n color: var(--color-text-info);\r\n font-size: 13px;\r\n margin: 0.5rem 0;\r\n & > svg {\r\n margin-right: 0.25rem;\r\n width: 15px;\r\n height: 15px;\r\n }\r\n`\r\nconst Error = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-start;\r\n color: var(--color-danger);\r\n font-size: 13px;\r\n margin: 0.5rem 0;\r\n & > svg {\r\n margin-right: 0.25rem;\r\n width: 15px;\r\n height: 15px;\r\n }\r\n`\r\n\r\nexport default Control_Ext\r\n","import {\r\n MyIcon,\r\n HIs,\r\n HUtils,\r\n MyUI,\r\n HCF,\r\n HJson,\r\n HFormat,\r\n MyTableCell,\r\n} from \"@macashipo/mlib\"\r\nimport * as FlowTableExtraData from \"./TableExtraData\"\r\nimport * as FlowApi from \"./Api\"\r\nimport { ApiGeneric } from \"src/services/apiServices\"\r\nimport { fnListMyPage, fnListUI } from \"src/helpers/fnList\"\r\nimport { KConfigApp, KConfigModal, KConfigPageTable } from \"../K\"\r\nexport const KMore = {\r\n className: \"className\",\r\n style: \"style\",\r\n styleByValue: \"styleByValue\",\r\n configIcon: \"configIcon\",\r\n configCheckbox: \"configCheckbox\",\r\n icon: \"icon\",\r\n linkTitle: \"linkTitle\",\r\n fLinkTitle: \"fLinkTitle\",\r\n newWindow: \"newWindow\",\r\n showPhoto: \"showPhoto\",\r\n maxHeight: \"maxHeight\",\r\n maxWidth: \"maxWidth\",\r\n noScale: \"noScale\",\r\n styleImg: \"styleImg\",\r\n link: \"link\",\r\n fLink: \"fLink\",\r\n color: \"color\",\r\n fColor: \"fColor\",\r\n min: \"min\",\r\n fMin: \"fMin\",\r\n max: \"max\",\r\n fMax: \"fMax\",\r\n styleInput: \"styleInput\",\r\n classNameWithColField: \"classNameWithColField\",\r\n modal: \"modal\",\r\n placeHolder: \"placeHolder\",\r\n format: \"format\",\r\n dateFormat: \"dateFormat\",\r\n datetimeFormat: \"datetimeFormat\",\r\n dateTextFormat: \"dateTextFormat\",\r\n fBorderLeftColor: \"fBorderLeftColor\",\r\n configPage: \"configPage\",\r\n query: \"query\",\r\n configApi: \"\",\r\n fSelectValue: \"fSelectValue\", //for select2_modal_table\r\n querySelectValue: \"querySelectValue\", //for form_modal_table\r\n clickToSelect: \"clickToSelect\",\r\n button: \"button\",\r\n cbNormal: \"cbNormal\", //for checkbox\r\n cbPositive: \"cbPositive\", //for checkbox\r\n cbNegative: \"cbNegative\", //for checkbox\r\n configEditIcon: \"configEditIcon\", //\r\n configFileIcon: \"configFileIcon\",\r\n configTextDisplay: \"configTextDisplay\", //config text display {fDisplay,fShow,hasIconAndText,fIcon,icon}\r\n typeAdmin: \"typeAdmin\", //type danh rieng cho trang admin neu can thiet\r\n titleConfirm: \"titleConfirm\",\r\n confirmMsg: \"confirmMsg\", //truoc khi click api v.v..\r\n fConfirmMsg: \"fConfirmMsg\", //f confirmMsg\r\n myui: \"myui\",\r\n styleByValueField: \"styleByValueField\", //styleByValueField or logic\r\n showDisplayWithMyUI: \"showDisplayWithMyUI\", //custom display bang myui\r\n showClear: \"showClear\", //show nut clear\r\n configClear: \"configClear\",\r\n hideWhenEmpty: \"hideWhenEmpty\",\r\n hideWhenNull: \"hideWhenNull\",\r\n showDeleteRow: \"showDeleteRow\", //show nut clear row o right top bar\r\n showPreviewHTML: \"showPreviewHTML\", //show nut preview HTML\r\n configDisplay: \"configDisplay\", //bo sung config display cho cac cell show text\r\n virtualized: \"virtualized\", //ho tru virtualized true/false\r\n virtualizedMin: \"virtualizedMin\", //chuyen qua virtualized khi co min size la bao nhieu\r\n showSelectedOnFirstRow: \"showSelectedOnFirstRow\", //show selected item on first row, select modal\r\n apiCheckShowModal: \"apiCheckShowModal\", //check show modal o form\r\n autoOpenLink: \"autoOpenLink\", // auto open full path\r\n overideDefaultValues: \"overideDefaultValues\", //data truyen len se bao gom default Values, hien tai mac dinh se gom default values nen ko su dung nua\r\n rows: \"rows\",\r\n needReExpand: \"needReExpand\",\r\n needReloadOptionsAndList: \"needReloadOptionsAndList\",\r\n needReloadRow: \"needReloadRow\",\r\n needReload: \"needReload\",\r\n needReloadList: \"needReloadList\",\r\n needReloadTable: \"needReloadTable\",\r\n needReloadPage: \"needReloadPage\",\r\n needSendMsg: \"needSendMsg\",\r\n configFormat: \"configFormat\", //danh cho config format mac dinh ma cell su dung\r\n configProgress: \"configProgress\", //danh cho progress\r\n configPopover: \"configPopover\", //danh cho co su dung popover\r\n configTitleTooltip: \"configTitleTooltip\", //config title tooltip\r\n}\r\n\r\nexport const KConfigInRow = {\r\n _UI_Loading: \"_UI_Loading\",\r\n _UI_Error: \"_UI_Error\",\r\n _UI_NeedUpdateUI: \"_UI_NeedUpdateUI\", //true: luon render lai ui\r\n}\r\n\r\nconst KTypeCellShared = {\r\n _cell_loading: \"_cell_loading\",\r\n}\r\n\r\nexport const FlowGetExtraDataFromExtra = (extra = {}) => {\r\n return extra.extraData || {}\r\n}\r\nexport const FlowGetFieldNameFromExtra = (extra = {}) => {\r\n return extra.fieldName\r\n}\r\nexport const FlowGetExtraOfFieldName = (extra = {}, fieldName) => {\r\n let _extraCol = extra\r\n if (fieldName && extra.fieldName != fieldName) {\r\n _extraCol = FlowTableExtraData.FlowGetColumnFromExtraData(\r\n FlowGetExtraDataFromExtra(extra),\r\n fieldName\r\n )\r\n }\r\n return _extraCol\r\n}\r\nexport const FlowGetMore = ({ extra, more, fieldName }) => {\r\n let _fieldName = fieldName || FlowGetFieldNameFromExtra(extra)\r\n return (\r\n more ||\r\n FlowTableExtraData.FlowGetMoreOfCellFromExtraData(\r\n FlowGetExtraDataFromExtra(extra),\r\n _fieldName\r\n )\r\n )\r\n}\r\n\r\n//////// More\r\n\r\nexport const FlowActionClickApi = ({ extra, more, fieldName }) => {\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n}\r\nexport const FlowActionClickForm = () => {}\r\nexport const FlowActionClickLink = ({ extra, row, more, fieldName, link }) => {\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n let _link = link || FlowGetLink({ extra, row, more: _more, fieldName })\r\n if (_link) {\r\n window.open(\r\n _link,\r\n FlowGetLinkTarget({ extra, row, more: _more, fieldName })\r\n )\r\n }\r\n console.warn(\"Click link\", _link)\r\n}\r\n\r\nexport const FlowParseResponseAndNeedReload = ({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n oneTableCell,\r\n response,\r\n configApi,\r\n}) => {\r\n // let _more = FlowGetMore({ extra, more, fieldName }) || {}\r\n console.warn(\"parseResponse\", oneTableCell)\r\n if (oneTableCell) {\r\n let _configApi = configApi || oneTableCell.getConfigApi()\r\n oneTableCell.parseResponse(response)\r\n oneTableCell.parseNeedReload(_configApi, response)\r\n }\r\n}\r\nexport const FlowCheckShowModal = ({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n defaultValue,\r\n}) => {\r\n let _more = FlowGetMore({ extra, more, fieldName }) || {}\r\n let _configModal = _more[KMore.modal]\r\n let _canShowModal = defaultValue != null ? defaultValue : true\r\n if (_configModal) {\r\n if (_configModal.canShowModal == false) {\r\n _canShowModal = false\r\n }\r\n if (\r\n _configModal.fCanShowModal &&\r\n row[_configModal.fCanShowModal] === false\r\n ) {\r\n _canShowModal = false\r\n }\r\n }\r\n return _canShowModal\r\n}\r\n\r\nexport const FlowGetRequestFromConfigObj = ({ row, configApi }) => {\r\n let _request = {\r\n method: \"POST\" || configApi.method,\r\n url: configApi.url,\r\n path: configApi.path,\r\n name: configApi.name,\r\n }\r\n if (_request.url) {\r\n if (_request.url.indexOf(\"[\") > -1) {\r\n _request.url = HUtils.getTextWithData(_request.url, row)\r\n }\r\n }\r\n if (_request.name) {\r\n if (_request.name.indexOf(\"[\") > -1) {\r\n _request.name = HUtils.getTextWithData(_request.name, row)\r\n }\r\n }\r\n return _request\r\n}\r\n\r\nexport const FlowGetRequestQueryFromConfigObj = ({ row, query, df }) => {\r\n let _query = df || {}\r\n if (query) {\r\n _query = Object.assign(_query, query)\r\n let _keys = Object.keys(_query)\r\n for (let k of _keys) {\r\n let _value = query[k]\r\n if (row.hasOwnProperty(_value) == true) {\r\n if (row[_value] != null) {\r\n _query[k] = row[_value]\r\n }\r\n }\r\n }\r\n }\r\n return _query\r\n}\r\n\r\nexport const FlowCheckApiShowModal = ({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n cb,\r\n fnList,\r\n}) => {\r\n let _more = FlowGetMore({ extra, more, fieldName }) || {}\r\n let _configCheckShow = _more[KMore.apiCheckShowModal]\r\n let _canShowModal = FlowCheckShowModal({ extra, more, row })\r\n //test\r\n // FlowApi.FlowApiShowFullPath({\r\n // response: {},\r\n // configFullPath: { FullPath: \"http://google.com\" },\r\n // })\r\n // cb({\r\n // canShow: true,\r\n // })\r\n // return\r\n //\r\n //clear focus button\r\n document.activeElement.blur()\r\n if (cb) {\r\n if (_canShowModal == false) {\r\n cb({\r\n canShow: false,\r\n })\r\n } else if (_configCheckShow) {\r\n let _request = FlowGetRequestFromConfigObj({\r\n row,\r\n configApi: _configCheckShow,\r\n })\r\n let _query = FlowGetRequestQueryFromConfigObj({\r\n row,\r\n query: _configCheckShow.query,\r\n })\r\n ApiGeneric({\r\n request: _request,\r\n data: _query,\r\n successCallBack: response => {\r\n let _config = HUtils.get(response, \"Data.Config\")\r\n if (_config) {\r\n FlowApi.FlowApiShowFullPath({\r\n response,\r\n configFullPath: _config,\r\n autoOpenLink:\r\n more[KMore.autoOpenLink] != null\r\n ? more[KMore.autoOpenLink]\r\n : null,\r\n })\r\n }\r\n if (_config && _config.IsShow) {\r\n let _resultModel = HUtils.get(response, \"Data.Config.ResultModel\")\r\n if (_resultModel && row) {\r\n //update model vao row\r\n HUtils.runFuntion(fnList, \"onUpdateRow\", [\r\n {\r\n row,\r\n newRow: _resultModel,\r\n },\r\n ])\r\n }\r\n if (cb) {\r\n cb({\r\n canShow: true,\r\n config: _config,\r\n data: _config.FormData,\r\n })\r\n }\r\n } else {\r\n if (cb) {\r\n cb({\r\n canShow: false,\r\n })\r\n }\r\n }\r\n // oneButton.changeIsLoading(false)\r\n },\r\n errorCallBack: (error, response) => {\r\n // oneButton.changeIsLoading(false)\r\n if (cb) {\r\n cb({\r\n canShow: false,\r\n })\r\n }\r\n },\r\n })\r\n } else {\r\n cb({\r\n canShow: true,\r\n })\r\n }\r\n }\r\n return false\r\n}\r\nexport const FlowCheckConfirmMsg = ({ extra, more, row, fieldName, cb }) => {\r\n let _more = FlowGetMore({ extra, more, fieldName }) || {}\r\n let _confirmMsg = _more[KMore.confirmMsg]\r\n let _confirmTitle = _more[KMore.titleConfirm] || \"Confirm\"\r\n if (row && _more[KMore.fConfirmMsg] && row[_more[KMore.fConfirmMsg]]) {\r\n _confirmMsg = row[_more[KMore.fConfirmMsg]]\r\n }\r\n if (_confirmMsg) {\r\n fnListUI.fnshowConfirm({\r\n title: _confirmTitle,\r\n msg: _confirmMsg,\r\n onClickOK: () => {\r\n if (cb) {\r\n cb()\r\n }\r\n },\r\n })\r\n } else {\r\n if (cb) {\r\n cb()\r\n }\r\n }\r\n}\r\nexport const FlowGetConfigMyUI = ({ extra, more, row, fieldName }) => {\r\n let _configMyUI = {}\r\n let _more = FlowGetMore({ extra, more, fieldName }) || {}\r\n if (_more[KMore.myui]) {\r\n _configMyUI = _more[KMore.myui]\r\n }\r\n return _configMyUI\r\n}\r\n//thay the TableHelper render icon\r\nexport const FlowRenderIconFromMore = ({ extra, more, fieldName }) => {\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n if (_more) {\r\n let _icon = _more[KMore.configIcon] || _more[KMore.icon]\r\n if (_icon) {\r\n if (HIs.isString(_icon)) {\r\n return \r\n } else if (HIs.isObject(_icon)) {\r\n if (_icon.className) {\r\n return \r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const FlowGetTextDisplay = ({\r\n extra,\r\n more,\r\n fieldName,\r\n oneTableCell,\r\n cell,\r\n valueCell,\r\n isButton,\r\n}) => {\r\n if (oneTableCell) {\r\n let _configTextDisplay = {}\r\n if (isButton) {\r\n _configTextDisplay = FlowGetConfigTextDisplayOfButton({\r\n extra,\r\n more,\r\n fieldName,\r\n })\r\n }\r\n return oneTableCell.getTextDisplay(_configTextDisplay)\r\n }\r\n return cell || valueCell\r\n}\r\n\r\nexport const FlowGetCustomDisplay = ({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n oneTableCell,\r\n props,\r\n value,\r\n defaultConfigDisplay,\r\n}) => {\r\n if (more && more[KMore.showDisplayWithMyUI]) {\r\n const configMyUI = FlowGetConfigMyUI({ extra, more, fieldName })\r\n if (configMyUI && configMyUI.type) {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n }\r\n let _valueDisplay = value\r\n if (typeof value == \"string\") {\r\n let _configDisplay = more[KMore.configDisplay] || defaultConfigDisplay\r\n if (_configDisplay) {\r\n if (_configDisplay.showShortText) {\r\n let _countShort = _configDisplay.countShort || 50\r\n _valueDisplay = value.slice(0, _countShort)\r\n _valueDisplay += `${_valueDisplay.length == _countShort ? \"...\" : \"\"}`\r\n } else if (_configDisplay.text) {\r\n _valueDisplay = HUtils.getTextWithData(_configDisplay.text, row)\r\n } else if (_configDisplay.configFormat) {\r\n _valueDisplay = HFormat.format(_valueDisplay, {\r\n ..._configDisplay.configFormat,\r\n row: row,\r\n })\r\n } else if (_configDisplay.isHide) {\r\n _valueDisplay = \"\"\r\n }\r\n }\r\n }\r\n return
{String(_valueDisplay)}
\r\n}\r\n\r\nexport const FlowGetConfigTextDisplayOfButton = ({\r\n extra,\r\n more,\r\n fieldName,\r\n}) => {\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n let _config = {}\r\n if (_more) {\r\n let _configButton = more[KMore.button]\r\n if (_configButton) {\r\n _config.icon = _configButton.icon\r\n _config.title = _configButton.title\r\n _config.hasIconAndText = _configButton.hasIconAndText\r\n }\r\n }\r\n return _config\r\n}\r\n\r\nexport const FlowRenderStatus = ({\r\n extra,\r\n more,\r\n fieldName,\r\n row,\r\n valueCell,\r\n link,\r\n canEdit,\r\n}) => {\r\n let _ui = []\r\n if (more) {\r\n if (\r\n more[KMore.configEditIcon] &&\r\n more[KMore.configEditIcon].using &&\r\n canEdit\r\n ) {\r\n _ui.push(\r\n \r\n )\r\n }\r\n }\r\n if (_ui.length > 0) {\r\n return
\r\n }\r\n}\r\n\r\nexport const FlowRenderTitleOfLink = ({\r\n extra,\r\n more,\r\n fieldName,\r\n row,\r\n valueCell,\r\n link,\r\n}) => {\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n if (_more[KMore.showPhoto] === true) {\r\n let _maxHeight = \"120px\"\r\n let _maxWidth = \"120px\"\r\n if (_more[KMore.maxHeight]) {\r\n _maxHeight = _more[KMore.maxHeight]\r\n }\r\n if (_more[KMore.maxWidth]) {\r\n _maxWidth = _more[KMore.maxWidth]\r\n }\r\n let _styleImg = { width: \"100%\", height: \"100%\", maxHeight: _maxHeight }\r\n if (_more[KMore.noScale] == true) {\r\n _styleImg = {\r\n maxHeight: _maxHeight,\r\n display: \"block\",\r\n maxWidth: _maxWidth,\r\n width: \"auto\",\r\n height: \"auto\",\r\n }\r\n }\r\n if (_more[KMore.styleImg]) {\r\n _styleImg = Object.assign(_styleImg, _more[KMore.styleImg])\r\n }\r\n if (link) {\r\n return \"\"\r\n } else {\r\n return
\r\n }\r\n }\r\n let _uiIcon = FlowRenderIconFromMore({ extra, more, fieldName })\r\n if (_uiIcon) {\r\n return _uiIcon\r\n }\r\n let _title = valueCell\r\n if (_more[KMore.linkTitle]) {\r\n _title = _more[KMore.linkTitle]\r\n } else if (row && _more[KMore.fLinkTitle] && row[_more[KMore.fLinkTitle]]) {\r\n _title = row[_more[KMore.fLinkTitle]]\r\n }\r\n return _title\r\n}\r\n\r\nexport const FlowGetLinkTarget = ({ extra, more, fieldName }) => {\r\n let _target = \"_blank\"\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n if (_more[KMore.newWindow] === true) {\r\n return \"_blank\"\r\n } else if (_more[KMore.newWindow] === false) {\r\n return \"_self\"\r\n }\r\n return _target\r\n}\r\n\r\nexport const FlowGetStyleInput = ({ extra, more, fieldName, defaultStyle }) => {\r\n let _styleInput = defaultStyle || {}\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n if (_more[KMore.styleInput]) {\r\n _styleInput = { ..._styleInput, ..._more[KMore.styleInput] }\r\n }\r\n return _styleInput\r\n}\r\n\r\nexport const FlowGetMoreAttrsInput = ({\r\n extra,\r\n more,\r\n fieldName,\r\n defaultAttrs,\r\n}) => {\r\n let _attrs = defaultAttrs || {}\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n if (_more[KMore.placeHolder]) {\r\n _attrs = Object.assign(_attrs, {\r\n placeholder: _more[KMore.placeHolder],\r\n })\r\n }\r\n return _attrs\r\n}\r\n\r\nexport const FlowGetLink = ({ extra, row, more, fieldName, valueCell }) => {\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n let _link = valueCell\r\n if (extra && extra.Type && extra.Type.link) {\r\n _link = extra.Type.link\r\n }\r\n if (_more[KMore.fLink]) {\r\n if (row && row[_more[KMore.fLink]]) _link = row[_more[KMore.fLink]]\r\n else {\r\n _link = \"\"\r\n }\r\n } else if (_more[KMore.link]) {\r\n _link = _more[KMore.link]\r\n }\r\n if (_link && typeof _link == \"string\" && _link.indexOf(\"[\") > -1) {\r\n _link = HUtils.getTextWithData(_link, row)\r\n }\r\n return _link\r\n}\r\n\r\nexport const FlowGetHeaderTitle = ({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n defaultValue,\r\n notUseFieldName,\r\n customTitle,\r\n} = {}) => {\r\n let _title = defaultValue || \"\"\r\n let _extraOfColumn = FlowGetExtraOfFieldName(extra, fieldName)\r\n // let _more = FlowGetMore({ extra, more, fieldName })\r\n // console.warn(\"FlowGetHeaderTitle\", _title)\r\n if (notUseFieldName !== true && _title == \"\") {\r\n _title = fieldName || extra.fieldName\r\n }\r\n if (_extraOfColumn.Header) {\r\n //for header json\r\n if (_extraOfColumn.Header.startsWith(\"{\")) {\r\n let _objHeader = HJson.getObj(_extraOfColumn.Header)\r\n _title = _objHeader.header || \"\"\r\n } else {\r\n _title = _extraOfColumn.Header\r\n }\r\n }\r\n if (customTitle) {\r\n return customTitle(_title)\r\n }\r\n return _title\r\n}\r\n\r\nexport const FlowGetTitleOfColumn = ({ extra, row, more, fieldName }) => {\r\n return FlowGetHeaderTitle({ extra, row, more, fieldName })\r\n}\r\n\r\n//Dung cho cac kieu title de hover show tooltip, button\r\nexport const FlowGetTitleTooltipOfColumn = ({\r\n extra,\r\n row,\r\n more,\r\n fieldName,\r\n}) => {\r\n let _title = FlowGetTitleOfColumn({ extra, fieldName })\r\n let _configTitleTooltip = FlowGetConfigOfMore({\r\n extra,\r\n row,\r\n fieldName,\r\n key: KMore.configTitleTooltip,\r\n })\r\n if (_configTitleTooltip) {\r\n if (_configTitleTooltip.fTitle != null) {\r\n _title = row[_configTitleTooltip.fTitle]\r\n } else if (_configTitleTooltip.title != null) {\r\n _title = HUtils.getTextWithData(_configTitleTooltip.title, row)\r\n }\r\n }\r\n return _title\r\n}\r\n\r\nexport const FlowGetTableConfig = ({ extra, row, more, key, defaultValue }) => {\r\n let _fnList = FlowGetFnList({ extra, fieldName: extra.fieldName })\r\n if (_fnList) {\r\n let _value = null\r\n //v1\r\n if (_fnList.fnGetTableConfig) {\r\n _value = _fnList.fnGetTableConfig(key, defaultValue)\r\n } else {\r\n _value = fnListMyPage.fnGetConfigPageTable(_fnList, [key])\r\n }\r\n }\r\n}\r\nexport const FlowGetConfigTrueByAllLevel = ({ key, extra, row, more } = {}) => {\r\n const _configInTableConfig = FlowGetTableConfig({ extra, row, more, key })\r\n if (more && more[key] === true) {\r\n // console.warn(\"more:\",more)\r\n return true\r\n } else if (_configInTableConfig === true) {\r\n // console.warn(\"_configInTableConfig:\",_configInTableConfig)\r\n return true\r\n } else if (HCF.getCF(key) === true) {\r\n // console.warn(\"AppConfig:\",HConfig)\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nexport const FlowGetBackgroundStyleCell = ({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n defaultStyle,\r\n}) => {\r\n let _style = defaultStyle || {}\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n if (_more[KMore.style]) {\r\n _style = { ..._style, ..._more[KMore.style] }\r\n }\r\n if (extra != null && row != null) {\r\n if (extra.Type) {\r\n //style from bgF\r\n if (extra.Type.bgF != null) {\r\n if (row[extra.Type.bgF] != null) {\r\n // let _color = HColor.getTextWB(row[extra.Type.bgF]);\r\n _style = Object.assign(_style, { background: row[extra.Type.bgF] })\r\n } else if (\r\n extra.Type.bgF.startsWith(\"#\") ||\r\n extra.Type.bgF.startsWith(\"linear-gradient\")\r\n ) {\r\n // let _color = HColor.getTextWB(extra.Type.bgF);\r\n _style = Object.assign(_style, { background: extra.Type.bgF })\r\n }\r\n }\r\n }\r\n }\r\n console.warn(\"FlowGetBackgroundStyleCell:\", _style)\r\n return _style.background\r\n}\r\n\r\nexport const FlowGetStyleCell = ({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n defaultStyle,\r\n overideStyle,\r\n}) => {\r\n let _styleDefaultCell = HCF.getCF(KConfigApp.styleDefaultCell)\r\n let _style = { ..._styleDefaultCell, ...defaultStyle }\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n if (_more[KMore.style]) {\r\n _style = { ..._style, ..._more[KMore.style] }\r\n }\r\n if (extra != null && row != null) {\r\n let _styleInRow = null\r\n //from row.StyleRow\r\n if (row && row.StyleRow) {\r\n _styleInRow = row.StyleRow\r\n }\r\n //from row.UI_StyleRow\r\n if (row && row.UI_StyleRow) {\r\n _styleInRow = row.UI_StyleRow\r\n }\r\n if (_styleInRow) {\r\n if (typeof _styleInRow == \"object\") {\r\n _style = Object.assign(_style, _styleInRow)\r\n } else if (HIs.isJsonString(_styleInRow)) {\r\n _style = Object.assign(_style, HJson.getObj(_styleInRow))\r\n }\r\n }\r\n\r\n //from extra.Style\r\n if (extra.Style) {\r\n if (HIs.isJsonString(extra.Style)) {\r\n _style = { ..._style, ...HJson.getObj(extra.Style) }\r\n } else if (HIs.isObject(extra.Style)) {\r\n _style = { ..._style, ...extra.Style }\r\n }\r\n }\r\n if (extra.Type) {\r\n //style from bgF\r\n if (extra.Type.bgF != null) {\r\n if (row[extra.Type.bgF] != null) {\r\n // let _color = HColor.getTextWB(row[extra.Type.bgF]);\r\n _style = Object.assign(_style, { background: row[extra.Type.bgF] })\r\n } else if (\r\n extra.Type.bgF.startsWith(\"#\") ||\r\n extra.Type.bgF.startsWith(\"linear-gradient\")\r\n ) {\r\n // let _color = HColor.getTextWB(extra.Type.bgF);\r\n _style = Object.assign(_style, { background: extra.Type.bgF })\r\n }\r\n }\r\n //style from colorF\r\n if (extra.Type.colorF != null) {\r\n if (row[extra.Type.colorF] != null) {\r\n _style = Object.assign(_style, { color: row[extra.Type.colorF] })\r\n } else if (extra.Type.colorF.startsWith(\"#\")) {\r\n _style = Object.assign(_style, { color: extra.Type.colorF })\r\n }\r\n }\r\n }\r\n }\r\n //styleByValue\r\n // console.warn(\"styleByValue 1\",extra.Type,_more,_more[KMore.styleByValue])\r\n if (_more[KMore.styleByValue]) {\r\n // console.warn(\"styleByValue\",_more[KMore.styleByValue])\r\n let _fieldName = fieldName || FlowGetFieldNameFromExtra(extra)\r\n let _valueCell = row[_fieldName]\r\n if (HFormat.Types.configByValue) {\r\n let _moreStyle = HFormat.format(_valueCell, {\r\n type: \"configByValue\",\r\n configByValue: _more[KMore.styleByValue],\r\n })\r\n if (_moreStyle) {\r\n _style = Object.assign(_style, _moreStyle)\r\n }\r\n }\r\n }\r\n //bo sung cho dep\r\n if (\r\n _more[KMore.fBorderLeftColor] &&\r\n row[_more[KMore.fBorderLeftColor]] &&\r\n _style\r\n ) {\r\n _style.borderLeft = `4px solid ${row[_more[KMore.fBorderLeftColor]]}`\r\n }\r\n\r\n //bo sung overideStyle\r\n if (overideStyle) {\r\n _style = { ..._style, ...overideStyle }\r\n }\r\n // console.warn(\"_style\", _style, _more, extra)\r\n return _style\r\n}\r\n\r\nexport const FlowGetClassCell = ({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n defaultClass,\r\n}) => {\r\n let _className = defaultClass || \"\"\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n //class from extra\r\n if (extra.ClassName) {\r\n _className += ` ${extra.ClassName}`\r\n }\r\n //class from more\r\n if (_more[KMore.className]) {\r\n _className += ` ${_more[KMore.className]}`\r\n }\r\n //class fieldName\r\n if (extra.fieldName) {\r\n if (\r\n FlowGetConfigTrueByAllLevel({\r\n key: KConfigApp.showClassFieldOnCell,\r\n extra,\r\n row,\r\n more: _more,\r\n })\r\n ) {\r\n _className += ` col-${extra.fieldName}`\r\n } else if (_more.classNameWithColField != null) {\r\n if (_more.classNameWithColField === true) {\r\n _className += ` col-${extra.fieldName}`\r\n } else {\r\n _className += ` ${_more.classNameWithColField}-${extra.fieldName}`\r\n }\r\n }\r\n }\r\n return _className\r\n}\r\n\r\nexport const FlowGetCanEdit = ({ extra, row, more, fieldName } = {}) => {\r\n let _canEdit = true\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n //check row locked\r\n if (row && row.IsLocked === true) {\r\n return false\r\n }\r\n //check extraColumn.CanEdit\r\n let _extraCol = extra\r\n if (_extraCol) {\r\n if (fieldName && extra.fieldName != fieldName) {\r\n _extraCol = FlowTableExtraData.FlowGetColumnFromExtraData(\r\n FlowGetExtraDataFromExtra(extra),\r\n fieldName\r\n )\r\n if (_extraCol && _extraCol.CanEdit != null) {\r\n _canEdit = _extraCol.CanEdit\r\n }\r\n } else if (_extraCol.CanEdit != null) {\r\n _canEdit = _extraCol.CanEdit\r\n }\r\n\r\n //\r\n if (_canEdit === true && _more && row) {\r\n //check fCanEdit\r\n if (_more.fCanEdit == null && _more.canEditF != null) {\r\n _more.fCanEdit = _more.canEditF\r\n }\r\n if (typeof _more.fCanEdit === \"boolean\") {\r\n _canEdit = _more.fCanEdit\r\n } else if (typeof _more.fCanEdit === \"string\") {\r\n if (_more.fCanEdit.length > 0) {\r\n if (row[_more.fCanEdit] != null) {\r\n _canEdit = row[_more.fCanEdit]\r\n } else if (_more.fCanEdit.indexOf(\",\") > -1) {\r\n let _arrcanEditF = _more.fCanEdit.split(\",\")\r\n if (_arrcanEditF && _arrcanEditF.length > 0) {\r\n for (let f of _arrcanEditF) {\r\n if (row[f] == false) {\r\n //only need one cannot edit -> cannot edit\r\n _canEdit = false\r\n break\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n //check fLock\r\n if (_more.lockF != null || _more.fLock != null) {\r\n let _fLock = _more.lockF || _more.fLock\r\n if (typeof _fLock == \"boolean\") {\r\n _canEdit = !_fLock\r\n } else if (typeof _fLock == \"string\") {\r\n if (_fLock.length > 0) {\r\n if (row[_fLock] != null) {\r\n _canEdit = !row[_fLock]\r\n } else if (_fLock.indexOf(\",\") > -1) {\r\n let _arrLock = _fLock.split(\",\")\r\n if (_arrLock && _arrLock.length > 0) {\r\n for (let f of _arrLock) {\r\n if (row[f] == true) {\r\n //only need one lock edit -> cannot edit\r\n _canEdit = false\r\n break\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n //\r\n }\r\n }\r\n // console.warn(\"canedit:\",_canEdit,_extraCol.fieldName,fieldName)\r\n return _canEdit\r\n}\r\n\r\nexport const FlowGetConfigOfMore = ({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n key,\r\n defaultValue,\r\n fKey,\r\n} = {}) => {\r\n let _value = defaultValue\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n if (fKey && _more.hasOwnProperty(fKey) && row[_more.hasOwnProperty(fKey)]) {\r\n _value = row[_more.hasOwnProperty(fKey)]\r\n } else if (_more.hasOwnProperty(key)) {\r\n _value = _more[key]\r\n }\r\n return _value\r\n}\r\n\r\nexport const FlowGetConfigModal = ({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n defaultValue,\r\n} = {}) => {\r\n let _configModal = FlowGetConfigOfMore({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n key: KMore.modal,\r\n defaultValue: defaultValue || {},\r\n })\r\n if (\r\n _configModal[KConfigModal.fTitle] &&\r\n row[_configModal[KConfigModal.fTitle]]\r\n ) {\r\n _configModal.title = row[_configModal[KConfigModal.fTitle]]\r\n delete _configModal[KConfigModal.fTitle] //xoa fTitle trong _configModal\r\n }\r\n return _configModal\r\n}\r\n\r\nexport const FlowClickToSelectInput = ({ extra, fieldName, more, ev } = {}) => {\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n if (ev && ev.target && _more && _more[KMore.clickToSelect] === true) {\r\n ev.target.select()\r\n }\r\n}\r\n\r\nexport const FlowGetDateFormat = ({\r\n extra,\r\n fieldName,\r\n more,\r\n defaultFormat,\r\n} = {}) => {\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n let _format =\r\n _more[KMore.dateFormat] ||\r\n _more[KMore.format] ||\r\n defaultFormat ||\r\n HCF.getCF(KConfigApp.dateFormat)\r\n return _format\r\n}\r\n\r\nexport const FlowGetDateTimeFormat = ({\r\n extra,\r\n fieldName,\r\n more,\r\n defaultFormat,\r\n} = {}) => {\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n let _format =\r\n _more[KMore.dateFormat] ||\r\n _more[KMore.format] ||\r\n defaultFormat ||\r\n HCF.getCF(KConfigApp.datetimeFormat)\r\n return _format\r\n}\r\n\r\nexport const FlowGetColor = ({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n defaultColor,\r\n} = {}) => {\r\n let _color = defaultColor || \"gray\"\r\n let _more = FlowGetMore({ extra, more, fieldName })\r\n if (_more[KMore.fColor] && row && row[_more[KMore.fColor]]) {\r\n _color = row[_more[KMore.fColor]]\r\n } else if (_more[KMore.color]) {\r\n _color = _more[KMore.color]\r\n }\r\n return _color\r\n}\r\n\r\nexport const FlowGetFnList = ({ extra, fieldName } = {}) => {\r\n let _extraCol = FlowGetExtraOfFieldName(extra, fieldName)\r\n if (_extraCol.fnList) {\r\n return _extraCol.fnList\r\n } else if (extra.fnList) {\r\n return extra.fnList\r\n }\r\n return {}\r\n}\r\n\r\nexport const FlowGetIsUpdatingCell = ({ extra, row, fieldName } = {}) => {\r\n let _fieldName = fieldName || FlowGetFieldNameFromExtra(extra)\r\n if (\r\n row &&\r\n row[KConfigInRow._UI_Loading] &&\r\n row[KConfigInRow._UI_Loading][_fieldName] === true\r\n ) {\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nexport const FlowAfterUpdateCell = ({ row, response, fieldName, fnList }) => {\r\n //show msg\r\n fnListUI.fnShowToast(response.Msg)\r\n\r\n //update new Data to row\r\n if (response && response.Data && response.Data.Id == row.Id) {\r\n HUtils.mergeObjIfExist(row, response.Data)\r\n }\r\n //remove row UI loading, error\r\n if (row[KConfigInRow._UI_Loading] != null) {\r\n delete row[KConfigInRow._UI_Loading][fieldName]\r\n }\r\n if (row[KConfigInRow._UI_Error] != null) {\r\n delete row[KConfigInRow._UI_Error][fieldName]\r\n }\r\n\r\n let _arrFieldNeedReload = []\r\n let _fieldNeedReload = fnListMyPage.fnGetConfigPageTable(fnList, [\r\n KConfigPageTable.needReloadAfterUpdateFields,\r\n ])\r\n if (typeof _fieldNeedReload == \"string\") {\r\n _arrFieldNeedReload.push(_fieldNeedReload)\r\n } else if (Array.isArray(_fieldNeedReload)) {\r\n _arrFieldNeedReload = [..._fieldNeedReload]\r\n }\r\n if (_arrFieldNeedReload.indexOf(fieldName) > -1) {\r\n console.warn(\"RELOAD after update field\", fnList)\r\n fnListMyPage.fnReloadList(fnList, [])\r\n }\r\n}\r\n\r\nexport const FlowUpdateCell = ({\r\n extra,\r\n more,\r\n row,\r\n fieldName,\r\n newValue,\r\n alwaysUpdate,\r\n fnForceUpdateCell,\r\n fnSuccessCallBack,\r\n} = {}) => {\r\n let _fieldName = fieldName || FlowGetFieldNameFromExtra(extra)\r\n let _valueCell = row[_fieldName]\r\n let _fnList = FlowGetFnList({ extra, fieldName })\r\n // let _extraCol = FlowGetExtraOfFieldName(extra,fieldName)\r\n //lay fnRequestUpdate\r\n // let _fnRequestUpdate = _fnList.fnRequestUpdate;\r\n // if(_extraCol.fnRequestUpdate){\r\n // _fnRequestUpdate = _extraCol.fnRequestUpdate;\r\n // }\r\n // console.warn(\"FlowUpdateCell:\",_valueCell,\"[new]:\",newValue,_fnRequestUpdate)\r\n\r\n //init UILoading,Error o row\r\n if (row[KConfigInRow._UI_Loading] == null) {\r\n row[KConfigInRow._UI_Loading] = {}\r\n }\r\n if (row[KConfigInRow._UI_Error] == null) {\r\n row[KConfigInRow._UI_Error] = {}\r\n }\r\n\r\n let _canUpdate = false\r\n //kiem tra co update dc ko\r\n if (newValue != _valueCell && !(_valueCell == null && newValue == \"\")) {\r\n _canUpdate = true\r\n } else if (newValue == _valueCell) {\r\n if (\r\n row[KConfigInRow._UI_Error] &&\r\n row[KConfigInRow._UI_Error][_fieldName] != null\r\n ) {\r\n _canUpdate = true\r\n } else if (alwaysUpdate == true) {\r\n _canUpdate = true\r\n }\r\n console.warn(\"New Update = current value cell:\", newValue, _valueCell)\r\n }\r\n //tien hanh update\r\n if (_canUpdate) {\r\n console.warn(\"Need Update:\", newValue, _fnList)\r\n //gan gia tri updating vao row\r\n if (row[KConfigInRow._UI_Loading] != null) {\r\n row[KConfigInRow._UI_Loading][_fieldName] = true\r\n }\r\n\r\n //loading update\r\n if (fnForceUpdateCell) {\r\n fnForceUpdateCell()\r\n }\r\n\r\n //Bo sung goi request update neu truyen tu ben ngoai vao, mot so man hinh cu van su dung, de update detail\r\n if (extra.fnRequestUpdate) {\r\n extra.fnRequestUpdate(row, _fieldName, newValue, {\r\n fnUpdateUILoading: (isLoading, opts) => {\r\n if (row[KConfigInRow._UI_Loading] == null) {\r\n row[KConfigInRow._UI_Loading] = {}\r\n }\r\n if (row[KConfigInRow._UI_Loading] != null) {\r\n row[KConfigInRow._UI_Loading][_fieldName] = isLoading\r\n }\r\n if (opts && opts.component && opts.component.forceUpdate) {\r\n opts.component.forceUpdate()\r\n }\r\n if (fnForceUpdateCell) {\r\n fnForceUpdateCell()\r\n }\r\n },\r\n fnUpdateUIError: (msg, opts) => {\r\n if (row[KConfigInRow._UI_Error] == null) {\r\n row[KConfigInRow._UI_Error] = {}\r\n }\r\n if (msg == null) {\r\n //msg == null nghia la xoa error di\r\n delete row[KConfigInRow._UI_Error][_fieldName]\r\n } else {\r\n row[KConfigInRow._UI_Error][_fieldName] = {\r\n msg: msg,\r\n }\r\n }\r\n // console.warn(\"fnUpdateUIError\",msg,fieldName,row,opts,component);\r\n if (opts && opts.component && opts.component.forceUpdate) {\r\n opts.component.forceUpdate()\r\n }\r\n if (fnForceUpdateCell) {\r\n fnForceUpdateCell()\r\n }\r\n },\r\n fnSuccessCallBack: (response, opts) => {\r\n if (fnSuccessCallBack) {\r\n fnSuccessCallBack(response, opts)\r\n }\r\n },\r\n })\r\n } else {\r\n //goi ham request update\r\n FlowApi.FlowApiUpdateFields({\r\n row,\r\n apiController: fnListMyPage.fnGetApiPath(_fnList) || \"NoApiPath\",\r\n sharedRequestData: fnListMyPage.fnGetSharedRequestData(_fnList),\r\n multiObjUpdate: {\r\n [_fieldName]: newValue,\r\n },\r\n cbSuccess: response => {\r\n console.warn(\"success:\", response)\r\n FlowAfterUpdateCell({\r\n row,\r\n response,\r\n fieldName: _fieldName,\r\n fnList: _fnList,\r\n })\r\n\r\n //force update cell\r\n if (fnForceUpdateCell) {\r\n fnForceUpdateCell()\r\n }\r\n //forece update table de update row khac neu co su thay doi\r\n fnListMyPage.fnForceUpdateTable(_fnList)\r\n },\r\n cbError: (error, response) => {\r\n console.warn(\"error:\", error, response)\r\n if (fnForceUpdateCell) {\r\n fnForceUpdateCell()\r\n }\r\n //remove row UI loading, update error\r\n if (row[KConfigInRow._UI_Loading] != null) {\r\n delete row[KConfigInRow._UI_Loading][_fieldName]\r\n }\r\n if (row[KConfigInRow._UI_Error] != null) {\r\n row[KConfigInRow._UI_Error][_fieldName] = error || response.Msg\r\n }\r\n //force update cell\r\n if (fnForceUpdateCell) {\r\n fnForceUpdateCell()\r\n }\r\n },\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport const FlowGetQueryFromConfigQuery = ({ row, configQuery } = {}) => {\r\n let _newQuery = {}\r\n if (configQuery && row) {\r\n let _keys = Object.keys(configQuery)\r\n if (_keys && _keys.length > 0) {\r\n for (let k of _keys) {\r\n if (\r\n HIs.isString(configQuery[k]) &&\r\n row.hasOwnProperty(configQuery[k])\r\n ) {\r\n _newQuery[k] = row[configQuery[k]]\r\n } else {\r\n _newQuery[k] = configQuery[k]\r\n }\r\n }\r\n }\r\n }\r\n return _newQuery\r\n}\r\n\r\nexport const FlowRenderLoading = ({ extra, row, fieldName, uiLoading }) => {\r\n if (FlowGetIsUpdatingCell({ extra, row, fieldName }) === true) {\r\n if (uiLoading) {\r\n return uiLoading\r\n }\r\n return \r\n }\r\n}\r\n\r\nexport const FlowRenderOverlay = ({ extra, row, fieldName, uiLoading }) => {\r\n //render loading, error, addable, infomation, clear\r\n}\r\n\r\nexport const FlowCheckUpdateValueAfterWillReceiveProps = (\r\n props,\r\n nextProps,\r\n valueDefault = \"\"\r\n) => {\r\n const { cell, row, extra } = props\r\n const newCell = nextProps.cell\r\n if (row && extra && row._UI_NeedUpdate) {\r\n let _fieldName = extra.fieldName\r\n if (_fieldName && row._UI_NeedUpdate.hasOwnProperty(_fieldName)) {\r\n let _value = row._UI_NeedUpdate[_fieldName]\r\n delete row._UI_NeedUpdate[_fieldName]\r\n return {\r\n needUpdate: true,\r\n value: _value,\r\n }\r\n }\r\n }\r\n if (newCell != null && cell != null && newCell != cell) {\r\n return {\r\n needUpdate: true,\r\n value: newCell,\r\n }\r\n } else if (cell == null && newCell != cell) {\r\n return {\r\n needUpdate: true,\r\n value: newCell,\r\n }\r\n } else if (newCell == null && newCell != cell) {\r\n return {\r\n needUpdate: true,\r\n value: valueDefault,\r\n }\r\n }\r\n return {\r\n needUpdate: false,\r\n newCell: newCell,\r\n }\r\n}\r\n","import React from \"react\"\r\nimport {\r\n Button,\r\n // Form\r\n} from \"reactstrap\"\r\nimport { HValid, HUtils } from \"@macashipo/mlib\"\r\nimport MyFormControl from \"./MyFormControl\"\r\n\r\nclass MyForm extends React.Component {\r\n currentValues = {}\r\n toucheds: string[] = [] //danh sach field da tac dong\r\n errorsValid = {} //danh sach loi, check valid\r\n relativeControls: any = {} //{a:[\"b\",\"c\"]}//field a -> anh huong toi b c\r\n effectControls: any = {}\r\n controlsByFieldName = {}\r\n controlsOptsByFieldName: any = {}\r\n fnListFromWrap: any = {}\r\n fnListFromExtControl: any = {}\r\n keyForceUpdate = 0\r\n constructor(props) {\r\n super(props)\r\n this._buildRelativeControls()\r\n }\r\n closeMyModal = () => {\r\n const { inMyModal } = this.props\r\n if (inMyModal) {\r\n inMyModal.hide()\r\n }\r\n }\r\n _buildRelativeControls = () => {\r\n const { configForm } = this.props\r\n if (configForm && configForm.controls) {\r\n for (let i = 0; i < configForm.controls.length; i++) {\r\n let _control = configForm.controls[i]\r\n let _fieldName = _control.fieldName || \"\"\r\n let _more = _control.more\r\n if (_control.groups?.length && !_fieldName) {\r\n const groups = _control.groups\r\n for (let j = 0; j < groups.length; j++) {\r\n const _controlInGrp = groups[j]\r\n const _moreCtlInGrp = _controlInGrp.more\r\n const _fieldNameCtlInGrp = _controlInGrp.fieldName\r\n if (\r\n _moreCtlInGrp &&\r\n _moreCtlInGrp.relativeTo &&\r\n _moreCtlInGrp.relativeTo.length > 0\r\n ) {\r\n if (this.relativeControls[_fieldNameCtlInGrp] === undefined) {\r\n this.relativeControls[_fieldNameCtlInGrp] = []\r\n }\r\n this.relativeControls[_fieldNameCtlInGrp] = this.relativeControls[\r\n _fieldNameCtlInGrp\r\n ].concat(_moreCtlInGrp.relativeTo)\r\n }\r\n if (_moreCtlInGrp && _moreCtlInGrp.conditionShow) {\r\n let _keys = Object.keys(_moreCtlInGrp.conditionShow)\r\n if (!_keys.includes(\"isCondition\")) {\r\n for (let k of _keys) {\r\n if (this.relativeControls[k] === undefined) {\r\n this.relativeControls[k] = []\r\n }\r\n if (\r\n this.relativeControls[k].indexOf(_fieldNameCtlInGrp) === -1\r\n ) {\r\n this.relativeControls[k].push(_fieldNameCtlInGrp)\r\n }\r\n }\r\n } else {\r\n // Khi dieu kien show của 1 control la 1 dieu kien khong phai 1 gia tri cu the\r\n const conditionShow = _moreCtlInGrp.conditionShow\r\n if (\r\n this.relativeControls[conditionShow.fieldRelative] ===\r\n undefined\r\n ) {\r\n this.relativeControls[conditionShow.fieldRelative] = []\r\n }\r\n if (\r\n this.relativeControls[conditionShow.fieldRelative].indexOf(\r\n _fieldNameCtlInGrp\r\n ) === -1\r\n ) {\r\n this.relativeControls[conditionShow.fieldRelative].push(\r\n _fieldNameCtlInGrp\r\n )\r\n }\r\n }\r\n }\r\n if (\r\n !_fieldName &&\r\n _moreCtlInGrp &&\r\n _moreCtlInGrp.effectedBy &&\r\n _moreCtlInGrp.effectedBy.length > 0\r\n ) {\r\n for (let k of _moreCtlInGrp.effectedBy) {\r\n if (this.effectControls[k] === undefined) {\r\n this.effectControls[k] = []\r\n }\r\n if (this.effectControls[k].indexOf(_fieldNameCtlInGrp) === -1) {\r\n this.effectControls[k].push(_fieldNameCtlInGrp)\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n if (_more && _more.relativeTo && _more.relativeTo.length > 0) {\r\n if (this.relativeControls[_fieldName] === undefined) {\r\n this.relativeControls[_fieldName] = []\r\n }\r\n this.relativeControls[_fieldName] = this.relativeControls[\r\n _fieldName\r\n ].concat(_more.relativeTo)\r\n }\r\n if (_more && _more.conditionShow) {\r\n let _keys = Object.keys(_more.conditionShow)\r\n if (!_keys.includes(\"isCondition\")) {\r\n for (let k of _keys) {\r\n if (this.relativeControls[k] === undefined) {\r\n this.relativeControls[k] = []\r\n }\r\n if (this.relativeControls[k].indexOf(_fieldName) === -1) {\r\n this.relativeControls[k].push(_fieldName)\r\n }\r\n }\r\n } else {\r\n // Khi dieu kien show của 1 control la 1 dieu kien khong phai 1 gia tri cu the\r\n const conditionShow = _more.conditionShow\r\n const fieldRelative = conditionShow?.fieldRelative\r\n // Danh cho truong hop phu thuoc 1 control trong 1 group\r\n if (fieldRelative.indexOf(\".\") > -1) {\r\n //Chi lay field cua cha vi ben trong thay doi thi se thay doi luon ca group va se update control phu thuoc\r\n let _fieldParent = fieldRelative.split(\".\")?.[0]\r\n if (this.relativeControls[_fieldParent] === undefined) {\r\n this.relativeControls[_fieldParent] = []\r\n }\r\n if (\r\n this.relativeControls[_fieldParent].indexOf(_fieldName) === -1\r\n ) {\r\n this.relativeControls[_fieldParent].push(_fieldName)\r\n }\r\n } else {\r\n if (this.relativeControls[fieldRelative] === undefined) {\r\n this.relativeControls[fieldRelative] = []\r\n }\r\n if (\r\n this.relativeControls[fieldRelative].indexOf(_fieldName) ===\r\n -1\r\n ) {\r\n this.relativeControls[fieldRelative].push(_fieldName)\r\n }\r\n }\r\n }\r\n }\r\n if (_more && _more.effectedBy && _more.effectedBy.length > 0) {\r\n for (let k of _more.effectedBy) {\r\n if (this.effectControls[k] === undefined) {\r\n this.effectControls[k] = []\r\n }\r\n if (this.effectControls[k].indexOf(_fieldName) === -1) {\r\n this.effectControls[k].push(_fieldName)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n console.warn(\"this.relativeControls\", this.relativeControls)\r\n }\r\n // _forceUpdateWithNewValue = newValues => {\r\n // if (newValues) {\r\n // this.currentValues = JSON.parse(JSON.stringify(newValues))\r\n // this._buildRelativeControls()\r\n // this.keyForceUpdate = Date.now()\r\n // this.forceUpdate()\r\n // }\r\n // }\r\n _onTouch = (fieldName, newValue, opts: any = null) => {\r\n if (this.toucheds.indexOf(fieldName) === -1) {\r\n this.toucheds.push(fieldName)\r\n }\r\n this.currentValues[fieldName] = newValue\r\n if (this.relativeControls[fieldName]) {\r\n for (let k of this.relativeControls[fieldName]) {\r\n console.warn(\"need update field:\", k, this.fnListFromExtControl[k])\r\n if (\r\n this.fnListFromExtControl[k] &&\r\n this.fnListFromExtControl[k].forceUpdate\r\n ) {\r\n this.fnListFromExtControl[k].forceUpdate()\r\n }\r\n }\r\n }\r\n if (this.effectControls[fieldName]) {\r\n for (let k of this.effectControls[fieldName]) {\r\n console.warn(\"need update effect:\", k, this.fnListFromExtControl[k])\r\n if (\r\n this.fnListFromExtControl[k] &&\r\n this.fnListFromExtControl[k].updateValueEffect\r\n ) {\r\n this.fnListFromExtControl[k].updateValueEffect()\r\n }\r\n }\r\n }\r\n HUtils.runFuntion(this.props.fnList, \"afterUpdateValuesForm\", [\r\n {\r\n currentValues: this.currentValues,\r\n fieldNameJustHasUpdate: fieldName,\r\n opts: opts,\r\n },\r\n ])\r\n }\r\n _onSubmit = (event?: React.FormEvent) => {\r\n const { fnList, configForm, inMyModal } = this.props\r\n event?.preventDefault()\r\n console.warn(\"Submit\", this.currentValues)\r\n if (fnList && fnList.onSubmitForm) {\r\n const result = fnList.onSubmitForm(this.currentValues, {\r\n defaultValues: configForm.defaultValues,\r\n errorsValid: this.errorsValid,\r\n relativeControls: this.relativeControls,\r\n toucheds: this.toucheds,\r\n myForm: this,\r\n })\r\n if (result) {\r\n result\r\n .then((rs: any) => {\r\n console.warn(\"promise myform rs:\", rs)\r\n if (configForm.closeMyModalAfterSubmit === true && inMyModal) {\r\n inMyModal.hide()\r\n }\r\n })\r\n .catch(err => {\r\n console.warn(\"err:\", err)\r\n })\r\n }\r\n }\r\n }\r\n getCurrentValues = () => {\r\n return this.currentValues\r\n }\r\n getSourceList = () => {\r\n const { fnList } = this.props\r\n if (fnList && fnList.getSourceList) {\r\n return fnList.getSourceList()\r\n }\r\n return {}\r\n }\r\n getConfigControlByFieldName = (fieldName: string) => {\r\n const { configForm } = this.props\r\n if (this.controlsByFieldName[fieldName]) {\r\n return this.controlsByFieldName[fieldName]\r\n }\r\n if (configForm && configForm.controls && configForm.controls.length > 0) {\r\n for (let i = 0; i < configForm.controls.length; i++) {\r\n let _control = configForm.controls[i]\r\n if (_control.fieldName === fieldName) {\r\n this.controlsByFieldName[fieldName] = _control\r\n return _control\r\n }\r\n }\r\n }\r\n }\r\n getConfigInMoreOfControl = (\r\n fieldName: string,\r\n key: string,\r\n configControl?: any\r\n ) => {\r\n let _configControl: any =\r\n configControl || this.getConfigControlByFieldName(fieldName)\r\n if (_configControl && _configControl.more && _configControl.more[key]) {\r\n return _configControl.more[key]\r\n }\r\n }\r\n getRulesOfControl = (fieldName: string) => {\r\n return this.getConfigInMoreOfControl(fieldName, \"rules\")\r\n }\r\n checkValidAll = () => {\r\n const { configForm } = this.props\r\n let _result: any = true\r\n if (configForm && configForm.controls) {\r\n for (let i = 0; i < configForm.controls.length; i++) {\r\n let _control = configForm.controls[i]\r\n let _resultOfControl = this.checkValidOfField(\r\n _control.fieldName,\r\n _control\r\n )\r\n if (_resultOfControl !== true) {\r\n if (_result === true) {\r\n _result = {}\r\n }\r\n if (_control.fieldName) {\r\n _result[_control.fieldName] = _resultOfControl\r\n }\r\n }\r\n }\r\n }\r\n console.warn(\"checkValidAll:\", _result)\r\n if (_result !== true) {\r\n this.errorsValid = _result\r\n } else {\r\n this.errorsValid = {}\r\n }\r\n this.forceUpdate()\r\n return _result\r\n }\r\n checkValidOfField = (fieldName: string = \"\", configControl?: any) => {\r\n let _configControl: any =\r\n configControl || this.getConfigControlByFieldName(fieldName)\r\n let _result = true\r\n if (_configControl) {\r\n let _rules = this.getRulesOfControl(fieldName)\r\n let _value = this.currentValues[fieldName]\r\n if (_rules) {\r\n _result = HValid.validAllRulesOfValue(_rules, _value)\r\n console.warn(\"checkValidOfField:\", fieldName, _rules, _value, _result)\r\n }\r\n }\r\n return _result\r\n }\r\n _renderFooter = () => {\r\n const { fnList } = this.props\r\n if (this.props.renderFooter) {\r\n return this.props.renderFooter(this)\r\n }\r\n let _isUsingDefaultSubmit = HUtils.runFuntion(\r\n fnList,\r\n \"isUsingDefaultSubmit\"\r\n )\r\n let _isShowBtnReset = HUtils.runFuntion(fnList, \"isShowBtnReset\")\r\n return (\r\n
\r\n {\r\n if (_isUsingDefaultSubmit === true) {\r\n this._onSubmit()\r\n }\r\n }}\r\n >\r\n Save Change\r\n \r\n {_isShowBtnReset !== false && (\r\n {\r\n this.currentValues = {}\r\n }}\r\n >\r\n Reset\r\n \r\n )}\r\n
\r\n )\r\n }\r\n render() {\r\n const { configForm, style, className, fnList } = this.props\r\n // console.warn(\"render MyForm:\", configForm, this.props)\r\n // let ClassTag: keyof JSX.IntrinsicElements = \"div\"\r\n return (\r\n \r\n {configForm &&\r\n configForm.controls &&\r\n configForm.controls?.map((v, i) => {\r\n return (\r\n {\r\n if (this.fnListFromWrap[fieldName] === undefined) {\r\n this.fnListFromWrap[fieldName] = fnFromWrap\r\n }\r\n // console.warn(\r\n // \"initWrapControl:\",\r\n // fieldName,\r\n // fnFromWrap,\r\n // this.fnListFromWrap\r\n // )\r\n },\r\n initExtControl: (\r\n fieldName: string,\r\n fnFromExtControl: any\r\n ) => {\r\n if (this.fnListFromExtControl[fieldName] === undefined) {\r\n this.fnListFromExtControl[fieldName] = fnFromExtControl\r\n }\r\n // console.warn(\r\n // \"initExtControl:\",\r\n // fieldName,\r\n // fnFromExtControl,\r\n // this.fnListFromExtControl\r\n // )\r\n },\r\n getSourceList: this.getSourceList,\r\n getCurrentValues: () => {\r\n return this.currentValues\r\n },\r\n getRelativeControls: () => {\r\n return this.relativeControls\r\n },\r\n getDefaultValues: () => {\r\n return this.props.configForm.defaultValues\r\n },\r\n onUpdateValue: ({ fieldName, newValue, opts }) => {\r\n console.warn(\"onUpdateValue:\", fieldName, newValue)\r\n HUtils.runFuntion(\r\n this.props.fnList,\r\n \"afterUpdateValueControl\",\r\n [\r\n {\r\n fieldName,\r\n newValue,\r\n control: this.getConfigControlByFieldName(fieldName),\r\n },\r\n ]\r\n )\r\n this._onTouch(fieldName, newValue, opts)\r\n },\r\n onJustUpdateValueMultiCurrentValuesForm: (list: any) => {\r\n let _keys = Object.keys(list)\r\n for (let k of _keys) {\r\n this.currentValues[k] = list[k]\r\n }\r\n },\r\n onUpdateControlWithNewValue: (fieldName, newValue) => {\r\n HUtils.runFuntion(\r\n this.props.fnList,\r\n \"afterUpdateValueControl\",\r\n [\r\n {\r\n fieldName,\r\n newValue,\r\n control: this.getConfigControlByFieldName(fieldName),\r\n },\r\n ]\r\n )\r\n this._onTouch(fieldName, newValue)\r\n if (\r\n this.fnListFromExtControl[fieldName] &&\r\n this.fnListFromExtControl[fieldName].updateValue\r\n ) {\r\n this.fnListFromExtControl[fieldName].updateValue(newValue)\r\n }\r\n },\r\n onUpdateValueMulti: (list: any) => {\r\n console.warn(\"onUpdateValueMulti:\", list)\r\n let _keys = Object.keys(list)\r\n if (_keys && _keys.length > 0) {\r\n for (let k of _keys) {\r\n HUtils.runFuntion(\r\n this.props.fnList,\r\n \"afterUpdateValueControl\",\r\n [\r\n {\r\n fieldName: k,\r\n newValue: list[k],\r\n control: this.getConfigControlByFieldName(k),\r\n },\r\n ]\r\n )\r\n this._onTouch(k, list[k])\r\n }\r\n }\r\n },\r\n registerControl: (fieldName: string, opts: any = {}) => {\r\n this.controlsOptsByFieldName[fieldName] = {\r\n component: opts.component,\r\n forceUpdate: opts.forceUpdate,\r\n }\r\n },\r\n onTouch: ({ fieldName }: { fieldName: string }) => {\r\n if (this.toucheds.indexOf(fieldName) === -1) {\r\n this.toucheds.push(fieldName)\r\n }\r\n },\r\n }}\r\n />\r\n )\r\n })}\r\n {this._renderFooter()}\r\n \r\n )\r\n }\r\n}\r\nexport default MyForm\r\n","import { MyUI, MyIcon } from \"@macashipo/mlib\"\r\nimport { HAuth } from \"src/core/helpers\"\r\nimport classNames from \"classnames\"\r\nimport { IoSearchOutline } from \"react-icons/io5\"\r\nimport Skeleton from \"react-loading-skeleton\"\r\nimport styled from \"styled-components\"\r\nimport dfLogo from \"src/modules/app_sigo/images/logo-sigo.png\"\r\n\r\nexport const getLoadingCategory = props => {\r\n const { firstLoading, tabList, arr, loadingMore, moreConfig } = props\r\n const logo = HAuth.getUserLogoApp() || dfLogo //\"/config/logo.png\"\r\n let _arr = [...arr]\r\n if (!firstLoading) {\r\n _arr = Array.from({ length: 12 }, (_, i) => i)\r\n }\r\n let scrollEnd = false\r\n if (moreConfig?.scroll_end) {\r\n scrollEnd = true\r\n }\r\n return (\r\n \r\n {firstLoading && (\r\n
\r\n \r\n
\r\n \r\n \"logo\"\r\n \r\n
\r\n
\r\n
\r\n {tabList &&\r\n tabList?.length > 0 &&\r\n tabList?.map(v => {\r\n return (\r\n \r\n \r\n \r\n )\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
{}
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
    \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n \r\n
\r\n {firstLoading && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {_arr &&\r\n _arr?.length > 0 &&\r\n _arr.map((v, i) => {\r\n return (\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {\" \"}\r\n \r\n
\r\n
\r\n {\" \"}\r\n \r\n
\r\n
\r\n {\" \"}\r\n \r\n
\r\n
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n
\r\n \r\n \r\n {!loadingMore && (\r\n \r\n
\r\n
\r\n Tiếp tục khám phá những chiếc xe phù hợp với bạn\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n
\r\n )\r\n}\r\nconst LoadMore = styled.div`\r\n padding: 50px;\r\n & .wrap-load-more {\r\n min-height: 85px;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n }\r\n & .title-loading-more {\r\n font-weight: 700;\r\n font-size: 20px;\r\n color: var(--color-text-000);\r\n text-align: center;\r\n }\r\n & .btn-loading-more {\r\n padding-inline: 50px;\r\n border-radius: 6px;\r\n background-color: #353535;\r\n color: #fff;\r\n font-weight: 700;\r\n border: 1px solid #bababa;\r\n &:hover {\r\n background-color: #353535;\r\n }\r\n &:active {\r\n border: 1px solid #bababa;\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n &.hidden-desktop {\r\n display: unset !important;\r\n }\r\n }\r\n`\r\nconst WrapSkeletonLoading = styled.div`\r\n &.page-category-skeleton {\r\n }\r\n & .navbar {\r\n border-bottom: 1px solid var(--color-border-e4);\r\n background-color: var(--color-text-fff) !important;\r\n }\r\n hr {\r\n margin-top: 5px !important;\r\n margin-bottom: 0;\r\n border-color: var(--color-border-e4);\r\n background-color: var(--color-border-e4);\r\n }\r\n & .only-mobile {\r\n display: none;\r\n }\r\n @media (max-width: 1199px) {\r\n // display: none;\r\n & .only-mobile {\r\n display: unset;\r\n }\r\n & .only-desktop {\r\n display: none;\r\n }\r\n hr {\r\n display: none;\r\n }\r\n & .navbar {\r\n padding: 15px 10px 0px;\r\n }\r\n }\r\n`\r\nconst WrapPageContent = styled.div`\r\n &.page-category {\r\n padding-top: 170 !important;\r\n &.is-load-more {\r\n padding-top: 0;\r\n margin-top: -180px;\r\n }\r\n }\r\n & .wrap-total.skeleton {\r\n & > span {\r\n min-width: 250px;\r\n height: 25px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n }\r\n }\r\n }\r\n & .wrap-skaleton {\r\n margin-bottom: 15px;\r\n & .image-skeleton {\r\n max-height: 234px;\r\n min-height: 234px;\r\n height: 234px;\r\n }\r\n & .wrap-content-skeleton {\r\n padding: 10px 0;\r\n & .carname-skeleton {\r\n width: 100%;\r\n justify-content: space-between;\r\n padding-bottom: 10px;\r\n & > span:first-child {\r\n width: 50%;\r\n height: 25px;\r\n & > span {\r\n height: 25px;\r\n }\r\n }\r\n & > span:last-child {\r\n width: 30%;\r\n height: 25px;\r\n & > span {\r\n height: 25px;\r\n }\r\n }\r\n }\r\n & .address-skeleton {\r\n width: 70%;\r\n }\r\n & .distance-skeleton {\r\n width: 50%;\r\n }\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n &.page-category {\r\n padding-top: 10px;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n &.page-category {\r\n padding-top: 10px;\r\n }\r\n }\r\n @media ((min-width: 1500px)) {\r\n &.col-xxl-2-custom {\r\n flex: 0 0 auto;\r\n width: 16.66667%;\r\n }\r\n }\r\n`\r\nconst RightMenu = styled.div`\r\n &.right-menu {\r\n &.collapse.navbar-collapse {\r\n display: flex !important;\r\n align-items: center;\r\n gap: 20px;\r\n flex: 1 0 140px;\r\n justify-content: flex-end;\r\n padding-right: 0;\r\n }\r\n & .navbar-right.avatar-menu {\r\n float: unset;\r\n margin-top: 0 !important;\r\n }\r\n & .custom-link {\r\n color: var(--color-text-000);\r\n font-size: 14px;\r\n font-weight: 500;\r\n }\r\n }\r\n`\r\nconst WrapTopHeader = styled.div`\r\n &.wrap-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: flex-start;\r\n height: 135px;\r\n transition: background 0.25s;\r\n width: 100%;\r\n position: relative;\r\n z-index: 334;\r\n padding: 0px;\r\n }\r\n & .navbar-header {\r\n transition: all 0.25s;\r\n & .navbar-brand {\r\n padding: 0 !important;\r\n }\r\n & .btn-filter {\r\n display: none;\r\n }\r\n }\r\n & .logo {\r\n filter: unset;\r\n }\r\n\r\n & .first-menu {\r\n display: flex;\r\n gap: 50px;\r\n & .menu-item {\r\n margin-right: 50px;\r\n color: #5b5959;\r\n font-weight: 500;\r\n font-size: 16px;\r\n min-width: 60px;\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n & .menu-item.active {\r\n color: var(--color-text-000);\r\n font-weight: 700;\r\n }\r\n }\r\n & .form-search {\r\n // max-width: 75%;\r\n height: 5em;\r\n top: 50px;\r\n transform: translate(-50%, 0);\r\n border-radius: 37px;\r\n width: 1000px;\r\n position: absolute;\r\n align-items: center;\r\n background: #e9e9e9;\r\n box-shadow: 0px 2px 10px 0px #0000001a;\r\n border: 1px solid #e3e1e1;\r\n cursor: pointer;\r\n display: flex;\r\n padding: 0 0 0 0.5em;\r\n transition: all 0.25s;\r\n left: 50%;\r\n justify-content: flex-end;\r\n & .mb-3 {\r\n margin-bottom: 0 !important;\r\n }\r\n & .datefromto-dropdown-menu {\r\n transform: translate(-29%, 2%) !important;\r\n }\r\n & .select-address-dropdown-menu {\r\n transform: translate(-29%, 2%) !important;\r\n left: 100% !important;\r\n top: 5px !important;\r\n backface-visibility: hidden;\r\n }\r\n }\r\n & .form-search {\r\n & .form-group {\r\n width: 30%;\r\n }\r\n & .form-group.datefromto {\r\n width: calc(70% - 70px - 18px);\r\n }\r\n }\r\n & .mid-menu {\r\n left: 50%;\r\n position: absolute;\r\n top: 20px;\r\n visibility: visible;\r\n transform: translateX(-50%) translateY(-50%) scale(1);\r\n transition: all 0.25s;\r\n }\r\n & .btn-search {\r\n width: 56px;\r\n height: 56px;\r\n box-shadow: none;\r\n border: none;\r\n border-radius: 50%;\r\n font-size: 25px;\r\n background-color: var(--mau1);\r\n color: var(--color-text-fff);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-left: 20px;\r\n margin-right: 10px;\r\n }\r\n & .btn-search:hover {\r\n box-shadow: none;\r\n border: none;\r\n }\r\n & .btn-time-select {\r\n padding: 0;\r\n color: var(--color-text-search-bar);\r\n box-shadow: none;\r\n border: none;\r\n display: flex;\r\n gap: 10px;\r\n align-items: center;\r\n width: 100%;\r\n & .item {\r\n padding: 10px;\r\n padding-left: 20px;\r\n text-align: left;\r\n width: 48%;\r\n position: relative;\r\n z-index: 1;\r\n\r\n & .title {\r\n font-weight: 700;\r\n color: var(--color-text-000);\r\n font-size: 14px;\r\n }\r\n & .time {\r\n padding-top: 5px;\r\n font-size: 16px;\r\n color: var(--color-text-search-bar);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n & .item.active::after {\r\n content: \"\";\r\n top: -2px;\r\n left: 0;\r\n right: 0;\r\n z-index: -1;\r\n margin: 0 2px;\r\n width: 100%;\r\n height: calc(100% + 2px);\r\n position: absolute;\r\n border: 1px solid transparent;\r\n background-color: var(--color-text-fff);\r\n box-shadow: 0 3px 12px 0 rgba(0, 0, 0, 0.15);\r\n border-radius: 37px;\r\n }\r\n & .divider-line {\r\n border-left: 1px solid #d8d8d8;\r\n width: 1px;\r\n height: 30px;\r\n }\r\n & .divider-line.custom {\r\n margin-left: -5px;\r\n }\r\n & .text-merge {\r\n font-size: 14px;\r\n color: var(--color-text-search-bar);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n & .btn-time-select.custom-text {\r\n display: none;\r\n }\r\n & .btn-input-address {\r\n color: var(--color-text-000);\r\n text-align: left;\r\n border: none;\r\n box-shadow: none;\r\n width: 100%;\r\n padding: 6px;\r\n &.custom-text {\r\n display: none;\r\n }\r\n & .title {\r\n font-weight: 700;\r\n font-size: 14px;\r\n // min-width: 100%;\r\n }\r\n & .value {\r\n padding-top: 5px;\r\n font-size: 16px;\r\n color: var(--color-text-search-bar);\r\n &:not(.merge-mode) {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n &.merge-mode {\r\n padding-top: 0px;\r\n font-size: 14px;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n & svg {\r\n margin-right: 5px;\r\n }\r\n span {\r\n width: calc(100% - 20px);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n }\r\n &.active {\r\n position: relative;\r\n }\r\n &.active::before {\r\n content: \"\";\r\n top: -6px;\r\n left: -20px;\r\n right: 0;\r\n z-index: -1;\r\n margin: 0 2px;\r\n width: calc(100% + 20px);\r\n height: calc(100% + 10px);\r\n position: absolute;\r\n border: 1px solid transparent;\r\n background-color: var(--color-text-fff);\r\n box-shadow: 0 3px 12px 0 rgba(0, 0, 0, 0.15);\r\n border-radius: 37px;\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n & .form-search {\r\n max-width: 100%;\r\n }\r\n &.wrap-header {\r\n height: 53px;\r\n }\r\n & .navbar-header {\r\n & .btn-filter {\r\n display: inline-block;\r\n margin: 5px 15px 0px;\r\n color: rgb(34, 34, 34);\r\n min-width: 81px;\r\n height: 39px;\r\n padding: 0;\r\n border-color: transparent;\r\n & > span {\r\n height: 100%;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n border-radius: 20px;\r\n }\r\n }\r\n }\r\n }\r\n & .form-search,\r\n & .mid-menu {\r\n display: none;\r\n }\r\n }\r\n`\r\nconst WrapBottomHeader = styled.div`\r\n &.wpfillter {\r\n margin-bottom: 0px;\r\n padding: 10px 0px 0px;\r\n }\r\n & .justify-content-space-between {\r\n justify-content: space-between;\r\n }\r\n & .wrap-bottom-filter {\r\n & .subtitle {\r\n text-wrap: nowrap;\r\n font-size: 12px;\r\n color: #898989;\r\n width: 0;\r\n }\r\n & .wrap-filter-left {\r\n align-items: stretch;\r\n & .wrap-button-form {\r\n align-self: stretch;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: end;\r\n }\r\n &.wrap-filter-type {\r\n // border-right: 1px solid #dedede;\r\n // margin-right: 10px;\r\n & .subtitle {\r\n display: none;\r\n }\r\n & .wrap-button-form:first-child .subtitle {\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n & .btn-refresh {\r\n padding: 6px 15px;\r\n margin-right: 8px;\r\n position: relative;\r\n &.loading {\r\n width: 57px;\r\n min-height: 39px;\r\n border-color: transparent;\r\n & > span {\r\n display: block;\r\n height: 39px;\r\n margin: -7px -15px;\r\n & > span {\r\n height: 100%;\r\n border-radius: 20px;\r\n display: block;\r\n }\r\n }\r\n & > svg {\r\n display: none;\r\n }\r\n }\r\n & > span {\r\n display: none;\r\n }\r\n &:hover,\r\n &:focus {\r\n border-color: #ccc !important;\r\n background: transparent !important;\r\n }\r\n &.btn-active-filter {\r\n background: var(--mau1);\r\n border-color: var(--color-border-blue-light);\r\n &:after {\r\n content: \"\";\r\n display: block;\r\n border-radius: 50%;\r\n width: 12px;\r\n height: 12px;\r\n position: absolute;\r\n right: 10px;\r\n top: 6px;\r\n background: red;\r\n }\r\n }\r\n }\r\n & .btn-form-skeleton.loading {\r\n width: 125px;\r\n height: 39px;\r\n border-color: transparent;\r\n user-select: none;\r\n pointer-events: none;\r\n touch-action: none;\r\n & > span:first-child {\r\n display: block !important;\r\n height: 38px;\r\n margin: -8px -12px;\r\n & > span {\r\n height: 100%;\r\n border-radius: 20px;\r\n display: block;\r\n }\r\n }\r\n & > span:nth-child(3) {\r\n display: none;\r\n }\r\n & > svg {\r\n display: none;\r\n }\r\n }\r\n & .wrap-switch.loading {\r\n display: flex;\r\n align-items: center;\r\n &.loading {\r\n & .form-group {\r\n display: none;\r\n }\r\n & > span {\r\n min-width: 217px;\r\n display: block;\r\n height: 39px;\r\n & > span {\r\n height: 100%;\r\n border-radius: 20px;\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n display: none;\r\n }\r\n`\r\n","import classNames from \"classnames\"\r\nimport Skeleton from \"react-loading-skeleton\"\r\nimport styled from \"styled-components\"\r\nimport { MyUI, MyIcon, HUtils, HCF } from \"@macashipo/mlib\"\r\nimport { IoSearchOutline } from \"react-icons/io5\"\r\nimport imgGGPlayStore from \"src/modules/app_sigo/assets/imgs/gplay.jpg\"\r\nimport imgAppleStore from \"src/modules/app_sigo/assets/imgs/ios.jpg\"\r\nimport imgBgDownloadApp from \"src/modules/app_sigo/assets/imgs/download-app-background.png\"\r\nimport imgQRCode from \"src/modules/app_sigo/assets/imgs/qr-download-app.png\"\r\nimport { useEffect, useState } from \"react\"\r\n\r\nconst MyLoadingContent = props => {\r\n const { onlyRenderBlog = false } = props\r\n const [screenWidth, setScreenWidth] = useState(0)\r\n useEffect(() => {\r\n const ro = new ResizeObserver((entries, observer) => {\r\n for (const entry of entries) {\r\n const { left, top, width, height } = entry.contentRect\r\n if (entry.target == document.body) {\r\n setScreenWidth(width)\r\n }\r\n }\r\n })\r\n ro.observe(document.body)\r\n // eslint-disable-next-line\r\n }, [])\r\n const getItemList4CarSuggest = defaultConfig => {\r\n const responsive = defaultConfig || {}\r\n const keys = Object.keys(responsive)\r\n let config: any = {}\r\n if (keys?.length > 0) {\r\n keys.every((k, i) => {\r\n let configScreen = Number(k)\r\n let nextConfigScreen = -1\r\n if (i + 1 < keys?.length) {\r\n nextConfigScreen = Number(keys[i + 1])\r\n }\r\n if (\r\n screenWidth >= configScreen &&\r\n ((nextConfigScreen > -1 && screenWidth < nextConfigScreen) ||\r\n nextConfigScreen === -1)\r\n ) {\r\n config = responsive[k]\r\n return false\r\n }\r\n return true\r\n })\r\n }\r\n return config\r\n }\r\n const getItemList4Render = defaultConfig => {\r\n const responsive = defaultConfig || {}\r\n const keys = Object.keys(responsive)\r\n let config: any = {}\r\n let item = 1\r\n if (keys?.length > 0) {\r\n keys.every((k, i) => {\r\n let configScreen = Number(k)\r\n let nextConfigScreen = -1\r\n if (i + 1 < keys?.length) {\r\n nextConfigScreen = Number(keys[i + 1])\r\n }\r\n if (\r\n screenWidth >= configScreen &&\r\n ((nextConfigScreen > -1 && screenWidth < nextConfigScreen) ||\r\n nextConfigScreen === -1)\r\n ) {\r\n config = responsive[k]\r\n return false\r\n }\r\n return true\r\n })\r\n if (config?.items) {\r\n item = config?.items\r\n }\r\n }\r\n const arr = Array.from({ length: item }, (_, index) => index + 1)\r\n return arr\r\n }\r\n const renderLandingPage = () => {\r\n const defaultConfig = {}\r\n const itemList = getItemList4Render(defaultConfig)\r\n if (itemList && itemList?.length > 0) {\r\n return (\r\n \r\n
\r\n {itemList?.map((v, i) => {\r\n return (\r\n \r\n \r\n
\r\n )\r\n })}\r\n \r\n
\r\n )\r\n }\r\n return <>\r\n }\r\n const renderService = () => {\r\n // Cần thay đổi khi điều chỉnh responsive trên config home slide\r\n const defaultConfig = {\r\n \"0\": {\r\n items: 1,\r\n nav: true,\r\n loop: true,\r\n },\r\n \"768\": {\r\n items: 3,\r\n nav: false,\r\n },\r\n }\r\n const itemList = getItemList4Render(defaultConfig)\r\n if (itemList && itemList?.length > 0) {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {itemList?.map((v, i) => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n const renderCategory = () => {\r\n // Cần thay đổi khi điều chỉnh responsive trên config home slide\r\n const defaultConfig = {\r\n \"0\": {\r\n items: 1,\r\n nav: false,\r\n },\r\n \"580\": {\r\n items: 3,\r\n nav: true,\r\n },\r\n \"1016\": {\r\n items: 4,\r\n nav: true,\r\n },\r\n \"1500\": {\r\n items: 6,\r\n nav: true,\r\n },\r\n }\r\n const itemList = getItemList4Render(defaultConfig)\r\n if (itemList && itemList?.length > 0) {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {itemList?.map((v, i) => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n const renderPromotion = () => {\r\n // Cần thay đổi khi điều chỉnh responsive trên config home slide\r\n const defaultConfig = {\r\n \"0\": {\r\n items: 1,\r\n nav: false,\r\n },\r\n \"580\": {\r\n items: 1,\r\n nav: false,\r\n },\r\n \"1000\": {\r\n items: 3,\r\n nav: false,\r\n },\r\n }\r\n const itemList = getItemList4Render(defaultConfig)\r\n if (itemList && itemList?.length > 0) {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {itemList?.map((v, i) => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n const renderCarSuggest = () => {\r\n // Cần thay đổi khi điều chỉnh responsive trên config home slide\r\n const defaultConfig = {\r\n \"0\": {\r\n items: 2,\r\n itemPerRow: 1,\r\n },\r\n \"768\": {\r\n items: 4,\r\n itemPerRow: 2,\r\n },\r\n \"1000\": {\r\n items: 6,\r\n itemPerRow: 3,\r\n },\r\n \"1200\": { items: 8, itemPerRow: 4 },\r\n \"1561\": { items: 12, itemPerRow: 6 },\r\n }\r\n const config = getItemList4CarSuggest(defaultConfig)\r\n const { items, itemPerRow } = config || {}\r\n if (items && items > 0) {\r\n const itemList = Array.from({ length: items }, (_, index) => index + 1)\r\n if (itemList && itemList?.length > 0) {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {itemList?.map((v, i) => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n \r\n )\r\n }\r\n }\r\n\r\n return <>\r\n }\r\n const renderHelps = () => {\r\n // Cần thay đổi khi điều chỉnh responsive trên config home slide\r\n const defaultConfig = {\r\n \"0\": {\r\n items: 1,\r\n nav: true,\r\n },\r\n \"580\": {\r\n items: 1,\r\n nav: true,\r\n margin: 5,\r\n },\r\n \"820\": {\r\n items: 2,\r\n nav: true,\r\n },\r\n \"1561\": {\r\n items: 3,\r\n nav: true,\r\n },\r\n }\r\n const itemList = getItemList4Render(defaultConfig)\r\n if (itemList && itemList?.length > 0) {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {/*
\r\n \r\n
*/}\r\n
\r\n
\r\n {itemList?.map((v, i) => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n {/*
*/}\r\n
\r\n \r\n
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n const renderAdvantage = () => {\r\n // Cần thay đổi khi điều chỉnh responsive trên config home slide\r\n const defaultConfig = {\r\n \"0\": {\r\n items: 1,\r\n nav: false,\r\n },\r\n \"768\": {\r\n items: 2,\r\n },\r\n \"1200\": {\r\n items: 3,\r\n },\r\n \"1561\": {\r\n items: 4,\r\n },\r\n }\r\n const itemList = getItemList4Render(defaultConfig)\r\n if (itemList && itemList?.length > 0) {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {itemList?.map((v, i) => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n const renderBlog = () => {\r\n // Cần thay đổi khi điều chỉnh responsive trên config home slide\r\n const defaultConfig = {\r\n \"0\": {\r\n items: 1,\r\n },\r\n \"580\": {\r\n items: 2,\r\n },\r\n \"1200\": {\r\n items: 3,\r\n },\r\n \"1500\": {\r\n items: 4,\r\n },\r\n \"1800\": {\r\n items: 5,\r\n },\r\n }\r\n const itemList = getItemList4Render(defaultConfig)\r\n if (itemList && itemList?.length > 0) {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {itemList?.map((v, i) => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n if (!onlyRenderBlog) {\r\n return (\r\n <>\r\n {renderLandingPage()}\r\n {renderService()}\r\n {renderCategory()}\r\n {renderPromotion()}\r\n {renderCarSuggest()}\r\n {renderHelps()}\r\n {renderAdvantage()}\r\n \r\n )\r\n }\r\n return <>{renderBlog()}\r\n}\r\nexport const getLoadingHome = props => {\r\n const { tabList, logo } = props\r\n const renderApp = () => {\r\n const dfConfigDownloadApp =\r\n HUtils.get(HCF.getCF(\"websiteSetting\"), \"download_app_info\") || {}\r\n const isCustom = dfConfigDownloadApp?.custom\r\n const qrImg = dfConfigDownloadApp?.qr_code_img_url || imgQRCode\r\n const linkGgPlayStore = dfConfigDownloadApp?.android_url\r\n const linkAppStore = dfConfigDownloadApp?.app_store_url\r\n const description = dfConfigDownloadApp?.description || \"\"\r\n return (\r\n \r\n
\r\n Tải ứng dụng Sigo
để tối ưu trải nghiệm của bạn\r\n
\r\n
\r\n Tải ứng dụng Sigo để tối ưu trải nghiệm của bạn\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {linkAppStore && (\r\n
\r\n \r\n \r\n \r\n
\r\n )}\r\n {linkGgPlayStore && (\r\n
\r\n \r\n \r\n \r\n
\r\n )}\r\n
\r\n {isCustom ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n {/* */}\r\n
\r\n \r\n \r\n
\r\n )\r\n }\r\n return (\r\n \r\n
\r\n \r\n
\r\n \r\n \"logo\"\r\n \r\n
\r\n
\r\n
\r\n {tabList &&\r\n tabList?.length > 0 &&\r\n tabList?.map(v => {\r\n return (\r\n \r\n \r\n \r\n )\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
{}
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
    \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n {renderApp()}\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nconst WrapDownloadApp: any = styled.div`\r\n position: relative;\r\n margin-top: 25px;\r\n & .title {\r\n top: 0;\r\n left: 0;\r\n font-size: 36px;\r\n font-weight: 700;\r\n color: var(--color-text-000);\r\n line-height: 50px;\r\n &:not(.mobile) {\r\n position: absolute;\r\n }\r\n }\r\n & .wrap-content {\r\n position: absolute;\r\n top: calc(50% + 25px);\r\n transform: translateY(-50%);\r\n left: 30px;\r\n & .description {\r\n margin-bottom: 30px;\r\n }\r\n & .app-img {\r\n img {\r\n width: 170px;\r\n object-fit: cover;\r\n margin-bottom: 5px;\r\n }\r\n }\r\n & svg.ic-taxi {\r\n margin-top: 20px;\r\n }\r\n }\r\n & .wrap-img-and-qr {\r\n & .qrcode {\r\n width: 120px;\r\n height: 120px;\r\n margin-top: -3px;\r\n object-fit: cover;\r\n }\r\n & .wrap-download-img {\r\n flex-direction: column;\r\n margin-right: 10px;\r\n }\r\n }\r\n & .mobile {\r\n display: none;\r\n }\r\n & .img-download-app {\r\n align-self: flex-start;\r\n }\r\n @media (max-width: 1199px) {\r\n & .title {\r\n left: 40px;\r\n font-size: 28px;\r\n line-height: 40px;\r\n }\r\n & .wrap-content {\r\n left: 60px;\r\n & .description {\r\n margin-bottom: 10px;\r\n }\r\n & svg.ic-taxi {\r\n margin-top: 10px;\r\n width: 60px;\r\n }\r\n & .app-img {\r\n img {\r\n width: 150px;\r\n object-fit: cover;\r\n }\r\n }\r\n }\r\n & .wrap-img-and-qr {\r\n & .qrcode {\r\n width: 113px;\r\n height: 113px;\r\n }\r\n\r\n & > svg.ic-qr {\r\n width: 110px;\r\n height: 110px;\r\n }\r\n }\r\n &.container {\r\n width: 100%;\r\n max-width: 100%;\r\n padding: 0 !important;\r\n }\r\n }\r\n @media (max-width: 1160px) {\r\n & .wrap-content {\r\n top: calc(50% + 35px);\r\n & svg.ic-taxi {\r\n width: 80px;\r\n margin-top: -13px;\r\n }\r\n }\r\n & .wrap-bottom-content {\r\n // display: flex;\r\n }\r\n &.container {\r\n width: 100%;\r\n max-width: 100%;\r\n padding: 0 !important;\r\n }\r\n }\r\n @media (max-width: 1023px) {\r\n & .title {\r\n display: none;\r\n margin-bottom: 1rem;\r\n }\r\n & .wrap-content {\r\n position: unset;\r\n width: 100%;\r\n transform: unset;\r\n }\r\n & .mobile {\r\n display: unset;\r\n }\r\n & img.img-download-app {\r\n display: none;\r\n }\r\n // & .wrap-download-img {\r\n // flex-direction: row;\r\n // & .app-img:first-child {\r\n // margin-right: 10px;\r\n // }\r\n // }\r\n & .wrap-content {\r\n & svg.ic-taxi {\r\n width: 80x;\r\n margin-top: 10px;\r\n }\r\n }\r\n & .wrap-bottom-content {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n & .wrap-img-and-qr {\r\n justify-content: center;\r\n }\r\n }\r\n`\r\nconst WrapContent = styled.div`\r\n &.page-home {\r\n & .navbar {\r\n padding-bottom: 5px;\r\n }\r\n }\r\n & .wrap-home-slides {\r\n padding: 25px 0px;\r\n margin-left: 0px;\r\n margin-right: 0px;\r\n\r\n &.landing-page {\r\n margin-top: 25px;\r\n margin-bottom: 15px;\r\n position: relative;\r\n z-index: 0;\r\n height: 500px;\r\n }\r\n }\r\n & .wrap-home-slide {\r\n height: 100%;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n & > span {\r\n height: 100%;\r\n border-radius: 15px;\r\n }\r\n }\r\n }\r\n & .wrap-title-home {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n flex-direction: column;\r\n margin-bottom: 30px;\r\n & .title-home {\r\n width: 500px;\r\n height: 49px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n & .description-title {\r\n padding-top: 15px;\r\n width: 700px;\r\n height: 40px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .wrap-title-home {\r\n & .title-home {\r\n width: 100%;\r\n height: 39px;\r\n }\r\n & .description-title {\r\n width: 100%;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapLandingPage = styled.div``\r\nconst WrapHomeService: any = styled.div`\r\n &.home_service_loading {\r\n padding-top: 0px;\r\n max-width: 1200px;\r\n margin: 0px auto 25px;\r\n }\r\n & .home_service {\r\n display: flex;\r\n & .one_service_item {\r\n width: ${(props: any) =>\r\n props?.items ? `calc(100% / ${props?.items})` : \"100%\"};\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n flex-direction: column;\r\n & .icon {\r\n width: 113px;\r\n height: 113px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n & .title_item {\r\n padding-top: 15px;\r\n height: 40px;\r\n width: 130px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n & .description_item {\r\n padding-top: 15px;\r\n height: 65px;\r\n width: 220px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n & .btn_item {\r\n margin-top: 20px;\r\n height: 35px;\r\n width: 100px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n & > span {\r\n height: 100%;\r\n border-radius: 8px;\r\n }\r\n }\r\n }\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapHomeCategory: any = styled.div`\r\n &.home_category_loading {\r\n background-color: rgb(242, 242, 242);\r\n margin-bottom: 0px;\r\n padding-top: 30px;\r\n padding-bottom: 50px;\r\n }\r\n & .home_category {\r\n display: flex;\r\n & .one_category_item {\r\n width: ${(props: any) =>\r\n props?.items ? `calc(100% / ${props?.items})` : \"100%\"};\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n flex-direction: column;\r\n margin-right: 15px;\r\n & .image {\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n height: 300px;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n & .wrap-content {\r\n height: 110px;\r\n width: 100%;\r\n background-color: var(--color-text-fff);\r\n border-radius: 0px 0px 15px 15px;\r\n padding: 15px;\r\n }\r\n & .sub_text {\r\n padding-top: 5px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 80%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapHomePromotion: any = styled.div`\r\n & .home_promotion {\r\n display: flex;\r\n & .one_promotion_item {\r\n width: ${(props: any) =>\r\n props?.items ? `calc(100% / ${props?.items})` : \"100%\"};\r\n margin-right: 15px;\r\n & .image {\r\n width: 100%;\r\n height: 219px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapHomeCar: any = styled.div`\r\n & .home_car {\r\n display: grid;\r\n grid-template-columns: repeat(\r\n ${(props: any) => (props?.itemPerRow ? props?.itemPerRow : 2)},\r\n minmax(0px, 1fr)\r\n );\r\n gap: 25px;\r\n margin-right: 0px;\r\n margin-left: 0px;\r\n padding: 0px;\r\n & .one_car_item {\r\n & .image {\r\n width: 100%;\r\n height: 219px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n & .wrap-name {\r\n margin: 10px 0;\r\n height: 30px;\r\n display: flex;\r\n justify-content: space-between;\r\n & .name {\r\n width: 70%;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n & .rate {\r\n width: 20%;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n`\r\nconst WrapHomeAdvantage: any = styled.div`\r\n & .home_advantage {\r\n display: flex;\r\n & .one_advantage_item {\r\n width: ${(props: any) =>\r\n props?.items ? `calc(100% / ${props?.items})` : \"100%\"};\r\n margin-right: 35px;\r\n & .wrap-img {\r\n width: 100%;\r\n height: 475px;\r\n position: relative;\r\n & .bg-img {\r\n content: \"\";\r\n position: absolute;\r\n bottom: 0;\r\n right: 0;\r\n background-color: #e8e8e8;\r\n height: 50%;\r\n width: 50%;\r\n border-radius: 15px;\r\n }\r\n }\r\n & .image {\r\n object-fit: cover;\r\n height: 455px;\r\n position: absolute;\r\n width: calc(100% - 20px) !important;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n border-radius: 15px;\r\n border: 5px solid var(--color-text-fff);\r\n }\r\n }\r\n }\r\n & .title {\r\n margin-top: 15px;\r\n }\r\n & .description {\r\n height: 90px;\r\n margin-top: 15px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapHomeBlog: any = styled.div`\r\n &.home_blog_loading {\r\n padding-top: 30px;\r\n padding-bottom: 50px;\r\n background-color: rgb(242, 242, 242);\r\n margin-bottom: 0px;\r\n }\r\n & .home_blog {\r\n display: flex;\r\n & .one_blog_item {\r\n width: ${(props: any) =>\r\n props?.items ? `calc(100% / ${props?.items})` : \"100%\"};\r\n margin-right: 15px;\r\n & .image {\r\n height: 325px;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n border-radius: 15px 15px 0 0;\r\n }\r\n }\r\n }\r\n & .wrap_content {\r\n padding: 15px;\r\n border-radius: 0px 0px 15px 15px;\r\n background-color: var(--color-text-fff);\r\n }\r\n & .title {\r\n margin-top: 15px;\r\n }\r\n & .description {\r\n margin-top: 15px;\r\n height: 90px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n & .date {\r\n margin-top: 15px;\r\n }\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapHomeHelps: any = styled.div`\r\n &.home_helps_loading {\r\n padding-top: 30px;\r\n padding-bottom: 50px;\r\n background-color: rgb(242, 247, 255);\r\n }\r\n & .home_helps {\r\n display: flex;\r\n & .one_helps_item {\r\n width: ${(props: any) =>\r\n props?.items ? `calc(100% / ${props?.items})` : \"100%\"};\r\n margin-right: 15px;\r\n & .image {\r\n width: 100%;\r\n height: 400px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n & .title {\r\n margin-top: 15px;\r\n }\r\n & .button_item {\r\n margin-top: 20px;\r\n width: 100px;\r\n height: 36px;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n width: 100%;\r\n & > span {\r\n height: 100%;\r\n border-radius: 10px;\r\n }\r\n }\r\n }\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapTopHeader = styled.div`\r\n &.wrap-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: flex-start;\r\n height: 135px;\r\n transition: background 0.25s;\r\n width: 100%;\r\n position: relative;\r\n z-index: 334;\r\n padding: 0px;\r\n }\r\n & .navbar-header {\r\n transition: all 0.25s;\r\n & .navbar-brand {\r\n padding: 0 !important;\r\n }\r\n & .btn-filter {\r\n display: none;\r\n }\r\n }\r\n & .logo {\r\n filter: unset;\r\n }\r\n\r\n & .first-menu {\r\n display: flex;\r\n gap: 50px;\r\n & .menu-item {\r\n margin-right: 50px;\r\n color: #5b5959;\r\n font-weight: 500;\r\n font-size: 16px;\r\n min-width: 60px;\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n & .menu-item.active {\r\n color: var(--color-text-000);\r\n font-weight: 700;\r\n }\r\n }\r\n & .form-search {\r\n // max-width: 75%;\r\n height: 5em;\r\n top: 50px;\r\n transform: translate(-50%, 0);\r\n border-radius: 37px;\r\n width: 1000px;\r\n position: absolute;\r\n align-items: center;\r\n background: #e9e9e9;\r\n box-shadow: 0px 2px 10px 0px #0000001a;\r\n border: 1px solid #e3e1e1;\r\n cursor: pointer;\r\n display: flex;\r\n padding: 0 0 0 0.5em;\r\n transition: all 0.25s;\r\n left: 50%;\r\n justify-content: flex-end;\r\n & .mb-3 {\r\n margin-bottom: 0 !important;\r\n }\r\n & .datefromto-dropdown-menu {\r\n transform: translate(-29%, 2%) !important;\r\n }\r\n & .select-address-dropdown-menu {\r\n transform: translate(-29%, 2%) !important;\r\n left: 100% !important;\r\n top: 5px !important;\r\n backface-visibility: hidden;\r\n }\r\n }\r\n & .form-search {\r\n & .form-group {\r\n width: 30%;\r\n }\r\n & .form-group.datefromto {\r\n width: calc(70% - 70px - 18px);\r\n }\r\n }\r\n & .mid-menu {\r\n left: 50%;\r\n position: absolute;\r\n top: 20px;\r\n visibility: visible;\r\n transform: translateX(-50%) translateY(-50%) scale(1);\r\n transition: all 0.25s;\r\n }\r\n & .btn-search {\r\n width: 56px;\r\n height: 56px;\r\n box-shadow: none;\r\n border: none;\r\n border-radius: 50%;\r\n font-size: 25px;\r\n background-color: var(--mau1);\r\n color: var(--color-text-fff);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-left: 20px;\r\n margin-right: 10px;\r\n }\r\n & .btn-search:hover {\r\n box-shadow: none;\r\n border: none;\r\n }\r\n & .btn-time-select {\r\n padding: 0;\r\n color: var(--color-text-search-bar);\r\n box-shadow: none;\r\n border: none;\r\n display: flex;\r\n gap: 10px;\r\n align-items: center;\r\n width: 100%;\r\n & .item {\r\n padding: 10px;\r\n padding-left: 20px;\r\n text-align: left;\r\n width: 48%;\r\n position: relative;\r\n z-index: 1;\r\n\r\n & .title {\r\n font-weight: 700;\r\n color: var(--color-text-000);\r\n font-size: 14px;\r\n }\r\n & .time {\r\n padding-top: 5px;\r\n font-size: 16px;\r\n color: var(--color-text-search-bar);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n & .item.active::after {\r\n content: \"\";\r\n top: -2px;\r\n left: 0;\r\n right: 0;\r\n z-index: -1;\r\n margin: 0 2px;\r\n width: 100%;\r\n height: calc(100% + 2px);\r\n position: absolute;\r\n border: 1px solid transparent;\r\n background-color: var(--color-text-fff);\r\n box-shadow: 0 3px 12px 0 rgba(0, 0, 0, 0.15);\r\n border-radius: 37px;\r\n }\r\n & .divider-line {\r\n border-left: 1px solid #d8d8d8;\r\n width: 1px;\r\n height: 30px;\r\n }\r\n & .divider-line.custom {\r\n margin-left: -5px;\r\n }\r\n & .text-merge {\r\n font-size: 14px;\r\n color: var(--color-text-search-bar);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n & .btn-time-select.custom-text {\r\n display: none;\r\n }\r\n & .btn-input-address {\r\n color: var(--color-text-000);\r\n text-align: left;\r\n border: none;\r\n box-shadow: none;\r\n width: 100%;\r\n padding: 6px;\r\n &.custom-text {\r\n display: none;\r\n }\r\n & .title {\r\n font-weight: 700;\r\n font-size: 14px;\r\n // min-width: 100%;\r\n }\r\n & .value {\r\n padding-top: 5px;\r\n font-size: 16px;\r\n color: var(--color-text-search-bar);\r\n &:not(.merge-mode) {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n &.merge-mode {\r\n padding-top: 0px;\r\n font-size: 14px;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n & svg {\r\n margin-right: 5px;\r\n }\r\n span {\r\n width: calc(100% - 20px);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n }\r\n &.active {\r\n position: relative;\r\n }\r\n &.active::before {\r\n content: \"\";\r\n top: -6px;\r\n left: -20px;\r\n right: 0;\r\n z-index: -1;\r\n margin: 0 2px;\r\n width: calc(100% + 20px);\r\n height: calc(100% + 10px);\r\n position: absolute;\r\n border: 1px solid transparent;\r\n background-color: var(--color-text-fff);\r\n box-shadow: 0 3px 12px 0 rgba(0, 0, 0, 0.15);\r\n border-radius: 37px;\r\n }\r\n }\r\n @media (max-width: 1009px) {\r\n & .form-search {\r\n max-width: 100%;\r\n }\r\n &.wrap-header {\r\n height: 53px;\r\n }\r\n & .navbar-header {\r\n & .btn-filter {\r\n display: inline-block;\r\n margin: 5px 15px 0px;\r\n color: rgb(34, 34, 34);\r\n min-width: 81px;\r\n height: 39px;\r\n padding: 0;\r\n border-color: transparent;\r\n & > span {\r\n height: 100%;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n border-radius: 20px;\r\n }\r\n }\r\n }\r\n }\r\n & .form-search,\r\n & .mid-menu {\r\n display: none;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n box-shadow: rgb(0 0 0 / 16%) 0 0 6px;\r\n padding-bottom: 5px;\r\n &.wrap-header.container {\r\n padding: 0px !important;\r\n & .navbar-header {\r\n margin: 0 !important;\r\n }\r\n }\r\n & .mobile-menu-dropdown {\r\n margin: 0;\r\n }\r\n & .navavatar {\r\n & .wp-icobar {\r\n // padding-top: 0 !important;\r\n margin-right: 5px;\r\n }\r\n }\r\n & .navbar-header {\r\n & .navbar-brand {\r\n padding: 5px 0 5px 10px !important;\r\n }\r\n }\r\n }\r\n`\r\nconst RightMenu = styled.div`\r\n &.right-menu {\r\n &.collapse.navbar-collapse {\r\n display: flex !important;\r\n align-items: center;\r\n gap: 20px;\r\n flex: 1 0 140px;\r\n justify-content: flex-end;\r\n padding-right: 0;\r\n }\r\n & .navbar-right.avatar-menu {\r\n float: unset;\r\n margin-top: 0 !important;\r\n }\r\n & .custom-link {\r\n color: var(--color-text-000);\r\n font-size: 14px;\r\n font-weight: 500;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n &.right-menu {\r\n margin: 0 !important;\r\n flex: unset;\r\n &.collapse.navbar-collapse {\r\n gap: unset;\r\n }\r\n & ul.dropdown-menu {\r\n display: none !important;\r\n }\r\n & .hidden-mobile {\r\n display: unset !important;\r\n }\r\n & .wp-icobar {\r\n padding-top: 14px;\r\n margin-right: 0;\r\n }\r\n & .arvartimg {\r\n max-height: unset;\r\n }\r\n & .navavatar {\r\n margin-right: 25px;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapLoadingSkeleton = styled.div`\r\n & .navbar {\r\n background-color: var(--color-text-fff) !important;\r\n box-shadow: rgba(0, 0, 0, 0.16) 0px 0px 6px;\r\n padding-bottom: 5px;\r\n }\r\n @media (max-width: 767px) {\r\n & .navbar {\r\n padding-bottom: 0 !important;\r\n }\r\n }\r\n`\r\n","import { MyUI, MyIcon } from \"@macashipo/mlib\"\r\nimport { HAuth } from \"src/core/helpers\"\r\nimport classNames from \"classnames\"\r\nimport { IoSearchOutline } from \"react-icons/io5\"\r\nimport Skeleton from \"react-loading-skeleton\"\r\nimport styled from \"styled-components\"\r\nimport dfLogo from \"src/modules/app_sigo/images/logo-sigo.png\"\r\n\r\nexport const getLoadingHeader = props => {\r\n const { tabList, isShowBottomHeader } = props\r\n const logo = HAuth.getUserLogoApp() || dfLogo //\"/config/logo.png\"\r\n return (\r\n \r\n
\r\n \r\n
\r\n \r\n \"logo\"\r\n \r\n
\r\n
\r\n
\r\n {tabList &&\r\n tabList?.length > 0 &&\r\n tabList?.map(v => {\r\n return (\r\n \r\n \r\n \r\n )\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
{}
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
    \r\n \r\n
\r\n \r\n
\r\n {isShowBottomHeader && (\r\n <>\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n )}\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\nconst WrapMobileHeader = styled.div`\r\n padding: 50px 5px 5px 10px;\r\n & .search-bar {\r\n cursor: pointer;\r\n margin-top: 0.5rem;\r\n box-shadow: 0 3px 10px rgba(0 0 0 / 0.1);\r\n border: 0.5px solid rgba(0 0 0 / 0.08);\r\n min-height: 56px;\r\n border-radius: 50px;\r\n display: flex;\r\n align-items: center;\r\n padding: 0 1rem;\r\n & i {\r\n margin-top: 0.25rem;\r\n font-size: 25px;\r\n color: var(--color-text-363636);\r\n }\r\n & .intro-text {\r\n margin-left: 1rem;\r\n & .main {\r\n width: 250px;\r\n }\r\n & .des {\r\n width: 300px;\r\n }\r\n }\r\n }\r\n & .right-menu {\r\n margin-top: 5px;\r\n }\r\n & .container.wrap-search-bar {\r\n width: 100%;\r\n max-width: 100%;\r\n padding: 5px !important;\r\n }\r\n & .wrap-header {\r\n padding: 0 !important;\r\n }\r\n & #navbar {\r\n border-bottom: none;\r\n padding-bottom: 0;\r\n }\r\n & .navbar-header {\r\n margin: 0 !important;\r\n }\r\n @media (min-width: 768px) and (max-width: 820px) {\r\n & .navbar-brand img {\r\n max-height: 30px;\r\n margin-top: 5px;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n padding: 0px 5px 5px 10px;\r\n & #navbar {\r\n border-bottom: none;\r\n padding-bottom: 5px;\r\n }\r\n & .search-bar {\r\n margin-top: 1rem;\r\n & i {\r\n margin-top: 0.25rem;\r\n font-size: 25px;\r\n color: var(--color-text-363636);\r\n }\r\n & .intro-text {\r\n & .main {\r\n width: 200px;\r\n }\r\n & .des {\r\n width: 250px;\r\n }\r\n }\r\n }\r\n }\r\n`\r\nconst WrapSkeletonLoading = styled.div`\r\n & .navbar {\r\n border-bottom: 1px solid var(--color-border-e4);\r\n background-color: var(--color-text-fff) !important;\r\n }\r\n hr {\r\n margin-top: 5px !important;\r\n margin-bottom: 0;\r\n border-color: var(--color-border-e4);\r\n background-color: var(--color-border-e4);\r\n }\r\n & .only-mobile {\r\n display: none;\r\n }\r\n @media (max-width: 1010px) {\r\n & .navbar.only-desktop {\r\n display: none;\r\n }\r\n & .only-mobile {\r\n display: unset;\r\n }\r\n }\r\n`\r\nconst RightMenu = styled.div`\r\n &.right-menu {\r\n &.collapse.navbar-collapse {\r\n display: flex !important;\r\n align-items: center;\r\n gap: 20px;\r\n flex: 1 0 140px;\r\n justify-content: flex-end;\r\n padding-right: 0;\r\n }\r\n & .navbar-right.avatar-menu {\r\n float: unset;\r\n margin-top: 0 !important;\r\n }\r\n & .custom-link {\r\n color: var(--color-text-000);\r\n font-size: 14px;\r\n font-weight: 500;\r\n }\r\n }\r\n`\r\nconst WrapTopHeader = styled.div`\r\n &.wrap-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: flex-start;\r\n height: 135px;\r\n transition: background 0.25s;\r\n width: 100%;\r\n position: relative;\r\n z-index: 334;\r\n padding: 0px;\r\n }\r\n & .navbar-header {\r\n transition: all 0.25s;\r\n & .navbar-brand {\r\n padding: 0 !important;\r\n }\r\n & .btn-filter {\r\n display: none;\r\n }\r\n }\r\n & .logo {\r\n filter: unset;\r\n }\r\n\r\n & .first-menu {\r\n display: flex;\r\n gap: 50px;\r\n & .menu-item {\r\n margin-right: 50px;\r\n color: #5b5959;\r\n font-weight: 500;\r\n font-size: 16px;\r\n min-width: 60px;\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n & .menu-item.active {\r\n color: var(--color-text-000);\r\n font-weight: 700;\r\n }\r\n }\r\n & .form-search {\r\n // max-width: 75%;\r\n height: 5em;\r\n top: 50px;\r\n transform: translate(-50%, 0);\r\n border-radius: 37px;\r\n width: 1000px;\r\n position: absolute;\r\n align-items: center;\r\n background: #e9e9e9;\r\n box-shadow: 0px 2px 10px 0px #0000001a;\r\n border: 1px solid #e3e1e1;\r\n cursor: pointer;\r\n display: flex;\r\n padding: 0 0 0 0.5em;\r\n transition: all 0.25s;\r\n left: 50%;\r\n justify-content: flex-end;\r\n & .mb-3 {\r\n margin-bottom: 0 !important;\r\n }\r\n & .datefromto-dropdown-menu {\r\n transform: translate(-29%, 2%) !important;\r\n }\r\n & .select-address-dropdown-menu {\r\n transform: translate(-29%, 2%) !important;\r\n left: 100% !important;\r\n top: 5px !important;\r\n backface-visibility: hidden;\r\n }\r\n }\r\n & .form-search {\r\n & .form-group {\r\n width: 30%;\r\n }\r\n & .form-group.datefromto {\r\n width: calc(70% - 70px - 18px);\r\n }\r\n }\r\n & .mid-menu {\r\n left: 50%;\r\n position: absolute;\r\n top: 20px;\r\n visibility: visible;\r\n transform: translateX(-50%) translateY(-50%) scale(1);\r\n transition: all 0.25s;\r\n }\r\n & .btn-search {\r\n width: 56px;\r\n height: 56px;\r\n box-shadow: none;\r\n border: none;\r\n border-radius: 50%;\r\n font-size: 25px;\r\n background-color: var(--mau1);\r\n color: var(--color-text-fff);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-left: 20px;\r\n margin-right: 10px;\r\n }\r\n & .btn-search:hover {\r\n box-shadow: none;\r\n border: none;\r\n }\r\n & .btn-time-select {\r\n padding: 0;\r\n color: var(--color-text-search-bar);\r\n box-shadow: none;\r\n border: none;\r\n display: flex;\r\n gap: 10px;\r\n align-items: center;\r\n width: 100%;\r\n & .item {\r\n padding: 10px;\r\n padding-left: 20px;\r\n text-align: left;\r\n width: 48%;\r\n position: relative;\r\n z-index: 1;\r\n\r\n & .title {\r\n font-weight: 700;\r\n color: var(--color-text-000);\r\n font-size: 14px;\r\n }\r\n & .time {\r\n padding-top: 5px;\r\n font-size: 16px;\r\n color: var(--color-text-search-bar);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n & .item.active::after {\r\n content: \"\";\r\n top: -2px;\r\n left: 0;\r\n right: 0;\r\n z-index: -1;\r\n margin: 0 2px;\r\n width: 100%;\r\n height: calc(100% + 2px);\r\n position: absolute;\r\n border: 1px solid transparent;\r\n background-color: var(--color-text-fff);\r\n box-shadow: 0 3px 12px 0 rgba(0, 0, 0, 0.15);\r\n border-radius: 37px;\r\n }\r\n & .divider-line {\r\n border-left: 1px solid #d8d8d8;\r\n width: 1px;\r\n height: 30px;\r\n }\r\n & .divider-line.custom {\r\n margin-left: -5px;\r\n }\r\n & .text-merge {\r\n font-size: 14px;\r\n color: var(--color-text-search-bar);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n & .btn-time-select.custom-text {\r\n display: none;\r\n }\r\n & .btn-input-address {\r\n color: var(--color-text-000);\r\n text-align: left;\r\n border: none;\r\n box-shadow: none;\r\n width: 100%;\r\n padding: 6px;\r\n &.custom-text {\r\n display: none;\r\n }\r\n & .title {\r\n font-weight: 700;\r\n font-size: 14px;\r\n // min-width: 100%;\r\n }\r\n & .value {\r\n padding-top: 5px;\r\n font-size: 16px;\r\n color: var(--color-text-search-bar);\r\n &:not(.merge-mode) {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n &.merge-mode {\r\n padding-top: 0px;\r\n font-size: 14px;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n & svg {\r\n margin-right: 5px;\r\n }\r\n span {\r\n width: calc(100% - 20px);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n }\r\n &.active {\r\n position: relative;\r\n }\r\n &.active::before {\r\n content: \"\";\r\n top: -6px;\r\n left: -20px;\r\n right: 0;\r\n z-index: -1;\r\n margin: 0 2px;\r\n width: calc(100% + 20px);\r\n height: calc(100% + 10px);\r\n position: absolute;\r\n border: 1px solid transparent;\r\n background-color: var(--color-text-fff);\r\n box-shadow: 0 3px 12px 0 rgba(0, 0, 0, 0.15);\r\n border-radius: 37px;\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n & .form-search {\r\n max-width: 100%;\r\n }\r\n &.wrap-header {\r\n height: 53px;\r\n }\r\n & .navbar-header {\r\n & .btn-filter {\r\n display: inline-block;\r\n margin: 5px 15px 0px;\r\n color: rgb(34, 34, 34);\r\n min-width: 81px;\r\n height: 39px;\r\n padding: 0;\r\n border-color: transparent;\r\n & > span {\r\n height: 100%;\r\n & > span {\r\n height: 100%;\r\n display: block;\r\n border-radius: 20px;\r\n }\r\n }\r\n }\r\n }\r\n & .form-search,\r\n & .mid-menu {\r\n display: none;\r\n }\r\n }\r\n`\r\nconst WrapBottomHeader = styled.div`\r\n &.wpfillter {\r\n margin-bottom: 0px;\r\n padding: 10px 0px 0px;\r\n }\r\n & .justify-content-space-between {\r\n justify-content: space-between;\r\n }\r\n & .wrap-bottom-filter {\r\n & .subtitle {\r\n text-wrap: nowrap;\r\n font-size: 12px;\r\n color: #898989;\r\n width: 0;\r\n }\r\n & .wrap-filter-left {\r\n align-items: stretch;\r\n & .wrap-button-form {\r\n align-self: stretch;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: end;\r\n }\r\n &.wrap-filter-type {\r\n // border-right: 1px solid #dedede;\r\n // margin-right: 10px;\r\n & .subtitle {\r\n display: none;\r\n }\r\n & .wrap-button-form:first-child .subtitle {\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n & .btn-refresh {\r\n padding: 6px 15px;\r\n margin-right: 8px;\r\n position: relative;\r\n &.loading {\r\n width: 57px;\r\n min-height: 39px;\r\n border-color: transparent;\r\n & > span {\r\n display: block;\r\n height: 39px;\r\n margin: -7px -15px;\r\n & > span {\r\n height: 100%;\r\n border-radius: 20px;\r\n display: block;\r\n }\r\n }\r\n & > svg {\r\n display: none;\r\n }\r\n }\r\n & > span {\r\n display: none;\r\n }\r\n &:hover,\r\n &:focus {\r\n border-color: #ccc !important;\r\n background: transparent !important;\r\n }\r\n &.btn-active-filter {\r\n background: var(--mau1);\r\n border-color: var(--color-border-blue-light);\r\n &:after {\r\n content: \"\";\r\n display: block;\r\n border-radius: 50%;\r\n width: 12px;\r\n height: 12px;\r\n position: absolute;\r\n right: 10px;\r\n top: 6px;\r\n background: red;\r\n }\r\n }\r\n }\r\n & .btn-form-skeleton.loading {\r\n width: 125px;\r\n height: 39px;\r\n border-color: transparent;\r\n user-select: none;\r\n pointer-events: none;\r\n touch-action: none;\r\n & > span:first-child {\r\n display: block !important;\r\n height: 38px;\r\n margin: -8px -12px;\r\n & > span {\r\n height: 100%;\r\n border-radius: 20px;\r\n display: block;\r\n }\r\n }\r\n & > span:nth-child(3) {\r\n display: none;\r\n }\r\n & > svg {\r\n display: none;\r\n }\r\n }\r\n & .wrap-switch.loading {\r\n display: flex;\r\n align-items: center;\r\n &.loading {\r\n & .form-group {\r\n display: none;\r\n }\r\n & > span {\r\n min-width: 217px;\r\n display: block;\r\n height: 39px;\r\n & > span {\r\n height: 100%;\r\n border-radius: 20px;\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n display: none;\r\n }\r\n`\r\n","import { pageKey } from \"src/modules/app_sigo/constants\"\r\nimport { getLoadingCategory } from \"./CategoryLoading\"\r\nimport { getLoadingHome } from \"./HomeLoading\"\r\nimport { getLoadingHeader } from \"./HeaderCategoryFullv2Loading\"\r\nimport { getLoadingBlogList } from \"./BlogListLoading\"\r\n\r\nexport const getLoadingPage = opts => {\r\n switch (opts?.key) {\r\n case pageKey.category:\r\n return getLoadingCategory(opts)\r\n case pageKey.home:\r\n return getLoadingHome(opts)\r\n case pageKey.onlyHeader:\r\n return getLoadingHeader(opts)\r\n case pageKey.sgTravelling:\r\n return getLoadingBlogList(opts)\r\n default:\r\n return []\r\n }\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\n/* eslint default-case: \"off\"*/\r\n\r\nimport React from \"react\"\r\nimport \"./styles.css\"\r\nconst DEFAULT_ZOOM_STEP = 0.3\r\nconst DEFAULT_LARGE_ZOOM = 4\r\nfunction getXY(e) {\r\n let x = 0\r\n let y = 0\r\n if (e.touches && e.touches.length) {\r\n x = e.touches[0].pageX\r\n y = e.touches[0].pageY\r\n } else {\r\n x = e.pageX\r\n y = e.pageY\r\n }\r\n return { x, y }\r\n}\r\nfunction Cond(props) {\r\n if (!props.condition) return null\r\n return {props.children}\r\n}\r\nexport default class Lightbox extends React.Component {\r\n initX = 0\r\n initY = 0\r\n lastX = 0\r\n lastY = 0\r\n _cont = React.createRef()\r\n state = {\r\n x: 0,\r\n y: 0,\r\n zoom: 1,\r\n rotate: 0,\r\n loading: true,\r\n moving: false,\r\n current: this.props?.startIndex ?? 0,\r\n multi: this.props?.images?.length ? true : false,\r\n }\r\n createTransform = (x, y, zoom, rotate) =>\r\n `translate3d(${x}px,${y}px,0px) scale(${zoom}) rotate(${rotate}deg)`\r\n stopSideEffect = e => e.stopPropagation()\r\n getCurrentImage = (s, p) => {\r\n if (!s.multi) return p.image ?? \"\"\r\n if (p.images == null) return \"\"\r\n return p.images[s.current]?.url ?? p.images?.[s.current] ?? \"\"\r\n }\r\n getCurrentTitle = (s, p) => {\r\n if (!s.multi) return p.title ?? \"\"\r\n return p.images?.[s.current]?.title ?? \"\"\r\n }\r\n resetZoom = () => this.setState({ x: 0, y: 0, zoom: 1 })\r\n shockZoom = e => {\r\n let {\r\n zoomStep = DEFAULT_ZOOM_STEP,\r\n allowZoom = true,\r\n doubleClickZoom = DEFAULT_LARGE_ZOOM,\r\n } = this.props\r\n if (!allowZoom || !doubleClickZoom) return false\r\n this.stopSideEffect(e)\r\n if (this.state.zoom > 1) return this.resetZoom()\r\n const _z =\r\n (zoomStep < 1 ? Math.ceil(doubleClickZoom / zoomStep) : zoomStep) *\r\n zoomStep\r\n const _xy = getXY(e)\r\n const _cbr = this._cont.current?.getBoundingClientRect?.()\r\n const _ccx = _cbr.x + _cbr.width / 2\r\n const _ccy = _cbr.y + _cbr.height / 2\r\n const x = (_xy.x - _ccx) * -1 * _z\r\n const y = (_xy.y - _ccy) * -1 * _z\r\n this.setState({ x, y, zoom: _z })\r\n }\r\n navigateImage = (direction, e) => {\r\n this.stopSideEffect(e)\r\n let current = 0\r\n switch (direction) {\r\n case \"next\":\r\n current = this.state.current + 1\r\n break\r\n case \"prev\":\r\n current = this.state.current - 1\r\n break\r\n }\r\n if (current >= this.props.images.length) current = 0\r\n else if (current < 0) current = this.props.images.length - 1\r\n this.setState({ current, x: 0, y: 0, zoom: 1, rotate: 0, loading: true })\r\n }\r\n startMove = e => {\r\n if (this.state.zoom <= 1) return false\r\n this.setState({ moving: true })\r\n let xy = getXY(e)\r\n this.initX = xy.x - this.lastX\r\n this.initY = xy.y - this.lastY\r\n }\r\n duringMove = e => {\r\n if (!this.state.moving) return false\r\n let xy = getXY(e)\r\n this.lastX = xy.x - this.initX\r\n this.lastY = xy.y - this.initY\r\n this.setState({\r\n x: xy.x - this.initX,\r\n y: xy.y - this.initY,\r\n })\r\n }\r\n endMove = e => this.setState({ moving: false })\r\n applyZoom = type => {\r\n let { zoomStep = DEFAULT_ZOOM_STEP } = this.props\r\n switch (type) {\r\n case \"in\":\r\n this.setState({ zoom: this.state.zoom + zoomStep })\r\n break\r\n case \"out\":\r\n let newZoom = this.state.zoom - zoomStep\r\n if (newZoom < 1) break\r\n else if (newZoom === 1) this.setState({ x: 0, y: 0, zoom: 1 })\r\n else this.setState({ zoom: newZoom })\r\n break\r\n case \"reset\":\r\n this.resetZoom()\r\n break\r\n }\r\n }\r\n applyRotate = type => {\r\n switch (type) {\r\n case \"cw\":\r\n this.setState({ rotate: this.state.rotate + 90 })\r\n break\r\n case \"acw\":\r\n this.setState({ rotate: this.state.rotate - 90 })\r\n break\r\n }\r\n }\r\n reset = e => {\r\n this.stopSideEffect(e)\r\n this.setState({ x: 0, y: 0, zoom: 1, rotate: 0 })\r\n }\r\n exit = e => {\r\n if (typeof this.props.onClose === \"function\") return this.props.onClose(e)\r\n console.error(\r\n \"No Exit function passed on prop: onClose. Clicking the close button will do nothing\"\r\n )\r\n }\r\n shouldShowReset = () =>\r\n this.state.x ||\r\n this.state.y ||\r\n this.state.zoom !== 1 ||\r\n this.state.rotate !== 0\r\n canvasClick = e => {\r\n let { clickOutsideToExit = true } = this.props\r\n if (clickOutsideToExit && this.state.zoom <= 1) return this.exit(e)\r\n }\r\n keyboardNavigation = e => {\r\n let { allowZoom = true, allowReset = true } = this.props\r\n let { multi, x, y, zoom } = this.state\r\n switch (e.key) {\r\n case \"ArrowLeft\":\r\n if (multi && zoom === 1) this.navigateImage(\"prev\", e)\r\n else if (zoom > 1) this.setState({ x: x - 20 })\r\n break\r\n case \"ArrowRight\":\r\n if (multi && zoom === 1) this.navigateImage(\"next\", e)\r\n else if (zoom > 1) this.setState({ x: x + 20 })\r\n break\r\n case \"ArrowUp\":\r\n if (zoom > 1) this.setState({ y: y + 20 })\r\n break\r\n case \"ArrowDown\":\r\n if (zoom > 1) this.setState({ y: y - 20 })\r\n break\r\n case \"+\":\r\n if (allowZoom) this.applyZoom(\"in\")\r\n break\r\n case \"-\":\r\n if (allowZoom) this.applyZoom(\"out\")\r\n break\r\n case \"Escape\":\r\n if (allowReset && this.shouldShowReset()) this.reset(e)\r\n else this.exit(e)\r\n break\r\n }\r\n }\r\n componentDidMount() {\r\n document.body.classList.add(\"lb-open-lightbox\")\r\n let { keyboardInteraction = true } = this.props\r\n if (keyboardInteraction)\r\n document.addEventListener(\"keyup\", this.keyboardNavigation)\r\n }\r\n componentWillUnmount() {\r\n document.body.classList.remove(\"lb-open-lightbox\")\r\n let { keyboardInteraction = true } = this.props\r\n if (keyboardInteraction)\r\n document.removeEventListener(\"keyup\", this.keyboardNavigation)\r\n }\r\n render() {\r\n let image = this.getCurrentImage(this.state, this.props)\r\n let title = this.getCurrentTitle(this.state, this.props)\r\n if (!image) {\r\n console.warn(\"Not showing lightbox because no image(s) was supplied\")\r\n return null\r\n }\r\n let {\r\n allowZoom = true,\r\n allowRotate = true,\r\n buttonAlign = \"flex-end\",\r\n showTitle = true,\r\n allowReset = true,\r\n } = this.props\r\n let { x, y, zoom, rotate, multi, loading, moving } = this.state\r\n let _reset = allowReset && this.shouldShowReset()\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n {title}\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n this.navigateImage(\"prev\", e)}\r\n >\r\n this.navigateImage(\"next\", e)}\r\n >\r\n \r\n \r\n this.applyZoom(\"in\")}\r\n >\r\n this.applyZoom(\"out\")}\r\n >\r\n \r\n \r\n this.applyRotate(\"acw\")}\r\n >\r\n this.applyRotate(\"cw\")}\r\n >\r\n \r\n this.exit(e)}\r\n >\r\n \r\n this.canvasClick(e)}\r\n >\r\n 1 ? \"grab\" : \"unset\",\r\n transition: moving ? \"none\" : \"all 0.1s\",\r\n }}\r\n onMouseDown={e => this.startMove(e)}\r\n onTouchStart={e => this.startMove(e)}\r\n onMouseMove={e => this.duringMove(e)}\r\n onTouchMove={e => this.duringMove(e)}\r\n onMouseUp={e => this.endMove(e)}\r\n onMouseLeave={e => this.endMove(e)}\r\n onTouchEnd={e => this.endMove(e)}\r\n onClick={e => this.stopSideEffect(e)}\r\n onDoubleClick={e => this.shockZoom(e)}\r\n onLoad={e => this.setState({ loading: false })}\r\n className={`lb-img${loading ? \" lb-loading\" : \"\"}`}\r\n title={title}\r\n src={image}\r\n alt={title}\r\n />\r\n
\r\n {multi ? (\r\n this.navigateImage(\"prev\", e)}\r\n >
\r\n ) : null}\r\n {_reset ? (\r\n \r\n ) : null}\r\n {multi ? (\r\n this.navigateImage(\"next\", e)}\r\n >\r\n ) : null}\r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n","import classnames from \"classnames\"\r\nimport React from \"react\"\r\nimport { Modal } from \"reactstrap\"\r\nimport { objHasKey } from \"src/core/helpers/utils\"\r\nimport ReactAwesomeLightbox from \"src/libs/ReactAwesomeLightbox\"\r\ninterface IProps {\r\n className?: any\r\n style?: any\r\n type: string\r\n}\r\n\r\ninterface IState {\r\n isShow?: boolean\r\n opts?: IConfigLightbox\r\n}\r\n\r\ninterface IConfigLightbox {\r\n component?: any\r\n showFooter?: boolean\r\n modalClassName?: string\r\n modalCentered?: boolean\r\n modalScrollInside?: boolean\r\n title?: string\r\n size?: string\r\n backdrop?: any\r\n fnList?: any\r\n image?: string\r\n images?: any[]\r\n}\r\n\r\nclass MyLightbox extends React.Component {\r\n state: any = {\r\n isShow: false,\r\n opts: {},\r\n }\r\n componentDidMount() {\r\n const { type } = this.props\r\n MyLightbox.Helpers.initComponent(type, this)\r\n }\r\n show = (opts: any) => {\r\n this.setState({\r\n isShow: true,\r\n opts: { ...MyLightbox.Helpers.defaultConfigModal, ...opts },\r\n })\r\n }\r\n hide = () => {\r\n this.setState({\r\n isShow: false,\r\n opts: {},\r\n })\r\n }\r\n toggle = () => {\r\n this.setState({\r\n isShow: !this.state.isShow,\r\n })\r\n }\r\n _getConfig = key => {\r\n const { opts } = this.state\r\n if (objHasKey(opts, key)) {\r\n return opts[key]\r\n }\r\n }\r\n _renderBody = () => {\r\n const { opts } = this.state\r\n let _props: any = {}\r\n if (opts.image) {\r\n _props.image = opts.image\r\n } else if (opts.images) {\r\n _props.images = opts.images\r\n }\r\n return (\r\n {\r\n this.hide()\r\n }}\r\n />\r\n )\r\n }\r\n _renderHeaderContent = () => {\r\n const { opts } = this.state\r\n return opts.title\r\n }\r\n _getClassname = () => {\r\n const { opts } = this.state\r\n return classnames(opts.modalClassName, {\r\n \"modal-dialog-centered\": opts.modalCentered,\r\n [`modal-${opts.size}`]: true, //sm,lg,xl\r\n \"modal-dialog-scrollable\": opts.modalScrollInside,\r\n })\r\n }\r\n render() {\r\n const { isShow, opts } = this.state\r\n const { backdrop } = opts\r\n return (\r\n \r\n {this._renderBody()}\r\n \r\n )\r\n }\r\n static Helpers = {\r\n defaultConfigModal: {\r\n usingModalBody: true,\r\n size: \"fullscreen\",\r\n },\r\n types: {\r\n lightbox: \"lightbox\",\r\n },\r\n initComponent: (type, component) => {\r\n if (type && component) {\r\n MyLightbox.Helpers.components[type] = component\r\n }\r\n },\r\n components: {},\r\n }\r\n static showWithOpts = (opts: IConfigLightbox) => {\r\n if (MyLightbox.Helpers.components[MyLightbox.Helpers.types.lightbox]) {\r\n MyLightbox.Helpers.components[MyLightbox.Helpers.types.lightbox].show(\r\n opts\r\n )\r\n }\r\n }\r\n}\r\n\r\nexport default MyLightbox\r\n","import { HUtils, HJson } from \"@macashipo/mlib\"\r\nexport const FlowGetColumnFromExtraData = (extraData, fieldName) => {\r\n return HUtils.get(extraData, `Columns.${fieldName}`)\r\n}\r\n\r\nexport const FlowGetMoreFilterOfCellFromExtraData = (extraData, fieldName) => {\r\n let _colExtra = FlowGetColumnFromExtraData(extraData, fieldName)\r\n if (_colExtra) {\r\n if (_colExtra._moreFilterObj) {\r\n return _colExtra._moreFilterObj\r\n } else {\r\n if (_colExtra.Filter && _colExtra.Filter.more) {\r\n let _moreFilterObj = HJson.getObj(_colExtra.Filter.more) || {}\r\n _colExtra._moreFilterObj = _moreFilterObj\r\n return _moreFilterObj\r\n }\r\n }\r\n }\r\n return {}\r\n}\r\n\r\nexport const FlowGetMoreOfCellFromExtraData = (extraData, fieldName) => {\r\n let _colExtra = FlowGetColumnFromExtraData(extraData, fieldName)\r\n if (_colExtra) {\r\n if (_colExtra._moreObj) {\r\n return _colExtra._moreObj\r\n } else {\r\n if (_colExtra.Type && _colExtra.Type.more) {\r\n let _moreObj = HJson.getObj(_colExtra.Type.more) || {}\r\n _colExtra._moreObj = _moreObj\r\n return _moreObj\r\n }\r\n }\r\n }\r\n return {}\r\n}\r\n","export default \"data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAeAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA3LjEtYzAwMCA3OS45Y2NjNGRlOTMsIDIwMjIvMDMvMTQtMTQ6MDc6MjIgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMy4zIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBDOTVCRTU1OTQ1NjExRUQ4QjE5RDUwQTQ5MDlCNjdDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjBDOTVCRTU2OTQ1NjExRUQ4QjE5RDUwQTQ5MDlCNjdDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5NUJFNTM5NDU2MTFFRDhCMTlENTBBNDkwOUI2N0MiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MEM5NUJFNTQ5NDU2MTFFRDhCMTlENTBBNDkwOUI2N0MiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAQCwsLDAsQDAwQFw8N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\"","export default \"data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAeAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA3LjEtYzAwMCA3OS45Y2NjNGRlOTMsIDIwMjIvMDMvMTQtMTQ6MDc6MjIgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMy4zIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBDOTVCRTU5OTQ1NjExRUQ4QjE5RDUwQTQ5MDlCNjdDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjBDOTVCRTVBOTQ1NjExRUQ4QjE5RDUwQTQ5MDlCNjdDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEM5NUJFNTc5NDU2MTFFRDhCMTlENTBBNDkwOUI2N0MiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MEM5NUJFNTg5NDU2MTFFRDhCMTlENTBBNDkwOUI2N0MiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAQCwsLDAsQDAwQFw8N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\"","import { ApiGeneric } from \"src/services/apiServices\"\r\nimport { fnListUI } from \"src/helpers/fnList\"\r\nimport { HCF, HLink } from \"@macashipo/mlib\"\r\n\r\nexport const FlowApiPost = () => {}\r\n\r\nexport const FlowApiGet = () => {}\r\n\r\nexport const FlowApiGeneric = ({\r\n request,\r\n cbSuccess,\r\n cbError,\r\n cbFinal,\r\n ...rest\r\n} = {}) => {\r\n //v1\r\n ApiGeneric({\r\n request,\r\n successCallBack: response => {\r\n let _verAdmin = HCF.getCF(\"verAdmin\")\r\n if (_verAdmin != \"v5\") {\r\n fnListUI.fnShowToast(response.Msg)\r\n }\r\n if (cbSuccess) {\r\n cbSuccess(response)\r\n }\r\n if (cbFinal) {\r\n cbFinal({ response })\r\n }\r\n },\r\n errorCallBack: (error, response) => {\r\n if (cbError) {\r\n cbError(error, response)\r\n }\r\n if (cbFinal) {\r\n cbFinal({ error, response })\r\n }\r\n },\r\n ...rest,\r\n })\r\n}\r\n\r\nexport const FlowApiUpdateFields = ({\r\n row,\r\n apiController,\r\n apiName = \"UpdateFields\",\r\n multiObjUpdate,\r\n sharedRequestData = {},\r\n cbSuccess,\r\n cbError,\r\n} = {}) => {\r\n //v1\r\n ApiGeneric({\r\n request: {\r\n method: \"POST\",\r\n path: apiController,\r\n name: apiName,\r\n },\r\n data: {\r\n Id: row.Id,\r\n ProjectId: row.ProjectId,\r\n RequestData: sharedRequestData,\r\n Values: Object.keys(multiObjUpdate).map(v => {\r\n return {\r\n FieldName: v,\r\n NewValue: multiObjUpdate[v],\r\n }\r\n }),\r\n },\r\n successCallBack: response => {\r\n if (cbSuccess) {\r\n cbSuccess(response)\r\n }\r\n },\r\n errorCallBack: (error, response) => {\r\n if (cbError) {\r\n cbError(error, response)\r\n }\r\n },\r\n })\r\n}\r\n\r\nexport const FlowApiRefreshCache = () => {\r\n FlowApiGeneric({\r\n request: {\r\n method: \"POST\",\r\n path: \"Cache\",\r\n name: \"Refresh\",\r\n },\r\n data: {\r\n Id: \"ALL\",\r\n },\r\n cbSuccess: () => {\r\n // an di vì v1 ko reload\r\n // window.location.reload()\r\n },\r\n })\r\n}\r\n\r\nexport const FlowApiShowFullPath = ({\r\n response,\r\n configFullPath,\r\n target,\r\n autoOpenLink,\r\n} = {}) => {\r\n if (configFullPath) {\r\n let _target = target || \"_blank\"\r\n let _autoOpenLink = autoOpenLink != null ? autoOpenLink : false\r\n if (configFullPath.FullPathNewWindow === false) {\r\n _target = \"_self\"\r\n }\r\n if (configFullPath.FullPath) {\r\n if (_autoOpenLink === true) {\r\n HLink.openUrl(configFullPath.FullPath, _target)\r\n } else {\r\n fnListUI.fnshowDialog({\r\n title: configFullPath.FullPathTitle || \"Link\",\r\n msg: (\r\n
\r\n
{configFullPath.FullPathInfo}
\r\n \r\n {configFullPath.FullPath}\r\n \r\n
\r\n ),\r\n })\r\n }\r\n }\r\n }\r\n}\r\n","import { HUtils, HCF } from \"@macashipo/mlib\"\r\nimport LodashGet from \"lodash/get\"\r\nimport LodashDebounce from \"lodash/debounce\"\r\nimport { logOne } from \"./log\"\r\nimport K from \"src/helpers/K\"\r\nimport HConstant from \"./constant\"\r\n\r\nexport const isFunction = (v: any) => {\r\n return typeof v === \"function\"\r\n}\r\nexport const isArray = (v: any) => {\r\n return Array.isArray(v)\r\n}\r\nexport const isString = (v: any) => {\r\n return typeof v === \"string\"\r\n}\r\nexport const isDateValue = (v: any) => {\r\n return new Date(v).getTime() > 0\r\n}\r\nexport const isNotEmpty = (v: any) => {\r\n return v !== null && v !== undefined && v !== \"\" ? true : false\r\n}\r\nexport const isNotEmptyIncludeZero = (v: any) => {\r\n return isNotEmpty(v) && v !== 0 ? true : false\r\n}\r\nexport const mergeObjIfExist = (srcObj, mergeObj) => {\r\n if (srcObj && mergeObj) {\r\n let _keys = Object.keys(mergeObj)\r\n if (_keys && _keys.length > 0) {\r\n for (let k of _keys) {\r\n srcObj[k] = mergeObj[k]\r\n }\r\n }\r\n }\r\n}\r\nexport const runFuntion = (fnList: any, name, args: any[] = []) => {\r\n if (fnList && isFunction(fnList[name])) {\r\n fnList[name].apply(null, args)\r\n } else {\r\n logOne(\"runFuntion failed:\", fnList, name)\r\n }\r\n}\r\nexport const safeInvoke = (fn, args: any[] = []) => {\r\n if (fn) {\r\n return fn.apply(null, args)\r\n }\r\n}\r\nexport const initMCore = (key, obj) => {\r\n if (window) {\r\n if (window[\"MCore\"] == null) {\r\n window[\"MCore\"] = {}\r\n }\r\n window[\"MCore\"][key] = obj\r\n }\r\n}\r\nexport const addArray2Array = (arr, moreArr) => {\r\n if (arr && moreArr) {\r\n // arr = arr.concat(moreArr);//ko dung concat duoc, chua biet tai sao\r\n arr.push(...moreArr)\r\n }\r\n}\r\nexport const objHasKey = (obj, key) => {\r\n if (obj && key && obj.hasOwnProperty) {\r\n return obj.hasOwnProperty(key)\r\n }\r\n}\r\n// export const combineArray = (array1, array2) => {\r\n// return [...array1, ...array2]\r\n// }\r\n\r\n// export const combineArray = (array1, array2) => {\r\n// return [].concat(array1, array2)\r\n// }\r\nexport const isLocalDev = () => {\r\n if (window.location.href.indexOf(\"localhost:\") > -1) {\r\n return true\r\n }\r\n if (localStorage.getItem(HConstant.Dev.Key._DEBUG_) === \"true\") {\r\n return true\r\n }\r\n return false\r\n}\r\nexport const onKeyDownEnter = (ev, fn) => {\r\n if (ev.key === \"Enter\") {\r\n fn()\r\n }\r\n}\r\nexport const delay = (ms: number) => {\r\n return new Promise(resolve => setTimeout(resolve, ms))\r\n}\r\nexport const debounce = (fn, time, opts) => {\r\n return LodashDebounce(fn, time, opts)\r\n}\r\nexport const get = LodashGet\r\nexport const getTextWithData = HUtils.getTextWithData\r\nexport const checkConditionShow = (value: any, conditionValue) => {\r\n // console.warn(\"checkConditionShow:\", value, conditionValue)\r\n let _canShow = true\r\n if (isArray(conditionValue)) {\r\n _canShow = false\r\n for (let i = 0; i < conditionValue.length; i++) {\r\n let _check = checkConditionShow(value, conditionValue[i])\r\n if (_check === true) {\r\n //chi can 1 cai true thi se true\r\n return true\r\n }\r\n }\r\n } else {\r\n if (isArray(value)) {\r\n if (value.indexOf(conditionValue) === -1) {\r\n return false\r\n }\r\n } else if (value !== conditionValue) {\r\n return false\r\n }\r\n }\r\n return _canShow\r\n}\r\nexport const checkConditionShowWithOperator = (\r\n value: any,\r\n conditionValue,\r\n operator,\r\n format: any\r\n) => {\r\n // console.warn(\"checkConditionShow:\", value, conditionValue)\r\n let _valueNeedCmp = value\r\n let _canShow = false\r\n if (operator === \"!=\" && _valueNeedCmp !== undefined) {\r\n if (_valueNeedCmp !== conditionValue) {\r\n _canShow = true\r\n }\r\n }\r\n if (_valueNeedCmp !== null && _valueNeedCmp !== undefined) {\r\n if (format?.type) {\r\n switch (format.type) {\r\n case \"year\":\r\n if (\r\n format?.cmpWith === \"now\" &&\r\n new Date().getFullYear() >= new Date(_valueNeedCmp).getFullYear()\r\n ) {\r\n _valueNeedCmp =\r\n new Date().getFullYear() - new Date(_valueNeedCmp).getFullYear()\r\n }\r\n break\r\n\r\n default:\r\n break\r\n }\r\n }\r\n if (typeof operator === \"function\") {\r\n return operator(_valueNeedCmp)\r\n }\r\n switch (operator) {\r\n case \">=\":\r\n if (_valueNeedCmp >= conditionValue) {\r\n _canShow = true\r\n }\r\n break\r\n case \">\":\r\n if (_valueNeedCmp > conditionValue) {\r\n _canShow = true\r\n }\r\n break\r\n case \"!=\":\r\n if (_valueNeedCmp !== conditionValue) {\r\n _canShow = true\r\n }\r\n break\r\n case \"=\":\r\n if (_valueNeedCmp === conditionValue) {\r\n _canShow = true\r\n }\r\n break\r\n case \"<\":\r\n if (_valueNeedCmp < conditionValue) {\r\n _canShow = true\r\n }\r\n break\r\n case \"<=\":\r\n if (_valueNeedCmp <= conditionValue) {\r\n _canShow = true\r\n }\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n return _canShow\r\n}\r\nexport const isValidEmail = str => {\r\n const regexCheck =\r\n /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/\r\n if (str) {\r\n return regexCheck.test(str)\r\n }\r\n}\r\nexport const isValid_AUS_PhoneNumber = str => {\r\n let _pattern = HCF.getCF(K.mobileNumberValidRegexPattern)\r\n if (_pattern) {\r\n let _regex = new RegExp(_pattern, \"\")\r\n if (str) {\r\n return _regex.test(str)\r\n }\r\n }\r\n return true\r\n // const regexCheck = /^(0[4|5])([0-9]{8})$/\r\n // if (str) {\r\n // return regexCheck.test(str)\r\n // }\r\n}\r\nexport const isValidUsername = str => {\r\n const regexCheck = /^[\\w]+$/\r\n if (str) {\r\n return regexCheck.test(str)\r\n }\r\n}\r\nexport const xorCrypt = function (str: string = \"\", key: number = 7) {\r\n var output = \"\"\r\n if (!key) {\r\n key = 6\r\n }\r\n for (var i = 0; i < str.length; ++i) {\r\n output += String.fromCharCode(key ^ str.charCodeAt(i))\r\n }\r\n return output\r\n}\r\nexport const compareValueEqual = (v1, v2) => {\r\n if (isNotEmpty(v1) && isNotEmpty(v2)) {\r\n if (typeof v1 === \"string\" && typeof v2 === \"string\") {\r\n let v1Cmp = v1.trim().toLowerCase()\r\n let v2Cmp = v2.trim().toLowerCase()\r\n if (v1Cmp === v2Cmp) {\r\n return true\r\n }\r\n } else if (v1 === v2) {\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\nexport const convertArrayString2String = (arr: any) => {\r\n let string = \"\"\r\n if (Array.isArray(arr) && arr?.length > 0) {\r\n arr.forEach((v, i) => {\r\n if (typeof v === \"string\") {\r\n string += v\r\n if (i < arr.length - 1) {\r\n string += \",\"\r\n }\r\n }\r\n })\r\n }\r\n return string\r\n}\r\nexport const convertString2ArrayString = (str: any) => {\r\n let arr: any = []\r\n if (typeof str === \"string\" && isNotEmpty(str)) {\r\n const strSplit = str.split(\",\")\r\n if (strSplit?.length > 0) {\r\n strSplit.forEach(v => {\r\n if (typeof v === \"string\") {\r\n arr.push(v.trim())\r\n }\r\n })\r\n }\r\n }\r\n return arr\r\n}\r\nexport const isOnScreen = function (element) {\r\n if (element && element.offsetTop != null) {\r\n var curTop = element.offsetTop\r\n var heightOfWindow = window.innerHeight\r\n var offsetYOfWindow = window.scrollY\r\n if (curTop > offsetYOfWindow && curTop < heightOfWindow + offsetYOfWindow) {\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\nexport const squareBracketReplace = function (s, obj) {\r\n const regex = /\\[(.[^\\]]*)\\]/gm\r\n const extract = s => {\r\n var _result: any = []\r\n if (s != null) {\r\n var _m\r\n while ((_m = regex.exec(s)) !== null) {\r\n if (_m.length > 1) {\r\n _result.push(_m[1])\r\n }\r\n }\r\n }\r\n return _result\r\n }\r\n let ext = extract(s)\r\n let newS = s\r\n if (ext != null) {\r\n for (var _item of ext) {\r\n if (obj[_item] != null) {\r\n var rg = new RegExp(`\\\\[${_item}\\\\]`, \"g\")\r\n newS = newS.replace(rg, obj[_item])\r\n }\r\n }\r\n }\r\n return newS\r\n}\r\nexport const isHTMLString = s => {\r\n const pattern = \"<([a-z]+)(?![^>]*/>)[^>]*>\"\r\n const regex = new RegExp(pattern, \"\")\r\n if (s) {\r\n return regex.test(s)\r\n }\r\n return false\r\n}\r\nwindow[\"_xorCrypt\"] = xorCrypt\r\n","import RcTooltip from \"rc-tooltip\"\r\nimport \"rc-tooltip/assets/bootstrap.css\"\r\n// export default class Tooltip extends RcTooltip {\r\n// static displayName = \"m-tooltip\"\r\n// static propTypes = {\r\n// ...RcTooltip.propTypes,\r\n// }\r\n// static defaultProps = {\r\n// ...RcTooltip.defaultProps,\r\n// prefixCls: \"m-tooltip\",\r\n// transitionName: \"tip-slide\",\r\n// }\r\n// }\r\n\r\nexport default RcTooltip\r\n","import { HUtils } from \"src/core/helpers\"\r\n\r\nexport const K = {\r\n t_bottom_2fa_setup: \"t_bottom_2fa_setup\",\r\n t_bottom_2fa_verify: \"t_bottom_2fa_verify\",\r\n}\r\n\r\nconst Setting2FAHelpers = {\r\n Auth2FAEnabled: false,\r\n UniqueId: \"\",\r\n fnUpdateSetting2FAPart: null,\r\n FA2Methods: [],\r\n seletedMethod: null,\r\n // t_bottom_2fa_setup: `
Please contact itsupport@ezyservicecentre.com if have any problem
`,\r\n // t_bottom_2fa_verify: `
To view your pay slip please enter the 6-digit OTP. If you did not initiate this request please contact itsupport@ezyservicecentre.com.
`,\r\n t_bottom_2fa_setup: `
Please contact itsupport@allianceitsc.com if have any problem
`,\r\n t_bottom_2fa_verify: `
Please enter the 6-digit OTP. If you did not initiate this request please contact itsupport@allianceitsc.com.
`,\r\n}\r\n\r\nexport const updateSettingByResponse = res => {\r\n if (res && res.Data) {\r\n Setting2FAHelpers.Auth2FAEnabled = res.Data.Auth2FAEnabled\r\n Setting2FAHelpers.UniqueId = res.Data.UniqueId\r\n Setting2FAHelpers.FA2Methods = res.Data.FA2Methods\r\n }\r\n forceUpdateSetting2FAPart()\r\n}\r\nexport const updateSettingOneMethodByResponse = res => {\r\n if (res && res.Data && Setting2FAHelpers.FA2Methods) {\r\n for (let i = 0; i < Setting2FAHelpers.FA2Methods.length; i++) {\r\n let _method: any = Setting2FAHelpers.FA2Methods[i]\r\n if (res.Data.Id === _method.Id) {\r\n HUtils.mergeObjIfExist(_method, res.Data)\r\n }\r\n }\r\n }\r\n forceUpdateSetting2FAPart()\r\n}\r\nexport const updateFnUpdateSetting2FAPart = fnUpdate => {\r\n if (fnUpdate) {\r\n Setting2FAHelpers.fnUpdateSetting2FAPart = fnUpdate\r\n }\r\n}\r\nexport const getCurrentMethod = () => {\r\n return Setting2FAHelpers.seletedMethod\r\n}\r\n\r\nexport const getCurrentMethodId = () => {\r\n return HUtils.get(Setting2FAHelpers.seletedMethod, \"FA2MethodId\")\r\n}\r\n\r\nexport const getCurrentOtpRecipientRequired = () => {\r\n return HUtils.get(\r\n Setting2FAHelpers.seletedMethod,\r\n \"Configs.OtpRecipientRequired\"\r\n )\r\n}\r\nexport const getCurrentDisplayQRCode = () => {\r\n return HUtils.get(Setting2FAHelpers.seletedMethod, \"Configs.DisplayQRCode\")\r\n}\r\nexport const getCurrentOTPDescription = () => {\r\n return HUtils.get(Setting2FAHelpers.seletedMethod, \"Configs.OTPDescription\")\r\n}\r\nexport const getCurrentFA2MethodName = () => {\r\n return HUtils.get(Setting2FAHelpers.seletedMethod, \"FA2MethodName\")\r\n}\r\nexport const forceUpdateSetting2FAPart = () => {\r\n if (Setting2FAHelpers.fnUpdateSetting2FAPart) {\r\n HUtils.runFuntion(Setting2FAHelpers, \"fnUpdateSetting2FAPart\", [])\r\n }\r\n}\r\nexport default Setting2FAHelpers\r\n","import { MyFormControl } from \"@macashipo/mlib\"\r\nexport default MyFormControl\r\n","import { MyIcon } from \"@macashipo/mlib\"\r\n\r\nexport default MyIcon\r\n","export default __webpack_public_path__ + \"static/media/bg-hotro.362814b0.png\";","import React from \"react\"\r\nimport { Input } from \"reactstrap\"\r\nimport Ext_Input from \"./Ext_Input\"\r\nclass InputText extends Ext_Input {\r\n render() {\r\n const propsInput = this.getPropsInput()\r\n if (propsInput?.disabled) {\r\n return \r\n }\r\n return \r\n }\r\n}\r\nexport default InputText\r\n","import React from \"react\"\r\nimport { Input } from \"reactstrap\"\r\nimport Ext_Input from \"./Ext_Input\"\r\n\r\nclass InputTextarea extends Ext_Input {\r\n render() {\r\n const propsInput = this.getPropsInput()\r\n if (propsInput?.disabled) {\r\n return \r\n }\r\n return \r\n }\r\n}\r\n\r\nexport default InputTextarea\r\n","export default __webpack_public_path__ + \"static/media/qr-download-app.5a55c21d.png\";","import React from \"react\"\r\nimport { ImSpinner8 } from \"react-icons/im\"\r\nimport styled, { keyframes } from \"styled-components\"\r\n\r\nconst WrapLoading = styled.div``\r\n\r\nexport default function MyLoadingPage() {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React from \"react\"\r\nimport { HUtils, HIs } from \"@macashipo/mlib\"\r\nconst OptionsInfo = {\r\n fValue: \"Value\",\r\n fText: \"Text\",\r\n}\r\nexport const getListSelectTagBySourceData = (\r\n sourceData?: any[],\r\n opts: any = {}\r\n) => {\r\n if (sourceData && sourceData.length > 0) {\r\n let _ui: any = []\r\n if (opts) {\r\n if (opts.noAddAutoEmpty !== true) {\r\n _ui.push(\r\n \r\n )\r\n }\r\n }\r\n for (let i = 0; i < sourceData.length; i++) {\r\n let _text = sourceData[i].Text || sourceData[i].label || \"\"\r\n let _value = sourceData[i].Value || sourceData[i].value || \"\"\r\n _ui.push(\r\n \r\n )\r\n }\r\n return _ui\r\n }\r\n}\r\n\r\nexport const convertSourceDataToString = (sourceData?: any[]) => {\r\n if (sourceData) {\r\n return sourceData.join(\",\")\r\n }\r\n return \"\"\r\n}\r\n\r\nexport const getOptionByValue = (sourceList: any = [], value) => {\r\n if (sourceList && sourceList.length > 0 && value != null) {\r\n for (let i = 0; i < sourceList.length; i++) {\r\n if (sourceList[i].Value == value) {\r\n return sourceList[i]\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const getTextByValue = (sourceList = [], value) => {\r\n let _text = value\r\n let _option = getOptionByValue(sourceList, value)\r\n // console.warn(\"getTextByValue\", sourceList, value)\r\n if (_option && _option.Text) {\r\n _text = _option.Text\r\n }\r\n return _text\r\n}\r\n\r\nexport const convertSourceDataToArrayValue = (sourceData?: any[]) => {\r\n if (sourceData) {\r\n return sourceData.map((v: any, i) => {\r\n return v[OptionsInfo.fValue]\r\n })\r\n }\r\n return []\r\n}\r\n\r\nexport const getSourceDataFromSourceList = (sourceList: any, key: string) => {\r\n if (sourceList && sourceList[key]) {\r\n return sourceList[key]\r\n }\r\n return []\r\n}\r\n\r\nexport const getSourceListFromFnList = (fnList: any) => {\r\n if (fnList && fnList.getSourceList) {\r\n return fnList.getSourceList()\r\n }\r\n return {}\r\n}\r\n\r\nexport const isHasLevelOptionKey = optionKey => {\r\n if (optionKey) {\r\n if (optionKey.indexOf(\".\") > -1) {\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport const convertOptionKeyLevelMissingField = (\r\n optionKey = \"\",\r\n fieldNames = []\r\n) => {\r\n let _optionKey = optionKey\r\n //truong hop a.b cua cell, ko day du a.[field].b\r\n if (\r\n _optionKey.indexOf(\".\") > -1 &&\r\n _optionKey.indexOf(\"[\") === -1 &&\r\n fieldNames.length > 0\r\n ) {\r\n let _countDot = 0\r\n for (let i = 0; i < _optionKey.length; i++) {\r\n if (_optionKey[i] === \".\") {\r\n _countDot++\r\n if (fieldNames.length > 0) {\r\n if (HIs.isString(fieldNames)) {\r\n let _add = `[${fieldNames}].`\r\n _optionKey =\r\n _optionKey.slice(0, i + 1) +\r\n _add +\r\n _optionKey.slice(i + 1, _optionKey.length)\r\n i += _add.length\r\n } else if (fieldNames[_countDot - 1]) {\r\n //is array\r\n let _add = `[${fieldNames[_countDot - 1]}].`\r\n _optionKey =\r\n _optionKey.slice(0, i + 1) +\r\n _add +\r\n _optionKey.slice(i + 1, _optionKey.length)\r\n i += _add.length\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return _optionKey\r\n}\r\nexport const getOptionsByLevel = (\r\n sourceList = {},\r\n optionKey = \"\",\r\n data = {},\r\n fieldNames = []\r\n) => {\r\n optionKey = convertOptionKeyLevelMissingField(optionKey, fieldNames)\r\n // console.warn(\"optionKey\", optionKey, fieldNames, data)\r\n if (sourceList[optionKey]) {\r\n //if exist\r\n return sourceList[optionKey]\r\n } else {\r\n // a.[field].b = a.value of field.b\r\n let _newOptionKey = HUtils.getTextWithData(optionKey, data)\r\n let _options: any = null\r\n let _split = _newOptionKey.split(\".\")\r\n let _prefixK = \"\" //bo sung prefixK cho truong hop Value co dau .\r\n for (let i = 0; i < _split.length; i++) {\r\n let k = _split[i]\r\n let _k = k\r\n if (_prefixK) {\r\n _k = `${_prefixK}.${k}`\r\n }\r\n if (_options === null && sourceList[_k]) {\r\n //truong hop co trong sourceList thi lay _options = sourceList[_k]\r\n _options = sourceList[_k]\r\n } else if (_options && HIs.isArray(_options) && _options.length > 0) {\r\n //truong hop co _option tu truoc-> can di kiem tra value\r\n let _hasItem = false\r\n for (let i = 0; i < _options.length; i++) {\r\n if (_options[i].Value == _k) {\r\n _options = _options[i]\r\n _hasItem = true\r\n _prefixK = \"\" //reset prefix neu co\r\n break\r\n }\r\n }\r\n if (_hasItem === false) {\r\n //phai co item neu ko thi la rong\r\n if (i < _split.length - 1) {\r\n //neu chua phai cuoi cung, co the la value chua dau .\r\n _prefixK = _k\r\n continue\r\n } else {\r\n _options = []\r\n }\r\n }\r\n } else if (_options && _options.Value && _options[k]) {\r\n //thuong thi k o buoc nay ko co dau .\r\n _options = _options[k]\r\n } else {\r\n _options = []\r\n }\r\n }\r\n sourceList[_newOptionKey] = _options\r\n // console.warn(\"options:\", _options, sourceList)\r\n return _options || []\r\n }\r\n}\r\n// ;(window as any)[\"test\"] = convertOptionKeyLevelMissingField\r\n\r\nexport const isExistValueInSourceList = (sourceList = [], value) => {\r\n let _isExist = false\r\n if (sourceList.length > 0) {\r\n for (let i = 0; i < sourceList.length; i++) {\r\n let _item: any = sourceList[i]\r\n if (_item.Value == value) {\r\n return true\r\n }\r\n }\r\n }\r\n return _isExist\r\n}\r\n","export default __webpack_public_path__ + \"static/media/download-app-background.8ed0f696.png\";","import { useEffect, useState } from \"react\"\r\nimport { Loader, LoaderOptions } from \"@googlemaps/js-api-loader\"\r\n\r\ntype UsePlacesServiceArgs = {\r\n apiKey?: string\r\n apiOptions?: Partial\r\n onLoadFailed?: (error: any) => void\r\n}\r\n\r\ntype UsePlacesServiceRes = {\r\n placesService?: google.maps.places.AutocompleteService\r\n sessionToken?: google.maps.places.AutocompleteSessionToken\r\n setSessionToken: React.Dispatch\r\n}\r\n\r\nconst usePlacesService = (args: UsePlacesServiceArgs): UsePlacesServiceRes => {\r\n const { apiKey, apiOptions, onLoadFailed } = args\r\n\r\n const [placesService, setPlacesService] = useState<\r\n google.maps.places.AutocompleteService | undefined\r\n >(undefined)\r\n const [sessionToken, setSessionToken] = useState<\r\n google.maps.places.AutocompleteSessionToken | undefined\r\n >(undefined)\r\n\r\n const initializeService = () => {\r\n if (!window.google)\r\n throw new Error(\r\n \"[react-google-places-autocomplete]: Google script not loaded\"\r\n )\r\n if (!window.google.maps)\r\n throw new Error(\r\n \"[react-google-places-autocomplete]: Google maps script not loaded\"\r\n )\r\n if (!window.google.maps.places)\r\n throw new Error(\r\n \"[react-google-places-autocomplete]: Google maps places script not loaded\"\r\n )\r\n\r\n setPlacesService(new window.google.maps.places.AutocompleteService())\r\n setSessionToken(new google.maps.places.AutocompleteSessionToken())\r\n }\r\n\r\n useEffect(() => {\r\n const init = async () => {\r\n if (!apiKey) return\r\n\r\n try {\r\n if (\r\n !window.google ||\r\n !window.google.maps ||\r\n !window.google.maps.places\r\n ) {\r\n await new Loader({\r\n apiKey,\r\n ...{ libraries: [\"places\"], ...apiOptions },\r\n }).load()\r\n }\r\n initializeService()\r\n } catch (error) {\r\n if (typeof onLoadFailed === \"function\") onLoadFailed(error)\r\n }\r\n }\r\n\r\n if (apiKey) init()\r\n else initializeService()\r\n }, [])\r\n\r\n return { placesService, sessionToken, setSessionToken }\r\n}\r\n\r\nexport default usePlacesService\r\n","import { useDebouncedCallback } from 'use-debounce';\r\nimport { Options } from 'react-select';\r\n\r\nimport { AutocompletionRequest } from '../types';\r\nimport autocompletionRequestBuilder from '../helpers/autocompletion-request-builder';\r\n\r\ntype CBType = (options: Options) => void;\r\ntype UseFetchSuggestionsArg = {\r\n autocompletionRequest: AutocompletionRequest;\r\n debounce: number;\r\n minLengthAutocomplete: number;\r\n placesService?: google.maps.places.AutocompleteService;\r\n sessionToken?: google.maps.places.AutocompleteSessionToken;\r\n withSessionToken: boolean;\r\n}\r\n\r\nconst useFetchSuggestions = (arg: UseFetchSuggestionsArg): ((value: string, cb: CBType) => void) => {\r\n const {\r\n autocompletionRequest,\r\n debounce,\r\n minLengthAutocomplete,\r\n placesService,\r\n sessionToken,\r\n withSessionToken,\r\n } = arg;\r\n\r\n const [fetchSuggestions] = useDebouncedCallback((value: string, cb: CBType): void => {\r\n if (!placesService) return cb([]);\r\n if (value.length < minLengthAutocomplete) return cb([]);\r\n\r\n const autocompletionReq: AutocompletionRequest = { ...autocompletionRequest };\r\n\r\n placesService.getPlacePredictions(\r\n autocompletionRequestBuilder(\r\n autocompletionReq,\r\n value,\r\n withSessionToken && sessionToken,\r\n ), (suggestions) => {\r\n cb((suggestions || []).map(suggestion => ({ label: suggestion.description, value: suggestion })));\r\n },\r\n );\r\n }, debounce);\r\n\r\n return fetchSuggestions;\r\n}\r\n\r\nexport default useFetchSuggestions;\r\n","import { AutocompletionRequest } from '../types';\r\n\r\nexport default (\r\n autocompletionRequest: AutocompletionRequest,\r\n input: string,\r\n sessionToken?: google.maps.places.AutocompleteSessionToken,\r\n): google.maps.places.AutocompletionRequest => {\r\n const { bounds, location, ...rest } = autocompletionRequest;\r\n\r\n const res: google.maps.places.AutocompletionRequest= {\r\n input,\r\n ...rest,\r\n };\r\n\r\n if (sessionToken) {\r\n res.sessionToken = sessionToken;\r\n }\r\n\r\n if (bounds) {\r\n res.bounds = new google.maps.LatLngBounds(...bounds);\r\n }\r\n\r\n if (location) {\r\n res.location = new google.maps.LatLng(location);\r\n }\r\n\r\n return res;\r\n};\r\n","export const KConfigPageTable = {\r\n addExtraColumns: \"addExtraColumns\", //extra columns\r\n showDetails: \"showDetails\", //co expand ko\r\n showDetailsMulti: \"showDetailsMulti\", //co expand ko\r\n hideColDelete: \"hideColDelete\", //an cot delete\r\n hideColDeleteOnSmallWidth: \"hideColDeleteOnSmallWidth\", //an cot delete neu width nho ko\r\n customDelete: \"customDelete\", //custom delete column\r\n canDelete: \"canDelete\", //cho phep delete ko\r\n showHeader: \"showHeader\", //co show header table ko\r\n show: \"show\", //co show table ko\r\n hasCustomHeader: \"hasCustomHeader\", //co custom header ko, thay doi class table\r\n hasWrapHeader: \"hasWrapHeader\", //co wrap header ko, thay doi class table\r\n noBorder: \"noBorder\",\r\n noBorderCol: \"noBorderCol\",\r\n borderLight: \"borderLight\",\r\n hasBigBorderBottom: \"hasBigBorderBottom\",\r\n classNameTable: \"classNameTable\", //bo sung class name cho table\r\n forceFullExpandDetail: \"forceFullExpandDetail\",\r\n showLoadingWhenFilter: \"showLoadingWhenFilter\",\r\n showID: \"showID\", //show col ID\r\n colsActions: \"colsActions\", //cols actions\r\n customProps: \"customProps\", //custom props table build cols\r\n needRebuildColAfterGetList: \"needRebuildColAfterGetList\",\r\n hasExpand: \"hasExpand\",\r\n sizePerPage: \"sizePerPage\",\r\n hideSizePerPage: \"hideSizePerPage\",\r\n optionsTable: \"optionsTable\", //options cho table\r\n hasPagingRemote: \"hasPagingRemote\", // paging server\r\n tableProps: \"tableProps\", //bo sung props cho tabled\r\n deleteTitle: \"deleteTitle\",\r\n deleteContent: \"deleteContent\",\r\n deleteContentHtml: \"deleteContentHtml\",\r\n deleteWithNote: \"deleteWithNote\",\r\n fDelete: \"fDelete\", //dung o delete\r\n styleHeader: \"styleHeader\", //style chung cho header neu custom style header\r\n belowTable: \"belowTable\", //config MyUI show below table array item: type, groupByFn, groupByFnArgs\r\n needReloadAfterUpdateFields: \"needReloadAfterUpdateFields\", //array field khi goi update field, se goi reload list\r\n needReloadChartAfterUpdateFields: \"needReloadChartAfterUpdateFields\", //array field khi goi update field se reload chart\r\n hideTableWhenEmpty: \"hideTableWhenEmpty\", //an luon vung table khi data rong\r\n configSelectRow: \"configSelectRow\", //show select row o table\r\n canSort: \"canSort\", //default can sort column\r\n fixHeightScrollTable: \"fixHeightScrollTable\", //bool: gom table vao vung co the scroll duoc\r\n fixHeightStickyNumColumn: \"fixHeightStickyNumColumn\", //num: freeze column khi gom vung\r\n fixHeightStickyFooter: \"fixHeightStickyFooter\", //bool: sticky footer\r\n showTotal: \"showTotal\", //show footer\r\n configTotal: \"configTotal\", //configTotal\r\n needReloadAfterDelete: \"needReloadAfterDelete\",\r\n fieldId: \"fieldId\", //thay the field Id\r\n showLoadMore: \"showLoadMore\", //show nut load more thay vi pagination\r\n autoLoadMore: \"autoLoadMore\",\r\n autoLoadMoreMode: \"autoLoadMoreMode\",\r\n autoLoadMoreOffset: \"autoLoadMoreOffset\",\r\n loadMoreSelectorScroll: \"loadMoreSelectorScroll\",\r\n loadMoreAutoSwitchScrollWindow: \"loadMoreAutoSwitchScrollWindow\",\r\n}\r\n\r\nexport const KConfigPageTableDefault = {\r\n showHeader: true,\r\n showID: false,\r\n}\r\n\r\nexport const KConfigPageFilter = {\r\n type: \"type\",\r\n customQueryFromSever: \"customQueryFromSever\",\r\n position: \"position\",\r\n searchServer: \"searchServer\",\r\n showSearch: \"showSearch\",\r\n needCheckLastItemQueryServer: \"needCheckLastItemQueryServer\", //kiem tra last item filter co isServer ko de quyet dinh co requestList hay ko, mac dinh la false\r\n}\r\n\r\nexport const KConfigPageDetail = {\r\n multi: \"multi\",\r\n needReloadMaster: \"needReloadMaster\",\r\n needReloadMasterAfterDeleteItem: \"needReloadMasterAfterDeleteItem\",\r\n needReloadMasterAfterUpdateField: \"needReloadMasterAfterUpdateField\",\r\n needReloadMasterAfterAddNew: \"needReloadMasterAfterAddNew\",\r\n}\r\n\r\nexport const KConfigPageHeader = {\r\n show: \"show\",\r\n title: \"title\", //custom title on header\r\n hideTitle: \"hideTitle\", //hide title\r\n showAddNew: \"showAddNew\",\r\n showProjectHeader: \"showProjectHeader\", //show project header for solid\r\n hideButtons: \"hideButtons\",\r\n preButtons: \"preButtons\", //bo sung button tu ScreenConfig, them phia truoc\r\n sufButtons: \"sufButtons\", //bo sung button tu ScreenConfig, them phia sau\r\n onlyShowButtonInSmallWidth: \"onlyShowButtonInSmallWidth\",\r\n}\r\n\r\nexport const KConfigPagePage = {\r\n topTable: \"topTable\",\r\n topHeader: \"topHeader\",\r\n belowHeader: \"belowHeader\",\r\n belowFilter: \"belowFilter\",\r\n configCard: \"configCard\", //dung de config card, dung cho cac page su dung card\r\n hasSwitchView: \"hasSwitchView\", //switch view\r\n listSwitchView: \"listSwitchView\", //switch view\r\n defaultSwitchView: \"defaultSwitchView\", //defautl switch view\r\n prefixId: \"prefixId\", //prefixIdfor chart, date picker v.v...\r\n configChart: \"configChart\", //config chart thay the Options, trong truong hop Options config chart null\r\n}\r\n\r\nexport const KConfigPageExpander = {\r\n defaultExpand: \"defaultExpand\",\r\n hasPageExpand: \"hasPageExpand\",\r\n}\r\n\r\nexport const KEventsApp = {\r\n ee_sidemenu_forceupdate: \"ee_sidemenu_forceupdate\",\r\n}\r\n\r\nexport const KConfigApp = {\r\n baseUrl: \"baseUrl\",\r\n defaultTypeHubFilter: \"defaultTypeHubFilter\",\r\n defaultPositionFilter: \"defaultPositionFilter\",\r\n GoogleClientId: \"GoogleClientId\",\r\n GooglePlaceApiKey: \"GooglePlaceApiKey\",\r\n hasRegisterAccount: \"hasRegisterAccount\",\r\n hasForgotPassword: \"hasForgotPassword\",\r\n hasLoginSocialFacebook: \"hasLoginSocialFacebook\",\r\n hasLoginSocialGoogle: \"hasLoginSocialGoogle\",\r\n widthMobile: \"widthMobile\",\r\n isDevMode: \"isDevMode\", //from v5\r\n home_url: \"home_url\",\r\n DefaultHomeURL: \"DefaultHomeURL\",\r\n AuthInfo: \"AuthInfo\",\r\n appLogo_url: \"appLogo_url\",\r\n verAdmin: \"verAdmin\", //version admin, v1,v3,v5\r\n defaultTagInputCell: \"defaultTagInputCell\", //default tag, input or textarea for cell using input\r\n hasSetting2FA: \"hasSetting2FA\", //co setting 2FA ko\r\n showClassFieldOnCell: \"showClassFieldOnCell\",\r\n title: \"title\",\r\n serviceWorkersRun: \"serviceWorkersRun\",\r\n hasSignalR: \"hasSignalR\", //for signalR\r\n signalRHub: \"signalRHub\", //signalR hub link\r\n signalRKey: \"signalRKey\", //signalR key\r\n hasPushNotify: \"hasPushNotify\",\r\n fileUploadSupport: \"fileUploadSupport\",\r\n numberLocale: \"numberLocale\",\r\n currencyLocaleOptions: \"currencyLocaleOptions\",\r\n expandIconHideColor: \"expandIconHideColor\", //\r\n autoRedirectLoginPageNotFound: \"autoRedirectLoginPageNotFound\", //auto redirect login when show page not found\r\n mtf_datefromto_showRange: \"mtf_datefromto_showRange\", //default showRange filter datefromto\r\n styleDefaultCell: \"styleDefaultCell\", //style chung cho cell\r\n charSplitArray: \"charSplitArray\", //charSplitArray default ,\r\n showClearLocalCache: \"showClearLocalCache\", //show clear local Cache o avatar menu\r\n dateFormat: \"dateFormat\",\r\n datetimeFormat: \"datetimeFormat\",\r\n dateFPFormat: \"dateFPFormat\",\r\n datetimeFPFormat: \"datetimeFPFormat\",\r\n numeralFormat: \"numeralFormat\",\r\n hasSwitchTheme: \"hasSwitchTheme\",\r\n}\r\n\r\nexport const KConfigModal = {\r\n key: \"key\", //\r\n title: \"title\", //\r\n fTitle: \"fTitle\", //use for cell, get title from row\r\n className: \"className\",\r\n showFooter: \"showFooter\",\r\n showHeader: \"showHeader\",\r\n type: \"type\", //type of modal\r\n typeMyPage: \"typeMyPage\", //type mypage if type is mypage\r\n backdrop: \"backdrop\", //static or false\r\n size: \"size\", //md lg xl\r\n}\r\n\r\nexport const KUI = {\r\n fnshowDialog: \"fnshowDialog\",\r\n fnShowToast: \"fnShowToast\",\r\n fnshowConfirm: \"fnshowConfirm\",\r\n fnShowLoadingScreen: \"fnShowLoadingScreen\",\r\n fnForceUpdateRoutes: \"fnForceUpdateRoutes\",\r\n}\r\n\r\nexport const KConstant = {\r\n _NullOrEmpty_: \"_NullOrEmpty_\",\r\n}\r\n\r\nexport const KApiName = {\r\n List: \"List\",\r\n Options: \"Options\",\r\n UpdateFields: \"UpdateFields\",\r\n}\r\n\r\nexport const KOnePageMore = {\r\n _currentSearchText: \"_currentSearchText\", //co text dang search khong\r\n _componentTable: \"_componentTable\", //component Table\r\n _componentTableLoading: \"_componentTableLoading\",\r\n _waitingComponentTableForFilter: \"_waitingComponentTableForFilter\",\r\n _configRowById: \"_configRowById\",\r\n _isShowLoadMore: \"_isShowLoadMore\",\r\n _configLoadMore: \"_configLoadMore\",\r\n _pageUUID: \"_pageUUID\",\r\n _dataTotal: \"_dataTotal\",\r\n}\r\n\r\n//when using json on table header\r\nexport const KConfigTableHeader = {\r\n type: \"type\",\r\n header: \"header\",\r\n style: \"style\",\r\n title: \"title\",\r\n tooltip: \"tooltip\",\r\n html: \"html\",\r\n}\r\n\r\nexport const KTypeCellControl = {\r\n textarea: \"textarea\",\r\n input: \"input\",\r\n}\r\n\r\nexport const KMyUITypeCommon = {\r\n html: \"html\",\r\n}\r\n\r\nexport const kRequestFromClient = {\r\n UI_TextSearch: \"UI_TextSearch\",\r\n UI_Sorts: \"UI_Sorts\",\r\n}\r\n\r\nexport const KRowMore = {\r\n UI_MergeRowByField: \"UI_MergeRowByField\",\r\n}\r\n\r\nexport const kClientKeyUI = {\r\n _UI_Missing: \"_UI_Missing\", //boolean for option source item, missing from source\r\n _RelativeByField: \"_RelativeByField\",\r\n}\r\n\r\nexport const KStorage = {\r\n _localConfig: \"_localConfig\",\r\n _localBaseUrl: \"_localBaseUrl\",\r\n _usingLocalBaseUrl: \"_usingLocalBaseUrl\",\r\n redirectAfterLogin: \"redirectAfterLogin\",\r\n HomeURL: \"HomeURL\",\r\n AuthInfo: \"Auth-Info\",\r\n}\r\n\r\nexport const KClassBody = {\r\n appFullContainer: \"app-full-container\", //remove padding container of page\r\n}\r\n\r\nexport const kMyUICore = {\r\n //fnFrom MyUI Core\r\n myData: \"myData\", //get data from this.props.data\r\n myChange: \"myChange\", //call function from onChange\r\n myBlur: \"myBlur\", //call function from onBlur\r\n}\r\n\r\nexport const KObserver = {\r\n beforeSearchTable: \"beforeSearchTable\",\r\n beforeFilterTable: \"beforeFilterTable\",\r\n window_resize: \"window_resize\",\r\n}\r\n\r\nexport const KLocalStorage = {\r\n useTheme: \"useTheme\",\r\n themeSeason: \"themeSeason\",\r\n}\r\n\r\nconst K = {\r\n fnGetListExtraData: \"fnGetListExtraData\",\r\n fnGetConfigFilter: \"fnGetConfigFilter\",\r\n fnGetOptions: \"fnGetOptions\",\r\n KConfigApp,\r\n KConfigPageTable,\r\n KConfigPageTableDefault,\r\n KConfigPageFilter,\r\n KUI,\r\n KConstant,\r\n KApiName,\r\n KMyUITypeCommon,\r\n kMyUICore,\r\n}\r\nexport default K\r\n","import classNames from \"classnames\"\r\nimport Skeleton from \"react-loading-skeleton\"\r\nimport styled from \"styled-components\"\r\n\r\nexport const getLoadingBlogList = props => {\r\n const { loadingMore, firstLoading, arr } = props\r\n let _arr = [...arr]\r\n if (!firstLoading) {\r\n _arr = Array.from({ length: 12 }, (_, i) => i)\r\n }\r\n return (\r\n \r\n {firstLoading && (\r\n \r\n )}\r\n {firstLoading && (\r\n
\r\n {Array(5)\r\n .fill({})\r\n .map(v => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n })}\r\n
\r\n )}\r\n \r\n {_arr.map(v => {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n )\r\n })}\r\n \r\n
\r\n )\r\n}\r\n\r\nconst WrapSkeletonLoading = styled.div`\r\n margin-top: -2rem;\r\n & .wrap-filter {\r\n margin-top: 1rem;\r\n flex-wrap: wrap;\r\n }\r\n & .one-filter {\r\n margin-right: 0.5rem;\r\n border-radius: 20px;\r\n }\r\n & .one-travelling-card {\r\n margin-bottom: 15px;\r\n }\r\n & .remove-space {\r\n margin-top: 0 !important;\r\n }\r\n`\r\n","import React from \"react\"\r\nimport styled from \"styled-components\"\r\nimport { historyFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport { MyUI } from \"src/core/components\"\r\nimport { HUtils } from \"@macashipo/mlib\"\r\nconst MessageAboveActions = props => {\r\n const { data, fnList } = props\r\n const headerInfo = data?.[historyFields.fHeaderInfo]\r\n const title = headerInfo?.Title\r\n const endtime = headerInfo?.[historyFields.fEndTime]\r\n const content = headerInfo?.Content\r\n const url = headerInfo?.Url\r\n const canShow = headerInfo?.CanShow\r\n const getConfigMsgFromFirstSetting = () => {\r\n if (fnList && fnList?.getConfigFromFirstSettingByKey) {\r\n return fnList?.getConfigFromFirstSettingByKey(\"messageAboveActions\")\r\n }\r\n return\r\n }\r\n const getText = () => {\r\n const list = getConfigMsgFromFirstSetting() || {}\r\n const statusCode = data?.[historyFields.fOrderStatusCode]\r\n let _text = list?.[statusCode] || \"\"\r\n const matches = _text.match(/\\[(.*?)\\]/)\r\n if (matches && matches?.length > 0) {\r\n const beforeBracket = _text.split(\"[\")[0]\r\n const afterBracket = _text.split(\"]\")[1]\r\n return {\r\n before: beforeBracket,\r\n after: afterBracket,\r\n }\r\n }\r\n return {}\r\n }\r\n const renderMessageAbove = () => {\r\n const text = getText()\r\n const footerInfo = data?.[historyFields.fFooterInfo]\r\n if (endtime && endtime > new Date().getTime()) {\r\n return (\r\n \r\n {text?.before}\r\n {\r\n fnList?.onReload && fnList.onReload()\r\n },\r\n }}\r\n />\r\n {text?.after}\r\n \r\n )\r\n } else if (footerInfo?.Title) {\r\n return {footerInfo?.Title}\r\n }\r\n return <>\r\n }\r\n return {renderMessageAbove()}\r\n}\r\nconst Wrap = styled.div`\r\n text-align: center;\r\n color: var(--mauden);\r\n &.pb-15px {\r\n padding-bottom: 15px;\r\n }\r\n & .mui-countdown-time {\r\n padding-top: 0px;\r\n display: inline-block;\r\n & .countdown {\r\n display: inline-block;\r\n font-size: 16px;\r\n & .red {\r\n color: var(--mauden);\r\n }\r\n }\r\n & .title {\r\n display: none;\r\n }\r\n }\r\n & .h-header,\r\n & .h-content {\r\n text-align: center;\r\n }\r\n`\r\nexport default MessageAboveActions\r\n","import { HIs, HJson } from \"@macashipo/mlib\"\r\nexport const KMoreOfForm = {\r\n typeWrapControl: \"typeWrapControl\",\r\n btnSubmit: \"btnSubmit\",\r\n btnReset: \"btnReset\",\r\n}\r\n\r\nexport const FlowGetConfigFormFromConfigServer = (\r\n configV1,\r\n { defaultValues, fnList, moreDefaultValues }\r\n) => {\r\n if (\r\n configV1 === null ||\r\n configV1 === undefined ||\r\n (configV1 && Object.keys(configV1).length === 0)\r\n ) {\r\n return null\r\n }\r\n let _controls = []\r\n let _moreOfForm = configV1.More || {}\r\n if (configV1.More && HIs.isString(configV1.More)) {\r\n _moreOfForm = HJson.getObj(configV1.More)\r\n }\r\n let _defaultValues = {\r\n ...defaultValues,\r\n ...configV1.DefaultValues,\r\n ...moreDefaultValues,\r\n }\r\n // console.warn(\"FlowGetConfigFormFromConfigServer:\", configV1)\r\n if (configV1.Data && configV1.Data.length > 0) {\r\n _controls = configV1.Data.map((v, i) => {\r\n let _more = {}\r\n if (v.Props && HIs.isString(v.Props)) {\r\n _more = HJson.getObj(v.Props)\r\n } else if (typeof v.Props == \"object\") {\r\n _more = { ...v.Props }\r\n }\r\n return {\r\n label: v.Label,\r\n fieldName: v.FieldName,\r\n type: v.Type,\r\n more: {\r\n ..._more,\r\n hint: v.Hint,\r\n disabled: v.Disabled || false,\r\n optionKey: v.Source || v.SourceField,\r\n },\r\n }\r\n })\r\n }\r\n return {\r\n title: configV1.Title,\r\n closeMyModalAfterSubmit: true,\r\n defaultValues: _defaultValues,\r\n controls: _controls,\r\n fnList: fnList,\r\n more: {\r\n ..._moreOfForm,\r\n },\r\n }\r\n}\r\n","import { MyFormControlHelpers } from \"@macashipo/mlib\"\r\nimport { FlowGetConfigFormFromConfigServer } from \"src/helpers/Flows/Form\"\r\n// import MyComponentHelpers from \"../MyCore/MyComponentHelpers\"\r\n// import MyFormControlTypes from \"./MyFormControlTypes\"\r\n// const MyFormControlHelpers = {\r\n// getTypeFn(props: any) {\r\n// // console.warn(\"MyFormControlTypes:\", MyFormControlTypes.Types, props)\r\n// return MyComponentHelpers.getTypeFn(MyFormControlTypes.Types, props)\r\n// },\r\n// }\r\n/**\r\nDisabled: null\r\nFieldName: \"DisplayName\"\r\nHint: null\r\nLabel: \"Full Name\"\r\nProps: null\r\nRequired: null\r\nSource: null\r\nSourceField: null\r\nSourceList: null\r\nStyle: null\r\nSubmitAfterChange: null\r\nType: \"text\"\r\n */\r\n// MyFormControlHelpers[\"getConfigFormFromConfigV1\"] = function (configV1: any) {\r\n// let _controls = []\r\n// if (configV1.Data && configV1.Data.length > 0) {\r\n// _controls = configV1.Data.map((v, i) => {\r\n// return {\r\n// label: v.Label,\r\n// fieldName: v.FieldName,\r\n// type: v.Type,\r\n// more: {\r\n// hint: v.Hint,\r\n// optionKey: v.SourceField,\r\n// },\r\n// }\r\n// })\r\n// }\r\n// return {\r\n// title: configV1.Title,\r\n// closeMyModalAfterSubmit: true,\r\n// defaultValues: {},\r\n// controls: _controls,\r\n// }\r\n// }\r\nMyFormControlHelpers[\"getConfigFormFromConfigV1\"] = function (\r\n configV1: any,\r\n { defaultValues, fnList } = { defaultValues: {}, fnList: {} }\r\n) {\r\n return FlowGetConfigFormFromConfigServer(configV1, {\r\n defaultValues,\r\n fnList,\r\n moreDefaultValues: null,\r\n })\r\n}\r\nexport default MyFormControlHelpers\r\n","import OneScreenConfig from '../model/OneScreenConfig'\r\n\r\ninterface IConfigPagination {\r\n getQuery: () => object | null\r\n}\r\n\r\ninterface IConfigPaginationOptions {\r\n pageStart?: number\r\n pageSize?: number\r\n fPage?: string\r\n fPageSize?: string\r\n afterChange?: (currentPage: number, pageSize: number) => void\r\n}\r\n\r\ninterface IConfigPaginationFromCellMore {\r\n pageStart?: number\r\n pageSize?: number\r\n}\r\n\r\nclass ConfigPagination implements IConfigPagination {\r\n _pageStart: number = 1\r\n _pageCurrent: number = 1\r\n _totalItems: number = 0\r\n _pageSize: number = 10\r\n _fPage: string\r\n _fPageSize: string\r\n _afterChange: (currentPage: number, pageSize: number) => void\r\n constructor(config: IConfigPaginationOptions) {\r\n this._pageStart = config.pageStart != null ? config.pageStart : 1\r\n this._pageCurrent = this._pageStart\r\n this._pageSize = config.pageSize != null ? config.pageSize : 10\r\n this._fPage = config.fPage || 'Page'\r\n this._fPageSize = config.fPageSize || 'PageSize'\r\n this._afterChange =\r\n config.afterChange != null ? config.afterChange : () => {}\r\n }\r\n next() {\r\n this._pageCurrent++\r\n this.afterChange()\r\n }\r\n previous() {\r\n this._pageCurrent--\r\n this.afterChange()\r\n }\r\n go(page: number) {\r\n this._pageCurrent = page\r\n this.afterChange()\r\n }\r\n goFist() {\r\n this._pageCurrent = this._pageStart\r\n this.afterChange()\r\n }\r\n update(page?: number, pageSize?: number, totalItems?: number) {\r\n if (page != null) {\r\n this._pageCurrent = page\r\n }\r\n if (pageSize != null) {\r\n this._pageSize = pageSize\r\n }\r\n if (totalItems != null) {\r\n this._totalItems = totalItems\r\n }\r\n }\r\n validSetPageNumber() {}\r\n afterChange() {\r\n this._afterChange(this._pageCurrent, this._pageSize)\r\n }\r\n getQuery() {\r\n return {\r\n [this._fPage]: this._pageCurrent,\r\n [this._fPageSize]: this._pageSize\r\n }\r\n }\r\n\r\n updateFromOneScreenConfig(oneScreenConfig: OneScreenConfig) {\r\n if (oneScreenConfig) {\r\n this._pageSize =\r\n oneScreenConfig._table.optionsTable?.sizePerPage || this._pageSize\r\n }\r\n }\r\n updateFromDataList(data?: any) {\r\n if (data != null) {\r\n if (data.Total) {\r\n this._totalItems = data.Total\r\n } else if (data.Data && data.Data.length >= 0) {\r\n this._totalItems = data.Data.length\r\n }\r\n }\r\n }\r\n\r\n static createFromCellMore(configPagination: IConfigPaginationFromCellMore) {\r\n return new ConfigPagination({\r\n pageStart: configPagination.pageStart,\r\n pageSize: configPagination.pageSize\r\n })\r\n }\r\n}\r\n\r\nexport default ConfigPagination\r\n","import React from 'react'\r\n\r\nconst CSuppense = function (props: any, TagC: any) {\r\n return (\r\n }>\r\n {' '}\r\n \r\n )\r\n}\r\n\r\nCSuppense.LazyLoading = () => {\r\n return
\r\n}\r\nexport default CSuppense\r\n","import * as React from 'react'\r\nclass ErrorBoundary extends React.Component {\r\n constructor(props: any) {\r\n super(props)\r\n this.state = { hasError: false }\r\n }\r\n static getDerivedStateFromError() {\r\n // Update state so the next render will show the fallback UI.\r\n return { hasError: true }\r\n }\r\n componentDidCatch(error: any, errorInfo: any) {\r\n // You can also log the error to an error reporting service\r\n console.warn('ErrorBoundary UI:', error, errorInfo, this.props)\r\n }\r\n render() {\r\n if (this.state.hasError) {\r\n console.warn('ErrorBoundary', this.props)\r\n return
\r\n }\r\n return this.props.children\r\n }\r\n}\r\n\r\nexport default ErrorBoundary\r\n","export const RGSquareBracket = /\\[([^\\]]+)\\]/g\r\nexport const RGSquareBracketReplace = /\\[(.[^\\]]*)\\]/gm\r\nexport const RGHexColor = /#([a-f0-9]{6}|[a-f0-9]{3})/g\r\nexport const RGEmail =\r\n /(?:[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/g\r\n// export const RGEmail =\r\n// /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/g\r\n//bo sung phone check\r\nexport const RGPhone = /^(\\+\\d{1,3}[- ]?)?\\d{8,12}$/\r\n\r\nexport const getOneGroupOfMatchRegex = (\r\n patern: string = '',\r\n text: string = ''\r\n) => {\r\n if (patern && text) {\r\n let _rg = new RegExp(patern)\r\n let _match = _rg.exec(text)\r\n if (_match && _match[1]) {\r\n return _match[1]\r\n }\r\n }\r\n return null\r\n}\r\n","import { RGHexColor } from './Regex'\r\nexport const isFunction = (v: any) => {\r\n return typeof v === 'function'\r\n}\r\nexport const isArray = (v: any) => {\r\n return Array.isArray(v)\r\n}\r\nexport const isString = (v: any) => {\r\n return typeof v === 'string'\r\n}\r\nexport const isNumber = (v: any) => {\r\n return typeof v === 'number'\r\n}\r\nexport const isBoolean = (v: any) => {\r\n return typeof v === 'boolean'\r\n}\r\nexport const isJsonString = (v: any) => {\r\n return typeof v === 'string' && v.trim().startsWith('{')\r\n}\r\nexport const isJson = (v: any) => {\r\n try {\r\n JSON.parse(v)\r\n } catch (e) {\r\n return false\r\n }\r\n return true\r\n}\r\n\r\n// thay doi isObject, vi array cung co hasOwnProperty\r\n// export const isObject = (v: any) => {\r\n// return typeof v === 'object' && v != null && v.hasOwnProperty != null\r\n// }\r\nexport const isObject = (v: any) => {\r\n return (\r\n v != null &&\r\n (v.constructor.name === 'Object' || v instanceof Object) &&\r\n !isArray(v)\r\n )\r\n}\r\nexport const isDateValue = (v: any) => {\r\n return new Date(v).getTime() > 0\r\n}\r\n\r\nexport const isRegex = (v: any) => {\r\n return v instanceof RegExp\r\n}\r\n\r\nexport const isHexColor = (v: any) => {\r\n return RGHexColor.test(v)\r\n}\r\n\r\nexport const isNullOrEmpty = (v: any) => {\r\n return v === null || v === undefined || v === ''\r\n}\r\n\r\nexport const isNotNullOrEmpty = (v: any) => {\r\n return !isNullOrEmpty(v)\r\n}\r\n\r\nexport const isIsoDate = (str: string) => {\r\n if (\r\n /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z?/.test(str) ||\r\n /\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2}/.test(str)\r\n ) {\r\n var d = new Date(str)\r\n return d.toString() !== 'Invalid Date'\r\n }\r\n return false\r\n}\r\n","/* tslint:disable */\r\n/* eslint-disable */\r\nvar origLog = console.log\r\nvar origWarn = console.warn\r\nvar origInfo = console.info\r\n\r\ninterface ILogInfo {\r\n countTest: number\r\n logTypeOne?: boolean\r\n disabled?: boolean\r\n listNoPage: string[]\r\n listNoMyUI: string[]\r\n listNoAnyType: string[]\r\n}\r\n\r\nconst LogInfo: ILogInfo = {\r\n logTypeOne: true,\r\n disabled: false,\r\n countTest: 0,\r\n listNoPage: [],\r\n listNoMyUI: [],\r\n listNoAnyType: []\r\n}\r\n\r\nexport const initLog = (opts: any) => {\r\n if (opts) {\r\n if (opts.logTypeOne != null) {\r\n LogInfo.logTypeOne = opts.logTypeOne\r\n }\r\n }\r\n}\r\n\r\nexport const disableLog = () => {\r\n LogInfo.disabled = true\r\n}\r\n// console.log = function () {\r\n// var msgs: any[] = [],\r\n// prefix: string = window === window.top ? '[root]' : '[' + window.name + ']'\r\n// while (arguments.length) {\r\n// msgs.push(prefix + ': ' + [].shift.call(arguments))\r\n// }\r\n// origLog.apply(console, msgs)\r\n// }\r\nexport const logW = (...data: any[]) => {\r\n origWarn.apply(console, data)\r\n}\r\nexport const logParseJson = (...data: any[]) => {\r\n if (LogInfo.disabled) {\r\n return\r\n }\r\n var msgs: any[] = ['%c[Parse Json]', 'background: #222; color: #bada55']\r\n while (data.length) {\r\n msgs.push([].shift.call(data))\r\n }\r\n origWarn.apply(console, msgs)\r\n}\r\n\r\nexport const logApi = (...data: any[]) => {\r\n if (LogInfo.disabled) {\r\n return\r\n }\r\n var msgs: any[] = ['%c[Api]', 'background: #009933; color: #fff']\r\n while (data.length) {\r\n msgs.push([].shift.call(data))\r\n }\r\n origLog.apply(console, msgs)\r\n}\r\n\r\nexport const logTest = (...data: any[]) => {\r\n if (LogInfo.disabled) {\r\n return\r\n }\r\n LogInfo.countTest++\r\n var msgs: any[] = [\r\n `%c[Test ${LogInfo.countTest}]`,\r\n 'background: #ffffff; color: #ff00ff'\r\n ]\r\n while (data.length) {\r\n msgs.push([].shift.call(data))\r\n }\r\n origInfo.apply(console, msgs)\r\n}\r\n\r\nexport const logExistType = (type: string, ...data: any[]) => {\r\n if (LogInfo.disabled) {\r\n return\r\n }\r\n var msgs: any[] = [\r\n `%c[Exist Type: ${type}]`,\r\n 'background: #ff6060; color: #fff'\r\n ]\r\n while (data.length) {\r\n msgs.push([].shift.call(data))\r\n }\r\n origWarn.apply(console, msgs)\r\n}\r\n\r\nexport const logNoType = (opts: any = {}, type: string, ...data: any[]) => {\r\n if (LogInfo.disabled) {\r\n return\r\n }\r\n if (LogInfo.logTypeOne === true) {\r\n let _list = opts.list\r\n if (_list.indexOf(type) > -1) {\r\n return\r\n } else {\r\n _list.push(type)\r\n }\r\n }\r\n var msgs: any[] = [\r\n `%c[${opts.prefix || 'No Type'}: ${type}]`,\r\n opts.style || 'background: #ff0000; color: #fff'\r\n ]\r\n while (data.length) {\r\n msgs.push([].shift.call(data))\r\n }\r\n origWarn.apply(console, msgs)\r\n}\r\nexport const logNoMyUIType = (type: string, ...data: any[]) => {\r\n return logNoType(\r\n {\r\n list: LogInfo.listNoMyUI,\r\n prefix: 'No MyUI Type',\r\n style: 'background: #dc552d; color: #fff'\r\n },\r\n type,\r\n ...data\r\n )\r\n}\r\nexport const logNoAnyType = (type: string, ...data: any[]) => {\r\n return logNoType(\r\n {\r\n list: LogInfo.listNoAnyType,\r\n prefix: 'No Type',\r\n style: 'background: #dc552d; color: #fff'\r\n },\r\n type,\r\n ...data\r\n )\r\n}\r\nexport const logNoMyPageType = (type: string, ...data: any[]) => {\r\n return logNoType(\r\n {\r\n list: LogInfo.listNoPage,\r\n prefix: 'No MyPage Type',\r\n style: 'background: #dc552d; color: #fff'\r\n },\r\n type,\r\n ...data\r\n )\r\n}\r\n\r\nlet logOneObj = {}\r\nexport const logOne = (msg: string, ...data: any[]) => {\r\n if (LogInfo.disabled) {\r\n return\r\n }\r\n if (!logOneObj[msg]) {\r\n var msgs: any[] = [`%c[Log One:]`, 'background: #ff0000; color: #fff', msg]\r\n while (data.length) {\r\n msgs.push([].shift.call(data))\r\n }\r\n origWarn.apply(console, msgs)\r\n logOneObj[msg] = true\r\n }\r\n}\r\n\r\nexport const logNeedOveride = (...data: any[]) => {\r\n if (LogInfo.disabled) {\r\n return\r\n }\r\n var msgs: any[] = [`%c[NeedOveride]`, 'background: #000000; color: #ff00ff']\r\n while (data.length) {\r\n msgs.push([].shift.call(data))\r\n }\r\n origWarn.apply(console, msgs)\r\n}\r\n\r\nexport const logObjForCopy = function () {\r\n for (var i = 0; i < arguments.length; i++) {\r\n var _s = JSON.stringify(arguments[i], null, 2)\r\n _s = _s.replace(/\"([^\"]+)\":/gm, '$1:')\r\n console.log(_s)\r\n }\r\n}\r\n\r\nexport const logObjectPrettyPrint = function () {\r\n for (var i = 0; i < arguments.length; i++) {\r\n console.log(JSON.stringify(arguments[i], null, 2))\r\n }\r\n}\r\n","import { isNullOrEmpty, isString } from './Is'\r\nimport { logParseJson } from './Log'\r\n\r\nexport const getObj = (stringJson: any, df = {}, { cbError }: any = {}) => {\r\n if (isString(stringJson)) {\r\n try {\r\n return JSON.parse(stringJson)\r\n } catch (error) {\r\n if (cbError) {\r\n cbError()\r\n }\r\n logParseJson(stringJson, error)\r\n }\r\n }\r\n return df\r\n}\r\n\r\nexport const getString = (obj: object, df = '', { cbError }: any = {}) => {\r\n if (!isNullOrEmpty(obj)) {\r\n try {\r\n return JSON.stringify(obj)\r\n } catch (error) {\r\n if (cbError) {\r\n cbError()\r\n }\r\n logParseJson('[getString]', obj, error)\r\n }\r\n }\r\n return df\r\n}\r\n\r\nexport const json2Obj = getObj\r\nexport const obj2Json = getString\r\n","import React from 'react'\r\nimport CSuppense from './CSuppense'\r\nimport { logExistType } from '../../helpers/Log'\r\n\r\nconst MyComponentTypes = {\r\n addTypesGeneric(classMy: any, key: string, fnUI: any) {\r\n if (classMy && key) {\r\n let _key = key.toLocaleLowerCase()\r\n if (classMy[_key]) {\r\n logExistType(_key)\r\n } else {\r\n classMy[_key] = fnUI\r\n }\r\n }\r\n },\r\n addTypesGenericFromListLazy(classMy: any, listWithKey: any) {\r\n if (listWithKey) {\r\n let _keys = Object.keys(listWithKey)\r\n if (_keys && _keys.length > 0) {\r\n for (let k of Object.keys(listWithKey)) {\r\n MyComponentTypes.addTypesGeneric(classMy, k, (props: any) => {\r\n return CSuppense(props, listWithKey[k])\r\n })\r\n }\r\n }\r\n }\r\n },\r\n addTypesGenericFromListWithoutLazy(classMy: any, listWithKey: any) {\r\n if (listWithKey) {\r\n let _keys = Object.keys(listWithKey)\r\n if (_keys && _keys.length > 0) {\r\n for (let k of Object.keys(listWithKey)) {\r\n MyComponentTypes.addTypesGeneric(classMy, k, (props: any) => {\r\n const Tag = listWithKey[k]\r\n return \r\n })\r\n }\r\n }\r\n }\r\n },\r\n removeTypeGeneric(classMy: any, key: string) {\r\n if (classMy && key) {\r\n let _key = key.toLocaleLowerCase()\r\n if (classMy[_key]) {\r\n delete classMy[_key]\r\n }\r\n }\r\n },\r\n Types: {\r\n _empty: () => {\r\n return
\r\n }\r\n },\r\n TypesWrap: {\r\n _empty: (props: any) => {\r\n return props.children\r\n }\r\n }\r\n}\r\n\r\nexport default MyComponentTypes\r\n","import { isString } from '../../helpers/Is'\r\nimport { logNoAnyType } from '../../helpers/Log'\r\nimport MyComponentTypes from './Types'\r\nconst MyComponentHelpers = {\r\n getMyComponentTypeFn(types: any, props: any) {\r\n let _type = ''\r\n // console.warn('getMyComponentTypeFn:', types, props)\r\n if (props && props.type && isString(props.type)) {\r\n _type = props.type.toLocaleLowerCase() || ''\r\n }\r\n if (types && types[_type]) {\r\n return types[_type]\r\n }\r\n logNoAnyType(`Component:${_type}`, props, types)\r\n if (types && types._default) {\r\n return types._default\r\n }\r\n if (types && types._empty) {\r\n return types._empty\r\n }\r\n return MyComponentTypes.Types._empty\r\n }\r\n}\r\n\r\nexport default MyComponentHelpers\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyPageLayoutHelpers = {\r\n setDefaultMyPageLayout(fnUI: any) {\r\n MyPageLayoutHelpers.Types['_default'] = fnUI\r\n },\r\n setEmptyMyPageLayout(fnUI: any) {\r\n MyPageLayoutHelpers.Types['_empty'] = fnUI\r\n },\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyPageLayoutHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyPageLayoutHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyPageLayoutHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n }\r\n}\r\n\r\nexport default MyPageLayoutHelpers\r\n","import MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyPageLayout(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return MyTypeFn(props)\r\n}\r\n\r\nexport default MyPageLayout\r\n","import MyComponentTypes from '../MyComponent/Types'\r\ninterface IConfigDetail {\r\n controller?: string\r\n queryFromParent?: any\r\n screenCode?: string\r\n title?: string\r\n titleField?: string\r\n bgColor?: string\r\n bgF?: string\r\n needReloadMaster?: boolean\r\n needReloadMasterAfterAddNew?: boolean\r\n needReloadMasterAfterUpdateField?: boolean\r\n needReloadMasterAfterDeleteItem?: boolean\r\n needReloadMasterAfterList?: boolean\r\n useOptionsInMaster?: boolean\r\n userOptionsInMaster?: boolean //sai chinh ta\r\n prefixFieldKeyUI?: any\r\n isRow?: boolean //trinh bay detail dang row\r\n}\r\nconst MyPageHelpers = {\r\n setDefaultMyPage(fnUI: any) {\r\n MyPageHelpers.Types['_default'] = fnUI\r\n },\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyPageHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyPageHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n },\r\n buildConfigPageFromConfigDetail(configDetail: IConfigDetail, row: any) {\r\n if (configDetail.controller) {\r\n let _title = 'Detail'\r\n if (configDetail.title) {\r\n _title = configDetail.title\r\n } else if (configDetail.titleField && row[configDetail.titleField]) {\r\n _title = row[configDetail.titleField]\r\n }\r\n let _requestData = {}\r\n if (configDetail.queryFromParent) {\r\n let _keys = Object.keys(configDetail.queryFromParent)\r\n if (_keys && _keys.length > 0) {\r\n for (let k of _keys) {\r\n let _fieldName = configDetail.queryFromParent[k]\r\n if (row.hasOwnProperty(_fieldName)) {\r\n _requestData[k] = row[_fieldName]\r\n } else {\r\n _requestData[k] = configDetail.queryFromParent[k]\r\n }\r\n }\r\n }\r\n }\r\n return {\r\n APIName: configDetail.controller,\r\n Config: '',\r\n Id: '',\r\n RequestData: _requestData,\r\n ScreenCode: configDetail.screenCode,\r\n Title: _title,\r\n Type: '',\r\n UIType: '',\r\n UIUrl: ''\r\n }\r\n }\r\n return null\r\n }\r\n}\r\n\r\nexport default MyPageHelpers\r\n","const Constant = {\r\n DefaultUITypeWhenNull: 'Table',\r\n Key: {\r\n Table: 'Table',\r\n Header: 'Header',\r\n Page: 'Page',\r\n Detail: 'Detail',\r\n Filter: 'Filter',\r\n //\r\n Type: 'Type'\r\n },\r\n Array: {\r\n colors: ['success', 'danger', 'primary', 'secondary', 'link', 'warning']\r\n },\r\n AppConfig: {\r\n showClassFieldOnCell: 'showClassFieldOnCell'\r\n }\r\n}\r\n\r\nexport default Constant\r\n","import { RGSquareBracket } from '../helpers/Regex'\r\nimport { isNullOrEmpty, isObject, isString } from '../helpers/Is'\r\nimport { json2Obj } from '../helpers/Json'\r\nimport MyPageLayout from '../components/MyPageLayout'\r\nimport MyPageHelpers from '../components/MyPage/Helpers'\r\nimport { IConfigPageServer } from '../interface'\r\nimport Constant from 'src/helpers/Constants'\r\n/**\r\n * APIName: \"AppScreenUIControlSetting\"\r\nConfig: null\r\nId: \"787ffea3-e072-4ed7-8cfb-23e6ffd5b766\"\r\nRequestData: null\r\nScreenCode: \"RP_ANALYTIC_ON_UPLOAD\"\r\nTitle: \"Analytic On Upload File\"\r\nType: \"SIDE_MENU\"\r\nUIType: \"Tab\"\r\nUIUrl: \"/rp-analytic-uploadfile\"\r\n */\r\n\r\ninterface IConfigPage {}\r\n// const Key = {\r\n// APIName: 'APIName',\r\n// ScreenCode: 'ScreenCode',\r\n// UIUrl: 'UIUrl',\r\n// UIType: 'UIType',\r\n// Title: 'Title',\r\n// Id: 'Id',\r\n// Contents: 'Contents'\r\n// }\r\nclass ConfigPage implements IConfigPage {\r\n _configPageServer?: IConfigPageServer\r\n _config: any\r\n constructor() {}\r\n parseConfigPageServer(obj: IConfigPageServer) {\r\n this._configPageServer = obj\r\n this._config = {}\r\n if (obj && obj.Config) {\r\n if (isString(obj.Config)) {\r\n this._config = json2Obj(obj.Config)\r\n } else if (isObject(obj.Config)) {\r\n this._config = obj.Config\r\n }\r\n }\r\n }\r\n getApiController() {\r\n return this._configPageServer?.APIName\r\n }\r\n getScreenCode() {\r\n return this._configPageServer?.ScreenCode\r\n }\r\n getTitle() {\r\n return this._configPageServer?.Title\r\n }\r\n getId() {\r\n return this._configPageServer?.Id\r\n }\r\n getType() {\r\n let _type = this._configPageServer?.UIType\r\n if (_type == 'Client') {\r\n if (this._config && this._config.type) {\r\n _type = this._config.type\r\n }\r\n }\r\n //default type when null\r\n if (isNullOrEmpty(_type)) {\r\n _type = Constant.DefaultUITypeWhenNull\r\n }\r\n\r\n if (_type && isString(_type)) {\r\n _type = _type.toLocaleLowerCase()\r\n }\r\n return _type || ''\r\n }\r\n getWrapMyPageLayout(props: any) {\r\n let _typeWrapLayout = this._config.wrapLayout\r\n let _configWrapLayout = {}\r\n if (isString(this._config.wrapLayout)) {\r\n _typeWrapLayout = this._config.wrapLayout\r\n } else if (isObject(this._config.wrapLayout)) {\r\n _typeWrapLayout = this._config.wrapLayout.type\r\n _configWrapLayout = this._config.wrapLayout.config\r\n }\r\n return MyPageLayout({\r\n ...props,\r\n type: _typeWrapLayout,\r\n config: _configWrapLayout\r\n })\r\n }\r\n getMyPageFn() {\r\n let _type = this.getType()\r\n console.warn('getMyPageFn:', _type)\r\n if (MyPageHelpers.Types[_type]) {\r\n return MyPageHelpers.Types[_type]\r\n }\r\n return MyPageHelpers.Types._empty\r\n }\r\n getMyPage(props: any) {\r\n let _myPageFn = this.getMyPageFn()\r\n return _myPageFn(props)\r\n }\r\n\r\n //Static\r\n static createFromConfigPageServer(obj: IConfigPageServer) {\r\n const cp = new ConfigPage()\r\n cp.parseConfigPageServer(obj)\r\n return cp\r\n }\r\n static parseCategoryScreenList(list?: IConfigPageServer[]) {\r\n let _newData: any[] = []\r\n if (list && list.length > 0) {\r\n _newData = list.map((v) => {\r\n if (v.UIUrl && v.UIUrl.indexOf('[') > -1) {\r\n v.UIUrl = v.UIUrl.replace(RGSquareBracket, ':$1')\r\n }\r\n if (v.UIType === null) {\r\n v.UIType = 'Table'\r\n }\r\n return v\r\n })\r\n }\r\n return _newData\r\n }\r\n}\r\n\r\nexport { IConfigPage }\r\nexport default ConfigPage\r\n","import { isNotNullOrEmpty, isNullOrEmpty, isObject } from './Is'\r\n\r\ninterface IConfigFormat {\r\n type?: string\r\n format?: string\r\n thousandSeparator?: string\r\n decimalSeparator?: string\r\n decimals?: number\r\n currencyChar?: string\r\n currencyPos?: 'last' | 'first'\r\n currencyThousandSeparator?: string\r\n currencyDecimalSeparator?: string\r\n date?: string\r\n datetime?: string\r\n time?: string\r\n switch?: any //kiem tra value theo gia tri\r\n compare?: any\r\n}\r\nconst Format = {\r\n defaultConfig: {\r\n thousandSeparator: ' ',\r\n decimalSeparator: '.',\r\n decimals: 2, //number decimal\r\n currencyChar: '$',\r\n currencyPos: 'first', //last,first\r\n currencyThousandSeparator: '.',\r\n currencyDecimalSeparator: ',',\r\n date: 'd/m/Y',\r\n datetime: 'd/m/Y HH:ss',\r\n time: 'HH:ss'\r\n },\r\n loadConfigByLang(config: any) {\r\n Format.defaultConfig = { ...Format.defaultConfig, ...config }\r\n },\r\n format(value: any = '', configFormat: IConfigFormat = {}, opts: any = {}) {\r\n if (\r\n configFormat.type &&\r\n Format.Types[configFormat.type] &&\r\n Format.Types[configFormat.type]['format']\r\n ) {\r\n return Format.Types[configFormat.type]['format'](\r\n value,\r\n configFormat,\r\n opts\r\n )\r\n }\r\n },\r\n compare(value: any, compareValue: any, operator: string = '==') {\r\n switch (operator) {\r\n case '==':\r\n return value == compareValue\r\n case '>=':\r\n return value >= compareValue\r\n case '<=':\r\n return value <= compareValue\r\n case '===':\r\n return value === compareValue\r\n case '>':\r\n return value > compareValue\r\n case '<':\r\n return value < compareValue\r\n case '!=':\r\n return value != compareValue\r\n case '!==':\r\n return value !== compareValue\r\n case 'isEmpty':\r\n return isNullOrEmpty(value)\r\n case 'isNotEmpty':\r\n return isNotNullOrEmpty(value)\r\n }\r\n return false\r\n },\r\n Types: {\r\n compare: {\r\n format(value: any, configFormat: IConfigFormat = {}, opts: any = {}) {\r\n let _result: any = ''\r\n if (configFormat.compare && configFormat.compare.result != null) {\r\n if (configFormat.compare._default) {\r\n _result = configFormat.compare._default\r\n }\r\n let _compareValue = null\r\n if (\r\n configFormat.compare.fieldName &&\r\n opts &&\r\n opts.data &&\r\n opts.data.hasOwnProperty(configFormat.compare.fieldName)\r\n ) {\r\n _compareValue = opts.data[configFormat.compare.fieldName]\r\n } else if (configFormat.compare.compareValue) {\r\n _compareValue = configFormat.compare.compareValue\r\n }\r\n if (\r\n Format.compare(value, _compareValue, configFormat.compare.operator)\r\n ) {\r\n _result = configFormat.compare.result\r\n }\r\n if (isObject(_result) && _result.fieldName) {\r\n if (opts && opts.data && opts.data[_result.fieldName]) {\r\n _result = opts.data[_result.fieldName]\r\n } else {\r\n _result = ''\r\n }\r\n }\r\n }\r\n return _result\r\n }\r\n },\r\n switch: {\r\n format(\r\n value: any = '',\r\n configFormat: IConfigFormat = {},\r\n opts: any = {}\r\n ) {\r\n let _result: any = ''\r\n if (configFormat.switch) {\r\n if (configFormat.switch._default) {\r\n _result = configFormat.switch._default\r\n }\r\n if (configFormat.switch._notEmpty) {\r\n if (isNotNullOrEmpty(value)) {\r\n _result = configFormat.switch._notEmpty\r\n }\r\n }\r\n if (configFormat.switch._isEmpty) {\r\n if (isNullOrEmpty(value)) {\r\n _result = configFormat.switch._isEmpty\r\n }\r\n }\r\n if (configFormat.switch[value] != null) {\r\n _result = configFormat.switch[value]\r\n }\r\n if (isObject(_result) && _result.fieldName) {\r\n if (opts && opts.data && opts.data[_result.fieldName]) {\r\n _result = opts.data[_result.fieldName]\r\n } else {\r\n _result = ''\r\n }\r\n }\r\n return _result\r\n }\r\n return ''\r\n }\r\n },\r\n money: {\r\n format(value: any = '', configFormat: IConfigFormat = {}) {\r\n return value || configFormat || ''\r\n }\r\n },\r\n money_vnd: {\r\n format(value: any = '', configFormat: IConfigFormat = {}) {\r\n let _config = {\r\n ...{ decimals: 0, decimalSeparator: '', thousandSeparator: '.' },\r\n ...configFormat\r\n }\r\n return Format.Types.number.format(value, _config)\r\n }\r\n },\r\n number: {\r\n format(value: any = '', configFormat: IConfigFormat = {}) {\r\n let _number = Number(value)\r\n if (_number !== NaN) {\r\n let _config = { ...Format.defaultConfig, ...configFormat }\r\n return number_format(\r\n _number,\r\n _config.decimals,\r\n _config.decimalSeparator,\r\n _config.thousandSeparator\r\n )\r\n }\r\n return value || configFormat || ''\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const number_format = function (\r\n number: number,\r\n decimals: number,\r\n dec_point: string,\r\n thousands_sep: string\r\n) {\r\n var n = !isFinite(+number) ? 0 : +number,\r\n prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),\r\n sep = typeof thousands_sep === 'undefined' ? ',' : thousands_sep,\r\n dec = typeof dec_point === 'undefined' ? '.' : dec_point,\r\n toFixedFix = function (n: number, prec: number) {\r\n var k = Math.pow(10, prec)\r\n return Math.round(n * k) / k\r\n },\r\n s = (prec ? toFixedFix(n, prec) : Math.round(n)).toString().split('.')\r\n if (s[0].length > 3) {\r\n s[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, sep)\r\n }\r\n if ((s[1] || '').length < prec) {\r\n s[1] = s[1] || ''\r\n s[1] += new Array(prec - s[1].length + 1).join('0')\r\n }\r\n return s.join(dec)\r\n}\r\n\r\nexport default Format\r\n","import * as React from 'react'\r\nimport MyComponentTypes from '../MyComponent/Types'\r\nconst MyIconHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyIconHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyIconHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyIconHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty,\r\n loading: (props: any) => {\r\n return (\r\n \r\n )\r\n }\r\n }\r\n}\r\n\r\nexport default MyIconHelpers\r\n","import * as React from 'react'\r\nimport { isString } from 'src/helpers/Is'\r\nimport MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyIcon(props: any) {\r\n const configIcon = props.configIcon || props.data || {}\r\n let _type = props.type\r\n const style = props.style || {}\r\n const className = props.className || {}\r\n if (configIcon && isString(configIcon)) {\r\n if (configIcon.startsWith('fa')) {\r\n return \r\n } else if (configIcon.startsWith('type:')) {\r\n _type = configIcon.replace('type:', '')\r\n } else if (configIcon.startsWith('data:')) {\r\n return \r\n } else if (configIcon.startsWith('http') || configIcon.startsWith('/')) {\r\n return \r\n }\r\n }\r\n if (_type) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(MyHelpers.Types, {\r\n type: _type,\r\n ...props\r\n })\r\n return MyTypeFn(props)\r\n }\r\n return
\r\n}\r\n\r\nexport default MyIcon\r\n","import * as React from 'react'\r\nimport ReactDOMServer from 'react-dom/server'\r\nimport MyIcon from 'src/components/MyIcon'\r\nconst HComponent = {\r\n getHtmlFromConfigComponent: (item: any) => {\r\n if (item) {\r\n if (item.myIcon) {\r\n let _moreProps: any = {}\r\n if (item.className) {\r\n _moreProps.className = item.className\r\n }\r\n if (item.style) {\r\n _moreProps.style = item.style\r\n }\r\n let _component = \r\n return ReactDOMServer.renderToStaticMarkup(_component)\r\n }\r\n }\r\n return ''\r\n }\r\n}\r\n\r\nexport default HComponent\r\n","import LodashGet from 'lodash/get'\r\nimport LodashSet from 'lodash/set'\r\nimport LodashHas from 'lodash/has'\r\nimport {\r\n isFunction,\r\n isJsonString,\r\n isNullOrEmpty,\r\n isObject,\r\n isArray,\r\n isString\r\n} from './Is'\r\nimport { json2Obj } from './Json'\r\nimport { logOne } from './Log'\r\nimport { RGSquareBracketReplace } from './Regex'\r\nimport HFormat from './Format'\r\nimport HComponent from './Component'\r\nexport const get = LodashGet\r\nexport const has = LodashHas\r\nexport const set = LodashSet\r\nexport const mergeObjIfExist = (srcObj: any, mergeObj: any) => {\r\n if (srcObj && mergeObj) {\r\n let _keys = Object.keys(mergeObj)\r\n if (_keys && _keys.length > 0) {\r\n for (let k of _keys) {\r\n srcObj[k] = mergeObj[k]\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const mergeObjIfNotExist = (srcObj: any, mergeObj: any) => {\r\n if (srcObj && mergeObj) {\r\n let _keys = Object.keys(mergeObj)\r\n if (_keys && _keys.length > 0) {\r\n for (let k of _keys) {\r\n if (!has(srcObj, k)) {\r\n srcObj[k] = mergeObj[k]\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const runFuntion = (fnList: object, name?: string, args: any[] = []) => {\r\n if (fnList && name) {\r\n if (isFunction(fnList[name])) {\r\n return fnList[name].apply(null, args)\r\n }\r\n }\r\n logOne(`runFuntion failed: ${name}`, fnList)\r\n}\r\n\r\nconst getArrayFieldFromSquareBracketOfText = (s: string) => {\r\n var _result = []\r\n if (s != null) {\r\n var _m\r\n while ((_m = RGSquareBracketReplace.exec(s)) !== null) {\r\n if (_m.length > 1) {\r\n _result.push(_m[1])\r\n }\r\n }\r\n }\r\n return _result\r\n}\r\n//Helo [name] data: {name:\"Hung\"} -> Helo Hung\r\nexport const getCustomData = (sourceData: any, customData: any) => {\r\n let _customData = {}\r\n if (customData) {\r\n let _keys = Object.keys(customData)\r\n for (let k of _keys) {\r\n let _item = customData[k]\r\n if (isObject(_item)) {\r\n if (_item.fieldName && _item.configFormat) {\r\n _customData[k] = HFormat.format(\r\n sourceData[_item.fieldName],\r\n _item.configFormat,\r\n {\r\n data: sourceData\r\n }\r\n )\r\n } else if (_item.myIcon) {\r\n _customData[k] = HComponent.getHtmlFromConfigComponent(_item)\r\n }\r\n } else if (isString(_item)) {\r\n _customData[k] = getTextWithData(_item, sourceData, {\r\n squareBracket: true,\r\n hideshowWhenNull: true\r\n })\r\n } else {\r\n _customData[k] = customData[k]\r\n }\r\n }\r\n }\r\n return _customData\r\n}\r\nexport const getTextWithData = (\r\n text: string,\r\n data: any,\r\n opts: any = { squareBracket: true, hideshowWhenNull: true }\r\n) => {\r\n if (data && text) {\r\n if (text.indexOf('[') > -1) {\r\n //co dau hieu cua squareBracket\r\n let _fields = getArrayFieldFromSquareBracketOfText(text)\r\n if (_fields && _fields.length > 0) {\r\n var newS = text\r\n for (let f of _fields) {\r\n let _fieldName = f\r\n let _value = data[_fieldName]\r\n\r\n if (isJsonString(f)) {\r\n let _obj = json2Obj(f)\r\n if (_obj.fieldName) {\r\n _fieldName = _obj.fieldName\r\n if (_obj.configFormat) {\r\n _value = HFormat.format(data[_fieldName], _obj.configFormat, {\r\n data: data\r\n })\r\n }\r\n }\r\n if (!isNullOrEmpty(_value)) {\r\n var rg = new RegExp(`\\\\[${f}\\\\]`, 'g')\r\n newS = newS.replace(rg, _value)\r\n } else if (\r\n opts.hideshowWhenNull === true &&\r\n isNullOrEmpty(_value)\r\n ) {\r\n var rg = new RegExp(`\\\\[${f}\\\\]`, 'g')\r\n newS = newS.replace(rg, '')\r\n }\r\n } else if (!isNullOrEmpty(_value)) {\r\n var rg = new RegExp(`\\\\[${_fieldName}\\\\]`, 'g')\r\n newS = newS.replace(rg, _value)\r\n } else if (opts.hideshowWhenNull === true && isNullOrEmpty(_value)) {\r\n ////Bo sung hideshowWhenNull, de ko muon [] trong chuoi sau khi replace\r\n var rg = new RegExp(`\\\\[${_fieldName}\\\\]`, 'g')\r\n newS = newS.replace(rg, '')\r\n }\r\n }\r\n return newS\r\n }\r\n }\r\n }\r\n return text\r\n}\r\n\r\n// export function getFuncName() {//Not working\r\n// return getFuncName.caller.name\r\n// }\r\n\r\nexport const addItemToArrayOrCreateNewArray = (currArr = [], newItem: any) => {\r\n let _arr: any = []\r\n if (currArr) {\r\n if (isArray(currArr)) {\r\n if (currArr.length > 0) {\r\n _arr = currArr\r\n }\r\n } else {\r\n _arr = [currArr]\r\n }\r\n }\r\n // console.warn(\"addItemToArrayOrCreateNewArray\",currArr,newItem)\r\n return [..._arr, newItem]\r\n}\r\n\r\nexport function test() {\r\n console.warn('test HUtils')\r\n}\r\n\r\nexport const isLocalDev = () => {\r\n if (window.location.href.indexOf('localhost:') > -1) {\r\n return true\r\n }\r\n if (localStorage.getItem('_DEBUG_') === 'true') {\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nvar isMobile = {\r\n Android: function () {\r\n return navigator.userAgent.match(/Android/i)\r\n },\r\n BlackBerry: function () {\r\n return navigator.userAgent.match(/BlackBerry/i)\r\n },\r\n iOS: function () {\r\n return navigator.userAgent.match(/iPhone|iPad|iPod/i)\r\n },\r\n Opera: function () {\r\n return navigator.userAgent.match(/Opera Mini/i)\r\n },\r\n Windows: function () {\r\n return (\r\n navigator.userAgent.match(/IEMobile/i) ||\r\n navigator.userAgent.match(/WPDesktop/i)\r\n )\r\n },\r\n any: function () {\r\n return (\r\n isMobile.Android() ||\r\n isMobile.BlackBerry() ||\r\n isMobile.iOS() ||\r\n isMobile.Opera() ||\r\n isMobile.Windows()\r\n )\r\n }\r\n}\r\nexport const isRunOnAndroid = () => {\r\n return isMobile.Android()\r\n}\r\nexport const isRunOniOS = () => {\r\n return isMobile.iOS()\r\n}\r\nexport const isRunOnMobile = () => {\r\n return isMobile.any()\r\n}\r\n\r\nexport const PrintHtml = (htmlString = '', { autoPrint = true } = {}) => {\r\n // window.onbeforeprint = function () {\r\n // console.log('Printing prepare...')\r\n // }\r\n // window.onafterprint = function () {\r\n // console.log('Printing completed...')\r\n // }\r\n let _idPrintfGloabl = 'printf_global'\r\n let _idPrintfGloablIframe = 'printf_global_iframe'\r\n let _eContain = document.getElementById(_idPrintfGloabl)\r\n console.log('FlowPrintHtml:', _eContain)\r\n if (_eContain == null) {\r\n const el = document.createElement('div')\r\n el.setAttribute('id', _idPrintfGloabl)\r\n el.setAttribute('style', 'display: none;')\r\n document.body.appendChild(el)\r\n _eContain = document.getElementById(_idPrintfGloabl)\r\n }\r\n if (_eContain) {\r\n _eContain.innerHTML = ``\r\n }\r\n //insert htmlString\r\n let _eIframe: any = document.getElementById(_idPrintfGloablIframe)\r\n if (_eIframe && _eIframe.contentDocument) {\r\n _eIframe.contentDocument.write(htmlString)\r\n window.frames[_idPrintfGloablIframe].focus()\r\n let _height = _eIframe.contentWindow.document.body.scrollHeight\r\n _eIframe.style.height = `${_height}px`\r\n if (autoPrint !== false) {\r\n setTimeout(() => {\r\n // if(document && document.body && document.body.style && document.documentElement && document.documentElement.clientWidth){\r\n // document.body.style.width = `${document.documentElement.clientWidth}px`;\r\n // }//fix print change columns size\r\n if (window.frames[_idPrintfGloablIframe]) {\r\n if (window.frames[_idPrintfGloablIframe].document.execCommand) {\r\n window.frames[_idPrintfGloablIframe].document.execCommand(\r\n 'print',\r\n false,\r\n null\r\n ) //chay duoc voi Coccoc\r\n } else {\r\n window.frames[_idPrintfGloablIframe].print() //sau khi gen iframe thì tự động in\r\n }\r\n } else {\r\n console.error('not found frames printf', window.frames)\r\n }\r\n }, 250)\r\n }\r\n }\r\n}\r\n\r\nexport const getDataBySort = (\r\n data: any[],\r\n sortByField: string,\r\n sortType = 'asc',\r\n sortDataType = 'string'\r\n) => {\r\n if (sortByField && data && data.length > 0) {\r\n let _sortType = sortType\r\n let _sortDataType = sortDataType\r\n if (sortType !== 'asc') {\r\n _sortType = 'desc'\r\n }\r\n if (sortDataType !== 'string') {\r\n _sortDataType = 'number'\r\n }\r\n return data.sort((a: any, b: any) => {\r\n if (a && b) {\r\n let _itemA = a[sortByField]\r\n let _itemB = b[sortByField]\r\n if (_sortDataType == 'number') {\r\n let _compare = _itemA - _itemB\r\n return _compare * (_sortType == 'desc' ? -1 : 1)\r\n } else {\r\n let _compare = 0\r\n if (_itemA > _itemB) {\r\n _compare = _sortType == 'desc' ? -1 : 1\r\n } else if (_itemA < _itemB) {\r\n _compare = _sortType == 'desc' ? 1 : -1\r\n }\r\n return _compare\r\n }\r\n }\r\n return 0\r\n })\r\n }\r\n return data\r\n}\r\n\r\n//merge obj2 vao obj1 deep\r\nexport const mergeRecursive = (obj1: any, obj2: any) => {\r\n for (var p in obj2) {\r\n try {\r\n // Property in destination object set; update its value.\r\n if (obj2[p].constructor == Object) {\r\n obj1[p] = mergeRecursive(obj1[p], obj2[p])\r\n } else {\r\n obj1[p] = obj2[p]\r\n }\r\n } catch (e) {\r\n // Property in destination object not set; create it and set its value.\r\n obj1[p] = obj2[p]\r\n }\r\n }\r\n return obj1\r\n}\r\n\r\nexport const xorCrypt = function (str: string = '', key: number = 7) {\r\n var output = ''\r\n if (!key) {\r\n key = 6\r\n }\r\n for (var i = 0; i < str.length; ++i) {\r\n output += String.fromCharCode(key ^ str.charCodeAt(i))\r\n }\r\n return output\r\n}\r\n","import { mergeObjIfExist } from './Utils'\r\nimport { obj2Json, json2Obj } from './Json'\r\nconst LocalStorageConfig = {\r\n kPrefix: ''\r\n}\r\nconst getKey = (key: string) => {\r\n return LocalStorageConfig.kPrefix + key\r\n}\r\nexport const initLocalStorage = (config: any) => {\r\n mergeObjIfExist(LocalStorageConfig, config)\r\n}\r\nexport const getObj = (key: string, df: object) => {\r\n let _v = getString(getKey(key), '')\r\n if (_v) {\r\n return json2Obj(_v, df)\r\n }\r\n return df\r\n}\r\nexport const saveObj = (key: string, value: object) => {\r\n let _v = obj2Json(value)\r\n if (_v) {\r\n saveString(getKey(key), _v)\r\n }\r\n}\r\nexport const saveString = (key: string, value: string) => {\r\n localStorage.setItem(getKey(key), value)\r\n}\r\nexport const getString = (key: string, df: string) => {\r\n return localStorage.getItem(getKey(key)) || df\r\n}\r\nexport const removeItem = (key: string) => {\r\n return localStorage.removeItem(key)\r\n}\r\nexport const ConfigScreen = {\r\n key: {\r\n prefix: 'config_',\r\n filter: 'filter'\r\n },\r\n getConfig(key: string) {\r\n if (key != null) {\r\n return getObj(ConfigScreen.key.prefix + key, {})\r\n }\r\n },\r\n setConfig(key: string, obj: any) {\r\n if (key != null) {\r\n return saveObj(ConfigScreen.key.prefix + key, obj)\r\n }\r\n },\r\n clearAllConfig() {\r\n if (localStorage != null && Object.keys(localStorage) != null) {\r\n let _arrKeys = Object.keys(localStorage)\r\n for (let e of _arrKeys) {\r\n if (e.startsWith(ConfigScreen.key.prefix) == true) {\r\n delete localStorage[e]\r\n }\r\n }\r\n }\r\n },\r\n getSavedFilter(key: string) {\r\n if (key != null) {\r\n let _config = ConfigScreen.getConfig(key)\r\n if (_config != null && _config[ConfigScreen.key.filter] != null) {\r\n console.log('getSavedFilter:', _config[ConfigScreen.key.filter])\r\n return _config[ConfigScreen.key.filter]\r\n }\r\n }\r\n },\r\n clearSavedFilter(key: string) {\r\n if (key != null) {\r\n let _config = ConfigScreen.getConfig(key)\r\n delete _config[ConfigScreen.key.filter]\r\n ConfigScreen.setConfig(key, _config)\r\n }\r\n },\r\n setSavedFilter(key: string, data: any) {\r\n if (key != null) {\r\n let _config = ConfigScreen.getConfig(key)\r\n _config[ConfigScreen.key.filter] = data\r\n ConfigScreen.setConfig(key, _config)\r\n }\r\n },\r\n clearCustomField({ screenCode, key }: { screenCode: string; key: string }) {\r\n if (key != null) {\r\n let _config = ConfigScreen.getConfig(screenCode)\r\n delete _config[key]\r\n ConfigScreen.setConfig(key, _config)\r\n }\r\n },\r\n setCustomField({\r\n screenCode,\r\n key,\r\n data\r\n }: {\r\n screenCode: string\r\n key: string\r\n data: any\r\n }) {\r\n if (key != null) {\r\n let _config = ConfigScreen.getConfig(screenCode) || {}\r\n if (_config) {\r\n _config[key] = data\r\n }\r\n ConfigScreen.setConfig(screenCode, _config)\r\n }\r\n },\r\n getCustomField({ screenCode, key }: { screenCode: string; key: string }) {\r\n if (screenCode != null) {\r\n let _config = ConfigScreen.getConfig(screenCode)\r\n if (_config != null && _config[key] != null) {\r\n return _config[key]\r\n }\r\n }\r\n }\r\n}\r\n","import * as HLocalStorage from './LocalStorage'\r\n\r\nexport function xoaDauInText(s: string) {\r\n let str = s + '' //phai chac chan la chuoi\r\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a')\r\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e')\r\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i')\r\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o')\r\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u')\r\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y')\r\n str = str.replace(/đ/g, 'd')\r\n str = str.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, 'A')\r\n str = str.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, 'E')\r\n str = str.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, 'I')\r\n str = str.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, 'O')\r\n str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, 'U')\r\n str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, 'Y')\r\n str = str.replace(/Đ/g, 'D')\r\n return str\r\n}\r\n\r\nexport function removeSpace(s: string) {\r\n if (s != null) {\r\n s = s + '' //phai chac chan la chuoi\r\n return s.replace(/\\s/g, '')\r\n }\r\n return ''\r\n}\r\nexport function removeSpecialChars(s: string) {\r\n if (s != null) {\r\n s = s + '' //phai chac chan la chuoi\r\n s = s.replace(/[;-=!@^&\\/\\\\#,+()$~%.'\":*?<>{}]/g, '')\r\n return s\r\n }\r\n return ''\r\n}\r\nexport function validSearchTextTV(sourceText: string, searchText: string) {\r\n if (sourceText && searchText != null) {\r\n let _source = xoaDauInText(sourceText).toLocaleLowerCase()\r\n let _search = xoaDauInText(searchText).toLocaleLowerCase()\r\n if (_source.indexOf(_search) > -1) {\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport function validSearchText(\r\n sourceText: string,\r\n searchText: string,\r\n configSearch?: any\r\n) {\r\n if (configSearch && configSearch.noSymbol) {\r\n return validSearchTextTV(sourceText, searchText)\r\n }\r\n if (sourceText && searchText != null) {\r\n let _source = sourceText.toLocaleLowerCase()\r\n let _search = searchText.toLocaleLowerCase()\r\n if (_source.indexOf(_search) > -1) {\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport function test() {\r\n console.warn('')\r\n}\r\n\r\nconst ConfigText = {\r\n Data: {},\r\n DataByLangCode: {},\r\n defaultLang: 'vi',\r\n currentLang: 'vi',\r\n kLastLangCode: '_ckLastLangCode'\r\n}\r\n\r\nexport function initText(configText: {\r\n defaultLang?: string\r\n currentLang?: string\r\n DataByLangCode: any\r\n}) {\r\n if (configText.defaultLang) ConfigText.defaultLang = configText.defaultLang\r\n if (configText.currentLang) {\r\n ConfigText.currentLang = configText.currentLang\r\n } else {\r\n ConfigText.currentLang = getLastCurrentLangCode()\r\n }\r\n if (configText.DataByLangCode) {\r\n for (let k of Object.keys(configText.DataByLangCode)) {\r\n ConfigText.DataByLangCode[k] = configText.DataByLangCode[k]\r\n }\r\n }\r\n if (ConfigText.DataByLangCode[ConfigText.currentLang]) {\r\n ConfigText.Data = ConfigText.DataByLangCode[ConfigText.currentLang]\r\n }\r\n}\r\n\r\nexport function changeLang(langcode: string) {\r\n if (Object.keys(ConfigText.DataByLangCode).indexOf(langcode) > -1) {\r\n ConfigText.currentLang = langcode\r\n ConfigText.Data = ConfigText.DataByLangCode[ConfigText.currentLang]\r\n HLocalStorage.saveString(ConfigText.kLastLangCode, langcode)\r\n }\r\n}\r\n\r\nexport function addLangByCode(langcode: string, dataLang: any) {\r\n ConfigText.DataByLangCode[langcode] = dataLang || {}\r\n}\r\n\r\nexport function getLastCurrentLangCode() {\r\n return HLocalStorage.getString(\r\n ConfigText.kLastLangCode,\r\n ConfigText.defaultLang\r\n )\r\n}\r\n\r\nexport function get(key: string) {\r\n if (key && ConfigText.Data[key]) {\r\n return ConfigText.Data[key]\r\n } else {\r\n console.warn('Text key not exist:', key)\r\n }\r\n return ''\r\n}\r\n\r\nexport function getMulti(arrayKey: string[]) {\r\n let _s = ''\r\n if (arrayKey) {\r\n for (let i = 0; i < arrayKey.length; i++) {\r\n let _k = arrayKey[i]\r\n let _ss = get(_k)\r\n if (_ss) {\r\n if (i > 0) {\r\n _s += ' '\r\n }\r\n _s += _ss\r\n }\r\n }\r\n }\r\n return _s\r\n}\r\n\r\n//su dung trong globalsetting\r\nexport function getTextDisplaySettings() {\r\n let _list = []\r\n let _keys = Object.keys(ConfigText.Data)\r\n for (let i in _keys) {\r\n _list.push({\r\n Key: _keys[i],\r\n Value: ConfigText.Data[_keys[i]]\r\n })\r\n }\r\n return _list\r\n}\r\n\r\nexport function updateFromList(list: any) {\r\n for (let i in list) {\r\n let _item = list[i]\r\n ConfigText.Data[_item.Key] = _item.Value\r\n }\r\n}\r\n\r\n//for search\r\n\r\nexport function buildTextForSearch(s: string) {\r\n let _s = removeSpace(s)\r\n _s = removeSpecialChars(_s)\r\n _s = xoaDauInText(_s)\r\n _s = _s.toLowerCase()\r\n return _s\r\n}\r\n\r\nexport function compareTextForSearch(\r\n text: string,\r\n textSearch: string,\r\n opts: { searchKoDau?: boolean } = {}\r\n) {\r\n if (text && textSearch) {\r\n if (opts.searchKoDau === true) {\r\n let _text = buildTextForSearch(text)\r\n let _textSearch = buildTextForSearch(textSearch)\r\n if (new RegExp(_textSearch, 'gi').test(_text) === true) {\r\n return true\r\n }\r\n }\r\n if (new RegExp(textSearch, 'gi').test(text) === true) {\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n","import { isObject, isString } from 'src/helpers/Is'\r\nimport { validSearchText } from 'src/helpers/Text'\r\n\r\ninterface IConfigSearch {\r\n instant?: boolean\r\n noSymbol?: boolean\r\n}\r\n\r\nclass ConfigSearch implements IConfigSearch {\r\n instant: boolean = false\r\n noSymbol: boolean = false\r\n constructor(config: any = {}) {\r\n this.instant = config.instant || false\r\n this.noSymbol = config.noSymbol || false\r\n }\r\n getFiltered(\r\n arr: any[],\r\n textSearch: string,\r\n opts: {\r\n onlyFields?: string[]\r\n excludeFields?: string[]\r\n configSearch?: any\r\n } = {}\r\n ) {\r\n if (arr && arr.length > 0) {\r\n return arr.filter((v: any) => {\r\n if (isObject(v)) {\r\n let _keys = Object.keys(v)\r\n let _result = false\r\n for (let k of _keys) {\r\n if (opts) {\r\n if (opts.onlyFields && opts.onlyFields.indexOf(k) == -1) {\r\n continue\r\n }\r\n if (opts.excludeFields && opts.excludeFields.indexOf(k) > -1) {\r\n continue\r\n }\r\n }\r\n\r\n if (isString(v[k])) {\r\n _result = validSearchText(\r\n v[k],\r\n textSearch,\r\n opts.configSearch || this\r\n )\r\n }\r\n if (_result === true) {\r\n return true\r\n }\r\n }\r\n } else if (isString(v)) {\r\n return validSearchText(v, textSearch, opts.configSearch || this)\r\n }\r\n return false\r\n })\r\n }\r\n return []\r\n }\r\n static test() {\r\n console.warn(ConfigSearch)\r\n }\r\n}\r\n\r\nexport default ConfigSearch\r\n","interface IOnePage {}\r\n\r\ninterface IOnePageOptions {}\r\n\r\nclass OnePage implements IOnePage {\r\n constructor(opts: IOnePageOptions) {\r\n if (opts) {\r\n }\r\n }\r\n getTableConfigBootstrapv1() {\r\n return {}\r\n }\r\n}\r\n\r\nexport default OnePage\r\n","export function updateListInList(\r\n options: any,\r\n listInList: string[],\r\n listData?: any[],\r\n listFieldTextByFieldOptionsInList?: any\r\n) {\r\n if (listInList && listInList.length > 0 && options && listData) {\r\n let _listOnly = {}\r\n for (let k of listInList) {\r\n let _optionKey = k + '_InList'\r\n options[_optionKey] = []\r\n _listOnly[k] = []\r\n }\r\n if (listData != null) {\r\n for (let i = 0; i < listData.length; i++) {\r\n let _item = listData[i]\r\n for (let j = 0; j < listInList.length; j++) {\r\n let _fieldName = listInList[j]\r\n let _optionKey = _fieldName + '_InList'\r\n let _value = _item[_fieldName]\r\n if (_listOnly[_fieldName].indexOf(_value) == -1) {\r\n let _text = _value\r\n if (\r\n listFieldTextByFieldOptionsInList &&\r\n listFieldTextByFieldOptionsInList.hasOwnProperty(_fieldName)\r\n ) {\r\n _text = _item[listFieldTextByFieldOptionsInList[_fieldName]] || ''\r\n }\r\n if (options[_optionKey]) {\r\n options[_optionKey].push({\r\n label: _text,\r\n Text: _text,\r\n value: _value,\r\n Value: _value\r\n })\r\n }\r\n _listOnly[_fieldName].push(_value)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return options\r\n}\r\n\r\nexport const getTextDisplayOfValueFromOptions = (\r\n sourceList: any,\r\n value: any\r\n) => {\r\n let _text = ''\r\n if (sourceList != null) {\r\n for (let i = 0; i < sourceList.length; i++) {\r\n if (sourceList[i].Value == value) {\r\n _text = sourceList[i].Text_Display || sourceList[i].Text\r\n break\r\n }\r\n }\r\n }\r\n return _text\r\n}\r\n\r\nexport const getOptionOfValueFromOptions = (sourceList: any, value: any) => {\r\n if (sourceList != null) {\r\n for (let i = 0; i < sourceList.length; i++) {\r\n if (sourceList[i].Value == value) {\r\n return sourceList[i]\r\n }\r\n }\r\n }\r\n return null\r\n}\r\n\r\nexport const getArrayOptionSelectedFromOptions = (\r\n valuesSelected: any = '', //valuesSelected co the la mang hoac chuoi value cach nhau dau phay\r\n sourceData: any = [],\r\n { arraySplitChar = ',' } = {}\r\n) => {\r\n let _arrSelected: any[] = []\r\n if (Array.isArray(valuesSelected)) {\r\n _arrSelected = valuesSelected\r\n } else {\r\n _arrSelected = valuesSelected.split(arraySplitChar || ',')\r\n }\r\n return sourceData.filter((v: any) => {\r\n return _arrSelected.indexOf(v.Value) > -1\r\n })\r\n}\r\n","import { json2Obj } from '../helpers/Json'\r\nimport { get, mergeObjIfExist } from '../helpers/Utils'\r\nimport { updateListInList } from '../helpers/Options'\r\nimport HConstant from '../helpers/Constants'\r\ninterface IOneScreenConfig {}\r\n\r\ninterface IOneScreenConfigOpts {\r\n defaultScreenConfig?: any\r\n}\r\n\r\ninterface IOneScreenConfigTableOptions {\r\n sizePerPage?: number\r\n}\r\ninterface IOneScreenConfigTableColsActions {\r\n show?: boolean\r\n listActions?: any[]\r\n}\r\ninterface IOneScreenConfigTable {\r\n hasExpand?: boolean\r\n showDetails?: boolean\r\n showDetailsMulti?: boolean\r\n hasPagingRemote?: boolean\r\n tableProps?: object\r\n optionsTable?: IOneScreenConfigTableOptions\r\n colsActions?: IOneScreenConfigTableColsActions\r\n}\r\ninterface IOneScreenConfigHeader {\r\n title?: string\r\n titleIcon?: string\r\n showProjectMenu?: boolean\r\n showProjectHeader?: boolean\r\n}\r\ninterface IOneScreenConfigPage {\r\n title?: string\r\n}\r\ninterface IOneScreenConfigDetail {\r\n multi?: boolean\r\n}\r\ninterface IOneScreenConfigFilter {\r\n show?: boolean\r\n require4ShowData?: boolean //bat buoc phai search thi moi show data\r\n listInList?: string[] //danh sach field se tao options inlist\r\n data?: any[] //danh sach content filter\r\n listFieldTextByFieldOptionsInList?: any //dung cho viet add options listInList\r\n}\r\n\r\nconst Key = {\r\n pathScreenConfig: 'Configs.ScreenConfig'\r\n}\r\nclass OneScreenConfig implements IOneScreenConfig {\r\n _table: IOneScreenConfigTable = {}\r\n _header: IOneScreenConfigHeader = {}\r\n _page: IOneScreenConfigPage = {}\r\n _detail: IOneScreenConfigDetail = {}\r\n _filter: IOneScreenConfigFilter = {\r\n show: true,\r\n require4ShowData: false,\r\n listInList: [],\r\n data: []\r\n }\r\n _objFilterSearch: any = null\r\n _objScreenConfig: object\r\n _options: any\r\n constructor(opts?: IOneScreenConfigOpts) {\r\n this._objScreenConfig = {}\r\n this.initDefault(opts)\r\n }\r\n initDefault(opts?: IOneScreenConfigOpts) {\r\n this._table = {\r\n optionsTable: {\r\n sizePerPage: 20\r\n }\r\n }\r\n this._header = {}\r\n if (opts && opts.defaultScreenConfig) {\r\n this.parseFromScreenConfig(opts.defaultScreenConfig)\r\n }\r\n }\r\n parseFromOptions(options: any) {\r\n this._objScreenConfig = json2Obj(get(options, Key.pathScreenConfig), {})\r\n this._options = options\r\n this.parseFromScreenConfig(this._objScreenConfig)\r\n }\r\n parseFromScreenConfig(screenConfig: any) {\r\n mergeObjIfExist(this._page, get(screenConfig, HConstant.Key.Page))\r\n mergeObjIfExist(this._table, get(screenConfig, HConstant.Key.Table))\r\n mergeObjIfExist(this._header, get(screenConfig, HConstant.Key.Header))\r\n mergeObjIfExist(this._detail, get(screenConfig, HConstant.Key.Detail))\r\n mergeObjIfExist(this._filter, get(screenConfig, HConstant.Key.Filter))\r\n }\r\n parseFromListAndExtraData(list?: any[], extraData?: any) {\r\n console.warn('parseFromExtraData', list, extraData)\r\n this._filter.data = []\r\n this._filter.listInList = []\r\n if (this._objFilterSearch) {\r\n this._filter.data.push(this._objFilterSearch)\r\n }\r\n if (extraData && extraData.Columns) {\r\n let _fields = Object.keys(extraData.Columns)\r\n if (_fields && _fields.length > 0) {\r\n for (let k of _fields) {\r\n let _col = extraData.Columns[k]\r\n if (_col) {\r\n if (_col.Filter && _col.Filter.type) {\r\n //add listInList\r\n if (\r\n _col.Filter.optionKey &&\r\n _col.Filter.optionKey.indexOf('_InList') > -1\r\n ) {\r\n this._filter.listInList.push(\r\n _col.Filter.optionKey.replace('_InList', '')\r\n )\r\n } else if (\r\n _col.Filter.optionKey &&\r\n (_col.Filter.optionKey.toLowerCase() == 'inlist' ||\r\n _col.Filter.optionKey.toLowerCase().endsWith('_inlist') ==\r\n true)\r\n ) {\r\n _col.Filter.optionKey = `${k}_InList`\r\n this._filter.listInList.push(k)\r\n }\r\n\r\n let _moreFilter = {}\r\n if (_col.Filter.more) {\r\n _moreFilter = json2Obj(_col.Filter.more, {})\r\n }\r\n let _objFilter = {\r\n type: _col.Filter.type,\r\n title: _col.Filter.title || _col.Header || k,\r\n optionKey: _col.Filter.optionKey,\r\n fieldName: k,\r\n fieldQuery: null,\r\n more: _moreFilter\r\n }\r\n this._filter.data.push(_objFilter)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n updateListInList(this._options, this._filter.listInList, list)\r\n }\r\n static debug() {\r\n console.warn(OneScreenConfig)\r\n }\r\n}\r\n\r\nexport default OneScreenConfig\r\n","interface IConfigFilter {}\r\n\r\nclass ConfigFilter implements IConfigFilter {\r\n type: string = ''\r\n typeBSTv1: string = ''\r\n constructor(type: string, opts?: any) {\r\n this.type = type\r\n if (opts) {\r\n if (opts.typeBSTv1) {\r\n this.typeBSTv1 = opts.typeBSTv1\r\n }\r\n }\r\n }\r\n getBootstrapTableV1(value: any) {\r\n return { type: this.typeBSTv1, value: value }\r\n }\r\n}\r\n\r\nexport default ConfigFilter\r\n","import ConfigFilter from '../configs/ConfigFilter'\r\nimport { isArray, isRegex, isString } from './Is'\r\nconst Filter = {\r\n _test() {\r\n console.warn(this)\r\n },\r\n Types: {\r\n select: new ConfigFilter('select', {\r\n typeBSTv1: 'SelectFilter'\r\n }),\r\n text: new ConfigFilter('text', {\r\n typeBSTv1: 'TextFilter'\r\n }),\r\n select_multi: new ConfigFilter('select_multi', {\r\n typeBSTv1: 'ArrayFilter'\r\n })\r\n },\r\n FilterBootstrapV1: {\r\n SelectFilter: {\r\n compare: 'eq'\r\n },\r\n RegexFilter: {\r\n compare: 'rg'\r\n },\r\n ArrayFilter: {\r\n compare: 'of'\r\n },\r\n CustomFilter: {\r\n compare: 'custom'\r\n },\r\n BetweenFilter: {\r\n compare: 'bw'\r\n }\r\n },\r\n Compare: {\r\n eq: {\r\n key: 'eq',\r\n fnCompare: (valueFilter: any, valueItem: any) => {\r\n if (valueFilter === '') {\r\n //filter all\r\n return true\r\n }\r\n return valueFilter === valueItem\r\n }\r\n },\r\n of: {\r\n key: 'of',\r\n fnCompare: (valueFilter: any, valueItem: any) => {\r\n if (isArray(valueFilter)) {\r\n let _valueItemString = String(valueItem)\r\n if (valueFilter.indexOf(_valueItemString) > -1) {\r\n return true\r\n } else {\r\n return false\r\n }\r\n }\r\n return false\r\n }\r\n },\r\n rg: {\r\n key: 'rg',\r\n fnCompare: (valueFilter: any, valueItem: any) => {\r\n if (isRegex(valueFilter)) {\r\n return valueFilter.test(valueItem)\r\n } else if (isString(valueFilter) && valueFilter.length > 0) {\r\n let _newRegex = new RegExp(valueFilter, 'g')\r\n return _newRegex.test(valueItem)\r\n }\r\n return false\r\n }\r\n },\r\n bw: {\r\n key: 'bw',\r\n fnCompare: (valueFilter: any, valueItem: any) => {\r\n if (isArray(valueFilter) && valueFilter.length > 1) {\r\n let _from = valueFilter[0]\r\n let _to = valueFilter[1]\r\n return (\r\n (valueItem >= _from || _from == null) &&\r\n (valueItem <= _to || _to == null)\r\n )\r\n }\r\n return false\r\n }\r\n }\r\n },\r\n compareTrue(\r\n valueFilter: any,\r\n valueItem: any,\r\n typeCompare: string,\r\n opts?: any\r\n ) {\r\n if (Filter.Compare[typeCompare] && Filter.Compare[typeCompare].fnCompare) {\r\n return Filter.Compare[typeCompare].fnCompare(valueFilter, valueItem, opts)\r\n }\r\n if (opts && opts.returnTrueWhenNoCompare === true) {\r\n return true\r\n }\r\n return false\r\n },\r\n compareTrueForBootstrapV1(\r\n type?: string,\r\n value?: any,\r\n item?: any,\r\n fieldName?: any,\r\n oneFilter?: any\r\n ) {\r\n if (type && Filter.FilterBootstrapV1[type]) {\r\n let _compare = Filter.FilterBootstrapV1[type].compare\r\n let _targetValue = item[fieldName]\r\n if (_compare == 'custom' && typeof value == 'object' && value.callback) {\r\n return value.callback(_targetValue)\r\n }\r\n return Filter.compareTrue(value, _targetValue, _compare)\r\n }\r\n if (oneFilter) {\r\n }\r\n }\r\n}\r\n\r\nexport default Filter\r\n","import { mergeObjIfExist } from '../helpers/Utils'\r\nimport {\r\n isObject,\r\n isArray,\r\n isFunction,\r\n isString,\r\n isBoolean\r\n} from '../helpers/Is'\r\nimport HFilter from '../helpers/Filter'\r\ninterface IOneFilter {\r\n isFilterHide?: boolean\r\n isServer?: boolean\r\n isSharedDetail?: boolean\r\n type?: string\r\n more?: object\r\n value?: any\r\n valueFilterServer?: any\r\n fieldName?: string\r\n}\r\n\r\ninterface IMoreOfFilter {\r\n isServer?: boolean\r\n fQuery?: string\r\n fieldQuery?: string //khong dung nua, chuyen sang fQuery\r\n fQueryStart?: string //Query dung cho datefromto\r\n fQueryEnd?: string //Query dung cho datefromto\r\n queryType?: string //Chuyen doi mang sang string\r\n splitChar?: string //Char convert array to string\r\n}\r\n\r\nclass OneFilter implements IOneFilter {\r\n isFilterHide?: boolean = false\r\n isServer?: boolean = false\r\n isSharedDetail?: boolean = false\r\n type?: string = 'SelectFilter'\r\n more?: IMoreOfFilter = {}\r\n value?: any = null\r\n valueFilterServer?: any = null\r\n fieldName?: string = ''\r\n constructor(fieldName: string, objFilter: any) {\r\n this.fieldName = fieldName\r\n if (isObject(objFilter)) {\r\n mergeObjIfExist(this, objFilter)\r\n } else if (isString(objFilter) || isBoolean(objFilter)) {\r\n this.type = 'SelectFilter'\r\n this.value = objFilter\r\n }\r\n }\r\n\r\n getValueFilterServer() {\r\n if (this.valueFilterServer != null) {\r\n return this.valueFilterServer\r\n } else if (this.value != null) {\r\n return this.value\r\n }\r\n }\r\n getDataByThisFilter(list?: any[]) {\r\n console.warn('getDataByThisFilter:', list)\r\n if (list && list.length > 0) {\r\n return list.filter((v) => {\r\n // console.warn('filter:', v, this.type)\r\n return HFilter.compareTrueForBootstrapV1(\r\n this.type,\r\n this.value,\r\n v,\r\n this.fieldName,\r\n this\r\n )\r\n })\r\n }\r\n return []\r\n }\r\n getQueryFilterClient() {\r\n if (this.fieldName && this.value != null) {\r\n let _v = this.value\r\n if (isObject(_v) && !isArray(_v)) {\r\n //bo sung kiem tra khac array de chac an la object\r\n _v = { ...this.value }\r\n for (let k of this.value) {\r\n if (isFunction(this.value[k])) {\r\n delete _v[k]\r\n }\r\n }\r\n }\r\n return {\r\n [this.fieldName]: _v\r\n }\r\n }\r\n return null\r\n }\r\n getQueryFilter() {\r\n let _query = {}\r\n if (this.isServer === true) {\r\n let _valueServer = this.getValueFilterServer()\r\n let _fQuery = this.more?.fQuery || this.more?.fieldQuery || this.fieldName\r\n if (_fQuery && _valueServer != null) {\r\n _query[_fQuery] = _valueServer\r\n if (this.more?.queryType === 'string' && isArray(_valueServer)) {\r\n _query[_fQuery] = _valueServer.join(this.more?.splitChar || ',')\r\n }\r\n }\r\n if (isObject(_valueServer) && _valueServer.start != null) {\r\n let _fStart = this.more?.fQueryStart || 'FromDate'\r\n _query[_fStart] = _valueServer.start\r\n }\r\n if (isObject(_valueServer) && _valueServer.end != null) {\r\n let _fEnd = this.more?.fQueryEnd || 'ToDate'\r\n _query[_fEnd] = _valueServer.end\r\n }\r\n\r\n //delete query trùng trong cùng 1 filter\r\n if (this.more?.fQuery || this.more?.fQueryStart || this.more?.fQueryEnd) {\r\n if (\r\n this.fieldName &&\r\n this.fieldName != this.more.fQuery &&\r\n _query[this.fieldName]\r\n ) {\r\n delete _query[this.fieldName]\r\n }\r\n }\r\n }\r\n\r\n return _query\r\n }\r\n static debug() {\r\n console.warn(OneFilter)\r\n }\r\n}\r\n\r\nexport default OneFilter\r\n","import { isObject } from '../helpers/Is'\r\nimport OneFilter from './OneFilter'\r\ninterface IOneFilters {\r\n listFilter?: OneFilter[]\r\n needRequestServerAfterFilter?: boolean\r\n needRequestLast?: boolean //dung de kiem tra truoc do co request server hay khong, neu co thi lan nay du co isServer hay khong cung can request server\r\n afterChangeFilter: () => void\r\n afterChangeSort: () => void\r\n}\r\n\r\nclass OneFilters implements IOneFilters {\r\n listFilter?: OneFilter[]\r\n listSort?: any[]\r\n needRequestServerAfterFilter?: boolean = false\r\n needRequestLast?: boolean = false\r\n afterChangeFilter: () => void\r\n afterChangeSort: () => void\r\n constructor() {\r\n this.afterChangeFilter = () => {}\r\n this.afterChangeSort = () => {}\r\n }\r\n clearByFieldName(fieldName: string) {\r\n if (this.listFilter && this.listFilter.length > 0) {\r\n this.listFilter = this.listFilter.filter((v) => {\r\n if (v.fieldName === fieldName) {\r\n return false\r\n }\r\n return true\r\n })\r\n }\r\n }\r\n updateCurrentSort(sortField?: string, order?: string) {\r\n this.listSort = [\r\n {\r\n Field: sortField,\r\n Dir: order\r\n }\r\n ]\r\n this.afterChangeSort()\r\n }\r\n updateCurrentFiters(currentFilters?: any) {\r\n this.listFilter = []\r\n if (currentFilters && isObject(currentFilters)) {\r\n this.needRequestServerAfterFilter = false\r\n for (let k of Object.keys(currentFilters)) {\r\n let _oneFilter = new OneFilter(k, currentFilters[k])\r\n if (_oneFilter.isServer === true) {\r\n this.needRequestServerAfterFilter = true\r\n }\r\n this.listFilter.push(_oneFilter)\r\n }\r\n\r\n //check last de quyet dinh lan nay co can request server hay khong\r\n if (this.needRequestServerAfterFilter === true) {\r\n this.needRequestLast = true\r\n } else {\r\n if (this.needRequestLast === true) {\r\n this.needRequestServerAfterFilter = true\r\n this.needRequestLast = false\r\n }\r\n }\r\n }\r\n this.afterChangeFilter()\r\n }\r\n getQueryFilter() {\r\n let _query = {}\r\n if (this.listFilter) {\r\n for (let i = 0; i < this.listFilter.length; i++) {\r\n let _oneFilter = this.listFilter[i]\r\n _query = Object.assign(_query, _oneFilter.getQueryFilter())\r\n }\r\n }\r\n return _query\r\n }\r\n getQueryFilterClients() {\r\n let _query = {}\r\n if (this.listFilter) {\r\n for (let i = 0; i < this.listFilter.length; i++) {\r\n let _oneFilter = this.listFilter[i]\r\n _query = Object.assign(_query, _oneFilter.getQueryFilterClient())\r\n }\r\n }\r\n return _query\r\n }\r\n getQuerySort() {\r\n let _query = {}\r\n if (this.listSort && this.listSort.length > 0) {\r\n _query['SortQuery'] = this.listSort\r\n }\r\n return _query\r\n }\r\n getDataWithCurrentFilter(listData?: any[]) {\r\n if (listData && this.listFilter) {\r\n let _listDataFilterd = null\r\n if (this.listFilter.length > 0) {\r\n for (let i = 0; i < this.listFilter.length; i++) {\r\n let _oneFilter = this.listFilter[i]\r\n if (_oneFilter.isServer !== true) {\r\n //chi filter client\r\n _listDataFilterd = _oneFilter.getDataByThisFilter(\r\n _listDataFilterd || listData\r\n )\r\n }\r\n }\r\n }\r\n if (_listDataFilterd) {\r\n return _listDataFilterd\r\n }\r\n return listData\r\n }\r\n return listData\r\n }\r\n static debug() {\r\n console.warn(OneFilters)\r\n }\r\n}\r\n\r\nexport default OneFilters\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyButtonHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyButtonHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyButtonHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyButtonHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesWrap(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyButtonHelpers.TypesWrap, key, fnUI)\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n },\r\n TypesWrap: {\r\n _empty: MyComponentTypes.TypesWrap._empty\r\n }\r\n}\r\n\r\nexport default MyButtonHelpers\r\n","import * as React from 'react'\r\nimport MyButtonHelpers from 'src/components/MyButton/Helpers'\r\nimport MyIcon from 'src/components/MyIcon'\r\nimport { isObject, isString, isJsonString, isHexColor } from 'src/helpers/Is'\r\nimport { json2Obj } from 'src/helpers/Json'\r\nimport HConstant from 'src/helpers/Constants'\r\nimport { logNoAnyType } from 'src/helpers/Log'\r\ninterface IOneButtonConfig {\r\n APIName?: string\r\n Code?: string\r\n Color?: string\r\n Color_BG?: string\r\n ConfirmMsg?: string\r\n Form?: any\r\n Icon?: string\r\n MethodType?: string\r\n More?: any\r\n Name?: string\r\n NeedReload?: string\r\n NeedReloadList?: string\r\n OpenMode?: string\r\n RequestData?: any\r\n Type?: string\r\n Url?: string\r\n}\r\n\r\ninterface IOneButton {\r\n _configButton: any\r\n}\r\n\r\ninterface IOneButtonOpts {\r\n configButton: any\r\n onePage?: any\r\n}\r\n\r\ninterface IOnePage {\r\n getApiController: () => string | any\r\n getQueryShared: () => any\r\n getSourceList: () => any\r\n}\r\n\r\nclass OneButton implements IOneButton {\r\n _configButton: IOneButtonConfig = {}\r\n _moreObj: any = {}\r\n _type: string = ''\r\n _isLoading: boolean = false\r\n _onePage?: IOnePage\r\n _fromComponent: any\r\n _inDropdown?: boolean = false\r\n constructor(opts: IOneButtonOpts) {\r\n if (opts.configButton) {\r\n this._configButton = opts.configButton\r\n this.parseMore(this._configButton)\r\n }\r\n if (opts.onePage) {\r\n this._onePage = opts.onePage\r\n }\r\n }\r\n setOnePage(onePage: any) {\r\n this._onePage = onePage\r\n }\r\n setInDropdown(v: boolean) {\r\n this._inDropdown = v\r\n }\r\n setFromComponent(component: any) {\r\n if (component) {\r\n this._fromComponent = component\r\n }\r\n }\r\n changeIsLoading(isLoading: any) {\r\n this._isLoading = isLoading\r\n this.forceUpdate()\r\n }\r\n parseMore(configButton: any) {\r\n if (configButton && configButton.More) {\r\n if (isObject(configButton.More)) {\r\n this._moreObj = {}\r\n let _keys = Object.keys(configButton.More)\r\n if (_keys && _keys.length > 0) {\r\n for (let k of _keys) {\r\n this._moreObj[k] = configButton.More[k]\r\n if (isJsonString(this._moreObj[k])) {\r\n this._moreObj[k] = json2Obj(this._moreObj[k], {})\r\n }\r\n }\r\n }\r\n } else if (isString(configButton.More)) {\r\n this._moreObj = json2Obj(configButton.More, {})\r\n }\r\n }\r\n }\r\n getTitleDisplay() {\r\n let _configButton = this._configButton || {}\r\n let _title = _configButton.Name\r\n let _icon: any = _configButton.Icon\r\n if (this._isLoading === true) {\r\n _icon = \r\n } else if (_icon) {\r\n _icon = \r\n }\r\n return (\r\n \r\n {_icon}\r\n {_title}\r\n \r\n )\r\n }\r\n getLinkTarget() {\r\n let _configButton = this._configButton || {}\r\n if (_configButton === 'NewWindow') {\r\n return '_blank'\r\n } else {\r\n return '_self'\r\n }\r\n }\r\n getMorePropsButton() {\r\n let _configButton = this._configButton || {}\r\n let _type = this.getType()\r\n let _color =\r\n _configButton.Color || (_type === 'api' ? 'success' : 'primary')\r\n let _outline = false\r\n let _moreProps: any = {\r\n color: _color,\r\n outline: _outline,\r\n style: {}\r\n }\r\n if (HConstant.Array.colors.indexOf(_color) > -1) {\r\n _moreProps.color = _color\r\n } else {\r\n _moreProps.color = 'link'\r\n if (isHexColor(_color)) {\r\n _moreProps.style['color'] = _color\r\n }\r\n if (_configButton.Color_BG && isHexColor(_configButton.Color_BG)) {\r\n _moreProps.style['background'] = _configButton.Color_BG\r\n }\r\n }\r\n if (this._moreObj) {\r\n if (this._moreObj.color != null) {\r\n _moreProps.color = this._moreObj.color\r\n }\r\n if (this._moreObj.className != null) {\r\n _moreProps.className = this._moreObj.className\r\n }\r\n if (this._inDropdown === true) {\r\n if (_moreProps.className) {\r\n _moreProps.className += ` dropdown-item`\r\n } else {\r\n _moreProps.className = `dropdown-item`\r\n }\r\n }\r\n if (this._moreObj.outline != null) {\r\n _moreProps.outline = this._moreObj.outline\r\n }\r\n if (this._moreObj.title) {\r\n _moreProps['title'] = this._moreObj.title\r\n }\r\n if (this._moreObj.style != null) {\r\n _moreProps.style = Object.assign(_moreProps.style, this._moreObj.style)\r\n }\r\n if (this._moreObj.disabled === true) {\r\n _moreProps['disabled'] = true\r\n }\r\n }\r\n if (this._isLoading) {\r\n _moreProps['disabled'] = true\r\n }\r\n return _moreProps\r\n }\r\n getType() {\r\n let _configButton = this._configButton || {}\r\n let _type = _configButton.Type\r\n if (_type == null) {\r\n //truong hop mac dinh null\r\n if (_configButton.Form) {\r\n _type = 'form'\r\n } else if (_configButton.APIName) {\r\n _type = 'api'\r\n } else if (_configButton.Url) {\r\n _type = 'link'\r\n } else {\r\n _type = ''\r\n }\r\n }\r\n if (isString(_type)) {\r\n _type = _type.toLocaleLowerCase()\r\n }\r\n this._type = _type\r\n // console.warn('getType:', this._type, _configButton)\r\n return this._type\r\n }\r\n getUrlLink() {\r\n return this._configButton.Url\r\n }\r\n getApiRequest() {\r\n let _configButton = this._configButton || {}\r\n let _request = {\r\n method: 'POST'\r\n }\r\n if (_configButton.MethodType) {\r\n _request.method = _configButton.MethodType\r\n }\r\n let _apiName = _configButton.APIName\r\n if (_apiName) {\r\n if (_apiName.indexOf('/') > -1) {\r\n _request['url'] = `/api/v1/${_apiName}`\r\n } else {\r\n if (this._onePage) {\r\n let _apiController = this._onePage.getApiController()\r\n _request['path'] = _apiController\r\n _request['name'] = _apiName\r\n }\r\n }\r\n }\r\n return _request\r\n }\r\n getApiQuery(customQuery?: any, df: any = {}) {\r\n let _query = df || {}\r\n if (this._onePage) {\r\n _query = { ..._query, ...this._onePage.getQueryShared() }\r\n }\r\n if (\r\n this._configButton.RequestData &&\r\n isObject(this._configButton.RequestData)\r\n ) {\r\n _query = { ..._query, ...this._configButton.RequestData }\r\n }\r\n if (customQuery) {\r\n _query = { ..._query, ...customQuery }\r\n }\r\n return _query\r\n }\r\n getMyButtonFn() {\r\n let _type = this.getType()\r\n // console.warn('getMyButtonFn:', _type)\r\n if (MyButtonHelpers.Types[_type]) {\r\n return MyButtonHelpers.Types[_type]\r\n } else {\r\n logNoAnyType(`MyButton:${_type}`, this)\r\n }\r\n return MyButtonHelpers.Types._empty\r\n }\r\n getMyButton(props: any) {\r\n let _myButtonFn = this.getMyButtonFn()\r\n return _myButtonFn({ oneButton: this, ...props })\r\n }\r\n renderMyButton(props: any) {\r\n const Component = this.getMyButtonFn()\r\n return \r\n }\r\n forceUpdate() {\r\n if (this._fromComponent && this._fromComponent.forceUpdate) {\r\n this._fromComponent.forceUpdate()\r\n }\r\n }\r\n getSourceList() {\r\n return this._onePage?.getSourceList()\r\n }\r\n\r\n static createListButtonList(list: OneButton[], fromOnePage?: any) {\r\n let _arr = []\r\n if (list) {\r\n for (let i = 0; i < list.length; i++) {\r\n let _oneButton = new OneButton({\r\n configButton: list[i],\r\n onePage: fromOnePage\r\n })\r\n _arr.push(_oneButton)\r\n }\r\n }\r\n return _arr\r\n }\r\n static debug() {\r\n console.warn(OneButton)\r\n }\r\n}\r\n\r\nexport default OneButton\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyTableFilterControlHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(\r\n MyTableFilterControlHelpers.Types,\r\n key,\r\n fnUI\r\n )\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyTableFilterControlHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyTableFilterControlHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesWrap(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(\r\n MyTableFilterControlHelpers.TypesWrap,\r\n key,\r\n fnUI\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n },\r\n TypesWrap: {\r\n _empty: MyComponentTypes.TypesWrap._empty\r\n }\r\n}\r\n\r\nexport default MyTableFilterControlHelpers\r\n","import * as React from 'react'\r\nimport { logNoAnyType } from 'src/helpers/Log'\r\nconst OneHelpers = {\r\n getUIFn(type: any, MyHelpers: any, nameOne: string) {\r\n if (type && MyHelpers && MyHelpers.Types) {\r\n if (MyHelpers.Types[type]) {\r\n return MyHelpers.Types[type]\r\n } else {\r\n logNoAnyType(`${nameOne}:${type}`, this)\r\n }\r\n }\r\n return MyHelpers.Types._empty\r\n },\r\n getUIWrapFn(type: any, MyHelpers: any, nameOne: string) {\r\n if (type && MyHelpers && MyHelpers.TypesWrap) {\r\n if (MyHelpers.TypesWrap[type]) {\r\n return MyHelpers.TypesWrap[type]\r\n } else {\r\n logNoAnyType(`${nameOne}:${type}`, this)\r\n }\r\n }\r\n if (MyHelpers.TypesWrap._default) {\r\n return MyHelpers.TypesWrap._default\r\n }\r\n },\r\n render(props: any, one: any, nameOne: string) {\r\n if (one && one.getUIFn) {\r\n let ComponentWrap = null\r\n const Component = one.getUIFn()\r\n if (one.getUIWrapFn) {\r\n ComponentWrap = one.getUIWrapFn()\r\n }\r\n // console.warn('render:', ComponentWrap, Component)\r\n if (ComponentWrap) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n return \r\n }\r\n return
\r\n }\r\n}\r\n\r\nexport default OneHelpers\r\n","import ConfigFilter from '../configs/ConfigFilter'\r\nimport { getObj, saveObj } from '../helpers/LocalStorage'\r\nimport { mergeObjIfExist } from '../helpers/Utils'\r\nimport HFilter from '../helpers/Filter'\r\nimport MyTableFilterControlHelpers from 'src/components/MyTableFilterControl/Helpers'\r\nimport OneHelpers from './OneHelpers'\r\ninterface IOneTableFilterControl {}\r\n\r\ninterface IOneTableFilterControlOpts {\r\n type?: string\r\n title?: string\r\n optionKey?: string\r\n fieldName?: string\r\n needConvert?: boolean\r\n fieldQuery?: string\r\n more?: any\r\n screenCode?: string\r\n onePage?: IOnePage\r\n}\r\n\r\ninterface IOnePage {\r\n getApiController: () => string | any\r\n getQueryShared: () => any\r\n getSourceList: () => any\r\n onChangeFilter: (oneFilterControl: OneTableFilterControl) => any\r\n}\r\n\r\nclass OneTableFilterControl implements IOneTableFilterControl {\r\n type?: string\r\n title?: string\r\n optionKey?: string\r\n fieldName?: string\r\n needConvert?: boolean\r\n fieldQuery?: string\r\n more: any = {}\r\n screenCode?: string = ''\r\n currentValue?: any\r\n currentFilter?: any\r\n prefixKey?: string = 'pf_filter'\r\n configFilter?: ConfigFilter\r\n _fromComponent: any\r\n _onePage?: IOnePage\r\n _fnGetFilterOutFromValue?: any\r\n _typeWrap?: any\r\n constructor(opts: IOneTableFilterControlOpts) {\r\n mergeObjIfExist(this, opts)\r\n if (this.type && HFilter.Types[this.type]) {\r\n this.configFilter = HFilter.Types[this.type]\r\n }\r\n if (opts.onePage) {\r\n this._onePage = opts.onePage\r\n }\r\n }\r\n setFromComponent(component: any) {\r\n if (component) {\r\n this._fromComponent = component\r\n }\r\n }\r\n setOnePage(onePage: IOnePage) {\r\n this._onePage = onePage\r\n }\r\n setFnGetFilterOutFromValue(fn: any) {\r\n this._fnGetFilterOutFromValue = fn\r\n }\r\n getFilterOutFromValue(value: any) {\r\n if (this._fnGetFilterOutFromValue) {\r\n return this._fnGetFilterOutFromValue(value, this)\r\n }\r\n }\r\n updateCurrentValue(currentvalue: any) {\r\n this.currentValue = currentvalue\r\n this.updateCurrentFilter(this.getFilterOutFromValue(this.currentValue))\r\n }\r\n updateCurrentFilter(currentFilter: any) {\r\n this.currentFilter = currentFilter\r\n if (this._onePage) {\r\n this._onePage.onChangeFilter(this)\r\n }\r\n }\r\n getKeyLocal() {\r\n if (this.screenCode) {\r\n return `${this.screenCode}_${this.prefixKey}`\r\n }\r\n return null\r\n }\r\n getType() {\r\n return this.type\r\n }\r\n getTypeWrap() {\r\n return this._typeWrap\r\n }\r\n clear() {\r\n this.currentValue = null\r\n this.currentFilter = null\r\n this.forceUpdate()\r\n }\r\n parseFilterFromValue(value?: any) {\r\n if (value) {\r\n } else {\r\n this.currentFilter = null\r\n }\r\n }\r\n loadLocal() {\r\n let _key = this.getKeyLocal()\r\n if (_key) {\r\n let _obj = getObj(_key, {})\r\n if (_obj) {\r\n if (_obj.value) {\r\n this.currentValue = _obj.value\r\n }\r\n if (_obj.filter) {\r\n this.currentValue = _obj.filter\r\n }\r\n }\r\n }\r\n }\r\n saveLocal() {\r\n let _key = this.getKeyLocal()\r\n if (_key) {\r\n let _value = this.currentValue\r\n let _filter = this.currentFilter\r\n saveObj(_key, {\r\n value: _value,\r\n type: this.type,\r\n filter: _filter\r\n })\r\n }\r\n }\r\n //UI\r\n getSourceData() {\r\n let _sourceList = {}\r\n if (this._onePage) {\r\n _sourceList = this._onePage.getSourceList()\r\n }\r\n if (_sourceList && this.optionKey && _sourceList[this.optionKey]) {\r\n return _sourceList[this.optionKey]\r\n }\r\n return []\r\n }\r\n getUIFn() {\r\n return OneHelpers.getUIFn(\r\n this.getType(),\r\n MyTableFilterControlHelpers,\r\n 'MyFilterControl'\r\n )\r\n }\r\n getUIWrapFn() {\r\n return OneHelpers.getUIWrapFn(\r\n this.getTypeWrap(),\r\n MyTableFilterControlHelpers,\r\n 'MyFilterControlWrap'\r\n )\r\n }\r\n getUI(props: any) {\r\n let _myFn = this.getUIFn()\r\n return _myFn({ oneFilterControl: this, ...props })\r\n }\r\n render(props: any) {\r\n return OneHelpers.render(props, this, 'oneFilterControl')\r\n // const ComponentWrap = this.getMyFilterControlWrapFn()\r\n // const Component = this.getMyFilterControlFn()\r\n // if (ComponentWrap) {\r\n // return (\r\n // \r\n // \r\n // \r\n // )\r\n // }\r\n // return \r\n }\r\n forceUpdate() {\r\n if (this._fromComponent && this._fromComponent.forceUpdate) {\r\n this._fromComponent.forceUpdate()\r\n }\r\n }\r\n // static createFromExtraColumn(\r\n // extraData: any,\r\n // fieldName: string,\r\n // options: any\r\n // ) {\r\n // console.warn('createFromExtraColumn:', extraData, fieldName, options)\r\n // if (extraData && extraData.Columns && extraData.Columns[fieldName]) {\r\n // let _configCol = extraData.Columns[fieldName]\r\n // }\r\n // return null\r\n // }\r\n static getAllFilterOutFromListFilterControls(arr?: OneTableFilterControl[]) {\r\n let _filterouts = {}\r\n if (arr && arr.length > 0) {\r\n for (let i = 0; i < arr.length; i++) {\r\n let _one = arr[i]\r\n let _fieldName = _one.fieldName\r\n if (_fieldName && _one.currentFilter) {\r\n _filterouts[_fieldName] = _one.currentFilter\r\n }\r\n }\r\n }\r\n return _filterouts\r\n }\r\n static clearAllFilter(arr?: OneTableFilterControl[]) {\r\n if (arr && arr.length > 0) {\r\n for (let i = 0; i < arr.length; i++) {\r\n let _one = arr[i]\r\n _one.clear()\r\n }\r\n }\r\n }\r\n static debug() {\r\n console.warn(OneTableFilterControl)\r\n }\r\n}\r\n\r\nexport default OneTableFilterControl\r\n","import { runFuntion } from '../helpers/Utils'\r\n\r\ninterface IConfigOnClick {}\r\n\r\nclass ConfigOnClick implements IConfigOnClick {\r\n constructor() {}\r\n static getOnClickFromMoreCell(\r\n fnList: any,\r\n data: any,\r\n configOnClick: any\r\n ): any {\r\n if (fnList) {\r\n if (configOnClick) {\r\n if (configOnClick.fnName) {\r\n let _args: any[] = []\r\n if (configOnClick.args && configOnClick.args.length > 0) {\r\n for (let i = 0; i < configOnClick.args.length; i++) {\r\n let _v = configOnClick.args[i]\r\n if (data && data.hasOwnProperty(_v)) {\r\n _v = data[_v]\r\n }\r\n _args.push(_v)\r\n }\r\n }\r\n return () => {\r\n runFuntion(fnList, configOnClick.fnName, _args)\r\n }\r\n }\r\n }\r\n }\r\n return null\r\n }\r\n}\r\n\r\nexport default ConfigOnClick\r\n","export const getTextWB = (hexColor: string, opts: any = {}) => {\r\n let _colorForDark = opts.colorForDark || '#ffffff'\r\n let _colorForLight = opts.colorForLight || '#000000'\r\n if (opts && opts.fix && opts.fix[hexColor]) {\r\n //tra ve theo danh sach\r\n return opts.fix[hexColor]\r\n }\r\n let _lumina = getLumina(hexColor)\r\n if (_lumina < 128) {\r\n return _colorForDark\r\n }\r\n return _colorForLight\r\n}\r\n\r\nexport const getLumina = (hexColor: string) => {\r\n if (hexColor && hexColor.startsWith('#')) {\r\n var c = hexColor.substring(1) // strip #\r\n var rgb = parseInt(c, 16) // convert rrggbb to decimal\r\n var r = (rgb >> 16) & 0xff // extract red\r\n var g = (rgb >> 8) & 0xff // extract green\r\n var b = (rgb >> 0) & 0xff // extract blue\r\n var luma = 0.2126 * r + 0.7152 * g + 0.0722 * b // per ITU-R BT.709\r\n return luma\r\n }\r\n return 0\r\n}\r\n\r\nexport const nameOfColorsBootstrap = [\r\n 'primary',\r\n 'danger',\r\n 'success',\r\n 'secondary',\r\n 'warning'\r\n]\r\n\r\nexport const validColorBootstrap = (color: string) => {\r\n if (color && nameOfColorsBootstrap.indexOf(color) > -1) {\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nexport const randomHextColor = () => {\r\n return '#' + Math.floor(Math.random() * 16777215).toString(16)\r\n}\r\n","import * as React from 'react'\r\nimport { json2Obj } from '../helpers/Json'\r\nimport ConfigOnClick from '../configs/ConfigOnClick'\r\nimport { isJsonString, isObject, isString, isNullOrEmpty } from 'src/helpers/Is'\r\nimport { getTextWB, validColorBootstrap } from 'src/helpers/Color'\r\nimport { logParseJson } from 'src/helpers/Log'\r\nimport { getTextDisplayOfValueFromOptions } from '../helpers/Options'\r\nimport {\r\n IMoreOfCell,\r\n IFnListOfCell,\r\n IMoreOfCellConfigButton,\r\n IMoreOfCellConfigTextDisplay,\r\n IMoreOfCellConfigTooltip,\r\n IMoreOfCellConfigApi,\r\n IMoreOfCellConfigModal,\r\n IMoreOfCellConfigForm,\r\n IMoreOfCellConfigHtml\r\n} from '../interface'\r\nimport {\r\n runFuntion,\r\n getTextWithData,\r\n // mergeObjIfExist,\r\n mergeObjIfNotExist,\r\n getCustomData\r\n} from 'src/helpers/Utils'\r\nimport MyIcon from 'src/components/MyIcon'\r\ninterface IOneTableCell {}\r\n\r\ninterface IOneTableCellOpts {\r\n row?: any\r\n cell?: any\r\n extra?: any\r\n configColumn?: any\r\n fieldName?: string\r\n onePage?: IOnePage\r\n custom?: any\r\n}\r\n\r\ninterface IOnePage {\r\n getApiController: () => string | any\r\n getQueryShared: () => any\r\n getSourceList: () => any\r\n}\r\n\r\nclass OneTableCell implements IOneTableCell {\r\n row: any\r\n extra: any\r\n //extra\r\n fnList: IFnListOfCell = {}\r\n type: string = ''\r\n more: IMoreOfCell = {}\r\n fieldName: string = ''\r\n _onePage?: IOnePage\r\n _configColumn?: any\r\n _custom?: any //using for custom cell from other cell\r\n constructor(opts: IOneTableCellOpts) {\r\n if (opts) {\r\n if (opts.custom) {\r\n this._custom = opts.custom\r\n }\r\n if (opts.extra && opts.row) {\r\n this.init(opts.row, opts.extra)\r\n } else if (opts.configColumn && opts.fieldName) {\r\n this.initFromConfigColumn(opts.configColumn, opts.fieldName)\r\n }\r\n }\r\n }\r\n updateOnePage(onePage?: IOnePage) {\r\n if (onePage) {\r\n this._onePage = onePage\r\n }\r\n }\r\n initFromConfigColumn(configColumn: any, fieldName: string) {\r\n this._configColumn = configColumn\r\n this.fieldName = fieldName\r\n if (this._configColumn && this._configColumn.Type) {\r\n this.parseExtraType(this._configColumn)\r\n }\r\n }\r\n parseExtraType(extra: any) {\r\n if (extra.Type) {\r\n if (extra.Type.type) {\r\n this.type = extra.Type.type\r\n }\r\n if (extra.Type.more) {\r\n let _moreFromCustom = {}\r\n if (this._custom && this._custom.more) {\r\n _moreFromCustom = this._custom.more\r\n }\r\n this.more = { ..._moreFromCustom, ...json2Obj(extra.Type.more, {}) }\r\n }\r\n }\r\n }\r\n update(row: any, extra: any) {\r\n this.row = row\r\n this.extra = extra\r\n if (extra) {\r\n if (extra.fieldName) {\r\n this.fieldName = extra.fieldName\r\n }\r\n if (extra.fnList) {\r\n this.fnList = extra.fnList\r\n }\r\n this.parseExtraType(extra)\r\n }\r\n }\r\n init(row: any, extra: any) {\r\n this.update(row, extra)\r\n }\r\n getMore() {\r\n return this.more\r\n }\r\n getRowId() {\r\n if (this.row) return this.row.Id\r\n return null\r\n }\r\n getValue() {\r\n if (this.row && this.fieldName) {\r\n return this.row[this.fieldName]\r\n }\r\n }\r\n\r\n //Get More Config\r\n getExtraStyle({\r\n customMore,\r\n dfStyle,\r\n customStyle\r\n }: {\r\n customMore?: any\r\n dfStyle?: any\r\n customStyle?: any\r\n } = {}) {\r\n const more = customMore || this.more\r\n let _style = dfStyle || {}\r\n if (this.extra) {\r\n //style from extra.Style\r\n let _styleEx = this.extra.Style\r\n if (_styleEx != null) {\r\n if (isString(_styleEx) == true) {\r\n _style = Object.assign(_style, json2Obj(_styleEx, {}))\r\n } else if (isObject(_styleEx)) {\r\n _style = Object.assign(_style, _styleEx)\r\n }\r\n }\r\n\r\n //get bg va color from Type\r\n if (this.extra.Type != null && this.row != null) {\r\n if (this.extra.Type.bgF != null) {\r\n if (this.row[this.extra.Type.bgF] != null) {\r\n let _color = getTextWB(this.row[this.extra.Type.bgF])\r\n _style = Object.assign(_style, {\r\n background: this.row[this.extra.Type.bgF],\r\n color: _color\r\n })\r\n } else if (\r\n this.extra.Type.bgF.startsWith('#') ||\r\n this.extra.Type.bgF.startsWith('linear-gradient')\r\n ) {\r\n let _color = getTextWB(this.extra.Type.bgF)\r\n _style = Object.assign(_style, {\r\n background: this.extra.Type.bgF,\r\n color: _color\r\n })\r\n }\r\n }\r\n if (this.extra.Type.colorF != null) {\r\n if (this.extra.Type.colorF.startsWith('#')) {\r\n _style = Object.assign(_style, { color: this.extra.Type.colorF })\r\n } else if (this.row[this.extra.Type.colorF] != null) {\r\n _style = Object.assign(_style, {\r\n color: this.row[this.extra.Type.colorF]\r\n })\r\n }\r\n }\r\n }\r\n\r\n //from more\r\n if (more) {\r\n try {\r\n if (more.style != null) {\r\n _style = Object.assign(_style, more.style)\r\n }\r\n if (more.colorF != null) {\r\n if (this.row[more.colorF] != null) {\r\n _style = Object.assign(_style, {\r\n color: this.row[more.colorF]\r\n })\r\n }\r\n }\r\n } catch (error) {\r\n logParseJson(more)\r\n }\r\n }\r\n }\r\n\r\n //from row\r\n if (this.row) {\r\n if (this.row.StyleRow && isObject(this.row.StyleRow)) {\r\n _style = Object.assign(_style, this.row.StyleRow)\r\n }\r\n if (this.row.UI_StyleRow) {\r\n if (isObject(this.row.UI_StyleRow)) {\r\n _style = Object.assign(_style, this.row.UI_StyleRow)\r\n } else if (isJsonString(this.row.UI_StyleRow)) {\r\n try {\r\n let _styleRow = json2Obj(this.row.UI_StyleRow)\r\n if (_styleRow) {\r\n _style = Object.assign(_style, _styleRow)\r\n }\r\n } catch (error) {\r\n logParseJson(this.row.UI_StyleRow)\r\n }\r\n }\r\n }\r\n }\r\n if (customStyle) {\r\n _style = Object.assign(customStyle, _style)\r\n }\r\n\r\n return _style\r\n }\r\n getStyleContainer({ customMore }: { customMore?: any } = {}) {\r\n let _style: any = {}\r\n const more = customMore || this.more\r\n const fnList = this.fnList\r\n if (more && (more.configExpandArea || more.hasExpandArea)) {\r\n let _configExpandArea = more.configExpandArea\r\n if (\r\n more.hasExpandArea ||\r\n (_configExpandArea && _configExpandArea.show === true)\r\n ) {\r\n //tuong duong more.hasExpandArea\r\n let _currentLevelDetail = runFuntion(fnList, 'fntdGetExpandLevel', [])\r\n if (_currentLevelDetail != null) {\r\n let _paddingLeft = 20\r\n if (_configExpandArea && _configExpandArea.paddingLevel != null) {\r\n _paddingLeft = _configExpandArea.paddingLevel\r\n }\r\n _style.paddingLeft = `${_currentLevelDetail * _paddingLeft}px`\r\n _style.position = 'relative'\r\n _style.background = 'transparent'\r\n _style.display = 'flex'\r\n _style.flexDirection = 'row'\r\n }\r\n }\r\n }\r\n if (more && more.styleContainer) {\r\n _style = Object.assign(_style, more.styleContainer)\r\n }\r\n return _style\r\n }\r\n getExtraClassName({ customMore }: { customMore?: any } = {}) {\r\n const more = customMore || this.more\r\n let _className = ''\r\n if (this.extra != null) {\r\n if (this.extra.ClassName) {\r\n _className += ' '\r\n _className += this.extra.ClassName\r\n }\r\n }\r\n if (more) {\r\n if (more.className) {\r\n _className += ' '\r\n _className += more.className\r\n }\r\n if (more.classNameWithColField) {\r\n if (isString(more.classNameWithColField)) {\r\n _className += ' '\r\n _className += `${more.classNameWithColField}-${this.fieldName}`\r\n } else if (more.classNameWithColField === true) {\r\n _className += ' '\r\n _className += `col-${this.fieldName}`\r\n }\r\n }\r\n if (more.classNameOnly) {\r\n return more.classNameOnly\r\n }\r\n }\r\n\r\n return _className\r\n }\r\n\r\n getOnClick() {\r\n return ConfigOnClick.getOnClickFromMoreCell(\r\n this.fnList,\r\n this.row,\r\n this.more.configOnClick\r\n )\r\n }\r\n getConfigApi = ({ customMore }: { customMore?: any } = {}) => {\r\n const more = customMore || this.more\r\n const row = this.row\r\n if (more.configApi) {\r\n return more.configApi\r\n }\r\n let _configApi: IMoreOfCellConfigApi = {\r\n method: more.method || 'POST',\r\n url: more.url || more.apiUrl, //more.apiUrl//apiPath//apiName//apiNameAdd//\r\n needReloadList: more.needReload || more.needReloadList || false,\r\n needReloadPage: more.needReloadPage,\r\n needReExpand: more.needReExpand,\r\n needSendMsg: more.needSendMsg,\r\n needReloadOptionsAndList: more.needReloadOptionsAndList,\r\n needReloadRow: more.needReloadRow,\r\n query: more.query || {}\r\n }\r\n if (isNullOrEmpty(_configApi.url)) {\r\n _configApi.path = more.apiPath || this.getApiController()\r\n _configApi.name = more.apiName || more.apiNameAdd || ''\r\n if (_configApi.name && _configApi.name.indexOf('[') > -1) {\r\n _configApi.name = getTextWithData(_configApi.name, row)\r\n }\r\n } else {\r\n if (_configApi.url && _configApi.url.indexOf('[') > -1) {\r\n _configApi.url = getTextWithData(_configApi.url, row)\r\n }\r\n }\r\n\r\n _configApi.query = this.parseQueryFromConfigQuery(_configApi.query)\r\n if (_configApi.url || _configApi.path) {\r\n return _configApi\r\n }\r\n return null\r\n }\r\n parseQueryFromConfigQuery = (query: any = {}) => {\r\n const row = this.row\r\n let _keys = Object.keys(query)\r\n let _newQuery = {}\r\n if (_keys && _keys.length > 0) {\r\n for (let k of _keys) {\r\n if (isString(query[k]) && row.hasOwnProperty(query[k])) {\r\n _newQuery[k] = row[query[k]]\r\n } else {\r\n _newQuery[k] = query[k]\r\n }\r\n }\r\n }\r\n return _newQuery\r\n }\r\n getApiController() {\r\n if (this._onePage) {\r\n return this._onePage.getApiController()\r\n }\r\n }\r\n getConfigButton({ customMore }: { customMore?: any } = {}) {\r\n let _configButton: IMoreOfCellConfigButton = {}\r\n const more = customMore || this.more\r\n if (more) {\r\n if (more.configButton && isObject(more.configButton)) {\r\n _configButton = more.configButton\r\n } else if (more.button && isObject(more.button)) {\r\n _configButton = more.button\r\n }\r\n }\r\n return _configButton\r\n }\r\n getMorePropsButton({ customMore }: { customMore?: any } = {}) {\r\n const more = customMore || this.more\r\n const row = this.row\r\n let _props: any = {}\r\n mergeObjIfNotExist(_props, {\r\n outline: false,\r\n color: 'primary',\r\n className: '',\r\n style: {}\r\n })\r\n if (more) {\r\n if (more.fVisible) {\r\n if (\r\n row[more.fVisible] === false ||\r\n row[more.fVisible] == null ||\r\n row[more.fVisible] == ''\r\n ) {\r\n _props.style.visibility = 'hidden'\r\n }\r\n }\r\n //style by value field\r\n if (more.styleByValueField && more.styleByValueField.field) {\r\n // console.warn(\"stylebyValueField\",_more);\r\n let _v = row[more.styleByValueField.field]\r\n let _objSwitch = more.styleByValueField.switch\r\n if (_objSwitch) {\r\n if (_v && _objSwitch[_v]) {\r\n _props.style = Object.assign(_props.style, _objSwitch[_v])\r\n } else if (_objSwitch.default) {\r\n _props.style = Object.assign(_props.style, _objSwitch.default)\r\n }\r\n }\r\n }\r\n }\r\n let _configButton = this.getConfigButton({ customMore })\r\n if (_configButton) {\r\n if (_configButton.outline != null) {\r\n _props.outline = _configButton.outline\r\n }\r\n if (_configButton.color != null) {\r\n _props.color = _configButton.color\r\n }\r\n if (_configButton.className != null) {\r\n _props.outline = _configButton.className\r\n }\r\n if (_configButton.style != null) {\r\n _props.style = Object.assign(_props.style, _configButton.style)\r\n }\r\n if (_configButton.fColor && row[_configButton.fColor]) {\r\n if (validColorBootstrap(row[_configButton.fColor])) {\r\n _props.color = row[_configButton.fColor]\r\n } else if (_props.style) {\r\n _props.style.color = row[_configButton.fColor]\r\n }\r\n }\r\n if (_configButton.fDisabled != null) {\r\n //\r\n if (typeof _configButton.fDisabled == 'boolean') {\r\n _props.disabled = _configButton.fDisabled\r\n } else if (typeof row[_configButton.fDisabled] == 'boolean') {\r\n _props.disabled = row[_configButton.fDisabled]\r\n }\r\n }\r\n if (_configButton.fNotDisabled != null) {\r\n if (typeof _configButton.fNotDisabled == 'boolean') {\r\n _props.disabled = !_configButton.fNotDisabled\r\n } else if (typeof row[_configButton.fNotDisabled] == 'boolean') {\r\n _props.disabled = !row[_configButton.fNotDisabled]\r\n }\r\n }\r\n if (_configButton.props) {\r\n _props = Object.assign(_props, _configButton.props)\r\n }\r\n }\r\n\r\n return _props\r\n }\r\n\r\n getConfigTextDisplay({ customMore }: { customMore?: any } = {}) {\r\n let _configTextDisplay: IMoreOfCellConfigTextDisplay = {}\r\n const more = customMore || this.more\r\n if (more && more.configTextDisplay) {\r\n return more.configTextDisplay\r\n } else {\r\n if (more) {\r\n if (more.fDisplay || more.fShow) {\r\n _configTextDisplay.fDisplay = more.fDisplay || more.fShow\r\n }\r\n if (more.hasIconAndText) {\r\n _configTextDisplay.hasIconAndText = more.hasIconAndText\r\n }\r\n if (more.fIcon) {\r\n _configTextDisplay.fIcon = more.fIcon\r\n }\r\n if (more.icon) {\r\n _configTextDisplay.icon = more.icon\r\n }\r\n }\r\n }\r\n return _configTextDisplay\r\n }\r\n getTextDisplay({\r\n df,\r\n icon,\r\n title,\r\n hasIconAndText = false,\r\n options,\r\n optionValue,\r\n customMore\r\n }: {\r\n df?: any\r\n icon?: any\r\n title?: any\r\n hasIconAndText?: boolean\r\n options?: any\r\n optionValue?: any\r\n customMore?: any\r\n } = {}) {\r\n const row = this.row\r\n const cell = this.getValue()\r\n const configTextDisplay = this.getConfigTextDisplay({ customMore })\r\n let _display: any = df || ''\r\n let _icon: any = icon || configTextDisplay.icon\r\n let _uiIcon: any = null\r\n let _hasIconAndText = hasIconAndText || configTextDisplay.hasIconAndText\r\n // console.warn(\"getTextDisplay:\",_more,_display);\r\n if (configTextDisplay) {\r\n if (configTextDisplay.fDisplay && row[configTextDisplay.fDisplay]) {\r\n _display = row[configTextDisplay.fDisplay]\r\n } else if (options && optionValue) {\r\n _display =\r\n getTextDisplayOfValueFromOptions(options, optionValue) || cell\r\n } else if (title) {\r\n _display = title\r\n } else if (cell) {\r\n _display = cell\r\n }\r\n\r\n if (_icon) {\r\n _uiIcon = \r\n } else if (configTextDisplay.fIcon && row[configTextDisplay.fIcon]) {\r\n _uiIcon = \r\n }\r\n\r\n if (_uiIcon) {\r\n if (_hasIconAndText === true) {\r\n _display = (\r\n
\r\n {_uiIcon} {_display}\r\n
\r\n )\r\n } else {\r\n _display = _uiIcon\r\n }\r\n }\r\n }\r\n return _display\r\n }\r\n getDateFormat({\r\n customMore,\r\n dfFormat\r\n }: { customMore?: any; dfFormat?: any } = {}) {\r\n const more = customMore || this.more\r\n let _format = dfFormat || ''\r\n if (more && more.dateFormat) {\r\n _format = more.dateFormat\r\n } else if (more.format) {\r\n _format = more.format\r\n }\r\n return _format\r\n }\r\n getListAction = ({ customMore }: { customMore?: any } = {}) => {\r\n const more = customMore || this.more\r\n return more.listAction\r\n }\r\n getConfigTooltip({ customMore }: { customMore?: any } = {}) {\r\n const more = customMore || this.more\r\n let _configTooltip: IMoreOfCellConfigTooltip = {}\r\n if (more) {\r\n if (more.configTooltip) {\r\n return more.configTooltip\r\n } else {\r\n if (more.fTooltip || more.tooltipF) {\r\n _configTooltip.fTooltip = more.fTooltip || more.tooltipF\r\n }\r\n if (more.tooltip) {\r\n _configTooltip.tooltip = more.tooltip\r\n }\r\n }\r\n }\r\n\r\n return _configTooltip\r\n }\r\n getTooltip({ customMore }: { customMore?: any } = {}) {\r\n const row = this.row\r\n const configTooltip = this.getConfigTooltip({ customMore })\r\n if (configTooltip) {\r\n if (configTooltip.fTooltip && row[configTooltip.fTooltip]) {\r\n return row[configTooltip.fTooltip]\r\n } else if (configTooltip.tooltip) {\r\n return configTooltip.tooltip\r\n }\r\n }\r\n }\r\n getConfigModal({ customMore }: { customMore?: any } = {}) {\r\n const more = customMore || this.more\r\n if (more.configModal) {\r\n return more.configModal\r\n }\r\n let _configModal: IMoreOfCellConfigModal = {}\r\n if (more.modal) {\r\n _configModal = {\r\n title: more.modal.title\r\n }\r\n }\r\n return _configModal\r\n }\r\n\r\n getConfigForm({ customMore }: { customMore?: any } = {}) {\r\n const more = customMore || this.more\r\n if (more.configForm) {\r\n return more.configForm\r\n }\r\n let _configForm: IMoreOfCellConfigForm = {}\r\n if (more.formConfig) {\r\n return more.formConfig\r\n }\r\n return _configForm\r\n }\r\n\r\n getConfigHtml({ customMore }: { customMore?: IMoreOfCell } = {}) {\r\n const more = customMore || this.more\r\n const row = this.row\r\n let _configHtml: IMoreOfCellConfigHtml = {}\r\n if (more.configHtml) {\r\n if (more.configHtml.fTemplate && row[more.configHtml.fTemplate]) {\r\n _configHtml.template = row[more.configHtml.fTemplate]\r\n } else if (more.configHtml.template) {\r\n _configHtml.template = more.configHtml.template\r\n } else {\r\n _configHtml.template = this.getValue()\r\n }\r\n if (more.configHtml.customData) {\r\n _configHtml.customData = getCustomData(row, more.configHtml.customData)\r\n }\r\n } else {\r\n _configHtml.template = this.getValue()\r\n }\r\n return _configHtml\r\n }\r\n\r\n getFnList() {\r\n return this.fnList || {}\r\n }\r\n\r\n parseResponse(response: any, { customMore }: { customMore?: any } = {}) {\r\n const more = customMore || this.more\r\n const fnList = this.getFnList()\r\n if (response && response.Data) {\r\n if (response.Data.FullPath) {\r\n let _data = response.Data\r\n if (more.autoOpenLink == true) {\r\n fnList.openExternalUrl &&\r\n fnList.openExternalUrl(\r\n _data.FullPath,\r\n _data.FullPathNewWindow === false ? '_self' : '_blank'\r\n )\r\n } else {\r\n fnList.onShowDialog &&\r\n fnList.onShowDialog(\r\n 'Link',\r\n
\r\n
{_data.FullPathInfo}
\r\n \r\n {_data.FullPath}\r\n \r\n
\r\n )\r\n }\r\n } else if (response.Data.FullPathList && fnList.onShowDialog) {\r\n let _data = response.Data\r\n fnList.onShowDialog(\r\n 'Links',\r\n
\r\n
{_data.FullPathInfo}
\r\n {_data.FullPathList.map((v: any) => {\r\n return (\r\n
\r\n \r\n {v}\r\n \r\n
\r\n )\r\n })}\r\n
\r\n )\r\n }\r\n }\r\n }\r\n parseNeedReload(configApi: IMoreOfCellConfigApi | null, response: any) {\r\n const fnList = this.getFnList()\r\n if (configApi) {\r\n if (configApi.needReloadPage === true) {\r\n fnList.onReloadPage && fnList.onReloadPage()\r\n return\r\n }\r\n\r\n if (configApi.needReloadOptionsAndList) {\r\n fnList.onReloadList && fnList.onReloadList()\r\n } else if (configApi.needReloadList === true) {\r\n fnList.onReloadList && fnList.onReloadList()\r\n }\r\n\r\n if (configApi.needSendMsg === true) {\r\n fnList.onSendMsg && fnList.onSendMsg(configApi.needSendMsg)\r\n }\r\n if (configApi.needReExpand === true) {\r\n fnList.onReExpand && fnList.onReExpand()\r\n }\r\n if (\r\n configApi.needReloadRow &&\r\n response &&\r\n response.Data &&\r\n response.Data.Id === this.row.Id\r\n ) {\r\n fnList.onUpdateRow &&\r\n fnList.onUpdateRow({\r\n row: this.row,\r\n newRow: response.Data\r\n })\r\n }\r\n }\r\n }\r\n\r\n //static Create\r\n static createFromExtraData(\r\n extraData: any,\r\n fieldName: any,\r\n onePage: IOnePage\r\n ) {\r\n if (\r\n extraData &&\r\n extraData.Columns &&\r\n fieldName &&\r\n extraData.Columns[fieldName]\r\n ) {\r\n return new OneTableCell({\r\n configColumn: extraData.Columns[fieldName],\r\n fieldName: fieldName,\r\n onePage: onePage\r\n })\r\n }\r\n return null\r\n }\r\n static createFromCellV1(props: any) {\r\n return new OneTableCell(props)\r\n }\r\n\r\n static debug() {\r\n console.warn(OneTableCell)\r\n }\r\n}\r\n\r\nexport default OneTableCell\r\n","import ConfigPage from '../configs/ConfigPage'\r\nimport OneTable from './OneTable'\r\nimport OneScreenConfig from './OneScreenConfig'\r\nimport ConfigPagination from '../configs/ConfigPagination'\r\nimport OneFilters from './OneFilters'\r\nimport OneButton from './OneButton'\r\nimport OneTableFilterControl from './OneTableFilterControl'\r\nimport OneTableCell from './OneTableCell'\r\nimport OneTableColumn from './OneTableColumn'\r\nimport { IConfigPageServer } from '../interface'\r\nimport { get } from 'src/helpers/Utils'\r\ninterface IOnePage {\r\n _configPage: ConfigPage\r\n _configPagination: ConfigPagination\r\n _dataOptions: any\r\n _dataList: any\r\n _dataExtraData: any\r\n _oneTable: OneTable\r\n _oneScreenConfig: OneScreenConfig\r\n}\r\n\r\ninterface IOnePageOptions {\r\n configPage?: any\r\n}\r\n\r\nclass OnePage implements IOnePage {\r\n _configPage: ConfigPage\r\n _configPagination: ConfigPagination\r\n _dataOptions: any\r\n _dataOptionsPageConfigContents: IConfigPageServer[] | null\r\n _dataList: any\r\n _dataExtraData: any\r\n _oneTable: OneTable\r\n _oneFilters: OneFilters\r\n _oneScreenConfig: OneScreenConfig\r\n _buttonList: OneButton[] = []\r\n _filterList: OneTableFilterControl[] = []\r\n _filterListByFieldName: any = {}\r\n _oneTableColumnByField: (OneTableColumn | null)[] = []\r\n onForceUpdateUI: any = null\r\n constructor(opts: IOnePageOptions) {\r\n // console.warn('constructor onePage', opts)\r\n this._configPage = new ConfigPage()\r\n this._oneTable = new OneTable({})\r\n this._oneScreenConfig = new OneScreenConfig({})\r\n this._configPagination = new ConfigPagination({})\r\n this._oneFilters = new OneFilters()\r\n if (opts && opts.configPage) {\r\n this._configPage.parseConfigPageServer(opts.configPage)\r\n }\r\n }\r\n parseConfigPage(configPage: any) {\r\n if (configPage) {\r\n this._configPage.parseConfigPageServer(configPage)\r\n }\r\n }\r\n getScreenGUID() {\r\n return this._configPage.getId()\r\n }\r\n getPageContents() {\r\n if (this._configPage._configPageServer?.Contents) {\r\n return this._configPage._configPageServer?.Contents\r\n }\r\n return this._dataOptionsPageConfigContents\r\n }\r\n getQueryOptions() {}\r\n getQueryList() {}\r\n getQueryShared() {\r\n let _screenGUID = this.getScreenGUID()\r\n let _df: any = {}\r\n if (_screenGUID) {\r\n _df.ScreenGUID = _screenGUID\r\n }\r\n return {\r\n ..._df,\r\n ...this.getQueryPagination(),\r\n ...this.getQuerySort(),\r\n ...this.getQueryFilterServer()\r\n }\r\n }\r\n getQueryPagination() {\r\n if (this._oneScreenConfig._table.hasPagingRemote === true) {\r\n return this._configPagination.getQuery()\r\n }\r\n return null\r\n }\r\n getQueryFilter() {\r\n let _query = {\r\n FilterQuery: this._oneFilters.getQueryFilterClients()\r\n }\r\n return _query\r\n }\r\n getQueryFilterServer() {\r\n return this._oneFilters.getQueryFilter()\r\n }\r\n getQuerySort() {\r\n let _query = this._oneFilters.getQuerySort()\r\n if (this._oneScreenConfig._table.hasPagingRemote === true) {\r\n if (_query['SortQuery']) {\r\n _query['Sorts'] = _query['SortQuery']\r\n _query['UI_Sorts'] = _query['SortQuery']\r\n }\r\n }\r\n return _query\r\n }\r\n requestOptions() {}\r\n requestList() {}\r\n parseOptions(options?: any) {\r\n if (options) {\r\n this._dataOptions = options\r\n if (options.ButtonList) {\r\n this._buttonList = OneButton.createListButtonList(\r\n options.ButtonList,\r\n this\r\n )\r\n }\r\n this._dataOptionsPageConfigContents =\r\n get(options, 'PageConfig.Contents') || null\r\n this._oneScreenConfig.parseFromOptions(this._dataOptions)\r\n this._configPagination.updateFromOneScreenConfig(this._oneScreenConfig)\r\n }\r\n }\r\n parseListAndExtraData(data?: any) {\r\n if (data) {\r\n this._dataList = data.Data\r\n this._dataExtraData = data.ExtraData\r\n this._oneScreenConfig.parseFromListAndExtraData(\r\n this._dataList,\r\n this._dataExtraData\r\n )\r\n //parse tablecell\r\n if (this._dataExtraData && this._dataExtraData.Columns) {\r\n let _fields = Object.keys(this._dataExtraData.Columns)\r\n if (_fields && _fields.length > 0) {\r\n for (let f of _fields) {\r\n this._oneTableColumnByField[f] = OneTableCell.createFromExtraData(\r\n this._dataExtraData,\r\n f,\r\n this\r\n )\r\n }\r\n }\r\n }\r\n\r\n //when has filterConfig.data\r\n //bo sung _filterListByFieldName cho truong hop load lai list, bi thay doi control filter -> gan vao listByField -> load lai thi xai lai\r\n if (this._oneScreenConfig._filter && this._oneScreenConfig._filter.data) {\r\n this._filterList = []\r\n for (let i = 0; i < this._oneScreenConfig._filter.data.length; i++) {\r\n let _cfFilter = this._oneScreenConfig._filter.data[i]\r\n let _fieldName = _cfFilter.fieldName\r\n if (_fieldName) {\r\n if (this._filterListByFieldName[_fieldName]) {\r\n this._filterList.push(this._filterListByFieldName[_fieldName])\r\n } else {\r\n this._filterListByFieldName[_fieldName] =\r\n new OneTableFilterControl({\r\n ..._cfFilter,\r\n onePage: this\r\n })\r\n this._filterList.push(this._filterListByFieldName[_fieldName])\r\n }\r\n }\r\n }\r\n }\r\n this._configPagination.updateFromDataList(data)\r\n }\r\n }\r\n getDataList() {\r\n return this._dataList\r\n }\r\n getDataWithFilterClient() {\r\n return this._oneFilters.getDataWithCurrentFilter(this._dataList)\r\n }\r\n getDataOptions() {\r\n return this._dataOptions\r\n }\r\n getSourceList() {\r\n return this._dataOptions\r\n }\r\n getDataExtraData() {\r\n return this._dataExtraData\r\n }\r\n getApiController() {\r\n return this._configPage.getApiController()\r\n }\r\n getOneTableColumnByFieldname(fieldName: string) {\r\n return this._oneTableColumnByField[fieldName]\r\n }\r\n getPageTitle() {\r\n let _title = this._configPage.getTitle()\r\n if (this._oneScreenConfig._header.title) {\r\n _title = this._oneScreenConfig._header.title\r\n }\r\n return _title\r\n }\r\n getButtonsList() {\r\n return this._buttonList\r\n }\r\n getFilterList() {\r\n return this._filterList\r\n }\r\n clearFilter() {\r\n OneTableFilterControl.clearAllFilter(this._filterList)//bo sung filterList\r\n this._oneFilters.updateCurrentFiters({})\r\n }\r\n onSearch() {}\r\n onFilter() {}\r\n onChangeFilter(fromOneFilterControl: OneTableFilterControl) {\r\n let _allFilterOut =\r\n OneTableFilterControl.getAllFilterOutFromListFilterControls(\r\n this._filterList\r\n )\r\n this._oneFilters.updateCurrentFiters(_allFilterOut)\r\n console.warn('onChangeFilter', fromOneFilterControl, _allFilterOut)\r\n }\r\n forceUpdateUI() {\r\n if (this.onForceUpdateUI) {\r\n this.onForceUpdateUI()\r\n }\r\n }\r\n static debug() {\r\n console.warn(OnePage)\r\n }\r\n}\r\n\r\nexport default OnePage\r\n","import { isArray, isString } from './Is'\r\nimport { mergeObjIfExist } from './Utils'\r\n\r\nexport function getParameterByName(name: string, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&')\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url)\r\n if (!results) return null\r\n if (!results[2]) return ''\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '))\r\n}\r\n\r\nexport function getAllParamOnUrl(url = window.location.href) {\r\n let _params = {}\r\n let _indexQuestionMark = url.lastIndexOf('?')\r\n try {\r\n if (_indexQuestionMark > -1) {\r\n let _folowQuestion = url.substring(_indexQuestionMark + 1, url.length)\r\n if (_folowQuestion) {\r\n let _arrParam = _folowQuestion.split('&')\r\n if (_arrParam) {\r\n for (let i = 0; i < _arrParam.length; i++) {\r\n let _rs = _arrParam[i].split('=')\r\n if (_rs && _rs.length > 1) {\r\n _params[_rs[0]] = decodeURIComponent(_rs[1])\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n console.error('Error parse url', error)\r\n }\r\n return _params\r\n}\r\n\r\nexport function updateUrlWithAllParams(\r\n allParams: object,\r\n url = window.location.href,\r\n opts = { updateUrlWithoutReload: true }\r\n) {\r\n let _newUrl = url\r\n if (allParams) {\r\n let _indexQuestionMark = url.lastIndexOf('?')\r\n if (_indexQuestionMark == -1) {\r\n _indexQuestionMark = url.length\r\n }\r\n _newUrl =\r\n url.substr(0, _indexQuestionMark) +\r\n '?' +\r\n Object.keys(allParams)\r\n .map((v) => {\r\n return `${v}=${allParams[v]}`\r\n })\r\n .join('&')\r\n if (opts && opts.updateUrlWithoutReload) {\r\n setNewUrlWithoutReload(_newUrl)\r\n }\r\n }\r\n return _newUrl\r\n}\r\n\r\nexport function clearParamOnUrl(\r\n name: string | string[],\r\n url = window.location.href\r\n) {\r\n let _allPrams = getAllParamOnUrl(url)\r\n let _newUrl = url\r\n if (isString(name) && _allPrams && _allPrams[name as string]) {\r\n delete _allPrams[name as string]\r\n return updateUrlWithAllParams(_allPrams, url)\r\n } else if (isArray(name) && _allPrams) {\r\n for (let k of name as string[]) {\r\n if (_allPrams[k]) {\r\n delete _allPrams[k]\r\n }\r\n }\r\n return updateUrlWithAllParams(_allPrams, url)\r\n }\r\n // if (_allPrams && _allPrams[name]) {\r\n // delete _allPrams[name]\r\n // updateUrlWithAllParams(_allPrams, url)\r\n // }\r\n return _newUrl\r\n}\r\n\r\nexport function keeponlyParams(names: string[], url = window.location.href) {\r\n let _allPrams = getAllParamOnUrl(url)\r\n if (names && names.length > 0) {\r\n let _arrRemove = []\r\n let _pK = Object.keys(_allPrams)\r\n for (let k of _pK) {\r\n if (names.indexOf(k) == -1) {\r\n _arrRemove.push(k)\r\n }\r\n }\r\n if (_arrRemove && _arrRemove.length > 0) {\r\n return clearParamOnUrl(_arrRemove, url)\r\n }\r\n }\r\n return url\r\n}\r\nexport function updateParamOnUrl(\r\n name: string,\r\n value: string,\r\n url = window.location.href\r\n) {\r\n let _allPrams = getAllParamOnUrl(url)\r\n let _newUrl = url\r\n if (_allPrams) {\r\n _allPrams[name] = value\r\n return updateUrlWithAllParams(_allPrams, url)\r\n }\r\n return _newUrl\r\n}\r\n\r\nexport function setNewUrlWithoutReload(url: string) {\r\n if (url) {\r\n window.history.pushState({ path: url }, '', url)\r\n }\r\n}\r\n\r\nconst LinkInfo: any = {\r\n usingHash: false,\r\n history: null\r\n}\r\n\r\nexport const initLink = (info: any) => {\r\n mergeObjIfExist(LinkInfo, info)\r\n console.warn('initLink:', LinkInfo)\r\n}\r\nexport const getHistory = () => {\r\n return LinkInfo.history\r\n}\r\nexport const getIsUsingHash = () => {\r\n return LinkInfo.usingHash\r\n}\r\nexport const openUrl = function (link: string, target: string = '_blank') {\r\n if (link) {\r\n if (link.startsWith('http')) {\r\n return window.open(link, target)\r\n } else if (link.indexOf('://') > -1) {\r\n return window.open(link, target)\r\n }\r\n }\r\n let _link = link\r\n //Tuy vao kieu blank hay self ma convert link theo hash khac nhau\r\n if (target === '_blank') {\r\n if (LinkInfo.usingHash === true) {\r\n _link = getHrefByUrlInHash(link)\r\n }\r\n return window.open(_link, target)\r\n } else {\r\n if (LinkInfo.usingHash === true) {\r\n _link = getLinkPushInHash(link)\r\n }\r\n return push(_link)\r\n }\r\n}\r\nexport const push = (link: string) => {\r\n if (LinkInfo.history) {\r\n LinkInfo.history.push(link)\r\n } else {\r\n window.location.href = link\r\n }\r\n}\r\nexport function getLinkPushInHash(url: string) {\r\n let _url = url\r\n if (url) {\r\n if (url.startsWith('/#/')) {\r\n _url = '/' + url.slice(3, url.length)\r\n } else if (url.startsWith('#/')) {\r\n _url = '/' + url.slice(2, url.length)\r\n }\r\n return _url\r\n }\r\n return _url\r\n}\r\nexport function getHrefByUrlInHash(url?: string) {\r\n if (url) {\r\n if (url.startsWith('http')) {\r\n return url\r\n } else if (url.startsWith('/#/')) {\r\n return url\r\n } else if (url.startsWith('/')) {\r\n return `/#${url}`\r\n }\r\n return `/#/${url}`\r\n }\r\n return '#'\r\n}\r\n","import { isJsonString, isObject, isString } from './Is'\r\nimport { json2Obj } from './Json'\r\nimport { mergeObjIfExist } from './Utils'\r\nimport { logNeedOveride } from './Log'\r\n\r\nexport const parseMsg = function (msg: any) {\r\n let _obj = {\r\n msg: '',\r\n ui: 'toast', //toast,alert,system\r\n type: 'success'\r\n }\r\n if (isString(msg)) {\r\n _obj.msg = msg\r\n if (isJsonString(msg)) {\r\n let _jsonObj = json2Obj(msg)\r\n if (_jsonObj) {\r\n mergeObjIfExist(_obj, _jsonObj)\r\n }\r\n } else if (msg.startsWith('[Warning]')) {\r\n _obj.type = 'warning'\r\n _obj.msg = msg.replace('[Warning]', '')\r\n } else if (msg.startsWith('[Error]')) {\r\n _obj.type = 'danger'\r\n _obj.msg = msg.replace('[Error]', '')\r\n }\r\n } else if (isObject(msg)) {\r\n mergeObjIfExist(_obj, msg)\r\n }\r\n return _obj\r\n}\r\n\r\nexport function initInnerRef(component: any) {\r\n if (component && component.props && component.props.innerRef) {\r\n component.props.innerRef(component)\r\n }\r\n}\r\n\r\n/**\r\n * Need overide in app\r\n */\r\n\r\nexport const HUI_NeedOveride = {\r\n showDialog(configDialog: any) {\r\n logNeedOveride(configDialog)\r\n },\r\n showToast(configToast: any) {\r\n logNeedOveride(configToast)\r\n },\r\n showMsg(configMsg: any, defaultObjMsg: any = {}) {\r\n logNeedOveride(configMsg, defaultObjMsg)\r\n },\r\n showLoadingScreen(configLoadingScreen: any) {\r\n logNeedOveride(configLoadingScreen)\r\n },\r\n showModal(configModal: any) {\r\n logNeedOveride(configModal)\r\n },\r\n showPhotoViewer(configPhotoViewer: any) {\r\n logNeedOveride(configPhotoViewer)\r\n }\r\n}\r\n\r\nexport function showDialog(configDialog: any) {\r\n HUI_NeedOveride.showDialog(configDialog)\r\n}\r\nexport function showToast(configToast: any) {\r\n HUI_NeedOveride.showToast(configToast)\r\n}\r\nexport function showMsg(configMsg: any, defaultObjMsg: any = {}) {\r\n HUI_NeedOveride.showMsg(configMsg, defaultObjMsg)\r\n}\r\nexport function showLoadingScreen(configLoadingScreen: any) {\r\n HUI_NeedOveride.showLoadingScreen(configLoadingScreen)\r\n}\r\nexport function showModal(configModal: any) {\r\n HUI_NeedOveride.showModal(configModal)\r\n}\r\nexport function showPhotoViewer(configPhotoViewer: any) {\r\n HUI_NeedOveride.showPhotoViewer(configPhotoViewer)\r\n}\r\nexport const hideInMyModalFromProps = (props: any) => {\r\n console.warn('hideInMyModalFromProps:', props)\r\n if (props && props.inMyModal && props.inMyModal.hide) {\r\n props.inMyModal.hide()\r\n }\r\n}\r\n","import { json2Obj } from './Json'\r\n\r\nconst More = {\r\n Cell: {\r\n Key: {\r\n fCanShow: 'fCanShow',\r\n hideOfIds: 'hideOfIds'\r\n },\r\n getConfigFromMore({ extraOfColumn, more, key, df }: any = {}) {\r\n let _more = more || More.Cell.getMore(extraOfColumn) || {}\r\n if (_more.hasOwnProperty(key)) {\r\n return _more[key]\r\n }\r\n return df\r\n },\r\n getMore(extraOfColumn: any, df: any = {}) {\r\n let _more = df\r\n if (extraOfColumn.Type) {\r\n if (extraOfColumn.Type.type) {\r\n _more = extraOfColumn.Type.type\r\n }\r\n if (extraOfColumn.Type.more) {\r\n _more = json2Obj(extraOfColumn.Type.more, {})\r\n }\r\n }\r\n return _more\r\n }\r\n }\r\n}\r\n\r\nexport default More\r\n","import { IHModules, IOneModule } from '../interface'\r\nconst Modules: IHModules = {\r\n list: [],\r\n moduleByKey: {},\r\n configModules: {},\r\n initModules(list: IOneModule[], configModules: any, HConfig: any) {\r\n Modules.list = list\r\n Modules.configModules = configModules\r\n if (Modules.list && Modules.list.length > 0) {\r\n for (let i = 0; i < Modules.list.length; i++) {\r\n let _oneModule = Modules.list[i]\r\n if (_oneModule) {\r\n let _moduleKey = ''\r\n if (_oneModule._key) {\r\n _moduleKey = _oneModule._key\r\n } else if (_oneModule.getMyKey) {\r\n _moduleKey = _oneModule.getMyKey()\r\n }\r\n if (_oneModule.runAfterInit) {\r\n _oneModule.runAfterInit(HConfig)\r\n }\r\n if (_moduleKey) {\r\n Modules.moduleByKey[_moduleKey] = _oneModule\r\n }\r\n }\r\n }\r\n }\r\n },\r\n getConfigModuleByKey(key: string) {\r\n return Modules.configModules[key]\r\n },\r\n //for one module\r\n initDefault(module: any = {}, listComponent: any = {}, opts: any = {}) {\r\n if (module && module._key) {\r\n Modules.addUI(module, listComponent)\r\n Modules.addRoutes(module, opts)\r\n Modules.registerFnList(module)\r\n } else {\r\n console.warn('missing module key', module)\r\n }\r\n },\r\n //add MyComponent\r\n addUI(module: any = {}, listComponent: any = {}) {\r\n if (module && module._key) {\r\n let _keys = Object.keys(listComponent)\r\n for (let k of _keys) {\r\n if (listComponent[k] && listComponent[k].init) {\r\n listComponent[k].init()\r\n }\r\n }\r\n }\r\n },\r\n //========== fnList\r\n ModuleFnList: {},\r\n registerFnList(module: any = {}) {\r\n if (module && module._key && module._fnList) {\r\n Modules.ModuleFnList[module._key] = module._fnList\r\n }\r\n },\r\n runFunctionInModuleFnList(moduleKey = '', fnName = '', args = []) {\r\n if (\r\n Modules.ModuleFnList[moduleKey] &&\r\n Modules.ModuleFnList[moduleKey][fnName]\r\n ) {\r\n Modules.ModuleFnList[moduleKey][fnName].apply(null, args)\r\n } else {\r\n console.warn(\r\n 'Missing fn module',\r\n moduleKey,\r\n fnName,\r\n Modules.ModuleFnList[moduleKey]\r\n )\r\n }\r\n },\r\n //========== routes\r\n addRoutes(module: any = {}, opts: any = {}) {\r\n if (module && module._key && module._routes) {\r\n var fnAddRoutes = null\r\n if (opts && opts.fnAddRoutes) {\r\n fnAddRoutes = opts.fnAddRoutes\r\n }\r\n if (fnAddRoutes) {\r\n fnAddRoutes(module._routes)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Modules\r\n","import { isFunction } from './Is'\r\nimport { randomHextColor } from './Color'\r\nconst FakeData = {\r\n getLorem() {\r\n return \"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.\"\r\n },\r\n getLoremWord() {\r\n return FakeData.getRandomWordOfString(FakeData.getLorem())\r\n },\r\n getLoremWithRandom(max: number = 20) {\r\n return new Array(max)\r\n .fill(0)\r\n .map(() => {\r\n return FakeData.getLoremWord()\r\n })\r\n .join(' ')\r\n },\r\n getRandomWordOfString(text: string) {\r\n let _arr = text.split(' ')\r\n let _total = _arr.length\r\n if (_arr.length > 0) {\r\n return _arr[FakeData.getNumberInt(0, _total - 1)]\r\n }\r\n return ''\r\n },\r\n getName() {},\r\n getNumberInt(min = 0, max = 1000) {\r\n return Math.floor(FakeData.getNumber(min, max))\r\n },\r\n getNumber(min = 0, max = 1000) {\r\n return Math.random() * (max - min) + min\r\n },\r\n getDateUTCTime(pastDay: 365, futureDay: 0) {\r\n let _current = new Date().getTime()\r\n let _min = _current - pastDay * 1000 * 60 * 60 * 24\r\n let _max = _current + futureDay * 1000 * 60 * 60 * 24\r\n return FakeData.getNumberInt(_min, _max)\r\n },\r\n getAge() {\r\n return FakeData.getNumberInt(1, 99)\r\n },\r\n getHextColor() {\r\n return randomHextColor()\r\n },\r\n getArrayObj(fnGetObj: any, total = 10) {\r\n let _arr = []\r\n if (fnGetObj && isFunction(fnGetObj)) {\r\n for (let i = 0; i < total; i++) {\r\n _arr.push(fnGetObj(i))\r\n }\r\n }\r\n return _arr\r\n },\r\n getSourceData(total = 10) {\r\n return FakeData.getArrayObj((index: any) => {\r\n return {\r\n Value: `${index}`,\r\n Text: ''\r\n }\r\n }, total)\r\n },\r\n test() {\r\n console.warn(FakeData)\r\n }\r\n}\r\n\r\nexport default FakeData\r\n","import { isNotNullOrEmpty, isObject, isString } from './Is'\r\nimport { logW } from './Log'\r\nconst HValid = {\r\n valid(type: string, valueCheck: any, value: any, opts: any = {}) {\r\n let _typeRule: string = type\r\n if (_typeRule && HValid.Types[_typeRule] && HValid.Types[_typeRule].check) {\r\n let _valueCheck = valueCheck\r\n if (isObject(_valueCheck)) {\r\n _valueCheck = _valueCheck.value\r\n }\r\n return HValid.Types[_typeRule].check(_valueCheck, value, opts)\r\n } else {\r\n logW('Missing rule of check function in rule', type, value, opts)\r\n }\r\n return false\r\n },\r\n validAllRulesOfValue(rules: any = {}, value: any) {\r\n let _result: any = true\r\n let _keys = Object.keys(rules)\r\n if (_keys && _keys.length > 0) {\r\n for (let k of _keys) {\r\n let _type = k\r\n let _rsType = HValid.valid(_type, rules[k], value, {})\r\n if (_rsType !== true) {\r\n if (_result === true) {\r\n _result = {}\r\n }\r\n _result[_type] = _rsType\r\n }\r\n }\r\n }\r\n return _result\r\n },\r\n Types: {\r\n required: {\r\n check(valueCheck: any = true, value: any, opts: any = {}) {\r\n if (valueCheck === true && isNotNullOrEmpty(value)) {\r\n return true\r\n }\r\n return {\r\n type: 'required',\r\n msg: opts.msg || 'valid failed'\r\n }\r\n }\r\n },\r\n minLength: {\r\n check(valueCheck: any = 0, value: any, opts: any = {}) {\r\n if (isString(value) && value.length > valueCheck) {\r\n return true\r\n }\r\n return {\r\n type: 'minLength',\r\n msg: opts.msg || 'valid failed'\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default HValid\r\n","import LodashGet from 'lodash/get'\r\nimport LodashSet from 'lodash/set'\r\nexport const get = LodashGet\r\nexport const set = LodashSet\r\nexport const CF = {}\r\n\r\nexport const setCF = (key: string | any, value: any) => {\r\n if (key) {\r\n CF[key] = value\r\n }\r\n}\r\n\r\nexport const setCFMultiObj = (obj: any) => {\r\n if (obj) {\r\n for (let k of Object.keys(obj)) {\r\n CF[k] = obj[k]\r\n }\r\n }\r\n}\r\n\r\nexport const getCF = (key: string | any) => {\r\n if (key) {\r\n return CF[key]\r\n }\r\n return null\r\n}\r\n\r\nexport const setCFMultiLevel = (key: string | any, value: any) => {\r\n if (key) {\r\n set(CF, key, value)\r\n }\r\n}\r\n\r\nexport const getCFMultiLevel = (key: string | any) => {\r\n if (key) {\r\n return get(CF, key)\r\n }\r\n return null\r\n}\r\n","'use strict'\r\n/*eslint-disable no-unused-expressions */\r\nvar has = Object.prototype.hasOwnProperty,\r\n prefix = '~'\r\n\r\n/**\r\n * Constructor to create a storage for our `EE` objects.\r\n * An `Events` instance is a plain object whose properties are event names.\r\n *\r\n * @constructor\r\n * @private\r\n */\r\nfunction Events() {}\r\n\r\n//\r\n// We try to not inherit from `Object.prototype`. In some engines creating an\r\n// instance in this way is faster than calling `Object.create(null)` directly.\r\n// If `Object.create(null)` is not supported we prefix the event names with a\r\n// character to make sure that the built-in object properties are not\r\n// overridden or used as an attack vector.\r\n//\r\nif (Object.create) {\r\n Events.prototype = Object.create(null)\r\n\r\n //\r\n // This hack is needed because the `__proto__` property is still inherited in\r\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\r\n //\r\n if (!new Events().__proto__) prefix = false\r\n}\r\n\r\n/**\r\n * Representation of a single event listener.\r\n *\r\n * @param {Function} fn The listener function.\r\n * @param {*} context The context to invoke the listener with.\r\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\r\n * @constructor\r\n * @private\r\n */\r\nfunction EE(fn, context, once) {\r\n this.fn = fn\r\n this.context = context\r\n this.once = once || false\r\n}\r\n\r\n/**\r\n * Add a listener for a given event.\r\n *\r\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\r\n * @param {(String|Symbol)} event The event name.\r\n * @param {Function} fn The listener function.\r\n * @param {*} context The context to invoke the listener with.\r\n * @param {Boolean} once Specify if the listener is a one-time listener.\r\n * @returns {EventEmitter}\r\n * @private\r\n */\r\nfunction addListener(emitter, event, fn, context, once) {\r\n if (typeof fn !== 'function') {\r\n throw new TypeError('The listener must be a function')\r\n }\r\n\r\n var listener = new EE(fn, context || emitter, once),\r\n evt = prefix ? prefix + event : event\r\n\r\n if (!emitter._events[evt])\r\n (emitter._events[evt] = listener), emitter._eventsCount++\r\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener)\r\n else emitter._events[evt] = [emitter._events[evt], listener]\r\n\r\n return emitter\r\n}\r\n\r\n/**\r\n * Clear event by name.\r\n *\r\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\r\n * @param {(String|Symbol)} evt The Event name.\r\n * @private\r\n */\r\nfunction clearEvent(emitter, evt) {\r\n if (--emitter._eventsCount === 0) emitter._events = new Events()\r\n else delete emitter._events[evt]\r\n}\r\n\r\n/**\r\n * Minimal `EventEmitter` interface that is molded against the Node.js\r\n * `EventEmitter` interface.\r\n *\r\n * @constructor\r\n * @public\r\n */\r\nfunction EventEmitter() {\r\n this._events = new Events()\r\n this._eventsCount = 0\r\n}\r\n\r\n/**\r\n * Return an array listing the events for which the emitter has registered\r\n * listeners.\r\n *\r\n * @returns {Array}\r\n * @public\r\n */\r\nEventEmitter.prototype.eventNames = function eventNames() {\r\n var names = [],\r\n events,\r\n name\r\n\r\n if (this._eventsCount === 0) return names\r\n\r\n for (name in (events = this._events)) {\r\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name)\r\n }\r\n\r\n if (Object.getOwnPropertySymbols) {\r\n return names.concat(Object.getOwnPropertySymbols(events))\r\n }\r\n\r\n return names\r\n}\r\n\r\n/**\r\n * Return the listeners registered for a given event.\r\n *\r\n * @param {(String|Symbol)} event The event name.\r\n * @returns {Array} The registered listeners.\r\n * @public\r\n */\r\nEventEmitter.prototype.listeners = function listeners(event) {\r\n var evt = prefix ? prefix + event : event,\r\n handlers = this._events[evt]\r\n\r\n if (!handlers) return []\r\n if (handlers.fn) return [handlers.fn]\r\n\r\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\r\n ee[i] = handlers[i].fn\r\n }\r\n\r\n return ee\r\n}\r\n\r\n/**\r\n * Return the number of listeners listening to a given event.\r\n *\r\n * @param {(String|Symbol)} event The event name.\r\n * @returns {Number} The number of listeners.\r\n * @public\r\n */\r\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\r\n var evt = prefix ? prefix + event : event,\r\n listeners = this._events[evt]\r\n\r\n if (!listeners) return 0\r\n if (listeners.fn) return 1\r\n return listeners.length\r\n}\r\n\r\n/**\r\n * Calls each of the listeners registered for a given event.\r\n *\r\n * @param {(String|Symbol)} event The event name.\r\n * @returns {Boolean} `true` if the event had listeners, else `false`.\r\n * @public\r\n */\r\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\r\n var evt = prefix ? prefix + event : event\r\n\r\n if (!this._events[evt]) return false\r\n\r\n var listeners = this._events[evt],\r\n len = arguments.length,\r\n args,\r\n i\r\n\r\n if (listeners.fn) {\r\n if (listeners.once)\r\n this.removeListener(event, listeners.fn, undefined, true)\r\n\r\n switch (len) {\r\n case 1:\r\n return listeners.fn.call(listeners.context), true\r\n case 2:\r\n return listeners.fn.call(listeners.context, a1), true\r\n case 3:\r\n return listeners.fn.call(listeners.context, a1, a2), true\r\n case 4:\r\n return listeners.fn.call(listeners.context, a1, a2, a3), true\r\n case 5:\r\n return listeners.fn.call(listeners.context, a1, a2, a3, a4), true\r\n case 6:\r\n return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true\r\n }\r\n\r\n for (i = 1, args = new Array(len - 1); i < len; i++) {\r\n args[i - 1] = arguments[i]\r\n }\r\n\r\n listeners.fn.apply(listeners.context, args)\r\n } else {\r\n var length = listeners.length,\r\n j\r\n\r\n for (i = 0; i < length; i++) {\r\n if (listeners[i].once)\r\n this.removeListener(event, listeners[i].fn, undefined, true)\r\n\r\n switch (len) {\r\n case 1:\r\n listeners[i].fn.call(listeners[i].context)\r\n break\r\n case 2:\r\n listeners[i].fn.call(listeners[i].context, a1)\r\n break\r\n case 3:\r\n listeners[i].fn.call(listeners[i].context, a1, a2)\r\n break\r\n case 4:\r\n listeners[i].fn.call(listeners[i].context, a1, a2, a3)\r\n break\r\n default:\r\n if (!args)\r\n for (j = 1, args = new Array(len - 1); j < len; j++) {\r\n args[j - 1] = arguments[j]\r\n }\r\n\r\n listeners[i].fn.apply(listeners[i].context, args)\r\n }\r\n }\r\n }\r\n\r\n return true\r\n}\r\n\r\n/**\r\n * Add a listener for a given event.\r\n *\r\n * @param {(String|Symbol)} event The event name.\r\n * @param {Function} fn The listener function.\r\n * @param {*} [context=this] The context to invoke the listener with.\r\n * @returns {EventEmitter} `this`.\r\n * @public\r\n */\r\nEventEmitter.prototype.on = function on(event, fn, context) {\r\n return addListener(this, event, fn, context, false)\r\n}\r\n\r\n/**\r\n * Add a one-time listener for a given event.\r\n *\r\n * @param {(String|Symbol)} event The event name.\r\n * @param {Function} fn The listener function.\r\n * @param {*} [context=this] The context to invoke the listener with.\r\n * @returns {EventEmitter} `this`.\r\n * @public\r\n */\r\nEventEmitter.prototype.once = function once(event, fn, context) {\r\n return addListener(this, event, fn, context, true)\r\n}\r\n\r\n/**\r\n * Remove the listeners of a given event.\r\n *\r\n * @param {(String|Symbol)} event The event name.\r\n * @param {Function} fn Only remove the listeners that match this function.\r\n * @param {*} context Only remove the listeners that have this context.\r\n * @param {Boolean} once Only remove one-time listeners.\r\n * @returns {EventEmitter} `this`.\r\n * @public\r\n */\r\nEventEmitter.prototype.removeListener = function removeListener(\r\n event,\r\n fn,\r\n context,\r\n once\r\n) {\r\n var evt = prefix ? prefix + event : event\r\n\r\n if (!this._events[evt]) return this\r\n if (!fn) {\r\n clearEvent(this, evt)\r\n return this\r\n }\r\n\r\n var listeners = this._events[evt]\r\n\r\n if (listeners.fn) {\r\n if (\r\n listeners.fn === fn &&\r\n (!once || listeners.once) &&\r\n (!context || listeners.context === context)\r\n ) {\r\n clearEvent(this, evt)\r\n }\r\n } else {\r\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\r\n if (\r\n listeners[i].fn !== fn ||\r\n (once && !listeners[i].once) ||\r\n (context && listeners[i].context !== context)\r\n ) {\r\n events.push(listeners[i])\r\n }\r\n }\r\n\r\n //\r\n // Reset the array, or remove it completely if we have no more listeners.\r\n //\r\n if (events.length)\r\n this._events[evt] = events.length === 1 ? events[0] : events\r\n else clearEvent(this, evt)\r\n }\r\n\r\n return this\r\n}\r\n\r\n/**\r\n * Remove all listeners, or those of the specified event.\r\n *\r\n * @param {(String|Symbol)} [event] The event name.\r\n * @returns {EventEmitter} `this`.\r\n * @public\r\n */\r\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\r\n var evt\r\n\r\n if (event) {\r\n evt = prefix ? prefix + event : event\r\n if (this._events[evt]) clearEvent(this, evt)\r\n } else {\r\n this._events = new Events()\r\n this._eventsCount = 0\r\n }\r\n\r\n return this\r\n}\r\n\r\n//\r\n// Alias methods names because people roll like that.\r\n//\r\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener\r\nEventEmitter.prototype.addListener = EventEmitter.prototype.on\r\n\r\n//\r\n// Expose the prefix.\r\n//\r\nEventEmitter.prefixed = prefix\r\n\r\n//\r\n// Allow `EventEmitter` to be imported as module namespace.\r\n//\r\nEventEmitter.EventEmitter = EventEmitter\r\n\r\n//\r\n// Expose the module.\r\n//\r\n// if ('undefined' !== typeof module) {\r\n// module.exports = EventEmitter;\r\n// }\r\n\r\nconst HEE = new EventEmitter()\r\nexport default HEE\r\n","import ConfigPage from '../../configs/ConfigPage'\r\nfunction MyPage(props: any) {\r\n const configPage = ConfigPage.createFromConfigPageServer(props.configPage)\r\n const MyPageTypeFn = configPage.getMyPageFn()\r\n return MyPageTypeFn(props)\r\n}\r\n\r\nexport default MyPage\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyUIHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyUIHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(MyUIHelpers.Types, listWithKey)\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyUIHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n }\r\n}\r\n\r\nexport default MyUIHelpers\r\n","import * as React from 'react'\r\nimport MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyUI(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return \r\n // return MyTypeFn(props)\r\n}\r\n\r\nexport default MyUI\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyCardHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyCardHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyCardHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyCardHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n }\r\n}\r\n\r\nexport default MyCardHelpers\r\n","import MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyCard(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return MyTypeFn(props)\r\n}\r\n\r\nexport default MyCard\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyLayoutHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyLayoutHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyLayoutHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyLayoutHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n }\r\n}\r\n\r\nexport default MyLayoutHelpers\r\n","import MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyLayout(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return MyTypeFn(props)\r\n}\r\n\r\nexport default MyLayout\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyTableCellHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyTableCellHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyTableCellHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesWrap(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyTableCellHelpers.TypesWrap, key, fnUI)\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n },\r\n TypesWrap: {\r\n _empty: MyComponentTypes.TypesWrap._empty\r\n }\r\n //more\r\n}\r\n\r\nexport default MyTableCellHelpers\r\n","import MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyTableCell(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return MyTypeFn(props)\r\n}\r\n\r\nexport default MyTableCell\r\n","import MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyTableFilterControl(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return MyTypeFn(props)\r\n}\r\n\r\nexport default MyTableFilterControl\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyFormControlHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyFormControlHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyFormControlHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyFormControlHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesWrap(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyFormControlHelpers.TypesWrap, key, fnUI)\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n },\r\n TypesWrap: {\r\n _empty: MyComponentTypes.TypesWrap._empty\r\n }\r\n}\r\n\r\nexport default MyFormControlHelpers\r\n","import MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyFormControl(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return MyTypeFn(props)\r\n}\r\n\r\nexport default MyFormControl\r\n","import MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyButton(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return MyTypeFn(props)\r\n}\r\n\r\nexport default MyButton\r\n","import * as React from 'react'\r\nimport MyComponentTypes from '../MyComponent/Types'\r\nconst MyLoadingHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyLoadingHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyLoadingHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyLoadingHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty,\r\n _default: (props: any) => {\r\n return (\r\n \r\n )\r\n },\r\n _defaultlazy: (props: any) => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n }\r\n}\r\n\r\nexport default MyLoadingHelpers\r\n","import MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyLoading(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return MyTypeFn(props)\r\n}\r\n\r\nexport default MyLoading\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyBaseHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyBaseHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyBaseHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyBaseHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n }\r\n}\r\n\r\nexport default MyBaseHelpers\r\n","import * as React from 'react'\r\nimport MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyBase(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return \r\n}\r\n\r\nexport default MyBase\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyLibHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyLibHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyLibHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyLibHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n }\r\n}\r\n\r\nexport default MyLibHelpers\r\n","import * as React from 'react'\r\nimport MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyLib(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return \r\n}\r\n\r\nexport default MyLib\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyTableHeaderHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyTableHeaderHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyTableHeaderHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyTableHeaderHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n }\r\n}\r\n\r\nexport default MyTableHeaderHelpers\r\n","import MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyTableHeader(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return MyTypeFn(props)\r\n}\r\n\r\nexport default MyTableHeader\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyChartHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyChartHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(MyChartHelpers.Types, listWithKey)\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyChartHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n }\r\n}\r\n\r\nexport default MyChartHelpers\r\n","import * as React from 'react'\r\nimport MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyChart(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return \r\n // return MyTypeFn(props)\r\n}\r\n\r\nexport default MyChart\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MySVGHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MySVGHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MySVGHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MySVGHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n }\r\n}\r\n\r\nexport default MySVGHelpers\r\n","import MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MySVG(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return MyTypeFn(props)\r\n}\r\n\r\nexport default MySVG\r\n","import MyComponentTypes from '../MyComponent/Types'\r\nconst MyControlHelpers = {\r\n addTypes(key: string, fnUI: any) {\r\n MyComponentTypes.addTypesGeneric(MyControlHelpers.Types, key, fnUI)\r\n },\r\n addTypesFromListLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListLazy(\r\n MyControlHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n addTypesFromListWithoutLazy(listWithKey: any) {\r\n MyComponentTypes.addTypesGenericFromListWithoutLazy(\r\n MyControlHelpers.Types,\r\n listWithKey\r\n )\r\n },\r\n Types: {\r\n _empty: MyComponentTypes.Types._empty\r\n }\r\n}\r\n\r\nexport default MyControlHelpers\r\n","import MyComponentHelpers from '../MyComponent/Helpers'\r\nimport MyHelpers from './Helpers'\r\nfunction MyControl(props: any) {\r\n const MyTypeFn = MyComponentHelpers.getMyComponentTypeFn(\r\n MyHelpers.Types,\r\n props\r\n )\r\n return MyTypeFn(props)\r\n}\r\n\r\nexport default MyControl\r\n","import React from 'react'\r\n\r\n//mac dinh se co\r\n//dau vao\r\n//dau ra\r\ninterface IPropsControlOpts {\r\n onUpdateValue?: any\r\n fieldName?: any\r\n format?: any\r\n defaultCheckAll?: boolean\r\n handleUpdateDefaultValues?: any\r\n getDefaultValues?: any\r\n multi?: boolean\r\n inline?: boolean\r\n sourceData?: any\r\n getSourceList?: any\r\n sourceKey?: string\r\n configPagination?: any //config phan trang neu co su dung list\r\n dataType?: string //Dung cho kieu array, nhung muon nhan string\r\n charSeparator?: string //Dung cho kieu array, nhung muon nhan string, mac dinh la ,\r\n configSearch?: any //config search khi can dung search trong control\r\n}\r\ninterface IProps {\r\n defaultValue?: any\r\n value?: any\r\n controlOpts?: IPropsControlOpts | any\r\n}\r\nclass MyControl_Ext extends React.Component {\r\n getDefaultValue = () => {\r\n return this.props.defaultValue\r\n }\r\n getDefaultValueWhenAllThingNull: any = () => {\r\n return ''\r\n }\r\n // onUpdateValue = () => {}\r\n getThisValue = () => {\r\n let _value = this.getDefaultValueWhenAllThingNull()\r\n if (this.getIsUnControlled()) {\r\n _value = this.state.value\r\n } else {\r\n _value = this.props.value\r\n }\r\n return this.getThisValueByCheckValid(_value)\r\n }\r\n getThisValueByCheckValid: any = (value: any) => {\r\n return value\r\n }\r\n getIsUnControlled = () => {\r\n if (this.props.hasOwnProperty('value')) {\r\n return false\r\n }\r\n return true\r\n }\r\n changeValue = (value: any, cb: any) => {\r\n const onUpdateValue = this.getOnUpdateValue()\r\n if (this.getIsUnControlled()) {\r\n this.setState(\r\n {\r\n value: value\r\n },\r\n () => {\r\n if (onUpdateValue) {\r\n onUpdateValue(value)\r\n }\r\n if (cb) {\r\n cb(this.state.value)\r\n }\r\n }\r\n )\r\n } else {\r\n if (onUpdateValue) {\r\n onUpdateValue(value)\r\n } else {\r\n console.warn('Missing onUpdateValue when controlled control')\r\n }\r\n }\r\n }\r\n //get from controlOpts\r\n getControlOpts = () => {\r\n const { controlOpts } = this.props\r\n return controlOpts || {}\r\n }\r\n getFieldName = () => {\r\n const controlOpts = this.getControlOpts()\r\n return controlOpts.fieldName || ''\r\n }\r\n getFormat = () => {\r\n const controlOpts = this.getControlOpts()\r\n return controlOpts.format\r\n }\r\n getOnUpdateValue = () => {\r\n const { controlOpts } = this.props\r\n if (controlOpts && controlOpts.onUpdateValue) {\r\n return controlOpts.onUpdateValue\r\n }\r\n return () => {}\r\n }\r\n render() {\r\n return
\r\n }\r\n}\r\n\r\nexport default MyControl_Ext\r\n","import React from 'react'\r\nimport { isArray } from 'src/helpers/Is'\r\nimport MyControl_Ext from './MyControl_Ext'\r\nclass MyControl_Ext_Select extends MyControl_Ext {\r\n constructor(props: any) {\r\n super(props)\r\n this.state = {\r\n value: null //chua thay doi gia tri\r\n }\r\n //init default\r\n if (\r\n this.props.controlOpts?.defaultCheckAll === true &&\r\n this.props.controlOpts.handleUpdateDefaultValues\r\n ) {\r\n let _source = this.getSourceData() || []\r\n let _objDefault = {\r\n [this.getFieldName()]: _source.map((v: any) => {\r\n return v.Value\r\n })\r\n }\r\n console.warn('handleUpdateDefaultValues:', _source, _objDefault)\r\n this.props.controlOpts.handleUpdateDefaultValues(_objDefault)\r\n this.forceUpdate()\r\n var a =\r\n this.props.controlOpts.getDefaultValues &&\r\n this.props.controlOpts.getDefaultValues()\r\n console.warn('handleUpdateDefaultValues after:', a)\r\n }\r\n }\r\n getDefaultValueWhenAllThingNull = () => {\r\n return []\r\n }\r\n getThisValueByCheckValid = (value: any) => {\r\n if (isArray(value)) {\r\n return value\r\n }\r\n return this.getDefaultValueWhenAllThingNull()\r\n }\r\n getMulti = () => {\r\n const { controlOpts } = this.props\r\n if (controlOpts && controlOpts.multi === false) {\r\n return false\r\n }\r\n return true //default true\r\n }\r\n getInLine = () => {\r\n const { controlOpts } = this.props\r\n if (controlOpts && controlOpts.inline === true) {\r\n return true\r\n }\r\n return false //default false\r\n }\r\n getSourceList = () => {\r\n const { controlOpts } = this.props\r\n if (controlOpts && controlOpts.getSourceList) {\r\n return controlOpts.getSourceList()\r\n }\r\n return {}\r\n }\r\n getSourceData = () => {\r\n const { controlOpts } = this.props\r\n if (controlOpts) {\r\n if (controlOpts.sourceData) {\r\n return controlOpts.sourceData\r\n } else if (controlOpts.sourceKey && controlOpts.getSourceList) {\r\n return this.getSourceList[controlOpts.sourceKey]\r\n }\r\n }\r\n return []\r\n }\r\n getAllSelected = () => {\r\n const thisValue = this.getThisValue()\r\n let _sourceData = this.getSourceData()\r\n if (\r\n thisValue !== null &&\r\n thisValue.length > 0 &&\r\n _sourceData &&\r\n _sourceData.length > 0\r\n ) {\r\n return _sourceData.filter((v: any) => {\r\n return this.isChecked(v)\r\n })\r\n }\r\n return []\r\n }\r\n isChecked = (option: any) => {\r\n const thisValue = this.getThisValue()\r\n if (thisValue !== null) {\r\n if (thisValue.indexOf(option.Value) > -1) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n clearAll = () => {\r\n this.changeValue([], () => {})\r\n }\r\n selectAll = () => {\r\n let _sourceData = this.getSourceData()\r\n let _value = []\r\n if (_sourceData && _sourceData.length > 0) {\r\n for (let i = 0; i < _sourceData.length; i++) {\r\n _value.push(_sourceData[i].Value)\r\n }\r\n }\r\n this.changeValue(_value, () => {})\r\n }\r\n onCheckOption = (option: any) => {\r\n let _value = this.getThisValue()\r\n const isMulti = this.getMulti()\r\n console.warn('onCheckOption:', isMulti, _value)\r\n if (isMulti === false) {\r\n _value = [option.Value]\r\n } else {\r\n if (this.isChecked(option)) {\r\n let _index = _value.indexOf(option.Value)\r\n _value.splice(_index, 1)\r\n } else {\r\n _value.push(option.Value)\r\n }\r\n }\r\n this.changeValue(_value, () => {})\r\n }\r\n render() {\r\n return
\r\n }\r\n}\r\n\r\nexport default MyControl_Ext_Select\r\n","import { isObject, isString } from 'src/helpers/Is'\r\nimport { getTextWB } from 'src/helpers/Color'\r\nimport { get } from 'src/helpers/Utils'\r\nimport HConstant from 'src/helpers/Constants'\r\nimport { getCF } from 'src/helpers/CF'\r\ninterface IPropsOfCellType {\r\n extra: any\r\n row: any\r\n more?: any\r\n defaultStyle?: any\r\n defaultValue?: any\r\n custom?: any\r\n disabled?: any\r\n key?: any\r\n fnList?: any\r\n}\r\nexport const getMoreInType = (props: IPropsOfCellType) => {\r\n const extra = props.extra\r\n let _more = {}\r\n if (extra != null) {\r\n let _type = extra.Type\r\n try {\r\n if (_type != null && _type.more) {\r\n _more = JSON.parse(_type.more)\r\n }\r\n } catch (error) {\r\n console.warn('Parser json more in Type error:', error, _type)\r\n }\r\n }\r\n return _more\r\n}\r\nexport const getExtraStyle = (props: IPropsOfCellType) => {\r\n const extra = props.extra\r\n const row = props.row\r\n const custom = props.custom\r\n const disabled = props.disabled\r\n let _style = props.defaultStyle || {}\r\n if (extra != null) {\r\n let _styleEx = extra.Style\r\n if (_styleEx != null) {\r\n if (isString(_styleEx) == true) {\r\n try {\r\n _style = Object.assign(_style, JSON.parse(_styleEx))\r\n } catch (error) {\r\n console.log('getExtraStyle error:', _style, error)\r\n }\r\n } else if (isObject(_styleEx) == true) {\r\n _style = Object.assign(_style, _styleEx)\r\n }\r\n }\r\n if (extra.Type != null && row != null) {\r\n if (extra.Type.bgF != null) {\r\n if (row[extra.Type.bgF] != null) {\r\n let _color = getTextWB(row[extra.Type.bgF])\r\n _style = Object.assign(_style, {\r\n background: row[extra.Type.bgF],\r\n color: _color\r\n })\r\n } else if (\r\n extra.Type.bgF.startsWith('#') ||\r\n extra.Type.bgF.startsWith('linear-gradient')\r\n ) {\r\n let _color = getTextWB(extra.Type.bgF)\r\n _style = Object.assign(_style, {\r\n background: extra.Type.bgF,\r\n color: _color\r\n })\r\n }\r\n }\r\n if (extra.Type.colorF != null) {\r\n if (row[extra.Type.colorF] != null) {\r\n _style = Object.assign(_style, { color: row[extra.Type.colorF] })\r\n } else if (extra.Type.colorF.startsWith('#')) {\r\n _style = Object.assign(_style, { color: extra.Type.colorF })\r\n }\r\n }\r\n }\r\n let _more = getMoreInType({ extra, row }) as any\r\n // console.log('_more:',_more);\r\n if (_more) {\r\n try {\r\n if (_more.style) {\r\n let _styleInMore = _more.style || {}\r\n if (_styleInMore) {\r\n _style = Object.assign(_style, _styleInMore)\r\n }\r\n }\r\n if (_more.colorF != null) {\r\n if (row[_more.colorF] != null) {\r\n _style = Object.assign(_style, { color: row[_more.colorF] })\r\n }\r\n }\r\n } catch (error) {}\r\n }\r\n }\r\n // console.log('getExtraStyle:',extra,_style);\r\n if (row && row.StyleRow && typeof row.StyleRow == 'object') {\r\n _style = Object.assign(_style, row.StyleRow)\r\n }\r\n if (row && row.UI_StyleRow) {\r\n if (typeof row.UI_StyleRow == 'object') {\r\n _style = Object.assign(_style, row.UI_StyleRow)\r\n } else if (typeof row.UI_StyleRow == 'string') {\r\n try {\r\n let _styleRow = JSON.parse(row.UI_StyleRow)\r\n if (_styleRow) {\r\n _style = Object.assign(_style, _styleRow)\r\n }\r\n } catch (error) {\r\n console.warn('Error parse UI_StyleRow', error)\r\n }\r\n }\r\n }\r\n if (custom) {\r\n _style = Object.assign(custom, _style)\r\n }\r\n\r\n //check disable\r\n if (disabled != null) {\r\n if (\r\n _style.backgroundColor == null &&\r\n _style.background == null &&\r\n _style.backgroundImage == null\r\n ) {\r\n if (disabled == true) {\r\n _style.background = 'transparent'\r\n } else {\r\n _style.background = 'white'\r\n }\r\n }\r\n }\r\n return _style\r\n}\r\nexport const getExtraClassName = (props: IPropsOfCellType) => {\r\n const extra = props.extra\r\n const row = props.row\r\n const more = props.more || getMoreInType(props)\r\n let _className = ''\r\n if (\r\n getConfigTrueByAllLevel({\r\n key: HConstant.AppConfig.showClassFieldOnCell,\r\n extra,\r\n row,\r\n more\r\n })\r\n ) {\r\n let _fieldName = get(extra, 'fieldName')\r\n _className += ` col-${_fieldName}`\r\n }\r\n if (extra != null) {\r\n if (extra.ClassName) {\r\n _className += ` ${extra.ClassName}`\r\n }\r\n }\r\n if (more) {\r\n if (more.className) {\r\n _className += ` ${more.className}`\r\n }\r\n if (extra.fieldName && more.classNameWithColField != null) {\r\n if (more.classNameWithColField === true) {\r\n _className += ` col-${extra.fieldName}`\r\n } else {\r\n _className += ` ${more.classNameWithColField}-${extra.fieldName}`\r\n }\r\n }\r\n }\r\n return _className\r\n}\r\n\r\nexport const getConfigTrueByAllLevel = (props: IPropsOfCellType) => {\r\n const extra = props.extra\r\n const row = props.row\r\n const more = props.more || getMoreInType(props)\r\n const key = props.key\r\n const _configInTableConfig = getTableConfig({\r\n extra,\r\n row,\r\n more,\r\n key\r\n })\r\n if (more && more[key] === true) {\r\n // console.warn(\"more:\",more)\r\n return true\r\n } else if (_configInTableConfig === true) {\r\n // console.warn(\"_configInTableConfig:\",_configInTableConfig)\r\n return true\r\n } else if (getCF(key) === true) {\r\n // console.warn(\"AppConfig:\",HConfig)\r\n return true\r\n }\r\n return false\r\n}\r\nexport const getTableConfig = (props: IPropsOfCellType) => {\r\n const fnList = props.fnList\r\n let _value = props.defaultValue\r\n let _fnList = fnList || getFnList(props)\r\n if (_fnList && _fnList.fnGetTableConfig) {\r\n _value = _fnList.fnGetTableConfig(props.key, props.defaultValue)\r\n }\r\n return _value\r\n}\r\n\r\nexport const getFnList = (props: IPropsOfCellType) => {\r\n const extra = props.extra\r\n const row = props.row\r\n const more = props.more || getMoreInType(props)\r\n let _fnList = {}\r\n if (extra != null) {\r\n _fnList = extra.fnList || {}\r\n let _more = more\r\n return {\r\n ..._fnList,\r\n ...{\r\n fncGetRow: () => {\r\n return row\r\n },\r\n fncGetMore: () => {\r\n return _more\r\n },\r\n fncGetConfigByKeyInMore: (key: string) => {\r\n return More.getConfigByKeyInMore({ extra, row, more: _more, key })\r\n },\r\n fncGetQuery: () => {\r\n return More.getQuery({ extra, row, more: _more })\r\n },\r\n fncNeedReload: (response: any) => {\r\n return More.needReload({ extra, row, more: _more, response })\r\n }\r\n }\r\n }\r\n }\r\n return _fnList\r\n}\r\nexport const More = {\r\n getTextDisplay: (props: IPropsOfCellType) => {\r\n return props\r\n },\r\n getConfigByKeyInMore: (props: IPropsOfCellType) => {\r\n return props\r\n },\r\n getQuery: (props: IPropsOfCellType) => {\r\n return props\r\n },\r\n needReload: (opts: any) => {\r\n return opts\r\n }\r\n}\r\n","// import * as React from 'react'\r\n// import styles from './styles.module.css'\r\nimport CPagination from './configs/ConfigPagination'\r\nimport CSuppense from './components/MyComponent/CSuppense'\r\nimport CErrorBoundary from './components/MyComponent/CErrorBoundary'\r\nimport ConfigPage from './configs/ConfigPage'\r\nimport ConfigSearch from './configs/ConfigSearch'\r\n\r\nimport OnePage from './model/OnePage'\r\nimport OneTableCell from './model/OneTableCell'\r\nimport OneFilter from './model/OneFilter'\r\nimport OneButton from './model/OneButton'\r\nimport OneTableFilterControl from './model/OneTableFilterControl'\r\nimport HFormat from './helpers/Format'\r\nimport * as HUtils from './helpers/Utils'\r\nimport * as HLink from './helpers/Link'\r\nimport * as HLog from './helpers/Log'\r\nimport * as HJson from './helpers/Json'\r\nimport * as HIs from './helpers/Is'\r\nimport * as HUI from './helpers/UI'\r\nimport * as HRegex from './helpers/Regex'\r\nimport HFilter from './helpers/Filter'\r\nimport HMore from './helpers/More'\r\nimport * as HOptions from './helpers/Options'\r\nimport * as HLocalStorage from './helpers/LocalStorage'\r\nimport * as HColor from './helpers/Color'\r\nimport * as HText from './helpers/Text'\r\nimport HModules from './helpers/Modules'\r\nimport HFakeData from './helpers/FakeData'\r\nimport HValid from './helpers/Valid'\r\nimport * as HCF from './helpers/CF'\r\nimport HEE from './helpers/EventEmitter'\r\n\r\n//MyCom\r\nimport MyComponentHelpers from './components/MyComponent/Helpers'\r\n\r\nimport MyPage from './components/MyPage'\r\nimport MyPageHelpers from './components/MyPage/Helpers'\r\nimport MyPageLayout from './components/MyPageLayout'\r\nimport MyPageLayoutHelpers from './components/MyPageLayout/Helpers'\r\nimport MyUI from './components/MyUI'\r\nimport MyUIHelpers from './components/MyUI/Helpers'\r\nimport MyCard from './components/MyCard'\r\nimport MyCardHelpers from './components/MyCard/Helpers'\r\nimport MyLayout from './components/MyLayout'\r\nimport MyLayoutHelpers from './components/MyLayout/Helpers'\r\nimport MyTableCell from './components/MyTableCell'\r\nimport MyTableCellHelpers from './components/MyTableCell/Helpers'\r\nimport MyTableFilterControl from './components/MyTableFilterControl'\r\nimport MyTableFilterControlHelpers from './components/MyTableFilterControl/Helpers'\r\nimport MyFormControl from './components/MyFormControl'\r\nimport MyFormControlHelpers from './components/MyFormControl/Helpers'\r\nimport MyButton from './components/MyButton'\r\nimport MyButtonHelpers from './components/MyButton/Helpers'\r\nimport MyIcon from './components/MyIcon'\r\nimport MyIconHelpers from './components/MyIcon/Helpers'\r\nimport MyLoading from './components/MyLoading'\r\nimport MyLoadingHelpers from './components/MyLoading/Helpers'\r\nimport MyBase from './components/MyBase'\r\nimport MyBaseHelpers from './components/MyBase/Helpers'\r\nimport MyLib from './components/MyLib'\r\nimport MyLibHelpers from './components/MyLib/Helpers'\r\nimport MyTableHeader from './components/MyTableHeader'\r\nimport MyTableHeaderHelpers from './components/MyTableHeader/Helpers'\r\nimport MyChart from './components/MyChart'\r\nimport MyChartHelpers from './components/MyChart/Helpers'\r\nimport MySVG from './components/MySVG'\r\nimport MySVGHelpers from './components/MySVG/Helpers'\r\n\r\nimport MyControl from './components/MyControl'\r\nimport MyControlHelpers from './components/MyControl/Helpers'\r\nimport MyControl_Ext from './components/MyControl/MyControl_Ext'\r\nimport MyControl_Ext_Select from './components/MyControl/MyControl_Ext_Select'\r\n// import * as HUtils from './helpers/Utils'\r\n// export { HUtils } from './utils'\r\n// interface Props {\r\n// text: string\r\n// }\r\n\r\n// export const ExampleComponent = ({ text }: Props) => {\r\n// return
Test Example Component: {text}
\r\n// }\r\n\r\n//V1\r\nimport * as V1 from './v1'\r\n\r\nconst Allias = {\r\n HApi: {},\r\n showPhotosViewer: (arrPhotos: any[] = [], currentIndex: number = 0) => {\r\n console.warn('need overide showPhotosViewer', arrPhotos, currentIndex)\r\n }\r\n}\r\n\r\nconst addAllias = (opts: { HApi: any; showPhotosViewer: any }) => {\r\n if (opts.HApi) {\r\n Allias.HApi = opts.HApi\r\n }\r\n if (opts.showPhotosViewer) {\r\n Allias.showPhotosViewer = opts.showPhotosViewer\r\n }\r\n}\r\nexport {\r\n addAllias,\r\n Allias,\r\n CPagination,\r\n CSuppense,\r\n ConfigSearch,\r\n CErrorBoundary,\r\n ConfigPage,\r\n OnePage,\r\n OneButton,\r\n OneTableCell,\r\n OneTableFilterControl,\r\n OneFilter,\r\n HUtils,\r\n HLink,\r\n HFormat,\r\n HModules,\r\n HLog,\r\n HIs,\r\n HUI,\r\n HText,\r\n HJson,\r\n HRegex,\r\n HFilter,\r\n HColor,\r\n HMore,\r\n HOptions,\r\n HLocalStorage,\r\n HFakeData,\r\n HValid,\r\n HCF,\r\n HEE,\r\n MyComponentHelpers,\r\n MyPage,\r\n MyPageHelpers,\r\n MyPageLayout,\r\n MyPageLayoutHelpers,\r\n MyUI,\r\n MyUIHelpers,\r\n MyCard,\r\n MyCardHelpers,\r\n MyLayout,\r\n MyLayoutHelpers,\r\n MyTableCell,\r\n MyTableCellHelpers,\r\n MyTableFilterControl,\r\n MyTableFilterControlHelpers,\r\n MyFormControl,\r\n MyFormControlHelpers,\r\n MyButton,\r\n MyButtonHelpers,\r\n MyIcon,\r\n MyIconHelpers,\r\n MyLoading,\r\n MyLoadingHelpers,\r\n MyControl,\r\n MyControlHelpers,\r\n MyControl_Ext,\r\n MyControl_Ext_Select,\r\n MyBase,\r\n MyBaseHelpers,\r\n MyLib,\r\n MyLibHelpers,\r\n MyChart,\r\n MyChartHelpers,\r\n MyTableHeader,\r\n MyTableHeaderHelpers,\r\n MySVG,\r\n MySVGHelpers,\r\n V1\r\n}\r\n","const kObjCategoryLocal = \"category\"\r\nconst kFirstSettingData = \"FIRST_SETTING_DATA\"\r\nconst kRoleUserActive = \"roleUserActive\"\r\nconst myuiOrderNav = \"sg_nav_order\"\r\nconst myuiDfNav = \"sg_nav_default\"\r\n\r\nconst rentalTypes = [\r\n {\r\n url: \"/thue-xe-4-cho\",\r\n name: \"Thuê xe 4 chỗ\",\r\n },\r\n {\r\n url: \"/thue-xe-7-cho\",\r\n name: \"Thuê xe 7 chỗ\",\r\n },\r\n]\r\nconst timeRange = [\r\n {\r\n Text: \"\",\r\n Value: \"\",\r\n },\r\n]\r\nconst mobileWidth = 820\r\nconst pageKey = {\r\n category: \"category\",\r\n home: \"home\",\r\n onlyHeader: \"onlyHeader\",\r\n sgTravelling: \"sgTravelling\",\r\n}\r\nconst headerTabList = [\r\n {\r\n key: \"xe-tu-lai\",\r\n title: \"Xe tự lái\",\r\n link: \"/\",\r\n },\r\n {\r\n key: \"xe-co-tai\",\r\n title: \"Xe có tài\",\r\n link: \"/thue-xe-co-tai\",\r\n },\r\n {\r\n key: \"thue-dai-han\",\r\n title: \"Thuê dài hạn\",\r\n link: \"/thue-xe-dai-han\",\r\n },\r\n]\r\nexport {\r\n kObjCategoryLocal,\r\n rentalTypes,\r\n timeRange,\r\n kFirstSettingData,\r\n kRoleUserActive,\r\n myuiDfNav,\r\n myuiOrderNav,\r\n mobileWidth,\r\n pageKey,\r\n headerTabList,\r\n}\r\n","import React from \"react\"\r\nimport MyUIHelpers from \"src/core/components/MyUI/MyUIHelpers\"\r\nimport { CSuppense } from \"src/core/components\"\r\n\r\nconst MUI_dev_simulator = React.lazy(() => import(\"./Types/dev_simulator\"))\r\n\r\nconst MyUIOne = {\r\n init() {\r\n MyUIHelpers.addTypes(\"dev_simulator\", props => {\r\n return CSuppense(props, MUI_dev_simulator)\r\n })\r\n },\r\n}\r\n\r\nexport default MyUIOne\r\n","import { HLocalStorage, HUtils, HApi } from \"src/core/helpers\"\r\nimport { MyModal } from \"src/core/components\"\r\nimport MyUIOne from \"./MyUI\"\r\nimport \"./scss/index.scss\"\r\n\r\ninterface IModuleDevSimulator extends IModuleOne {\r\n usingLocalBaseUrlKey?: any\r\n localBaseUrlKey?: any\r\n usingLocalBaseUrl?: boolean\r\n runAfterInit: () => void\r\n setLocalBaseUrl: (newBaseUrl: any) => void\r\n getIsUsingLocalBaseUrl: () => boolean\r\n getLocalBaseUrl: () => string\r\n showUIDevSimulator: () => void\r\n setIsUsingLocalBaseUrl: (value: any) => void\r\n}\r\nconst ModuleDevSimulator: IModuleDevSimulator = {\r\n usingLocalBaseUrlKey: \"_usingLocalBaseUrl\",\r\n localBaseUrlKey: \"_localBaseUrl\",\r\n usingLocalBaseUrl: false,\r\n runAfterInit: () => {\r\n MyUIOne.init()\r\n const localBaseUrl = ModuleDevSimulator.getLocalBaseUrl()\r\n const isUsingLocalBaseUrl = ModuleDevSimulator.getIsUsingLocalBaseUrl()\r\n if (isUsingLocalBaseUrl === true) {\r\n ModuleDevSimulator.usingLocalBaseUrl = true\r\n if (localBaseUrl) {\r\n HApi.initApi({ baseUrl: localBaseUrl })\r\n }\r\n }\r\n if (HUtils.isLocalDev() === true || isUsingLocalBaseUrl === true) {\r\n ModuleDevSimulator.showUIDevSimulator()\r\n } else {\r\n console.log = () => {}\r\n console.warn = () => {}\r\n }\r\n if (!localBaseUrl) {\r\n ModuleDevSimulator.setLocalBaseUrl(\"http://localhost:12391\")\r\n }\r\n },\r\n getIsUsingLocalBaseUrl: () => {\r\n if (\r\n HLocalStorage.getObj(ModuleDevSimulator.usingLocalBaseUrlKey, {}) === true\r\n ) {\r\n return true\r\n }\r\n return false\r\n },\r\n getLocalBaseUrl: () => {\r\n return HLocalStorage.getString(ModuleDevSimulator.localBaseUrlKey, \"\")\r\n },\r\n setIsUsingLocalBaseUrl: value => {\r\n ModuleDevSimulator.usingLocalBaseUrl = value\r\n HLocalStorage.saveString(ModuleDevSimulator.usingLocalBaseUrlKey, value)\r\n },\r\n setLocalBaseUrl: newBaseUrl => {\r\n HLocalStorage.saveString(ModuleDevSimulator.localBaseUrlKey, newBaseUrl)\r\n },\r\n showUIDevSimulator: () => {\r\n if (!document.getElementById(\"dev_simulator\")) {\r\n const _localBaseUrl = ModuleDevSimulator.getLocalBaseUrl()\r\n let button = document.createElement(\"button\")\r\n button.id = \"dev_simulator\"\r\n button.type = \"button\"\r\n button.innerHTML = ` ${\r\n ModuleDevSimulator.usingLocalBaseUrl && _localBaseUrl\r\n ? _localBaseUrl\r\n : \"\"\r\n }`\r\n button.className = \"btn btn-danger btn-dev-sml\"\r\n button.onclick = function () {\r\n MyModal.showFromMyUI(\r\n {\r\n type: \"dev_simulator\",\r\n },\r\n {\r\n title: \"Config BaseUrl\",\r\n }\r\n )\r\n }\r\n document.body.appendChild(button)\r\n document.body.style.position = \"relative\"\r\n }\r\n },\r\n}\r\nexport default ModuleDevSimulator\r\n","/*! @preserve\r\n * numeral.js\r\n * version : 2.0.6\r\n * author : Adam Draper\r\n * license : MIT\r\n * http://adamwdraper.github.com/Numeral-js/\r\n */\r\n\r\n;(function (global, factory) {\r\n // if (typeof define === 'function' && define.amd) {\r\n // define(factory);\r\n // }\r\n if (typeof module === \"object\" && module.exports) {\r\n module.exports = factory()\r\n } else {\r\n global.numeral = factory()\r\n }\r\n})(this, function () {\r\n /************************************\r\n Variables\r\n ************************************/\r\n\r\n var numeral,\r\n _,\r\n VERSION = \"2.0.6\",\r\n formats = {},\r\n locales = {},\r\n defaults = {\r\n currentLocale: \"en\",\r\n zeroFormat: null,\r\n nullFormat: null,\r\n defaultFormat: \"0,0\",\r\n scalePercentBy100: true,\r\n },\r\n options = {\r\n currentLocale: defaults.currentLocale,\r\n zeroFormat: defaults.zeroFormat,\r\n nullFormat: defaults.nullFormat,\r\n defaultFormat: defaults.defaultFormat,\r\n scalePercentBy100: defaults.scalePercentBy100,\r\n }\r\n\r\n /************************************\r\n Constructors\r\n ************************************/\r\n\r\n // Numeral prototype object\r\n function Numeral(input, number) {\r\n this._input = input\r\n\r\n this._value = number\r\n }\r\n\r\n numeral = function (input) {\r\n var value, kind, unformatFunction, regexp\r\n\r\n if (numeral.isNumeral(input)) {\r\n value = input.value()\r\n } else if (input === 0 || typeof input === \"undefined\") {\r\n value = 0\r\n } else if (input === null || _.isNaN(input)) {\r\n value = null\r\n } else if (typeof input === \"string\") {\r\n if (options.zeroFormat && input === options.zeroFormat) {\r\n value = 0\r\n } else if (\r\n (options.nullFormat && input === options.nullFormat) ||\r\n !input.replace(/[^0-9]+/g, \"\").length\r\n ) {\r\n value = null\r\n } else {\r\n for (kind in formats) {\r\n regexp =\r\n typeof formats[kind].regexps.unformat === \"function\"\r\n ? formats[kind].regexps.unformat()\r\n : formats[kind].regexps.unformat\r\n\r\n if (regexp && input.match(regexp)) {\r\n unformatFunction = formats[kind].unformat\r\n\r\n break\r\n }\r\n }\r\n\r\n unformatFunction = unformatFunction || numeral._.stringToNumber\r\n\r\n value = unformatFunction(input)\r\n }\r\n } else {\r\n value = Number(input) || null\r\n }\r\n\r\n return new Numeral(input, value)\r\n }\r\n\r\n // version number\r\n numeral.version = VERSION\r\n\r\n // compare numeral object\r\n numeral.isNumeral = function (obj) {\r\n return obj instanceof Numeral\r\n }\r\n\r\n // helper functions\r\n numeral._ = _ = {\r\n // formats numbers separators, decimals places, signs, abbreviations\r\n numberToFormat: function (value, format, roundingFunction) {\r\n var locale = locales[numeral.options.currentLocale],\r\n negP = false,\r\n optDec = false,\r\n leadingCount = 0,\r\n abbr = \"\",\r\n trillion = 1000000000000,\r\n billion = 1000000000,\r\n million = 1000000,\r\n thousand = 1000,\r\n decimal = \"\",\r\n neg = false,\r\n abbrForce, // force abbreviation\r\n abs,\r\n int,\r\n precision,\r\n signed,\r\n thousands,\r\n output\r\n\r\n // make sure we never format a null value\r\n value = value || 0\r\n\r\n abs = Math.abs(value)\r\n\r\n // see if we should use parentheses for negative number or if we should prefix with a sign\r\n // if both are present we default to parentheses\r\n if (numeral._.includes(format, \"(\")) {\r\n negP = true\r\n format = format.replace(/[|]/g, \"\")\r\n } else if (\r\n numeral._.includes(format, \"+\") ||\r\n numeral._.includes(format, \"-\")\r\n ) {\r\n signed = numeral._.includes(format, \"+\")\r\n ? format.indexOf(\"+\")\r\n : value < 0\r\n ? format.indexOf(\"-\")\r\n : -1\r\n format = format.replace(/[|]/g, \"\")\r\n }\r\n\r\n // see if abbreviation is wanted\r\n if (numeral._.includes(format, \"a\")) {\r\n abbrForce = format.match(/a(k|m|b|t)?/)\r\n\r\n abbrForce = abbrForce ? abbrForce[1] : false\r\n\r\n // check for space before abbreviation\r\n if (numeral._.includes(format, \" a\")) {\r\n abbr = \" \"\r\n }\r\n\r\n format = format.replace(new RegExp(abbr + \"a[kmbt]?\"), \"\")\r\n\r\n if ((abs >= trillion && !abbrForce) || abbrForce === \"t\") {\r\n // trillion\r\n abbr += locale.abbreviations.trillion\r\n value = value / trillion\r\n } else if (\r\n (abs < trillion && abs >= billion && !abbrForce) ||\r\n abbrForce === \"b\"\r\n ) {\r\n // billion\r\n abbr += locale.abbreviations.billion\r\n value = value / billion\r\n } else if (\r\n (abs < billion && abs >= million && !abbrForce) ||\r\n abbrForce === \"m\"\r\n ) {\r\n // million\r\n abbr += locale.abbreviations.million\r\n value = value / million\r\n } else if (\r\n (abs < million && abs >= thousand && !abbrForce) ||\r\n abbrForce === \"k\"\r\n ) {\r\n // thousand\r\n abbr += locale.abbreviations.thousand\r\n value = value / thousand\r\n }\r\n }\r\n\r\n // check for optional decimals\r\n if (numeral._.includes(format, \"[.]\")) {\r\n optDec = true\r\n format = format.replace(\"[.]\", \".\")\r\n }\r\n\r\n // break number and format\r\n int = value.toString().split(\".\")[0]\r\n precision = format.split(\".\")[1]\r\n thousands = format.indexOf(\",\")\r\n leadingCount = (format.split(\".\")[0].split(\",\")[0].match(/0/g) || [])\r\n .length\r\n\r\n if (precision) {\r\n if (numeral._.includes(precision, \"[\")) {\r\n precision = precision.replace(\"]\", \"\")\r\n precision = precision.split(\"[\")\r\n decimal = numeral._.toFixed(\r\n value,\r\n precision[0].length + precision[1].length,\r\n roundingFunction,\r\n precision[1].length\r\n )\r\n } else {\r\n decimal = numeral._.toFixed(value, precision.length, roundingFunction)\r\n }\r\n\r\n int = decimal.split(\".\")[0]\r\n\r\n if (numeral._.includes(decimal, \".\")) {\r\n decimal = locale.delimiters.decimal + decimal.split(\".\")[1]\r\n } else {\r\n decimal = \"\"\r\n }\r\n\r\n if (optDec && Number(decimal.slice(1)) === 0) {\r\n decimal = \"\"\r\n }\r\n } else {\r\n int = numeral._.toFixed(value, 0, roundingFunction)\r\n }\r\n\r\n // check abbreviation again after rounding\r\n if (\r\n abbr &&\r\n !abbrForce &&\r\n Number(int) >= 1000 &&\r\n abbr !== locale.abbreviations.trillion\r\n ) {\r\n int = String(Number(int) / 1000)\r\n\r\n switch (abbr) {\r\n case locale.abbreviations.thousand:\r\n abbr = locale.abbreviations.million\r\n break\r\n case locale.abbreviations.million:\r\n abbr = locale.abbreviations.billion\r\n break\r\n case locale.abbreviations.billion:\r\n abbr = locale.abbreviations.trillion\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n\r\n // format number\r\n if (numeral._.includes(int, \"-\")) {\r\n int = int.slice(1)\r\n neg = true\r\n }\r\n\r\n if (int.length < leadingCount) {\r\n for (var i = leadingCount - int.length; i > 0; i--) {\r\n int = \"0\" + int\r\n }\r\n }\r\n\r\n if (thousands > -1) {\r\n int = int\r\n .toString()\r\n .replace(\r\n /(\\d)(?=(\\d{3})+(?!\\d))/g,\r\n \"$1\" + locale.delimiters.thousands\r\n )\r\n }\r\n\r\n if (format.indexOf(\".\") === 0) {\r\n int = \"\"\r\n }\r\n\r\n output = int + decimal + (abbr ? abbr : \"\")\r\n\r\n if (negP) {\r\n output = (negP && neg ? \"(\" : \"\") + output + (negP && neg ? \")\" : \"\")\r\n } else {\r\n if (signed >= 0) {\r\n output =\r\n signed === 0\r\n ? (neg ? \"-\" : \"+\") + output\r\n : output + (neg ? \"-\" : \"+\")\r\n } else if (neg) {\r\n output = \"-\" + output\r\n }\r\n }\r\n\r\n return output\r\n },\r\n // unformats numbers separators, decimals places, signs, abbreviations\r\n stringToNumber: function (string) {\r\n var locale = locales[options.currentLocale],\r\n stringOriginal = string,\r\n abbreviations = {\r\n thousand: 3,\r\n million: 6,\r\n billion: 9,\r\n trillion: 12,\r\n },\r\n abbreviation,\r\n value,\r\n regexp\r\n\r\n if (options.zeroFormat && string === options.zeroFormat) {\r\n value = 0\r\n } else if (\r\n (options.nullFormat && string === options.nullFormat) ||\r\n !string.replace(/[^0-9]+/g, \"\").length\r\n ) {\r\n value = null\r\n } else {\r\n value = 1\r\n\r\n if (locale.delimiters.decimal !== \".\") {\r\n string = string\r\n .replace(/\\./g, \"\")\r\n .replace(locale.delimiters.decimal, \".\")\r\n }\r\n\r\n for (abbreviation in abbreviations) {\r\n regexp = new RegExp(\r\n \"[^a-zA-Z]\" +\r\n locale.abbreviations[abbreviation] +\r\n \"(?:\\\\)|(\\\\\" +\r\n locale.currency.symbol +\r\n \")?(?:\\\\))?)?$\"\r\n )\r\n\r\n if (stringOriginal.match(regexp)) {\r\n value *= Math.pow(10, abbreviations[abbreviation])\r\n break\r\n }\r\n }\r\n\r\n // check for negative number\r\n value *=\r\n (string.split(\"-\").length +\r\n Math.min(\r\n string.split(\"(\").length - 1,\r\n string.split(\")\").length - 1\r\n )) %\r\n 2\r\n ? 1\r\n : -1\r\n\r\n // remove non numbers\r\n string = string.replace(/[^0-9]+/g, \"\")\r\n\r\n value *= Number(string)\r\n }\r\n\r\n return value\r\n },\r\n isNaN: function (value) {\r\n return typeof value === \"number\" && isNaN(value)\r\n },\r\n includes: function (string, search) {\r\n return string.indexOf(search) !== -1\r\n },\r\n insert: function (string, subString, start) {\r\n return string.slice(0, start) + subString + string.slice(start)\r\n },\r\n reduce: function (array, callback /*, initialValue*/) {\r\n if (this === null) {\r\n throw new TypeError(\r\n \"Array.prototype.reduce called on null or undefined\"\r\n )\r\n }\r\n\r\n if (typeof callback !== \"function\") {\r\n throw new TypeError(callback + \" is not a function\")\r\n }\r\n\r\n var t = Object(array),\r\n len = t.length >>> 0,\r\n k = 0,\r\n value\r\n\r\n if (arguments.length === 3) {\r\n value = arguments[2]\r\n } else {\r\n while (k < len && !(k in t)) {\r\n k++\r\n }\r\n\r\n if (k >= len) {\r\n throw new TypeError(\"Reduce of empty array with no initial value\")\r\n }\r\n\r\n value = t[k++]\r\n }\r\n for (; k < len; k++) {\r\n if (k in t) {\r\n value = callback(value, t[k], k, t)\r\n }\r\n }\r\n return value\r\n },\r\n /**\r\n * Computes the multiplier necessary to make x >= 1,\r\n * effectively eliminating miscalculations caused by\r\n * finite precision.\r\n */\r\n multiplier: function (x) {\r\n var parts = x.toString().split(\".\")\r\n\r\n return parts.length < 2 ? 1 : Math.pow(10, parts[1].length)\r\n },\r\n /**\r\n * Given a variable number of arguments, returns the maximum\r\n * multiplier that must be used to normalize an operation involving\r\n * all of them.\r\n */\r\n correctionFactor: function () {\r\n var args = Array.prototype.slice.call(arguments)\r\n\r\n return args.reduce(function (accum, next) {\r\n var mn = _.multiplier(next)\r\n return accum > mn ? accum : mn\r\n }, 1)\r\n },\r\n /**\r\n * Implementation of toFixed() that treats floats more like decimals\r\n *\r\n * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present\r\n * problems for accounting- and finance-related software.\r\n */\r\n toFixed: function (value, maxDecimals, roundingFunction, optionals) {\r\n var splitValue = value.toString().split(\".\"),\r\n minDecimals = maxDecimals - (optionals || 0),\r\n boundedPrecision,\r\n optionalsRegExp,\r\n power,\r\n output\r\n\r\n // Use the smallest precision value possible to avoid errors from floating point representation\r\n if (splitValue.length === 2) {\r\n boundedPrecision = Math.min(\r\n Math.max(splitValue[1].length, minDecimals),\r\n maxDecimals\r\n )\r\n } else {\r\n boundedPrecision = minDecimals\r\n }\r\n\r\n power = Math.pow(10, boundedPrecision)\r\n\r\n // Multiply up by precision, round accurately, then divide and use native toFixed():\r\n output = (\r\n roundingFunction(value + \"e+\" + boundedPrecision) / power\r\n ).toFixed(boundedPrecision)\r\n\r\n if (optionals > maxDecimals - boundedPrecision) {\r\n optionalsRegExp = new RegExp(\r\n \"\\\\.?0{1,\" + (optionals - (maxDecimals - boundedPrecision)) + \"}$\"\r\n )\r\n output = output.replace(optionalsRegExp, \"\")\r\n }\r\n\r\n return output\r\n },\r\n }\r\n\r\n // avaliable options\r\n numeral.options = options\r\n\r\n // avaliable formats\r\n numeral.formats = formats\r\n\r\n // avaliable formats\r\n numeral.locales = locales\r\n\r\n // This function sets the current locale. If\r\n // no arguments are passed in, it will simply return the current global\r\n // locale key.\r\n numeral.locale = function (key) {\r\n if (key) {\r\n options.currentLocale = key.toLowerCase()\r\n }\r\n\r\n return options.currentLocale\r\n }\r\n\r\n // This function provides access to the loaded locale data. If\r\n // no arguments are passed in, it will simply return the current\r\n // global locale object.\r\n numeral.localeData = function (key) {\r\n if (!key) {\r\n return locales[options.currentLocale]\r\n }\r\n\r\n key = key.toLowerCase()\r\n\r\n if (!locales[key]) {\r\n throw new Error(\"Unknown locale : \" + key)\r\n }\r\n\r\n return locales[key]\r\n }\r\n\r\n numeral.reset = function () {\r\n for (var property in defaults) {\r\n options[property] = defaults[property]\r\n }\r\n }\r\n\r\n numeral.zeroFormat = function (format) {\r\n options.zeroFormat = typeof format === \"string\" ? format : null\r\n }\r\n\r\n numeral.nullFormat = function (format) {\r\n options.nullFormat = typeof format === \"string\" ? format : null\r\n }\r\n\r\n numeral.defaultFormat = function (format) {\r\n options.defaultFormat = typeof format === \"string\" ? format : \"0.0\"\r\n }\r\n\r\n numeral.register = function (type, name, format) {\r\n name = name.toLowerCase()\r\n\r\n if (this[type + \"s\"][name]) {\r\n throw new TypeError(name + \" \" + type + \" already registered.\")\r\n }\r\n\r\n this[type + \"s\"][name] = format\r\n\r\n return format\r\n }\r\n\r\n numeral.validate = function (val, culture) {\r\n var _decimalSep,\r\n _thousandSep,\r\n _currSymbol,\r\n _valArray,\r\n _abbrObj,\r\n _thousandRegEx,\r\n localeData,\r\n temp\r\n\r\n //coerce val to string\r\n if (typeof val !== \"string\") {\r\n val += \"\"\r\n\r\n if (console.warn) {\r\n console.warn(\r\n \"Numeral.js: Value is not string. It has been co-erced to: \",\r\n val\r\n )\r\n }\r\n }\r\n\r\n //trim whitespaces from either sides\r\n val = val.trim()\r\n\r\n //if val is just digits return true\r\n if (!!val.match(/^\\d+$/)) {\r\n return true\r\n }\r\n\r\n //if val is empty return false\r\n if (val === \"\") {\r\n return false\r\n }\r\n\r\n //get the decimal and thousands separator from numeral.localeData\r\n try {\r\n //check if the culture is understood by numeral. if not, default it to current locale\r\n localeData = numeral.localeData(culture)\r\n } catch (e) {\r\n localeData = numeral.localeData(numeral.locale())\r\n }\r\n\r\n //setup the delimiters and currency symbol based on culture/locale\r\n _currSymbol = localeData.currency.symbol\r\n _abbrObj = localeData.abbreviations\r\n _decimalSep = localeData.delimiters.decimal\r\n if (localeData.delimiters.thousands === \".\") {\r\n _thousandSep = \"\\\\.\"\r\n } else {\r\n _thousandSep = localeData.delimiters.thousands\r\n }\r\n\r\n // validating currency symbol\r\n temp = val.match(/^[^\\d]+/)\r\n if (temp !== null) {\r\n val = val.substr(1)\r\n if (temp[0] !== _currSymbol) {\r\n return false\r\n }\r\n }\r\n\r\n //validating abbreviation symbol\r\n temp = val.match(/[^\\d]+$/)\r\n if (temp !== null) {\r\n val = val.slice(0, -1)\r\n if (\r\n temp[0] !== _abbrObj.thousand &&\r\n temp[0] !== _abbrObj.million &&\r\n temp[0] !== _abbrObj.billion &&\r\n temp[0] !== _abbrObj.trillion\r\n ) {\r\n return false\r\n }\r\n }\r\n\r\n _thousandRegEx = new RegExp(_thousandSep + \"{2}\")\r\n\r\n if (!val.match(/[^\\d.,]/g)) {\r\n _valArray = val.split(_decimalSep)\r\n if (_valArray.length > 2) {\r\n return false\r\n } else {\r\n if (_valArray.length < 2) {\r\n return (\r\n !!_valArray[0].match(/^\\d+.*\\d$/) &&\r\n !_valArray[0].match(_thousandRegEx)\r\n )\r\n } else {\r\n if (_valArray[0].length === 1) {\r\n return (\r\n !!_valArray[0].match(/^\\d+$/) &&\r\n !_valArray[0].match(_thousandRegEx) &&\r\n !!_valArray[1].match(/^\\d+$/)\r\n )\r\n } else {\r\n return (\r\n !!_valArray[0].match(/^\\d+.*\\d$/) &&\r\n !_valArray[0].match(_thousandRegEx) &&\r\n !!_valArray[1].match(/^\\d+$/)\r\n )\r\n }\r\n }\r\n }\r\n }\r\n\r\n return false\r\n }\r\n\r\n /************************************\r\n Numeral Prototype\r\n ************************************/\r\n\r\n numeral.fn = Numeral.prototype = {\r\n clone: function () {\r\n return numeral(this)\r\n },\r\n format: function (inputString, roundingFunction) {\r\n var value = this._value,\r\n format = inputString || options.defaultFormat,\r\n kind,\r\n output,\r\n formatFunction\r\n\r\n // make sure we have a roundingFunction\r\n roundingFunction = roundingFunction || Math.round\r\n\r\n // format based on value\r\n if (value === 0 && options.zeroFormat !== null) {\r\n output = options.zeroFormat\r\n } else if (value === null && options.nullFormat !== null) {\r\n output = options.nullFormat\r\n } else {\r\n for (kind in formats) {\r\n if (format.match(formats[kind].regexps.format)) {\r\n formatFunction = formats[kind].format\r\n\r\n break\r\n }\r\n }\r\n\r\n formatFunction = formatFunction || numeral._.numberToFormat\r\n\r\n output = formatFunction(value, format, roundingFunction)\r\n }\r\n\r\n return output\r\n },\r\n value: function () {\r\n return this._value\r\n },\r\n input: function () {\r\n return this._input\r\n },\r\n set: function (value) {\r\n this._value = Number(value)\r\n\r\n return this\r\n },\r\n add: function (value) {\r\n var corrFactor = _.correctionFactor.call(null, this._value, value)\r\n\r\n function cback(accum, curr, currI, O) {\r\n return accum + Math.round(corrFactor * curr)\r\n }\r\n\r\n this._value = _.reduce([this._value, value], cback, 0) / corrFactor\r\n\r\n return this\r\n },\r\n subtract: function (value) {\r\n var corrFactor = _.correctionFactor.call(null, this._value, value)\r\n\r\n function cback(accum, curr, currI, O) {\r\n return accum - Math.round(corrFactor * curr)\r\n }\r\n\r\n this._value =\r\n _.reduce([value], cback, Math.round(this._value * corrFactor)) /\r\n corrFactor\r\n\r\n return this\r\n },\r\n multiply: function (value) {\r\n function cback(accum, curr, currI, O) {\r\n var corrFactor = _.correctionFactor(accum, curr)\r\n return (\r\n (Math.round(accum * corrFactor) * Math.round(curr * corrFactor)) /\r\n Math.round(corrFactor * corrFactor)\r\n )\r\n }\r\n\r\n this._value = _.reduce([this._value, value], cback, 1)\r\n\r\n return this\r\n },\r\n divide: function (value) {\r\n function cback(accum, curr, currI, O) {\r\n var corrFactor = _.correctionFactor(accum, curr)\r\n return Math.round(accum * corrFactor) / Math.round(curr * corrFactor)\r\n }\r\n\r\n this._value = _.reduce([this._value, value], cback)\r\n\r\n return this\r\n },\r\n difference: function (value) {\r\n return Math.abs(numeral(this._value).subtract(value).value())\r\n },\r\n }\r\n\r\n /************************************\r\n Default Locale && Format\r\n ************************************/\r\n\r\n numeral.register(\"locale\", \"en\", {\r\n delimiters: {\r\n thousands: \",\",\r\n decimal: \".\",\r\n },\r\n abbreviations: {\r\n thousand: \"k\",\r\n million: \"m\",\r\n billion: \"b\",\r\n trillion: \"t\",\r\n },\r\n ordinal: function (number) {\r\n var b = number % 10\r\n return ~~((number % 100) / 10) === 1\r\n ? \"th\"\r\n : b === 1\r\n ? \"st\"\r\n : b === 2\r\n ? \"nd\"\r\n : b === 3\r\n ? \"rd\"\r\n : \"th\"\r\n },\r\n currency: {\r\n symbol: \"$\",\r\n },\r\n })\r\n\r\n return numeral\r\n})\r\n","import React, { forwardRef, useEffect, useImperativeHandle, useRef } from \"react\"\r\nimport usePlacesService from \"src/libs/ReactGooglePlacesAutocomplete/hooks/use-places-service\"\r\nimport useFetchSuggestions from \"src/libs/ReactGooglePlacesAutocomplete/hooks/use-fetch-suggestions\"\r\nimport { MyUI, Popover } from \"src/core/components\"\r\nimport styled from \"styled-components\"\r\nimport classNames from \"classnames\"\r\nimport { HUtils, HCF } from \"@macashipo/mlib\"\r\nimport { Button} from \"reactstrap\"\r\nimport { BsClock } from \"react-icons/bs\"\r\nimport { IoClose } from \"react-icons/io5\"\r\n\r\nfunction SelectList(props) {\r\n const {\r\n list,\r\n onSelect,\r\n stylePopover,\r\n noOptionsMessage,\r\n inputValue,\r\n innerRef,\r\n fnList,\r\n configMsg,\r\n moreConfig\r\n } = props\r\n const [data, setData] = React.useState(list)\r\n React.useEffect(() => {\r\n if (innerRef) {\r\n innerRef({\r\n updateList: a => {\r\n setData(a)\r\n },\r\n })\r\n }\r\n }, [])\r\n var sourceData = []\r\n if (data && data.length > 0) {\r\n sourceData = data.map((v, i) => {\r\n return {\r\n Text: v.label,\r\n Value: v.label,\r\n More: v.value,\r\n }\r\n })\r\n }\r\n // console.warn(\"sourceData:\", sourceData)\r\n if (sourceData == null || sourceData == undefined) {\r\n return null\r\n }\r\n let _uiEmpty = null\r\n if (sourceData && sourceData.length === 0) {\r\n _uiEmpty =
{configMsg?.emptyMsg || \"No options\"}
\r\n if (noOptionsMessage) {\r\n _uiEmpty = noOptionsMessage({\r\n inputValue,\r\n })\r\n } else if (inputValue == null || inputValue.length == 0) {\r\n _uiEmpty =
{configMsg?.emptyValueMsg || \"Search or enter an address\"}
\r\n }\r\n }\r\n const renderOptions = () => {\r\n if (!moreConfig?.renderCustomOption) {\r\n return {\r\n console.warn(\"onChange:\", itemOption, itemOption.Value)\r\n if (onSelect) {\r\n onSelect(itemOption)\r\n }\r\n //hide popover\r\n if (props.hide) {\r\n props.hide()\r\n }\r\n }}\r\n moreConfig={moreConfig}\r\n />\r\n }\r\n else {\r\n return <>{\r\n sourceData?.map((v, i) => {\r\n return
{\r\n if (onSelect) {\r\n onSelect(v)\r\n }\r\n }}>\r\n
\r\n \r\n
\r\n
{v.Text}
\r\n
\r\n })\r\n }\r\n }\r\n }\r\n return (\r\n {\r\n fnList?.setIsManual && fnList.setIsManual(false)\r\n }}\r\n onMouseLeave={() => {\r\n fnList?.setIsManual && fnList.setIsManual(true)\r\n }}\r\n >\r\n {sourceData && sourceData.length === 0 && _uiEmpty}\r\n {sourceData && sourceData.length > 0 && (\r\n <>{renderOptions()}\r\n // {\r\n // console.warn(\"onChange:\", itemOption, itemOption.Value)\r\n // if (onSelect) {\r\n // onSelect(itemOption)\r\n // }\r\n // //hide popover\r\n // if (props.hide) {\r\n // props.hide()\r\n // }\r\n // }}\r\n // moreConfig={moreConfig}\r\n // />\r\n )}\r\n \r\n )\r\n}\r\n\r\nconst GooglePlacesAutocompleteCustom = (args, ref) => {\r\n const selectProps = args.selectProps || {}\r\n const [suggestList, setSuggestList] = React.useState(null)\r\n const [visible, setVisible] = React.useState(false)\r\n const rInput = React.useRef(null)\r\n const currentDefaultValue = React.useRef(selectProps.defaultValue)\r\n const isManual = React.useRef(null)\r\n const currentList = React.useRef(null)\r\n const currentText = React.useRef(\"\")\r\n const currentValue = React.useRef(null)\r\n const disabled = HUtils.get(selectProps, \"isDisabled\")\r\n const [firstDropdown, setFirstDropdown] = React.useState(true)\r\n const [isFocus, setIsFocus] = React.useState(false)\r\n const { placesService, sessionToken, setSessionToken } = usePlacesService({\r\n apiKey: HCF.getCF(\"GooglePlaceApiKey\"),\r\n apiOptions: args.apiOptions ?? {},\r\n onLoadFailed: args.onLoadFailed ?? console.error,\r\n })\r\n const fetchSuggestions = useFetchSuggestions({\r\n autocompletionRequest: args.autocompletionRequest ?? {},\r\n debounce: args.debounce ?? 300,\r\n minLengthAutocomplete: args.minLengthAutocomplete ?? 0,\r\n placesService,\r\n sessionToken,\r\n withSessionToken: args.withSessionToken ?? false,\r\n })\r\n useImperativeHandle(\r\n ref,\r\n () => {\r\n return {\r\n getSessionToken: () => {\r\n return sessionToken\r\n },\r\n refreshSessionToken: () => {\r\n setSessionToken(new google.maps.places.AutocompleteSessionToken())\r\n },\r\n focusSearchInput: () => {\r\n (rInput.current).click()\r\n },\r\n closeDropdownAddress:()=>{\r\n setVisible(false)\r\n },\r\n lostFocusInput: () => {\r\n (rInput.current).blur()\r\n if (rInput) {\r\n rInput.current.value = currentDefaultValue.current\r\n }\r\n setVisible(false)\r\n }\r\n }},\r\n [sessionToken]\r\n )\r\n\r\n //update new default value\r\n if (selectProps.defaultValue != currentDefaultValue.current) {\r\n currentDefaultValue.current = selectProps.defaultValue\r\n if (rInput) {\r\n rInput.current.value = currentDefaultValue.current\r\n }\r\n }\r\n const renderDropdownMenu = () => {\r\n if(!visible){\r\n if(isFocus){\r\n if (selectProps?.fnRenderRecentlyAddress) {\r\n return selectProps?.fnRenderRecentlyAddress()\r\n }\r\n }else{\r\n if (selectProps?.fnRenderPopularrLocation) {\r\n return selectProps?.fnRenderPopularrLocation()\r\n }\r\n }\r\n } else if (visible) {\r\n return {\r\n if (item && rInput) {\r\n rInput.current.value = item.Text\r\n }\r\n currentValue.current = item.Value\r\n isManual.current = false\r\n HUtils.runFuntion(selectProps, \"onChange\", [\r\n {\r\n Text: item.Text,\r\n Value: item.Value,\r\n More: item.More,\r\n cbChange: () => {\r\n // setVisible(false)\r\n // selectProps?.onHanleDropdown && selectProps?.onHanleDropdown(false)\r\n },\r\n },\r\n ])\r\n }}\r\n noOptionsMessage={selectProps.noOptionsMessage}\r\n stylePopover={args.stylePopover}\r\n inputValue={currentText.current}\r\n innerRef={opts => {\r\n console.log(\"rs: innerRef\", opts)\r\n currentList.current = opts\r\n }}\r\n configMsg={selectProps.configMsg}\r\n fnList={{\r\n setIsManual: val => {\r\n isManual.current = val\r\n },\r\n }}\r\n moreConfig={selectProps?.moreConfig}\r\n />\r\n }\r\n return <>\r\n }\r\n\r\n if (selectProps?.hasFirstDropDown) {\r\n return (\r\n \r\n \r\n {\r\n let _text = ev.currentTarget.value\r\n if (!_text && !firstDropdown) {\r\n setFirstDropdown(true)\r\n }\r\n }}\r\n onClick={(e) => {\r\n rInput.current.focus()\r\n }}\r\n onChange={ev => {\r\n let _text = ev.currentTarget.value\r\n currentText.current = _text\r\n isManual.current = true\r\n if (args[\"defaultSuffix\"]) {\r\n _text += \" \" + args[\"defaultSuffix\"]\r\n }\r\n if (!visible) {\r\n setVisible(true)\r\n }\r\n if (!_text) {\r\n setSuggestList(null)\r\n }\r\n if (selectProps?.hasFirstDropDown) {\r\n setFirstDropdown(false)\r\n }\r\n fetchSuggestions(_text, rs => {\r\n console.log(\"rs:\", rs)\r\n currentList.current?.updateList &&\r\n currentList.current.updateList(rs)\r\n setSuggestList(rs)\r\n })\r\n }}\r\n onFocus={(e) => {\r\n setSuggestList(null)\r\n e.stopPropagation()\r\n setIsFocus(true)\r\n selectProps?.setFocusing && selectProps?.setFocusing(true)\r\n const _onFocus = HUtils.get(selectProps, \"onFocus\")\r\n _onFocus && _onFocus(e)\r\n }}\r\n />\r\n {!disabled && rInput?.current?.value && (\r\n
\r\n {\r\n rInput.current.focus()\r\n if (!firstDropdown) {\r\n setFirstDropdown(true)\r\n }\r\n HUtils.runFuntion(selectProps, \"onChange\", [\r\n {\r\n Text: null,\r\n Value: null,\r\n cbChange: (value) => {\r\n rInput.current.value = value\r\n // setVisible(false)\r\n },\r\n cbSuccess: () => {\r\n rInput.current.value = \"\"\r\n currentText.current = \"\"\r\n setSuggestList(null)\r\n },\r\n cbError: () => { },\r\n },\r\n {\r\n isWaiting: false,\r\n },\r\n ])\r\n }}\r\n color=\"clear-address\"\r\n >\r\n \r\n \r\n
\r\n )}\r\n {renderDropdownMenu()}\r\n \r\n )\r\n }\r\n return <>\r\n}\r\n\r\nconst Wrap = styled.div`\r\n position: relative;\r\n & .clear {\r\n position: absolute;\r\n top: 6px;\r\n right: 0px;\r\n bottom: 0px;\r\n & > button {\r\n padding: 0 8px;\r\n height: 38px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 0 0.25rem 0.25rem 0;\r\n background: transparent;\r\n border: 0px;\r\n color: #cccccc;\r\n transition: color 150ms;\r\n font-size: 18px;\r\n &:hover {\r\n color: #999999;\r\n }\r\n &:focus,\r\n &:active {\r\n box-shadow: none;\r\n background-color: transparent !important;\r\n color: #999999 !important;\r\n }\r\n }\r\n }\r\n & .ic-search{\r\n position: absolute;\r\n top: 13px;\r\n left: 8px;\r\n padding: 3px 0;\r\n padding-right: 8px;\r\n bottom: 0px;\r\n display: flex;\r\n font-size: 18px;\r\n height: fit-content;\r\n border-right: 1px solid #ccc;\r\n }\r\n & .form-control {\r\n padding-right: 40px;\r\n }\r\n &.readonly {\r\n & .form-control {\r\n padding-right: 0.75rem;\r\n }\r\n }\r\n & .input-enter-address {\r\n padding-left: 43px;\r\n min-height: 50px;\r\n border-radius: 10px;\r\n &.active, \r\n &:focus {\r\n }\r\n }\r\n & .option:hover {\r\n background-color: transparent !important;\r\n }\r\n & .one-address-recently {\r\n margin-top: -5px;\r\n transition: ease-in-out all 0.3s;\r\n display: flex;\r\n align-items: flex-start;\r\n padding: 8px;\r\n margin-left: -8px;\r\n cursor: pointer;\r\n border: 1px solid transparent;\r\n &:first-child {\r\n margin-top: 0;\r\n }\r\n & .wrap-ic {\r\n margin-top: 3px;\r\n width: 40px;\r\n height: 40px;\r\n min-width: 40px;\r\n border-radius: 8px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: #dddddd;\r\n margin-right: 16px;\r\n }\r\n & i {\r\n font-size: 20px;\r\n color: #5F5F5F;\r\n font-weight: 400;\r\n display: flex;\r\n }\r\n & .address-content {\r\n width: calc(100% - 56px);\r\n color: #7b7878;\r\n & .title {\r\n font-weight: 600;\r\n color: var(--color-text-363636);\r\n margin: 0;\r\n }\r\n & .time {\r\n font-size: 13px;\r\n }\r\n }\r\n &.active {\r\n user-select: none;\r\n pointer-events: none;\r\n cursor: context-menu;\r\n background-color: #ebebeb;\r\n border-color: #ebebeb;\r\n border-radius: 8px;\r\n }\r\n }\r\n`\r\nconst WrapPopover = styled.div`\r\n font-size: 0.88rem;\r\n & .a-noitem {\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-top: auto;\r\n min-height: 40px;\r\n color: hsl(0, 0%, 60%);\r\n }\r\n`\r\nexport default forwardRef(GooglePlacesAutocompleteCustom)\r\n","import { saveObj, saveString, getString, getObj } from \"./localStorage\"\r\nimport { mergeObjIfExist } from \"./utils\"\r\nimport { HCF } from \"@macashipo/mlib\"\r\nimport { KAuth } from \"src/helpers/Flows/Auth\"\r\nimport ImgAvatar from \"src/assets/images/avatar.jpg\"\r\nconst AuthInfo: any = {\r\n kAuthToken: \"Auth-Token\",\r\n kAuthType: \"Auth-Type\",\r\n kAuthInfo: \"Auth-Info\",\r\n kAuthInfoSocial: \"Auth-InfoSocial\",\r\n token: \"\",\r\n type: \"Bearer\",\r\n info: {},\r\n infoSocial: null,\r\n info2FA: {},\r\n checkBeforeLogout: {},\r\n listAfterLogout: {},\r\n}\r\n\r\nconst AuthConfig: IAuthConfig = {\r\n afterLogout: () => {},\r\n afterLogin: () => {},\r\n}\r\n\r\nexport const initAuth = (config?: IAuthConfig) => {\r\n mergeObjIfExist(AuthConfig, config)\r\n loadLastSaved()\r\n HCF.setCF(KAuth.fnUpdateAuthInfo, authInfo => {\r\n console.log(\"update AuthInfo\", authInfo)\r\n if (authInfo) {\r\n AuthInfo.info = Object.assign(AuthInfo.info, authInfo)\r\n }\r\n })\r\n}\r\nexport const authCheckSavedAuthorized = () => {\r\n let _token = getString(AuthInfo.kAuthToken, \"\")\r\n if (_token) {\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nexport const authGetAuthorizationHeader = () => {\r\n // console.warn(\"authGetAuthorizationHeader:\", AuthInfo)\r\n if (AuthInfo.token) {\r\n return `${AuthInfo.type} ${AuthInfo.token}`\r\n }\r\n}\r\n\r\nexport const registerCheckBeforeLogout = (key, fn) => {\r\n if (key) {\r\n if (fn) {\r\n AuthInfo.checkBeforeLogout[key] = fn\r\n } else {\r\n delete AuthInfo.checkBeforeLogout[key]\r\n }\r\n }\r\n}\r\nexport const registerAfterLogout = (key, fn) => {\r\n if (key) {\r\n if (fn) {\r\n AuthInfo.listAfterLogout[key] = fn\r\n } else {\r\n delete AuthInfo.listAfterLogout[key]\r\n }\r\n }\r\n}\r\n\r\nexport const checkBeforeLogout = () => {\r\n if (AuthInfo.checkBeforeLogout) {\r\n for (let k of Object.keys(AuthInfo.checkBeforeLogout)) {\r\n let _fn = AuthInfo.checkBeforeLogout[k]\r\n if (_fn) {\r\n let _check = _fn()\r\n if (_check === false) {\r\n return false\r\n }\r\n }\r\n }\r\n }\r\n return true\r\n}\r\n\r\nconst loadLastSaved = () => {\r\n // AuthInfo.auth = data;\r\n let _obj = {\r\n type: getString(AuthInfo.kAuthType, AuthInfo.type),\r\n token: getString(AuthInfo.kAuthToken, \"\"),\r\n info: getObj(AuthInfo.kAuthInfo, {}),\r\n }\r\n if (_obj.token) {\r\n authLogin(_obj)\r\n }\r\n}\r\nconst savedLocal = () => {\r\n saveString(AuthInfo.kAuthType, AuthInfo.type)\r\n saveString(AuthInfo.kAuthToken, AuthInfo.token)\r\n saveObj(AuthInfo.kAuthInfo, AuthInfo.info)\r\n}\r\n\r\nexport const authLogin = (data: IAuth) => {\r\n mergeObjIfExist(AuthInfo, data)\r\n savedLocal()\r\n // console.warn(\"authLogin:\", data)\r\n if (AuthConfig.afterLogin) {\r\n AuthConfig.afterLogin()\r\n }\r\n}\r\n\r\nconst getInfoFromData = function (data: any) {\r\n let _info = {}\r\n for (let k of Object.keys(data)) {\r\n if (k !== \"access_token\" && k !== \"token_type\") {\r\n _info[k] = data[k]\r\n }\r\n }\r\n return _info\r\n}\r\nconst parse2FAfromData = function (data: any) {\r\n if (data) {\r\n AuthInfo.info2FA[\"fa2_needenable\"] = data.fa2_needenable\r\n AuthInfo.info2FA[\"fa2_needverify\"] = data.fa2_needverify\r\n AuthInfo.info2FA[\"fa2_token\"] = data.fa2_token\r\n AuthInfo.info2FA[\"user_uniqueid\"] = data.user_uniqueid\r\n AuthInfo.info2FA[\"user_id\"] = data.user_id\r\n AuthInfo.info2FA[\"fa2_method\"] = data.fa2_method\r\n }\r\n}\r\nexport const authLoginWithRes = (data: any): boolean => {\r\n // console.warn(\"authLoginWithRes:\", data)\r\n parse2FAfromData(data)\r\n if (data && data.access_token) {\r\n let _info = getInfoFromData(data)\r\n let _obj = {\r\n token: data.access_token,\r\n type: data.token_type,\r\n info: _info,\r\n }\r\n authLogin(_obj)\r\n return true\r\n }\r\n return false\r\n}\r\nexport const authLoginSocialWithRes = (data: any): boolean => {\r\n if (data) {\r\n if (data.Token) {\r\n parse2FAfromData(data.Token)\r\n }\r\n if (data.Token && data.Token.access_token) {\r\n let _info = getInfoFromData(data.Token)\r\n let _obj = {\r\n token: data.Token.access_token,\r\n type: data.Token.token_type,\r\n info: _info,\r\n infoSocial: data.SocialInfo,\r\n }\r\n authLogin(_obj)\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n\r\nexport const authLogoutWithNothing = () => {\r\n localStorage.removeItem(AuthInfo.kAuthToken)\r\n localStorage.removeItem(AuthInfo.kAuthInfo)\r\n localStorage.removeItem(AuthInfo.kAuthType)\r\n AuthInfo.info2FA = {}\r\n AuthInfo.info = {}\r\n AuthInfo.token = \"\"\r\n}\r\n\r\nconst afterLogout = () => {\r\n if (AuthConfig.afterLogout) {\r\n AuthConfig.afterLogout()\r\n }\r\n if (AuthInfo.listAfterLogout) {\r\n for (let k of Object.keys(AuthInfo.listAfterLogout)) {\r\n let _fn = AuthInfo.listAfterLogout[k]\r\n if (_fn) {\r\n _fn()\r\n }\r\n }\r\n }\r\n}\r\nexport const authLogout = ({ forceLogout, cbLogout }: any = {}) => {\r\n // console.log(\"authLogout:\", forceLogout, cbLogout)\r\n let _isWillLogout = false\r\n if (checkBeforeLogout()) {\r\n _isWillLogout = true\r\n }\r\n if (forceLogout === true) {\r\n _isWillLogout = true\r\n }\r\n if (_isWillLogout) {\r\n authLogoutWithNothing()\r\n afterLogout()\r\n if (cbLogout) {\r\n cbLogout()\r\n }\r\n }\r\n}\r\n\r\nexport const authLogoutWithReload = () => {\r\n authLogoutWithNothing()\r\n window.location.reload()\r\n}\r\n\r\nexport const authIsLogged = () => {\r\n return AuthInfo.token ? true : false\r\n}\r\n\r\nexport const getUserInfo = (): any => {\r\n return AuthInfo.info\r\n}\r\n\r\nexport const getInfo2FA = () => {\r\n return AuthInfo.info2FA\r\n}\r\n\r\nexport const getUserID = () => {\r\n return getUserInfo()?.user_id\r\n}\r\n\r\nexport const getUserName = () => {\r\n return getUserInfo()?.name\r\n}\r\n\r\nexport const getUserEmail = () => {\r\n return getUserInfo()?.user_name\r\n}\r\n\r\nexport const getUserAvatar = () => {\r\n if (getUserInfo() && getUserInfo()[\"avatar_url\"]) {\r\n return getUserInfo()?.avatar_url\r\n }\r\n return ImgAvatar\r\n}\r\n\r\nexport const getUserLogoApp = () => {\r\n return getUserInfo()?.appLogo_url\r\n}\r\n\r\nexport const checkShow2FAFromTokenResponse = resToken => {\r\n if (resToken) {\r\n if (resToken.fa2_needenable || resToken.fa2_needverify) {\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n","export default \"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAADcCAYAAAAbWs+BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAydpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDcuMS1jMDAwIDc5LmIwZjhiZTkwLCAyMDIxLzEyLzE1LTIxOjI1OjE1ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjMuMiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyMEY4MjdCNEFFREMxMUVDODFCRjg0M0Q0ODk4RTM0MyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyMEY4MjdCNUFFREMxMUVDODFCRjg0M0Q0ODk4RTM0MyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjI3QjQ3MEVEQUU1MDExRUM4MUJGODQzRDQ4OThFMzQzIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjI3QjQ3MEVFQUU1MDExRUM4MUJGODQzRDQ4OThFMzQzIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+45+JKQAAGWVJREFUeNrs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\"","export const categoryFields = {\r\n fAddress: \"Address\",\r\n fLatitude: \"Latitude\",\r\n fLongitude: \"Longitude\",\r\n fFromDate: \"FromDate\",\r\n fToDate: \"ToDate\",\r\n fPDAvatarUrl: \"AvatarUrl\",\r\n fPDName: \"Name\",\r\n fPDRate: \"Rating\",\r\n fPDTripCount: \"ServedCount\",\r\n fPDNumberOfSeat: \"NumberOfSeat\",\r\n fPDDistance: \"Distance\",\r\n fPDRentalPrice: \"RentalPrice\",\r\n fPDRentalPriceOriginal: \"RentalPriceOriginal\",\r\n fOrderBy: \"OrderBy\",\r\n fVehicleNoOfSeatIds: \"VehicleNoOfSeatIds\",\r\n fMinRentalPrice: \"MinRentalPrice\",\r\n fMaxRentalPrice: \"MaxRentalPrice\",\r\n fVehicleTransmissionTypeIds: \"VehicleTransmissionTypeIds\",\r\n fVehicleMakeIds: \"VehicleMakeIds\",\r\n fYearModels: \"YearModels\",\r\n fVehicleColorIds: \"VehicleColorIds\",\r\n fFuelTypeIds: \"FuelTypeIds\",\r\n fRentalSettings: \"RentalSettings\",\r\n fDocumentIds: \"DocumentIds\",\r\n fFeatureIds: \"FeatureIds\",\r\n fSlug: \"Slug\",\r\n fDeliveryAddress: \"DeliveryAddress\",\r\n fVehicleTypeSubIds: \"VehicleTypeSubIds\",\r\n fVehicleModelIds: \"VehicleModelIds\",\r\n fRentalDayCount_Text: \"RentalDayCount_Text\",\r\n fImageUrls: \"ImageUrls\",\r\n fRentalPriceByDayOriginal: \"RentalPriceByDayOriginal\",\r\n fRentalPriceByDay: \"RentalPriceByDay\",\r\n fVehicleMinYearModel: \"VehicleMinYearModel\",\r\n fVehicleMaxYearModel: \"VehicleMaxYearModel\",\r\n fRentalPriceDetails: \"RentalPriceDetails\",\r\n fFreeDaySegment_Text: \"FreeDaySegment_Text\",\r\n}\r\nexport const detailFields = {\r\n fImageUrls: \"ImageUrls\",\r\n fServedCount: \"ServedCount\",\r\n fCharacteristics: \"Characteristics\",\r\n fOwnerInfo: \"OwnerInfo\",\r\n fOwnerInfoUrl: \"InfoUrl\",\r\n fJoinedDate: \"JoinedDate\",\r\n fReplyWithin: \"ReplyWithin\",\r\n fFullDescription: \"FullDescription\",\r\n fFeatures: \"Features\",\r\n fDocuments: \"Documents\",\r\n fSecurities: \"Securities\",\r\n fTerm: \"Term\",\r\n fCancelBookingPolicy: \"CancelBookingPolicy\",\r\n fReview: \"Review\",\r\n fReviewByRenters: \"ReviewByRenters\",\r\n fRVUser: \"User\",\r\n fRVRating: \"Rating\",\r\n fRVTime: \"ReviewAt\",\r\n fRVContent: \"ReviewContent\",\r\n fAddress: \"Address\",\r\n fInsuranceShortDescription: \"InsuranceShortDescription\",\r\n fRentalPriceDetails: \"RentalPriceDetails\",\r\n fVouchers: \"Vouchers\",\r\n fBookingInfoItems: \"BookingInfoItems\",\r\n fTotalPrice: \"TotalPrice\",\r\n fVoucherCode: \"VoucherCode\",\r\n fVoucherDiscountPrice: \"VoucherDiscountPrice\",\r\n fCanBooking: \"CanBooking\",\r\n fRentalServiceCategoryCode: \"RentalServiceCategoryCode\",\r\n fDeliveryAddress: \"DeliveryAddress\",\r\n fCanChangeDeliveryAddress: \"CanChangeDeliveryAddress\",\r\n fReviewByAvatarUrl: \"ReviewByAvatarUrl\",\r\n fName: \"Name\",\r\n fAvatarUrl: \"AvatarUrl\",\r\n fJoinedWhen: \"JoinedWhen\",\r\n fBookingFeatureInfos: \"BookingFeatureInfos\",\r\n fDeliveryInfo: \"DeliveryInfo\",\r\n fLongitude: \"Longitude\",\r\n fLatitude: \"Latitude\",\r\n fThingsToKnow: \"ThingsToKnow\",\r\n fPlateNumber: \"PlateNumber\",\r\n fPaymentInstructionInfo: \"PaymentInstructionInfo\",\r\n fCancelBookingPolicyInfo: \"CancelBookingPolicyInfo\",\r\n fGeneralProvisionInfo: \"GeneralProvisionInfo\",\r\n fSecurity: \"Security\",\r\n fOrderNumber: \"OrderNumber\",\r\n fNewOrderLinks: \"NewOrderLinks\",\r\n fNewOrderContent: \"NewOrderContent\",\r\n fNewOrderBookingDate: \"NewOrderBookingDate\",\r\n fInsuranceInfo: \"InsuranceInfo\",\r\n fRentalDate: \"RentalDate\",\r\n}\r\nexport const historyFields = {\r\n fAvatarUrl: \"AvatarUrl\",\r\n fRentalServiceName: \"RentalServiceName\",\r\n fEntDate_Text: \"EntDate_Text\",\r\n fAnotherUsername: \"Name\",\r\n fFromDate_Text: \"FromDate_Text\",\r\n fToDate_Text: \"ToDate_Text\",\r\n fFromDate: \"FromDate\",\r\n fToDate: \"ToDate\",\r\n fTotalPrice_Text: \"TotalPrice_Text\",\r\n fAnotherUserContacts: \"Contacts\",\r\n fAnotherUserContactsType: \"Type\",\r\n fAnotherUserContactsIconUrl: \"IconUrl\",\r\n fAnotherUserContactsIsDisable: \"IsDisable\",\r\n fAnotherUserContactsValue: \"Value\",\r\n fAnotherUserRole: \"Role\",\r\n fAnotherUserAvatarUrl: \"AvatarUrl\",\r\n fAnotherUserRate: \"Rating\",\r\n fAnotherUserInfo: \"AnotherUserInfo\",\r\n fAnotherUserInfoUrl: \"InfoUrl\",\r\n fAnotherUserPhone: \"MobilePhone\",\r\n fAnotherUserJoinedWhen: \"JoinedWhen\",\r\n fAnotherUserTotalRatingCount: \"TotalRatingCount\",\r\n fAnotherUserIsVerified: \"IsVerified\",\r\n fIsUserTakeSelected: \"IsUserTakeSelected\",\r\n fStatusIconUrl: \"StatusIconUrl\",\r\n fStatusName: \"StatusName\",\r\n fStatusColorCode: \"StatusColorCode\",\r\n fButtons: \"Buttons\",\r\n fRating: \"ReviewRating\",\r\n fReviewRating: \"ReviewRating\",\r\n fReviewContent: \"ReviewContent\",\r\n fInsuranceContact: \"InsuranceContact\",\r\n fPaymentInfos: \"PaymentInfos\",\r\n fMoneyToPay: \"MoneyToPay\",\r\n fTransferContent: \"TransferContent\",\r\n fBankInfo: \"BankInfo\",\r\n fQRCodeUrl: \"QRCodeUrl\",\r\n fCancelReasonId: \"CancelReasonId\",\r\n fCancelReasonDetail: \"CancelReasonDetail\",\r\n fOrderNumber: \"OrderNumber\",\r\n fOrderSteps: \"OrderSteps\",\r\n fHaveInsurance: \"HaveInsurance\",\r\n fInsuranceContractUrl: \"InsuranceContractUrl\",\r\n fInsuranceDescription: \"InsuranceDescription\",\r\n fImageUrls: \"ImageUrls\",\r\n fEntDate: \"EntDate\",\r\n fPaymentTypeName: \"PaymentTypeName\",\r\n fTotalPrice: \"TotalPrice\",\r\n fRentalPriceDetails: \"RentalPriceDetails\",\r\n fBillingForOwnerInfo: \"BillingForOwnerInfo\",\r\n fBillingForOwnerTotalRentPrice: \"TotalRentPrice\",\r\n fBillingForOwnerCompletionFeePercentage: \"CompletionFeePercentage\",\r\n fBillingForOwnerCompletionFeeMoney: \"CompletionFeeMoney\",\r\n fBillingForOwnerTotal: \"Total\",\r\n fDepositAmount: \"DepositAmount\",\r\n fAmountRemain: \"AmountRemain\",\r\n fUserName: \"UserName\",\r\n fMessageToOwner: \"MessageToOwner\",\r\n fDeliveryAddress: \"DeliveryAddress\",\r\n fHotline: \"Hotline\",\r\n fRentalServiceStatus: \"RentalServiceStatus\",\r\n fName: \"Name\",\r\n fMyRentalServiceUrl: \"MyRentalServiceUrl\",\r\n fEndTime: \"EndTime\",\r\n fReceiveImages: \"ReceiveImages\",\r\n fServiceImageTypeName: \"ServiceImageTypeName\",\r\n fFiles: \"Files\",\r\n fFooterInfo: \"FooterInfo\",\r\n fThumbnailUrl: \"ThumbnailUrl\",\r\n fIsRequired: \"IsRequired\",\r\n fLimit: \"Limit\",\r\n fLongitude: \"Longitude\",\r\n fLatitude: \"Latitude\",\r\n fHeaderInfo: \"HeaderInfo\",\r\n fHeaderInfoTitle: \"Title\",\r\n fHeaderInfoDescription: \"Description\",\r\n fMyRating: \"MyRating\",\r\n /** review modal */\r\n fReviewOption: \"fReviewOption\",\r\n /** */\r\n fDeliveryInfo: \"DeliveryInfo\",\r\n /** Now fields */\r\n fTitle: \"Title\",\r\n fDescription: \"Description\",\r\n fOrders: \"Orders\",\r\n fBlogs: \"Blogs\",\r\n fOwnerAddress: \"OwnerAddress\",\r\n fDaysBeforeDeparture_Text: \"DaysBeforeDeparture_Text\",\r\n fRentalDate_Text: \"RentalDate_Text\",\r\n fIcon: \"StatusIcon\",\r\n fIconColor: \"StatusColorCode\",\r\n fRentalService_PlateNumber: \"RentalService_PlateNumber\",\r\n fOrderStatusCode: \"OrderStatusCode\",\r\n fOrderStatus: \"OrderStatus\",\r\n fOrderUserType: \"OrderUserType\",\r\n fID_GUID: \"ID_GUID\",\r\n fAddress: \"Address\",\r\n fSlug: \"Slug\",\r\n fPlateNumber: \"PlateNumber\",\r\n fExtraSurcharges: \"ExtraSurcharges\",\r\n fAnotherUserDescription: \"Description\",\r\n fRentalServiceItemImageUrls: \"RentalServiceItemImageUrls\",\r\n fFromDate_Format_1: \"FromDate_Format_1\",\r\n fToDate_Format_1: \"ToDate_Format_1\",\r\n fDocuments: \"Documents\",\r\n fSecurity: \"Securities\",\r\n fThingsToKnow: \"ThingsToKnow\",\r\n fButtonReport: \"ButtonReport\",\r\n fReportReasonId: \"ReportReasonId\",\r\n fReportReasonNote: \"ReportReasonNote\",\r\n fCharacteristics: \"Characteristics\",\r\n /** Insurance info */\r\n fDetailInsuranceInfo: \"InsuranceInfo\",\r\n fDetailInsuranceIcon: \"Icon\",\r\n fDetailInsuranceDescription: \"Description\",\r\n fDetailInsuranceContent: \"Content\",\r\n fDetailInsuranceTitle: \"Title\",\r\n fDetailInsuranceUrl: \"Url\",\r\n fCancelBookingPolicyInfo: \"CancelBookingPolicyInfo\",\r\n fFromDate_Format_2: \"FromDate_Format_2\",\r\n fToDate_Format_2: \"ToDate_Format_2\",\r\n fEntDate_Format_2: \"EntDate_Format_2\",\r\n}\r\nexport const userProfileFields = {\r\n fId: \"Id\",\r\n fCanReportThisUser: \"CanReportThisUser\",\r\n fCanEditProfile: \"CanEditProfile\",\r\n // avatar\r\n fAvatarUrl: \"AvatarUrl\",\r\n // review\r\n fReview: \"Review\",\r\n fRating: \"Rating\",\r\n fTotalRatingCount: \"TotalRatingCount\",\r\n fRatingByRenterCount: \"RatingByRenterCount\",\r\n fRatingByOwnerCount: \"RatingByOwnerCount\",\r\n fReviewByRenters: \"ReviewByRenters\",\r\n fReviewByOwners: \"ReviewByOwners\",\r\n fReview_Rating: \"Rating\",\r\n fReview_ReviewBy: \"ReviewBy\",\r\n fReview_ReviewAt: \"ReviewAt\",\r\n fReview_ReviewContent: \"ReviewContent\",\r\n // Main info\r\n fServedAndRentCount: \"ServedAndRentCount\",\r\n fJoinedDate: \"JoinedDate\",\r\n fVerified: \"Verified\",\r\n fIconUrl: \"IconUrl\",\r\n fTitle: \"Title\",\r\n fContent: \"Content\",\r\n fCanShowButtonVerified: \"CanShowButtonVerified\",\r\n fDescription: \"Description\",\r\n fVerifiedInfos: \"VerifiedInfos\",\r\n fVerifiedInfos_Text: \"Text\",\r\n fVerifiedInfos_IsVerified: \"IsVerified\",\r\n fVerifiedInfos_RefText: \"RefText\",\r\n fVerifiedInfos_RefUrl: \"RefUrl\",\r\n fOwnerInteracts: \"OwnerInteracts\",\r\n fOwnerInteracts_Text: \"Text\",\r\n fOwnerInteracts_Value: \"Value\",\r\n fPersonalInfo: \"PersonalInfo\",\r\n fPersonalInfo_Nickname: \"Nickname\",\r\n fPersonalInfo_NeedChangePassword: \"NeedChangePassword\",\r\n fPersonalInfo_NewPassword: \"NewPassword\",\r\n fPersonalInfo_ConfirmNewPassword: \"ConfirmNewPassword\",\r\n fPersonalInfo_FullName: \"FullName\",\r\n fPersonalInfo_PhoneNumber: \"PhoneNumber\",\r\n fPersonalInfo_Email: \"Email\",\r\n fPersonalInfo_DateOfBirth: \"DateOfBirth\",\r\n fPersonalInfo_GenderCode: \"GenderCode\",\r\n // Report\r\n fReportUserReasonId: \"ReportUserReasonId\",\r\n fReportReason: \"ReportReason\",\r\n fUserLoginId: \"UserLoginId\",\r\n // Verify Fields\r\n fVerificationSteps: \"VerificationSteps\",\r\n fStep_IsUploaded: \"IsUploaded\",\r\n fStep_IconUrl: \"IconUrl\",\r\n fStep_Content: \"Content\",\r\n fStep_Code: \"Code\",\r\n fImages: \"Images\",\r\n fThumbnailUrl: \"ThumbnailUrl\",\r\n fUserImageTypeDetailName: \"UserImageTypeDetailName\",\r\n fUserImageTypeDetailId: \"UserImageTypeDetailId\",\r\n fLimit: \"Limit\",\r\n fImage_Id: \"Id\",\r\n fMessageShowInUI: \"MessageShowInUI\",\r\n}\r\nexport const myServiceFields = {\r\n fRentalServiceStatus: \"RentalServiceStatus\",\r\n fAvatarUrl: \"AvatarUrl\",\r\n fStatus: \"Status\",\r\n fModel: \"Model\",\r\n fId: \"Id\",\r\n fRate_Txt: \"Rate_Txt\",\r\n fServedCount: \"ServedCount\",\r\n fRentalPrice_Txt: \"RentalPrice_Txt\",\r\n fCanEdit: \"CanEdit\",\r\n}\r\nexport const homeSlidesFields = {\r\n fSlides: \"Slides\",\r\n fSlideImages: \"SlideImages\",\r\n fTitle: \"Title\",\r\n fDescription: \"Description\",\r\n fOneSlideImageUrl: \"ImageUrl\",\r\n fOneSlideTitle: \"Title\",\r\n fOneSlideMoreInfo: \"MoreInfo\",\r\n fAddress: \"Address\",\r\n fLatitude: \"Latitude\",\r\n fLongitude: \"Longitude\",\r\n fFromDate: \"FromDate\",\r\n fToDate: \"ToDate\",\r\n fOneSlideDescription: \"Description\",\r\n fTimeStart: \"TimeStart\",\r\n fTimeEnd: \"TimeEnd\",\r\n}\r\nexport const savingFields = {\r\n fUsername: \"DisplayName\",\r\n fPoint: \"Point\",\r\n fImageUrl: \"AvatarUrl\",\r\n fInvitedFriendCount: \"InvitedFriendCount\",\r\n fCoinCollected: \"Point\",\r\n fInviteCode: \"InviteCode\",\r\n fBonusScreen: \"BonusScreen\",\r\n fHistoryDate: \"Date\",\r\n fHistoryPointChange: \"PointChange\",\r\n fHistoryStatus: \"Status\",\r\n fHistoryTitle: \"Title\",\r\n fInvitedFriendScreen: \"InviteFriendScreen\",\r\n fColorCode: \"ColorCode\",\r\n // history invited friend\r\n fInvitedDate: \"Date\",\r\n fInvitedPointChange: \"PointChange\",\r\n fInvitedStatus: \"Status\",\r\n fInvitedTitle: \"Title\",\r\n fInvitedDisplayName: \"DisplayName\",\r\n}\r\nexport const contentPageFields = {\r\n fTitle: \"Title\",\r\n fBody: \"Body\",\r\n fLastUpdated: \"LastUpdated\",\r\n // Blog fields\r\n fRelatedPosts: \"fRelatedPosts\",\r\n fCreatedDate_Text: \"CreatedDate_Text\",\r\n fPostLink: \"fPostLink\",\r\n fPostTitle: \"fPostTitle\",\r\n fImageUrl: \"fImageUrl\",\r\n fPostCreatedDate: \"fPostCreatedDate\",\r\n fAllowComment: \"AllowComment\",\r\n}\r\nexport const notificationFields = {\r\n fAvatarUrl: \"AvatarUrl\",\r\n fEntity: \"Entity\",\r\n fSubject: \"Subject\",\r\n fMessage: \"Message\",\r\n fIsSeen: \"IsSeen\",\r\n fNotifedAt: \"NotifedAt\",\r\n fId: \"Id\",\r\n fRequestData: \"RequestData\",\r\n fOrderNumber: \"OrderNumber\",\r\n fUserLoginRole: \"UserLoginRole\",\r\n fEntityCode: \"EntityCode\",\r\n}\r\nexport const paymentFields = {\r\n fBankAccount: \"BankAccount\",\r\n fAccountName: \"AccountName\",\r\n fAccountNumber_NotFull: \"AccountNumber_NotFull\",\r\n fAccountNumber: \"AccountNumber\",\r\n fBeneficiaryBankName: \"BeneficiaryBankName\",\r\n fBeneficiaryBankId: \"BeneficiaryBankId\",\r\n fIsDefault: \"IsDefault\",\r\n fIsVerified: \"IsVerified\",\r\n fNeedDelete: \"NeedDelete\",\r\n // payment wallet\r\n fPaymentWallet: \"PaymentWallet\",\r\n fWithdrawFee: \"WithdrawFee\",\r\n fWithdrawFee_Text: \"WithdrawFee_Text\",\r\n fWalletMoney: \"WalletMoney\",\r\n fWalletMoney_Number: \"WalletMoney_Number\",\r\n fMaximumMoneyCanWithdraw: \"MaximumMoneyCanWithdraw\",\r\n fMaximumMoneyCanWithdraw_Text: \"MaximumMoneyCanWithdraw_Text\",\r\n fCanWithdraw: \"CanWithdraw\",\r\n fMinimumMoneyCanWithdraw: \"MinMoneyCanWithdraw\",\r\n fMinMoneyCanWithdraw_Text: \"MinMoneyCanWithdraw_Text\",\r\n // withdraw fields\r\n fWithdrawAmount: \"WithdrawAmount\",\r\n // Transaction\r\n fTransactionHistories: \"TransactionHistories\",\r\n fTransactionAt: \"TransactionAt\",\r\n fDetail: \"Detail\",\r\n fDescription: \"Description\",\r\n fPaidBy: \"PaidBy\",\r\n fBalanceChange: \"BalanceChange\",\r\n}\r\n\r\nexport const travellingFields = {\r\n fFiles_0: \"Files_0\",\r\n fAvatarPhoto: \"AvatarPhoto\",\r\n fPost_Title: \"Title\",\r\n fPost_UpdatedDate_Text: \"UpdatedDate_Text\",\r\n fPost_Slug: \"Slug\",\r\n fPost_Url_Slug: \"Url_Slug\",\r\n fPost_CreatedDate_Text: \"CreatedDate_Text\",\r\n fPost_AvatarUrl: \"AvatarUrl\",\r\n}\r\n","export const LOGOUT = \"app/LOGOUT\"\r\nexport const FETCH_FS_PENDING = \"FETCH_FS_PENDING\"\r\nexport const FETCH_FS_SUCCESS = \"FETCH_FS_SUCCESS\"\r\nexport const FETCH_FS_ERROR = \"FETCH_FS_ERROR\"\r\nexport const INIT_FS_DATA = \"INIT_FS_DATA\"\r\n\r\nexport const SIDE_NAV_CLOSE = \"app/SIDE_NAV_CLOSE\"\r\nexport const SIDE_NAV_UPDATE = \"app/SIDE_NAV_UPDATE\"\r\nexport const SIDE_NAV_REPLACE = \"app/SIDE_NAV_REPLACE\"\r\n\r\nexport const HEADER_TITLE_UPDATE = \"app/HEADER_TITLE_UPDATE\"\r\nexport const HEADER_QUICKOVERVIEW_UPDATE = \"app/HEADER_QUICKOVERVIEW_UPDATE\"\r\nexport const NAVBAR_UITYPE_UPDATE = \"app/NAVBAR_UITYPE_UPDATE\"\r\n","import * as types from \"./App.constants\"\r\n\r\nexport const logout = opts => ({\r\n type: types.LOGOUT,\r\n opts,\r\n})\r\n\r\nexport const toggleSideNav = () => ({\r\n type: types.SIDE_NAV_CLOSE,\r\n})\r\n\r\nexport const sideNavUpdate = data => ({\r\n type: types.SIDE_NAV_UPDATE,\r\n items: data,\r\n})\r\n\r\nexport const fetchFirstSettingPending = () => {\r\n return {\r\n type: types.FETCH_FS_PENDING,\r\n }\r\n}\r\n\r\nexport const fetchFirstSettingSuccess = data => {\r\n return {\r\n type: types.FETCH_FS_SUCCESS,\r\n data: data,\r\n }\r\n}\r\nexport const initFirstSettingData = data => {\r\n return {\r\n type: types.INIT_FS_DATA,\r\n data: data,\r\n }\r\n}\r\n\r\nexport const fetchFirstSettingError = error => {\r\n return {\r\n type: types.FETCH_FS_ERROR,\r\n error: error,\r\n }\r\n}\r\n\r\nexport const updateHeaderTitle = title => ({\r\n type: types.HEADER_TITLE_UPDATE,\r\n title: title,\r\n})\r\n\r\nexport const updateQuickOverviewHeader = data => ({\r\n type: types.HEADER_QUICKOVERVIEW_UPDATE,\r\n data: data,\r\n})\r\nexport const changeUITypeNavbar = data => ({\r\n type: types.NAVBAR_UITYPE_UPDATE,\r\n data: data,\r\n})\r\n","import React, { Component, ReactNode } from \"react\"\r\nimport { MdOutlineError } from \"react-icons/md\"\r\nimport { logException } from \"src/helpers/Log\"\r\nimport styled from \"styled-components\"\r\n\r\ninterface Props {\r\n children: ReactNode\r\n}\r\n\r\ninterface State {\r\n hasError: boolean\r\n}\r\n\r\nclass ErrorBoundary extends Component {\r\n public state: State = {\r\n hasError: false,\r\n }\r\n\r\n public static getDerivedStateFromError(_: Error): State {\r\n // Update state so the next render will show the fallback UI.\r\n return { hasError: true }\r\n }\r\n\r\n public componentDidCatch(error: Error) {\r\n logException({ Error: error })\r\n this.setState(\r\n {\r\n hasError: true,\r\n },\r\n () => {\r\n this.forceUpdate()\r\n }\r\n )\r\n }\r\n\r\n public render() {\r\n if (this.state.hasError) {\r\n return (\r\n \r\n \r\n Sorry, there was an error.\r\n \r\n )\r\n }\r\n return this.props.children\r\n }\r\n}\r\nconst ErrorComponent = styled.div`\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n & > svg {\r\n fill: var(--color-secondary);\r\n }\r\n`\r\nexport default ErrorBoundary\r\n","import { HApi, HConfig } from \"src/core/helpers\"\r\n\r\nexport const logException = ({ AIPUrl, Data, Error }: any) => {\r\n let _userId = HConfig.getAuthUserId() || \"\"\r\n let _userName = HConfig.getAuthUserName() || \"Guest\"\r\n let _errorMsg = \"\"\r\n if (Error?.name) {\r\n _errorMsg = Error.name + \" - \"\r\n }\r\n if (Error?.message) {\r\n _errorMsg += Error.message\r\n }\r\n if (Error?.stack) {\r\n let _stack = Error.stack.split(\"\\n\")\r\n if (_stack?.length > 1) {\r\n _errorMsg += _stack[1]\r\n }\r\n }\r\n let _data = {\r\n LogBy: `[${_userId}] ${_userName}`,\r\n AIPUrl: AIPUrl || \"\",\r\n Url: window.location.href,\r\n Error: _errorMsg,\r\n Data: Data || {},\r\n }\r\n HApi.apiGeneric({\r\n method: \"POST\",\r\n url: \"Exception/SaveLog\",\r\n data: _data,\r\n })\r\n .then(response => {\r\n console.warn(\"axios response:\", response)\r\n })\r\n .catch(error => {\r\n console.warn(\"axios error:\", error)\r\n })\r\n}\r\n","import React from \"react\"\r\nimport classnames from \"classnames\"\r\nimport { Modal, ModalBody, ModalFooter, ModalHeader, Button } from \"reactstrap\"\r\nimport { logW } from \"src/core/helpers/log\"\r\nimport { isFunction, objHasKey } from \"src/core/helpers/utils\"\r\nimport MyForm from \"src/core/components/MyForm/MyForm\"\r\nimport { MyUI, MyLoading } from \"src/core/components\"\r\nimport ErrorBoundary from \"../MyComponent\"\r\ninterface IProps {\r\n className?: any\r\n style?: any\r\n type: string\r\n}\r\n\r\ninterface IState {\r\n isShow?: boolean\r\n opts?: IConfigModal\r\n showLoading?: boolean\r\n}\r\n\r\ninterface IConfigModal {\r\n component?: any\r\n showHeader?: boolean\r\n showFooter?: boolean\r\n showHeaderClose?: boolean\r\n modalClassName?: string\r\n modalCentered?: boolean\r\n modalScrollInside?: boolean\r\n title?: string\r\n usingModalBody?: boolean\r\n usingModalHeader?: boolean\r\n size?: string\r\n backdrop?: any | \"static\"\r\n fnList?: any\r\n msg?: any\r\n msgHtml?: any\r\n classNameBody?: string\r\n onClickClose?: any\r\n onClickOK?: any\r\n showFooterClose?: boolean\r\n showFooterOK?: boolean\r\n titleBtnOK?: string\r\n titleBtnClose?: string\r\n disabledBtnOk?: boolean\r\n onClose?: any\r\n onScrollContent?: boolean | false\r\n}\r\n\r\nclass MyModal extends React.Component {\r\n html: HTMLHtmlElement | undefined\r\n state: any = {\r\n isShow: false,\r\n showLoading: false,\r\n opts: {},\r\n }\r\n _fnList: any = {}\r\n componentDidMount() {\r\n const { type } = this.props\r\n MyModal.Helpers.initComponent(type, this)\r\n const elements = document.getElementsByTagName(\"html\")\r\n if (elements && elements[0]) {\r\n this.html = elements[0]\r\n }\r\n this._fnList = {\r\n getModal: () => {\r\n return this\r\n },\r\n hideModal: () => {\r\n this.hide()\r\n },\r\n showLoadingModal: v => {\r\n this.showLoading(v)\r\n },\r\n hideLoadingModal: () => {\r\n this.hideLoading()\r\n },\r\n }\r\n }\r\n show = (opts: any) => {\r\n this.setState(\r\n {\r\n isShow: true,\r\n opts: { ...MyModal.Helpers.defaultConfigModal, ...opts },\r\n },\r\n () => {\r\n this.hideScrollContent(true)\r\n }\r\n )\r\n }\r\n\r\n hideScrollContent = (v = false) => {\r\n const { opts } = this.state\r\n console.log(\"hide scroll\", opts)\r\n if (!this.html || opts.onScrollContent) {\r\n return\r\n }\r\n if (v === false) {\r\n this.html.style.overflowY = \"scroll\"\r\n } else {\r\n this.html.style.overflowY = \"hidden\"\r\n }\r\n }\r\n\r\n showLoading = (v = true) => {\r\n this.setState({\r\n showLoading: v,\r\n })\r\n }\r\n hideLoading = () => {\r\n this.setState({\r\n showLoading: false,\r\n })\r\n }\r\n hide = ({ skipHideScrollContent = false }: any = {}) => {\r\n this.setState(\r\n {\r\n isShow: false,\r\n showLoading: false,\r\n opts: {},\r\n },\r\n () => {\r\n if (!skipHideScrollContent) {\r\n this.hideScrollContent(false)\r\n }\r\n }\r\n )\r\n }\r\n toggle = () => {\r\n this.setState(\r\n {\r\n isShow: !this.state.isShow,\r\n },\r\n () => {\r\n const { opts, isShow } = this.state\r\n if (isShow === false) {\r\n if (opts?.onClose) {\r\n opts.onClose()\r\n }\r\n }\r\n this.hideScrollContent(this.state.isShow)\r\n }\r\n )\r\n }\r\n _getConfig = key => {\r\n const { opts } = this.state\r\n if (objHasKey(opts, key)) {\r\n return opts[key]\r\n }\r\n }\r\n _renderContent = () => {\r\n let _ui = null\r\n const { type } = this.props\r\n const { opts, isShow } = this.state\r\n if (isShow !== true) {\r\n return
\r\n }\r\n switch (type) {\r\n case MyModal.Helpers.types.mydialog:\r\n if (opts.component) {\r\n if (isFunction(opts.component)) {\r\n return opts.component({\r\n inMyModal: this,\r\n fnList: { ...this._fnList, ...opts.fnList },\r\n configFromModal: opts,\r\n })\r\n } else {\r\n return opts.component\r\n }\r\n } else {\r\n if (opts.msgHtml) {\r\n return \r\n } else if (opts.msg) {\r\n return opts.msg\r\n }\r\n return \"\"\r\n }\r\n case MyModal.Helpers.types.myui:\r\n return \r\n case MyModal.Helpers.types.component:\r\n if (opts.component) {\r\n if (isFunction(opts.component)) {\r\n return opts.component({\r\n inMyModal: this,\r\n fnList: { ...this._fnList, ...opts.fnList },\r\n configFromModal: opts,\r\n })\r\n } else {\r\n return opts.component\r\n }\r\n } else {\r\n logW(\"Missing component\")\r\n return
\r\n }\r\n case MyModal.Helpers.types.myform:\r\n if (opts.configForm) {\r\n return (\r\n \r\n )\r\n } else {\r\n logW(\"Missing configForm\")\r\n return
\r\n }\r\n }\r\n return _ui\r\n }\r\n _renderBody = () => {\r\n const { opts } = this.state\r\n if (opts.usingModalBody === true) {\r\n return (\r\n \r\n {this._renderContent()}\r\n \r\n )\r\n }\r\n return this._renderContent()\r\n }\r\n _renderHeaderContent = () => {\r\n const { opts } = this.state\r\n return opts.title\r\n }\r\n _renderHeader = () => {\r\n const { opts } = this.state\r\n if (opts.showHeader === false) {\r\n let mProps: any = {}\r\n if (opts.showHeaderClose) {\r\n mProps.toggle = this.toggle\r\n }\r\n return (\r\n \r\n )\r\n }\r\n if (opts.usingModalHeader === true) {\r\n return (\r\n \r\n {this._renderHeaderContent()}\r\n \r\n )\r\n }\r\n return this._renderContent()\r\n }\r\n _renderFooter = () => {\r\n const { opts } = this.state\r\n if (opts.showFooter === true) {\r\n return (\r\n \r\n {opts.showFooterClose && (\r\n {\r\n if (opts.onClickClose) {\r\n opts.onClickClose(this)\r\n } else {\r\n this.hide()\r\n }\r\n }}\r\n >\r\n {opts.titleBtnClose || \"Close\"}\r\n \r\n )}\r\n {opts.showFooterOK && (\r\n {\r\n if (opts.onClickOK) {\r\n opts.onClickOK(this)\r\n }\r\n }}\r\n >\r\n {opts.titleBtnOK || \"OK\"}\r\n \r\n )}\r\n \r\n )\r\n }\r\n return null\r\n }\r\n _getClassname = () => {\r\n const { opts } = this.state\r\n return classnames(opts.modalClassName, {\r\n \"modal-dialog-centered\": opts.modalCentered,\r\n [`modal-${opts.size}`]: true, //sm,lg,xl\r\n \"modal-dialog-scrollable\": opts.modalScrollInside,\r\n })\r\n }\r\n _renderOverlay = () => {\r\n if (this.state.showLoading === true) {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n }\r\n render() {\r\n const { isShow, opts } = this.state\r\n const { backdrop } = opts\r\n return (\r\n \r\n {this._renderHeader()}\r\n {this._renderBody()}\r\n {this._renderFooter()}\r\n {this._renderOverlay()}\r\n \r\n )\r\n }\r\n static Helpers = {\r\n defaultConfigModal: {\r\n usingModalBody: true,\r\n usingModalHeader: true,\r\n showHeader: true,\r\n size: \"lg\",\r\n onScrollContent: false,\r\n },\r\n types: {\r\n component: \"component\",\r\n myui: \"myui\",\r\n myform: \"myform\",\r\n mypage: \"mypage\",\r\n lightbox: \"lightbox\",\r\n mydialog: \"mydialog\",\r\n },\r\n initComponent: (type, component) => {\r\n if (type && component) {\r\n MyModal.Helpers.components[type] = component\r\n }\r\n },\r\n components: {},\r\n }\r\n static showWithType = (type, opts) => {\r\n if (MyModal.Helpers.components[type]) {\r\n MyModal.Helpers.components[type].show(opts)\r\n }\r\n }\r\n static showFromMyUI = (configMyUI, configModal: IConfigModal | null) => {\r\n MyModal.showWithType(MyModal.Helpers.types.myui, {\r\n configMyUI: configMyUI,\r\n ...configModal,\r\n })\r\n }\r\n static showFromMyForm = (configForm, configModal: IConfigModal | null) => {\r\n MyModal.showWithType(MyModal.Helpers.types.myform, {\r\n configForm: configForm,\r\n ...configModal,\r\n })\r\n }\r\n static showFromComponent = (component, configModal: IConfigModal | null) => {\r\n MyModal.showWithType(MyModal.Helpers.types.component, {\r\n component: component,\r\n ...configModal,\r\n })\r\n }\r\n static showMyDialog = (configModal: IConfigModal | null) => {\r\n MyModal.showWithType(MyModal.Helpers.types.mydialog, {\r\n ...configModal,\r\n })\r\n }\r\n static showConfirm = (configModal: IConfigModal | null) => {\r\n MyModal.showWithType(MyModal.Helpers.types.mydialog, {\r\n size: \"xs\",\r\n showFooter: true,\r\n showFooterOK: true,\r\n showFooterClose: true,\r\n backdrop: \"static\",\r\n component: () => {\r\n if (configModal?.msg) {\r\n return (\r\n
\r\n {configModal?.msg}\r\n
\r\n )\r\n } else if (configModal?.msgHtml) {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n },\r\n ...configModal,\r\n })\r\n }\r\n static hideModalComponent = () => {\r\n if (MyModal.Helpers.components[this.Helpers.types.component]) {\r\n MyModal.Helpers.components[this.Helpers.types.component].hide()\r\n }\r\n }\r\n static hideModalMyUI = () => {\r\n if (MyModal.Helpers.components[this.Helpers.types.myui]) {\r\n MyModal.Helpers.components[this.Helpers.types.myui].hide()\r\n }\r\n }\r\n static hideModal = type => {\r\n if (MyModal.Helpers.components[type]) {\r\n MyModal.Helpers.components[type].hide()\r\n }\r\n }\r\n static hideModalScrollContent = type => {\r\n if (MyModal.Helpers.components[type]) {\r\n MyModal.Helpers.components[type].hide({\r\n skipHideScrollContent: true,\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport default MyModal\r\n","import React from \"react\"\r\n\r\nexport const useForceUpdate = () => {\r\n const [count, setCount] = React.useState(0)\r\n\r\n const increment = () => setCount(Date.now() + 1)\r\n return [count, increment] as any\r\n}\r\n","import { toast } from \"react-toastify\"\r\nimport { HCF } from \"@macashipo/mlib\"\r\nimport { MyDialog, MyModal } from \"src/core/components\"\r\n\r\nconst configToast = {\r\n hideProgressBar: true,\r\n pauseOnHover: true,\r\n autoClose: 2000,\r\n}\r\n\r\nconst ToastType = {\r\n success: \"success\",\r\n warn: \"warn\",\r\n warning: \"warning\",\r\n info: \"info\",\r\n error: \"error\",\r\n}\r\n\r\nexport const showToast = (msg, options) => {\r\n let _options = { ...configToast, ...options }\r\n let _type = options.type || ToastType.success\r\n switch (_type) {\r\n case ToastType.success:\r\n toast.success(msg, _options)\r\n break\r\n case ToastType.warn:\r\n toast.warn(msg, _options)\r\n break\r\n case ToastType.warning:\r\n toast.warn(msg, _options)\r\n break\r\n case ToastType.info:\r\n toast.info(msg, _options)\r\n break\r\n case ToastType.error:\r\n toast.error(msg, _options)\r\n break\r\n }\r\n}\r\n\r\nexport const showToastWithCheckMsg = (\r\n msg,\r\n defaultType = ToastType.success,\r\n opts: any = null\r\n) => {\r\n if (msg) {\r\n if (msg.startsWith(\"[\")) {\r\n if (msg.startsWith(\"[Warning]\")) {\r\n if (opts?.uiConfig?.msgWarningType === \"alert\") {\r\n showAlert({\r\n component:
{msg.replace(\"[Warning]\", \"\")}
,\r\n className: \"modal-dialog-alert\",\r\n opts: {\r\n showFooter: true,\r\n titleBtnClose: \"Đã hiểu\",\r\n showFooterClose: true,\r\n modalCentered: true,\r\n },\r\n })\r\n } else {\r\n showToast(msg.replace(\"[Warning]\", \"\"), {\r\n type: ToastType.warning,\r\n })\r\n }\r\n } else if (msg.startsWith(\"[Error]\")) {\r\n showToast(msg.replace(\"[Error]\", \"\"), {\r\n type: ToastType.error,\r\n })\r\n } else if (msg.startsWith(\"[Info]\")) {\r\n showToast(msg.replace(\"[Info]\", \"\"), {\r\n type: ToastType.info,\r\n })\r\n } else if (msg.startsWith(\"[Success]\")) {\r\n showToast(msg.replace(\"[Success]\", \"\"), {\r\n type: ToastType.success,\r\n })\r\n } else if (msg.startsWith(\"[Alert]\")) {\r\n showDialog({\r\n title: HCF.getCF(\"title\") || \"Notice\",\r\n msg: msg.replace(\"[Alert]\", \"\"),\r\n })\r\n } else if (msg.startsWith(\"[System]\") && window.alert) {\r\n window.alert(msg.replace(\"[System]\", \"\"))\r\n } else {\r\n showToast(msg, {\r\n type: defaultType,\r\n })\r\n }\r\n } else {\r\n showToast(msg, {\r\n type: defaultType,\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport const showToastSuccess = (msg, opts: any = null) => {\r\n showToastWithCheckMsg(msg, ToastType.success, opts)\r\n}\r\n\r\nexport const showToastWarning = msg => {\r\n showToastWithCheckMsg(msg, ToastType.warning)\r\n}\r\n\r\nexport const showToastError = msg => {\r\n showToastWithCheckMsg(msg, ToastType.error)\r\n}\r\n\r\nexport const showToastLikeToast = msg => {\r\n if (msg) {\r\n showToast(msg, {\r\n type: ToastType.success,\r\n position: toast.POSITION.BOTTOM_CENTER,\r\n style: {\r\n background: \"black\",\r\n color: \"white\",\r\n },\r\n })\r\n }\r\n}\r\n\r\nexport const showApiMsg = (msg, opts: any = null) => {\r\n if (msg) {\r\n showToastSuccess(msg, opts)\r\n }\r\n}\r\n\r\nexport const hideInMyModalFromProps = props => {\r\n if (props && props.inMyModal && props.inMyModal.hide) {\r\n props.inMyModal.hide()\r\n }\r\n}\r\n\r\nexport const showDialog = (configDialog: any) => {\r\n console.warn(\"showDialog\", configDialog)\r\n MyDialog.show({\r\n ...configDialog,\r\n })\r\n}\r\nexport const showAlert = ({ component, className = \"\", opts = {} }) => {\r\n MyModal.showMyDialog({\r\n title: \"\",\r\n component: component,\r\n size: \"md\",\r\n showFooter: false,\r\n showHeader: false,\r\n modalClassName: className,\r\n ...opts,\r\n })\r\n}\r\n","import { MyUIHelpers } from \"@macashipo/mlib\"\r\nexport default MyUIHelpers\r\n","import { HCF, HUtils } from \"@macashipo/mlib\"\r\nimport {\r\n KConfigApp,\r\n KConfigPageTableDefault,\r\n KConfigPageFilter,\r\n KConfigPageTable,\r\n KConfigPagePage,\r\n KConfigPageHeader,\r\n KUI,\r\n} from \"./K\"\r\nexport const kfnUpdatePageTitle = \"fnUpdatePageTitle\"\r\nexport const kfnGetApiPath = \"fnGetApiPath\"\r\nexport const kfnGetScreenCode = \"fnGetScreenCode\"\r\nexport const kgetSourceList = \"getSourceList\"\r\nexport const kfnHandleSearchText = \"fnHandleSearchText\"\r\nexport const kfnLoadLocalFilter = \"fnLoadLocalFilter\"\r\nexport const kfnGetConfigPageScreenConfig = \"fnGetConfigPageScreenConfig\"\r\nexport const kfnGetConfigPageHeader = \"fnGetConfigPageHeader\"\r\nexport const kfnGetConfigPageTable = \"fnGetConfigPageTable\"\r\nexport const kfnGetConfigPageDetail = \"fnGetConfigPageDetail\"\r\nexport const kfnGetConfigPageFilter = \"fnGetConfigPageFilter\"\r\nexport const kfnGetConfigPagePage = \"fnGetConfigPagePage\"\r\nexport const kfnGetConfigChart = \"kfnGetConfigChart\"\r\nexport const kgetCurrentValues = \"getCurrentValues\"\r\nexport const kfnGetSourceData = \"fnGetSourceData\"\r\nexport const kfnRenderBadge = \"fnRenderBadge\"\r\nexport const kgetTabsIndexSelected = \"getTabsIndexSelected\"\r\nexport const kgetTabLevel = \"getTabLevel\"\r\nexport const konChangeTab = \"onChangeTab\"\r\nexport const kgetDefaultValues = \"getDefaultValues\"\r\nexport const kgetIsMobileByWidth = \"getIsMobileByWidth\"\r\nexport const kgetDefaultTypeHubFilter = \"getDefaultTypeHubFilter\"\r\nexport const kfnForceUpdateTable = \"fnForceUpdateTable\"\r\nexport const kgetDataList = \"getDataList\"\r\nexport const kfnGetComponentTable = \"fnGetComponentTable\"\r\nexport const kfnGetOnePage = \"fnGetOnePage\"\r\nexport const kfnGetOptions = \"fnGetOptions\"\r\nexport const kfnGetExtraDataTable = \"fnGetExtraDataTable\"\r\nexport const kfnGetDataTableFilterd = \"fnGetDataTableFilterd\"\r\nexport const kfnGetDataTable = \"fnGetDataTable\"\r\nexport const kaddFnListFromControl = \"addFnListFromControl\"\r\nexport const kresetFormControl = \"resetFormControl\"\r\nexport const kfnReloadList = \"fnReloadList\"\r\nexport const kfnReloadOptionsAndList = \"fnReloadOptionsAndList\"\r\nexport const kfnGetHeaderTitle = \"fnGetHeaderTitle\"\r\nexport const kfnGetConfigInMore = \"fnGetConfigInMore\"\r\nexport const kfnGetIsInTableExpand = \"fnGetIsInTableExpand\"\r\nexport const kfnGetIsInModal = \"fnGetIsInModal\"\r\nexport const kfnGetColumnSelect = \"fnGetColumnSelect\"\r\nexport const kfnGetConfigModal = \"fnGetConfigModal\"\r\nexport const kfnGetTypeWrapControl = \"fnGetTypeWrapControl\"\r\nexport const kfnGetIsHide = \"fnGetIsHide\"\r\nexport const kfnChangeSwitchView = \"fnChangeSwitchView\"\r\nexport const kfnGetCurrentSwitchView = \"fnGetCurrentSwitchView\"\r\nexport const kfnGetButtonList = \"fnGetButtonList\"\r\nexport const kfnRequestUpdateFromExpand = \"fnRequestUpdateFromExpand\"\r\nconst rf = (fnList, name, args) => {\r\n return HUtils.runFuntion(fnList, name, args)\r\n}\r\n\r\nconst fnListModal = {\r\n showLoadingModal(fnList = {}, args = []) {\r\n HUtils.runFuntion(fnList, \"showLoadingModal\", args)\r\n },\r\n hideLoadingModal(fnList = {}, args = []) {\r\n HUtils.runFuntion(fnList, \"hideLoadingModal\", args)\r\n },\r\n hideModal(fnList = {}, args = []) {\r\n HUtils.runFuntion(fnList, \"hideModal\", args)\r\n },\r\n}\r\n\r\nconst fnListPopover = {\r\n hidePopover(fnList = {}, args = []) {\r\n HUtils.runFuntion(fnList, \"hidePopover\", args)\r\n },\r\n}\r\nconst fnListFilesManager = {\r\n onAfterAddFolderGGDrive(fnList = {}, args = []) {\r\n HUtils.runFuntion(fnList, \"onAfterAddFolderGGDrive\", args)\r\n },\r\n}\r\n\r\n/** MyForm */\r\nconst listFnMyForm = []\r\n\r\nconst kfnRenderFormControl = \"fnRenderFormControl\"\r\nconst fnListMyForm = {\r\n getSourceList(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kgetSourceList, args)\r\n },\r\n getCurrentValues(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kgetCurrentValues, args)\r\n },\r\n getDefaultValues(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kgetDefaultValues, args)\r\n },\r\n addFnListFromControl(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kaddFnListFromControl, args)\r\n },\r\n [kresetFormControl](fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kresetFormControl, args)\r\n },\r\n fnGetTypeWrapControl(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetTypeWrapControl, args)\r\n },\r\n fnRenderFormControl(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnRenderFormControl, args)\r\n },\r\n}\r\nif (listFnMyForm && listFnMyForm.length > 0) {\r\n for (let k of listFnMyForm) {\r\n fnListMyForm[k] = (fnList = {}, args = []) => {\r\n return HUtils.runFuntion(fnList, k, args)\r\n }\r\n }\r\n}\r\n\r\n// const fnListMyFormKeys = [kgetSourceList]\r\n// for(let k of fnListMyFormKeys){\r\n// fnListMyForm[k] = (fnList, args)=>{\r\n// return rf(fnList,k,args)\r\n// }\r\n// }\r\n\r\nconst fnListMyFormControl = {\r\n getSourceData(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, \"getSourceData\", args)\r\n },\r\n fnGetTypeWrapControl(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetTypeWrapControl, args)\r\n },\r\n}\r\n\r\nconst fnListMyTableCell = {\r\n fnGetSourceData(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetSourceData, args)\r\n },\r\n fnRenderBadge(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnRenderBadge, args)\r\n },\r\n fnGetHeaderTitle(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetHeaderTitle, args)\r\n },\r\n fnGetConfigInMore(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetConfigInMore, args)\r\n },\r\n fnGetConfigModal(fnList = {}, args = []) {\r\n return rf(fnList, kfnGetConfigModal, args)\r\n },\r\n fnGetIsHide(fnList = {}, args = []) {\r\n return rf(fnList, kfnGetIsHide, args)\r\n },\r\n}\r\n\r\nexport const kfnGetTitleControl = \"fnGetTitleControl\"\r\nconst fnListMyTableFilterControl = {\r\n fnGetTitleControl(fnList = {}, args = []) {\r\n return rf(fnList, kfnGetTitleControl, args)\r\n },\r\n}\r\n\r\nexport const kfnGetSharedRequestData = \"fnGetSharedRequestData\"\r\nexport const kfnGetDataTotal = \"fnGetDataTotal\"\r\nexport const kfnGetTableCols = \"fnGetTableCols\"\r\nconst fnListMyPage = {\r\n fnGetSharedRequestData(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetSharedRequestData, args)\r\n },\r\n fnReloadList(fnList = {}, args = []) {\r\n console.warn(\"fnReloadList\")\r\n //for old\r\n if (fnList[\"reloadTable\"]) {\r\n return HUtils.runFuntion(fnList, \"reloadTable\", args)\r\n } else if (fnList[\"reloadList\"]) {\r\n return HUtils.runFuntion(fnList, \"reloadList\", args)\r\n }\r\n return HUtils.runFuntion(fnList, kfnReloadList, args)\r\n },\r\n fnReloadOptionsAndList(fnList = {}, args = []) {\r\n //for old\r\n if (fnList[\"reloadOptionsAndList\"]) {\r\n return HUtils.runFuntion(fnList, \"reloadOptionsAndList\", args)\r\n }\r\n return HUtils.runFuntion(fnList, kfnReloadOptionsAndList, args)\r\n },\r\n fnReloadPage(fnList = {}, args = []) {\r\n window.location.reload()\r\n },\r\n fnUpdatePageTitle(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnUpdatePageTitle, args)\r\n },\r\n fnGetApiPath(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetApiPath, args)\r\n },\r\n fnGetScreenCode(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetScreenCode, args)\r\n },\r\n getSourceList(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kgetSourceList, args)\r\n },\r\n fnHandleSearchText(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnHandleSearchText, args)\r\n },\r\n fnLoadLocalFilter(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnLoadLocalFilter, args)\r\n },\r\n fnGetConfigPageScreenConfig(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetConfigPageScreenConfig, args)\r\n },\r\n fnGetConfigPageHeader(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetConfigPageHeader, args)\r\n },\r\n fnGetConfigPageTable(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetConfigPageTable, args)\r\n },\r\n fnGetConfigPageDetail(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetConfigPageDetail, args)\r\n },\r\n fnGetConfigPageFilter(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetConfigPageFilter, args)\r\n },\r\n fnGetConfigPagePage(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetConfigPagePage, args)\r\n },\r\n fnGetConfigChart(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetConfigChart, args)\r\n },\r\n getTabsIndexSelected(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kgetTabsIndexSelected, args)\r\n },\r\n onChangeTab(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, konChangeTab, args)\r\n },\r\n getTabLevel(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kgetTabLevel, args)\r\n },\r\n fnForceUpdateTable(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnForceUpdateTable, args)\r\n },\r\n getDataList(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kgetDataList, args)\r\n },\r\n fnGetOnePage(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetOnePage, args)\r\n },\r\n fnGetOptions(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetOptions, args)\r\n },\r\n fnGetExtraDataTable(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetExtraDataTable, args)\r\n },\r\n fnGetDataTableFilterd(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetDataTableFilterd, args)\r\n },\r\n fnGetDataTable(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetDataTable, args)\r\n },\r\n fnGetComponentTable(fnList = {}, args = []) {\r\n return HUtils.runFuntion(fnList, kfnGetComponentTable, args)\r\n },\r\n fnGetDefaultScreenConfig(fnList = {}, args = []) {\r\n return rf(fnList, \"fnGetDefaultScreenConfig\", args)\r\n },\r\n fnGetIsInTableExpand(fnList = {}, args = []) {\r\n return rf(fnList, kfnGetIsInTableExpand, args)\r\n },\r\n fnGetIsInModal(fnList = {}, args = []) {\r\n return rf(fnList, kfnGetIsInModal, args)\r\n },\r\n fnChangeSwitchView(fnList = {}, args = []) {\r\n return rf(fnList, kfnChangeSwitchView, args)\r\n },\r\n fnGetCurrentSwitchView(fnList = {}, args = []) {\r\n return rf(fnList, kfnGetCurrentSwitchView, args)\r\n },\r\n fnGetButtonList(fnList = {}, args = []) {\r\n return rf(fnList, kfnGetButtonList, args)\r\n },\r\n fnGetDataTotal(fnList = {}, args = []) {\r\n return rf(fnList, kfnGetDataTotal, args)\r\n },\r\n fnGetTableCols(fnList = {}, args = []) {\r\n return rf(fnList, kfnGetTableCols, args)\r\n },\r\n fnRequestUpdateFromExpand(fnList = {}, args = []) {\r\n return rf(fnList, kfnRequestUpdateFromExpand, args)\r\n },\r\n}\r\n\r\nexport const kgetHasLoginSocial = \"getHasLoginSocial\"\r\nconst fnListConfigApp = {\r\n getHasLoginSocial() {\r\n return (\r\n fnListConfigApp.getHasLoginSocialGoogle() ||\r\n fnListConfigApp.getHasLoginSocialFacebook()\r\n )\r\n },\r\n getHasLoginSocialGoogle() {\r\n return HCF.getCF(KConfigApp.hasLoginSocialGoogle) === true\r\n },\r\n getHasLoginSocialFacebook() {\r\n return HCF.getCF(KConfigApp.hasLoginSocialFacebook) === true\r\n },\r\n getHasForgotPassword() {\r\n return HCF.getCF(KConfigApp.hasForgotPassword) === true\r\n },\r\n getHasRegisterAccount() {\r\n return HCF.getCF(KConfigApp.hasRegisterAccount) === true\r\n },\r\n getGoogleClientID() {\r\n return HCF.getCF(KConfigApp.GoogleClientId)\r\n },\r\n getScreenWidth() {\r\n return window.document.body.offsetWidth\r\n },\r\n getIsMobileByWidth() {\r\n let _widthMobile = HCF.getCF(KConfigApp.widthMobile) || 567\r\n if (window.document.body.offsetWidth < _widthMobile) {\r\n return true\r\n }\r\n return false\r\n },\r\n getDefaultTypeHubFilter() {\r\n return HCF.getCF(KConfigApp.defaultTypeHubFilter)\r\n },\r\n getDefaultPositionFilter() {\r\n return HCF.getCF(KConfigApp.defaultPositionFilter)\r\n },\r\n getIsDevMode() {\r\n return HCF.getCF(KConfigApp.isDevMode)\r\n },\r\n getHomeUrl() {\r\n //home_url tu configApp, configAppExt, authInfo.configs. DefaultHomeURL tu FirstSetting\r\n return (\r\n HCF.getCF(KConfigApp.home_url) ||\r\n HCF.getCF(KConfigApp.DefaultHomeURL) ||\r\n \"/\"\r\n )\r\n },\r\n getAppLogo() {\r\n return HCF.getCF(KConfigApp.appLogo_url) || \"/config/logo.png\"\r\n },\r\n getAuthInfo() {\r\n return HCF.getCF(KConfigApp.AuthInfo)\r\n },\r\n getAppTitle() {\r\n return HCF.getCF(KConfigApp.title)\r\n },\r\n getVerAdmin() {\r\n return HCF.getCF(KConfigApp.verAdmin)\r\n },\r\n}\r\n\r\nexport const fnGetConfigTable = (fnList, key) => {\r\n if (key) {\r\n let _configAll = fnListMyPage.fnGetConfigPageTable(fnList, [])\r\n if (_configAll && _configAll.hasOwnProperty(key)) {\r\n return _configAll[key]\r\n }\r\n if (KConfigPageTableDefault.hasOwnProperty(key)) {\r\n return KConfigPageTableDefault[key]\r\n }\r\n }\r\n}\r\n\r\nconst fnListUI = {\r\n fnShowToast(msg, options, opts) {\r\n rf(HCF.CF, KUI.fnShowToast, [msg, options, opts])\r\n },\r\n fnshowDialog(configDialog, opts) {\r\n rf(HCF.CF, KUI.fnshowDialog, [configDialog, opts])\r\n },\r\n fnshowConfirm(configDialog, opts) {\r\n rf(HCF.CF, KUI.fnshowConfirm, [configDialog, opts])\r\n },\r\n fnShowLoadingScreen(opts) {\r\n rf(HCF.CF, KUI.fnShowLoadingScreen, [opts])\r\n },\r\n fnForceUpdateRoutes(opts) {\r\n rf(HCF.CF, KUI.fnForceUpdateRoutes, [opts])\r\n },\r\n}\r\n\r\nexport {\r\n fnListModal,\r\n fnListPopover,\r\n fnListUI,\r\n fnListFilesManager,\r\n fnListMyForm,\r\n fnListMyFormControl,\r\n fnListMyPage,\r\n fnListMyTableCell,\r\n fnListConfigApp,\r\n fnListMyTableFilterControl,\r\n KConfigPageFilter,\r\n KConfigPageTable,\r\n KConfigPagePage,\r\n KConfigPageHeader,\r\n}\r\n\r\nwindow._fnListUI = fnListUI\r\n","export default \"data:image/png;base64,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\"","import { HLocalStorage } from \"@macashipo/mlib\"\r\nconst getObj = HLocalStorage.getObj\r\nconst saveObj = HLocalStorage.saveObj\r\nconst getString = HLocalStorage.getString\r\nconst saveString = HLocalStorage.saveString\r\nconst initLocalStorage = HLocalStorage.initLocalStorage\r\nexport { getObj, getString, initLocalStorage, saveObj, saveString }\r\nexport default HLocalStorage\r\n","import { HLog } from \"@macashipo/mlib\"\r\n\r\nconst logApi = HLog.logApi\r\nconst logExistType = HLog.logExistType\r\nconst logNoAnyType = HLog.logNoAnyType\r\nconst logOne = HLog.logOne\r\nconst logParseJson = HLog.logParseJson\r\nconst logTest = HLog.logTest\r\nconst logW = HLog.logW\r\nexport {\r\n logApi,\r\n logExistType,\r\n logNoAnyType,\r\n logOne,\r\n logParseJson,\r\n logTest,\r\n logW,\r\n}\r\n","import { useEffect, useRef, useState } from \"react\"\r\nconst useCountdown = (targetDate, { stopWhenFinish } = {}) => {\r\n // const [stop, setStop] = useState(false)\r\n const countDownDate = new Date(targetDate).getTime()\r\n const config = useRef({\r\n needStopInterval: false,\r\n }).current\r\n\r\n const [countDown, setCountDown] = useState(\r\n countDownDate - new Date().getTime()\r\n )\r\n // console.log(\"countDownDate:\", countDownDate, countDown)\r\n useEffect(() => {\r\n const interval = setInterval(() => {\r\n // console.log(\"interval tick\", stopWhenFinish, config.needStopInterval)\r\n if (stopWhenFinish && config.needStopInterval) {\r\n clearInterval(interval)\r\n } else {\r\n let _countDown = countDownDate - new Date().getTime()\r\n if (_countDown <= 0) {\r\n config.needStopInterval = true\r\n }\r\n setCountDown(_countDown)\r\n }\r\n }, 500)\r\n return () => clearInterval(interval)\r\n }, [countDownDate, stopWhenFinish, config])\r\n\r\n return getReturnValues(countDown)\r\n}\r\n\r\nconst getReturnValues = countDown => {\r\n // calculate time left\r\n\r\n const days = Math.floor(countDown / (1000 * 60 * 60 * 24))\r\n const hours = Math.floor(\r\n (countDown % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)\r\n )\r\n const minutes = Math.floor((countDown % (1000 * 60 * 60)) / (1000 * 60))\r\n const seconds = Math.floor((countDown % (1000 * 60)) / 1000)\r\n const totalSeconds = Math.floor(countDown / 1000)\r\n const finish = countDown <= 0 ? true : false\r\n return [days, hours, minutes, seconds, totalSeconds, finish]\r\n}\r\n\r\nexport { useCountdown }\r\n","import React, { useRef } from \"react\"\r\nimport styled from \"styled-components\"\r\nimport { useCountdown } from \"src/core/hook/useCountdown\"\r\nimport { HUtils } from \"@macashipo/mlib\"\r\nimport { Button } from \"reactstrap\"\r\nconst Wrap = styled.div`\r\n padding: 1rem;\r\n padding-bottom: 0px;\r\n padding-left: 0px;\r\n padding-right: 0px;\r\n & .a-body {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n & .a-icon {\r\n font-size: 30px;\r\n color: #cbc70f;\r\n width: 40px;\r\n height: 40px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n }\r\n & .a-footer {\r\n display: flex;\r\n align-items: center;\r\n flex-direction: row;\r\n justify-content: end;\r\n margin-top: 1rem;\r\n & > button {\r\n margin-left: 5px;\r\n }\r\n }\r\n`\r\nconst TextDisplay = props => {\r\n const { days, hours, minutes, seconds } = props\r\n return (\r\n \r\n {days > 0 && `${days} days `}\r\n {hours > 0 && `${hours} hours `}\r\n {minutes > 0 && `${minutes} minutes `}\r\n {seconds > 0 && `${seconds} seconds`}\r\n \r\n )\r\n}\r\nconst CheckIdleCountDown = props => {\r\n const fnList = props.fnList || {}\r\n const countSeconds = props.countSeconds || 60\r\n const onlyShowMsg = props.onlyShowMsg\r\n const targetDate = useRef(\r\n new Date(new Date().getTime() + countSeconds * 1000)\r\n )\r\n const [days, hours, minutes, seconds, totalSeconds] = useCountdown(\r\n targetDate.current,\r\n {\r\n stopWhenFinish: true,\r\n }\r\n )\r\n if (totalSeconds <= 0) {\r\n // HUtils.runFuntion(fnList, \"hideModal\")\r\n HUtils.runFuntion(fnList, \"onTimeout\")\r\n }\r\n console.log(\"render check idle\", totalSeconds)\r\n if (onlyShowMsg) {\r\n HUtils.runFuntion(fnList, \"onSignOut\")\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
Your session expired
\r\n
\r\n
\r\n {\r\n HUtils.runFuntion(fnList, \"onCloseAlert\")\r\n }}\r\n >\r\n OK, got it.\r\n \r\n
\r\n
\r\n )\r\n }\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {totalSeconds > 0 ? (\r\n
Your session is about to expired
\r\n ) : (\r\n
Your session expired
\r\n )}\r\n {totalSeconds > 0 && (\r\n
\r\n You will be logged out in{\" \"}\r\n \r\n .\r\n
\r\n )}\r\n
\r\n
\r\n {totalSeconds > 0 ? (\r\n
\r\n {\r\n HUtils.runFuntion(fnList, \"onSignOut\")\r\n }}\r\n >\r\n Sign me out\r\n \r\n {\r\n HUtils.runFuntion(fnList, \"onKeepSignIn\")\r\n HUtils.runFuntion(fnList, \"hideModal\")\r\n }}\r\n >\r\n Keep me signed in\r\n \r\n
\r\n ) : (\r\n
\r\n {\r\n HUtils.runFuntion(fnList, \"onBackToSignIn\")\r\n }}\r\n >\r\n Back to sign in\r\n \r\n
\r\n )}\r\n
\r\n )\r\n}\r\n\r\nexport default CheckIdleCountDown\r\n","import React from \"react\"\r\nimport { MyUIHelpers } from \"@macashipo/mlib\"\r\n// const MUI_checkidle_countdown = React.lazy(() =>\r\n// import(\"./Types/checkidle_countdown\")\r\n// )\r\nimport MUI_checkidle_countdown from \"./Types/checkidle_countdown\"\r\n\r\n// const List = {\r\n// checkidle_countdown: MUI_checkidle_countdown,\r\n// }\r\nconst ListNoLazy = {\r\n checkidle_countdown: MUI_checkidle_countdown,\r\n}\r\nconst MyUIOne = {\r\n init() {\r\n // MyUIHelpers.addTypesFromListLazy(List)\r\n //Chuyen sang nolazy de ko bi loi khi mat connection luc bat popup\r\n MyUIHelpers.addTypesFromListWithoutLazy(ListNoLazy)\r\n },\r\n}\r\n\r\nexport default MyUIOne\r\n","// import LodashDebounce from \"lodash/debounce\"\r\nimport LodashThrottle from \"lodash/throttle\"\r\nimport { MyModal } from \"src/core/components\"\r\nimport { HCF, HLocalStorage, HUtils, HModules, MyUI } from \"@macashipo/mlib\"\r\nimport {\r\n authLogoutWithNothing,\r\n authIsLogged,\r\n registerAfterLogout,\r\n} from \"src/core/helpers/auth\"\r\nimport { HConstant } from \"src/core/helpers\"\r\nimport MyUIOne from \"./MyUI\"\r\nconst KCheckIdle = {\r\n // kCheckIdleLocal: \"kCheckIdleLocal\",\r\n checkIdleLocalTimeIdle: \"checkIdleLocalTimeIdle\",\r\n hasCheckIdle: \"hasCheckIdle\",\r\n checkIdleSecond: \"checkIdleSecond\",\r\n checkIdleInterval: \"checkIdleInterval\",\r\n checkIdleCountdown: \"checkIdleCountdown\",\r\n _noCheckIdle: \"_noCheckIdle\",\r\n}\r\nconst ModuleCheckIdle = {\r\n _key: \"check_idle\",\r\n _fnList: {\r\n resetTimerDebounce: null,\r\n onIdle: () => {\r\n console.log(\"on Idle\")\r\n clearInterval(ModuleCheckIdle._config.timer)\r\n document.removeEventListener(\r\n \"mousemove\",\r\n ModuleCheckIdle._fnList.resetTimerDebounce\r\n )\r\n document.removeEventListener(\r\n \"touchmove\",\r\n ModuleCheckIdle._fnList.resetTimerDebounce\r\n )\r\n document.removeEventListener(\r\n \"keydown\",\r\n ModuleCheckIdle._fnList.resetTimerDebounce\r\n )\r\n MyModal.showFromComponent(\r\n props => {\r\n return (\r\n \r\n )\r\n },\r\n {\r\n size: \"xs\",\r\n showHeader: false,\r\n modalCentered: true,\r\n backdrop: \"static\",\r\n fnList: {\r\n onTimeout: () => {\r\n console.log(\"timeout\")\r\n HLocalStorage.removeItem(KCheckIdle.checkIdleLocalTimeIdle)\r\n authLogoutWithNothing()\r\n },\r\n onSignOut: () => {\r\n console.log(\"onSignOut\")\r\n HLocalStorage.removeItem(KCheckIdle.checkIdleLocalTimeIdle)\r\n authLogoutWithNothing()\r\n window.location.reload()\r\n },\r\n onKeepSignIn: () => {\r\n console.log(\"onKeepSignIn\")\r\n ModuleCheckIdle._fnList.start()\r\n },\r\n onBackToSignIn: () => {\r\n console.log(\"onBackToSignInonBackToSignIn\")\r\n window.location.reload()\r\n },\r\n },\r\n }\r\n )\r\n // MyModal.showMyDialog({\r\n // title: \"Session Expire Warning\",\r\n // msg: `You're being timed out due to inactivity. \\nYou will logged off automatically`,\r\n // size: \"xs\",\r\n // modalCentered: true,\r\n // backdrop: \"static\",\r\n // showHeader: false,\r\n // showFooter: true,\r\n // showFooterOK: true,\r\n // classNameBody: \"text-pre-line\",\r\n // onClickOK: () => {\r\n // console.log(\"ok\")\r\n // window.location.reload()\r\n // },\r\n // })\r\n },\r\n updateTimeIdle: () => {\r\n let _current = new Date().getTime()\r\n _current +=\r\n (HCF.getCF(KCheckIdle.checkIdleSecond) ||\r\n ModuleCheckIdle._config.idleAfterSecond) * 1000\r\n HLocalStorage.saveString(KCheckIdle.checkIdleLocalTimeIdle, _current)\r\n },\r\n start: () => {\r\n // ModuleCheckIdle._config.currentIdle = 0\r\n ModuleCheckIdle._fnList.updateTimeIdle()\r\n if (ModuleCheckIdle._config.timer) {\r\n clearInterval(ModuleCheckIdle._config.timer)\r\n }\r\n ModuleCheckIdle._config.timer = setInterval(\r\n ModuleCheckIdle._fnList.timerIncrement,\r\n ModuleCheckIdle._config.checkAfterSecond * 1000\r\n )\r\n document.addEventListener(\r\n \"mousemove\",\r\n ModuleCheckIdle._fnList.resetTimerDebounce\r\n )\r\n document.addEventListener(\r\n \"touchmove\",\r\n ModuleCheckIdle._fnList.resetTimerDebounce\r\n )\r\n document.addEventListener(\r\n \"keydown\",\r\n ModuleCheckIdle._fnList.resetTimerDebounce\r\n )\r\n },\r\n resetTimer: () => {\r\n // console.log(\"resetTimer\")\r\n // ModuleCheckIdle._config.currentIdle = 0\r\n // HLocalStorage.removeItem(KCheckIdle.kCheckIdleLocal)\r\n ModuleCheckIdle._fnList.updateTimeIdle()\r\n //\r\n },\r\n timerIncrement: () => {\r\n // ModuleCheckIdle._config.currentIdle +=\r\n let _currentTime = new Date().getTime()\r\n let _currentTimeIdle = Number(\r\n HLocalStorage.getString(KCheckIdle.checkIdleLocalTimeIdle)\r\n )\r\n if (_currentTime >= _currentTimeIdle) {\r\n ModuleCheckIdle._fnList.onIdle()\r\n }\r\n console.log(\r\n \"timer:\",\r\n _currentTime,\r\n _currentTimeIdle,\r\n _currentTimeIdle - _currentTime,\r\n new Date(_currentTimeIdle)\r\n )\r\n },\r\n checkIdleAfterInit: () => {\r\n let _hasCheckIdle = HCF.getCF(KCheckIdle.hasCheckIdle)\r\n let _currentTime = new Date().getTime()\r\n let _previousIdleLocalTime = ModuleCheckIdle._config.previousIdleLocalTime\r\n console.log(\"previousIdleLocalTime:\", _previousIdleLocalTime)\r\n if (_hasCheckIdle) {\r\n if (_previousIdleLocalTime && _currentTime >= _previousIdleLocalTime) {\r\n clearInterval(ModuleCheckIdle._config.timer)\r\n document.removeEventListener(\r\n \"mousemove\",\r\n ModuleCheckIdle._fnList.resetTimerDebounce\r\n )\r\n document.removeEventListener(\r\n \"touchmove\",\r\n ModuleCheckIdle._fnList.resetTimerDebounce\r\n )\r\n document.removeEventListener(\r\n \"keydown\",\r\n ModuleCheckIdle._fnList.resetTimerDebounce\r\n )\r\n HLocalStorage.removeItem(KCheckIdle.checkIdleLocalTimeIdle)\r\n MyModal.showFromComponent(\r\n props => {\r\n return (\r\n \r\n )\r\n },\r\n {\r\n size: \"xs\",\r\n showHeader: false,\r\n modalCentered: true,\r\n backdrop: \"static\",\r\n fnList: {\r\n onSignOut: () => {\r\n console.log(\"onSignOut\")\r\n authLogoutWithNothing()\r\n ModuleCheckIdle._config.previousIdleLocalTime = null\r\n // window.location.reload()\r\n },\r\n onCloseAlert: () => {\r\n MyModal.hideModalComponent()\r\n // window.location.reload()\r\n },\r\n },\r\n }\r\n )\r\n } else {\r\n ModuleCheckIdle._config.previousIdleLocalTime = null\r\n }\r\n } else {\r\n HLocalStorage.removeItem(KCheckIdle.checkIdleLocalTimeIdle)\r\n }\r\n },\r\n checkIdleAfterLogin: () => {\r\n let _hasCheckIdle = HCF.getCF(KCheckIdle.hasCheckIdle)\r\n if (_hasCheckIdle === true) {\r\n console.log(\"check_idle run start after login\")\r\n if (authIsLogged()) {\r\n let _noCheck = HLocalStorage.getString(KCheckIdle._noCheckIdle)\r\n if (_noCheck === \"1\") {\r\n return\r\n }\r\n ModuleCheckIdle._fnList.start()\r\n }\r\n }\r\n },\r\n },\r\n _config: {\r\n // currentIdle: 0,\r\n timer: null,\r\n countdown: 60,\r\n idleAfterSecond: 60 * 10, //10p\r\n checkAfterSecond: 5, //5s\r\n previousIdleLocalTime: HLocalStorage.getString(\r\n KCheckIdle.checkIdleLocalTimeIdle\r\n )\r\n ? Number(HLocalStorage.getString(KCheckIdle.checkIdleLocalTimeIdle))\r\n : null,\r\n },\r\n getMyKey: () => {\r\n return \"check_idle\"\r\n },\r\n runAfterInit: HConfig => {\r\n HModules.initDefault(ModuleCheckIdle, { MyUIOne })\r\n console.log(\"run check_idle\")\r\n //\r\n // ModuleCheckIdle._fnList.resetTimerDebounce = LodashDebounce(\r\n // ModuleCheckIdle._fnList.resetTimer,\r\n // 500\r\n // )\r\n ModuleCheckIdle._fnList.resetTimerDebounce = LodashThrottle(\r\n ModuleCheckIdle._fnList.resetTimer,\r\n 500\r\n )\r\n //\r\n let _hasCheckIdle = HCF.getCF(KCheckIdle.hasCheckIdle)\r\n let _checkSecond = HCF.getCF(KCheckIdle.checkIdleSecond)\r\n let _checkCountdown = HCF.getCF(KCheckIdle.checkIdleCountdown)\r\n let _checkIdleInterval = HCF.getCF(KCheckIdle.checkIdleInterval)\r\n if (_checkSecond > 0) {\r\n ModuleCheckIdle._config.idleAfterSecond = _checkSecond\r\n }\r\n if (_checkIdleInterval > 0) {\r\n ModuleCheckIdle._config.checkAfterSecond = _checkIdleInterval\r\n }\r\n if (_checkCountdown > 0) {\r\n ModuleCheckIdle._config.countdown = _checkCountdown\r\n }\r\n if (_hasCheckIdle === true) {\r\n console.log(\"check_idle run start\")\r\n if (authIsLogged()) {\r\n let _noCheck = HLocalStorage.getString(KCheckIdle._noCheckIdle)\r\n if (_noCheck === \"1\") {\r\n return\r\n }\r\n ModuleCheckIdle._fnList.start()\r\n } else {\r\n //waiting login\r\n HUtils.runFuntion(\r\n HConfig,\r\n HConstant.HConfig.FnList.registerAfterLogin,\r\n [\r\n () => {\r\n console.log(\"check idle: call request when after login \")\r\n ModuleCheckIdle._fnList.start()\r\n },\r\n ]\r\n )\r\n }\r\n }\r\n //after logout\r\n registerAfterLogout(\"afterlogout_checkidle\", () => {\r\n let _currentTimeIdle = HLocalStorage.getString(\r\n KCheckIdle.checkIdleLocalTimeIdle\r\n )\r\n if (_currentTimeIdle != null) {\r\n HLocalStorage.removeItem(KCheckIdle.checkIdleLocalTimeIdle)\r\n window.location.reload()\r\n }\r\n })\r\n },\r\n}\r\nexport default ModuleCheckIdle\r\n","import React, { useEffect } from \"react\"\r\nimport {\r\n Route,\r\n RouteProps,\r\n Redirect,\r\n RouteComponentProps,\r\n} from \"react-router-dom\"\r\nimport { connect } from \"react-redux\"\r\nimport { HAuth, HLocalStorage } from \"src/core/helpers\"\r\nimport ModuleCheckIdle from \"src/modules/check_idle\"\r\ninterface ReduxProps {\r\n isAuthenticated: boolean\r\n}\r\ninterface Props extends ReduxProps, RouteProps {\r\n component: React.ComponentType\r\n redirectTo?: any\r\n}\r\n\r\nfunction AuthenticatedGuard(props: Props) {\r\n const { isAuthenticated, component: Component, redirectTo, ...rest } = props\r\n useEffect(() => {\r\n ModuleCheckIdle._fnList.checkIdleAfterInit()\r\n })\r\n if (redirectTo) {\r\n const searchParams = window.location.search\r\n let newUrl = redirectTo\r\n if (searchParams) {\r\n newUrl += searchParams\r\n }\r\n return \r\n }\r\n return (\r\n {\r\n if (!isAuthenticated && !HAuth.authIsLogged()) {\r\n // const currentSolution = HLocalStorage.getString(\"apply_solution\", \"\")\r\n // if (currentSolution) {\r\n // return \r\n // }\r\n return \r\n }\r\n return \r\n }}\r\n />\r\n )\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n isAuthenticated: state.app.isAuthenticated,\r\n})\r\n\r\nconst mapDispatchToProps = {}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AuthenticatedGuard)\r\n","export const PATH = {\r\n HOME: \"/\",\r\n PRODUCT: \"/product\",\r\n LOGIN: \"/login\",\r\n LOGIN_AUTO_MEZYBROKER: \"/mezybrokerlogin\",\r\n REGISTER: \"/register\",\r\n FORGOT: \"/forgot-password\",\r\n RESET: \"/reset-password\",\r\n LOAN_NEW: \"/loan/new\",\r\n DEMO_OCR: \"/demo/orc\",\r\n DEMO_POSTCODE_CHECK: \"/demo/postcode-check\",\r\n DEMO_FORM: \"/demo/form\",\r\n DEMO_HOME_LOAN: \"/demo/homeloan\",\r\n DEMO_HOME_LOANV2: \"/demo/homeloan-v2\",\r\n DEMO_PERSONAL_CHAT: \"/demo/personalchat\",\r\n DEMO_CREDIT_RULE: \"/demo/credit-rule\",\r\n PROFILE: \"/profile\",\r\n SETTINGS: \"/settings\",\r\n}\r\n","import React, { useEffect } from \"react\"\r\nimport { connect, ConnectedProps } from \"react-redux\"\r\nimport { useHistory } from \"react-router-dom\"\r\nimport { logout, toggleSideNav } from \"src/App/App.actions\"\r\n// import { HAuth, HConfig } from \"src/core/helpers\"\r\nimport { HCF, MyUI } from \"@macashipo/mlib\"\r\nimport { PATH } from \"src/helpers/paths\"\r\n// import Avatar from \"./Avatar\"\r\n// import HeaderTitle from \"./HeaderTitle\"\r\n// import { LogoApp, MenuStyle, RightHeader } from \"./Header.styles\"\r\n// import Menu from \"./Menu\"\r\n// import LogoDefault from \"src/modules/app_jet/assets/images/logo.png\"\r\nconst mapStateToProps = state => ({})\r\nconst mapDispatchToProps = {\r\n logout,\r\n toggleSideNav,\r\n}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps)\r\n\r\ninterface Props extends ConnectedProps {}\r\n\r\nconst Header = (props: Props) => {\r\n const { logout } = props\r\n // const { currentHeaderTitle } = useShareableState()\r\n const history = useHistory()\r\n const logoUrl = HCF.getCF(\"logoUrl\") || \"/\"\r\n const targetLogo = HCF.getCF(\"targetLogoUrl\")\r\n const handleLogout = () => {\r\n console.log(\"logout\")\r\n logout({\r\n cbLogout: () => {\r\n console.log(\"cbLogout\")\r\n history.push(PATH.LOGIN)\r\n },\r\n })\r\n // history.push(PATH.LOGIN)\r\n }\r\n\r\n useEffect(() => {}, [history])\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\nexport default connector(Header)\r\n","import styled from \"styled-components\"\r\nimport { BREAKPOINT } from \"src/helpers/styles\"\r\n\r\nexport const Footer = styled.div`\r\n padding: 0 30px;\r\n`\r\n\r\nexport const Menu = styled.ul`\r\n padding: 0;\r\n transition: 0.3s;\r\n li {\r\n font-size: 16px;\r\n > a {\r\n padding: 10px 30px;\r\n display: flex;\r\n align-items: center;\r\n color: rgba(255, 255, 255, 0.6);\r\n // border-bottom: 1px solid rgba(255, 255, 255, 0.1);\r\n text-decoration: none;\r\n img {\r\n width: 20px;\r\n height: auto;\r\n display: inline-block;\r\n margin-right: 10px;\r\n }\r\n &:hover {\r\n background: #3699ff;\r\n color: #ffffff;\r\n }\r\n &.active {\r\n background: rgba(255, 255, 255, 0.05);\r\n color: #8abef5;\r\n font-weight: bold;\r\n position: relative;\r\n }\r\n &.active::after {\r\n content: \"\";\r\n position: absolute;\r\n z-index: 1;\r\n top: 0;\r\n left: 0;\r\n bottom: 0;\r\n width: 4px;\r\n background-color: currentColor;\r\n }\r\n }\r\n }\r\n`\r\n\r\nexport const Nav = styled.nav`\r\n min-width: 256px;\r\n max-width: 256px;\r\n background: #303c54;\r\n color: #fff;\r\n transition: all 0.3s;\r\n &.close {\r\n min-width: 0px;\r\n max-width: 0px;\r\n text-align: center;\r\n ${Menu} {\r\n li > a span {\r\n display: none;\r\n }\r\n }\r\n ${Footer} {\r\n display: none;\r\n }\r\n }\r\n @media (max-width: ${BREAKPOINT.MD - 1}px) {\r\n min-width: 0px;\r\n max-width: 0px;\r\n text-align: center;\r\n ${Menu} {\r\n li > a span {\r\n display: none;\r\n }\r\n }\r\n ${Footer} {\r\n display: none;\r\n }\r\n &.close {\r\n margin-left: -80px;\r\n }\r\n }\r\n &::-webkit-scrollbar-track {\r\n -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);\r\n border-radius: 10px;\r\n background-color: #303c54;\r\n }\r\n\r\n &::-webkit-scrollbar {\r\n width: 6px;\r\n background-color: transparent;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n border-radius: 6px;\r\n -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);\r\n background-color: #242e40;\r\n }\r\n`\r\n\r\nexport const Logo = styled.a`\r\n display: block;\r\n color: #fff;\r\n font-weight: 900;\r\n padding: 10px 30px;\r\n transition: 0.3s;\r\n`\r\nexport const Sidebar = styled.div`\r\n position: relative;\r\n display: flex;\r\n & .overlay {\r\n display: none;\r\n width: 100vw;\r\n height: 100%;\r\n min-height: 100vh;\r\n top: 0;\r\n position: absolute;\r\n left: 0;\r\n z-index: 99;\r\n background-color: rgba(0, 0, 0, 0.2);\r\n }\r\n @media (max-width: 768px) {\r\n & .overlay.open {\r\n display: block;\r\n }\r\n & .c-sidebar {\r\n max-width: 256px;\r\n min-width: 256px;\r\n position: fixed;\r\n left: 0;\r\n top: 0;\r\n z-index: 100;\r\n min-height: calc(100vh - 73px);\r\n height: 100%;\r\n overflow: auto;\r\n }\r\n & .c-sidebar.close {\r\n margin-left: -256px;\r\n }\r\n & .c-sidebar > ul > li > a span {\r\n display: block;\r\n }\r\n }\r\n`\r\nexport const CloseSidebar = styled.div`\r\n display: none;\r\n align-items: center;\r\n justify-content: flex-end;\r\n width: 100%;\r\n padding: 0.5rem;\r\n & > button {\r\n background-color: #242e40;\r\n border-color: #242e40;\r\n }\r\n @media (max-width: 768px) {\r\n display: flex;\r\n }\r\n`\r\n","import React from \"react\"\r\nimport { connect, ConnectedProps } from \"react-redux\"\r\nimport IMGlogo from \"src/assets/images/logo.png\"\r\n// import { HLog } from \"src/core/helpers\"\r\nconst mapStateToProps = state => ({\r\n closeSideNav: state.app.closeSideNav,\r\n})\r\n\r\nconst mapDispatchToProps = {}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps)\r\n\r\ninterface Props extends ConnectedProps {}\r\n\r\nfunction SideNavHeader(props: Props) {\r\n // const { closeSideNav } = props\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default connector(SideNavHeader)\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANoAAAA3CAYAAABqx1SHAAAABHNCSVQICAgIfAhkiAAAHVdJREFUeJztnXd4VFX6x7/n3Ds1yQwJIfSqWFDsS7HQRTEU0UUEFxHRIJK4tIVldTdGf4pSxIWsu2JBFEVBRREJ0kIohkBAitQEQw8p0+udW97fH5nEiKFlBt3V+TzPPM/Mfea+573n3ve87znnPecCMWLEiBEjRowYMWLEiBEjRowYMWLEiBEjRowYMWLEiBEjxq8A+7UViBHjXIwYMSKFc367pmk3K4rSRdO0DkTUUNM0xhgjABBF8aQoijs454WCIBSIorhz/vz5/l9b97OJ2NCI1jYMhOLvMOmlvYx1L4lE1lNPPZVut9sHA9AzxgTGGHHOp8fHx38zf/58OVJdqxk2bNhWVVWJMUaMMadOp3v7gw8++Dxa8ocOHfoZgMbhnwKAgk8++WR8JDKJCs2KEvgDIMg63e3fRqzkfzGjRo1qpChKB8bYwFAoNEBRlOaMMTMAMMZARGefogLwCIJw0GAwLFNVda3ZbD54IYMbMWLEJ6FQqCUAYoyp0bwGImIABL1eX2SxWN4QIxXmk7bc8EOpdUaTRM8CAK9GIk9V1WtVVe3JqgAAaJrWWpIkAUDUDE3TtM6qqoJzDiIKaJq2LlqyAUBV1V6MsQa1yotYZgiBFsfLrdM4V21EK3cwdp8UibxHH310dzAYvKH6wVVVFQ0bNswGMDVCj8AeeuihxYyxodUHOOelADYuXrz44fOdOGTIEEGn090ky/JToVDoEVVVTdXPQTWapqH6WC2DEwA0kGW5i6IoXTjnx4koe/To0UveeeedY+cqT1XVXpqmJRMRzi4nWiiK0jgYDH7KIxOz1nLGLvbb/QO/uqhUSCUqNEcijYi8AGpuMmMMjDF/eXn5z5qwaMEY83LOfVEW6z2rDFekAt1ufsueEqHHweNiZ0WJvzVSeaqqMk3ToGlazQNrs9meNplMfRBhpENEqJataRpUVdXq8EI/YcKECab4+PiBsiy/GwwGn9A0zcQ5r34Gqv8WAOAkIhsAe7heg0DVs1L9f03TWkmSNEOSpNcHDx58/bnKZIw5I7nOiyQAQI7I0AIBsf2eH2hg0UkXDh1VrrF7/f0ikcc5/9kNZperqalF2M1HWeRPnqwIH9xtDYtPUv/9R32GolO+1odPiYOIciOKRgCEav8Ie3dut9unp6WltYxIXaKzow+ljmM1ZGRkGCRJGu71eheoqnoDgNpeSwZQyjnfKQjCO0aj8SUA/wCQaTKZpuv1+oWiKH4H4AwAtbZ3CgaD9wPIHjNmTAfUcQ/Ocd9VIpKJSInGB6h6rut9s4hyjd+XsLs37fVfLSsa/BJLbHpAGEZUtIKx9hGFNTF+SqkteGf+AbnHyUo/DDom5h/gfdq3NnwEYHc0yxEEAT6fr4PJZJo0ZcqU52bMmOGJpvy6SEtL0+l0uv5lZWWzFEWxiuKPjyRj7IxOp1un0+kWGQyGjecKaR955BGLKIq9NE0bIctyDyJKqtU+d5dledbEiRPHvPbaayfOpwtjXGWMNqsqHQPAEUEDyRhjRMQBlBDRqXobms+HK/N2+x48eCKIZCtDmYPE9bv0XTtffbIngFX1lRvjpxAVmldus6fmH/A1F7gGWQX8knh1h9baACLayxiLvANYC8YYbDbbWKvV+k1mZubqrKwsJZryzy7ObDZ3On36dGYoFGqg0+kAAJqmaaIoHjKbzS8vWLBg0YWEfPjhh24AXwD4YuTIkU9JkvQ3RVFaMsYgCAIcDkc/g8EwcvLkyXNmzZpVZzeBiCAITNXp9C988MEH66N6laiy2kuGiIRDpaFuK7Y7b3X6PTjj8KHM6UPhYWfyqh3+YUQkRFvR3ysnKzx3rdrm6lV82gWbx49Klw/fH3XGrd/puQf4tm20y+OcQ9M0XWlpaaYkSW2iLb82GRkZyS6Xa3QwGOxY7ck0TdP0ev0Bk8k05mKM7GwWLlz4H4vF8jdBEJzVYSRjDHa7fbyqqtee79xwNyWufldzfuplaDbvhvZfbHY+tKPIDo/fjzM2L2xuL46Xe/TLNlX29vs33hBtRX+PEBXqNu9z3bN2V+UVLq8XZ+xeODw+nLJ5sGqHvcPGPZ7+0epf1u5TiqIIn8/XqbKyMi0jI8MSDflnk5mZyf1+fw+PxzNMEITqQQyIongqPj4+87333ttUX9nz589fZLFYPkG4H8o5hyzLDb1e733nOy88iHNZxgQu2dCIiB86Jt356Zayu7zBAFzeIOzeAFy+INyBAL7db09anu94LByfxoiAExWezl/m2/scOe1GQJZg9wRg9wYQDAXxfYkz6atvbf2BzcnRKEsQhPLao6Occzidzr/IstxtyJAhUY9Qjh49miLL8mBN04zhgRgwxkIJCQnL33rrrc8ilW82m9/gnHuAmtFrBIPBAZFrXj8u2RiCwQ2tvi6oSD1Q5OEiJ/glBQFJgV9SoCgKnD7JtGjtmf7AlvaXQ+HfC0Qk5O9z9s7dabtOVlQoilpVz0EFRBrc/hBW7ajouPWAd2AUygJjbJ1er/+3pmkBoGYUEk6nM7NNmzZtEOUsIoPBcIMsyz2qf2uaBr1eX2w2mz+Khvx//vOfe3Q63XFN0yQikgBIkiT9as/kJRkaEbGDxwM3rSiwdQepEAWCompQtaqPRgQNhC0HXI0/z6sYeRmGzX83OH3rr/siv/KesooAjzczyMqP9awoGgx6oPi0v/HSvPIHIp2/ZIxBVVVBkqRMs9m8SwvPsDPGIEnSbR6PJ23q1KlRDSElSbpFluWmtbwZGQyG7XPnzo1a1oter59JRLMBvAZgLud8brRkXyqXOOpYkLJ+t2vQnsPeRJNFBOqYgxQ44JfVuE82Vt73QPcNc1E1vxHjEiAi9lX+l30373HeynQMosBQO7mEAOhFDrdPxfpdzht2H7ENAPBJJGWqqhrXsWNHzWaz/UWSpC+JqGH1JLDNZksXBCEvMzNzVVZWVlRGORVF6QT8mFLFOXeIolgYDdnVLFiwYHE05UXCJXm0/UedN3+6qaIfNA1GA4dWh6FxzsABbN7nare60DMsSnr+rpCw4YrlW239TpRJ+oQ4EVTHo80YoNMxFJ8OtFi2pWIwUaEukjI557Db7UJ2dvaW+Pj491RVDVYfVxTF7Ha7nwsGg60iKeMsUmrP6QuCcEoUxY1RlP9fxUUbGlGhdfN+V7/8/Z7GJosIOkcKJgcgCgwVDinukw2VQ4nyk6Kk6++GvG2efrnfOTuDEwTO6gocQAQYdAzeoIJV2+ydD51wRJSVwxhDcXExACAxMfEVk8m0Q1VVDaiayPZ6vV2dTmfa1KlTrZGUU42qqj/JPhEEwWE0GouiIbu+hD3rZZk3vOjQseik7cYlGyoHQlZhtOjr9GZAVVjDBQZBx3hOge3awkO2+wG8Gx11f/sQ5Tef8MbBu4+UBuNMJqFOI6tG4Ax6kePAcX/LFfmVgwAsj4YOs2fPrhw/fvz0U6dOLSKiBrVCyPEJCQnrAayNtAxN06xnZdd55syZE4hUbiQQERkMBmtGRobB7/fXez7NaDQyAPB6vb6FCxcGgYs0NKLc+PfXVN63+XtXazHu/DcfqBqe0okMNl8oftHayhFEue8z1vNyZhj8Ztiyr7L3uu9cf4CmwaDT4by5uAQY9RyegCos32q7s9y+/o6UpF5boqGH1WrNcbvdHzqdztGccyNjDIqimGw22+Rnn3226KWXXjpnVvzFwDm3Vic0h4ffo53YfclomqYLBoN/VxRlbCTTUx6PR8c5l4xG48cA3gAu0tCOlivXf765sp/kVZi1of5nN5+oqs9QG84YdALnX2y13fznB5sOAhDx3MhvHaJNiZnvl/Q/cMLfWKeve+qqdl0TAM6r+mr7jnrbfLmlYhiAqBhaVlaWNnXq1GdDoVDnQCBwG+ccoijC5XLdzTkfnpmZOS8rK8t7YUl1o6pqzUCIpmmqXq8vi4be9SWsC/P7/degzmG+i4eIGOc8IMvyjupjF7RaIhK2H/L0yN3lvB4GAbXz6xkDZJXg9qnwhzTws6RxDpRWBuP+tfzMk7Gh/guz67C72zcFjk6KrDKzmdc0aIwBGhHcfgW+oArGfpzUIgIMIofbr+kXb6js6Qvl3RwtfV599VVXQkLCPzjn9lpZ8dztdk+VJKlTNMoIh6Wqz+cLRkNeFHRhgiDwCD9MEAQSBKFmxcIFDa3MkXvN6m32fm57iFvihJq+GQPgDagwilwa1Tel6MomRp/DKUOo1RAzxsAFJq7It3c+XrYuNeo18xtj7S5X6p5jvpZ6owAermfOAH9AhSwDA7s0PHXvbQ1OOZ0yVKIazyZwABz4/qi3zbK88iHR1CklJWWNxWJ5D0CgKvFWgKqq1tOnT09LS0ur9yjkWYs39WazOT4qCkeB2mvp6vtRVdWsqmpNP++CoeOuYlef5QX227lJgCAAmlbVwnoDKvQi06Y83Hzp+EFtn19ZWDpkxPSi6XaXgiSrCFWt+p/AGY6WBuI+WFf6MFHuqlhfrW6OlK3p/eTMQ3cFghq3WkRoVGVkgZCGkEwY1jtp+6wn2k44XhlsXuGS527b7WrcINkAhiqvphcZnH7F/GW+vS9R/ruMdS2Ohl5ZWVnKpEmTpgcCgdslSeoC1IxC9tDpdI+mpaW9Vp8V2YwxRVVVkYfDoFAoFJVUsvoS9tiqxWL5WKfT7SIifQRRmCAIgmowGGrC+PMamiuYe+Vzbx+9t6I8KFoS9dC0qpvvDajgGjD+wWYrpj7UPIOxO5weyn37PxO0RmNeK5rocCpItIpQNUDkDEGQ7vON9r5j721xG4Ct9VT+N83q7faBO4742uv0HAxVjVRIJgQ9KgZ0a3gofVDLvzZP6buFaInw4mOtjNPePv76zj3uRGuKAQwEUWCQZIb8751XrtxWPhjAzGjpNnv27Mpx48a9VF5evpCIkgCAMSZ6vd6M5OTkAgBrLlUmEfkYY9bwdwCIR1WgdNlW018IzrmqquoSVVVXJyUl1bur4/P5mMlkIovFUhM6ntfQdh3ydF+53d6DhCoDAwN8QQ2aRhjXv2nuS49d9Qxg9ZeU5vRIYD03+Hy5M91pSty4uT+McXhVJCYIUFXAZODYf8zX4NMtFY8hZmg/46RtfeenXjvY3eWWhYQ4sarvK2vweRR0vdl6dPwDLSbc3sG0sdyRe1N5uVba99YmH+t0ugajXzn4Sskxv8nauMqz6UWGUpdiWbKxYiDRloWM3VEeLR3Ly8tXx8fHL/R4PGOJyMg5RygUSvF4PBOeeeaZQ3Pnzj1+KfI455WqqtYM8TPG4idPnmw+13qxXwimqqq6aNGiqPcXz9lHCwQ2t1pZYE89ejxgNJurbr4voEKWCWNSm26cNqLNqK0nWfmby/dnD3+heHHe3q/HxMX1PPP4PS1emvlUm49ABG9AgyBU9SE0Rrp315wZ6JFyr4n2Rfyvs3Gnrf/2w55rGa9Kt5JVwOtQ0P2WBidff7rdhN63DMz5Ot/z+B+z9n89f3XZs8A+tecNyW+9nnHFCy1amVSXQwZjDDqRgTPGNu1yXlNw0HF/NHVcunRpKDk5eYbJZKpZ1c05h9fr7R0IBB7OyMgwXIo8vV5/svamRZqmNfR4POddL3a5CeddXpa1lOf0aDtLnN2+2mrvqZIGo14Hf1BFSCI80rvRzozBjcc1adDrxKrtn7887e0jIxzukHHKv4/8deeRHJfJ1O1jZzDvOUXRDNPeOPagB4QEkwCjXsDuIk+jnK22kQCmXY6L+V/EI63tMOqVI33K7bI+Ll6EBoLXJuHGDhb7C6PaTu189YAvCotWDX/69eIXt+2sTDla7n+8VXJb38h+XacRrZ5H7EqeNrvopfJyCQ0bGWHUEU7Zg0nv5pT/iSj/A8a6Rm0SeObMmWfGjBkzIxgMvkVESZxzqKqqd7lc06xW606EJ7IVRUH1aulzoWnaaV5rmFpRlBZE1BNA1PIdR40a1cHpdDYXRRFEJHLO5SVLlpxzsv1CGwhFQp0ejSg3eW2hs+/hY/4G5ngRUkhD0K9iwJ1JBycMafH0NS1T97+T81nmc++WPO3wK8Y4iw7bi91tJv2r5PkjJ9ekNjB2L3mif5NpGQ83y5U9KvxBDSIHVEB886uy4cHgpnaX7Yr+x9iwwzOo4IC7IxeqvJmrQkLHa+McM8dcMan7DQM+2leyZuCEecUvb9/vTEloZMDJcilu+uLjY5dt+nIKY3193bok/GtWWrvZVqsIW2UQoo4DjPF139mv3V3sfDDa+jZp0mSl1WpdwhgLVY9CKorSwOl0pqenpzcDfhxRPB86nW5Hrcx9KIqSEAqFbommrrIs/58gCAuI6D0ieodz/mY05V8KdRravpJQl2+223sqCoEzBp9bwT1dEw+/MKLl2NuuSi34eP2yiS9+eGz8qfJAgjVegE5kMBoEbNrvvDo9u3jGKdvaPo0sfYuyHmv154yhzTYEXQpCKsGoF5B/yN38mx3lj/7SF/rfCNHmVp9uqux3yi7HmU0czgoJbVuZA9OfuDKz760D3zt4Yu29E/9TNGPzHkdrc5wAQWCIMws4dNpv/cfCksnLv10+Pond7Rpxd+vpr429crY5XoTTJcOgF3DKHkp6b82ZPxHt00dT56ysrKDJZHpJr9fvrvYAjDE4HI57GGN/BABRFH0X2suSMbaTMXa8lhdhoVDotokTJ/aOhp7jxo1rqChKZ8ZYc8ZYM8ZYUwCXZbX4xfAzQyMqsOQU2voXFnmacQOH16ugV6cGJc//qd34m9sP2LBs07KxmR8enXbsjN9itYrgQlXrZdAxGHUMa3c7OqTPO/LqGdu6Tknxd++dNrTFpOGpTb7zOmQQACmkCW/nVAwPBHLb/N4nsdftqLw/b6/7RsYBj1NBi2ZGacbYds+ndhqUXVKa22Pym8Wz1u2wX21OEKHXV1WVIDIkxAnYd8zb6PmFP0zJ2/X1GMY62YZ2azhzxpPt3gYDPF4FnDO+arv9pu+PHY/6/OW8efNOWiyWl0VRrAgn4kLTNKPT6UwfM2bMbXq9/oIZI8nJyYUJCQkrqg0yvAK6jdvtfjwzMzPi1fmyLPdTVdUCVIWERASdTrc5Urn15WcXVHTa0WnlNlvfkE/lWkBFp+sSyl5/+sqpXTr0++b9tZ8/k/F68cuHdziSIAMuhwKHTYbTLsNhk+F1K5BdMpatLL3lkVeL3v6uaGX3Zo3u3fns0GZPPdgneY/XHgLnwIa9znb5BzwDqvdP/z1CtCVlySbbgNPOkEX1KEi0iJj+RJs5f7yzdfbeknW9n56xL3vFitPXKT4VPs+P9ey0yXC7FGgBDTsLHU3TZx184YstXzwTH9+7bHi3hi9Of6L1ElKAoE/FcVso+bO8yuFR2APyZ4iimGMymT4kopCmaRAEAYFAoL3P55tMRNcDOK9LmzFjhsdkMq3Q6XQViqJUb34qut3ue0tLS8dGotvIkSONgUBgNBGZah83Go0rI5EbCT+5AUT5prnLSwbm73e3hqLh1puslRn3N/lHx7atvrS5191aeMj1WIMkQWzfs2GZJvA6E14ZAYqicV9Aar79gHc0UcF3jHXetrck588BCW+vzKu4QjZqwqLc8sc8tOnjBHZXxbmUC7dEv0mv9+1+e+qm7903hiokWBoZ8OLo1m/+qU+bWUCwQe53FaMcIaXdHXcklotGoc4+OgOgKcSCIc2Ut8f58OGTqwuSku4uKDn9TWZAgjFrfslAv0bClwX2LqP7NrkTwIZo6j9v3jwpPT19pizLtwWDwTur8xYlSRrIGFMFQbjg4ILRaNxoscS/b7M5JlV7RiJKcjgck4YPH+786KOPPqyPboIgvOD3+zszxgSgKtPDaDQe4pxvuNC5dW3iGw1+YmjHKzy3rNrq7B08HuTX/sHqeOXJK17oc3OzRYxdF/L7c0ufSG387Jj7UkinFy6Q3aEgFCIuiIIEaDIAXN/m3rxZaauecXhDb+cXupp+usl2Y/ogTz8i+uBcni3cqfbl5ORctg1ZiUjjnP+ieXZEmxInz/9h8KED7oYGs4jMx1u/+/igxi8y1slGtCnxvk7W+b1uSvjIYBQveN2ypopMIyXZTKcBoG2zew7uLPnqH/5gq4SZC472PFTkbfLplsrHEWVDA4Ds7OzT6enpcysrK9uHQqHGQlX+neliR+9mzZrlS09PX2g2S3cEAoEu1Vt6E1HbUCj00iOPPNImLi4ue/78+Re1pfqIESNSADzr8XhGEpGp9gsxkpKSZodCoaMXEEGXaxVBjaERkbBwzdJ+azdVXNO0jSn4f6Pbzuxz8xULGLvODwBmc8+TAE7Wt6CqjVsp598TMW7cnMPztuTZmr+TU/pkdvqOT1Frv/06zmsxdOjQNuF9LC5pjkPTNAPnXFm6dOk505EYYzoiajJkyJBGqMpOqBdLly696DfpHDru771yQ0UnjcCffazlp0/c1+RlM+t1qkqfuxwA8uqrBwDc0nbA7s17V06RSZ39+jsnur27qqynL5R7U5y+565I5NaFTqdbER8ff7vD4XiaiPSXuoN7WVnZ/sTEhExN07IlSWpfbWwAWkuSNIWIugwbNiyHc74hKSnpyLx5837S+IwYMSKOMXaVLMvdZFlOVRSlGwBD7Zd3JCYmLjIYDMuys7Mv9KIUpqpqq8GDBzfVNM2gr+4YR4Cqqkyv1wdrDK3Cn3v9opyygXFxAmb++cpZD9zR7t+MXVfvZRB1ETa2L+aOJfPjLiX7neVn7vzz/c3vJaJldXm1cEWNJaIHw+deUic5HDpoADqf6z9EZFFV9UkA/YioXiN04Qejy8X8l4iEidnvDSs6HWz8l5GtvnoitcnfrcZeR+pT7vm4s+N9hbl7lk8tKw+9sTin/OZ3c848DSAt2uXMmTMnMGXKlNmhUOgWj8fTrfaW3hfD0qVL1e7du69v27btJCJ6WZbl64GaOrXIstyfMdZVVdWjlZWVZcOGDTuiKEoQADcYDAmyLLcjokYAWmmallh9bnj5DSwWS058fPwLs2fPrjyfHuENikRN06YKgvC4IAhCNLotnHNSVfVYTa18urbsocMnAx2fG91u3iN9Ws5h7ObL8qaNKoPJ/eTfk642DMna96+ZS048M3/ihtUAvJpW57rtdoyxduFzL4c+IoC2ANpGS364Uah9qObHjqKv7/1sc2XqowOa5D6V2vjZZsn3HIxKoXXQ84aBW7fsWz7ZE9DmzVl66mGvd/0/4+N77avW8Wyd61vOjBkzTo4fP/6fkiRdJctyE0H4aeARfg/dOeXn5eUpeXl5Xz366KNeAJMURUk96/VMDanqBYTVRqQwxlgwGBSqjapWKlf1q500s9n8blxc3Gtz586tc4uEOnRiRHQVY+yq+tZFXRBREicifrxyzW3bDnv7/6lf48/HDmn6MmNd7dEs6GwY66l0vT514ZuTrsr8dr/nrm0H/QMAgHNuxCWGh/+lxNd+Cw5jzAgAREWG99eUT+p/e9KuMfel/O2KlvftvdyK3HHdwPXTx7T7S+vGBs8bX5/+a/UmPkR0dphsSklJqXdLY7VaV1qt1iVEVNcrmkxEdMEt8d5///1cxtgEk8k0zWg07g7r+RNDCn8XUes5qTa26v/pdLqtJpPpGUEQ/v7GG28cOFd5ddTBZYExRqLNu/qqwn2++ztdHbdjUI+UV+JYz19kezjGmEpUmH3GJrX4vsSTCmBx2FX/zxsaEdFZ3lEgKrQeOFncK8Uqum+5JuGVzh0G/mLJ1R3b9FuZv2/FlC+2VD5VfKbiDlQNjATDuiqMMTG8yWi9ycrKCk6ePPktn893YzAY7B6uA2KMcSIKcs4vSv7ixYuL0tLSZsuyvBHAPZqmdVdV9TYiigOghHWu+X/4O2eMuXU6XQHnfKMgCN8sXLhwJ37FlQBnIaDC+c2tBfuWjzlwdFXXX0MDoi0pG3Yt//uvUfYvic+3sWnBga8eLT7x9b2XY17rQhAV6rbs/3LszsNfP/BLlx0jRowYMWLEiBEjRowYMWLEiBEjRowYMWLEiBEjRowYMWLE+JX4fzITDj+S34AoAAAAAElFTkSuQmCC\"","import React from \"react\"\r\nimport { connect, ConnectedProps } from \"react-redux\"\r\nimport classnames from \"classnames\"\r\nimport { NavLink } from \"react-router-dom\"\r\nimport { PATH } from \"src/helpers/paths\"\r\nimport { isLocalDev } from \"src/core/helpers/utils\"\r\nimport { Menu, Nav, Sidebar, CloseSidebar } from \"./SideNav.styles\"\r\n// import { HLog } from \"src/core/helpers\"\r\nimport SideNavHeader from \"./SideNavHeader\"\r\nimport { MyIcon } from \"src/core/components\"\r\nimport { MdKeyboardArrowLeft } from \"react-icons/md\"\r\nimport { toggleSideNav } from \"src/App/App.actions\"\r\n\r\nconst mapStateToProps = state => ({\r\n closeSideNav: state.app.closeSideNav,\r\n sideNavItems: state.app.sideNavItems,\r\n})\r\n\r\nconst mapDispatchToProps = {\r\n toggleSideNav,\r\n}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps)\r\n\r\ninterface Props extends ConnectedProps {}\r\n\r\nfunction SideNav(props: Props) {\r\n const { closeSideNav, sideNavItems, toggleSideNav } = props\r\n if (closeSideNav === true) {\r\n window.document.body.classList.add(\"sidebar-close\")\r\n window.document.body.classList.remove(\"sidebar-open\")\r\n } else {\r\n window.document.body.classList.add(\"sidebar-open\")\r\n window.document.body.classList.remove(\"sidebar-close\")\r\n }\r\n return (\r\n \r\n \r\n {\r\n toggleSideNav()\r\n }}\r\n >\r\n \r\n )\r\n}\r\n\r\nexport default connector(SideNav)\r\n","import React, { ReactNode, useEffect, useState } from \"react\"\r\nimport Header from \"src/components/Header/Header\"\r\nimport SideNav from \"src/components/SideNav/SideNav\"\r\nimport { HConfig } from \"src/core/helpers\"\r\nimport { HCF, MyUI } from \"@macashipo/mlib\"\r\nimport ResizeObserver from \"resize-observer-polyfill\"\r\nimport Bg from \"src/modules/app_sigo/assets/imgs/bg-hotro.png\"\r\nimport styled from \"styled-components\"\r\nimport classnames from \"classnames\"\r\ninterface Props {\r\n children: ReactNode\r\n isHideFooter?: boolean\r\n isHideHeader?: boolean\r\n isHideSideNav?: boolean\r\n isFull?: boolean\r\n}\r\n\r\nexport default function MainLayout(props: Props) {\r\n const { children, isHideHeader, isHideFooter, isHideSideNav, isFull } = props\r\n const [needReload, setNeedReload] = useState(false)\r\n const configFooter = HConfig.getConfigFooter()\r\n useEffect(() => {\r\n const applyResponsiveWidth = 1010\r\n const ro = new ResizeObserver((entries, observer) => {\r\n for (const entry of entries) {\r\n const { width } = entry.contentRect\r\n if (entry.target == document.body) {\r\n const isResponsive =\r\n document.getElementsByClassName(\"theme-sigo-responsive\")?.length > 0\r\n ? true\r\n : false\r\n if (isResponsive) {\r\n if (width > applyResponsiveWidth) {\r\n if (needReload === false) {\r\n setNeedReload(true)\r\n }\r\n } else {\r\n if (needReload === true) {\r\n setNeedReload(false)\r\n }\r\n }\r\n } else {\r\n if (width <= applyResponsiveWidth) {\r\n if (needReload === false) {\r\n setNeedReload(true)\r\n }\r\n } else {\r\n if (needReload === true) {\r\n setNeedReload(false)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n })\r\n ro.observe(document.body)\r\n })\r\n const renderReloadUI = () => {\r\n return (\r\n \r\n \r\n
\r\n
\r\n

Bạn đang chuyển đổi thiết bị?

\r\n

Bạn vui lòng tải lại trang để có trãi nghiệm tốt nhất.

\r\n window.location.reload()}\r\n >\r\n Tải lại trang{\" \"}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n )\r\n }\r\n return (\r\n
\r\n {needReload ? (\r\n renderReloadUI()\r\n ) : (\r\n <>\r\n {!isHideSideNav && }\r\n \r\n {!isHideHeader &&
}\r\n {/* {isFull ? (\r\n
{children}
\r\n ) : (\r\n
{children}
\r\n )} */}\r\n
{children}
\r\n {configFooter.show === true && !isHideFooter && (\r\n \r\n //
\r\n // \r\n //
\r\n )}\r\n \r\n \r\n )}\r\n
\r\n )\r\n}\r\nconst WrapReload = styled.div`\r\n padding: 4rem;\r\n max-width: 1080px !important;\r\n margin: 0 auto !important;\r\n & img {\r\n max-height: 40px;\r\n }\r\n & h2 {\r\n margin-top: 48px;\r\n font-weight: 600;\r\n font-size: 32px;\r\n }\r\n & h4 {\r\n color: #767676 !important;\r\n }\r\n & button {\r\n font-weight: 600;\r\n display: flex;\r\n align-items: center;\r\n & i {\r\n width: 14px;\r\n height: 14px;\r\n margin-right: 2px;\r\n }\r\n }\r\n & .icon {\r\n padding: 0 1rem;\r\n text-align: center;\r\n margin-top: 40px;\r\n }\r\n @media (max-width: 767px) {\r\n padding: 2rem 1rem;\r\n & > .row {\r\n flex-direction: column-reverse;\r\n }\r\n & .icon {\r\n text-align: left;\r\n }\r\n }\r\n`\r\n","import React from \"react\"\r\nimport MainLayout from \"src/layouts/MainLayout\"\r\nimport { ConfigPage, MyPageLayoutHelpers } from \"@macashipo/mlib\"\r\n\r\nMyPageLayoutHelpers.setDefaultMyPageLayout((props: any) => {\r\n return {props.children}\r\n})\r\nMyPageLayoutHelpers.addTypes(\"blank\", (props: any) => {\r\n return
{props.children}
\r\n})\r\nfunction PageGeneric(props) {\r\n const configPage = ConfigPage.createFromConfigPageServer(props.configPage)\r\n const CMyPage = configPage.getMyPage(props)\r\n const CLayout = configPage.getWrapMyPageLayout({\r\n ...props,\r\n children: CMyPage,\r\n })\r\n return {CMyPage}\r\n}\r\n\r\nexport default PageGeneric\r\n","import React from \"react\"\r\n\r\nexport default function Loading() {\r\n return
loading...
\r\n}\r\n","import React, { lazy, Suspense } from \"react\"\r\nimport { Router, Switch, Route, Redirect } from \"react-router-dom\"\r\nimport { HLink, HConfig } from \"src/core/helpers\"\r\nimport { HCF } from \"@macashipo/mlib\"\r\nimport AuthenticatedGuard from \"src/guards/AuthenticatedGuard\"\r\nimport PageGeneric from \"src/pages/PageGeneric/PageGeneric\"\r\nimport Loading from \"src/components/Loading/Loading\"\r\n\r\nconst PageNotFoundv2 = lazy(() => import(\"src/pages/PageNotFound/demo2\"))\r\n\r\nexport default function Routes() {\r\n const history = HLink.getHistory()\r\n const publicRoutes = HConfig.getPublicRoutes()\r\n const privateRoutes = HConfig.getPrivateRoutes()\r\n const configLogin = HCF.getCF(\"configLogin\") || {}\r\n // console.warn(\"history:\", history)\r\n return (\r\n \r\n \r\n {/* {\r\n const configPage = {\r\n UIUrl: \"/customer-accounts\",\r\n UIType: \"account_selection\",\r\n }\r\n const configMainLayout = {\r\n isHideHeader: true,\r\n isHideFooter: true,\r\n isHideSideNav: true,\r\n isFull: true,\r\n ...props,\r\n }\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n // (\r\n // {CSuppense(props, Home)}\r\n // )\r\n }\r\n />\r\n (\r\n }>\r\n \r\n \r\n )}\r\n />\r\n } />\r\n }\r\n />\r\n {configLogin.showRegister !== false && (\r\n } />\r\n )}\r\n } /> */}\r\n {privateRoutes?.map((v, i) => {\r\n const configMainLayout = {\r\n ...v?.configMainLayout,\r\n }\r\n return (\r\n (\r\n \r\n )}\r\n />\r\n )\r\n })}\r\n {publicRoutes?.map((v, i) => {\r\n const configMainLayout = {\r\n ...v?.configMainLayout,\r\n }\r\n return (\r\n {\r\n if (v.RedirectUrl) {\r\n const searchParams = window.location.search\r\n let newUrl = v.RedirectUrl\r\n if (searchParams) {\r\n newUrl += searchParams\r\n }\r\n return \r\n }\r\n return (\r\n \r\n )\r\n }}\r\n />\r\n )\r\n })}\r\n {\r\n return (\r\n }>\r\n \r\n \r\n )\r\n }}\r\n />\r\n \r\n \r\n )\r\n}\r\n","import React from \"react\"\r\nimport Routes from \"src/routes/routes\"\r\n\r\nfunction App() {\r\n return \r\n}\r\n\r\nexport default App\r\n","import { HCF, HLocalStorage, HUtils } from \"@macashipo/mlib\"\r\nimport { HApi } from \"../helpers\"\r\nimport { kFirstSettingData } from \"src/modules/app_sigo/constants\"\r\ninterface IModuleFirstSetting extends ICore.IOneModule {\r\n requestFirstSetting: () => void\r\n parseFirstSetting: (data: object) => void\r\n}\r\nconst ModuleFirstSetting: IModuleFirstSetting = {\r\n _key: \"first_setting\",\r\n _fnList: {},\r\n _config: {},\r\n getMyKey: () => {\r\n return \"first_setting\"\r\n },\r\n runAfterInit: (HConfig: any) => {\r\n ModuleFirstSetting.requestFirstSetting()\r\n },\r\n\r\n requestFirstSetting: () => {\r\n let _uiAppConfig =\r\n HUtils.runFuntion(HCF.CF, \"fnGetRequestUIAppConfigFirstSetting\") || {}\r\n HApi.apiPost({\r\n path: \"GlobalAppSetting\",\r\n name: \"FisrtSetting\",\r\n data: {\r\n UIAppConfig: _uiAppConfig,\r\n },\r\n })\r\n .then(response => {\r\n if (response.Data) {\r\n ModuleFirstSetting.parseFirstSetting(response.Data)\r\n }\r\n })\r\n .catch(error => {})\r\n },\r\n parseFirstSetting: data => {\r\n if (data) {\r\n HCF.setCFMultiObj(data)\r\n if (data[\"DefaultValues\"]) {\r\n HCF.setCFMultiObj(data[\"DefaultValues\"])\r\n if (HCF?.CF?.[\"afterCallFirstSetting\"]) {\r\n HCF?.CF?.[\"afterCallFirstSetting\"]({ ...data })\r\n }\r\n }\r\n if (data[\"UIAppConfig\"]) {\r\n HCF.setCFMultiObj(data[\"UIAppConfig\"])\r\n }\r\n\r\n // let _fnWaitingFooter = HCF.getCF(\"waitingFirstSettingForFooter\")\r\n // if (_fnWaitingFooter) {\r\n // _fnWaitingFooter()\r\n // }\r\n // let _fnWaitingHeader = HCF.getCF(\"waitingFirstSettingForHeader\")\r\n // if (_fnWaitingHeader) {\r\n // _fnWaitingHeader()\r\n // }\r\n // let _fnWaitingDownloadInfo = HCF.getCF(\r\n // \"waitingFirstSettingForDownloadInfo\"\r\n // )\r\n // if (_fnWaitingDownloadInfo) {\r\n // _fnWaitingDownloadInfo()\r\n // }\r\n }\r\n },\r\n}\r\n\r\nexport default ModuleFirstSetting\r\n","import { MyPageHelpers } from \"@macashipo/mlib\"\r\n\r\nexport default MyPageHelpers\r\n","import React from \"react\"\r\nimport MyPageHelpers from \"src/core/components/MyPage/MyPageHelpers\"\r\nimport { CSuppense } from \"src/core/components\"\r\n\r\nconst PTable = React.lazy(() => import(\"./Types/Table\"))\r\nconst PTab = React.lazy(() => import(\"./Types/Tab\"))\r\nconst PPanel = React.lazy(() => import(\"./Types/Panel\"))\r\n\r\nconst PTable_in_card = React.lazy(() => import(\"./Types/Table_in_card\"))\r\nconst PTable_no_action = React.lazy(() => import(\"./Types/Table_no_action\"))\r\nconst MyPageOne = {\r\n init() {\r\n MyPageHelpers.addTypes(\"table\", props => {\r\n return CSuppense(props, PTable)\r\n })\r\n MyPageHelpers.addTypes(\"tab\", props => {\r\n return CSuppense(props, PTab)\r\n })\r\n MyPageHelpers.addTypes(\"panel\", props => {\r\n return CSuppense(props, PPanel)\r\n })\r\n\r\n //\r\n MyPageHelpers.addTypes(\"table_in_card\", props => {\r\n return CSuppense(props, PTable_in_card)\r\n })\r\n MyPageHelpers.addTypes(\"table_no_action\", props => {\r\n return CSuppense(props, PTable_no_action)\r\n })\r\n },\r\n}\r\n\r\nexport default MyPageOne\r\n","import React from \"react\"\r\nimport { MyUIHelpers } from \"@macashipo/mlib\"\r\n\r\nconst MUI_v1_page_header = React.lazy(() => import(\"./Types/v1_page_header\"))\r\nconst MUI_v1_page_header_buttons = React.lazy(\r\n () => import(\"./Types/v1_page_header_buttons\")\r\n)\r\nconst MUI_v1_page_filter = React.lazy(() => import(\"./Types/v1_page_filter\"))\r\nconst MUI_v1_page_table = React.lazy(() => import(\"./Types/v1_page_table\"))\r\nconst MUI_v1_page_table_expand = React.lazy(\r\n () => import(\"./Types/v1_page_table_expand\")\r\n)\r\nconst MUI_v1_page_msginui = React.lazy(() => import(\"./Types/v1_page_msginui\"))\r\n\r\nconst List = {\r\n v1_page_header: MUI_v1_page_header,\r\n v1_page_header_buttons: MUI_v1_page_header_buttons,\r\n v1_page_filter: MUI_v1_page_filter,\r\n v1_page_table: MUI_v1_page_table,\r\n v1_page_table_expand: MUI_v1_page_table_expand,\r\n v1_page_msginui: MUI_v1_page_msginui,\r\n}\r\nconst MyUIOne = {\r\n init() {\r\n MyUIHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\n\r\nexport default MyUIOne\r\n","import React from \"react\"\r\nimport { MyTableCellHelpers, CSuppense } from \"@macashipo/mlib\"\r\n\r\nconst V1_mtc_readonly = React.lazy(() => import(\"./Types/v1_mtc_readonly\"))\r\nconst V1_mtc_text = React.lazy(() => import(\"./Types/v1_mtc_text\"))\r\nconst V1_mtc_default_actions = React.lazy(\r\n () => import(\"./Types/v1_mtc_default_actions\")\r\n)\r\nconst V1_mtc_date = React.lazy(() => import(\"./Types/v1_mtc_date\"))\r\nconst V1_mtc_files = React.lazy(() => import(\"./Types/v1_mtc_files\"))\r\n// const V1_mtc_jsonview = React.lazy(() => import(\"./Types/v1_mtc_jsonview\"))\r\nconst V1_mtc_select = React.lazy(() => import(\"./Types/v1_mtc_select\"))\r\nconst V1_mtc_api = React.lazy(() => import(\"./Types/v1_mtc_api\"))\r\nconst V1_mtc_form = React.lazy(() => import(\"./Types/v1_mtc_form\"))\r\nconst V1_mtc_with_myui = React.lazy(() => import(\"./Types/v1_mtc_with_myui\"))\r\nconst V1_mtc_action = React.lazy(() => import(\"./Types/v1_mtc_action\"))\r\nconst V1_mtc_html = React.lazy(() => import(\"./Types/v1_mtc_html\"))\r\n\r\nconst List = {\r\n v1_mtc_readonly: V1_mtc_readonly,\r\n v1_mtc_text: V1_mtc_text,\r\n v1_mtc_default_actions: V1_mtc_default_actions,\r\n v1_mtc_date: V1_mtc_date,\r\n v1_mtc_files: V1_mtc_files,\r\n // v1_mtc_jsonview: V1_mtc_jsonview,\r\n v1_mtc_select: V1_mtc_select,\r\n v1_mtc_api: V1_mtc_api,\r\n v1_mtc_form: V1_mtc_form,\r\n v1_mtc_with_myui: V1_mtc_with_myui,\r\n v1_mtc_action: V1_mtc_action,\r\n v1_mtc_html: V1_mtc_html,\r\n}\r\nconst ListCustom = {\r\n v1_mtc_readonly_date: {\r\n component: V1_mtc_date,\r\n moreProps: { readonly: true },\r\n },\r\n v1_mtc_readonly_html: {\r\n component: V1_mtc_html,\r\n moreProps: { readonly: true },\r\n },\r\n}\r\nconst ListMapV1 = {\r\n v1_mtc_api: \"api\",\r\n v1_mtc_form: \"form\",\r\n v1_mtc_action: \"action\",\r\n v1_mtc_html: \"html\",\r\n v1_mtc_readonly_html: \"readonly_html\",\r\n}\r\n\r\nconst MyTableCellOne = {\r\n init() {\r\n // MyTableCellHelpers.Types[\"_empty\"] = props => {\r\n // return CSuppense(props, V1_mtc_readonly)\r\n // }\r\n\r\n for (let k of Object.keys(List)) {\r\n MyTableCellHelpers.addTypes(k, props => {\r\n return CSuppense(props, List[k])\r\n })\r\n }\r\n for (let k of Object.keys(ListCustom)) {\r\n MyTableCellHelpers.addTypes(k, props => {\r\n return CSuppense(\r\n { ...props, ...ListCustom[k].moreProps },\r\n ListCustom[k].component\r\n )\r\n })\r\n }\r\n\r\n //map type with solidv1\r\n MyTableCellOne.mapWithV1()\r\n },\r\n mapWithV1() {\r\n MyTableCellHelpers.Types[\"text\"] = MyTableCellHelpers.Types[\"v1_mtc_text\"]\r\n MyTableCellHelpers.Types[\"textarea\"] =\r\n MyTableCellHelpers.Types[\"v1_mtc_text\"]\r\n MyTableCellHelpers.Types[\"files\"] = MyTableCellHelpers.Types[\"v1_mtc_files\"]\r\n MyTableCellHelpers.Types[\"date\"] = MyTableCellHelpers.Types[\"v1_mtc_date\"]\r\n MyTableCellHelpers.Types[\"datetime\"] =\r\n MyTableCellHelpers.Types[\"v1_mtc_date\"]\r\n MyTableCellHelpers.Types[\"select\"] =\r\n MyTableCellHelpers.Types[\"v1_mtc_select\"]\r\n MyTableCellHelpers.Types[\"json_editor\"] =\r\n MyTableCellHelpers.Types[\"v1_mtc_jsonview\"]\r\n for (let k of Object.keys(ListMapV1)) {\r\n MyTableCellHelpers.Types[ListMapV1[k]] = MyTableCellHelpers.Types[k]\r\n }\r\n },\r\n}\r\n\r\nexport default MyTableCellOne\r\n","import { MyTableFilterControlHelpers } from \"@macashipo/mlib\"\r\nexport default MyTableFilterControlHelpers\r\n","import React from \"react\"\r\nimport MyTableFilterControlHelpers from \"src/core/components/MyTableFilterControl/MyTableFilterControlHelpers\"\r\nimport { CSuppense } from \"src/core/components\"\r\nconst MyFilterControlSelect = React.lazy(() => import(\"./Types/select\"))\r\nconst MyFilterControlSelect2 = React.lazy(() => import(\"./Types/select2\"))\r\nconst MyFilterControlSelect2content = React.lazy(\r\n () => import(\"./Types/select2content\")\r\n)\r\nconst MyFilterControlSelect2icon = React.lazy(\r\n () => import(\"./Types/select2icon\")\r\n)\r\nconst MyTFCWrap = React.lazy(() => import(\"./TypesWrap/v1_mtfc_wrap\"))\r\nconst MyFilterControlCheckbox = React.lazy(() => import(\"./Types/checkbox\"))\r\nconst MyFilterControlDateFromTo = React.lazy(() => import(\"./Types/datefromto\"))\r\nconst MTF_text = React.lazy(() => import(\"./Types/text\"))\r\nconst MyTableFilterControlOne = {\r\n init() {\r\n //wrap\r\n MyTableFilterControlHelpers.addTypesWrap(\"_default\", props => {\r\n return CSuppense(props, MyTFCWrap)\r\n })\r\n //control\r\n let _mapControl = {\r\n select: MyFilterControlSelect,\r\n select2: MyFilterControlSelect2,\r\n select2content: MyFilterControlSelect2content,\r\n select2_icon: MyFilterControlSelect2icon,\r\n checkbox: MyFilterControlCheckbox,\r\n datefromto_v1: MyFilterControlDateFromTo,\r\n text: MTF_text,\r\n }\r\n for (let k of Object.keys(_mapControl)) {\r\n MyTableFilterControlHelpers.addTypes(k, props => {\r\n return CSuppense(props, _mapControl[k])\r\n })\r\n }\r\n },\r\n}\r\n\r\nexport default MyTableFilterControlOne\r\n","import React from \"react\"\r\nimport { CSuppense } from \"@macashipo/mlib\"\r\nimport MyFormControlHelpers from \"src/core/components/MyForm/MyFormControlHelpers\"\r\n\r\nconst V1_mfc_mycontrol = React.lazy(() => import(\"./Types/v1_mfc_mycontrol\"))\r\nconst V1_mfc_group = React.lazy(() => import(\"./Types/v1_mfc_group\"))\r\nconst V1_mfc_group_row = React.lazy(() => import(\"./Types/v1_mfc_group_row\"))\r\nconst V1_mfc_lable_control_inline = React.lazy(\r\n () => import(\"./Types/v1_mfc_lable_control_inline\")\r\n)\r\nconst MyFormOne = {\r\n init() {\r\n MyFormControlHelpers.addTypes(\"v1_mfc_text\", props => {\r\n return CSuppense({ ...props, typeControl: \"text\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_password\", props => {\r\n return CSuppense({ ...props, typeControl: \"password\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_textarea\", props => {\r\n return CSuppense({ ...props, typeControl: \"textarea\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_select\", props => {\r\n return CSuppense({ ...props, typeControl: \"select\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_checkbox\", props => {\r\n return CSuppense({ ...props, typeControl: \"checkbox\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_switch\", props => {\r\n return CSuppense({ ...props, typeControl: \"switch\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_radio\", props => {\r\n return CSuppense({ ...props, typeControl: \"radio\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_range\", props => {\r\n return CSuppense({ ...props, typeControl: \"range\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_color\", props => {\r\n return CSuppense({ ...props, typeControl: \"color\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_date\", props => {\r\n return CSuppense({ ...props, typeControl: \"date\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_time\", props => {\r\n return CSuppense({ ...props, typeControl: \"time\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_select_checkbox\", props => {\r\n return CSuppense(\r\n { ...props, typeControl: \"select_checkbox\" },\r\n V1_mfc_mycontrol\r\n )\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_select_radio\", props => {\r\n return CSuppense(\r\n { ...props, typeControl: \"select_radio\" },\r\n V1_mfc_mycontrol\r\n )\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_select2\", props => {\r\n return CSuppense({ ...props, typeControl: \"select2\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_select2_customfilter\", props => {\r\n return CSuppense(\r\n { ...props, typeControl: \"select2_customfilter\" },\r\n V1_mfc_mycontrol\r\n )\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_date_flatpickr\", props => {\r\n return CSuppense(\r\n { ...props, typeControl: \"date_flatpickr\" },\r\n V1_mfc_mycontrol\r\n )\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_group\", props => {\r\n return CSuppense(props, V1_mfc_group)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_group_row\", props => {\r\n return CSuppense(props, V1_mfc_group_row)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_component\", props => {\r\n return CSuppense({ ...props, typeControl: \"component\" }, V1_mfc_mycontrol)\r\n })\r\n MyFormControlHelpers.addTypes(\"v1_mfc_lable_control_inline\", props => {\r\n return CSuppense(props, V1_mfc_lable_control_inline)\r\n })\r\n //\r\n MyFormOne.mapWithV1()\r\n\r\n //check\r\n // console.warn(\"MyFormControlHelpers:\", MyFormControlHelpers)\r\n },\r\n mapWithV1() {\r\n MyFormControlHelpers.Types[\"text\"] =\r\n MyFormControlHelpers.Types[\"v1_mfc_text\"]\r\n MyFormControlHelpers.Types[\"password\"] =\r\n MyFormControlHelpers.Types[\"v1_mfc_password\"]\r\n MyFormControlHelpers.Types[\"textarea\"] =\r\n MyFormControlHelpers.Types[\"v1_mfc_textarea\"]\r\n MyFormControlHelpers.Types[\"select\"] =\r\n MyFormControlHelpers.Types[\"v1_mfc_select\"]\r\n MyFormControlHelpers.Types[\"checkbox\"] =\r\n MyFormControlHelpers.Types[\"v1_mfc_checkbox\"]\r\n MyFormControlHelpers.Types[\"radio\"] =\r\n MyFormControlHelpers.Types[\"v1_mfc_radio\"]\r\n MyFormControlHelpers.Types[\"color\"] =\r\n MyFormControlHelpers.Types[\"v1_mfc_color\"]\r\n MyFormControlHelpers.Types[\"range\"] =\r\n MyFormControlHelpers.Types[\"v1_mfc_range\"]\r\n MyFormControlHelpers.Types[\"date\"] =\r\n MyFormControlHelpers.Types[\"v1_mfc_date\"]\r\n MyFormControlHelpers.Types[\"time\"] =\r\n MyFormControlHelpers.Types[\"v1_mfc_time\"]\r\n },\r\n}\r\n\r\nexport default MyFormOne\r\n","import { MyButtonHelpers } from \"@macashipo/mlib\"\r\nexport default MyButtonHelpers\r\n","import React from \"react\"\r\nimport MyButtonHelpers from \"src/core/components/MyButton/MyButtonHelpers\"\r\nimport { CSuppense } from \"src/core/components\"\r\n\r\nconst MyButtonLink = React.lazy(() => import(\"./Types/link\"))\r\nconst MyButtonApi = React.lazy(() => import(\"./Types/api\"))\r\nconst MyButtonForm = React.lazy(() => import(\"./Types/form\"))\r\nconst MyUIOne = {\r\n init() {\r\n MyButtonHelpers.addTypes(\"link\", props => {\r\n return CSuppense(props, MyButtonLink)\r\n })\r\n MyButtonHelpers.addTypes(\"api\", props => {\r\n return CSuppense(props, MyButtonApi)\r\n })\r\n MyButtonHelpers.addTypes(\"form\", props => {\r\n return CSuppense(props, MyButtonForm)\r\n })\r\n },\r\n}\r\n\r\nexport default MyUIOne\r\n","import { MyLoadingHelpers, CSuppense } from \"@macashipo/mlib\"\r\n\r\nimport React from \"react\"\r\nconst CCircle = React.lazy(\r\n () => import(\"src/core/components/MyLoading/Types/circle\")\r\n)\r\nconst CArc = React.lazy(() => import(\"src/core/components/MyLoading/Types/arc\"))\r\nconst CEllipsis = React.lazy(\r\n () => import(\"src/core/components/MyLoading/Types/ellipsis\")\r\n)\r\nconst MyLoadingOne = {\r\n init() {\r\n MyLoadingHelpers.addTypes(\"circle\", props => {\r\n return CSuppense(props, CCircle)\r\n })\r\n MyLoadingHelpers.addTypes(\"arc\", props => {\r\n return CSuppense(props, CArc)\r\n })\r\n MyLoadingHelpers.addTypes(\"ellipsis\", props => {\r\n return CSuppense(props, CEllipsis)\r\n })\r\n MyLoadingHelpers.addTypes(\"in_card\", props => {\r\n return
{CSuppense(props, CArc)}
\r\n })\r\n MyLoadingHelpers.Types[\"_defaultlazy\"] = (props: any) => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n },\r\n}\r\n\r\nconsole.warn(\r\n \"MyLoadingHelpers\",\r\n MyLoadingHelpers,\r\n MyLoadingHelpers.Types[\"_defaultLazy\"]\r\n)\r\nexport default MyLoadingOne\r\n","import React from \"react\"\r\nimport MyControlTypes from \"src/core/components/MyControl/MyControlTypes\"\r\nimport { CSuppense } from \"src/core/components\"\r\n\r\nconst MCSelect2 = React.lazy(() => import(\"./Types/select2\"))\r\nconst MCSelect2Icon = React.lazy(() => import(\"./Types/select2_icon\"))\r\nconst MC_select2_customfilter = React.lazy(\r\n () => import(\"./Types/select2_customfilter\")\r\n)\r\nconst MCDate_flatpickr = React.lazy(() => import(\"./Types/date_flatpickr\"))\r\nconst MCComponent = React.lazy(() => import(\"./Types/component\"))\r\n\r\n// const List = {\r\n// select2: MCSelect2,\r\n// date_flatpickr: MCDate_flatpickr\r\n// }\r\n\r\nconst MyControlOne = {\r\n init() {\r\n MyControlTypes.Types[\"select2\"] = props => {\r\n return CSuppense(props, MCSelect2)\r\n }\r\n MyControlTypes.Types[\"select2_customfilter\"] = props => {\r\n return CSuppense(props, MC_select2_customfilter)\r\n }\r\n MyControlTypes.Types[\"select2_icon\"] = props => {\r\n return CSuppense(props, MCSelect2Icon)\r\n }\r\n MyControlTypes.Types[\"date_flatpickr\"] = props => {\r\n return CSuppense(props, MCDate_flatpickr)\r\n }\r\n MyControlTypes.Types[\"component\"] = props => {\r\n return CSuppense(props, MCComponent)\r\n }\r\n },\r\n}\r\n\r\nexport default MyControlOne\r\n","import MyPageOne from \"./MyPage\"\r\nimport MyUIOne from \"./MyUI\"\r\nimport MyTableCellOne from \"./MyTableCell\"\r\nimport MyTableFilterControlOne from \"./MyTableFilterControl\"\r\nimport MyFormOne from \"./MyForm\"\r\nimport MyButtonOne from \"./MyButton\"\r\nimport MyLoadingOne from \"./MyLoading/index\"\r\nimport MyControlOne from \"./MyControl\"\r\nimport \"./assets/scss/theme-v1.scss\"\r\n\r\ninterface IModuleV1Page extends IModuleOne {\r\n runAfterInit: () => void\r\n}\r\nconst ModuleV1Page: IModuleV1Page = {\r\n runAfterInit: () => {\r\n MyControlOne.init()\r\n MyPageOne.init()\r\n MyUIOne.init()\r\n MyTableCellOne.init()\r\n MyFormOne.init()\r\n MyButtonOne.init()\r\n MyLoadingOne.init()\r\n MyTableFilterControlOne.init()\r\n window.document.body.classList.add(\"theme-v1\")\r\n },\r\n}\r\n\r\nexport default ModuleV1Page\r\n","import React from \"react\"\r\nimport MyPageHelpers from \"src/core/components/MyPage/MyPageHelpers\"\r\nimport { CSuppense } from \"src/core/components\"\r\n\r\nconst PDev_ListMyControl = React.lazy(() => import(\"./Types/Dev_ListMyControl\"))\r\nconst PDev_CategoryList = React.lazy(() => import(\"./Types/Dev_CategoryList\"))\r\nconst PDev_MyPage = React.lazy(() => import(\"./Types/Dev_MyPage\"))\r\nconst PDev_MyForm = React.lazy(() => import(\"./Types/Dev_MyForm\"))\r\nconst PDev_Notification = React.lazy(() => import(\"./Types/Dev_Notification\"))\r\nconst PDev_Other = React.lazy(() => import(\"./Types/Dev_Other\"))\r\nconst PDev_Resize = React.lazy(() => import(\"./Types/Dev_Resize\"))\r\nconst PDev_UseScript = React.lazy(() => import(\"./Types/Dev_UseScript\"))\r\nconst PDev_CustomHook = React.lazy(() => import(\"./Types/Dev_CustomHook\"))\r\nconst PDev_Test = React.lazy(() => import(\"./Types/Dev_Test\"))\r\nconst MyPageOne = {\r\n init() {\r\n MyPageHelpers.addTypes(\"dev_listmycontrol\", props => {\r\n return CSuppense(props, PDev_ListMyControl)\r\n })\r\n MyPageHelpers.addTypes(\"dev_categorylist\", props => {\r\n return CSuppense(props, PDev_CategoryList)\r\n })\r\n MyPageHelpers.addTypes(\"dev_mypage\", props => {\r\n return CSuppense(props, PDev_MyPage)\r\n })\r\n MyPageHelpers.addTypes(\"dev_myform\", props => {\r\n return CSuppense(props, PDev_MyForm)\r\n })\r\n MyPageHelpers.addTypes(\"dev_notification\", props => {\r\n return CSuppense(props, PDev_Notification)\r\n })\r\n MyPageHelpers.addTypes(\"dev_other\", props => {\r\n return CSuppense(props, PDev_Other)\r\n })\r\n MyPageHelpers.addTypes(\"dev_resize\", props => {\r\n return CSuppense(props, PDev_Resize)\r\n })\r\n MyPageHelpers.addTypes(\"dev_hook\", props => {\r\n return CSuppense(props, PDev_UseScript)\r\n })\r\n MyPageHelpers.addTypes(\"dev_customhook\", props => {\r\n return CSuppense(props, PDev_CustomHook)\r\n })\r\n MyPageHelpers.addTypes(\"dev_test\", props => {\r\n return CSuppense(props, PDev_Test)\r\n })\r\n },\r\n}\r\n\r\nexport default MyPageOne\r\n","import MyPageOne from \"./MyPage\"\r\nimport { runFuntion, isLocalDev } from \"src/core/helpers/utils\"\r\nimport HConstant from \"src/core/helpers/constant\"\r\nimport * as actions from \"src/App/App.actions\"\r\ninterface IModuleDev extends IModuleOne {\r\n runAfterInit: (HConfig: any) => void\r\n}\r\nconst ModuleDev: IModuleDev = {\r\n runAfterInit: HConfig => {\r\n if (isLocalDev()) {\r\n MyPageOne.init()\r\n //update routes\r\n runFuntion(HConfig, HConstant.HConfig.FnList.addPublicRoutes, [\r\n [\r\n {\r\n Id: \"dev1\",\r\n UIUrl: \"/dev/1\",\r\n UIType: \"dev_listmycontrol\",\r\n },\r\n {\r\n Id: \"dev2\",\r\n UIUrl: \"/dev/categorylist\",\r\n UIType: \"dev_categorylist\",\r\n },\r\n {\r\n Id: \"dev2\",\r\n UIUrl: \"/dev/mypage\",\r\n UIType: \"dev_mypage\",\r\n },\r\n {\r\n Id: \"devmyform\",\r\n UIUrl: \"/dev/myform\",\r\n UIType: \"dev_myform\",\r\n },\r\n {\r\n Id: \"devnotification\",\r\n UIUrl: \"/dev/notification\",\r\n UIType: \"dev_notification\",\r\n },\r\n {\r\n Id: \"devother\",\r\n UIUrl: \"/dev/other\",\r\n UIType: \"dev_other\",\r\n },\r\n {\r\n Id: \"devresize\",\r\n UIUrl: \"/dev/resize\",\r\n UIType: \"dev_resize\",\r\n },\r\n {\r\n Id: \"dev_hook\",\r\n UIUrl: \"/dev/hook\",\r\n UIType: \"dev_hook\",\r\n },\r\n {\r\n Id: \"dev_customhook\",\r\n UIUrl: \"/dev/customhook\",\r\n UIType: \"dev_customhook\",\r\n },\r\n {\r\n Id: \"dev_test\",\r\n UIUrl: \"/dev/test\",\r\n UIType: \"dev_test\",\r\n },\r\n ],\r\n ])\r\n\r\n //update sidenav\r\n runFuntion(HConfig.fnList, HConstant.HConfig.FnList.dispatchFromStore, [\r\n actions.sideNavUpdate([\r\n {\r\n isDev: true,\r\n name: \"Dev 1\",\r\n url: \"/dev/1\",\r\n },\r\n {\r\n isDev: true,\r\n name: \"Dev Category List\",\r\n url: \"/dev/categorylist\",\r\n },\r\n {\r\n isDev: true,\r\n name: \"Dev My Page\",\r\n url: \"/dev/mypage\",\r\n },\r\n {\r\n isDev: true,\r\n name: \"Dev My Form\",\r\n url: \"/dev/myform\",\r\n },\r\n {\r\n isDev: true,\r\n name: \"Dev Other\",\r\n url: \"/dev/other\",\r\n },\r\n ]),\r\n ])\r\n }\r\n },\r\n}\r\n\r\nexport default ModuleDev\r\n","import { MyIconHelpers } from \"@macashipo/mlib\"\r\n\r\nexport default MyIconHelpers\r\n","import MyIconHelpers from \"src/core/components/MyIcon/MyIconHelpers\"\r\n// import * as IconHi from \"react-icons/hi\"\r\nimport {\r\n HiBadgeCheck,\r\n HiBell,\r\n HiCheck,\r\n HiMenu,\r\n HiOutlineEye,\r\n HiOutlineEyeOff,\r\n HiOutlineHome,\r\n HiOutlineKey,\r\n HiOutlineLockClosed,\r\n HiOutlineMail,\r\n HiOutlinePencilAlt,\r\n HiOutlinePhone,\r\n HiOutlineTrash,\r\n HiOutlineUser,\r\n HiOutlineViewGrid,\r\n HiRefresh,\r\n HiUser,\r\n HiUsers,\r\n HiX,\r\n} from \"react-icons/hi\"\r\nconst ListIconHi = {\r\n HiBadgeCheck,\r\n HiBell,\r\n HiCheck,\r\n HiMenu,\r\n HiOutlineEye,\r\n HiOutlineEyeOff,\r\n HiOutlineHome,\r\n HiOutlineKey,\r\n HiOutlineLockClosed,\r\n HiOutlineMail,\r\n HiOutlinePencilAlt,\r\n HiOutlinePhone,\r\n HiOutlineTrash,\r\n HiOutlineUser,\r\n HiOutlineViewGrid,\r\n HiRefresh,\r\n HiUser,\r\n HiUsers,\r\n HiX,\r\n}\r\nconst MyTableCellOne = {\r\n init() {\r\n console.warn(\"init icon:\")\r\n // for (let k of Object.keys(IconHi)) {\r\n // MyIconHelpers.addTypes(k.toLocaleLowerCase(), IconHi[k])\r\n // }\r\n for (let k of Object.keys(ListIconHi)) {\r\n MyIconHelpers.addTypes(k.toLocaleLowerCase(), ListIconHi[k])\r\n }\r\n // import(\"react-icons/hi\").then(v => {\r\n // console.warn(\"import:\", v)\r\n // if (v) {\r\n // let _keys = Object.keys(v)\r\n // for (let k of _keys) {\r\n // MyIconHelpers.addTypes(k, v[k])\r\n // }\r\n // }\r\n // })\r\n },\r\n}\r\n\r\nexport default MyTableCellOne\r\n","import MyIconOne from \"./MyIcon\"\r\n\r\ninterface IModuleIconHiOutline extends IModuleOne {\r\n runAfterInit: () => void\r\n}\r\nconst ModuleIconHiOutline: IModuleIconHiOutline = {\r\n runAfterInit: () => {\r\n MyIconOne.init()\r\n },\r\n}\r\n\r\nexport default ModuleIconHiOutline\r\n","import React from \"react\"\r\nimport MyPageHelpers from \"src/core/components/MyPage/MyPageHelpers\"\r\nimport { CSuppense } from \"src/core/components\"\r\n\r\nconst PSetting_main = React.lazy(() => import(\"./Types/setting_main\"))\r\n\r\nconst MyPageOne = {\r\n init() {\r\n MyPageHelpers.addTypes(\"setting_main\", props => {\r\n return CSuppense(props, PSetting_main)\r\n })\r\n },\r\n}\r\n\r\nexport default MyPageOne\r\n","import MyPageOne from \"./MyPage\"\r\nimport { HUtils, HConstant } from \"src/core/helpers\"\r\ninterface IModuleUserSetting extends IModuleOne {\r\n runAfterInit: (HConfig: any) => void\r\n}\r\nconst ModuleUserSetting: IModuleUserSetting = {\r\n runAfterInit: HConfig => {\r\n MyPageOne.init()\r\n HUtils.runFuntion(HConfig, HConstant.HConfig.FnList.addPrivateRoutes, [\r\n [\r\n {\r\n Id: \"setting_main\",\r\n UIUrl: \"/setting\",\r\n UIType: \"setting_main\",\r\n },\r\n ],\r\n ])\r\n },\r\n}\r\n\r\nexport default ModuleUserSetting\r\n","import React from \"react\"\r\nimport MyUIHelpers from \"src/core/components/MyUI/MyUIHelpers\"\r\nimport { CSuppense } from \"src/core/components\"\r\n\r\nconst MUIGeneration2FA = React.lazy(\r\n () => import(\"../MyComponent/Generation2FA\")\r\n)\r\nconst MUIVerify2FA = React.lazy(() => import(\"../MyComponent/Verify2FA\"))\r\nconst MUICheck2FA = React.lazy(() => import(\"../MyComponent/Check2FA\"))\r\nconst MUISelectMethod2FA = React.lazy(\r\n () => import(\"../MyComponent/SelectMethod\")\r\n)\r\nconst MyPageOne = {\r\n init() {\r\n MyUIHelpers.addTypes(\"setting2fa_generation2fa\", props => {\r\n return CSuppense(props, MUIGeneration2FA)\r\n })\r\n MyUIHelpers.addTypes(\"setting2fa_verify2fa\", props => {\r\n return CSuppense(props, MUIVerify2FA)\r\n })\r\n MyUIHelpers.addTypes(\"setting2fa_check2fa\", props => {\r\n return CSuppense(props, MUICheck2FA)\r\n })\r\n MyUIHelpers.addTypes(\"setting2fa_selectmethod2fa\", props => {\r\n return CSuppense(props, MUISelectMethod2FA)\r\n })\r\n },\r\n}\r\n\r\nexport default MyPageOne\r\n","import React from \"react\"\r\nimport { CSuppense } from \"src/core/components\"\r\nimport MyModal from \"src/core/components/MyModal/MyModal\"\r\nimport { HConstant, HUtils, HApi } from \"src/core/helpers\"\r\nimport { initI18n } from \"./lang/i18n\"\r\nimport i18next from \"i18next\"\r\nimport MyUIOne from \"./MyUI\"\r\nimport { updateSettingByResponse } from \"./helpers\"\r\nconst Generation2FA = React.lazy(() => import(\"./MyComponent/Generation2FA\"))\r\nconst Disable2FA = React.lazy(() => import(\"./MyComponent/Disable2FA\"))\r\nconst Setting2FA = React.lazy(() => import(\"./MyComponent/Setting2FA\"))\r\nconst Verify2FA = React.lazy(() => import(\"./MyComponent/Verify2FA\"))\r\n\r\ninterface IModuleSetting2FA extends IModuleOne {\r\n runAfterInit: (HConfig: any) => void\r\n requestSetting: () => void\r\n}\r\nconst ModuleSetting2FA: IModuleSetting2FA = {\r\n runAfterInit: HConfig => {\r\n initI18n()\r\n MyUIOne.init()\r\n // ModuleSetting2FA.requestSetting()\r\n HUtils.runFuntion(\r\n HConfig,\r\n HConstant.HConfig.FnList.registerExtSettingParts,\r\n [\r\n props => {\r\n return CSuppense(props, Setting2FA)\r\n },\r\n ]\r\n )\r\n HConfig.showGenerate2FA = (fromOneMethod: any) => {\r\n MyModal.showFromComponent(\r\n props => {\r\n return CSuppense(\r\n props,\r\n fromOneMethod.IsEnable === true ? Disable2FA : Generation2FA\r\n )\r\n },\r\n {\r\n title:\r\n fromOneMethod.IsEnable === true\r\n ? i18next.t(\"setting2fa:title.disable2fa\")\r\n : i18next.t(\"setting2fa:title.enable2fa\"),\r\n backdrop: \"static\",\r\n size: \"md\",\r\n modalCentered: true,\r\n }\r\n )\r\n }\r\n HConfig.showVerify2FA = fnList => {\r\n // console.warn(\"showVerify2FA\")\r\n MyModal.showFromComponent(\r\n props => {\r\n return CSuppense(props, Verify2FA)\r\n },\r\n {\r\n title: \"Verify\",\r\n backdrop: \"static\",\r\n fnList: fnList,\r\n size: \"lg\",\r\n modalCentered: true,\r\n }\r\n )\r\n }\r\n },\r\n requestSetting: () => {\r\n HApi.apiPost({\r\n path: \"Aauth2FA\",\r\n name: \"UserSetting\",\r\n data: {},\r\n })\r\n .then(response => {\r\n updateSettingByResponse(response)\r\n })\r\n .catch(error => {})\r\n },\r\n}\r\n\r\nexport default ModuleSetting2FA\r\n","import i18next from \"i18next\"\r\n\r\nimport Lang_en from \"./en.json\"\r\nexport const initI18n = () => {\r\n // console.warn(\"import i18next from 'i18next';\")\r\n i18next.addResourceBundle(\"en\", \"setting2fa\", Lang_en)\r\n}\r\n","import React from \"react\"\r\nimport MyPageHelpers from \"src/core/components/MyPage/MyPageHelpers\"\r\nimport { CSuppense } from \"src/core/components\"\r\n\r\nconst PRedirectToken = React.lazy(() => import(\"./Types/redirect_token\"))\r\n\r\nconst MyPageOne = {\r\n init() {\r\n MyPageHelpers.addTypes(\"redirect_token\", props => {\r\n return CSuppense(props, PRedirectToken)\r\n })\r\n },\r\n}\r\n\r\nexport default MyPageOne\r\n","import MyPageOne from \"./MyPage\"\r\nimport { HUtils, HConstant } from \"src/core/helpers\"\r\ninterface IModuleRedirectToken extends IModuleOne {\r\n runAfterInit: (HConfig) => void\r\n}\r\nconst ModuleRedirectToken: IModuleRedirectToken = {\r\n runAfterInit: HConfig => {\r\n MyPageOne.init()\r\n HUtils.runFuntion(HConfig, HConstant.HConfig.FnList.addPublicRoutes, [\r\n [\r\n {\r\n Id: \"redirect_token\",\r\n UIUrl: \"/redirect\",\r\n UIType: \"redirect_token\",\r\n Config: '{\"wrapLayout\":\"blank\"}',\r\n },\r\n ],\r\n ])\r\n },\r\n}\r\n\r\nexport default ModuleRedirectToken\r\n","import React from \"react\"\r\nimport { HUtils } from \"src/core/helpers\"\r\nclass MyUI_HTML extends React.Component {\r\n render() {\r\n const { html, className, style, data, onClick } = this.props\r\n // console.warn(\"MyUI_HTML:\",this.props);\r\n if (data && html && typeof data == \"object\") {\r\n let _html = HUtils.getTextWithData(html, data)\r\n // console.warn(\"MyUI_HTML:\",_html);\r\n return (\r\n \r\n )\r\n } else if (html) {\r\n return (\r\n \r\n )\r\n }\r\n return
\r\n }\r\n}\r\n\r\nexport default MyUI_HTML\r\n","import { HFormat, HUtils } from \"@macashipo/mlib\"\r\n\r\nexport const KConfigMyUI = {\r\n type: \"type\",\r\n typeMyLayout: \"typeMyLayout\",\r\n moreProps: \"moreProps\",\r\n customProps: \"customProps\",\r\n customData: \"customData\", //lay data tu props\r\n customDataFormat: \"customDataFormat\", //customData bang HFormat\r\n notypemyui: \"notypemyui\",\r\n dataIsRow: \"dataIsRow\", //data is row chu ko phai cell, dung cho table cell\r\n}\r\n\r\nexport const getMoreProps = (props = {}) => {\r\n const config = props.config || {}\r\n let _moreProps = config.moreProps || {}\r\n if (config[KConfigMyUI.customProps]) {\r\n for (let k of Object.keys(config[KConfigMyUI.customProps])) {\r\n _moreProps[k] = HUtils.get(props, config[KConfigMyUI.customProps][k])\r\n }\r\n }\r\n return _moreProps\r\n}\r\nexport const getData = (props = {}) => {\r\n const config = props.config || {}\r\n const data = props.data\r\n if (data && typeof data == \"object\") {\r\n let _moreData = { ...data }\r\n if (config[KConfigMyUI.customData]) {\r\n for (let k of Object.keys(config[KConfigMyUI.customData])) {\r\n _moreData[k] = HUtils.get(props, config[KConfigMyUI.customData][k])\r\n }\r\n }\r\n if (config[KConfigMyUI.customDataFormat]) {\r\n for (let k of Object.keys(config[KConfigMyUI.customDataFormat])) {\r\n let _configFormat = config[KConfigMyUI.customDataFormat][k]\r\n if (_configFormat.type && HFormat.Types[_configFormat.type]) {\r\n let _value = _configFormat.value\r\n if (typeof _value == \"string\") {\r\n if (_value.indexOf(\"[\") > -1) {\r\n _value = HUtils.getTextWithData(_configFormat.value, data)\r\n } else if (_value.indexOf(\".\" > -1)) {\r\n _value = HUtils.get(props, _value)\r\n }\r\n }\r\n _moreData[k] = HFormat.format(_value, _configFormat)\r\n }\r\n }\r\n }\r\n // console.warn(\"_moreData\", _moreData)\r\n return _moreData\r\n }\r\n\r\n // console.warn(\"data\", data)\r\n return data\r\n}\r\nexport const getStyle = (props = {}) => {\r\n const config = props.config || {}\r\n const data = getData(props)\r\n const style = config.style || {}\r\n let _style = { ...style }\r\n // console.warn(\"getStyle\", _style)\r\n if (data && style && Object.keys(style).length > 0) {\r\n for (let k of Object.keys(style)) {\r\n if (_style[k] && _style[k].startsWith(\"[\")) {\r\n let _fieldName = _style[k].replace(\"[\", \"\").replace(\"]\", \"\")\r\n if (data.hasOwnProperty(_fieldName)) {\r\n _style[k] = data[_fieldName]\r\n }\r\n }\r\n }\r\n }\r\n return _style\r\n}\r\nexport const getTypeMyLayout = (config = {}) => {\r\n return config[KConfigMyUI.typeMyLayout] || \"div\"\r\n}\r\nexport const getTypeMyUI = (config = {}) => {\r\n return config[KConfigMyUI.type] || \"notypemyui\"\r\n}\r\n","import React from \"react\"\r\nimport { MyUI, MyLayout } from \"@macashipo/mlib\"\r\nimport { getData, getTypeMyLayout, getTypeMyUI, getStyle } from \"./_helpers\"\r\nclass MyUI_Data_Obj extends React.Component {\r\n render() {\r\n const { data } = this.props\r\n const config = this.props.config || {}\r\n let _configChild = config.configChild || {}\r\n // console.error(\"data_obj\", this.props)\r\n if (data != null) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n return
\r\n }\r\n}\r\n\r\nexport default MyUI_Data_Obj\r\n","import React from \"react\"\r\nimport { MyUI, MyLayout } from \"@macashipo/mlib\"\r\nimport { getTypeMyLayout, getTypeMyUI, getStyle } from \"./_helpers\"\r\nclass MyUI_Data_Array extends React.Component {\r\n render() {\r\n const { data } = this.props\r\n const config = this.props.config || {}\r\n if (data && Array.isArray(data)) {\r\n return (\r\n \r\n {data.map((v, i) => {\r\n let _configChild = config.configChild || {}\r\n // console.warn(\"child:\", _configChild, v, config.type)\r\n return (\r\n \r\n )\r\n })}\r\n \r\n )\r\n }\r\n return
\r\n }\r\n}\r\n\r\nexport default MyUI_Data_Array\r\n","import React from \"react\"\r\nimport { HText, HUtils, MyUI } from \"@macashipo/mlib\"\r\nimport { getData, getMoreProps, getStyle, getTypeMyUI } from \"./_helpers\"\r\nclass MyUI_Data_Tag extends React.Component {\r\n render() {\r\n const config = this.props.config || {}\r\n const data = getData(this.props)\r\n let _configChild = config.configChild\r\n // console.error(\"data_tag\", this.props)\r\n let Tag = config.tag || \"div\"\r\n let _moreProps = getMoreProps(this.props)\r\n let _childIsMyUI = true\r\n let _childIsText = false\r\n let _textDisplay = \"\"\r\n if (typeof _configChild == \"string\" || _configChild == null) {\r\n _childIsMyUI = false\r\n _childIsText = true\r\n if (_configChild) {\r\n if (data && data[_configChild]) {\r\n _textDisplay = data[_configChild]\r\n } else {\r\n _textDisplay = HUtils.getTextWithData(_configChild, data)\r\n }\r\n }\r\n //neu ko phai myui thi chuyen quanh children\r\n _moreProps.children = _textDisplay\r\n }\r\n // console.warn(\"childs:\", _childIsMyUI, _moreProps)\r\n if (_childIsMyUI === false) {\r\n //vidu the img, ko the co props childrens -> bao loi -> bo children di mac du da ko show\r\n return (\r\n \r\n )\r\n }\r\n return (\r\n \r\n {_childIsMyUI && (\r\n \r\n )}\r\n {_childIsText && _textDisplay}\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default MyUI_Data_Tag\r\n","import React from \"react\"\r\nimport { MyUIHelpers } from \"@macashipo/mlib\"\r\nimport MUI_html from \"./Types/html\"\r\nimport MUI_data_obj from \"./Types/data_obj\"\r\nimport MUI_data_array from \"./Types/data_array\"\r\nimport MUI_data_tag from \"./Types/data_tag\"\r\nimport MUI_data_span_autoresize from \"./Types/data_span_autoresize\"\r\n\r\nconst ListNoLazy = {\r\n html: MUI_html,\r\n data_obj: MUI_data_obj,\r\n data_array: MUI_data_array,\r\n data_tag: MUI_data_tag,\r\n data_span_autoresize: MUI_data_span_autoresize,\r\n}\r\nconst MyUIOne = {\r\n init() {\r\n MyUIHelpers.addTypesFromListWithoutLazy(ListNoLazy)\r\n },\r\n}\r\n\r\nexport default MyUIOne\r\n","import React from \"react\"\r\nimport { HText, HUtils, MyUI } from \"@macashipo/mlib\"\r\nimport { getData, getMoreProps, getStyle, getTypeMyUI } from \"./_helpers\"\r\nclass MyUI_Data_Tag extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n this._fontSize = 1\r\n }\r\n render() {\r\n const config = this.props.config || {}\r\n const data = getData(this.props)\r\n let _configChild = config.configChild\r\n // console.error(\"data_tag\", this.props)\r\n let Tag = config.tag || \"span\"\r\n let _moreProps = getMoreProps(this.props)\r\n let _childIsMyUI = true\r\n let _childIsText = false\r\n let _textDisplay = \"\"\r\n if (typeof _configChild == \"string\" || _configChild == null) {\r\n _childIsMyUI = false\r\n _childIsText = true\r\n if (_configChild) {\r\n if (data && data[_configChild]) {\r\n _textDisplay = data[_configChild]\r\n } else {\r\n _textDisplay = HUtils.getTextWithData(_configChild, data)\r\n }\r\n }\r\n //neu ko phai myui thi chuyen quanh children\r\n _moreProps.children = _textDisplay\r\n }\r\n let _style = getStyle(this.props)\r\n if (_style.fontSize) {\r\n let _fontSizeInStyle = Number(_style.fontSize.replace(/[^0-9]/g, \"\"))\r\n if (_fontSizeInStyle != this._fontSize && this._fontSize == 1) {\r\n this._fontSize = _fontSizeInStyle\r\n }\r\n }\r\n _style.fontSize = `${this._fontSize}px`\r\n return (\r\n {\r\n if (r) {\r\n // console.warn(\"refff\", r, r.clientHeight, r.scrollHeight)\r\n if (r.clientHeight < r.scrollHeight && this._fontSize > 6) {\r\n this._fontSize -= 1\r\n this.forceUpdate()\r\n }\r\n }\r\n }}\r\n />\r\n )\r\n }\r\n}\r\n\r\nexport default MyUI_Data_Tag\r\n","import MyUIOne from \"./MyUI\"\r\n\r\ninterface IModuleCorePage extends IModuleOne {\r\n runAfterInit: () => void\r\n}\r\nconst ModuleCorePage: IModuleCorePage = {\r\n runAfterInit: () => {\r\n MyUIOne.init()\r\n },\r\n}\r\n\r\nexport default ModuleCorePage\r\n","import ReactGA from \"react-ga\"\r\nimport ReactGA4 from \"react-ga4\"\r\nimport { HModules, HCF, HLink, HUtils } from \"@macashipo/mlib\"\r\nconst trackPageView = (url = \"\") => {\r\n console.warn(\"trackPageView\", url, window.gtag)\r\n if (ModuleReactGA._config.isUniversal) {\r\n ReactGA.send({\r\n hitType: \"pageview\",\r\n page: url,\r\n })\r\n } else {\r\n ReactGA4.send({\r\n hitType: \"pageview\",\r\n page: url,\r\n })\r\n }\r\n}\r\nconst initGA = GAId => {\r\n if (ModuleReactGA._config.isUniversal) {\r\n ReactGA.initialize(GAId)\r\n ModuleReactGA._config.initGAdone = true\r\n } else {\r\n ReactGA4.initialize(GAId)\r\n ModuleReactGA._config.initGAdone = true\r\n }\r\n if (GAId === ModuleReactGA._config.GAIdDev) {\r\n ModuleReactGA._config.isUsingDev = true\r\n }\r\n}\r\nconst ModuleReactGA = {\r\n _key: \"reactga\",\r\n _fnList: {\r\n gaTrackCurrentPageView: () => {\r\n if (ModuleReactGA._config.initGAdone) {\r\n if (ModuleReactGA._config.isUsingDev) {\r\n trackPageView(`/${HCF.getCF(\"appName\")}/${window.location.href}`)\r\n } else {\r\n trackPageView(\r\n window.location.pathname +\r\n window.location.search +\r\n window.location.hash\r\n )\r\n }\r\n }\r\n },\r\n gaTrackPageView: ({ page } = {}) => {\r\n if (ModuleReactGA._config.initGAdone) {\r\n trackPageView(page)\r\n }\r\n },\r\n gaTrackEvent: ({ category, action }) => {\r\n if (ModuleReactGA._config.initGAdone) {\r\n ReactGA.event({\r\n category: category,\r\n action: action,\r\n })\r\n }\r\n },\r\n },\r\n _config: {\r\n initGAdone: false,\r\n isUsingDev: false,\r\n isUniversal: true,\r\n GAIdDev: \"UA-119777650-2\",\r\n },\r\n getMyKey: () => {\r\n return \"reactga\"\r\n },\r\n runAfterInit: HConfig => {\r\n HModules.initDefault(ModuleReactGA, {})\r\n var GAId = HCF.getCF(\"GAId\") || ModuleReactGA._config.GAIdDev\r\n if (HUtils.isLocalDev()) {\r\n GAId = HCF.getCF(\"GAIdDev\") || ModuleReactGA._config.GAIdDev\r\n }\r\n if (GAId && GAId.indexOf(\"UA\") > -1) {\r\n ModuleReactGA._config.isUniversal = true\r\n } else {\r\n ModuleReactGA._config.isUniversal = false\r\n }\r\n if (GAId) {\r\n initGA(GAId)\r\n //settimeout de lay title cho dung\r\n setTimeout(() => {\r\n HModules.runFunctionInModuleFnList(\r\n \"reactga\",\r\n \"gaTrackCurrentPageView\",\r\n []\r\n )\r\n }, 500)\r\n const history = HLink.getHistory()\r\n if (history && history.listen) {\r\n history.listen(h => {\r\n console.warn(\"change history\")\r\n HModules.runFunctionInModuleFnList(\r\n \"reactga\",\r\n \"gaTrackCurrentPageView\",\r\n []\r\n )\r\n })\r\n }\r\n }\r\n },\r\n}\r\n\r\nexport default ModuleReactGA\r\n","import React from \"react\"\r\nimport { MyUIHelpers } from \"@macashipo/mlib\"\r\n\r\nconst MUI_admintable_table = React.lazy(() =>\r\n import(\"./Types/admintable_table\")\r\n)\r\nconst MUISelectBoxSearchV2 = React.lazy(() =>\r\n import(\"./Types/select_box_search_v2\")\r\n)\r\nconst MUIATFilter = React.lazy(() => import(\"./Types/admintable_filter\"))\r\nconst List = {\r\n admintable_table: MUI_admintable_table,\r\n select_box_search_v2: MUISelectBoxSearchV2,\r\n admintable_filter: MUIATFilter,\r\n}\r\nconst MyUIOne = {\r\n init() {\r\n MyUIHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\n\r\nexport default MyUIOne\r\n","import React from \"react\"\r\nimport { MyTableCellHelpers, HUtils, HJson, HCF } from \"@macashipo/mlib\"\r\nimport { KMore } from \"src/helpers/Flows/TableCell\"\r\nimport { KConfigApp } from \"src/helpers/K\"\r\nconst MTC_readonly = React.lazy(() => import(\"./Types/readonly\"))\r\nconst MTC_with_myui = React.lazy(() => import(\"./Types/with_myui\"))\r\nconst List = {\r\n readonly: MTC_readonly,\r\n with_myui: MTC_with_myui,\r\n}\r\nconst MyTableCellOne = {\r\n init() {\r\n MyTableCellHelpers.addTypesFromListLazy(List)\r\n MyTableCellHelpers.Types[\"_auto\"] = (cell, row, extra, index) => {\r\n let _type = HUtils.get(extra, \"Type.type\")\r\n let _more = HUtils.get(extra, \"Type.more\")\r\n // console.log(\"_more:\", _more)\r\n if (\r\n _more &&\r\n _more.indexOf(KMore.typeAdmin) > -1 &&\r\n HCF.getCF(KConfigApp.verAdmin) == \"v5\"\r\n ) {\r\n let _moreObj = HJson.getObj(_more)\r\n if (_moreObj && _moreObj[KMore.typeAdmin]) {\r\n _type = _moreObj[KMore.typeAdmin]\r\n }\r\n }\r\n if (MyTableCellHelpers.Types[_type]) {\r\n let TagCell = MyTableCellHelpers.Types[_type]\r\n //phai tra ve dang tag moi de nhan dien trong TableColumn\r\n return \r\n } else {\r\n if (MyTableCellHelpers.Types.notexist) {\r\n return MyTableCellHelpers.Types.notexist({ cell, row, extra, index })\r\n }\r\n return MyTableCellHelpers.Types._empty({ cell, row, extra, index })\r\n }\r\n }\r\n MyTableCellHelpers[\"ConfigByTypes\"] = {\r\n api: {\r\n isHide: oneTableCell => {\r\n if (oneTableCell) {\r\n let _valueCell = oneTableCell.getValue()\r\n // console.log(\"check is Hide\")\r\n if (_valueCell === \"\" || _valueCell === null) return true\r\n }\r\n },\r\n },\r\n datetime: {\r\n moreAttrs: {\r\n moreOptions: {\r\n enableTime: true,\r\n dateFormat: \"d/m/Y H:i\",\r\n },\r\n },\r\n },\r\n }\r\n },\r\n}\r\n\r\nexport default MyTableCellOne\r\n","import { HModules, HCF, HLink, HUtils } from \"@macashipo/mlib\"\r\nimport MyUIOne from \"./MyUI\"\r\nimport MyTableCellOne from \"./MyTableCell\"\r\nconst ModuleAdminTable = {\r\n _key: \"admintable\",\r\n _fnList: {},\r\n _config: {},\r\n getMyKey: () => {\r\n return \"admintable\"\r\n },\r\n runAfterInit: HConfig => {\r\n HModules.initDefault(ModuleAdminTable, { MyUIOne, MyTableCellOne })\r\n },\r\n}\r\n\r\nexport default ModuleAdminTable\r\n","/* eslint-disable */\r\nimport { HCF } from \"@macashipo/mlib\"\r\nfunction z(){const F=['join','1893003BddgWL','50aepgPr','96CTFniA','4822660AULelP','245278OztvxN','map','toString','getTime','slice','abcdefghij','getCF','681753NpPiNO','96000BNHLwv','109305YREmQx','8UMOcYS','2oRzeBJ','split','399972EfdAlp','20SbLqKC'];z=function(){return F;};return z();}function T(H,S){const C=z();return T=function(h,j){h=h-0xff;let c=C[h];return c;},T(H,S);}const K=T;(function(H,S){const c=T,C=H();while(!![]){try{const h=-parseInt(c(0x110))/0x1*(parseInt(c(0x100))/0x2)+-parseInt(c(0x102))/0x3*(-parseInt(c(0x103))/0x4)+-parseInt(c(0x106))/0x5*(parseInt(c(0x111))/0x6)+parseInt(c(0x105))/0x7+parseInt(c(0xff))/0x8*(parseInt(c(0x112))/0x9)+parseInt(c(0x108))/0xa+-parseInt(c(0x109))/0xb*(parseInt(c(0x107))/0xc);if(h===S)break;else C['push'](C['shift']());}catch(j){C['push'](C['shift']());}}}(z,0x646bb));const getXCheckKey=H=>{const N=T,S=HCF[N(0x10f)]('xCheckKey')||N(0x10e);return S[N(0x10d)](H)+S[N(0x10d)](0x0,H);},eCheck=(H,S=0x0)=>{const q=T;let C=getXCheckKey(S)[q(0x101)]('');return(''+H)[q(0x101)]('')[q(0x10a)](h=>C[h])[q(0x104)]('');};export const eXCheckOne=()=>eCheck(new Date()[K(0x10c)]()[K(0x10b)]());","import React, { useEffect } from \"react\"\r\nimport { ConnectedProps, connect } from \"react-redux\"\r\nimport { Button, Input } from \"reactstrap\"\r\nimport { HApi } from \"src/core/helpers\"\r\nimport * as actions from \"src/pages/Login/Login.actions\"\r\nimport styled from \"styled-components\"\r\nimport { MyForm, MyModal, MyUI } from \"src/core/components\"\r\nimport { HCF, HUtils } from \"@macashipo/mlib\"\r\nimport {\r\n MdArrowBackIos,\r\n MdOutlineClose,\r\n MdOutlineRemoveRedEye,\r\n} from \"react-icons/md\"\r\nimport ICGoogle from \"src/modules/app_sigo/assets/imgs/ic-google.png\"\r\nimport ICFacebook from \"src/modules/app_sigo/assets/imgs/ic-facebook.png\"\r\nimport { ImEyeBlocked } from \"react-icons/im\"\r\nimport { BiInfoCircle } from \"react-icons/bi\"\r\nimport { useForceUpdate } from \"src/modules/app_sigo/hooks/useForceUpdate\"\r\nimport { isNotEmpty } from \"src/core/helpers/utils\"\r\nimport classNames from \"classnames\"\r\nimport { eXCheckOne } from \"src/helpers/E\"\r\n\r\nconst TabCode = {\r\n enter_phone: \"enter_phone\",\r\n enter_password: \"enter_password\",\r\n enter_otp: \"enter_otp\",\r\n user_register: \"user_register\",\r\n forgot_password: \"forgot_password\",\r\n enter_new_password: \"enter_new_password\",\r\n}\r\nexport const loginSuccessWithResponse = (response: any) => dispatch => {\r\n dispatch(actions.fetchLoginSuccess(response))\r\n}\r\nconst mapStateToProps = state => ({\r\n isAuthenticated: state.app.isAuthenticated,\r\n})\r\n\r\nconst mapDispatchToProps = {\r\n loginSuccessWithResponse,\r\n}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps)\r\n\r\ninterface Props extends ConnectedProps {\r\n afterLogin?: any\r\n field?: any\r\n actionType?: any\r\n moreConfig?: any\r\n}\r\n\r\nconst MyUILogin = (props: Props) => {\r\n const {\r\n field,\r\n actionType,\r\n afterLogin,\r\n loginSuccessWithResponse,\r\n moreConfig,\r\n } = props\r\n const [tabActive, setTabActive] = React.useState(TabCode.enter_phone)\r\n const [mobileNumber, setMobileNumber] = React.useState(\"\")\r\n const [password, setPassword] = React.useState(\"\")\r\n const [showPwd, setShowPwd] = React.useState(false)\r\n const [loading, setLoading] = React.useState(false)\r\n const [msg, setMsg] = React.useState(\"\")\r\n const [pwdMsg, setPwsMsg] = React.useState(\"\")\r\n const [verifyToken, setVerifyToken] = React.useState(\"\")\r\n const [dfResendTime, setDfResendTime] = React.useState(20)\r\n const [isForgotPwd, setIsForgotPwd] = React.useState(false)\r\n const dfMsgInfo = HUtils.get(HCF.getCF(\"websiteSetting\"), \"auth\") || {}\r\n const [keyPwd, setKeyPwd] = useForceUpdate()\r\n const [invalidMobileMsg, setInvalidMobileMsg] = React.useState({} as any)\r\n\r\n useEffect(() => {\r\n // Clear mọi thứ và password khi back về nhập số điện thoại\r\n setPassword(\"\")\r\n setPwsMsg(\"\")\r\n setKeyPwd()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [tabActive])\r\n useEffect(() => {\r\n window.addEventListener(\"beforeunload\", handleBeforeUnload)\r\n return () => window.removeEventListener(\"beforeunload\", handleBeforeUnload)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [mobileNumber])\r\n\r\n // const checkValidMobile = value => {\r\n // let regexPhoneNumber =\r\n // /^(0?)(3[2-9]|5[6|8|9|2]|7[0|6-9]|8[1-9]|9[0-4|6-9])[0-9]{7}$/\r\n // if (dfMsgInfo?.regex_check_phone_number) {\r\n // regexPhoneNumber = new RegExp(dfMsgInfo?.regex_check_phone_number)\r\n // }\r\n // return value.match(regexPhoneNumber) ? true : false\r\n // }\r\n // const handleMobileNumber = (event: React.ChangeEvent) => {\r\n // const newValue: any = event.target.value.replace(/\\s/g, \"\")\r\n // if (!newValue) {\r\n // setMsg(\"Bạn chưa điền số điện thoại!\")\r\n // } else if (checkValidMobile(newValue) === false) {\r\n // setMsg(\"Số điện thoại của bạn không đúng định dạng!\")\r\n // } else {\r\n // setMsg(\"\")\r\n // }\r\n // setMobileNumber(newValue)\r\n // }\r\n /** Request */\r\n const requestGetOTP = ({ cusActionType }: any = {}) => {\r\n let _actionType = actionType\r\n if (cusActionType) {\r\n _actionType = cusActionType\r\n }\r\n if (field && _actionType && mobileNumber) {\r\n setLoading(true)\r\n HApi.apiPost({\r\n path: \"Account\",\r\n name: \"GetOTP\",\r\n customHeader: {\r\n \"X-Check\": eXCheckOne(),\r\n },\r\n data: {\r\n [field]: mobileNumber,\r\n ActionType: _actionType,\r\n },\r\n })\r\n .then(response => {\r\n const data = response?.Data\r\n setLoading(false)\r\n if (data) {\r\n const nextScreen = data?.NextScreen\r\n const _verifyToken = data?.VerifyToken\r\n const _dfResendTime = data?.PinResendInSecond\r\n if (_verifyToken) {\r\n setVerifyToken(_verifyToken)\r\n }\r\n if (nextScreen) {\r\n setTabActive(nextScreen)\r\n }\r\n if (isNotEmpty(_dfResendTime)) {\r\n setDfResendTime(_dfResendTime)\r\n }\r\n // else {\r\n // setDfResendTime(20)\r\n // }\r\n }\r\n })\r\n .catch(error => {\r\n // phone number is in blacklist\r\n // const _msg = error?.msg\r\n // if (_msg) {\r\n // setMsg(_msg)\r\n // }\r\n setLoading(false)\r\n })\r\n }\r\n }\r\n const requestVerifyOTP = (otp, { cbError, cbSuccess }: any = {}) => {\r\n let _actionType = actionType\r\n let _verifyToken = verifyToken\r\n // Trường hợp verify OTP của Forgot password\r\n if (isForgotPwd) {\r\n _actionType = \"forgot_password\"\r\n }\r\n if (_verifyToken && otp && _actionType) {\r\n HApi.apiPost({\r\n path: \"Account\",\r\n name: \"VerifyOTP\",\r\n data: {\r\n VerifyToken: _verifyToken,\r\n ActionType: _actionType,\r\n OTP: otp,\r\n },\r\n })\r\n .then(response => {\r\n const data = response?.Data\r\n const nextScreen = data?.NextScreen\r\n if (nextScreen) {\r\n // if (onSetTabActive) {\r\n // onSetTabActive(nextScreen)\r\n // } else {\r\n // setTabActive(nextScreen)\r\n // }\r\n setTabActive(nextScreen)\r\n }\r\n cbSuccess && cbSuccess()\r\n })\r\n .catch(error => {\r\n const rs = error?.response\r\n const data = rs?.data?.Data || {}\r\n const _dfResendTime = data?.PinResendInSecond\r\n if (isNotEmpty(_dfResendTime)) {\r\n setDfResendTime(_dfResendTime)\r\n }\r\n const _msg = error?.msg\r\n cbError && cbError(_msg)\r\n })\r\n } else {\r\n cbError && cbError()\r\n }\r\n }\r\n const requestResendOTP = ({\r\n cbError,\r\n cbSuccess,\r\n onSetVerifyToken,\r\n cusMobileNumber,\r\n cusActionType,\r\n }: any = {}) => {\r\n let _mobileNumber = mobileNumber\r\n let _actionType = actionType\r\n if (isForgotPwd) {\r\n _actionType = \"forgot_password\"\r\n }\r\n if (_mobileNumber && _actionType) {\r\n setLoading(true)\r\n HApi.apiPost({\r\n path: \"Account\",\r\n customHeader: {\r\n \"X-Check\": eXCheckOne(),\r\n },\r\n name: \"GetOTP\",\r\n data: {\r\n ActionType: _actionType,\r\n MobilePhone: _mobileNumber,\r\n },\r\n })\r\n .then(response => {\r\n const data = response?.Data\r\n setLoading(false)\r\n const _verifyToken = data?.VerifyToken\r\n const _dfResendTime = data?.PinResendInSecond\r\n if (_verifyToken) {\r\n if (onSetVerifyToken) {\r\n onSetVerifyToken(_verifyToken)\r\n } else {\r\n setVerifyToken(_verifyToken)\r\n }\r\n }\r\n if (isNotEmpty(_dfResendTime)) {\r\n setDfResendTime(_dfResendTime)\r\n }\r\n cbSuccess && cbSuccess()\r\n })\r\n .catch(error => {\r\n cbError && cbError()\r\n })\r\n } else {\r\n cbError && cbError()\r\n }\r\n }\r\n const requestCreateAccount = (data, { cbError, cbSuccess }: any = {}) => {\r\n if (mobileNumber && data) {\r\n HApi.apiPost({\r\n path: \"Account\",\r\n name: \"Register\",\r\n data: {\r\n PhoneNumber: mobileNumber,\r\n ...data,\r\n },\r\n })\r\n .then(response => {\r\n loginSuccessWithResponse(response.Data)\r\n afterLogin && afterLogin()\r\n cbSuccess && cbSuccess()\r\n })\r\n .catch(error => {\r\n const _msg = error?.msg\r\n cbError && cbError(_msg)\r\n })\r\n } else {\r\n cbError && cbError()\r\n }\r\n }\r\n const requestForgotPassword = (\r\n mobileNumber,\r\n { cbError, cbSuccess }: any = {}\r\n ) => {\r\n if (mobileNumber) {\r\n HApi.apiPost({\r\n path: \"Account\",\r\n name: \"GetOTP\",\r\n customHeader: {\r\n \"X-Check\": eXCheckOne(),\r\n },\r\n data: {\r\n MobilePhone: mobileNumber,\r\n ActionType: \"forgot_password\",\r\n },\r\n })\r\n .then(response => {\r\n const data = response?.Data\r\n const nextScreen = data?.NextScreen\r\n const verifyToken = data?.VerifyToken\r\n const dfResendTime = data?.PinResendInSecond\r\n cbSuccess && cbSuccess({ nextScreen, verifyToken, dfResendTime })\r\n })\r\n .catch(error => {\r\n const _msg = error?.msg\r\n cbError && cbError(_msg)\r\n })\r\n }\r\n }\r\n const requestSetNewPwd = (data, { cbSuccess, cbError }: any = {}) => {\r\n if (data) {\r\n HApi.apiPost({\r\n path: \"Account\",\r\n name: \"ResetPassword\",\r\n data: {\r\n ...data,\r\n },\r\n })\r\n .then(response => {\r\n const data = response?.Data\r\n if (data) {\r\n setTabActive(TabCode.enter_phone)\r\n }\r\n loginSuccessWithResponse(response.Data)\r\n afterLogin && afterLogin()\r\n cbSuccess && cbSuccess()\r\n })\r\n .catch(error => {\r\n const _msg = error?.msg\r\n cbError && cbError(_msg)\r\n })\r\n } else {\r\n cbError && cbError()\r\n }\r\n }\r\n const requestLogin = () => {\r\n if (!getDisabledLoginBtn()) {\r\n setLoading(true)\r\n HApi.apiPost({\r\n path: \"Account\",\r\n name: \"Login\",\r\n data: {\r\n MobilePhone: mobileNumber,\r\n Password: password,\r\n },\r\n })\r\n .then(response => {\r\n setLoading(false)\r\n loginSuccessWithResponse(response.Data)\r\n afterLogin && afterLogin()\r\n })\r\n .catch(error => {\r\n setLoading(false)\r\n const _msg = error?.msg\r\n if (_msg) {\r\n setPwsMsg(_msg)\r\n }\r\n })\r\n }\r\n } /** Get */\r\n const getDisabledLoginBtn = () => {\r\n if (loading || !password || msg) {\r\n return true\r\n }\r\n return false\r\n }\r\n const getConfigFormEnterPhone = () => {\r\n let configInputPhoneNumber: any = {}\r\n if (dfMsgInfo?.config_input_phone_number) {\r\n configInputPhoneNumber = {\r\n ...dfMsgInfo?.config_input_phone_number,\r\n }\r\n }\r\n if (moreConfig?.notFocus) {\r\n configInputPhoneNumber = {\r\n ...configInputPhoneNumber,\r\n autoFocus: false,\r\n }\r\n }\r\n return {\r\n defaultValues: {\r\n [field]: mobileNumber,\r\n },\r\n controls: [\r\n {\r\n type: \"input_phone_number\",\r\n fieldName: field,\r\n more: {\r\n needUpdateImmediately: true,\r\n ui: {\r\n showPrefix: true,\r\n iconPrefix: \"+84\",\r\n ...invalidMobileMsg,\r\n },\r\n handleKeyDown: e => {\r\n if (!getDisabledContinueBtn()) {\r\n handlePressEnter(e, handleChkValidMobieNumber)\r\n }\r\n },\r\n disabled: loading,\r\n ...configInputPhoneNumber,\r\n },\r\n },\r\n ],\r\n }\r\n }\r\n const getRegexPhoneNumber = () => {\r\n let regexPhoneNumber =\r\n /^(0|\\+?84)?(3[2-9]|5[6|8|9|2]|7[0|6-9]|8[1-9]|9[0-4|6-9])[0-9]{7}$/\r\n if (dfMsgInfo?.regex_check_phone_number) {\r\n regexPhoneNumber = new RegExp(dfMsgInfo?.regex_check_phone_number)\r\n }\r\n return regexPhoneNumber\r\n }\r\n const getDisabledContinueBtn = () => {\r\n if (loading || msg || invalidMobileMsg?.showError) {\r\n return true\r\n }\r\n return false\r\n }\r\n const getConfigFromWebsiteSettings = key => {\r\n return HUtils.get(dfMsgInfo, key)\r\n }\r\n const getDescriptionWithField = (key, field, data) => {\r\n let msg = getConfigFromWebsiteSettings(key)\r\n if (msg) {\r\n return msg?.replace(`[${field}]`, data)\r\n }\r\n return \"\"\r\n }\r\n /** Other function */\r\n const onHandleClose = () => {\r\n MyModal.hideModalMyUI()\r\n }\r\n const onFormatMobileNumber4UI = mobile => {\r\n let cleaned = (\"\" + mobile).replace(/\\\\D/g, \"\")\r\n let regex = /(\\d{4})(\\d{3})(\\d{3})/\r\n let breakCharacter = \" \"\r\n // Lấy config từ website setting\r\n const config = dfMsgInfo?.config_format_phonenumber_ui || {}\r\n if (config?.regex) {\r\n regex = new RegExp(config?.regex)\r\n }\r\n if (config?.break_character) {\r\n breakCharacter = config?.break_character\r\n }\r\n let match = cleaned.match(regex)\r\n if (match) {\r\n return match[1] + breakCharacter + match[2] + breakCharacter + match[3]\r\n }\r\n return mobile\r\n }\r\n const handlePassword = (event: React.ChangeEvent) => {\r\n setPwsMsg(\"\")\r\n setPassword(event.target.value)\r\n }\r\n const handleForgetPassword = () => {\r\n requestGetOTP({ cusActionType: \"forgot_password\" })\r\n setIsForgotPwd(true)\r\n }\r\n const handlePressEnter = (e, fnClick) => {\r\n const dfConfig = dfMsgInfo?.go_next_after_press_enter\r\n if (e.key === \"Enter\" && dfConfig) {\r\n fnClick && fnClick()\r\n }\r\n }\r\n const handleBeforeUnload = e => {\r\n if (mobileNumber) {\r\n e.preventDefault()\r\n e.returnValue = true\r\n }\r\n }\r\n const handleChkValidMobieNumber = () => {\r\n const regex = getRegexPhoneNumber()\r\n const configMsgError = getConfigFromWebsiteSettings(\r\n \"config_msg_input_mobile_phone\"\r\n )\r\n let isValid = true\r\n let msg = {\r\n showError: false,\r\n textError: \"\",\r\n }\r\n if (!mobileNumber) {\r\n msg.showError = true\r\n msg.textError = configMsgError?.whenNull || \"\"\r\n isValid = false\r\n } else if (!regex?.test(mobileNumber)) {\r\n isValid = false\r\n msg.showError = true\r\n msg.textError = configMsgError?.whenInvalid || \"\"\r\n } else {\r\n isValid = true\r\n }\r\n if (isValid) {\r\n requestGetOTP()\r\n } else {\r\n setInvalidMobileMsg(msg)\r\n }\r\n }\r\n /** Render */\r\n\r\n const renderTabEnterPhone = () => {\r\n const isActive = tabActive === TabCode.enter_phone\r\n const description = dfMsgInfo?.enter_phone_number_des || \"\"\r\n const showOtherMethod = dfMsgInfo?.show_other_login_method\r\n const { configHeaderTitle, classNameHeader } = moreConfig || {}\r\n let title = \"Đăng nhập hoặc đăng ký\"\r\n if (configHeaderTitle) {\r\n title = configHeaderTitle\r\n }\r\n return (\r\n \r\n \r\n \r\n {!configHeaderTitle && (\r\n \r\n )}\r\n
{title}
\r\n \r\n
\r\n
Chào mừng bạn đến với SIGO!
\r\n {\r\n const { newValue } = opts\r\n setMobileNumber(newValue)\r\n if (newValue !== mobileNumber) {\r\n setInvalidMobileMsg({})\r\n }\r\n },\r\n } as any\r\n }\r\n renderFooter={() => {\r\n return <>\r\n }}\r\n />\r\n
\r\n \r\n {showOtherMethod && (\r\n
\r\n
hoặc
\r\n \r\n \r\n
\r\n )}\r\n \r\n \r\n
\r\n )\r\n }\r\n const renderTabEnterPwd = () => {\r\n const isActive = tabActive === TabCode.enter_password\r\n const des = getDescriptionWithField(\r\n \"msg_des_enter_pwd\",\r\n \"MobileNumber\",\r\n onFormatMobileNumber4UI(mobileNumber)\r\n )\r\n return (\r\n \r\n \r\n
\r\n {\r\n setTabActive(TabCode.enter_phone)\r\n }}\r\n >\r\n \r\n \r\n
Nhập mật khẩu của bạn
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {\r\n setShowPwd(!showPwd)\r\n }}\r\n >\r\n {showPwd ? : }\r\n
\r\n {\r\n handlePressEnter(e, requestLogin)\r\n }}\r\n />\r\n
\r\n {pwdMsg && (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n Quên mật khẩu\r\n \r\n
\r\n \r\n \r\n \r\n )\r\n }\r\n const renderTabEnterOtp = () => {\r\n const isActive = tabActive === TabCode.enter_otp\r\n return (\r\n {\r\n setTabActive(TabCode.enter_phone)\r\n setIsForgotPwd(false)\r\n },\r\n onResendOTP: requestResendOTP,\r\n onFormatMobileNumber4UI: onFormatMobileNumber4UI,\r\n handlePressEnter: (e, func) => {\r\n handlePressEnter(e, func)\r\n },\r\n onGetDescription: () => {\r\n return getDescriptionWithField(\r\n \"msg_enter_otp\",\r\n \"MobileNumber\",\r\n onFormatMobileNumber4UI(mobileNumber)\r\n )\r\n },\r\n }}\r\n />\r\n )\r\n }\r\n const renderTabUserRegister = () => {\r\n const isActive = tabActive === TabCode.user_register\r\n return (\r\n {\r\n setTabActive(TabCode.enter_phone)\r\n },\r\n handlePressEnter: (e, func) => {\r\n handlePressEnter(e, func)\r\n },\r\n }}\r\n />\r\n )\r\n }\r\n // const renderTabForgotPwd = () => {\r\n // const isActive = tabActive === TabCode.forgot_password\r\n // return (\r\n // {\r\n // setTabActive(TabCode.enter_phone)\r\n // },\r\n // checkValidMobile: checkValidMobile,\r\n // requestForgotPassword: requestForgotPassword,\r\n // requestVerifyOTP: requestVerifyOTP,\r\n // requestResendOTP: requestResendOTP,\r\n // requestSetNewPwd: requestSetNewPwd,\r\n // }}\r\n // />\r\n // )\r\n // }\r\n const renderTabEnterNewPwd = () => {\r\n const _isActive = tabActive === TabCode.enter_new_password\r\n return (\r\n {\r\n setTabActive(TabCode.enter_phone)\r\n setIsForgotPwd(false)\r\n },\r\n requestSetNewPwd: (data, { cbError, cbSuccess }) => {\r\n let _data = { ...data, MobilePhone: mobileNumber }\r\n requestSetNewPwd(_data, {\r\n cbError,\r\n cbSuccess,\r\n })\r\n },\r\n handlePressEnter: (e, func) => {\r\n handlePressEnter(e, func)\r\n },\r\n onGetDescription: () => {\r\n return getDescriptionWithField(\r\n \"msg_description_change_pwd\",\r\n \"MobileNumber\",\r\n onFormatMobileNumber4UI(mobileNumber)\r\n )\r\n },\r\n }}\r\n />\r\n )\r\n }\r\n return (\r\n \r\n {renderTabEnterPhone()}\r\n {renderTabEnterOtp()}\r\n {renderTabEnterPwd()}\r\n {renderTabUserRegister()}\r\n {/* {renderTabForgotPwd()} */}\r\n {renderTabEnterNewPwd()}\r\n \r\n )\r\n}\r\nconst Error = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-start;\r\n color: var(--color-danger);\r\n font-size: 13px;\r\n margin: 5px 0;\r\n & > svg {\r\n margin-right: 0.25rem;\r\n width: 15px;\r\n height: 15px;\r\n }\r\n`\r\nconst WrapEnterPhone = styled.div`\r\n & .welcome-text {\r\n font-size: 20px;\r\n font-weight: 700;\r\n color: var(--color-text-000);\r\n }\r\n & .my-form {\r\n margin-top: 20px;\r\n }\r\n & .description {\r\n font-size: 14px;\r\n color: var(--color-text-000);\r\n a {\r\n font-weight: 700;\r\n text-decoration: underline;\r\n color: var(--color-text-000);\r\n }\r\n a:hover {\r\n color: var(--mau2);\r\n }\r\n }\r\n & .getotp {\r\n color: var(--color-text-fff);\r\n font-weight: 700;\r\n font-size: 16px;\r\n }\r\n & .line-divider {\r\n display: flex;\r\n align-items: center;\r\n margin-top: 25px;\r\n }\r\n .line-divider::before,\r\n .line-divider::after {\r\n flex: 1;\r\n content: \"\";\r\n padding: 1px 0 0;\r\n background-color: var(--color-divider);\r\n }\r\n .line-divider::before {\r\n margin-right: 25px;\r\n }\r\n .line-divider::after {\r\n margin-left: 25px;\r\n }\r\n & .other-method {\r\n button {\r\n position: relative;\r\n }\r\n & .ic-btn {\r\n width: 25px;\r\n position: absolute;\r\n left: 20px;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .my-form {\r\n margin-top: 15px;\r\n }\r\n .mb-25px {\r\n margin-bottom: 15px;\r\n }\r\n & .line-divider {\r\n margin-top: 15px;\r\n }\r\n }\r\n`\r\nconst WrapEnterPassword = styled.div`\r\n & .description {\r\n color: var(--color-text-000);\r\n // span {\r\n // font-weight: 600;\r\n // }\r\n }\r\n & .inputpwd {\r\n border: 1px solid #959292;\r\n border-radius: 8px;\r\n min-height: 46px;\r\n padding: 8px 12px;\r\n }\r\n // & .inputpwd:focus {\r\n // border: 1px solid #959292;\r\n // }\r\n & .hienpass {\r\n bottom: 11px;\r\n color: var(--color-ic-show-pwd);\r\n }\r\n`\r\nconst Wrap = styled.div`\r\n & .myui-wrap-loading-overlay {\r\n border-radius: 20px;\r\n & .a-overlay {\r\n border-radius: 20px;\r\n }\r\n }\r\n & .btn-sg {\r\n min-height: 43px;\r\n }\r\n & .form-control {\r\n background-color: transparent;\r\n }\r\n & .form-group {\r\n }\r\n & .btnchangetab {\r\n &.sm {\r\n font-size: 17px;\r\n line-height: 25px;\r\n }\r\n }\r\n & .info-msg {\r\n margin-top: -30px;\r\n font-style: italic;\r\n font-size: 13px;\r\n padding-bottom: 25px;\r\n display: block;\r\n }\r\n\r\n & .header {\r\n position: relative;\r\n margin: -25px -25px 0;\r\n padding: 25px;\r\n border-bottom: 1px solid var(--color-divider);\r\n & .title {\r\n text-align: center;\r\n font-size: 18px;\r\n font-weight: 700;\r\n color: var(--color-text-000);\r\n }\r\n & .btn-hide-modal {\r\n position: absolute;\r\n background-color: transparent;\r\n color: var(--color-text-000);\r\n box-shadow: none;\r\n font-size: 20px;\r\n padding: 0;\r\n top: 21px;\r\n border: none;\r\n }\r\n & .btn-hide-modal:hover {\r\n color: var(--color-text-000);\r\n box-shadow: none;\r\n background-color: transparent;\r\n }\r\n }\r\n & .body {\r\n padding: 25px 0;\r\n }\r\n & .btn-primary-v2 {\r\n color: var(--color-text-fff);\r\n font-weight: 700;\r\n font-size: 16px;\r\n }\r\n @media (max-width: 767px) {\r\n & .header {\r\n margin: -15px -15px 0;\r\n padding: 15px;\r\n & .btn-hide-modal {\r\n position: absolute;\r\n background-color: transparent;\r\n color: var(--color-text-000);\r\n box-shadow: none;\r\n font-size: 20px;\r\n padding: 0;\r\n top: 11px;\r\n }\r\n }\r\n & .body {\r\n padding: 15px 0;\r\n }\r\n }\r\n`\r\nexport default connector(MyUILogin)\r\n","import * as types from \"./Login.constants\"\r\n\r\nexport const fetchLoginPending = () => {\r\n return {\r\n type: types.FETCH_LOGIN_PENDING,\r\n }\r\n}\r\n\r\nexport const fetchLoginSuccess = data => {\r\n return {\r\n type: types.FETCH_LOGIN_SUCCESS,\r\n res: data,\r\n }\r\n}\r\n\r\nexport const fetchLoginError = error => {\r\n return {\r\n type: types.FETCH_LOGIN_ERROR,\r\n error: error,\r\n }\r\n}\r\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import { HUtils } from \"@macashipo/mlib\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst MyUIHomeRentalCar = props => {\r\n const { data } = props\r\n const slideImages = data?.[homeSlidesFields.fSlideImages] || []\r\n let imgUrl = \"\"\r\n if (slideImages && slideImages?.length > 0) {\r\n imgUrl = slideImages[0]?.[homeSlidesFields.fOneSlideImageUrl]\r\n }\r\n const title = data?.[homeSlidesFields.fTitle]\r\n const description = data?.[homeSlidesFields.fDescription]\r\n const url = HUtils.get(data, \"MoreInfo.url\")\r\n return (\r\n <>\r\n {imgUrl && (\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {title &&

{title}

}\r\n {description &&

{description}

}\r\n
\r\n \r\n

Đăng ký xe cho thuê

\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n \r\n )\r\n}\r\nconst Wrap: any = styled.div`\r\n padding: 0;\r\n & .bgchothue {\r\n background-image: url(\"${(props: any) => props.bgImage}\");\r\n background-repeat: no-repeat;\r\n object-fit: cover;\r\n background-size: cover;\r\n & .row {\r\n width: 100%;\r\n }\r\n }\r\n & .title-home {\r\n margin-bottom: 40px;\r\n }\r\n & .maintxt {\r\n color: #fff;\r\n margin-bottom: 30px;\r\n }\r\n & .btn-rental {\r\n h3 {\r\n font-size: 15px;\r\n color: white;\r\n line-height: 25px;\r\n margin-bottom: 0px;\r\n }\r\n }\r\n & .btn-rental:hover {\r\n border-color: transparent;\r\n }\r\n`\r\nexport default MyUIHomeRentalCar\r\n","import React from \"react\"\r\nimport { HCF, HUtils } from \"@macashipo/mlib\"\r\nimport { Helmet } from \"react-helmet\"\r\nimport { ConnectedProps, connect } from \"react-redux\"\r\nconst mapStateToProps = state => ({\r\n dataFirstSetting: state.app.dataFirstSetting,\r\n})\r\nconst mapDispatchToProps = {}\r\nconst connector = connect(mapStateToProps, mapDispatchToProps)\r\ninterface Props extends ConnectedProps {\r\n data\r\n}\r\n\r\nconst MyUIHelmet = (props: Props) => {\r\n const { data, dataFirstSetting } = props\r\n const dfMetaConfig = HCF.getCF(\"dfMetaConfig\")\r\n const metaTitle = data?.MetaTitle || dfMetaConfig?.MetaTitle\r\n const metaKeyWords = data?.MetaKeyWords || dfMetaConfig?.MetaKeyWords\r\n const metaDescription =\r\n data?.MetaDescription || data?.Description || dfMetaConfig?.MetaDescription\r\n const metaUrl = dfMetaConfig?.MetaUrl\r\n const canonicalUrl = data?.CanonicalURL || window.location.href\r\n const noindex = data?.NoIndex || false\r\n const appTitle = HCF.getCF(\"title\")\r\n const appLogo = `${HCF.getCF(\"baseUrl\")}/logo/logo-sigo.png`\r\n const seoInfo =\r\n HUtils.get(dataFirstSetting, \"DefaultValues.websiteSetting.SEO\") || {}\r\n const { telephone, supportEmail, socialLinks, businessInfo, founderInfo } =\r\n seoInfo\r\n return (\r\n \r\n {metaTitle}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {noindex && }\r\n \r\n )\r\n}\r\nexport default connector(MyUIHelmet)\r\n","import styled from \"styled-components\"\r\nimport { MyIcon, Tooltip } from \"src/core/components\"\r\nimport { HCF, HUtils } from \"@macashipo/mlib\"\r\nimport { isArray, isNotEmpty } from \"src/core/helpers/utils\"\r\nimport Skeleton from \"react-loading-skeleton\"\r\nconst MUIButtonRefresh = props => {\r\n const {\r\n fnList,\r\n configFilter = {},\r\n valuesFilter = {},\r\n defaultActive = false,\r\n } = props\r\n\r\n const checkNotempty = fieldName => {\r\n if (isArray(valuesFilter[fieldName]) && !valuesFilter[fieldName]?.length) {\r\n return false\r\n }\r\n return isNotEmpty(valuesFilter[fieldName])\r\n }\r\n\r\n const getActiveFilter = () => {\r\n const { listField = [], listOption = [] } = configFilter\r\n if (defaultActive) {\r\n return true\r\n }\r\n const rsField = listField?.findIndex(field => {\r\n return checkNotempty(field.fieldName)\r\n })\r\n if (rsField >= 0) {\r\n return true\r\n }\r\n for (var option of listOption) {\r\n const listFieldOption = getSourceListFilter(option.optionKey)\r\n const rsOption = listFieldOption?.findIndex(option => {\r\n return checkNotempty(option.FieldName)\r\n })\r\n if (rsOption >= 0) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n }\r\n\r\n const getSourceListFilter = optionKey => {\r\n let options = {}\r\n if (!optionKey) {\r\n return\r\n }\r\n if (fnList && fnList.getSourceList) {\r\n options = fnList.getSourceList()\r\n }\r\n\r\n return options[optionKey] || []\r\n }\r\n\r\n const isActiveFilter = getActiveFilter()\r\n\r\n return (\r\n \r\n {HUtils.get(\r\n HCF.getCF(\"websiteSetting\"),\r\n \"category_screen.resetFilterTooltip\"\r\n )}\r\n \r\n }\r\n >\r\n {\r\n fnList.onClearFilter && fnList.onClearFilter()\r\n }}\r\n >\r\n \r\n \r\n \r\n )\r\n}\r\nconst WrapButton = styled.button`\r\n &.btn-default.btn-refresh {\r\n padding: 6px 15px;\r\n margin-right: 8px;\r\n position: relative;\r\n transition: all 0.5s, background-color 0s;\r\n &:hover,\r\n &:focus {\r\n border-color: #ccc !important;\r\n background: transparent !important;\r\n }\r\n &.btn-active-filter {\r\n background: var(--mau1) !important;\r\n border-color: var(--color-border-blue-light);\r\n &:after {\r\n content: \"\";\r\n display: block;\r\n border-radius: 50%;\r\n width: 12px;\r\n height: 12px;\r\n position: absolute;\r\n right: 10px;\r\n top: 6px;\r\n background: red;\r\n }\r\n }\r\n }\r\n`\r\nexport default MUIButtonRefresh\r\n","import React, { useEffect, useRef, useState } from \"react\"\r\nimport { HAuth } from \"src/core/helpers\"\r\nimport { MyForm, MyModal, MyUI } from \"src/core/components\"\r\nimport { SGPaths } from \"src/modules/app_sigo/constants/paths\"\r\nimport dfAvatar from \"src/modules/app_sigo/images/user.png\"\r\nimport dfLogo from \"src/modules/app_sigo/images/logo-sigo.png\"\r\nimport styled from \"styled-components\"\r\nimport { logout } from \"src/App/App.actions\"\r\nimport { ConnectedProps, connect } from \"react-redux\"\r\nimport classNames from \"classnames\"\r\nimport { HCF, HEE, HFormat, HLocalStorage, HUtils } from \"@macashipo/mlib\"\r\nimport { KAuth } from \"src/helpers/Flows/Auth\"\r\nimport { categoryFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport { Button } from \"reactstrap\"\r\nimport { IoSearchOutline } from \"react-icons/io5\"\r\nimport { useForceUpdate } from \"src/modules/app_sigo/hooks/useForceUpdate\"\r\nimport { showAlert } from \"src/modules/app_sigo/helpers/ui\"\r\nimport { getLoadingPage } from \"../../MyPage/LoadingHelper\"\r\nimport { headerTabList, pageKey } from \"src/modules/app_sigo/constants\"\r\n\r\nconst configKeyHeader = {\r\n menu_left: \"menu_left\",\r\n item_link: \"item_link\",\r\n item_title: \"item_title\",\r\n sub_items: \"sub_items\",\r\n sub_items_url: \"url\",\r\n sub_items_name: \"name\",\r\n // menu right\r\n menu_right: \"menu_right\",\r\n classname_icon: \"classname_icon\",\r\n classname_link: \"classname_link\",\r\n item_classname_wrap: \"item_classname_wrap\",\r\n right_item_link: \"item_link\",\r\n right_item_title: \"item_title\",\r\n right_sub_menu: \"sub_menu\",\r\n right_sub_url: \"url\",\r\n right_sub_name: \"name\",\r\n // menu mobile\r\n abouts: \"abouts\",\r\n rental_types: \"rental_types\",\r\n url: \"url\",\r\n name: \"name\",\r\n}\r\nconst mapStateToProps = state => ({\r\n isAuthenticated: state.app.isAuthenticated,\r\n dataFirstSetting: state.app.dataFirstSetting,\r\n})\r\n\r\nconst mapDispatchToProps = {\r\n logout,\r\n}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps)\r\ninterface Props extends ConnectedProps {\r\n fnOpenFilter?: any\r\n data?: any\r\n fnList?: any\r\n arrayTypeFields?: any\r\n moreConfig?: any\r\n}\r\nconst tabList = [\r\n {\r\n key: \"xe-tu-lai\",\r\n title: \"Xe tự lái\",\r\n link: \"/\",\r\n },\r\n {\r\n key: \"xe-co-tai\",\r\n title: \"Xe có tài\",\r\n link: \"/thue-xe-co-tai\",\r\n },\r\n {\r\n key: \"thue-dai-han\",\r\n title: \"Thuê dài hạn\",\r\n link: \"/thue-xe-dai-han\",\r\n },\r\n]\r\n\r\nconst MyUIHeader = (props: Props) => {\r\n const {\r\n isAuthenticated,\r\n logout,\r\n dataFirstSetting,\r\n fnOpenFilter,\r\n data,\r\n fnList,\r\n arrayTypeFields,\r\n moreConfig,\r\n } = props\r\n const [dropdownOpen, setDropdownOpen] = useState(false)\r\n const [curTab, setCurTab] = useState(\"xe-tu-lai\")\r\n const toggle = () => setDropdownOpen(prevState => !prevState)\r\n const logo = HAuth.getUserLogoApp() || dfLogo //\"/config/logo.png\"\r\n const [avatar, setAvatar] = useState(HAuth.getUserAvatar() || dfAvatar)\r\n const [userName, setUsername] = useState(HAuth.getUserName())\r\n const [isMobileView, setIsMobileView] = useState(false)\r\n const [isMobileViewV2, setIsMobileViewV2] = useState(false)\r\n const [curData, setCurData] = useState({} as any)\r\n const refSearchForm = useRef(null)\r\n const [myFilter, setMyFilter] = useState(data)\r\n const [keySearchForm, forceUpdateFnc] = useForceUpdate()\r\n const [isFocusSearch, setIsFocusSearch] = useState(false)\r\n const [needClearOtherFilter, setNeedClearOtherFilter] = useState(false)\r\n const [viewportHeight, setViewportHeight] = useState(window.innerHeight)\r\n const [configFirstSetting, setConfigFirstSetting] = useState(\r\n HUtils.get(dataFirstSetting, \"DefaultValues.websiteSetting\") || {}\r\n )\r\n const [activeSelectTime, setActiveSelectTime] = useState(false)\r\n let mobileWidth = 1010\r\n if (moreConfig?.mobileWidth) {\r\n mobileWidth = moreConfig?.mobileWidth\r\n }\r\n let mobileWidthV2 = 1010\r\n if (moreConfig?.mobileWidthV2) {\r\n mobileWidthV2 = moreConfig?.mobileWidthV2\r\n }\r\n\r\n useEffect(() => {\r\n setConfigFirstSetting(\r\n HUtils.get(dataFirstSetting, \"DefaultValues.websiteSetting\")\r\n )\r\n // eslint-disable-next-line\r\n }, [dataFirstSetting])\r\n const _updateAuthInfo = () => {\r\n setUsername(HAuth.getUserName())\r\n setAvatar(HAuth.getUserAvatar())\r\n }\r\n useEffect(() => {\r\n HEE.on(KAuth.eeUpdateAuthInfo, _updateAuthInfo)\r\n return () => {\r\n HEE.off(KAuth.eeUpdateAuthInfo, _updateAuthInfo)\r\n }\r\n // eslint-disable-next-line\r\n }, [])\r\n useEffect(() => {\r\n let newData = {\r\n [categoryFields.fToDate]: data?.[categoryFields.fToDate] || null,\r\n [categoryFields.fFromDate]: data?.[categoryFields.fFromDate] || null,\r\n [categoryFields.fAddress]: data?.[categoryFields.fAddress] || null,\r\n [categoryFields.fLatitude]: data?.[categoryFields.fLatitude],\r\n [categoryFields.fLongitude]: data?.[categoryFields.fLongitude],\r\n }\r\n setCurData(newData)\r\n // eslint-disable-next-line\r\n }, [])\r\n useEffect(() => {\r\n if (\r\n Object.keys(curData)?.length > 0 &&\r\n (data?.[categoryFields.fFromDate] !==\r\n curData?.[categoryFields.fFromDate] ||\r\n data?.[categoryFields.fToDate] !== curData?.[categoryFields.fToDate])\r\n ) {\r\n setCurData({\r\n ...curData,\r\n [categoryFields.fToDate]: data?.[categoryFields.fToDate],\r\n [categoryFields.fFromDate]: data?.[categoryFields.fFromDate],\r\n })\r\n forceUpdateFnc()\r\n }\r\n }, [data])\r\n useEffect(() => {\r\n const ro = new ResizeObserver((entries, observer) => {\r\n for (const entry of entries) {\r\n const { left, top, width, height } = entry.contentRect\r\n if (entry.target == document.body) {\r\n if (width <= mobileWidth) {\r\n if (isMobileView === false) {\r\n console.log(\r\n `RO Mobile Element's size: ${width}px x ${height}px`,\r\n isMobileView\r\n )\r\n }\r\n setIsMobileView(true)\r\n } else {\r\n setIsMobileView(false)\r\n }\r\n if (width <= mobileWidthV2) {\r\n setIsMobileViewV2(true)\r\n } else {\r\n setIsMobileViewV2(false)\r\n }\r\n }\r\n }\r\n })\r\n ro.observe(document.body)\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n const closeDropdownMobile = e => {\r\n if (\r\n !document\r\n .getElementsByClassName(\"mobile-menu-dropdown\")[0]\r\n ?.contains(e.target) &&\r\n !document\r\n .getElementsByClassName(\"dropdown-mobile-btn\")[0]\r\n ?.contains(e.target)\r\n ) {\r\n setDropdownOpen(false)\r\n }\r\n }\r\n useEffect(() => {\r\n window.addEventListener(\"click\", closeDropdownMobile)\r\n return () => {\r\n window.removeEventListener(\"click\", closeDropdownMobile)\r\n }\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n useEffect(() => {\r\n const updateViewportHeight = () => {\r\n setViewportHeight(window.innerHeight)\r\n }\r\n\r\n // Cập nhật chiều cao viewport khi cửa sổ thay đổi kích thước\r\n window.addEventListener(\"resize\", updateViewportHeight)\r\n\r\n // Cập nhật chiều cao viewport khi tải trang\r\n updateViewportHeight()\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", updateViewportHeight)\r\n }\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n const getDisabledBtnSearch = () => {\r\n if (\r\n !curData ||\r\n !curData?.[categoryFields.fToDate] ||\r\n !curData?.[categoryFields.fFromDate] ||\r\n !curData?.[categoryFields.fAddress]\r\n // || curData[categoryFields.fFromDate] >= curData?.[categoryFields.fToDate]\r\n ) {\r\n return true\r\n }\r\n return false\r\n }\r\n /**Get */\r\n const getFilterList = () => {\r\n const sourceList = fnList?.getSourceList && fnList.getSourceList()\r\n const filterList = [\r\n {\r\n title: \"Sắp xếp\",\r\n actionType: \"dropdown\",\r\n configForm: {\r\n defaultValues: myFilter,\r\n controls: [\r\n {\r\n fieldName: categoryFields.fOrderBy,\r\n type: \"list_radio\",\r\n more: {\r\n optionKey: \"OrderByList\",\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n title: \"Số chỗ\",\r\n actionType: \"dropdown\",\r\n configForm: {\r\n defaultValues: myFilter,\r\n controls: [\r\n {\r\n fieldName: categoryFields.fVehicleNoOfSeatIds,\r\n type: \"list_checkbox\",\r\n more: {\r\n optionKey: \"NoOfSeatList\",\r\n multi: true,\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n title: \"Mức giá\",\r\n actionType: \"modal\",\r\n configForm: {\r\n defaultValues: myFilter,\r\n controls: [\r\n {\r\n fieldName: categoryFields.fMaxRentalPrice,\r\n type: \"input_range\",\r\n more: {\r\n optionKey: \"RentalPrice\",\r\n morePropsRange: {\r\n fields: {\r\n min: categoryFields.fMinRentalPrice,\r\n max: categoryFields.fMaxRentalPrice,\r\n },\r\n getLabelTop: (min, val) => {\r\n return (\r\n <>\r\n Giá từ{\" \"}\r\n \r\n {HFormat.format(min, {\r\n type: \"money_vnd\",\r\n })}\r\n \r\n vnđ/ngày -{\" \"}\r\n \r\n {HFormat.format(val, {\r\n type: \"money_vnd\",\r\n })}\r\n \r\n vnđ/ngày\r\n \r\n )\r\n },\r\n getMin: () =>\r\n HUtils.get(sourceList, `RentalPrice.MinValue.Value`),\r\n getMax: () =>\r\n HUtils.get(sourceList, `RentalPrice.MaxValue.Value`),\r\n getStep: () => 100000,\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n configModal: {\r\n showHeader: false,\r\n showHeaderClose: true,\r\n showFooter: false,\r\n },\r\n },\r\n {\r\n title: \"Hộp số\",\r\n actionType: \"dropdown\",\r\n configForm: {\r\n defaultValues: myFilter,\r\n controls: [\r\n {\r\n fieldName: categoryFields.fVehicleTransmissionTypeIds,\r\n type: \"list_checkbox\",\r\n more: {\r\n optionKey: \"VehicleTransmissionTypeList\",\r\n multi: true,\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n title: \"Bộ lọc khác\",\r\n icon: (\r\n \r\n ),\r\n actionType: \"modal\",\r\n classNameWrapForm:\r\n \"mCustomScrollBox mCS-light mCSB_vertical mCSB_inside max-height-330px overflow-auto\",\r\n classNameForm: \"mCSB_container position-relative left-0\",\r\n configForm: {\r\n defaultValues: myFilter,\r\n controls: [\r\n {\r\n label: \"Hãng Xe\",\r\n fieldName: categoryFields.fVehicleMakeIds,\r\n type: \"input_select\",\r\n more: {\r\n optionKey: \"VehicleMakeList\",\r\n multi: false,\r\n },\r\n },\r\n {\r\n label: \"Nhiên Liệu\",\r\n fieldName: categoryFields.fFuelTypeIds,\r\n type: \"input_select\",\r\n more: {\r\n optionKey: \"FuelTypeList\",\r\n multi: false,\r\n },\r\n },\r\n {\r\n label: \"Màu Sắc\",\r\n fieldName: categoryFields.fVehicleColorIds,\r\n type: \"input_select\",\r\n more: {\r\n optionKey: \"VehicleColorList\",\r\n multi: false,\r\n },\r\n },\r\n {\r\n label: \"Năm Sản Xuất\",\r\n fieldName: categoryFields.fYearModels,\r\n type: \"input_select\",\r\n more: {\r\n optionKey: \"YearModelList\",\r\n multi: false,\r\n },\r\n },\r\n {\r\n label: \"Giấy Tờ Thế Chấp\",\r\n fieldName: categoryFields.fDocumentIds,\r\n type: \"list_checkbox\",\r\n more: {\r\n optionKey: \"DocumentList\",\r\n classNameWrap: \"row\",\r\n classNameItem: \"col-md-6\",\r\n multi: true,\r\n },\r\n },\r\n {\r\n label: \"Tiện Ích Nâng Cao\",\r\n fieldName: categoryFields.fFeatureIds,\r\n type: \"list_checkbox\",\r\n more: {\r\n optionKey: \"FeatureList\",\r\n classNameWrap: \"row\",\r\n classNameItem: \"col-md-6\",\r\n multi: true,\r\n },\r\n },\r\n ],\r\n },\r\n configModal: {\r\n title: \"Bộ lọc khác\",\r\n showFooter: true,\r\n showFooterClose: true,\r\n showFooterOK: true,\r\n titleBtnClose: \"Xóa tất cả\",\r\n titleBtnOK: \"Áp dụng\",\r\n modalClassName: \"default footer-space-between modal-filter\",\r\n classNameBody: \"mCustomScrollbar _mCS_1 max-height-400px\",\r\n },\r\n },\r\n ]\r\n return filterList\r\n }\r\n const getConfigForm = () => {\r\n const address = getConfigFromFirstSettingByKey(\"address\") || {}\r\n const dateFromToConfig =\r\n getConfigFromFirstSettingByKey(\"date_from_to\") || {}\r\n const configForm = {\r\n defaultValues: {\r\n ...curData,\r\n DateFromTo: [\r\n data?.[categoryFields.fFromDate],\r\n data?.[categoryFields.fToDate],\r\n ],\r\n },\r\n controls: [\r\n {\r\n label: \"\",\r\n fieldName: categoryFields.fAddress,\r\n type: \"button_select_address\",\r\n more: {\r\n classNameGroup: \"col-md-4 col-sm-12\",\r\n morePropsInputAddress: {\r\n mappingFields: {\r\n fieldAddress: categoryFields.fAddress,\r\n },\r\n },\r\n configBtnAddress: {\r\n ...address,\r\n fieldAddress: categoryFields.fAddress,\r\n },\r\n },\r\n },\r\n {\r\n label: \"\",\r\n fieldName: \"DateFromTo\",\r\n type: \"input_date_from_to_v2\",\r\n more: {\r\n morePropsDateFlatPickr: {\r\n calendarStartDay: 0,\r\n },\r\n moreOptionsDateFlatPickr: {\r\n disable: [\r\n function (date) {\r\n return (\r\n date < new Date().setHours(0, 0, 0, 0) &&\r\n date.getTime() !== new Date().setHours(0, 0, 0, 0)\r\n )\r\n },\r\n ],\r\n },\r\n configMergeText: {\r\n titleWhenMergeText: \"Chọn ngày\",\r\n },\r\n mappingField: {\r\n fFrom: categoryFields.fFromDate,\r\n fTo: categoryFields.fToDate,\r\n },\r\n configSelectTime: {\r\n titleTimeFrom: \"Giờ nhận xe\",\r\n titleTimeTo: \"Giờ trả xe\",\r\n },\r\n configSelectDate: {\r\n placeholderTo: \"Chọn ngày trả\",\r\n placeholderFrom: \"Chọn ngày nhận\",\r\n breakCharacter: \"-ngày \",\r\n labelFrom: \"Ngày nhận\",\r\n labelTo: \"Ngày trả\",\r\n ...dateFromToConfig,\r\n },\r\n defaultActiveDropdown: activeSelectTime,\r\n classNameGroup: \"datefromto\",\r\n },\r\n },\r\n ],\r\n }\r\n return configForm\r\n }\r\n const getConfigFromFirstSettingByKey = key => {\r\n if (configFirstSetting) {\r\n const { config_search_in_header } = configFirstSetting || {}\r\n return HUtils.get(config_search_in_header, key)\r\n }\r\n return\r\n }\r\n const getConfigLoadingSkeleton = () => {\r\n const config = {\r\n customLoading: () => {\r\n return getLoadingPage({\r\n key: pageKey.onlyHeader,\r\n tabList: headerTabList,\r\n logo: logo,\r\n })\r\n },\r\n loading: moreConfig?.loading,\r\n moreConfig: {},\r\n }\r\n return config\r\n }\r\n /** */\r\n\r\n const onOpenFilter = () => {\r\n return MyModal.showFromMyUI(\r\n {\r\n type: \"sg_filter_category\",\r\n data: data,\r\n configFormFilter: configFormFilter,\r\n configFilterList: getFilterList(),\r\n fnList: {\r\n ...fnList,\r\n onCloseModal: () => {\r\n MyModal.hideModalMyUI()\r\n },\r\n },\r\n arrayTypeFields: arrayTypeFields,\r\n },\r\n {\r\n title: \"Bộ lọc\",\r\n size: \"lg\",\r\n modalClassName: \"default modal-header-left\",\r\n }\r\n )\r\n }\r\n const onUpdateFilter = (data, { moreConfig }: any = {}) => {\r\n const { DateFromTo, ...other } = data\r\n fnList?.onSetFilterObject && fnList?.onSetFilterObject({ ...other })\r\n }\r\n const onHandleCollapseNav = value => {\r\n const navbar = document.getElementById(\"navbar-category-v2\")\r\n const sticky: any = navbar?.offsetTop\r\n if (value === false && navbar?.classList.contains(\"truot\") && navbar) {\r\n navbar.classList.remove(\"truot\")\r\n } else if (\r\n navbar &&\r\n value === true &&\r\n ((window.pageYOffset >= sticky &&\r\n window.pageYOffset > 0 &&\r\n !navbar?.classList.contains(\"truot\")) ||\r\n moreConfig?.skipShowFullHeader)\r\n ) {\r\n navbar.classList.add(\"truot\")\r\n }\r\n // if (navbar) {\r\n // if (!navbar?.classList.contains(\"truot\") && value) {\r\n // navbar.classList.add(\"truot\")\r\n // } else if (!value && navbar?.classList.contains(\"truot\")) {\r\n // navbar.classList.remove(\"truot\")\r\n // }\r\n // }\r\n }\r\n\r\n const renderMobile = () => {\r\n const { header } = configFirstSetting || {}\r\n const abouts = header?.[configKeyHeader.abouts] || []\r\n const rentalTypes = header?.[configKeyHeader.rental_types] || []\r\n return (\r\n \r\n {isAuthenticated ? (\r\n \r\n ) : (\r\n
    \r\n
  • \r\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\r\n {\r\n e.preventDefault()\r\n MyModal.showFromMyUI(\r\n {\r\n type: \"sg_login\",\r\n afterLogin: () => {\r\n MyModal.hideModalMyUI()\r\n window.location.reload()\r\n },\r\n actionType: \"register\",\r\n // field: \"PhoneNumber\",\r\n field: \"MobilePhone\",\r\n },\r\n {\r\n size: \"top\",\r\n showHeader: false,\r\n showHeaderClose: false,\r\n backdrop: \"static\",\r\n modalClassName: \"modal-login\",\r\n }\r\n )\r\n }}\r\n >\r\n Đăng ký\r\n \r\n
  • \r\n
  • \r\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\r\n {\r\n e.preventDefault()\r\n MyModal.showFromMyUI(\r\n {\r\n type: \"sg_login\",\r\n afterLogin: () => {\r\n MyModal.hideModalMyUI()\r\n window.location.reload()\r\n },\r\n actionType: \"login\",\r\n field: \"MobilePhone\",\r\n },\r\n {\r\n size: \"top\",\r\n showHeader: false,\r\n showHeaderClose: false,\r\n backdrop: \"static\",\r\n modalClassName: \"modal-login\",\r\n }\r\n )\r\n }}\r\n >\r\n Đăng nhập\r\n \r\n
  • \r\n
  • \r\n {abouts &&\r\n abouts?.length > 0 &&\r\n abouts.map((v, i) => {\r\n const url = v?.[configKeyHeader.url] || \"#\"\r\n const name = v?.[configKeyHeader.name] || \"\"\r\n return (\r\n
  • \r\n \r\n {name}\r\n \r\n
  • \r\n )\r\n })}\r\n {rentalTypes &&\r\n rentalTypes?.length > 0 &&\r\n rentalTypes.map((v, i) => {\r\n const url = v?.[configKeyHeader.url] || \"#\"\r\n const name = v?.[configKeyHeader.name] || \"\"\r\n return (\r\n
  • \r\n \r\n {name}\r\n \r\n
  • \r\n )\r\n })}\r\n
\r\n )}\r\n \r\n )\r\n }\r\n const renderMenuLeft = () => {\r\n const menuLeft = data?.[configKeyHeader.menu_left] || []\r\n if (menuLeft && menuLeft?.length > 0) {\r\n return (\r\n \r\n
    \r\n {menuLeft.map((v, i) => {\r\n const title = v?.[configKeyHeader.item_title] || \"\"\r\n const link = v?.[configKeyHeader.item_link] || \"#\"\r\n const subMenu = v?.[configKeyHeader.sub_items] || \"\"\r\n const isDropdown = subMenu && subMenu !== \"\"\r\n return (\r\n \r\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\r\n {isDropdown ? (\r\n \r\n {title}\r\n \r\n {subMenu.map((item, j) => {\r\n const url =\r\n item?.[configKeyHeader.sub_items_url] || \"#\"\r\n const name = item?.[configKeyHeader.sub_items_name]\r\n return (\r\n
  • \r\n \r\n {name}\r\n \r\n
  • \r\n )\r\n })}\r\n
\r\n \r\n ) : (\r\n {title}\r\n )}\r\n \r\n )\r\n })}\r\n \r\n \r\n )\r\n }\r\n return <>\r\n }\r\n const renderMenuRight = () => {\r\n const menuRight = data?.[configKeyHeader.menu_right] || []\r\n if (menuRight && menuRight?.length > 0) {\r\n return (\r\n \r\n
    \r\n {/* {menuRight.map((v, i) => {\r\n const classNameWrap = v?.[configKeyHeader.item_classname_wrap]\r\n const classNameLink = v?.[configKeyHeader.classname_link]\r\n const icon = v?.[configKeyHeader.classname_icon] || \"\"\r\n const link = v?.[configKeyHeader.right_item_link] || \"#\"\r\n const title = v?.[configKeyHeader.right_item_title] || \"\"\r\n const subMenu = v?.[configKeyHeader.right_sub_menu]\r\n const isHasDropdown = subMenu && subMenu?.length > 0\r\n return (\r\n \r\n \r\n {icon && } {title}\r\n \r\n {isHasDropdown && (\r\n \r\n {subMenu.map((sub, j) => {\r\n const url = sub?.[configKeyHeader.right_sub_url] || \"#\"\r\n const name = sub?.[configKeyHeader.right_sub_name] || \"\"\r\n return (\r\n
  • \r\n \r\n {name}\r\n \r\n
  • \r\n )\r\n })}\r\n
\r\n )}\r\n \r\n )\r\n })} */}\r\n \r\n \r\n \r\n )\r\n }\r\n return (\r\n \r\n
    \r\n \r\n
\r\n \r\n )\r\n }\r\n const configFormFilter = {\r\n defaultValues: data,\r\n controls: [\r\n {\r\n label: \"Địa điểm\",\r\n fieldName: categoryFields.fAddress,\r\n type: \"input_address\",\r\n more: {\r\n classNameGroup: \"col-md-12 col-sm-12\",\r\n morePropsInputAddress: {\r\n mappingFields: {\r\n fieldAddress: categoryFields.fAddress,\r\n },\r\n props4Search: {\r\n configSelect: {\r\n placeholder: \"Bạn đặt xe ở … \",\r\n },\r\n },\r\n },\r\n },\r\n },\r\n {\r\n label: \"Bắt đầu\",\r\n fieldName: categoryFields.fFromDate,\r\n type: \"input_datetime\",\r\n more: {\r\n classNameGroup: \"col-md-4 col-sm-12\",\r\n configDate: {\r\n minDate: new Date(),\r\n placeholderDate: \"Chọn ngày\",\r\n },\r\n configTime: {\r\n placeholderTime: \"Chọn giờ\",\r\n },\r\n },\r\n },\r\n {\r\n label: \"Kết thúc\",\r\n fieldName: categoryFields.fToDate,\r\n type: \"input_datetime\",\r\n more: {\r\n classNameGroup: \"col-md-4 col-sm-12\",\r\n configDate: {\r\n minDate: new Date(),\r\n placeholderDate: \"Chọn ngày\",\r\n },\r\n configTime: {\r\n placeholderTime: \"Chọn giờ\",\r\n },\r\n },\r\n },\r\n ],\r\n }\r\n\r\n if (isMobileView) {\r\n if (moreConfig?.hideDefaultMobile) {\r\n return <>\r\n }\r\n return (\r\n \r\n
\r\n
\r\n \r\n {!isMobileViewV2 && (\r\n <>\r\n {moreConfig?.isShowInMobile && (\r\n {\r\n e.preventDefault()\r\n toggle()\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n 0\r\n \"\"\r\n \r\n )}\r\n {\r\n \r\n \r\n Bộ lọc\r\n \r\n }\r\n \r\n \"logo\"\r\n \r\n \r\n )}\r\n
\r\n {!isMobileViewV2 && renderMenuLeft()}\r\n {!isMobileViewV2 && renderMenuRight()}\r\n {moreConfig?.isShowInMobile && renderMobile()}\r\n
\r\n
\r\n \r\n )\r\n }\r\n\r\n const renderSearchForm = () => {\r\n const cfAddress = getConfigFromFirstSettingByKey(\"address\")\r\n return (\r\n {\r\n fnList?.onSetShowOverlay && fnList?.onSetShowOverlay(value)\r\n setIsFocusSearch(value)\r\n },\r\n onHandleCollapseNav: onHandleCollapseNav,\r\n afterUpdateValueControl: opts => {\r\n const { fieldName, newValue } = opts\r\n let newData: any = JSON.parse(JSON.stringify(curData))\r\n if (fieldName === \"DateFromTo\") {\r\n const [start, end] = newValue\r\n newData[categoryFields.fFromDate] = start\r\n newData[categoryFields.fToDate] = end\r\n newData[fieldName] = newValue\r\n }\r\n setCurData(newData)\r\n if (\r\n newData?.[categoryFields.fFromDate] &&\r\n newData?.[categoryFields.fToDate]\r\n ) {\r\n onUpdateFilter(newData)\r\n }\r\n },\r\n afterCloseSelectTime: value => {\r\n let [start, end] = value\r\n let newData: any = JSON.parse(JSON.stringify(curData))\r\n let minDate = new Date().setHours(0, 0, 0, 0)\r\n let needFormatValue = false\r\n if (!start && !end) {\r\n const { ToDate, FromDate } = data\r\n newData[categoryFields.fFromDate] = FromDate\r\n newData[categoryFields.fToDate] = ToDate\r\n newData[\"DateFromTo\"] = [FromDate, ToDate]\r\n start = FromDate\r\n end = ToDate\r\n needFormatValue = true\r\n }\r\n // Chỉ format khi chưa chọn thời gian trả và khi thời gian thuê > = thời gian trả\r\n if (!end || start >= end || !start) {\r\n needFormatValue = true\r\n }\r\n if (needFormatValue) {\r\n let _newToDate = start + 86400000\r\n let _newFromDate = end - 86400000\r\n let endHours = new Date(start).getHours()\r\n let endMinute = new Date(start).getMinutes()\r\n let startHours = new Date(end).getHours()\r\n let startMinute = new Date(end).getMinutes()\r\n\r\n if (start >= end && end && start) {\r\n endHours = new Date(end).getHours()\r\n endMinute = new Date(end).getMinutes()\r\n _newToDate = new Date(\r\n new Date(_newToDate).setHours(endHours, endMinute, 0, 0)\r\n ).getTime()\r\n newData[categoryFields.fToDate] = _newToDate\r\n newData[categoryFields.fFromDate] = start\r\n newData[\"DateFromTo\"] = [start, _newToDate]\r\n }\r\n\r\n if (!end && start) {\r\n _newToDate = new Date(\r\n new Date(_newToDate).setHours(endHours, endMinute, 0, 0)\r\n ).getTime()\r\n newData[categoryFields.fToDate] = _newToDate\r\n newData[categoryFields.fFromDate] = start\r\n newData[\"DateFromTo\"] = [start, _newToDate]\r\n }\r\n\r\n if (!start && end) {\r\n _newFromDate = new Date(\r\n new Date(_newFromDate).setHours(\r\n startHours,\r\n startMinute,\r\n 0,\r\n 0\r\n )\r\n ).getTime()\r\n if (_newFromDate < minDate) {\r\n _newFromDate = minDate\r\n }\r\n newData[categoryFields.fFromDate] = _newFromDate\r\n newData[categoryFields.fToDate] = end\r\n newData[\"DateFromTo\"] = [_newFromDate, end]\r\n }\r\n setCurData(newData)\r\n if (\r\n newData?.[categoryFields.fFromDate] &&\r\n newData?.[categoryFields.fToDate]\r\n ) {\r\n onUpdateFilter(newData)\r\n }\r\n forceUpdateFnc()\r\n }\r\n },\r\n afterUpdateMultiValues: (obj, { afterUpdate }: any = {}) => {\r\n const { values } = obj\r\n let objUpdate: any = {}\r\n objUpdate = { ...values }\r\n if (values?.[`${categoryFields.fAddress}_MoreInfo`]) {\r\n const location = HUtils.get(\r\n values,\r\n `${categoryFields.fAddress}_MoreInfo[0].geometry.location`\r\n )\r\n if (location?.lat) {\r\n objUpdate[categoryFields.fLatitude] = location.lat()\r\n }\r\n if (location?.lng) {\r\n objUpdate[categoryFields.fLongitude] = location.lng()\r\n }\r\n const _newData = {\r\n ...curData,\r\n ...objUpdate,\r\n }\r\n setCurData(_newData)\r\n onUpdateFilter(objUpdate)\r\n setNeedClearOtherFilter(true)\r\n setActiveSelectTime(true)\r\n forceUpdateFnc()\r\n // if (cfAddress?.autoCloseAfterUpdate) {\r\n // const delay = setTimeout(() => {\r\n // afterUpdate && afterUpdate()\r\n // }, 0)\r\n // timer.current = delay as any\r\n // }\r\n } else {\r\n // Trường hợp clear địa chỉ\r\n const _newData = {\r\n ...curData,\r\n ...objUpdate,\r\n }\r\n setCurData(_newData)\r\n }\r\n },\r\n updateAddress: (obj, { afterUpdate }: any = {}) => {\r\n const { Name, ...other } = obj\r\n let newData = {\r\n ...curData,\r\n ...other,\r\n [`${categoryFields.fAddress}_MoreInfo`]: [],\r\n }\r\n setCurData(newData)\r\n onUpdateFilter(newData)\r\n setNeedClearOtherFilter(true)\r\n // Tự động close dropdown sau khi chọn xong address ở vùng Gợi ý\r\n const { autoCloseAfterUpdate } = cfAddress || {}\r\n if (autoCloseAfterUpdate?.needAutoClose) {\r\n // const _delayTime = autoCloseAfterUpdate?.delayTime || 0\r\n // const delay = setTimeout(() => {\r\n // afterUpdate && afterUpdate()\r\n // }, _delayTime)\r\n // timer.current = delay as any\r\n // Xử lý trường hợp chọn nhanh địa chỉ --> Mở dropdown select thời gian\r\n afterUpdate && afterUpdate()\r\n setActiveSelectTime(true)\r\n forceUpdateFnc()\r\n }\r\n },\r\n updateAddressWithTime: (\r\n obj,\r\n { afterUpdate, fnIsExpired }: any = {}\r\n ) => {\r\n const { FromDate, ToDate, ...other } = obj\r\n let newData: any = {\r\n ...curData,\r\n ...other,\r\n }\r\n let isFormat = false\r\n if (FromDate && ToDate) {\r\n if (\r\n FromDate <= new Date().getTime() ||\r\n ToDate <= new Date().getTime()\r\n ) {\r\n fnIsExpired && fnIsExpired()\r\n // showAlert({\r\n // component: (\r\n // \r\n // ),\r\n // })\r\n } else if (FromDate >= ToDate) {\r\n let _newToDate = FromDate + 86400000\r\n let endHours = new Date(ToDate).getHours()\r\n let endMinute = new Date(ToDate).getMinutes()\r\n newData[categoryFields.fToDate] = new Date(\r\n new Date(_newToDate).setHours(endHours, endMinute, 0, 0)\r\n ).getTime()\r\n newData[categoryFields.fFromDate] = FromDate\r\n isFormat = true\r\n } else {\r\n newData[categoryFields.fToDate] = ToDate\r\n newData[categoryFields.fFromDate] = FromDate\r\n }\r\n }\r\n if (\r\n (FromDate === newData[categoryFields.fFromDate] &&\r\n ToDate === newData[categoryFields.fToDate]) ||\r\n isFormat\r\n ) {\r\n fnList.onFilterAddress(\r\n { ...newData },\r\n { needClearOtherFilter: true }\r\n )\r\n setCurData({ ...curData, ...other })\r\n afterUpdate && afterUpdate()\r\n setNeedClearOtherFilter(false)\r\n } else {\r\n onUpdateFilter(newData)\r\n setCurData(newData)\r\n setNeedClearOtherFilter(true)\r\n // Xử lý trường hợp recently address chưa có thời gian hoặc thời gian đã cũ\r\n afterUpdate && afterUpdate()\r\n setActiveSelectTime(true)\r\n forceUpdateFnc()\r\n if (!FromDate && !ToDate) {\r\n }\r\n }\r\n },\r\n setActiveSelectTime: setActiveSelectTime,\r\n } as any\r\n }\r\n renderFooter={() => {\r\n return (\r\n
\r\n {\r\n const { DateFromTo, MoreInfo, ...other } = curData\r\n let newAddress = {\r\n [categoryFields.fAddress]:\r\n curData?.[categoryFields.fAddress],\r\n [categoryFields.fLongitude]:\r\n curData?.[categoryFields.fLongitude],\r\n [categoryFields.fLatitude]:\r\n curData?.[categoryFields.fLatitude],\r\n [`${categoryFields.fAddress}_MoreInfo`]: MoreInfo,\r\n }\r\n if (needClearOtherFilter && fnList?.onFilterAddress) {\r\n fnList.onFilterAddress(\r\n { ...other },\r\n {\r\n needSaveLocal: true,\r\n newValueLocal: newAddress,\r\n needClearOtherFilter: needClearOtherFilter,\r\n }\r\n )\r\n } else {\r\n if (fnList?.onFilter) {\r\n fnList.onFilter(\r\n { ...other },\r\n {\r\n needSaveLocal: true,\r\n newValueLocal: newAddress,\r\n }\r\n )\r\n }\r\n }\r\n setNeedClearOtherFilter(false)\r\n }}\r\n className={`${isFocusSearch ? \"has-text\" : \"\"}`}\r\n disabled={getDisabledBtnSearch()}\r\n >\r\n {isFocusSearch ? <>Tìm kiếm : <>}\r\n \r\n
\r\n )\r\n }}\r\n />\r\n )\r\n }\r\n const renderRightHeader = () => {\r\n const menuItem = getConfigFromFirstSettingByKey(\"menu_item.right\") || []\r\n return (\r\n \r\n {menuItem &&\r\n menuItem?.length > 0 &&\r\n menuItem.map((v, i) => {\r\n return (\r\n \r\n {v?.name}\r\n \r\n )\r\n })}\r\n
    \r\n \r\n
\r\n \r\n )\r\n }\r\n const renderTopHeader = () => {\r\n return (\r\n \r\n
\r\n \r\n \"logo\"\r\n \r\n
\r\n {!moreConfig?.onlyShowLogo && (\r\n <>\r\n
\r\n
\r\n {tabList &&\r\n tabList?.length > 0 &&\r\n tabList?.map(v => {\r\n return (\r\n \r\n {v?.title}\r\n \r\n )\r\n })}\r\n
\r\n
\r\n {curTab === \"xe-tu-lai\" && renderSearchForm()}\r\n {renderRightHeader()}\r\n \r\n )}\r\n \r\n )\r\n }\r\n const render = () => {\r\n if (moreConfig?.showLoading) {\r\n const config: any = getConfigLoadingSkeleton()\r\n return (\r\n \r\n {renderTopHeader()}\r\n {!moreConfig?.isHideBottomFilter && (\r\n <>\r\n
\r\n \r\n \r\n )}\r\n \r\n )\r\n }\r\n return (\r\n <>\r\n {renderTopHeader()}\r\n {!moreConfig?.isHideBottomFilter && (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n \r\n )\r\n }\r\n return (\r\n \r\n {render()}\r\n \r\n )\r\n}\r\nconst RightMenu = styled.div`\r\n &.right-menu {\r\n &.collapse.navbar-collapse {\r\n display: flex !important;\r\n align-items: center;\r\n // gap: 20px;\r\n flex: 1 0 140px;\r\n justify-content: flex-end;\r\n padding-right: 0;\r\n & .right-item {\r\n margin-right: 20px;\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n & .navbar-right.avatar-menu {\r\n float: unset;\r\n margin-top: 0 !important;\r\n }\r\n & .custom-link {\r\n color: var(--color-text-000);\r\n font-size: 14px;\r\n font-weight: 500;\r\n }\r\n & .navbar_right-v2 {\r\n & ul.dropdown-menu {\r\n padding-top: 0;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapTopHeader: any = styled.div`\r\n & .wrap-btn-search {\r\n min-width: 129px;\r\n display: flex;\r\n justify-content: flex-end;\r\n }\r\n &.wrap-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: flex-start;\r\n height: 135px;\r\n transition: background 0.25s;\r\n width: 100%;\r\n position: relative;\r\n z-index: 334;\r\n padding: 0px;\r\n &.only-logo {\r\n justify-content: flex-start;\r\n height: 50px;\r\n }\r\n }\r\n & .navbar-header {\r\n transition: all 0.25s;\r\n & .navbar-brand {\r\n padding: 0 !important;\r\n }\r\n }\r\n & .logo {\r\n filter: unset;\r\n }\r\n\r\n & .first-menu {\r\n display: flex;\r\n // gap: 50px;\r\n & .menu-item {\r\n margin-right: 50px;\r\n color: #5b5959;\r\n font-weight: 500;\r\n font-size: 16px;\r\n min-width: 60px;\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n & .menu-item.active {\r\n color: var(--color-text-000);\r\n font-weight: 700;\r\n }\r\n }\r\n & .form-search {\r\n // max-width: 75%;\r\n height: 5em;\r\n top: 50px;\r\n transform: translate(-50%, 0);\r\n border-radius: 37px;\r\n width: 1000px;\r\n position: absolute;\r\n align-items: center;\r\n background: #e9e9e9;\r\n box-shadow: 0px 2px 10px 0px #0000001a;\r\n border: 1px solid #e3e1e1;\r\n cursor: pointer;\r\n display: flex;\r\n padding: 0 0 0 0.5em;\r\n transition: height 0.25s;\r\n left: 50%;\r\n justify-content: flex-end;\r\n & .mb-3 {\r\n margin-bottom: 0 !important;\r\n }\r\n & .datefromto-dropdown-menu {\r\n transform: none !important;\r\n left: -65% !important;\r\n top: 10px !important;\r\n width: 950px;\r\n padding-right: 0;\r\n max-height: calc(${(props: any) => `${props.viewportHeight}px`} - 165px);\r\n -webkit-backface-visibility: hidden;\r\n backface-visibility: hidden;\r\n & .w-dropdown-menu {\r\n max-height: calc(\r\n ${(props: any) => `${props.viewportHeight}px`} - 165px\r\n );\r\n overflow: auto;\r\n padding-right: 25px;\r\n }\r\n & .wrap-select-time {\r\n max-width: 792px;\r\n margin: 30px auto 15px auto;\r\n }\r\n }\r\n & .input-address-dropdown-menu {\r\n max-height: calc(${(props: any) => `${props.viewportHeight}px`} - 165px);\r\n & > div {\r\n overflow-y: auto;\r\n max-height: calc(\r\n ${(props: any) => `${props.viewportHeight}px`} - 165px\r\n );\r\n margin: -25px 0;\r\n padding: 25px 0;\r\n margin-right: -25px;\r\n padding-right: 25px;\r\n }\r\n }\r\n & .select-address-dropdown-menu {\r\n transform: translate(-29%, 2%) !important;\r\n left: 100% !important;\r\n top: 2px !important;\r\n backface-visibility: hidden;\r\n }\r\n }\r\n & .form-search {\r\n & .form-group {\r\n width: 35%;\r\n }\r\n & .form-group.datefromto {\r\n width: calc(65% - 70px - 18px);\r\n }\r\n }\r\n & .mid-menu {\r\n left: 50%;\r\n position: absolute;\r\n top: 20px;\r\n visibility: visible;\r\n transform: translateX(-50%) translateY(-50%) scale(1);\r\n transition: all 0.25s;\r\n }\r\n & .btn-search {\r\n width: 56px;\r\n height: 56px;\r\n box-shadow: none;\r\n border: none;\r\n border-radius: 37px;\r\n font-size: 16px;\r\n background-color: var(--mau1);\r\n color: var(--color-text-fff);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-left: 20px;\r\n margin-right: 10px;\r\n font-weight: 600;\r\n transition: none;\r\n &.has-text {\r\n border-radius: 37px;\r\n width: 100%;\r\n & svg {\r\n margin-right: 5px;\r\n width: 20px;\r\n height: 20px;\r\n }\r\n }\r\n & svg {\r\n width: 25px;\r\n height: 25px;\r\n }\r\n }\r\n & .btn-search:hover {\r\n box-shadow: none;\r\n border: none;\r\n }\r\n // @media (min-width: 1500px) {\r\n // & .form-search {\r\n // width: 1000px;\r\n // & .datefromto-dropdown-menu {\r\n // transform: translate(-26%, 2%) !important;\r\n // backface-visibility: hidden;\r\n // }\r\n // & .select-address-dropdown-menu {\r\n // transform: translate(-26%, 2%) !important;\r\n // backface-visibility: hidden;\r\n // }\r\n // }\r\n // }\r\n @media (max-width: 1199px) {\r\n & .form-search {\r\n max-width: 100%;\r\n width: 1000px;\r\n }\r\n }\r\n`\r\nconst WrapBottomHeader = styled.div`\r\n @media (min-width: 1200px) {\r\n & .only-desktop {\r\n max-width: 100% !important;\r\n & .sg-all-filter {\r\n & .wpfillter {\r\n max-width: 90%;\r\n margin: 0 auto;\r\n }\r\n &.show-overlay-filter {\r\n max-width: 100% !important;\r\n margin-bottom: 0 !important;\r\n }\r\n }\r\n }\r\n }\r\n`\r\nconst Wrap: any = styled.div`\r\n &.header-full-v2 {\r\n padding-bottom: 0;\r\n & .wpfillter {\r\n padding-bottom: 10px !important;\r\n }\r\n }\r\n &.navbar {\r\n background-color: var(--color-text-fff) !important;\r\n // border-bottom: 1px solid var(--color-border-e4);\r\n box-shadow: rgb(0 0 0 / 16%) 0 0 6px;\r\n transition: none;\r\n &.only-logo {\r\n padding-right: 8px;\r\n }\r\n }\r\n & .bottom-menu {\r\n display: flex;\r\n }\r\n hr {\r\n margin-top: 5px !important;\r\n margin-bottom: 0;\r\n border-color: var(--color-border-e4);\r\n background-color: var(--color-border-e4);\r\n }\r\n & .sg-all-filter {\r\n & #wpfillter {\r\n margin-bottom: 0;\r\n padding: 10px 0px 0px;\r\n & .btn {\r\n margin-bottom: 0;\r\n }\r\n & .container {\r\n padding: 0 0px;\r\n max-width: 100%;\r\n }\r\n }\r\n }\r\n &.navbar.truot {\r\n // box-shadow: none;\r\n & .wrap-header {\r\n height: 50px;\r\n }\r\n & .mid-menu {\r\n left: 50%;\r\n visibility: hidden;\r\n top: -20px;\r\n transform: translateX(-50%) translateY(-50%) scale(0);\r\n backface-visibility: hidden;\r\n -webkit-font-smoothing: subpixel-antialiased;\r\n }\r\n & .form-search {\r\n & .form-group {\r\n width: 50%;\r\n padding-left: 0;\r\n & label {\r\n display: none;\r\n }\r\n }\r\n & .form-group.datefromto {\r\n width: 40%;\r\n }\r\n }\r\n & .btn-search {\r\n width: 38px;\r\n height: 38px;\r\n font-size: 16px;\r\n margin-left: 0px;\r\n margin-right: 5px;\r\n }\r\n & .form-search {\r\n height: 48px;\r\n border-radius: 3em;\r\n max-width: 50%;\r\n top: -2px;\r\n // top: 22px;\r\n // transform: translate(-50%, -50%);\r\n width: 580px;\r\n background: var(--color-text-fff);\r\n & .datefromto-dropdown-menu {\r\n left: -65% !important;\r\n top: 10px !important;\r\n }\r\n & .select-address-dropdown-menu {\r\n transform: translate(-50%) !important;\r\n top: 13px !important;\r\n backface-visibility: hidden;\r\n }\r\n & .mc-input-date-from-to {\r\n & .btn-time-select {\r\n display: none;\r\n }\r\n & .btn-time-select.custom-text {\r\n display: flex;\r\n }\r\n }\r\n & .mc_btn_address_v2 {\r\n & .btn-input-address {\r\n display: none;\r\n }\r\n & .btn-input-address.custom-text {\r\n display: flex;\r\n }\r\n }\r\n }\r\n }\r\n & .wrap-button-form {\r\n & .btn-default:active:not(.btn-active),\r\n & .btn-default:focus:not(.btn-active) {\r\n background-color: #fff !important;\r\n border-color: #ccc !important;\r\n }\r\n }\r\n @media (min-width: 1500px) {\r\n &.navbar.truot {\r\n & .form-search {\r\n width: 625px;\r\n & .datefromto-dropdown-menu {\r\n left: -75% !important;\r\n top: 6px !important;\r\n }\r\n }\r\n & .btn-search {\r\n margin-left: 20px;\r\n }\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n &.navbar.truot {\r\n & .form-search {\r\n transform: translate(-56%, 0);\r\n max-width: 580px;\r\n }\r\n }\r\n & .mid-menu {\r\n & .another {\r\n & .datefromto-dropdown-menu {\r\n left: calc(-50% + 60px) !important;\r\n top: 10px !important;\r\n }\r\n }\r\n }\r\n &.navbar.truot {\r\n & .mid-menu {\r\n & .another {\r\n & .datefromto-dropdown-menu {\r\n left: calc(-50% - 45px) !important;\r\n top: 10px !important;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n @media screen and (min-width: 1011px) and (max-width: 1099px) {\r\n & .wrap-header {\r\n width: calc(100vw - 20px);\r\n }\r\n & .only-desktop {\r\n & .wpfillter {\r\n & .container {\r\n width: calc(100vw - 20px);\r\n }\r\n }\r\n }\r\n }\r\n @media screen and (min-width: 1100px) and (max-width: 1299px) {\r\n & .only-desktop {\r\n max-width: 90%;\r\n margin: 0 auto;\r\n & .wrap-switch {\r\n min-width: 216px;\r\n }\r\n & .wpfillter {\r\n & .container {\r\n width: 100%;\r\n }\r\n }\r\n }\r\n }\r\n @media (max-width: ${(props: any) => `${props.mobileWidth}px`}) {\r\n & .only-desktop {\r\n display: none;\r\n }\r\n }\r\n`\r\nconst WrapMobileView = styled.nav`\r\n background-color: #fff;\r\n box-shadow: 0px 0px 4px #888;\r\n & .navavatar {\r\n padding: 5px 15px;\r\n padding-right: 5px !important;\r\n display: flex;\r\n align-items: center;\r\n & .arvartimg2 {\r\n border-radius: 50%;\r\n max-width: 30px;\r\n width: 30px;\r\n height: 30px;\r\n max-height: 30px;\r\n }\r\n & .wp-icobar {\r\n padding-top: 0px !important;\r\n margin-right: 5px;\r\n }\r\n }\r\n // & .btn-filter {\r\n // float: right;\r\n // margin: 5px 15px 0;\r\n // color: #222;\r\n // cursor: pointer;\r\n // }\r\n & ul.dropdown-menu {\r\n padding-top: 0;\r\n }\r\n @media (max-width: 767px) {\r\n &.navbar-v2-mobile {\r\n z-index: 999;\r\n }\r\n }\r\n @media (max-width: 1010px) {\r\n &.navbar {\r\n display: unset !important;\r\n }\r\n &.navbar-v2-mobile {\r\n padding-top: 0;\r\n padding-bottom: 0;\r\n }\r\n & .navbar-header {\r\n min-width: 100%;\r\n margin-left: -16px;\r\n margin-right: -16px;\r\n }\r\n }\r\n`\r\nexport default connector(MyUIHeader)\r\n","import React, { useEffect, useRef, useState } from \"react\"\r\nimport { HAuth, HFormat, HUtils } from \"src/core/helpers\"\r\nimport {\r\n MyForm,\r\n MyIcon,\r\n MyModal,\r\n MyUI,\r\n Popover,\r\n Tooltip,\r\n} from \"src/core/components\"\r\nimport { rentalTypes } from \"src/modules/app_sigo/constants\"\r\nimport { categoryFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport ICVehicleType from \"src/modules/app_sigo/assets/imgs/ic-vehicle-type.png\"\r\nimport ICVehicleMaket from \"src/modules/app_sigo/assets/imgs/ic-vehicle-make.png\"\r\nimport dfLogo from \"src/modules/app_sigo/images/logo-sigo.png\"\r\nimport styled from \"styled-components\"\r\nimport { showAlert } from \"src/modules/app_sigo/helpers/ui\"\r\nimport { Button, FormGroup, Input, Label } from \"reactstrap\"\r\nimport { FaChevronDown } from \"react-icons/fa\"\r\nimport classNames from \"classnames\"\r\nimport { HCF } from \"@macashipo/mlib\"\r\n\r\nconst MyUIHeader = props => {\r\n const { data, fnList, arrayTypeFields, config } = props\r\n const [myFilter, setMyFilter] = useState(data)\r\n const logo = HAuth.getUserLogoApp() || dfLogo //\"/config/logo.png\"\r\n const [isMobileView, setIsMobileView] = useState(false)\r\n const [isShowAmount, setIsShowAmount] = useState(\r\n config?.defaultShowAmount || false\r\n )\r\n const refTopForm = useRef(null)\r\n useEffect(() => {\r\n setMyFilter(data)\r\n }, [data])\r\n useEffect(() => {\r\n const ro = new ResizeObserver((entries, observer) => {\r\n for (const entry of entries) {\r\n const { left, top, width, height } = entry.contentRect\r\n if (entry.target == document.body) {\r\n if (width <= 768) {\r\n if (isMobileView === false) {\r\n console.log(\r\n `RO Mobile Element's size: ${width}px x ${height}px`,\r\n isMobileView\r\n )\r\n }\r\n setIsMobileView(true)\r\n } else {\r\n setIsMobileView(false)\r\n }\r\n }\r\n }\r\n })\r\n ro.observe(document.body)\r\n }, [])\r\n\r\n const configFormFilter = {\r\n defaultValues: data,\r\n controls: [\r\n // {\r\n // label: \"Địa điểm\",\r\n // fieldName: categoryFields.fAddress,\r\n // type: \"input_address\",\r\n // more: {\r\n // classNameGroup: \"col-md-4 col-sm-12\",\r\n // morePropsInputAddress: {\r\n // mappingFields: {\r\n // fieldAddress: categoryFields.fAddress,\r\n // },\r\n // props4Search: {\r\n // configSelect: {\r\n // placeholder: \"Bạn đặt xe ở … \",\r\n // },\r\n // },\r\n // },\r\n // },\r\n // },\r\n // {\r\n // label: \"Bắt đầu\",\r\n // fieldName: categoryFields.fFromDate,\r\n // type: \"input_datetime\",\r\n // more: {\r\n // classNameGroup: \"col-md-4 col-sm-12\",\r\n // configDate: {\r\n // minDate: new Date(),\r\n // placeholderDate: \"Chọn ngày\",\r\n // },\r\n // configTime: {\r\n // placeholderTime: \"Chọn giờ\",\r\n // },\r\n // },\r\n // },\r\n // {\r\n // label: \"Kết thúc\",\r\n // fieldName: categoryFields.fToDate,\r\n // type: \"input_datetime\",\r\n // more: {\r\n // classNameGroup: \"col-md-4 col-sm-12\",\r\n // configDate: {\r\n // minDate: new Date(),\r\n // placeholderDate: \"Chọn ngày\",\r\n // },\r\n // configTime: {\r\n // placeholderTime: \"Chọn giờ\",\r\n // },\r\n // },\r\n // },\r\n ],\r\n }\r\n const getFilterList = () => {\r\n const sourceList = fnList?.getSourceList && fnList.getSourceList()\r\n const filterList = [\r\n {\r\n title: (\r\n \r\n Loại xe\r\n \r\n \r\n ),\r\n checkShow:\r\n sourceList &&\r\n sourceList[\"VehicleTypeSubList\"] &&\r\n sourceList[\"VehicleTypeSubList\"].length > 0,\r\n icon: (\r\n \r\n ),\r\n actionType: \"modal\",\r\n configForm: {\r\n defaultValues: myFilter,\r\n controls: [\r\n {\r\n fieldName: categoryFields.fVehicleTypeSubIds,\r\n type: \"select_custom\",\r\n more: {\r\n optionKey: \"VehicleTypeSubList\",\r\n multi: true,\r\n classNameOption: \"option-vehicle-type\",\r\n classNameWrap: \"wrap-vehicles-type\",\r\n emptyMsg: (\r\n
Không có loại xe nào!
\r\n ),\r\n },\r\n },\r\n ],\r\n },\r\n configModal: {\r\n title: \"Chọn loại xe\",\r\n showHeaderClose: false,\r\n showFooter: true,\r\n showFooterClose: false,\r\n showFooterOK:\r\n sourceList &&\r\n sourceList[\"VehicleTypeSubList\"] &&\r\n sourceList[\"VehicleTypeSubList\"].length > 0\r\n ? true\r\n : false,\r\n titleBtnOK: \"Áp dụng\",\r\n modalClassName: \"default footer-btn-ok-full modal-filter\",\r\n size: \"lg\",\r\n },\r\n },\r\n {\r\n title: (\r\n \r\n Hãng xe\r\n \r\n \r\n ),\r\n checkShow:\r\n sourceList &&\r\n sourceList[\"VehicleModelList\"] &&\r\n sourceList[\"VehicleModelList\"].length > 0,\r\n subTitle: ` `,\r\n icon: (\r\n \r\n ),\r\n actionType: \"modal\",\r\n classNameWrapForm:\r\n \"mCustomScrollBox mCSB_inside max-height-440px overflow-auto\",\r\n classNameForm: \"mCSB_container position-relative left-0\",\r\n configForm: {\r\n defaultValues: myFilter,\r\n controls: [\r\n {\r\n fieldName: categoryFields.fVehicleMakeIds,\r\n type: \"check_with_icon\",\r\n more: {\r\n optionKey: \"VehicleMakeList\",\r\n multi: false,\r\n children: {\r\n title: \"Dòng xe\",\r\n fieldName: categoryFields.fVehicleModelIds,\r\n optionKey: \"VehicleModelList\",\r\n },\r\n emptyMsg: (\r\n
Không có hãng xe nào!
\r\n ),\r\n },\r\n },\r\n ],\r\n },\r\n configModal: {\r\n title: \"Chọn hãng xe\",\r\n showHeaderClose: false,\r\n showFooter: true,\r\n showFooterClose: false,\r\n showFooterOK:\r\n sourceList &&\r\n sourceList[\"VehicleModelList\"] &&\r\n sourceList[\"VehicleModelList\"].length > 0\r\n ? true\r\n : false,\r\n titleBtnOK: \"Áp dụng\",\r\n modalClassName:\r\n \"default footer-btn-ok-full modal-filter scrollbar-right\",\r\n size: \"lg\",\r\n },\r\n },\r\n {\r\n title: (\r\n \r\n Bộ lọc\r\n \r\n \r\n ),\r\n icon: (\r\n \r\n ),\r\n actionType: \"modal\",\r\n classNameWrapForm:\r\n \"mCustomScrollBox mCS-light mCSB_vertical mCSB_inside max-height-category overflow-auto filter-category\",\r\n classNameForm: \"mCSB_container position-relative left-0\",\r\n configForm: {\r\n defaultValues: myFilter,\r\n controls: [\r\n {\r\n label: \"Sắp xếp kết quả\",\r\n fieldName: categoryFields.fOrderBy,\r\n type: \"list_radio\",\r\n more: {\r\n optionKey: \"OrderByList\",\r\n multi: false,\r\n className: \"wrap-order-by\",\r\n },\r\n },\r\n {\r\n label: \"Khoảng giá\",\r\n fieldName: categoryFields.fMaxRentalPrice,\r\n type: \"input_dual_range\",\r\n more: {\r\n subLabel: \"Giá thuê theo ngày chưa bao gồm phí và thuế\",\r\n optionKey: \"RentalPrice\",\r\n morePropsRange: {\r\n fields: {\r\n min: categoryFields.fMinRentalPrice,\r\n max: categoryFields.fMaxRentalPrice,\r\n },\r\n titleFrom: \"Giá thấp nhất\",\r\n titleTo: \"Giá cao nhất\",\r\n splitStep: 20,\r\n getLabelFrom: val => {\r\n return (\r\n <>\r\n \r\n {HFormat.format(val, {\r\n type: \"money_vnd\",\r\n })}\r\n đ\r\n \r\n \r\n )\r\n },\r\n getLabelTo: val => {\r\n return (\r\n <>\r\n \r\n {HFormat.format(val, {\r\n type: \"money_vnd\",\r\n })}\r\n đ\r\n \r\n \r\n )\r\n },\r\n getMin: () =>\r\n HUtils.get(sourceList, `RentalPrice.MinValue.Value`),\r\n getMax: () =>\r\n HUtils.get(sourceList, `RentalPrice.MaxValue.Value`),\r\n getStep: () => 100000,\r\n },\r\n },\r\n },\r\n {\r\n label: \"Năm sản xuất của xe\",\r\n fieldName: categoryFields.fVehicleMaxYearModel,\r\n type: \"input_dual_range\",\r\n more: {\r\n optionKey: \"CreatedYear\",\r\n morePropsRange: {\r\n fields: {\r\n min: categoryFields.fVehicleMinYearModel,\r\n max: categoryFields.fVehicleMaxYearModel,\r\n },\r\n titleFrom: \"Tối thiểu\",\r\n titleTo: \"Tối đa\",\r\n splitStep: 20,\r\n getMin: () =>\r\n HUtils.get(sourceList, `CreatedYear.MinValue.Value`),\r\n getMax: () =>\r\n HUtils.get(sourceList, `CreatedYear.MaxValue.Value`),\r\n getStep: () => 1,\r\n },\r\n },\r\n },\r\n {\r\n label: \"Màu Sắc\",\r\n fieldName: categoryFields.fVehicleColorIds,\r\n type: \"select_custom\",\r\n more: {\r\n optionKey: \"VehicleColorList\",\r\n classNameWrap: \"wrap-vehicle-color\",\r\n useCollapse: true,\r\n minItemCollapse: 8,\r\n multi: true,\r\n },\r\n },\r\n {\r\n label: \"Loại nhiên liệu\",\r\n fieldName: categoryFields.fFuelTypeIds,\r\n type: \"select_custom\",\r\n more: {\r\n optionKey: \"FuelTypeList\",\r\n classNameWrap: \"wrap-fuel-type\",\r\n multi: true,\r\n },\r\n },\r\n {\r\n label: \"Tiện ích của xe\",\r\n fieldName: categoryFields.fFeatureIds,\r\n type: \"list_checkbox\",\r\n more: {\r\n optionKey: \"FeatureList\",\r\n multi: true,\r\n classNameWrap: \"wrap-feature\",\r\n useCollapse: true,\r\n minItemCollapse: 8,\r\n classNameGroup: \"control-lastest\",\r\n },\r\n },\r\n ],\r\n },\r\n configModal: {\r\n title: \"Bộ lọc tìm kiếm\",\r\n showFooter: true,\r\n showFooterClose: true,\r\n showFooterOK: true,\r\n titleBtnClose: \"Xóa tất cả\",\r\n titleBtnOK: \"Áp dụng\",\r\n modalClassName:\r\n \"default footer-space-between modal-filter scrollbar-right filter-header-category\",\r\n classNameBody: \"mCustomScrollbar _mCS_1\",\r\n },\r\n },\r\n ]\r\n return filterList\r\n }\r\n const getDefaultActiveResetFilterBtn = () => {\r\n if (fnList && fnList?.getDefaultActiveResetFilterBtn) {\r\n return fnList?.getDefaultActiveResetFilterBtn()\r\n }\r\n return false\r\n }\r\n const onOpenFilter = () => {\r\n return MyModal.showFromMyUI(\r\n {\r\n type: \"sg_filter_category\",\r\n data: data,\r\n configFormFilter: configFormFilter,\r\n configFilterList: getFilterList(),\r\n fnList: {\r\n ...fnList,\r\n onCloseModal: () => {\r\n MyModal.hideModalMyUI()\r\n },\r\n },\r\n arrayTypeFields: arrayTypeFields,\r\n },\r\n {\r\n title: \"Bộ lọc\",\r\n size: \"lg\",\r\n modalClassName: \"default modal-header-left\",\r\n }\r\n )\r\n }\r\n const renderForm = () => {\r\n return (\r\n {\r\n const { fieldName, newValue } = opts\r\n let newData: any = JSON.parse(JSON.stringify(data))\r\n newData[fieldName] = newValue\r\n if (newValue !== data[fieldName]) {\r\n if (\r\n fieldName === categoryFields.fFromDate &&\r\n newData[categoryFields.fFromDate] >=\r\n newData[categoryFields.fToDate]\r\n ) {\r\n let _newToDate = newData[categoryFields.fFromDate] + 86400000\r\n newData[categoryFields.fToDate] = _newToDate\r\n if (\r\n refTopForm?.current?.fnListFromExtControl?.[\r\n categoryFields.fToDate\r\n ]\r\n ) {\r\n refTopForm.current.fnListFromExtControl[\r\n categoryFields.fToDate\r\n ].updateValue(_newToDate)\r\n }\r\n if (fnList?.onFilter) {\r\n fnList.onFilter({\r\n [fieldName]: newValue,\r\n [categoryFields.fToDate]: _newToDate,\r\n })\r\n }\r\n } else if (\r\n fieldName === categoryFields.fToDate &&\r\n newData[categoryFields.fToDate] <=\r\n newData[categoryFields.fFromDate]\r\n ) {\r\n if (refTopForm?.current?.fnListFromExtControl?.[fieldName]) {\r\n refTopForm.current.fnListFromExtControl[\r\n fieldName\r\n ].updateValue(data[fieldName])\r\n }\r\n showAlert({\r\n component: (\r\n \r\n ),\r\n })\r\n } else {\r\n if (fnList?.onFilter) {\r\n fnList.onFilter({ [fieldName]: newValue })\r\n }\r\n }\r\n }\r\n },\r\n afterUpdateMultiValues: obj => {\r\n const { values } = obj\r\n let objUpdate: any = {}\r\n objUpdate = { ...values }\r\n if (values?.[`${categoryFields.fAddress}_MoreInfo`]) {\r\n const location = HUtils.get(\r\n values,\r\n `${categoryFields.fAddress}_MoreInfo[0].geometry.location`\r\n )\r\n if (location?.lat) {\r\n objUpdate[categoryFields.fLatitude] = location.lat()\r\n }\r\n if (location?.lng) {\r\n objUpdate[categoryFields.fLongitude] = location.lng()\r\n }\r\n if (fnList?.onFilter) {\r\n fnList.onFilter(objUpdate)\r\n }\r\n }\r\n },\r\n }}\r\n renderFooter={() => {\r\n return <>\r\n }}\r\n />\r\n )\r\n }\r\n\r\n const renderTop = () => {\r\n return (\r\n \r\n )\r\n }\r\n const renderBottom = () => {\r\n const filterList = getFilterList()\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {filterList.slice(0, 2).map((v, i) => {\r\n // if (!v.checkShow) {\r\n // return <>\r\n // }\r\n return (\r\n
\r\n {/*
Tùy chọn kết quả
*/}\r\n \r\n
\r\n )\r\n })}\r\n
\r\n
\r\n {\r\n fnList?.onFilter &&\r\n fnList.onFilter(obj, { isFilterMore: true })\r\n },\r\n }}\r\n />\r\n
\r\n
\r\n {filterList.slice(2, 99).map((v, i) => {\r\n return (\r\n
\r\n {v.subTitle && (\r\n
{v.subTitle}
\r\n )}\r\n {\r\n fnList?.onFilter &&\r\n fnList.onFilter(obj, { isFilterMore: true })\r\n },\r\n }}\r\n />\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n {\r\n let _value = !isShowAmount\r\n setIsShowAmount(_value)\r\n fnList?.onSetShowAmount && fnList?.onSetShowAmount(_value)\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n const renderOverlay = () => {\r\n return
\r\n }\r\n return (\r\n \r\n {/* {renderTop()} */}\r\n {renderBottom()}\r\n {renderOverlay()}\r\n \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n background-color: #fff;\r\n & .overlay {\r\n display: none;\r\n }\r\n &.show-overlay-filter {\r\n // position: relative;\r\n & .overlay {\r\n background: var(--color-text-000);\r\n opacity: 0.4;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n display: block;\r\n }\r\n }\r\n & .label-text {\r\n color: #555;\r\n font-size: 16px;\r\n cursor: default;\r\n }\r\n & .flex-1 {\r\n flex: 1 !important;\r\n }\r\n & .ic-btn {\r\n height: 16px;\r\n margin-right: 12px;\r\n }\r\n & .filter-top {\r\n display: flex;\r\n align-items: center;\r\n & > .form-group {\r\n display: flex;\r\n align-items: center;\r\n & label {\r\n line-height: 30px;\r\n color: var(--mau1);\r\n margin: 0 !important;\r\n }\r\n & > div:nth-child(2) {\r\n flex: 1;\r\n margin-left: 0.25rem;\r\n }\r\n & .react-datepicker-wrapper {\r\n width: 90px !important;\r\n }\r\n }\r\n & .form-control {\r\n padding-bottom: 0px;\r\n }\r\n & .mc_input_address {\r\n .clear > button {\r\n height: 30px;\r\n }\r\n }\r\n }\r\n & .wrap-bottom-filter {\r\n & .subtitle {\r\n text-wrap: nowrap;\r\n font-size: 12px;\r\n color: #898989;\r\n width: 0;\r\n }\r\n & .wrap-filter-left {\r\n align-items: stretch;\r\n & .wrap-button-form {\r\n align-self: stretch;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: end;\r\n }\r\n &.wrap-filter-type {\r\n // border-right: 1px solid #dedede;\r\n // margin-right: 10px;\r\n & .subtitle {\r\n display: none;\r\n }\r\n & .wrap-button-form:first-child .subtitle {\r\n display: block;\r\n }\r\n }\r\n }\r\n }\r\n & .btn-default {\r\n color: var(--color-text-595959);\r\n &:active,\r\n &:focus {\r\n background: transparent !important;\r\n }\r\n &:hover,\r\n &:active,\r\n &:focus {\r\n color: var(--color-text-595959);\r\n }\r\n &:hover,\r\n &.btn-active {\r\n background-color: var(--color-bg-blue-light) !important;\r\n border: 1px solid var(--color-border-blue-light) !important;\r\n }\r\n }\r\n & .wrap-switch {\r\n display: flex;\r\n align-items: center;\r\n & .form-group {\r\n margin-bottom: 0;\r\n border: 1px solid #c8c8c8;\r\n border-radius: 20px;\r\n padding: 3px 5px;\r\n font-size: 14px;\r\n min-height: 39px;\r\n & .form-switch {\r\n }\r\n & .form-check {\r\n padding-left: 0;\r\n margin-bottom: 0;\r\n display: flex;\r\n align-items: center;\r\n label {\r\n margin: 0 0.5rem 0 0.25rem;\r\n color: var(--color-text-595959);\r\n font-weight: 500;\r\n }\r\n label::before {\r\n display: none;\r\n }\r\n input {\r\n margin-bottom: 0.23rem;\r\n cursor: pointer;\r\n box-shadow: none;\r\n }\r\n input[type=\"checkbox\"] {\r\n display: unset;\r\n }\r\n & .form-check-input {\r\n width: 36px;\r\n height: 23px;\r\n margin-left: 0;\r\n float: right;\r\n background-color: var(--color-text-d9d9d9);\r\n border-color: var(--color-text-d9d9d9);\r\n background-image: url(\"data:image/svg+xml,%3Csvg stroke='currentColor' fill='%23fff' stroke-width='0' viewBox='0 0 512 512' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z'%3E%3C/path%3E%3C/svg%3E\");\r\n }\r\n & .form-check-input:checked {\r\n background-color: var(--color-text-000);\r\n border-color: var(--color-text-000);\r\n background-image: url(\"data:image/svg+xml,%3Csvg stroke='currentColor' fill='%23fff' stroke-width='0' viewBox='0 0 512 512' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z'%3E%3C/path%3E%3C/svg%3E\");\r\n }\r\n }\r\n }\r\n }\r\n @media (min-width: 1200px) {\r\n &.show-overlay-filter {\r\n position: relative;\r\n margin-bottom: -10px;\r\n padding-bottom: 10px;\r\n & .overlay {\r\n background: var(--color-text-000);\r\n opacity: 0.4;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n display: block;\r\n }\r\n }\r\n }\r\n`\r\nexport default MyUIHeader\r\n","import React, { useRef, useState } from \"react\"\r\nimport { MyForm, MyModal } from \"src/core/components\"\r\nimport { Dropdown, DropdownMenu, DropdownToggle } from \"reactstrap\"\r\nimport styled from \"styled-components\"\r\nimport { isArray } from \"src/core/helpers/utils\"\r\nimport Skeleton from \"react-loading-skeleton\"\r\n\r\ninterface IProps {\r\n title: string\r\n icon?: any\r\n actionType: string\r\n configForm: any\r\n fnList: any\r\n more?: any\r\n configModal?: any\r\n classNameForm?: string\r\n classNameWrapForm?: string\r\n isShowSkeleton?: any\r\n}\r\nconst ModalForm = props => {\r\n const {\r\n refMyForm,\r\n classNameWrapForm,\r\n classNameForm,\r\n configForm,\r\n config,\r\n fnList,\r\n } = props\r\n return (\r\n \r\n {\r\n if (config?.showFooter) {\r\n return (\r\n
\r\n {\r\n if (fnList?.onSubmitForm) {\r\n fnList.onSubmitForm()\r\n }\r\n }}\r\n >\r\n Áp dụng\r\n \r\n
\r\n )\r\n }\r\n return <>\r\n }}\r\n />\r\n
\r\n )\r\n}\r\nconst MUIButtonForm = (props: IProps) => {\r\n const {\r\n title,\r\n icon,\r\n classNameWrapForm,\r\n classNameForm,\r\n actionType,\r\n configForm,\r\n fnList,\r\n configModal,\r\n } = props\r\n\r\n const getActiveButton = () => {\r\n const { defaultValues, controls } = configForm || {}\r\n const result = controls?.findIndex(v => {\r\n if (\r\n isArray(defaultValues[v.fieldName]) &&\r\n !defaultValues[v.fieldName]?.length\r\n ) {\r\n return false\r\n }\r\n return defaultValues[v.fieldName]\r\n })\r\n if (result >= 0) {\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n const [open, setOpen] = useState(false)\r\n const refMyForm = useRef(null)\r\n const isActive = getActiveButton()\r\n if (actionType === \"dropdown\") {\r\n const toggle = () => {\r\n setOpen(prevState => !prevState)\r\n }\r\n return (\r\n \r\n \r\n \r\n {title} \r\n \r\n \r\n {\r\n return (\r\n
\r\n {\r\n if (fnList?.onFilter && refMyForm?.current) {\r\n fnList.onFilter({\r\n ...refMyForm.current.getCurrentValues(),\r\n })\r\n toggle()\r\n }\r\n }}\r\n >\r\n Áp dụng\r\n \r\n
\r\n )\r\n }}\r\n />\r\n
\r\n \r\n
\r\n )\r\n }\r\n return (\r\n \r\n {\r\n MyModal.showFromComponent(\r\n {\r\n if (fnList?.onFilter && refMyForm?.current) {\r\n fnList.onFilter({\r\n ...refMyForm.current.getCurrentValues(),\r\n })\r\n MyModal.hideModalComponent()\r\n }\r\n },\r\n }}\r\n config={{\r\n showFooter: !configModal?.showFooter,\r\n }}\r\n />,\r\n {\r\n size: \" \",\r\n modalClassName: \"default\",\r\n onClickClose: () => {\r\n if (refMyForm?.current) {\r\n const controls = configForm?.controls\r\n if (controls?.length > 0) {\r\n controls.forEach(v => {\r\n if (\r\n v?.fieldName &&\r\n refMyForm.current?.fnListFromExtControl\r\n ) {\r\n refMyForm.current.fnListFromExtControl[\r\n v.fieldName\r\n ].updateValue(null)\r\n }\r\n })\r\n refMyForm.current.forceUpdate()\r\n }\r\n }\r\n },\r\n onClickOK: () => {\r\n if (fnList?.onFilter && refMyForm?.current) {\r\n fnList.onFilter({\r\n ...refMyForm.current.getCurrentValues(),\r\n })\r\n MyModal.hideModalComponent()\r\n }\r\n },\r\n ...configModal,\r\n }\r\n )\r\n }}\r\n >\r\n {icon}\r\n {title}\r\n \r\n \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n width: fit-content;\r\n & .dropdown-toggle,\r\n & .modal-toggle {\r\n &:focus,\r\n &:active {\r\n box-shadow: none !important;\r\n }\r\n &:after {\r\n display: none;\r\n }\r\n }\r\n & .dropdown-menu {\r\n &.show {\r\n top: unset !important;\r\n transform: none !important;\r\n width: max-content;\r\n }\r\n }\r\n & .btn-default > span:first-child {\r\n display: none;\r\n }\r\n`\r\nconst WrapModalForm = styled.div`\r\n & label {\r\n font-weight: 700;\r\n }\r\n`\r\nexport default MUIButtonForm\r\n","import React, { useEffect, useState } from \"react\"\r\nimport classnames from \"classnames\"\r\nimport styled from \"styled-components\"\r\nimport MyLoadingPage from \"../../MyLoading\"\r\nimport Skeleton from \"react-loading-skeleton\"\r\n\r\ninterface IProps {\r\n className?: string\r\n classNameEmpty?: string\r\n isLoading?: boolean\r\n keepDataLoading?: boolean\r\n isEmpty?: boolean\r\n isError?: boolean\r\n msgEmpty?: string\r\n msgError?: string\r\n children?: any\r\n renderLoadMore?: any\r\n customLoading?: any\r\n moreConfig?: any\r\n}\r\nconst MyUIWLoadingSkeleton = (props: IProps) => {\r\n const {\r\n className,\r\n classNameEmpty,\r\n isLoading,\r\n keepDataLoading,\r\n isEmpty,\r\n isError,\r\n msgEmpty,\r\n msgError,\r\n children,\r\n renderLoadMore,\r\n customLoading,\r\n moreConfig,\r\n } = props\r\n const { isSearching, showError } = moreConfig || {}\r\n const renderLoading = () => {\r\n if (isLoading) {\r\n if (customLoading) {\r\n return customLoading()\r\n }\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n }\r\n const renderEmpty = () => {\r\n if (!isLoading && isEmpty && msgEmpty) {\r\n return (\r\n {msgEmpty || \"Không có dữ liệu\"}\r\n )\r\n }\r\n }\r\n const renderError = () => {\r\n if (!isLoading && isError && showError) {\r\n return Có lỗi xảy ra! Vui lòng thử lại.\r\n }\r\n }\r\n const renderMain = () => {\r\n if (!isLoading || keepDataLoading) {\r\n return children\r\n }\r\n }\r\n\r\n return (\r\n \r\n {renderMain()}\r\n {renderEmpty()}\r\n {renderError()}\r\n {renderLoading()}\r\n \r\n )\r\n}\r\nexport const Wrap = styled.div``\r\nexport const Message = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n margin-top: 20px;\r\n`\r\nexport const Loading = styled.div`\r\n min-height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n`\r\nexport default MyUIWLoadingSkeleton\r\n","import React, { useEffect, useState } from \"react\"\r\nimport classnames from \"classnames\"\r\nimport { HLink, MyCard, MyUI } from \"@macashipo/mlib\"\r\nimport OwlCarousel from \"react-owl-carousel2\"\r\nimport styled from \"styled-components\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport classNames from \"classnames\"\r\n\r\nconst configKeySlide = {\r\n slide_options: \"slide_options\",\r\n url: \"url\",\r\n always_show_nav: \"always_show_nav\",\r\n only_image: \"only_image\",\r\n default_image: \"default_image\",\r\n slide_setting: \"slide_setting\",\r\n use_data: \"use_data\",\r\n}\r\n\r\nconst MyUISlideCard = props => {\r\n const { data, className, config, fnList, classNameWrap, moreInfo } = props\r\n let slideImages = data?.[homeSlidesFields.fSlideImages]\r\n if (config?.[configKeySlide.use_data]) {\r\n slideImages = data\r\n }\r\n const configOptions = config?.[configKeySlide.slide_options] || {}\r\n const slideSetting = config?.[configKeySlide.slide_setting] || {}\r\n const [screenWidth, setScreenWidth] = useState(0)\r\n const options = {\r\n items: 3,\r\n nav: true,\r\n rewind: true,\r\n autoplay: false,\r\n dots: false,\r\n loop: false,\r\n navText: [\r\n \"\",\r\n \"\",\r\n ],\r\n ...configOptions,\r\n }\r\n const alwaysShowNav =\r\n config?.[configKeySlide.always_show_nav] && options?.loop\r\n\r\n const events = {\r\n onDragged: function (event) {},\r\n onChanged: function (event) {},\r\n }\r\n useEffect(() => {\r\n const ro = new ResizeObserver((entries, observer) => {\r\n for (const entry of entries) {\r\n const { left, top, width, height } = entry.contentRect\r\n if (entry.target == document.body) {\r\n setScreenWidth(width)\r\n }\r\n }\r\n })\r\n ro.observe(document.body)\r\n // eslint-disable-next-line\r\n }, [])\r\n const getIsCenter = () => {\r\n if (slideSetting?.needCenter) {\r\n const responsive = configOptions?.responsive || {}\r\n const keys = Object.keys(responsive)\r\n let config: any = {}\r\n let item = 0\r\n if (keys && keys?.length > 0) {\r\n keys.every((k, i) => {\r\n let configScreen = Number(k)\r\n let nextConfigScreen = -1\r\n if (i + 1 < keys?.length) {\r\n nextConfigScreen = Number(keys[i + 1])\r\n }\r\n if (\r\n screenWidth >= configScreen &&\r\n ((nextConfigScreen > -1 && screenWidth < nextConfigScreen) ||\r\n nextConfigScreen === -1)\r\n ) {\r\n config = responsive[k]\r\n return false\r\n }\r\n return true\r\n })\r\n if (config?.items) {\r\n item = config?.items\r\n }\r\n } else {\r\n if (configOptions?.items) {\r\n item = configOptions?.items\r\n }\r\n }\r\n if (item > 0 && item > slideImages?.length && !options?.loop) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n const renderTitle = () => {\r\n const _url = moreInfo?.[configKeySlide.url]\r\n const title = data?.[homeSlidesFields.fTitle]\r\n const description = data?.[homeSlidesFields.fDescription] || \"\"\r\n const config4SEO = config?.config4SEO || {\r\n useHeading: true,\r\n headingTag: \"h2\",\r\n }\r\n if (title) {\r\n return (\r\n \r\n {title && (\r\n // \r\n \r\n )}\r\n {description && (\r\n \r\n )}\r\n {/* {_url && (\r\n \r\n Xem thêm\r\n \r\n )} */}\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n const renderShowMore = () => {\r\n const btnConfig = slideSetting?.btnShowMoreConfig || {}\r\n const url = btnConfig?.url ?? \"\"\r\n\r\n if (btnConfig?.show == true && url) {\r\n return (\r\n \r\n
\r\n \r\n {btnConfig?.name ?? \"Xem thêm\"}\r\n \r\n
\r\n
\r\n )\r\n }\r\n return <>\r\n }\r\n if (config?.[configKeySlide.only_image]) {\r\n if (slideImages && slideImages?.length > 0) {\r\n if (slideImages?.length > 1) {\r\n return (\r\n \r\n {slideImages && (\r\n \r\n {slideImages.map((v, i) => {\r\n return (\r\n {\r\n let _url = data?.[\"Url\"]\r\n let _target = data?.[\"UrlTarget\"] || \"self\"\r\n if (_url) {\r\n HLink.openUrl(_url, _target)\r\n }\r\n }}\r\n >\r\n {configOptions.lazyLoad ? (\r\n \"\"\r\n ) : (\r\n \"\"\r\n )}\r\n \r\n )\r\n })}\r\n \r\n )}\r\n \r\n )\r\n }\r\n return (\r\n
\r\n \"\"\r\n
\r\n )\r\n }\r\n return (\r\n
\r\n \"\"\r\n
\r\n )\r\n } else if (slideImages?.length > 0 && config?.cardType) {\r\n const _url = moreInfo?.[configKeySlide.url]\r\n const _configBtnNavigation = slideSetting?.configBtnNavigation || {}\r\n const _configDots = slideSetting?.configDots || {}\r\n const classNameSlide = slideSetting?.classNameSlide || \"\"\r\n const isCenter = getIsCenter()\r\n return (\r\n \r\n {renderTitle()}\r\n \r\n \r\n {slideImages.map((v, i) => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n })}\r\n \r\n \r\n {_url && (\r\n \r\n )}\r\n {renderShowMore()}\r\n \r\n )\r\n }\r\n return <>\r\n}\r\nconst WrapTitle = styled.div`\r\n &.title-home {\r\n margin-bottom: 30px;\r\n flex-direction: column;\r\n align-items: center;\r\n }\r\n & .wrap-title {\r\n align-items: center;\r\n justify-content: space-between;\r\n }\r\n & .maintxt {\r\n font-size: 36px;\r\n font-weight: 700;\r\n color: var(--color-text-000);\r\n text-align: center;\r\n line-height: 49px;\r\n margin-bottom: 0;\r\n max-width: 80%;\r\n }\r\n & .description {\r\n color: var(--color-text-000);\r\n font-size: 16px;\r\n text-align: center;\r\n padding-top: 15px;\r\n max-width: 80%;\r\n }\r\n @media (max-width: 1199px) {\r\n & .maintxt {\r\n max-width: 90%;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .maintxt {\r\n font-size: 30px;\r\n line-height: 39px;\r\n max-width: 100%;\r\n }\r\n & .description {\r\n padding-top: 10px;\r\n max-width: 100%;\r\n }\r\n }\r\n`\r\nconst Wrap: any = styled.div`\r\n padding: 0;\r\n .owl-carousel,\r\n .owl-carousel .owl-item {\r\n -webkit-tap-highlight-color: transparent;\r\n position: relative;\r\n }\r\n\r\n .owl-carousel {\r\n display: none;\r\n width: 100%;\r\n z-index: 1;\r\n }\r\n\r\n .owl-carousel .owl-stage {\r\n position: relative;\r\n -ms-touch-action: pan-Y;\r\n -moz-backface-visibility: hidden;\r\n }\r\n\r\n .owl-carousel .owl-stage:after {\r\n content: \".\";\r\n display: block;\r\n clear: both;\r\n visibility: hidden;\r\n line-height: 0;\r\n height: 0;\r\n }\r\n\r\n .owl-carousel .owl-stage-outer {\r\n position: relative;\r\n overflow: hidden;\r\n -webkit-transform: translate3d(0, 0, 0);\r\n }\r\n\r\n .owl-carousel .owl-item,\r\n .owl-carousel .owl-wrapper {\r\n -webkit-backface-visibility: hidden;\r\n -moz-backface-visibility: hidden;\r\n -ms-backface-visibility: hidden;\r\n -webkit-transform: translate3d(0, 0, 0);\r\n -moz-transform: translate3d(0, 0, 0);\r\n -ms-transform: translate3d(0, 0, 0);\r\n }\r\n\r\n .owl-carousel .owl-item {\r\n min-height: 1px;\r\n float: left;\r\n -webkit-backface-visibility: hidden;\r\n -webkit-touch-callout: none;\r\n }\r\n\r\n .owl-carousel .owl-item img {\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n .owl-carousel .owl-dots.disabled,\r\n .owl-carousel .owl-nav.disabled {\r\n display: none;\r\n }\r\n\r\n .no-js .owl-carousel,\r\n .owl-carousel.owl-loaded {\r\n display: block;\r\n }\r\n\r\n .owl-carousel .owl-dot,\r\n .owl-carousel .owl-nav .owl-next,\r\n .owl-carousel .owl-nav .owl-prev {\r\n cursor: pointer;\r\n cursor: hand;\r\n -webkit-user-select: none;\r\n -khtml-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n }\r\n\r\n .owl-carousel.owl-loading {\r\n opacity: 0;\r\n display: block;\r\n }\r\n\r\n .owl-carousel.owl-hidden {\r\n opacity: 0;\r\n }\r\n\r\n .owl-carousel.owl-refresh .owl-item {\r\n visibility: hidden;\r\n }\r\n\r\n .owl-carousel.owl-drag .owl-item {\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n }\r\n\r\n .owl-carousel.owl-grab {\r\n cursor: move;\r\n cursor: grab;\r\n }\r\n\r\n .owl-carousel.owl-rtl {\r\n direction: rtl;\r\n }\r\n\r\n .owl-carousel.owl-rtl .owl-item {\r\n float: right;\r\n }\r\n\r\n .owl-carousel .animated {\r\n animation-duration: 1s;\r\n animation-fill-mode: both;\r\n }\r\n\r\n .owl-carousel .owl-animated-in {\r\n z-index: 0;\r\n }\r\n\r\n .owl-carousel .owl-animated-out {\r\n z-index: 1;\r\n }\r\n\r\n .owl-carousel .fadeOut {\r\n animation-name: fadeOut;\r\n }\r\n & .owl-dots {\r\n right: unset;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n display: flex;\r\n align-items: center;\r\n max-width: 80px;\r\n overflow: hidden;\r\n bottom: ${(props: any) =>\r\n props?.configDots && props?.configDots?.bottom\r\n ? props?.configDots?.bottom\r\n : \"10px\"};\r\n & .owl-dot {\r\n width: ${(props: any) =>\r\n props?.configDots && props?.configDots?.defaultWidth\r\n ? props?.configDots?.defaultWidth\r\n : \"5px\"};\r\n height: ${(props: any) =>\r\n props?.configDots && props?.configDots?.defaultWidth\r\n ? props?.configDots?.defaultWidth\r\n : \"5px\"};\r\n min-width: ${(props: any) =>\r\n props?.configDots && props?.configDots?.defaultWidth\r\n ? props?.configDots?.defaultWidth\r\n : \"5px\"};\r\n background-color: ${(props: any) =>\r\n props?.configDots && props?.configDots?.defaultColor\r\n ? props?.configDots?.defaultColor\r\n : \"var(--color-text-e1e1e1)\"};\r\n margin-right: ${(props: any) =>\r\n props?.configDots && props?.configDots?.marginRight\r\n ? props?.configDots?.marginRight\r\n : \"5px\"};\r\n }\r\n & .owl-dot.active {\r\n background-color: ${(props: any) =>\r\n props?.configDots && props?.configDots?.activeColor\r\n ? props?.configDots?.activeColor\r\n : \"var(--color-text-fff)\"};\r\n width: ${(props: any) =>\r\n props?.configDots && props?.configDots?.activeWidth\r\n ? props?.configDots?.activeWidth\r\n : \"7px\"};\r\n height: ${(props: any) =>\r\n props?.configDots && props?.configDots?.activeWidth\r\n ? props?.configDots?.activeWidth\r\n : \"7px\"};\r\n min-width: ${(props: any) =>\r\n props?.configDots && props?.configDots?.activeWidth\r\n ? props?.configDots?.activeWidth\r\n : \"7px\"};\r\n }\r\n }\r\n @keyframes fadeOut {\r\n 0% {\r\n opacity: 1;\r\n }\r\n\r\n 100% {\r\n opacity: 0;\r\n }\r\n }\r\n\r\n .owl-height {\r\n transition: height 0.5s ease-in-out;\r\n }\r\n\r\n .owl-carousel .owl-item .owl-lazy {\r\n opacity: 0;\r\n transition: opacity 0.4s ease;\r\n }\r\n\r\n .owl-carousel .owl-item img.owl-lazy {\r\n transform-style: preserve-3d;\r\n }\r\n\r\n .owl-carousel .owl-video-wrapper {\r\n position: relative;\r\n height: 100%;\r\n background: #000;\r\n }\r\n\r\n .owl-carousel .owl-video-play-icon {\r\n position: absolute;\r\n height: 80px;\r\n width: 80px;\r\n left: 50%;\r\n top: 50%;\r\n margin-left: -40px;\r\n margin-top: -40px;\r\n background: url(owl.video.play.png) no-repeat;\r\n cursor: pointer;\r\n z-index: 1;\r\n -webkit-backface-visibility: hidden;\r\n transition: transform 0.1s ease;\r\n }\r\n\r\n .owl-carousel .owl-video-play-icon:hover {\r\n -ms-transform: scale(1.3, 1.3);\r\n transform: scale(1.3, 1.3);\r\n }\r\n\r\n .owl-carousel .owl-video-playing .owl-video-play-icon,\r\n .owl-carousel .owl-video-playing .owl-video-tn {\r\n display: none;\r\n }\r\n\r\n .owl-carousel .owl-video-tn {\r\n opacity: 0;\r\n height: 100%;\r\n background-position: center center;\r\n background-repeat: no-repeat;\r\n background-size: contain;\r\n transition: opacity 0.4s ease;\r\n }\r\n\r\n .owl-carousel .owl-video-frame {\r\n position: relative;\r\n z-index: 1;\r\n height: 100%;\r\n width: 100%;\r\n }\r\n & .custom-nav-position-top {\r\n & .owl-nav {\r\n & .owl-prev,\r\n & .owl-next {\r\n top: ${(props: any) =>\r\n props?.configBtnNavigation && props?.configBtnNavigation?.default\r\n ? props?.configBtnNavigation?.default\r\n : \"calc(50% - 15px)\"};\r\n }\r\n }\r\n }\r\n & .custom-nav-position {\r\n & .owl-nav {\r\n & .owl-prev {\r\n left: ${(props: any) =>\r\n props?.configBtnNavigation && props?.configBtnNavigation?.leftDefault\r\n ? props?.configBtnNavigation?.leftDefault\r\n : \"-15px\"};\r\n }\r\n & .owl-next {\r\n right: ${(props: any) =>\r\n props?.configBtnNavigation && props?.configBtnNavigation?.rightDefault\r\n ? props?.configBtnNavigation?.rightDefault\r\n : \"-15px\"};\r\n }\r\n }\r\n }\r\n & .owl-prev,\r\n & .owl-next {\r\n i {\r\n color: #c5c5c5;\r\n }\r\n }\r\n & .item {\r\n transition: all 0.25s;\r\n // &::before {\r\n // transition: all 0.25s;\r\n // content: \" \";\r\n // position: absolute;\r\n // background-color: var(--color-text-fff);\r\n // top: 0;\r\n // width: 100%;\r\n // height: 100%;\r\n // opacity: 0;\r\n // }\r\n & > div {\r\n width: 100%;\r\n }\r\n }\r\n & .always-show-nav {\r\n .owl-carousel .owl-nav.disabled {\r\n display: block;\r\n opacity: 1;\r\n pointer-events: unset;\r\n touch-action: unset;\r\n }\r\n }\r\n & .always-show-overflow {\r\n & .owl-carousel .owl-stage-outer {\r\n overflow: visible;\r\n }\r\n }\r\n & .always-show-dots {\r\n & .owl-carousel .owl-dots.disabled {\r\n display: block;\r\n }\r\n }\r\n & .wrap-item {\r\n .owl-nav {\r\n opacity: 0;\r\n pointer-events: none;\r\n touch-action: none;\r\n transition: all 0.25s;\r\n visibility: hidden;\r\n }\r\n }\r\n & .wrap-item:hover {\r\n .owl-nav {\r\n display: block;\r\n opacity: 1;\r\n pointer-events: unset;\r\n touch-action: unset;\r\n visibility: visible;\r\n & .disabled {\r\n display: block;\r\n opacity: 0;\r\n user-select: unset;\r\n pointer-events: unset;\r\n touch-action: unset;\r\n }\r\n }\r\n & .owl-item.active {\r\n & .item {\r\n position: relative;\r\n }\r\n // & .item::before {\r\n // opacity: 0.2;\r\n // }\r\n }\r\n }\r\n & .always-center .owl-stage-outer {\r\n display: flex;\r\n justify-content: center;\r\n }\r\n @media (min-width: 1000px) {\r\n & .show-overflow-desktop {\r\n & .owl-carousel .owl-stage-outer {\r\n overflow: visible;\r\n }\r\n }\r\n }\r\n @media (max-width: 996px) {\r\n & .custom-nav-position-top {\r\n & .owl-nav {\r\n & .owl-prev,\r\n & .owl-next {\r\n top: ${(props: any) =>\r\n props?.configBtnNavigation && props?.configBtnNavigation?.mobile\r\n ? props?.configBtnNavigation?.mobile\r\n : \"calc(50% - 15px)\"};\r\n }\r\n }\r\n }\r\n & .custom-nav-position {\r\n & .owl-nav {\r\n & .owl-prev {\r\n left: ${(props: any) =>\r\n props?.configBtnNavigation &&\r\n props?.configBtnNavigation?.leftDefaultMobile\r\n ? props?.configBtnNavigation?.leftDefaultMobile\r\n : \"-15px\"}!important;\r\n }\r\n & .owl-next {\r\n right: ${(props: any) =>\r\n props?.configBtnNavigation &&\r\n props?.configBtnNavigation?.rightDefaultMobile\r\n ? props?.configBtnNavigation?.rightDefaultMobile\r\n : \"-15px\"}!important;\r\n }\r\n }\r\n }\r\n & .wrap-item {\r\n .owl-nav {\r\n opacity: 1;\r\n display: block;\r\n pointer-events: unset;\r\n touch-action: unset;\r\n visibility: visible;\r\n }\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .owl-nav {\r\n & .owl-prev {\r\n left: -12px;\r\n }\r\n & .owl-next {\r\n right: -12px;\r\n }\r\n }\r\n & .custom-nav-position-top {\r\n & .owl-nav {\r\n & .owl-prev,\r\n & .owl-next {\r\n top: ${(props: any) =>\r\n props?.configBtnNavigation && props?.configBtnNavigation?.mobile\r\n ? props?.configBtnNavigation?.mobile\r\n : \"calc(50% - 15px)\"};\r\n }\r\n }\r\n }\r\n & .item > div.mobile-padding-32 {\r\n padding: 0 32px !important;\r\n }\r\n }\r\n`\r\nconst WrapShowMore = styled.div`\r\n text-align: center;\r\n margin-top: 1rem;\r\n & .wrap-btn {\r\n display: inline-block;\r\n // padding: 0.75rem;\r\n // background-color: #fff;\r\n }\r\n & a.btn {\r\n min-width: 200px;\r\n }\r\n`\r\nexport default MyUISlideCard\r\n","import React, { useEffect, useState } from \"react\"\r\nimport { HAuth } from \"src/core/helpers\"\r\nimport { MyModal } from \"src/core/components\"\r\nimport { logout } from \"src/App/App.actions\"\r\nimport { ConnectedProps, connect } from \"react-redux\"\r\nimport dfAvatar from \"src/modules/app_sigo/images/user.png\"\r\nimport styled from \"styled-components\"\r\nimport { HEE } from \"@macashipo/mlib\"\r\nimport { KAuth } from \"src/helpers/Flows/Auth\"\r\nimport { SGNewPaths } from \"src/modules/app_sigo/constants/paths\"\r\n\r\nconst mapStateToProps = state => ({\r\n isAuthenticated: state.app.isAuthenticated,\r\n})\r\n\r\nconst mapDispatchToProps = {\r\n logout,\r\n}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps)\r\n\r\ninterface Props extends ConnectedProps {}\r\n\r\nconst MyUIAvatar = (props: Props) => {\r\n const { isAuthenticated, logout } = props\r\n const [avatar, setAvatar] = useState(HAuth.getUserAvatar() || dfAvatar)\r\n const [userName, setUsername] = useState(HAuth.getUserName())\r\n const _updateAuthInfo = () => {\r\n setUsername(HAuth.getUserName())\r\n setAvatar(HAuth.getUserAvatar())\r\n }\r\n useEffect(() => {\r\n HEE.on(KAuth.eeUpdateAuthInfo, _updateAuthInfo)\r\n return () => {\r\n HEE.off(KAuth.eeUpdateAuthInfo, _updateAuthInfo)\r\n }\r\n // eslint-disable-next-line\r\n }, [])\r\n return (\r\n \r\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n 0\r\n \"\"\r\n \r\n
    \r\n {isAuthenticated ? (\r\n <>\r\n
  • \r\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\r\n {\r\n e.preventDefault()\r\n }}\r\n >\r\n {userName}\r\n \r\n
  • \r\n
  • \r\n \r\n Tài khoản\r\n \r\n
  • \r\n
  • \r\n \r\n Thông báo *\r\n \r\n
  • \r\n
  • \r\n \r\n Chuyến đi của tôi\r\n \r\n
  • \r\n
  • \r\n \r\n Tích lũy\r\n \r\n
  • \r\n
  • \r\n
  • \r\n \r\n Quản lý xe cho thuê *\r\n \r\n
  • \r\n
  • \r\n \r\n Thanh toán\r\n \r\n
  • \r\n
  • \r\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\r\n {\r\n e.preventDefault()\r\n logout({})\r\n window.location.reload()\r\n }}\r\n >\r\n Đăng xuất\r\n \r\n
  • \r\n \r\n ) : (\r\n <>\r\n
  • \r\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\r\n {\r\n e.preventDefault()\r\n MyModal.showFromMyUI(\r\n {\r\n type: \"sg_login\",\r\n afterLogin: () => {\r\n MyModal.hideModalMyUI()\r\n window.location.reload()\r\n },\r\n actionType: \"register\",\r\n field: \"MobilePhone\",\r\n },\r\n {\r\n size: \"top\",\r\n showHeader: false,\r\n showHeaderClose: false,\r\n backdrop: \"static\",\r\n modalClassName: \"modal-login\",\r\n }\r\n )\r\n }}\r\n >\r\n Đăng ký\r\n \r\n
  • \r\n
  • \r\n
  • \r\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\r\n {\r\n e.preventDefault()\r\n MyModal.showFromMyUI(\r\n {\r\n type: \"sg_login\",\r\n afterLogin: () => {\r\n MyModal.hideModalMyUI()\r\n window.location.reload()\r\n },\r\n actionType: \"login\",\r\n field: \"MobilePhone\",\r\n },\r\n {\r\n size: \"top\",\r\n showHeader: false,\r\n showHeaderClose: false,\r\n backdrop: \"static\",\r\n modalClassName: \"modal-login\",\r\n }\r\n )\r\n }}\r\n >\r\n Đăng nhập\r\n \r\n
  • \r\n \r\n )}\r\n
\r\n
\r\n )\r\n}\r\nconst Wrap = styled.li`\r\n & .arvartimg {\r\n max-width: 40px;\r\n width: 40px;\r\n height: 40px;\r\n object-fit: cover;\r\n }\r\n`\r\nexport default connector(MyUIAvatar)\r\n","import React from \"react\"\r\nimport styled from \"styled-components\"\r\nconst MyUIBanner = props => {\r\n const { bgImg, children } = props\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\nconst Wrap = styled.div``\r\nexport default MyUIBanner\r\n","import React, { useEffect, useState } from \"react\"\r\nimport { HAuth } from \"src/core/helpers\"\r\nimport { MyModal, MyUI } from \"src/core/components\"\r\nimport { SGNewPaths, SGPaths } from \"src/modules/app_sigo/constants/paths\"\r\nimport dfAvatar from \"src/modules/app_sigo/images/user.png\"\r\nimport dfLogo from \"src/modules/app_sigo/images/logo-sigo.png\"\r\nimport styled from \"styled-components\"\r\nimport { logout } from \"src/App/App.actions\"\r\nimport { ConnectedProps, connect } from \"react-redux\"\r\nimport classNames from \"classnames\"\r\nimport { HCF, HEE, HUtils } from \"@macashipo/mlib\"\r\nimport { KAuth } from \"src/helpers/Flows/Auth\"\r\nimport { mobileWidth } from \"src/modules/app_sigo/constants\"\r\n\r\nconst configKeyHeader = {\r\n menu_left: \"menu_left\",\r\n item_link: \"item_link\",\r\n item_title: \"item_title\",\r\n sub_items: \"sub_items\",\r\n sub_items_url: \"url\",\r\n sub_items_name: \"name\",\r\n // menu right\r\n menu_right: \"menu_right\",\r\n classname_icon: \"classname_icon\",\r\n classname_link: \"classname_link\",\r\n item_classname_wrap: \"item_classname_wrap\",\r\n right_item_link: \"item_link\",\r\n right_item_title: \"item_title\",\r\n right_sub_menu: \"sub_menu\",\r\n right_sub_url: \"url\",\r\n right_sub_name: \"name\",\r\n // menu mobile\r\n abouts: \"abouts\",\r\n rental_types: \"rental_types\",\r\n url: \"url\",\r\n name: \"name\",\r\n}\r\nconst mapStateToProps = state => ({\r\n isAuthenticated: state.app.isAuthenticated,\r\n dataFirstSetting: state.app.dataFirstSetting,\r\n})\r\n\r\nconst mapDispatchToProps = {\r\n logout,\r\n}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps)\r\ninterface Props extends ConnectedProps {\r\n fnOpenFilter?: any\r\n moreConfig?: any\r\n}\r\n\r\nconst MyUIHeader = (props: Props) => {\r\n const {\r\n isAuthenticated,\r\n logout,\r\n dataFirstSetting,\r\n fnOpenFilter,\r\n moreConfig,\r\n } = props\r\n const [dropdownOpen, setDropdownOpen] = useState(false)\r\n const toggle = () => setDropdownOpen(prevState => !prevState)\r\n const logo = HAuth.getUserLogoApp() || dfLogo //\"/config/logo.png\"\r\n const [avatar, setAvatar] = useState(HAuth.getUserAvatar() || dfAvatar)\r\n const [userName, setUsername] = useState(HAuth.getUserName())\r\n const [isMobileView, setIsMobileView] = useState(false)\r\n const [data, setData] = useState(\r\n HUtils.get(dataFirstSetting, \"DefaultValues.websiteSetting.header\") || {}\r\n )\r\n const [configFirstSetting, setConfigFirstSetting] = useState(\r\n HUtils.get(dataFirstSetting, \"DefaultValues.websiteSetting\") || {}\r\n )\r\n useEffect(() => {\r\n setData(HUtils.get(dataFirstSetting, \"DefaultValues.websiteSetting.header\"))\r\n setConfigFirstSetting(\r\n HUtils.get(dataFirstSetting, \"DefaultValues.websiteSetting\")\r\n )\r\n // eslint-disable-next-line\r\n }, [dataFirstSetting])\r\n const _updateAuthInfo = () => {\r\n setUsername(HAuth.getUserName())\r\n setAvatar(HAuth.getUserAvatar())\r\n }\r\n useEffect(() => {\r\n HEE.on(KAuth.eeUpdateAuthInfo, _updateAuthInfo)\r\n return () => {\r\n HEE.off(KAuth.eeUpdateAuthInfo, _updateAuthInfo)\r\n }\r\n // eslint-disable-next-line\r\n }, [])\r\n useEffect(() => {\r\n const ro = new ResizeObserver((entries, observer) => {\r\n for (const entry of entries) {\r\n const { left, top, width, height } = entry.contentRect\r\n if (entry.target == document.body) {\r\n if (width <= mobileWidth) {\r\n if (isMobileView === false) {\r\n console.log(\r\n `RO Mobile Element's size: ${width}px x ${height}px`,\r\n isMobileView\r\n )\r\n }\r\n setIsMobileView(true)\r\n } else {\r\n setIsMobileView(false)\r\n }\r\n }\r\n }\r\n })\r\n ro.observe(document.body)\r\n }, [])\r\n const getConfigFromFirstSettingByKey = key => {\r\n if (configFirstSetting) {\r\n const { config_search_in_header } = configFirstSetting || {}\r\n return HUtils.get(config_search_in_header, key)\r\n }\r\n return\r\n }\r\n\r\n const onScroll = () => {\r\n const navbar = document.getElementById(\"navbar\")\r\n const sticky: any = navbar?.offsetTop\r\n if (navbar) {\r\n if (window.pageYOffset >= sticky && window.pageYOffset > 0) {\r\n navbar.classList.add(\"truot\")\r\n } else {\r\n navbar.classList.remove(\"truot\")\r\n }\r\n }\r\n }\r\n const closeDropdownMobile = e => {\r\n if (\r\n !document\r\n .getElementsByClassName(\"mobile-menu-dropdown\")[0]\r\n ?.contains(e.target) &&\r\n !document\r\n .getElementsByClassName(\"dropdown-mobile-btn\")[0]\r\n ?.contains(e.target)\r\n ) {\r\n setDropdownOpen(false)\r\n }\r\n }\r\n useEffect(() => {\r\n onScroll()\r\n window.addEventListener(\"scroll\", onScroll)\r\n window.addEventListener(\"click\", closeDropdownMobile)\r\n return () => {\r\n window.removeEventListener(\"scroll\", onScroll)\r\n window.removeEventListener(\"click\", closeDropdownMobile)\r\n }\r\n }, [])\r\n\r\n const renderMobile = () => {\r\n const abouts = data?.[configKeyHeader.abouts] || []\r\n const rentalTypes = data?.[configKeyHeader.rental_types] || []\r\n return (\r\n \r\n {isAuthenticated ? (\r\n \r\n ) : (\r\n
    \r\n
  • \r\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\r\n {\r\n e.preventDefault()\r\n MyModal.showFromMyUI(\r\n {\r\n type: \"sg_login\",\r\n afterLogin: () => {\r\n MyModal.hideModalMyUI()\r\n window.location.reload()\r\n },\r\n actionType: \"register\",\r\n // field: \"PhoneNumber\",\r\n field: \"MobilePhone\",\r\n },\r\n {\r\n size: \"top\",\r\n showHeader: false,\r\n showHeaderClose: false,\r\n backdrop: \"static\",\r\n modalClassName: \"modal-login\",\r\n }\r\n )\r\n }}\r\n >\r\n Đăng ký\r\n \r\n
  • \r\n
  • \r\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\r\n {\r\n e.preventDefault()\r\n MyModal.showFromMyUI(\r\n {\r\n type: \"sg_login\",\r\n afterLogin: () => {\r\n MyModal.hideModalMyUI()\r\n window.location.reload()\r\n },\r\n actionType: \"login\",\r\n field: \"MobilePhone\",\r\n },\r\n {\r\n size: \"top\",\r\n showHeader: false,\r\n showHeaderClose: false,\r\n backdrop: \"static\",\r\n modalClassName: \"modal-login\",\r\n }\r\n )\r\n }}\r\n >\r\n Đăng nhập\r\n \r\n
  • \r\n
  • \r\n {abouts &&\r\n abouts?.length > 0 &&\r\n abouts.map((v, i) => {\r\n const url = v?.[configKeyHeader.url] || \"#\"\r\n const name = v?.[configKeyHeader.name] || \"\"\r\n return (\r\n
  • \r\n \r\n {name}\r\n \r\n
  • \r\n )\r\n })}\r\n {rentalTypes &&\r\n rentalTypes?.length > 0 &&\r\n rentalTypes.map((v, i) => {\r\n const url = v?.[configKeyHeader.url] || \"#\"\r\n const name = v?.[configKeyHeader.name] || \"\"\r\n return (\r\n
  • \r\n \r\n {name}\r\n \r\n
  • \r\n )\r\n })}\r\n
\r\n )}\r\n \r\n )\r\n }\r\n const renderMenuLeft = () => {\r\n const menuLeft = data?.[configKeyHeader.menu_left] || []\r\n if (menuLeft && menuLeft?.length > 0) {\r\n return (\r\n \r\n
    \r\n {menuLeft.map((v, i) => {\r\n const title = v?.[configKeyHeader.item_title] || \"\"\r\n const link = v?.[configKeyHeader.item_link] || \"#\"\r\n const subMenu = v?.[configKeyHeader.sub_items] || \"\"\r\n const isDropdown = subMenu && subMenu !== \"\"\r\n return (\r\n \r\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\r\n {isDropdown ? (\r\n \r\n {title}\r\n \r\n {subMenu.map((item, j) => {\r\n const url =\r\n item?.[configKeyHeader.sub_items_url] || \"#\"\r\n const name = item?.[configKeyHeader.sub_items_name]\r\n return (\r\n
  • \r\n \r\n {name}\r\n \r\n
  • \r\n )\r\n })}\r\n
\r\n \r\n ) : (\r\n {title}\r\n )}\r\n \r\n )\r\n })}\r\n \r\n \r\n )\r\n }\r\n return <>\r\n }\r\n const renderMenuRight = () => {\r\n // const menuRight = data?.[configKeyHeader.menu_right] || []\r\n const menuRight = getConfigFromFirstSettingByKey(\"menu_item.right\") || []\r\n if (menuRight && menuRight?.length > 0) {\r\n return (\r\n \r\n {menuRight &&\r\n menuRight?.length > 0 &&\r\n menuRight.map((v, i) => {\r\n return (\r\n \r\n {v?.name}\r\n \r\n )\r\n })}\r\n
    \r\n \r\n
\r\n \r\n )\r\n }\r\n return (\r\n \r\n
    \r\n \r\n
\r\n \r\n )\r\n }\r\n if (\r\n (window.location.pathname === SGPaths.searchxe ||\r\n window.location.pathname === SGNewPaths.searchxe) &&\r\n !isMobileView\r\n ) {\r\n return <>\r\n }\r\n if (!data || Object.keys(data)?.length === 0) {\r\n HCF.setCF(\"waitingFirstSettingForHeader\", () => {\r\n setData(HUtils.get(HCF.getCF(\"websiteSetting\"), \"header\") || {})\r\n })\r\n }\r\n return (\r\n \r\n
\r\n
\r\n {!moreConfig?.onlyShowLogo && (\r\n <>\r\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\r\n {\r\n // e.preventDefault()\r\n toggle()\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n 0\r\n \"\"\r\n \r\n \r\n )}\r\n {fnOpenFilter && (\r\n \r\n \r\n Bộ lọc\r\n \r\n )}\r\n \r\n \"logo\"\r\n \r\n
\r\n {!moreConfig?.onlyShowLogo && (\r\n <>\r\n {/* {!moreConfig?.hideMenuLeft && renderMenuLeft()} */}\r\n {renderMenuRight()}\r\n {renderMobile()}\r\n \r\n )}\r\n
\r\n
\r\n \r\n )\r\n}\r\nconst RightMenu = styled.div`\r\n &.right-menu {\r\n &.collapse.navbar-collapse {\r\n display: flex !important;\r\n align-items: center;\r\n // gap: 20px;\r\n flex: 1 0 140px;\r\n justify-content: flex-end;\r\n padding-right: 0;\r\n & .right-item {\r\n margin-right: 20px;\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n & .navbar-right.avatar-menu {\r\n float: unset;\r\n margin-top: 0 !important;\r\n }\r\n & .custom-link {\r\n color: var(--color-text-000);\r\n font-size: 14px;\r\n font-weight: 500;\r\n }\r\n & .navbar_right-v2 {\r\n & ul.dropdown-menu {\r\n padding-top: 0;\r\n }\r\n }\r\n }\r\n`\r\nconst Wrap = styled.nav`\r\n background-color: #fff;\r\n background-color: var(--color-text-fff) !important;\r\n // border-bottom: 1px solid var(--color-border-e4);\r\n box-shadow: rgb(0 0 0 / 16%) 0 0 6px;\r\n transition: none;\r\n padding-bottom: 0px;\r\n & .wrap-header {\r\n height: 50px;\r\n &.container {\r\n padding: 0;\r\n }\r\n }\r\n & .navbar-brand {\r\n padding: 0;\r\n }\r\n & .navavatar {\r\n // padding: 5px 15px;\r\n // padding-right: 5px !important;\r\n display: flex;\r\n align-items: center;\r\n & .arvartimg2 {\r\n border-radius: 50%;\r\n max-width: 30px;\r\n width: 30px;\r\n height: 30px;\r\n max-height: 30px;\r\n object-fit: cover;\r\n }\r\n & .wp-icobar {\r\n padding-top: 2px !important;\r\n // margin-right: 5px;\r\n }\r\n }\r\n & .btn-filter {\r\n float: right;\r\n margin: 5px 15px 0;\r\n color: #222;\r\n cursor: pointer;\r\n }\r\n @media (max-width: 992px) {\r\n & .line.hidden-mobile {\r\n display: none !important;\r\n }\r\n }\r\n @media (min-width: 768px) and (max-width: ${mobileWidth}px) {\r\n box-shadow: rgb(0 0 0 / 16%) 0 0 6px;\r\n padding-bottom: 5px;\r\n .navbar-header {\r\n color: white;\r\n background-color: white;\r\n float: unset;\r\n }\r\n &.navbar {\r\n padding-top: 0px;\r\n padding-bottom: 0px;\r\n & .container.wrap-header {\r\n padding: 0;\r\n }\r\n }\r\n & .hidden-mobile {\r\n display: none !important;\r\n }\r\n #collapseRightDesktop {\r\n display: none !important;\r\n }\r\n .navbar-collapse.collapse {\r\n display: none !important;\r\n }\r\n & .navavatar.hidden-desktop {\r\n display: flex !important;\r\n }\r\n .navbar-brand {\r\n padding: 5px 0px 5px 10px;\r\n }\r\n .navavatar {\r\n float: right;\r\n margin-top: 5px;\r\n margin-right: 10px;\r\n padding-top: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 15px;\r\n padding-right: 5px !important;\r\n & .wp-icobar {\r\n padding-top: 0 !important;\r\n margin-right: 5px;\r\n }\r\n }\r\n .navbar-brand img {\r\n max-height: 30px;\r\n margin-top: 5px;\r\n }\r\n .logo {\r\n filter: none;\r\n }\r\n & .hidden-desktop {\r\n &.navbar-collapse.open {\r\n display: block !important;\r\n height: unset !important;\r\n }\r\n }\r\n .navbar-nav {\r\n position: relative;\r\n background: #fff;\r\n overflow-y: auto;\r\n margin-top: 0px;\r\n max-height: 400px;\r\n z-index: 999;\r\n }\r\n .navbar-nav > li > a {\r\n color: #444 !important;\r\n background-color: white;\r\n padding-top: 5px;\r\n padding-bottom: 5px;\r\n margin-bottom: 5px;\r\n }\r\n .navbar-nav > li.active > a {\r\n background-color: var(--mau1);\r\n color: white !important;\r\n padding-top: 12px;\r\n padding-bottom: 12px;\r\n }\r\n & .mobile-menu-dropdown {\r\n padding: 0;\r\n & .navbar-nav.navbar-right {\r\n margin-top: 0 !important;\r\n width: 100%;\r\n margin-right: 0;\r\n & > li {\r\n height: unset;\r\n float: unset;\r\n }\r\n }\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n box-shadow: rgb(0 0 0 / 16%) 0 0 6px;\r\n padding-bottom: 5px;\r\n & .wrap-header {\r\n height: unset;\r\n }\r\n & .mobile-menu-dropdown {\r\n margin: 0;\r\n }\r\n & .navbar-header {\r\n color: white;\r\n background-color: white;\r\n float: unset;\r\n margin: 0;\r\n }\r\n .navavatar {\r\n padding-top: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 15px;\r\n padding-right: 5px !important;\r\n & .wp-icobar {\r\n padding-top: 0 !important;\r\n margin-right: 5px;\r\n }\r\n }\r\n .navbar-brand {\r\n padding: 5px 0 5px 10px;\r\n }\r\n }\r\n`\r\nexport default connector(MyUIHeader)\r\n","import React, { useRef, useState } from \"react\"\r\nimport { HLink, HUtils } from \"src/core/helpers\"\r\nimport { MyForm, MyModal, MyUI } from \"src/core/components\"\r\nimport { isNotEmpty } from \"src/core/helpers/utils\"\r\nimport styled from \"styled-components\"\r\nimport { showAlert } from \"src/modules/app_sigo/helpers/ui\"\r\nimport { mobileWidth } from \"src/modules/app_sigo/constants\"\r\nimport { SGNewPaths } from \"src/modules/app_sigo/constants/paths\"\r\n\r\nconst Search = props => {\r\n const [myFilter, setMyFilter] = useState({\r\n from: null as any,\r\n datetimefrom: new Date().setHours(21, 0, 0, 0),\r\n datetimeto: new Date(new Date().setHours(24, 0, 0, 0)).setHours(\r\n 20,\r\n 0,\r\n 0,\r\n 0\r\n ),\r\n })\r\n const refTopForm = useRef(null)\r\n const configFormFilter = {\r\n defaultValues: myFilter,\r\n controls: [\r\n {\r\n label: \"Địa điểm\",\r\n fieldName: \"from\",\r\n type: \"input_address\",\r\n more: {\r\n classNameGroup: \"col-md-4 col-sm-12\",\r\n morePropsInputAddress: {\r\n mappingFields: {\r\n fieldAddress: \"from\",\r\n },\r\n props4Search: {\r\n configSelect: {\r\n placeholder: \"Bạn đặt xe ở … \",\r\n },\r\n },\r\n },\r\n },\r\n },\r\n {\r\n label: \"Bắt đầu\",\r\n fieldName: \"datetimefrom\",\r\n type: \"input_datetime\",\r\n more: {\r\n classNameGroup: \"col-md-4 col-sm-6 wpinput mid\",\r\n configDate: {\r\n minDate: new Date(),\r\n placeholderDate: \"Chọn ngày\",\r\n },\r\n configTime: {\r\n placeholderTime: \"Chọn giờ\",\r\n },\r\n },\r\n },\r\n {\r\n label: \"Kết thúc\",\r\n fieldName: \"datetimeto\",\r\n type: \"input_datetime\",\r\n more: {\r\n classNameGroup: \"col-md-4 col-sm-6 wpinput\",\r\n configDate: {\r\n minDate: new Date(),\r\n placeholderDate: \"Chọn ngày\",\r\n },\r\n configTime: {\r\n placeholderTime: \"Chọn giờ\",\r\n },\r\n },\r\n },\r\n ],\r\n }\r\n const getDisabledSearch = () => {\r\n let isDisabled = false\r\n Object.keys(myFilter).forEach(f => {\r\n if (!isNotEmpty(myFilter[f])) {\r\n isDisabled = true\r\n return\r\n }\r\n })\r\n return isDisabled\r\n }\r\n const getLinkSearch = () => {\r\n let url = `${SGNewPaths.searchxe}?`\r\n Object.keys(myFilter).forEach((f, i) => {\r\n if (isNotEmpty(myFilter[f])) {\r\n if (f === \"from\") {\r\n url = url + \"&\" + f + \"=\" + myFilter[f].replaceAll(\" \", \"+\")\r\n } else {\r\n url = url + \"&\" + f + \"=\" + myFilter[f]\r\n }\r\n }\r\n })\r\n return url\r\n }\r\n return (\r\n \r\n
\r\n
\r\n {\r\n const { fieldName, newValue } = opts\r\n let newData: any = JSON.parse(JSON.stringify(myFilter))\r\n newData[fieldName] = newValue\r\n if (\r\n fieldName === \"datetimefrom\" &&\r\n newData.datetimefrom >= newData.datetimeto\r\n ) {\r\n const _newDateTimeTo = newValue + 86400000\r\n newData.datetimeto = _newDateTimeTo\r\n if (\r\n refTopForm?.current?.fnListFromExtControl?.[\"datetimeto\"]\r\n ) {\r\n refTopForm.current.fnListFromExtControl[\r\n \"datetimeto\"\r\n ].updateValue(_newDateTimeTo)\r\n }\r\n setMyFilter(newData)\r\n } else if (\r\n fieldName === \"datetimeto\" &&\r\n newData.datetimeto <= newData.datetimefrom\r\n ) {\r\n if (\r\n refTopForm?.current?.fnListFromExtControl?.[fieldName]\r\n ) {\r\n refTopForm.current.fnListFromExtControl[\r\n fieldName\r\n ].updateValue(myFilter[fieldName])\r\n }\r\n showAlert({\r\n component: (\r\n \r\n ),\r\n })\r\n } else {\r\n setMyFilter(newData)\r\n }\r\n },\r\n afterUpdateMultiValues: obj => {\r\n const { values, cbSuccess } = obj\r\n let objUpdate: any = {}\r\n objUpdate = { ...values }\r\n if (values?.[`from_MoreInfo`]) {\r\n const location = HUtils.get(\r\n values,\r\n `from_MoreInfo[0].geometry.location`\r\n )\r\n if (location?.lat) {\r\n objUpdate.lat = location.lat()\r\n }\r\n if (location?.lng) {\r\n objUpdate.long = location.lng()\r\n }\r\n delete objUpdate[\"from_MoreInfo\"]\r\n cbSuccess && cbSuccess()\r\n setMyFilter({\r\n ...myFilter,\r\n ...objUpdate,\r\n })\r\n }\r\n },\r\n } as any\r\n }\r\n renderFooter={() => {\r\n return (\r\n
\r\n {\r\n HLink.openUrl(getLinkSearch(), \"_self\")\r\n MyModal.hideModalComponent()\r\n }}\r\n >\r\n \r\n \r\n
\r\n )\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n )\r\n}\r\nconst MUISearchbar = props => {\r\n return (\r\n \r\n {\r\n MyModal.showFromComponent(, {\r\n title: \"Bạn muốn thuê xe?\",\r\n backdrop: \"static\",\r\n modalClassName: \"default\",\r\n })\r\n }}\r\n >\r\n \r\n
\r\n
Bạn muốn thuê xe?
\r\n
Nhấn vào đây để chọn địa điểm và thời gian
\r\n
\r\n \r\n
\r\n )\r\n}\r\nconst Wrap = styled.div`\r\n &.search-popup {\r\n & .btnsearch {\r\n margin-bottom: 0px !important;\r\n }\r\n & .wpsearchsl {\r\n margin-bottom: 0px !important;\r\n padding: 0px;\r\n }\r\n }\r\n & .search-bar {\r\n cursor: pointer;\r\n margin-top: 0.5rem;\r\n box-shadow: 0 3px 10px rgba(0 0 0 / 0.1);\r\n border: 0.5px solid rgba(0 0 0 / 0.08);\r\n min-height: 56px;\r\n border-radius: 50px;\r\n display: flex;\r\n align-items: center;\r\n padding: 0 1rem;\r\n & i {\r\n margin-top: 0.25rem;\r\n font-size: 25px;\r\n color: var(--color-text-363636);\r\n }\r\n & .intro-text {\r\n margin-left: 1rem;\r\n & .main {\r\n font-weight: 600;\r\n color: var(--color-text-222222);\r\n font-size: 16px;\r\n line-height: 1.5rem;\r\n letter-spacing: normal;\r\n }\r\n & .des {\r\n font-size: 12px;\r\n line-height: 1rem;\r\n color: var(--color-text-search-bar);\r\n letter-spacing: normal;\r\n }\r\n }\r\n }\r\n & .label-text {\r\n color: #555;\r\n font-size: 16px;\r\n cursor: default;\r\n }\r\n & .filter-top {\r\n display: flex;\r\n align-items: center;\r\n & > .form-group {\r\n height: 48px;\r\n margin: 0px !important;\r\n & label {\r\n line-height: 30px;\r\n margin: 0 !important;\r\n font-weight: 700;\r\n color: #555;\r\n line-height: 25px;\r\n }\r\n & > div:nth-child(2) {\r\n flex: 1;\r\n }\r\n & .react-datepicker-wrapper {\r\n width: 90px !important;\r\n }\r\n }\r\n & .mc-input-datetime {\r\n justify-content: space-between;\r\n }\r\n & .nice-select .current {\r\n line-height: 1;\r\n }\r\n & input {\r\n padding-left: 0 !important;\r\n padding-bottom: 0 !important;\r\n height: 22px;\r\n }\r\n & .mc_input_address {\r\n .clear > button {\r\n height: 23px;\r\n }\r\n }\r\n }\r\n & .btnsearch {\r\n &:disabled {\r\n color: #fff;\r\n background-color: var(--mau1);\r\n border-color: var(--mau1);\r\n }\r\n }\r\n @media (min-width: 768px) and (max-width: ${mobileWidth}px) {\r\n .wpinput.mid {\r\n border-left: none;\r\n border-right: none;\r\n }\r\n }\r\n @media (max-width: ${mobileWidth}px) {\r\n & .wpsearchsl {\r\n max-width: 100%;\r\n height: auto;\r\n padding: 10px;\r\n margin-bottom: 15px;\r\n }\r\n & .filter-top {\r\n flex-direction: column;\r\n & .form-group {\r\n margin-bottom: 20px !important;\r\n padding: 0 10px;\r\n width: 100%;\r\n }\r\n & .btnsearch {\r\n width: 100%;\r\n margin-top: 5px;\r\n border-radius: 20px;\r\n }\r\n }\r\n & .wpsearchsl {\r\n padding-bottom: 0;\r\n }\r\n }\r\n`\r\nexport default MUISearchbar\r\n","import { MyUI } from \"src/core/components\"\r\nimport styled from \"styled-components\"\r\nimport { getLoadingPage } from \"../../MyPage/LoadingHelper\"\r\nimport { headerTabList, pageKey } from \"src/modules/app_sigo/constants\"\r\nimport dfLogo from \"src/modules/app_sigo/images/logo-sigo.png\"\r\nimport { HAuth } from \"src/core/helpers\"\r\n\r\nconst logo = HAuth.getUserLogoApp() || dfLogo\r\n\r\nconst MyUIHeaderMobileV2 = props => {\r\n const { loading, onlyShowLogo } = props\r\n const getConfigLoadingSkeleton = () => {\r\n const config = {\r\n customLoading: () => {\r\n return getLoadingPage({\r\n key: pageKey.onlyHeader,\r\n tabList: headerTabList,\r\n logo: logo,\r\n })\r\n },\r\n loading: loading,\r\n moreConfig: {},\r\n }\r\n return config\r\n }\r\n const config: any = getConfigLoadingSkeleton()\r\n return (\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n )\r\n}\r\nconst WrapMobile = styled.div`\r\n &.wrap-mobile {\r\n display: none;\r\n & .c-header {\r\n position: relative;\r\n }\r\n }\r\n @media (min-width: 768px) and (max-width: 820px) {\r\n & .wrap-mobile {\r\n & .navbar-header {\r\n background-color: #fff;\r\n }\r\n & .logo {\r\n filter: brightness(0) invert(1);\r\n }\r\n & .truot {\r\n & .logo {\r\n filter: none;\r\n }\r\n }\r\n }\r\n }\r\n @media (min-width: 768px) and (max-width: 1010px) {\r\n & .navbar {\r\n position: relative;\r\n background-color: #fff !important;\r\n &.truot {\r\n position: fixed;\r\n }\r\n & .navbar-nav > li > a {\r\n color: #222 !important;\r\n }\r\n & .navbar-nav > li.active > a {\r\n color: white !important;\r\n }\r\n }\r\n & .c-header {\r\n position: relative;\r\n }\r\n }\r\n @media (max-width: 1010px) {\r\n &.wrap-mobile {\r\n display: block;\r\n margin-bottom: 1rem;\r\n & .wrap-header.container {\r\n padding: 0 !important;\r\n }\r\n & #slider {\r\n padding-top: 110px;\r\n margin-bottom: 0;\r\n min-height: 400px !important;\r\n width: 100%;\r\n }\r\n & .logo {\r\n filter: none !important;\r\n }\r\n }\r\n & .header-full-v2,\r\n & .navbar-v2-mobile {\r\n display: none;\r\n }\r\n &.page-home {\r\n padding-top: 0;\r\n & .navbar {\r\n padding-bottom: 0px;\r\n }\r\n }\r\n & .container {\r\n width: 100%;\r\n max-width: 100%;\r\n padding: 0 15px !important;\r\n }\r\n }\r\n @media (max-width: 820px) {\r\n & .wrap-mobile {\r\n & #slider {\r\n padding-top: 15px;\r\n min-height: unset !important;\r\n }\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .navbar-header {\r\n margin: 0 !important;\r\n }\r\n & .wrap-mobile {\r\n & .navbar-right {\r\n padding: 0 8px;\r\n }\r\n }\r\n & .search-bar {\r\n margin-top: 1.25rem !important;\r\n }\r\n }\r\n`\r\nexport default MyUIHeaderMobileV2\r\n","import React, { useRef, useEffect } from \"react\"\r\nimport { Fancybox } from \"@fancyapps/ui\"\r\n// import \"@fancyapps/ui/dist/fancybox/fancybox.css\"\r\nimport \"src/modules/app_sigo/assets/guest/css/fancybox.css\"\r\nimport styled from \"styled-components\"\r\n\r\nconst MyUIFancybox = props => {\r\n const containerRef = useRef(null)\r\n useEffect(() => {\r\n const container = containerRef.current\r\n\r\n const delegate = props.delegate || \"[data-fancybox]\"\r\n const options = props.options || {}\r\n\r\n Fancybox.bind(container, delegate, options)\r\n\r\n return () => {\r\n Fancybox.unbind(container)\r\n Fancybox.close()\r\n }\r\n })\r\n return (\r\n \r\n {props.children({\r\n show: () => {\r\n if (props?.data?.length > 0) {\r\n Fancybox.show(\r\n props.data.map(v => {\r\n return {\r\n src: v,\r\n }\r\n }),\r\n props?.options\r\n )\r\n }\r\n },\r\n })}\r\n \r\n )\r\n}\r\nconst Wrap = styled.div``\r\nexport default MyUIFancybox\r\n","import classNames from \"classnames\"\r\nimport styled from \"styled-components\"\r\n\r\nconst MyUIContentOverlay = props => {\r\n const { canShow, children, id, classNameWrap, renderMore, fromRight } = props\r\n if (children && id) {\r\n return (\r\n \r\n {renderMore && renderMore()}\r\n {children}\r\n \r\n )\r\n }\r\n return <>\r\n}\r\nconst Wrap = styled.div`\r\n &.overlay {\r\n height: 100%;\r\n position: fixed;\r\n z-index: 1;\r\n top: 65px;\r\n background-color: #fff;\r\n overflow-x: hidden;\r\n transition: 0.7s;\r\n padding: 0;\r\n opacity: 1;\r\n width: 100%;\r\n &.from-left {\r\n left: -100%;\r\n }\r\n &.from-right {\r\n right: -100%;\r\n }\r\n &.header-no-search {\r\n top: 60px;\r\n }\r\n &.wrap-order-detail {\r\n height: auto;\r\n bottom: 0;\r\n top: 60px;\r\n padding-top: 0;\r\n background: #f8f8f8;\r\n padding-bottom: 0;\r\n }\r\n }\r\n &.show {\r\n width: 100%;\r\n padding-top: 30px;\r\n opacity: 1;\r\n padding-bottom: 70px;\r\n &.from-right {\r\n right: 0;\r\n }\r\n &.from-left {\r\n left: 0;\r\n }\r\n }\r\n & .hide {\r\n display: none;\r\n }\r\n @media (max-width: 1010px) {\r\n &.overlay {\r\n &.wrap-order-detail {\r\n top: 0;\r\n bottom: 0;\r\n }\r\n }\r\n }\r\n @media (max-width: 820px) {\r\n &.overlay {\r\n top: 53px;\r\n &.header-no-search {\r\n top: 49px;\r\n }\r\n }\r\n &.show {\r\n padding-top: 15px;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n &.overlay {\r\n &.header-no-search {\r\n top: 53px;\r\n }\r\n }\r\n }\r\n`\r\nexport default MyUIContentOverlay\r\n","import { HUtils, MyUI } from \"@macashipo/mlib\"\r\nimport { useEffect, useRef, useState } from \"react\"\r\nimport { Button } from \"reactstrap\"\r\nimport { HApi } from \"src/core/helpers\"\r\nimport { historyFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\nimport GeneralInfo from \"./GeneralInfo\"\r\nimport { MyModal } from \"src/core/components\"\r\nimport { ConnectedProps, connect } from \"react-redux\"\r\nimport MessageAboveActions from \"./MessageAboveActions\"\r\nimport Skeleton from \"react-loading-skeleton\"\r\n\r\nconst mapStateToProps = state => ({\r\n dataFirstSetting: state.app.dataFirstSetting,\r\n})\r\n\r\nconst mapDispatchToProps = {}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps)\r\ninterface Props extends ConnectedProps {\r\n data?: any\r\n fnList?: any\r\n canShow?: boolean\r\n}\r\nconst MyUITripDetail = (props: Props) => {\r\n const { data, fnList, canShow, dataFirstSetting } = props\r\n const [myData, setMyData] = useState(null as any)\r\n const [loading, setLoading] = useState(true)\r\n const [configFirstSetting, setConfigFirstSetting] = useState(\r\n HUtils.get(dataFirstSetting, \"DefaultValues.websiteSetting\") || {}\r\n )\r\n const [actionsHeight, setActionsHeight] = useState(0)\r\n const [topFixedHeight, setTopFixedHeight] = useState(0)\r\n const actionsRef = useRef(null)\r\n const topFixedRef = useRef(null)\r\n\r\n useEffect(() => {\r\n if (canShow) {\r\n setLoading(true)\r\n setTimeout(() => {\r\n requestData()\r\n }, 700)\r\n }\r\n }, [canShow])\r\n useEffect(() => {\r\n setConfigFirstSetting(\r\n HUtils.get(dataFirstSetting, \"DefaultValues.websiteSetting\")\r\n )\r\n // eslint-disable-next-line\r\n }, [dataFirstSetting])\r\n useEffect(() => {\r\n if (!actionsRef.current) return\r\n const actionsRefObserver = new ResizeObserver(entries => {\r\n let height = entries[0].contentRect.height\r\n if (height) {\r\n setActionsHeight(height)\r\n }\r\n })\r\n\r\n actionsRef.current && actionsRefObserver.observe(actionsRef.current)\r\n return () => {\r\n actionsRefObserver.disconnect()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [actionsRef.current, myData])\r\n useEffect(() => {\r\n if (!topFixedRef.current) {\r\n return\r\n }\r\n const topFixedRefObserve = new ResizeObserver(entries => {\r\n let height = entries[0].contentRect.height\r\n if (height) {\r\n setTopFixedHeight(height)\r\n }\r\n })\r\n topFixedRef.current && topFixedRefObserve.observe(topFixedRef.current)\r\n\r\n return () => {\r\n topFixedRefObserve.disconnect()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [topFixedRef.current, myData])\r\n useEffect(() => {\r\n const body = document.getElementsByTagName(\"body\")\r\n if (body) {\r\n body[0].classList.add(\"modal-custom-style\")\r\n }\r\n }, [])\r\n\r\n const requestData = ({\r\n notLoading = false,\r\n cbError,\r\n cbSuccess,\r\n }: any = {}) => {\r\n if (canShow && data?.[historyFields.fOrderNumber]) {\r\n if (!notLoading) {\r\n setLoading(true)\r\n }\r\n HApi.apiPost({\r\n url: \"RentalService/GetOrderDetail\",\r\n data: {\r\n OrderNumber: data?.[historyFields.fOrderNumber],\r\n },\r\n })\r\n .then(response => {\r\n setLoading(false)\r\n setMyData(response.Data)\r\n if (cbSuccess) {\r\n cbSuccess(response.Data)\r\n }\r\n })\r\n .catch(error => {\r\n setLoading(false)\r\n cbError && cbError()\r\n })\r\n }\r\n }\r\n /** Get */\r\n const getIdOverlay = () => {\r\n const id = data?.[historyFields.fOrderNumber] || \"\"\r\n return id\r\n }\r\n const getMyFnList = () => {\r\n return {\r\n getCanShowByBtnList: getCanShowByBtnList,\r\n getActionButtonCode: getActionButtonCode,\r\n getButtonConfigByCode: getButtonConfigByCode,\r\n getConfigFromFirstSettingByKey: getConfigFromFirstSettingByKey,\r\n fnReloadList: ({ cbSuccess, cbError }: any = {}) => {\r\n requestData({ notLoading: true, cbSuccess, cbError })\r\n },\r\n }\r\n }\r\n const getConfigFromFirstSettingByKey = key => {\r\n const orderDetail = HUtils.get(configFirstSetting, \"order_details\")\r\n if (orderDetail) {\r\n return HUtils.get(orderDetail, key)\r\n }\r\n return\r\n }\r\n const getActionButtonCode = () => {\r\n return getConfigFromFirstSettingByKey(\"buttonCode\") || {}\r\n }\r\n const getCanShowByBtnList = code => {\r\n let btnList = myData?.[historyFields.fButtons]\r\n let canShow = false\r\n if (btnList && btnList?.length > 0) {\r\n btnList.every(v => {\r\n if (v?.Code === code) {\r\n canShow = true\r\n return false\r\n }\r\n return true\r\n })\r\n }\r\n return canShow\r\n }\r\n const getButtonList = () => {\r\n let list: any = []\r\n const listButtonNeedRemoveInFooter =\r\n getConfigFromFirstSettingByKey(\"exceptButtonCodes\") || []\r\n const buttonList: any = myData?.[historyFields.fButtons] || []\r\n const statusCode = myData?.[historyFields.fOrderStatusCode]\r\n const listStatusCode = getConfigFromFirstSettingByKey(\"statusCode\") || {}\r\n if (buttonList?.length > 0) {\r\n buttonList.forEach(v => {\r\n if (listButtonNeedRemoveInFooter.findIndex(c => c === v?.Code) === -1) {\r\n list.push(v)\r\n }\r\n })\r\n }\r\n if (\r\n statusCode === listStatusCode?.OWNER2CONFIRM\r\n // ||\r\n // statusCode === listStatusCode?.INTHETRIP\r\n ) {\r\n list.push({\r\n Color_BG: \"var(--mau1)\",\r\n Color: \"custom\",\r\n NeedReloadList: true,\r\n Name: \"Đã hiểu\",\r\n Code: \"Understand\",\r\n Url: null,\r\n fnOnClick: () => {\r\n onCloseDetailOrder()\r\n },\r\n })\r\n }\r\n return list\r\n }\r\n const getButtonConfigByCode = code => {\r\n let _btnConfig: any = {}\r\n const buttonList: any = myData?.[historyFields.fButtons] || []\r\n if (buttonList && buttonList?.length > 0) {\r\n buttonList.every(v => {\r\n if (v?.Code === code) {\r\n _btnConfig = { ...v }\r\n return false\r\n }\r\n return true\r\n })\r\n }\r\n return _btnConfig\r\n }\r\n /** Other */\r\n const onCloseDetailOrder = () => {\r\n fnList?.hideDetailOrder && fnList?.hideDetailOrder()\r\n fnList?.fnReloadList && fnList.fnReloadList()\r\n }\r\n /** Render */\r\n const renderMap = () => {\r\n const UserTakeLat = myData?.[historyFields.fLatitude]\r\n const UserTakeLng = myData?.[historyFields.fLongitude]\r\n const statusNotPaidYet = getConfigFromFirstSettingByKey(\"statusNotPaidYet\")\r\n const statusCode = myData?.[historyFields.fOrderStatusCode]\r\n let notPaidYet = false\r\n if (statusCode && statusNotPaidYet && statusNotPaidYet?.length > 0) {\r\n if (statusNotPaidYet.findIndex(v => v === statusCode) > -1) {\r\n notPaidYet = true\r\n }\r\n }\r\n let msg = \"\"\r\n if (myData?.[historyFields.fIsUserTakeSelected] && notPaidYet) {\r\n msg = \"Địa điểm chính xác sẽ hiển thị khi hoàn tất đặt cọc\"\r\n }\r\n if (UserTakeLng && UserTakeLat) {\r\n return (\r\n \r\n )\r\n }\r\n // return (\r\n // \r\n // )\r\n return <>\r\n }\r\n const renderGeneralInfo = () => {\r\n const statusCodeList = getConfigFromFirstSettingByKey(\"statusCode\")\r\n const statusNotPaidYet = getConfigFromFirstSettingByKey(\"statusNotPaidYet\")\r\n const buttonCode = getActionButtonCode()\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n const renderVehicleInfo = () => {\r\n const buttonCode = getActionButtonCode()\r\n const vehicalInfoCf = getConfigFromFirstSettingByKey(\"vehicleInfo\")\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n const renderPaymentInfo = () => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n const renderOwnerInfo = () => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n const renderSupportInfo = () => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n const renderInsuranceInfo = () => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n const renderActions = () => {\r\n const moreConfigActions =\r\n getConfigFromFirstSettingByKey(\"moreConfigActions\") || {}\r\n const footer = myData?.[historyFields.fFooterInfo]\r\n const buttonList = getButtonList()\r\n if ((buttonList && buttonList?.length > 0) || footer?.Title) {\r\n return (\r\n \r\n requestData({ notLoading: true }),\r\n }}\r\n />\r\n {buttonList?.length > 0 && (\r\n \r\n )}\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n const renderHeaderFixed = () => {\r\n const timeText = myData?.[historyFields.fHeaderInfo] || {}\r\n return (\r\n \r\n
\r\n \r\n {timeText?.Title &&
{timeText?.Title}
}\r\n
\r\n
\r\n )\r\n }\r\n const renderBlogsSuggestion = () => {\r\n const blogs = myData?.[historyFields.fBlogs]\r\n const moreConfig =\r\n getConfigFromFirstSettingByKey(\"blogSuggestionConfig\") || {}\r\n if (blogs && blogs?.length > 0) {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n return <>\r\n }\r\n const renderContent = () => {\r\n if (myData && !loading) {\r\n return (\r\n <>\r\n \r\n
\r\n {renderGeneralInfo()}\r\n {renderVehicleInfo()}\r\n {renderPaymentInfo()}\r\n {renderOwnerInfo()}\r\n {renderSupportInfo()}\r\n {renderBlogsSuggestion()}\r\n {renderInsuranceInfo()}\r\n
\r\n \r\n
\r\n
\r\n {renderHeaderFixed()}\r\n {renderActions()}\r\n
\r\n \r\n {renderMap()}\r\n
\r\n \r\n \r\n )\r\n } else if (loading) {\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n return <>\r\n }\r\n return (\r\n \r\n \r\n \r\n {/* {renderProgress()} */}\r\n {renderContent()}\r\n \r\n \r\n \r\n )\r\n}\r\nconst Header = styled.div`\r\n display: flex;\r\n align-items: flex-start;\r\n background-color: #fff;\r\n box-shadow: 0px 0px 10px 0px #0000001a;\r\n // margin-left: -3px;\r\n width: calc(100% - 3px);\r\n padding: 15px;\r\n\r\n & .btn-back {\r\n background-color: transparent;\r\n color: var(--color-text-000);\r\n box-shadow: none;\r\n font-size: 14px;\r\n padding: 0;\r\n height: fit-content;\r\n border: none;\r\n margin-right: 15px;\r\n pointer-events: auto;\r\n margin-top: 5px;\r\n i {\r\n display: flex;\r\n }\r\n }\r\n & .btn-back:hover,\r\n & .btn-back:active,\r\n & .btn-back:focus {\r\n color: var(--color-text-000);\r\n box-shadow: none;\r\n background-color: transparent;\r\n border: none;\r\n }\r\n @media (max-width: 1299px) {\r\n margin-left: -3px;\r\n width: 100%;\r\n }\r\n @media (max-width: 996px) {\r\n margin-left: 0;\r\n width: unset;\r\n margin-right: 5px;\r\n }\r\n`\r\nconst WrapHeaderFixed = styled.div`\r\n margin-left: -12px;\r\n margin-right: -12px;\r\n padding-left: 12px;\r\n padding-right: 12px;\r\n padding-top: 15px;\r\n padding-bottom: 0;\r\n background: #f8f8f8;\r\n min-width: 100%;\r\n @media (max-width: 996px) {\r\n padding-right: 4px;\r\n }\r\n`\r\nconst Wrap = styled.div`\r\n & .subtitle {\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: var(--mauden);\r\n }\r\n & .wrap-sticky {\r\n top: 60px;\r\n position: fixed;\r\n display: flex;\r\n left: -150%;\r\n transform: translateX(-50%);\r\n height: 100%;\r\n pointer-events: none;\r\n opacity: 0;\r\n transition: 0.7s;\r\n height: calc(100% - 60px);\r\n z-index: 2;\r\n &.show-sticky {\r\n left: 50%;\r\n opacity: 1;\r\n }\r\n & .wrap-left {\r\n width: 40%;\r\n margin-right: 12px;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n }\r\n & .wrap-map {\r\n // max-height: 680px;\r\n height: 100%;\r\n border-radius: 0;\r\n & .gm-control-active {\r\n pointer-events: auto;\r\n }\r\n }\r\n & .wrap-right {\r\n width: calc(100% - 40% - 15px);\r\n margin-bottom: 12px;\r\n & > * {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n @media (max-width: 1010px) {\r\n & .wrap-sticky {\r\n top: 0;\r\n height: 100%;\r\n & .wrap-left {\r\n width: 100%;\r\n }\r\n & .wrap-right {\r\n display: none;\r\n }\r\n }\r\n }\r\n // @media (max-width: 996px) {\r\n // & .wrap-sticky {\r\n // & .wrap-left {\r\n // width: 100%;\r\n // }\r\n // & .wrap-right {\r\n // display: none;\r\n // }\r\n // }\r\n // }\r\n // @media (max-width: 820px) {\r\n // & .wrap-sticky {\r\n // top: 49px;\r\n // height: calc(100% - 49px);\r\n // }\r\n // }\r\n // @media (max-width: 767px) {\r\n // & .wrap-sticky {\r\n // top: 53px;\r\n // height: calc(100% - 53px);\r\n // }\r\n // }\r\n`\r\nconst WrapContent: any = styled.div`\r\n margin: 0;\r\n display: flex;\r\n & .devitem-line {\r\n &:before {\r\n margin-left: 0;\r\n margin-right: 0;\r\n }\r\n }\r\n & .left {\r\n width: 40%;\r\n margin-right: 12px;\r\n margin-bottom: ${(props: any) =>\r\n props?.actionsHeight ? `${props?.actionsHeight + 55}px` : \"0px\"};\r\n margin-top: 95px;\r\n }\r\n & .right {\r\n position: fixed;\r\n display: flex;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n height: 100%;\r\n pointer-events: none;\r\n opacity: 0;\r\n transition: 0.5s;\r\n &.show-right {\r\n transition-delay: 0.7s;\r\n left: 50%;\r\n opacity: 1;\r\n }\r\n & .wrap-left {\r\n width: 40%;\r\n margin-right: 12px;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: end;\r\n }\r\n & .wrap-right {\r\n width: calc(100% - 40% - 12px);\r\n\r\n & > * {\r\n height: 100%;\r\n }\r\n }\r\n & .wrap-map {\r\n height: 100%;\r\n max-height: calc(100% - 60px - 28px);\r\n }\r\n }\r\n\r\n & .one-part {\r\n background-color: var(--color-text-fff);\r\n box-shadow: 0px 0px 10px 0px #0000001a;\r\n padding: 24px;\r\n }\r\n & .wrap-map {\r\n max-height: 680px;\r\n height: 100%;\r\n border-radius: 0;\r\n & .gm-control-active {\r\n pointer-events: auto;\r\n }\r\n }\r\n @media (max-width: 991px) {\r\n flex-direction: column;\r\n & .left {\r\n width: 100%;\r\n margin-right: 0;\r\n overflow-y: auto;\r\n }\r\n & .right {\r\n display: none;\r\n }\r\n & .mobile-mt-30px {\r\n margin-top: 30px;\r\n }\r\n & .one-part {\r\n padding: 16px;\r\n }\r\n }\r\n`\r\nconst WrapButtons: any = styled.div`\r\n &.wrap-buttons {\r\n margin-left: -12px;\r\n margin-right: -12px;\r\n padding-left: 12px;\r\n padding-right: 16px;\r\n padding-top: 12px;\r\n padding-bottom: 24px;\r\n background: #f8f8f8;\r\n min-width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n & .m-order-action {\r\n display: grid;\r\n grid-template-columns: repeat(\r\n ${(props: any) => props?.btnLength},\r\n minmax(0px, 1fr)\r\n );\r\n width: 85%;\r\n gap: 0.5rem;\r\n & button {\r\n pointer-events: auto;\r\n }\r\n & button:active {\r\n box-shadow: none !important;\r\n border: 1px solid transparent;\r\n }\r\n }\r\n & .w-msg-above-actions {\r\n width: 65%;\r\n margin-bottom: 16px;\r\n }\r\n }\r\n @media (max-width: 1299px) {\r\n &.wrap-buttons {\r\n padding-left: 6px;\r\n }\r\n }\r\n @media (max-width: 996px) {\r\n &.wrap-buttons {\r\n padding-left: 11px;\r\n padding-right: 8px;\r\n padding-bottom: 16px;\r\n margin-right: -20px;\r\n & .m-order-action {\r\n width: 100%;\r\n }\r\n & .w-msg-above-actions {\r\n width: 100%;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapLoading = styled.div`\r\n margin: 0;\r\n display: flex;\r\n & .left {\r\n width: 40%;\r\n margin-right: 12px;\r\n & .one-part {\r\n height: calc(100vh - 60px - 15px * 3 - 90px - 24px - 55px);\r\n margin-top: 15px;\r\n & > span {\r\n display: flex;\r\n height: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n &.actions {\r\n // margin-top: 15px;\r\n height: 90px;\r\n }\r\n &.header-title {\r\n height: 55px;\r\n margin-top: 0;\r\n }\r\n }\r\n }\r\n & .right {\r\n width: calc(60% - 12px);\r\n height: calc(100vh - 60px - 15px - 24px);\r\n & > span {\r\n display: flex;\r\n height: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n @media (max-width: 1010px) {\r\n flex-direction: column;\r\n & .left {\r\n width: 100%;\r\n }\r\n & .right {\r\n display: none;\r\n }\r\n & .left {\r\n margin-right: 12px;\r\n & .one-part {\r\n height: calc(100vh - 15px * 3 - 90px - 24px - 55px);\r\n }\r\n }\r\n }\r\n`\r\nexport const WrapPartWithIcon = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n & .wrap-title {\r\n align-items: center;\r\n width: calc(100% - 20px);\r\n padding-right: 10px;\r\n color: var(--mauden);\r\n i {\r\n display: flex;\r\n font-size: 20px;\r\n margin-right: 10px;\r\n height: 25px;\r\n align-items: center;\r\n }\r\n }\r\n`\r\nexport default connector(MyUITripDetail)\r\n","import classNames from \"classnames\"\r\nimport { HUtils } from \"@macashipo/mlib\"\r\nimport Skeleton from \"react-loading-skeleton\"\r\nimport { Button } from \"reactstrap\"\r\nimport { MyModal } from \"src/core/components\"\r\nimport { detailFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst MyUICarName = props => {\r\n const { data, fnList } = props\r\n const name = data?.[detailFields.fName]\r\n\r\n const getConfigFromFirstSettingDetail = key => {\r\n if (fnList?.getDataFirstSettingByKey) {\r\n const detail = fnList?.getDataFirstSettingByKey(\r\n \"DefaultValues.websiteSetting.detail\"\r\n )\r\n return HUtils.get(detail, key)\r\n }\r\n return\r\n }\r\n\r\n const onHanleBtnShare = () => {\r\n const shareSettings = getConfigFromFirstSettingDetail(\"shareSettings\") || {}\r\n MyModal.showFromMyUI(\r\n {\r\n type: \"sg_share\",\r\n data: data,\r\n shareSettings: shareSettings,\r\n },\r\n {\r\n size: \"top\",\r\n showHeader: false,\r\n showHeaderClose: false,\r\n modalClassName: \"modal-share\",\r\n }\r\n )\r\n }\r\n const isShowLike = getConfigFromFirstSettingDetail(\"canShowLike\")\r\n return (\r\n \r\n
\r\n
\r\n {name || }\r\n
\r\n {name && (\r\n \r\n
\r\n \r\n \r\n
\r\n {isShowLike && (\r\n
\r\n \r\n \r\n
\r\n )}\r\n
\r\n )}\r\n \r\n
\r\n )\r\n}\r\nconst Wrap = styled.div`\r\n padding-bottom: 20px;\r\n & .wrap-content {\r\n display: flex;\r\n align-items: flex-start;\r\n justify-content: space-between;\r\n }\r\n & .name {\r\n font-weight: 700;\r\n font-size: 40px;\r\n line-height: 55px;\r\n max-width: calc(100% - 250px - 15px);\r\n padding-right: 15px;\r\n color: var(--color-text-000);\r\n &.has-loading {\r\n min-width: calc(100% - 250px - 15px);\r\n }\r\n }\r\n & .wrap-actions {\r\n padding-top: 10px;\r\n display: flex;\r\n justify-content: space-between;\r\n width: 250px;\r\n &.justify-end {\r\n justify-content: flex-end;\r\n }\r\n & .one-button {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n }\r\n & .circle {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n border-radius: 50%;\r\n background-color: white;\r\n height: 38px;\r\n width: 38px;\r\n text-align: center;\r\n line-height: 39px;\r\n color: #888;\r\n font-size: 17px;\r\n border: 1px solid var(--color-border-dfdfdf);\r\n margin-right: 7px;\r\n cursor: pointer;\r\n }\r\n @media (max-width: 767px) {\r\n & .name {\r\n font-size: 32px;\r\n line-height: 45px;\r\n max-width: calc(100% - 80px - 15px);\r\n padding-right: 15px;\r\n color: var(--color-text-000);\r\n &.has-loading {\r\n min-width: calc(100% - 80px - 15px);\r\n }\r\n }\r\n & .wrap-actions {\r\n padding-top: 5px;\r\n width: 80px;\r\n & .one-button {\r\n & button {\r\n display: none;\r\n }\r\n }\r\n }\r\n }\r\n`\r\nexport default MyUICarName\r\n","import classNames from \"classnames\"\r\nimport classnames from \"classnames\"\r\nimport React, { useEffect, useState } from \"react\"\r\nimport Skeleton from \"react-loading-skeleton\"\r\nimport OwlCarousel from \"react-owl-carousel2\"\r\nimport { MyModal, MyUI } from \"src/core/components\"\r\nimport { detailFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst MyUICarImageSlide = props => {\r\n const {\r\n allData,\r\n className,\r\n config,\r\n configFromFirstSetting,\r\n loading,\r\n mobileWidth,\r\n } = props\r\n const [isMobileView, setIsMobileView] = useState(false)\r\n const [itemCount, setItemCount] = useState(4)\r\n const { data } = allData || {}\r\n const { imageSlides, shareSettings, fancyboxSettings } =\r\n configFromFirstSetting || {}\r\n\r\n useEffect(() => {\r\n const ro = new ResizeObserver((entries, observer) => {\r\n for (const entry of entries) {\r\n const { left, top, width, height } = entry.contentRect\r\n if (entry.target == document.body) {\r\n if (width <= mobileWidth) {\r\n if (isMobileView === false) {\r\n setIsMobileView(true)\r\n setItemCount(2)\r\n }\r\n } else {\r\n setIsMobileView(false)\r\n }\r\n if (width <= 767) {\r\n setItemCount(1)\r\n }\r\n }\r\n }\r\n })\r\n ro.observe(document.body)\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n /** Get */\r\n const getNewArray = item => {\r\n const arr = Array.from({ length: item }, (_, index) => index + 1)\r\n return arr\r\n }\r\n const getCanShowBtnPreviewImages = () => {\r\n if (config?.showBtnPreview && data?.length >= itemCount) {\r\n return true\r\n }\r\n return false\r\n }\r\n /** */\r\n const onHanleShare = () => {\r\n MyModal.showFromMyUI(\r\n {\r\n type: \"sg_share\",\r\n data: allData,\r\n shareSettings: shareSettings,\r\n },\r\n {\r\n size: \"top\",\r\n showHeader: false,\r\n showHeaderClose: false,\r\n modalClassName: \"modal-share\",\r\n }\r\n )\r\n }\r\n /** Render */\r\n const renderLoading = () => {\r\n let emptyImgs: any = getNewArray(3)\r\n if (isMobileView) {\r\n emptyImgs = getNewArray(1)\r\n }\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n {emptyImgs &&\r\n emptyImgs?.length > 0 &&\r\n emptyImgs.map((v, i) => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n })}\r\n
\r\n
\r\n )\r\n }\r\n const renderImage = (fancyboxName?: any) => {\r\n let otherImgs: any = []\r\n let firstImg = \"\"\r\n let emptyImgs: any = []\r\n let hiddenImgs: any = []\r\n let item = 3\r\n if (data) {\r\n if (data?.length > 0) {\r\n firstImg = data[0]\r\n }\r\n if (data?.length > 1 && item) {\r\n otherImgs = data?.slice(1, item + 1)\r\n }\r\n if (data?.length > 4) {\r\n hiddenImgs = data?.slice(4)\r\n }\r\n if (otherImgs && otherImgs?.length < item) {\r\n emptyImgs = getNewArray(config?.item - otherImgs?.length)\r\n }\r\n }\r\n return (\r\n \r\n
\r\n \r\n \"car_image\"\r\n \r\n
\r\n
\r\n {otherImgs &&\r\n otherImgs?.length > 0 &&\r\n otherImgs?.map((v, i) => {\r\n return (\r\n 0 && \"hidden\"\r\n )}\r\n key={i}\r\n href={v}\r\n data-fancybox={fancyboxName}\r\n >\r\n \"car_mage\"\r\n \r\n )\r\n })}\r\n {imageSlides?.showEmptyImg &&\r\n emptyImgs &&\r\n emptyImgs?.length > 0 &&\r\n emptyImgs.map((v, i) => {\r\n return (\r\n
\r\n )\r\n })}\r\n {hiddenImgs &&\r\n hiddenImgs?.length > 0 &&\r\n hiddenImgs.map((v, i) => {\r\n return (\r\n \r\n \"car_mage\"\r\n \r\n )\r\n })}\r\n
\r\n
\r\n )\r\n }\r\n if (data?.length > 0) {\r\n const fancyboxName = \"images\"\r\n const canShowPreview = getCanShowBtnPreviewImages()\r\n const { infinite = false } = fancyboxSettings || {}\r\n return (\r\n \r\n `,\r\n click: e => {\r\n onHanleShare()\r\n },\r\n },\r\n },\r\n display: {\r\n left: [],\r\n middle: [],\r\n right: [\"slideshow\", \"fullscreen\", \"thumbs\", \"share\", \"close\"],\r\n },\r\n },\r\n }}\r\n >\r\n {({ show }) => {\r\n return (\r\n <>\r\n {renderImage(fancyboxName)}\r\n {canShowPreview && (\r\n {\r\n show && show()\r\n }}\r\n >\r\n \r\n {imageSlides?.textBtnPreview}\r\n \r\n )}\r\n \r\n )\r\n }}\r\n \r\n \r\n )\r\n } else if (loading) {\r\n return {renderLoading()}\r\n }\r\n return <>\r\n}\r\nconst WrapLoading: any = styled.div`\r\n display: flex;\r\n & .first-image {\r\n width: calc(66.6667% - 8px);\r\n margin-right: 8px;\r\n height: 570px;\r\n & > span {\r\n display: block;\r\n height: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n & .others-image {\r\n width: 33.3333%;\r\n & .one-other-image {\r\n margin-bottom: 8px;\r\n display: block;\r\n height: 185px;\r\n & > span {\r\n display: block;\r\n height: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n }\r\n @media (max-width: ${(props: any) => props.mobileWidth}px) {\r\n & .first-image {\r\n width: calc(50% - 4px);\r\n margin-right: 8px;\r\n height: 300px;\r\n }\r\n & .others-image {\r\n width: calc(50% - 4px);\r\n & .one-other-image {\r\n height: 300px;\r\n }\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .first-image {\r\n width: 100%;\r\n margin-right: 0;\r\n height: 300px;\r\n }\r\n & .others-image {\r\n display: none;\r\n }\r\n }\r\n`\r\nconst WrapImage: any = styled.div`\r\n display: flex;\r\n & .first-image {\r\n width: calc(66.6667% - 8px);\r\n margin-right: 8px;\r\n img {\r\n height: 570px;\r\n width: 100%;\r\n object-fit: cover;\r\n border-radius: 15px 0 0 15px;\r\n }\r\n }\r\n & .others-image {\r\n width: 33.3333%;\r\n img {\r\n max-height: 185px;\r\n width: 100%;\r\n object-fit: cover;\r\n border-radius: 0 15px 15px 0;\r\n }\r\n & .one-other-image {\r\n margin-bottom: 8px;\r\n display: block;\r\n &.empty {\r\n background-color: #e3e1e1;\r\n width: 100%;\r\n height: 185px;\r\n border-radius: 0 15px 15px 0;\r\n }\r\n &.hidden {\r\n display: none;\r\n }\r\n }\r\n }\r\n @media (min-width: 992px) {\r\n // & .first-image {\r\n // height: 570px;\r\n // background-color: #ededed;\r\n // border-radius: 15px 0 0 15px;\r\n // img {\r\n // object-fit: contain;\r\n // }\r\n // }\r\n }\r\n @media (max-width: 992px) {\r\n & .first-image {\r\n width: calc(50% - 4px);\r\n margin-right: 8px;\r\n img {\r\n max-height: 300px;\r\n width: 100%;\r\n }\r\n }\r\n & .others-image {\r\n width: calc(50% - 4px);\r\n img {\r\n max-height: 300px;\r\n height: 300px;\r\n width: 100%;\r\n }\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .first-image {\r\n width: 100%;\r\n margin-right: 0;\r\n img {\r\n max-height: 300px;\r\n width: 100%;\r\n border-radius: 15px;\r\n }\r\n }\r\n & .others-image {\r\n display: none;\r\n }\r\n }\r\n`\r\nconst Wrap = styled.div`\r\n position: relative;\r\n .owl-carousel,\r\n .owl-carousel .owl-item {\r\n -webkit-tap-highlight-color: transparent;\r\n position: relative;\r\n }\r\n\r\n .owl-carousel {\r\n display: none;\r\n width: 100%;\r\n z-index: 1;\r\n }\r\n\r\n .owl-carousel .owl-stage {\r\n position: relative;\r\n -ms-touch-action: pan-Y;\r\n -moz-backface-visibility: hidden;\r\n }\r\n\r\n .owl-carousel .owl-stage:after {\r\n content: \".\";\r\n display: block;\r\n clear: both;\r\n visibility: hidden;\r\n line-height: 0;\r\n height: 0;\r\n }\r\n\r\n .owl-carousel .owl-stage-outer {\r\n position: relative;\r\n overflow: hidden;\r\n -webkit-transform: translate3d(0, 0, 0);\r\n }\r\n\r\n .owl-carousel .owl-item,\r\n .owl-carousel .owl-wrapper {\r\n -webkit-backface-visibility: hidden;\r\n -moz-backface-visibility: hidden;\r\n -ms-backface-visibility: hidden;\r\n -webkit-transform: translate3d(0, 0, 0);\r\n -moz-transform: translate3d(0, 0, 0);\r\n -ms-transform: translate3d(0, 0, 0);\r\n }\r\n\r\n .owl-carousel .owl-item {\r\n min-height: 1px;\r\n float: left;\r\n -webkit-backface-visibility: hidden;\r\n -webkit-touch-callout: none;\r\n }\r\n\r\n .owl-carousel .owl-item img {\r\n display: block;\r\n width: 100%;\r\n height: 400px;\r\n object-fit: cover;\r\n }\r\n\r\n .owl-carousel .owl-dots.disabled,\r\n .owl-carousel .owl-nav.disabled {\r\n display: none;\r\n }\r\n\r\n .no-js .owl-carousel,\r\n .owl-carousel.owl-loaded {\r\n display: block;\r\n }\r\n\r\n .owl-carousel .owl-dot,\r\n .owl-carousel .owl-nav .owl-next,\r\n .owl-carousel .owl-nav .owl-prev {\r\n cursor: pointer;\r\n cursor: hand;\r\n -webkit-user-select: none;\r\n -khtml-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n }\r\n\r\n .owl-carousel.owl-loading {\r\n opacity: 0;\r\n display: block;\r\n }\r\n\r\n .owl-carousel.owl-hidden {\r\n opacity: 0;\r\n }\r\n\r\n .owl-carousel.owl-refresh .owl-item {\r\n visibility: hidden;\r\n }\r\n\r\n .owl-carousel.owl-drag .owl-item {\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n }\r\n\r\n .owl-carousel.owl-grab {\r\n cursor: move;\r\n cursor: grab;\r\n }\r\n\r\n .owl-carousel.owl-rtl {\r\n direction: rtl;\r\n }\r\n\r\n .owl-carousel.owl-rtl .owl-item {\r\n float: right;\r\n }\r\n\r\n .owl-carousel .animated {\r\n animation-duration: 1s;\r\n animation-fill-mode: both;\r\n }\r\n\r\n .owl-carousel .owl-animated-in {\r\n z-index: 0;\r\n }\r\n\r\n .owl-carousel .owl-animated-out {\r\n z-index: 1;\r\n }\r\n\r\n .owl-carousel .fadeOut {\r\n animation-name: fadeOut;\r\n }\r\n\r\n @keyframes fadeOut {\r\n 0% {\r\n opacity: 1;\r\n }\r\n\r\n 100% {\r\n opacity: 0;\r\n }\r\n }\r\n\r\n .owl-height {\r\n transition: height 0.5s ease-in-out;\r\n }\r\n\r\n .owl-carousel .owl-item .owl-lazy {\r\n opacity: 0;\r\n transition: opacity 0.4s ease;\r\n }\r\n\r\n .owl-carousel .owl-item img.owl-lazy {\r\n transform-style: preserve-3d;\r\n }\r\n\r\n .owl-carousel .owl-video-wrapper {\r\n position: relative;\r\n height: 100%;\r\n background: #000;\r\n }\r\n\r\n .owl-carousel .owl-video-play-icon {\r\n position: absolute;\r\n height: 80px;\r\n width: 80px;\r\n left: 50%;\r\n top: 50%;\r\n margin-left: -40px;\r\n margin-top: -40px;\r\n background: url(owl.video.play.png) no-repeat;\r\n cursor: pointer;\r\n z-index: 1;\r\n -webkit-backface-visibility: hidden;\r\n transition: transform 0.1s ease;\r\n }\r\n\r\n .owl-carousel .owl-video-play-icon:hover {\r\n -ms-transform: scale(1.3, 1.3);\r\n transform: scale(1.3, 1.3);\r\n }\r\n\r\n .owl-carousel .owl-video-playing .owl-video-play-icon,\r\n .owl-carousel .owl-video-playing .owl-video-tn {\r\n display: none;\r\n }\r\n\r\n .owl-carousel .owl-video-tn {\r\n opacity: 0;\r\n height: 100%;\r\n background-position: center center;\r\n background-repeat: no-repeat;\r\n background-size: contain;\r\n transition: opacity 0.4s ease;\r\n }\r\n\r\n .owl-carousel .owl-video-frame {\r\n position: relative;\r\n z-index: 1;\r\n height: 100%;\r\n width: 100%;\r\n }\r\n & .show-images,\r\n & .show-images:hover,\r\n & .show-images:focus,\r\n & .show-images:active {\r\n background-color: var(--color-text-fff);\r\n border: 1px solid var(--color-border-dfdfdf);\r\n color: var(--color-text-000);\r\n font-size: 14px;\r\n font-weight: 500;\r\n display: flex;\r\n align-items: center;\r\n position: absolute;\r\n bottom: 20px;\r\n right: 20px;\r\n z-index: 1;\r\n i {\r\n margin-right: 5px;\r\n font-size: 16px;\r\n display: flex;\r\n width: 16px;\r\n height: 16px;\r\n align-items: center;\r\n justify-content: center;\r\n color: #6c6c6c;\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n .owl-carousel .owl-item img {\r\n height: 300px;\r\n }\r\n }\r\n`\r\nconst WrapShare = styled.div`\r\n border-radius: 3px;\r\n & .fancybox-share_button {\r\n display: inline-block;\r\n text-decoration: none;\r\n margin: 0 10px 10px 0;\r\n padding: 10px 20px;\r\n border: 0;\r\n border-radius: 3px;\r\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.16);\r\n background: #fff;\r\n white-space: nowrap;\r\n font-size: 16px;\r\n line-height: 23px;\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n min-width: 140px;\r\n color: #707070;\r\n transition: all 0.2s;\r\n & svg {\r\n margin-right: 5px;\r\n width: 20px;\r\n height: 20px;\r\n vertical-align: text-bottom;\r\n }\r\n }\r\n & input {\r\n box-sizing: border-box;\r\n width: 100%;\r\n margin: 5px 0 0;\r\n padding: 10px 15px;\r\n border: 1px solid #d7d7d7;\r\n border-radius: 3px;\r\n background: #ebebeb;\r\n color: #5d5b5b;\r\n font-size: 14px;\r\n outline: none;\r\n }\r\n`\r\nexport default MyUICarImageSlide\r\n","import { HLink } from \"@macashipo/mlib\"\r\nimport { useState } from \"react\"\r\nimport { Button } from \"reactstrap\"\r\nimport { MyUI } from \"src/core/components\"\r\nimport { historyFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst AddressDirection = props => {\r\n const { data, fnList, buttonCode, isPaid, canShowButton } = props\r\n const [copied, setCopied] = useState(false)\r\n const UserTakeLat = data?.[historyFields.fLatitude]\r\n const UserTakeLng = data?.[historyFields.fLongitude]\r\n\r\n const getDirectionLink = () => {\r\n return `https://www.google.com/maps/dir/?api=1&destination=${UserTakeLat},${UserTakeLng}`\r\n }\r\n const getCopyLink = () => {\r\n return `https://maps.google.com/?q=${UserTakeLat},${UserTakeLng}`\r\n }\r\n const getDescription = () => {\r\n let des = \"\"\r\n if (data?.[historyFields.fIsUserTakeSelected] && isPaid) {\r\n des = data?.[historyFields.fAddress]\r\n } else {\r\n des = data?.[historyFields.fDeliveryAddress]\r\n }\r\n return des\r\n }\r\n const copyLink = async () => {\r\n let src = getCopyLink()\r\n if (src) {\r\n await navigator.clipboard.writeText(src)\r\n setCopied(true)\r\n setTimeout(() => {\r\n setCopied(false)\r\n }, 1200)\r\n }\r\n }\r\n const openLink = () => {\r\n const link = getDirectionLink()\r\n HLink.openUrl(link, \"_blank\")\r\n }\r\n // Render\r\n const renderMessage = () => {\r\n const msg = \"Sao chép thành công!\"\r\n if (copied && msg) {\r\n return (\r\n \r\n \r\n {msg}\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n const renderDescription = () => {\r\n let text = getDescription() || \"\"\r\n return
{text}
\r\n }\r\n const renderMap = () => {\r\n const UserTakeLat = data?.[historyFields.fLatitude]\r\n const UserTakeLng = data?.[historyFields.fLongitude]\r\n if (UserTakeLng && UserTakeLat) {\r\n return (\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n const renderActions = () => {\r\n if (canShowButton) {\r\n return (\r\n
\r\n \r\n \r\n
\r\n )\r\n }\r\n return <>\r\n }\r\n return (\r\n \r\n {renderDescription()}\r\n {renderMap()}\r\n {renderActions()}\r\n {renderMessage()}\r\n \r\n )\r\n}\r\nconst WrapMessage = styled.div`\r\n border: 1px solid var(--color-border-dfdfdf);\r\n display: flex;\r\n width: fit-content;\r\n align-items: center;\r\n padding: 5px 10px;\r\n border-radius: 8px;\r\n position: absolute;\r\n background-color: var(--color-text-fff);\r\n font-size: 14px;\r\n bottom: -30px;\r\n left: 50%;\r\n opacity: 0;\r\n transform: translateX(-50%);\r\n animation: smooth-appear 0.5s ease-in-out forwards;\r\n @keyframes smooth-appear {\r\n to {\r\n bottom: 5px;\r\n opacity: 1;\r\n }\r\n }\r\n & .flaticon-check {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n border-radius: 50%;\r\n background-color: white;\r\n height: 16px;\r\n width: 16px;\r\n color: var(--color-text-fff);\r\n font-size: 10px;\r\n background-color: green;\r\n margin-right: 5px;\r\n margin-top: -1px;\r\n }\r\n`\r\nconst Footer = styled.div`\r\n display: grid;\r\n grid-template-columns: repeat(2, minmax(0px, 1fr));\r\n gap: 1rem;\r\n & button {\r\n font-size: 16px;\r\n }\r\n @media (max-width: 767px) {\r\n grid-template-columns: repeat(1, minmax(0px, 1fr));\r\n }\r\n`\r\nconst Wrap = styled.div`\r\n & .description {\r\n font-size: 24px;\r\n line-height: 33px;\r\n padding-bottom: 20px;\r\n margin-top: -15px;\r\n }\r\n & .wrap-map {\r\n height: 349px !important;\r\n }\r\n`\r\nexport default AddressDirection\r\n","import { historyFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst RentalDocuments = props => {\r\n const { data } = props\r\n const getDescription = () => {\r\n const list = data?.[historyFields.fDocuments] || []\r\n if (list?.length > 1) {\r\n return `Bạn phải chuẩn bị ${list?.length} loại giấy tờ cá nhân sau đây`\r\n }\r\n return \"Bạn phải chuẩn bị giấy tờ cá nhân sau đây\"\r\n }\r\n const renderRentalDocuments = () => {\r\n const list = data?.[historyFields.fDocuments]\r\n if (list && list?.length > 0) {\r\n return (\r\n
\r\n
Giấy tờ khi thuê
\r\n
{getDescription()}
\r\n \r\n {list?.map((v, i) => {\r\n const icon = v?.Icon || v?.IconUrl || \"\"\r\n let isIconFont = false\r\n if (icon && icon?.startsWith(\"flaticon\")) {\r\n isIconFont = true\r\n }\r\n return (\r\n
\r\n {isIconFont ? (\r\n \r\n ) : (\r\n // \r\n \"\"\r\n )}\r\n
{v?.Text}
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n )\r\n }\r\n return <>\r\n }\r\n const renderSelectedSecurity = () => {\r\n const list = data?.[historyFields.fSecurity]\r\n if (list && list?.length > 0) {\r\n return (\r\n
\r\n
Tài sản thế chấp
\r\n
Tài sản thế chấp được lựa chọn
\r\n \r\n {list?.map((v, i) => {\r\n const icon = v?.Icon || v?.IconUrl || \"\"\r\n let isIconFont = false\r\n if (icon && icon?.startsWith(\"flaticon\")) {\r\n isIconFont = true\r\n }\r\n return (\r\n
\r\n {isIconFont ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
{v?.Text}
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n )\r\n }\r\n return <>\r\n }\r\n return (\r\n \r\n {renderRentalDocuments()}\r\n {renderSelectedSecurity()}\r\n \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n & .title {\r\n color: #575757;\r\n font-size: 20px;\r\n font-weight: 700;\r\n }\r\n & .des {\r\n color: #575757;\r\n padding-top: 15px;\r\n }\r\n & .devitem-line {\r\n margin-top: 30px;\r\n }\r\n`\r\nconst WrapDocuments = styled.div`\r\n &.wrap-list {\r\n display: grid;\r\n grid-template-columns: repeat(4, minmax(0px, 1fr));\r\n gap: 1rem;\r\n margin-right: 0px;\r\n margin-left: 0px;\r\n }\r\n & .one-document {\r\n border: 1px solid var(--color-border-d3d3d3);\r\n padding: 15px;\r\n border-radius: 10px;\r\n img {\r\n width: 40px;\r\n max-height: 40px;\r\n object-fit: cover;\r\n display: flex;\r\n }\r\n i {\r\n font-size: 40px;\r\n color: var(--color-text-000);\r\n display: flex;\r\n }\r\n & .name {\r\n padding-top: 15px;\r\n font-weight: 600;\r\n font-size: 16px;\r\n line-height: 21.86px;\r\n color: #404040;\r\n }\r\n }\r\n @media (max-width: 1499x) {\r\n &.wrap-list {\r\n grid-template-columns: repeat(3, minmax(0px, 1fr));\r\n }\r\n }\r\n @media (max-width: 1199x) {\r\n &.wrap-list {\r\n grid-template-columns: repeat(3, minmax(0px, 1fr));\r\n }\r\n }\r\n @media (max-width: 567px) {\r\n &.wrap-list {\r\n grid-template-columns: repeat(1, minmax(0px, 1fr));\r\n gap: 0.75rem;\r\n }\r\n }\r\n`\r\nexport default RentalDocuments\r\n","import { HLink, HUtils, MyControl, MyUI } from \"@macashipo/mlib\"\r\nimport { MyModal } from \"src/core/components\"\r\nimport { historyFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\nimport { isNotEmpty } from \"src/core/helpers/utils\"\r\nimport classNames from \"classnames\"\r\nimport { Button } from \"reactstrap\"\r\nimport { useForceUpdate } from \"src/modules/app_sigo/hooks/useForceUpdate\"\r\nimport AddressDirection from \"./AddressDirection\"\r\nimport RentalDocuments from \"./RentalDocuments\"\r\n\r\nconst UITypes = {\r\n documents: (data, config, { fnList }) => {\r\n const { icon, title, description, fieldData } = config || {}\r\n const handleOpenModal = () => {\r\n MyModal.showFromComponent(, {\r\n size: \"lg\",\r\n modalClassName:\r\n \"default modal-filter modal-understood-footer modal-scrollable-inside\",\r\n onScrollContent: true,\r\n title: \"Thủ tục nhận xe\",\r\n modalScrollInside: true,\r\n showFooterClose: true,\r\n titleBtnClose: \"Đã hiểu\",\r\n showFooter: true,\r\n onClickClose: () => {\r\n MyModal.hideModalScrollContent(\"component\")\r\n },\r\n })\r\n }\r\n return (\r\n \r\n {icon && }\r\n
\r\n
{title}
\r\n
{description}
\r\n
\r\n \r\n )\r\n },\r\n address_direction: (data, config, { fnList, buttonCode }) => {\r\n const { icon, title, fieldData, statusNotPaidYet } = config || {}\r\n const getIsPaid = () => {\r\n const statusCode = data?.[historyFields.fOrderStatusCode]\r\n let notPaidYet = false\r\n if (statusCode && statusNotPaidYet && statusNotPaidYet?.length > 0) {\r\n if (statusNotPaidYet.findIndex(v => v === statusCode) > -1) {\r\n notPaidYet = true\r\n }\r\n }\r\n return notPaidYet\r\n }\r\n const getCanShowDirectionButton = () => {\r\n let notPaidYet = getIsPaid()\r\n if (data?.[historyFields.fIsUserTakeSelected] && notPaidYet) {\r\n return false\r\n }\r\n return true\r\n }\r\n const getDescription = () => {\r\n let notPaidYet = getIsPaid()\r\n let des = \"\"\r\n if (data?.[historyFields.fIsUserTakeSelected] && notPaidYet) {\r\n des = \"Địa điểm chính xác sẽ hiển thị khi hoàn tất đặt cọc\"\r\n } else {\r\n des = data?.[historyFields.fDeliveryAddress]\r\n }\r\n return des\r\n }\r\n const handleOpenDirection = () => {\r\n MyModal.showFromComponent(\r\n ,\r\n {\r\n size: \"lg\",\r\n modalClassName: \"default modal-filter modal-scrollable-inside\",\r\n onScrollContent: true,\r\n title: \"Hướng dẫn chỉ đường\",\r\n modalScrollInside: true,\r\n }\r\n )\r\n }\r\n return (\r\n \r\n {icon && }\r\n
\r\n
{title}
\r\n
{getDescription()}
\r\n
\r\n \r\n )\r\n },\r\n popup_html: (data, config) => {\r\n const { icon, title, description, fieldData, code } = config || {}\r\n const listThingsToKnow = data?.[fieldData] || []\r\n let _data: any = null\r\n if (listThingsToKnow?.length > 0 && code) {\r\n listThingsToKnow.every(v => {\r\n if (v?.Code === code) {\r\n _data = { ...v }\r\n return false\r\n }\r\n return true\r\n })\r\n }\r\n const fullDescription = _data?.Content || \"\"\r\n const onOpenModal = () => {\r\n MyModal.showFromComponent(\r\n ,\r\n {\r\n title: _data?.Title,\r\n modalClassName:\r\n \"default modal-filter modal-understood-footer modal-scrollable-inside\",\r\n onScrollContent: true,\r\n titleBtnClose: \"Đã hiểu\",\r\n modalScrollInside: true,\r\n showFooter: true,\r\n showFooterClose: true,\r\n onClickClose: () => {\r\n MyModal.hideModalScrollContent(\"component\")\r\n },\r\n }\r\n )\r\n }\r\n if (_data) {\r\n return (\r\n \r\n {icon && }\r\n
\r\n
{title}
\r\n
{description}
\r\n
\r\n \r\n )\r\n }\r\n return <>\r\n },\r\n link: (data, config) => {\r\n const { icon, title, description, fieldData, moreStyleIcon } = config || {}\r\n const link = data?.[fieldData]\r\n const onOpenLink = () => {\r\n if (link) {\r\n HLink.openUrl(`/${link}`, \"_blank\")\r\n }\r\n }\r\n return (\r\n \r\n {icon && }\r\n
\r\n
{title}
\r\n
{description}
\r\n
\r\n \r\n )\r\n },\r\n}\r\nconst GeneralInfo = props => {\r\n const { data, config, fnList, buttonCode, statusCodeList, statusNotPaidYet } =\r\n props\r\n const statusCode = data?.[historyFields.fOrderStatusCode]\r\n const [keyUI, forceUpdate] = useForceUpdate()\r\n\r\n /** get */\r\n const getPartsConfig = () => {\r\n return [\r\n {\r\n type: \"address_direction\",\r\n canShow: true,\r\n classWrap: \"\",\r\n fieldData: historyFields.fDeliveryAddress,\r\n title: \"Hướng dẫn địa chỉ nhận xe\",\r\n icon: \"flaticon-pin\",\r\n statusNotPaidYet: statusNotPaidYet,\r\n },\r\n {\r\n type: \"documents\",\r\n canShow: true,\r\n classWrap: \"\",\r\n title: \"Thủ tục nhận xe\",\r\n description: \"Giấy tờ thuê xe và tài sản thế chấp\",\r\n icon: \"flaticon-driving-license\",\r\n },\r\n {\r\n type: \"popup_html\",\r\n canShow: true,\r\n classWrap: \"\",\r\n title: \"Những điều cần biết\",\r\n description: \"Quy định chung về sử dụng xe & hủy chuyến\",\r\n icon: \"flaticon-resume\",\r\n code: \"Things_To_Know_Rent_Experience\",\r\n fieldData: historyFields.fThingsToKnow,\r\n },\r\n {\r\n type: \"link\",\r\n canShow: true,\r\n classWrap: \"\",\r\n title: \"Thông tin xe thuê\",\r\n description: `${data?.[historyFields.fName]} - ${\r\n data?.[historyFields.fAddress]\r\n }`,\r\n fieldData: historyFields.fSlug,\r\n icon: \"flaticon-car-3\",\r\n moreStyleIcon: {\r\n fontSize: 40,\r\n width: 30,\r\n },\r\n },\r\n ]\r\n }\r\n /**other */\r\n\r\n /** render */\r\n const renderRating = () => {\r\n const rating = data?.[historyFields.fMyRating]\r\n let btnConfig = fnList?.getButtonConfigByCode(buttonCode?.Review)\r\n if (btnConfig) {\r\n const canReview = fnList?.getCanShowByBtnList(buttonCode?.Review)\r\n btnConfig = {\r\n ...btnConfig,\r\n Name: \"Đánh giá của bạn\",\r\n Code: \"NewReview\",\r\n canReview: canReview,\r\n defaultRating: rating,\r\n }\r\n }\r\n const buttonList = [{ ...btnConfig }]\r\n const moreConfigActions =\r\n fnList?.getConfigFromFirstSettingByKey(\"moreConfigActions\") || {}\r\n // only when status = DONE\r\n if (statusCode === statusCodeList?.DONE) {\r\n return (\r\n {\r\n fnList?.fnReloadList &&\r\n fnList?.fnReloadList({\r\n cbSuccess: () => {\r\n forceUpdate()\r\n },\r\n })\r\n },\r\n }}\r\n buttonList={buttonList}\r\n key={keyUI}\r\n moreConfig={{\r\n ...moreConfigActions,\r\n Review: {\r\n ...moreConfigActions?.[\"Review\"],\r\n review: {\r\n reviewContent: {\r\n title: \"Viết đánh giá công khai\",\r\n description:\r\n \"Chúng tôi sẽ hiển thị phần đánh giá này cho các khách thuê khác, và sau khi kết thúc giai đoạn đánh giá, chúng tôi sẽ đăng trên trang chủ của chủ xe [AnotherUserInfo.Name]\",\r\n },\r\n reviewRating: {\r\n title: \"Về tổng thể, chuyến đi của bạn thế nào?\",\r\n avatarField: `${historyFields.fAnotherUserInfo}.${historyFields.fAnotherUserAvatarUrl}`,\r\n description:\r\n \"Hãy cho chúng tôi một đánh giá chung nhất về toàn bộ trải nghiệm chuyến đi của bạn từ xe của chủ xe này\",\r\n },\r\n },\r\n },\r\n }}\r\n />\r\n )\r\n }\r\n return <>\r\n }\r\n const renderRetalDate = () => {\r\n const timeText = data?.[historyFields.fHeaderInfo] || {}\r\n const _slideConfig =\r\n fnList?.getConfigFromFirstSettingByKey(\"configTripCarImageSlide\") || {}\r\n const dfImage = config?.defaultImage\r\n let detailUrl = \"\"\r\n const imgList = data?.[historyFields.fRentalServiceItemImageUrls]\r\n const fromDate = data?.[historyFields.fFromDate_Format_1]\r\n const toDate = data?.[historyFields.fToDate_Format_1]\r\n return (\r\n \r\n {/* {timeText?.Title && (\r\n
{timeText?.Title}
\r\n )} */}\r\n {renderRating()}\r\n \r\n
\r\n
\r\n
Nhận xe
\r\n
{fromDate}
\r\n
\r\n
\r\n
Trả xe
\r\n
{toDate}
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n const renderInformationAndGuide = () => {\r\n const parts = getPartsConfig()\r\n return (\r\n \r\n {parts &&\r\n parts?.length > 0 &&\r\n parts.map((v, i) => {\r\n if (!isNotEmpty(v?.canShow) || v?.canShow) {\r\n return (\r\n \r\n {UITypes?.[v.type]\r\n ? UITypes[v.type](data, v, {\r\n fnList: {\r\n ...fnList,\r\n },\r\n buttonCode: buttonCode,\r\n })\r\n : null}\r\n \r\n )\r\n }\r\n return <>\r\n })}\r\n \r\n )\r\n }\r\n return (\r\n \r\n {renderRetalDate()}\r\n {renderInformationAndGuide()}\r\n \r\n )\r\n}\r\nconst Wrap = styled.div``\r\nconst WrapRentalDate = styled.div`\r\n & .react-rater {\r\n & .fa-star {\r\n font-size: 22px;\r\n width: 25px;\r\n color: #ccc;\r\n text-align: center;\r\n &.active,\r\n &.hover {\r\n color: var(--mau1);\r\n }\r\n }\r\n }\r\n & .img {\r\n width: 100%;\r\n object-fit: cover;\r\n max-height: 378px;\r\n border-radius: 15px;\r\n border: 1px solid #dfdfdf;\r\n }\r\n & .wrap-detail-slide {\r\n img {\r\n width: 100%;\r\n object-fit: cover;\r\n max-height: 378px;\r\n border-radius: 15px;\r\n border: 1px solid #dfdfdf;\r\n }\r\n }\r\n & .rental-date {\r\n justify-content: space-between;\r\n & .label {\r\n text-transform: uppercase;\r\n font-weight: 600;\r\n line-height: 26px;\r\n padding-bottom: 8px;\r\n }\r\n & .to,\r\n & .from {\r\n width: 50%;\r\n line-height: 26px;\r\n }\r\n & .from {\r\n border-right: 1px solid #edecec;\r\n }\r\n & .to {\r\n text-align: right;\r\n }\r\n }\r\n & .wrap-rating {\r\n margin-top: -10px;\r\n margin-bottom: 25px;\r\n & .tt {\r\n line-height: 22px;\r\n color: #5f5d5d;\r\n }\r\n & .mc_input_rate {\r\n margin-top: 10px;\r\n }\r\n }\r\n`\r\nconst WrapParts = styled.div`\r\n & .label {\r\n font-weight: 600;\r\n color: var(--mauden);\r\n }\r\n & .des {\r\n color: #9f9d9d;\r\n }\r\n`\r\nconst WrapOnePart = styled.div`\r\n display: flex;\r\n align-items: flex-start;\r\n i {\r\n font-size: 30px;\r\n display: flex;\r\n height: 30px;\r\n margin-right: 15px;\r\n color: var(--mauden);\r\n }\r\n & .wrap-content {\r\n width: calc(100% - 50px);\r\n }\r\n`\r\nconst WrapPartWithModal = styled.div``\r\nexport default GeneralInfo\r\n","import classNames from \"classnames\"\r\nimport { Button } from \"reactstrap\"\r\nimport { MyModal, MyUI } from \"src/core/components\"\r\nimport styled from \"styled-components\"\r\n\r\nexport const UITypes = {\r\n part_with_icon: (data, config) => {\r\n const {\r\n icon,\r\n fieldData,\r\n title,\r\n fnOnClick,\r\n moreStyleIcon = {},\r\n } = config || {}\r\n\r\n return (\r\n {\r\n fnOnClick && fnOnClick()\r\n }}\r\n className={classNames(fnOnClick ? \"cursor-pointer\" : \"\")}\r\n >\r\n
\r\n {icon && }\r\n
{title}
\r\n
\r\n \r\n \r\n )\r\n },\r\n call_with_icon: (data, config) => {\r\n const { icon, fieldData, title, fnOnClick, mobileNumber } = config || {}\r\n const number = data?.[fieldData] || mobileNumber || \"\"\r\n return (\r\n {\r\n fnOnClick && fnOnClick()\r\n }}\r\n className={classNames(fnOnClick ? \"cursor-pointer\" : \"\")}\r\n href={`tel:${number}`}\r\n >\r\n
\r\n {icon && }\r\n
{title}
\r\n
\r\n \r\n \r\n )\r\n },\r\n popup_html: (data, config) => {\r\n const { icon, title, description, fieldData } = config || {}\r\n const _data = data?.[fieldData] || {}\r\n const fullDescription = _data?.Content || \"\"\r\n const onHandleLearnMore = () => {\r\n MyModal.showFromComponent(\r\n ,\r\n {\r\n title: _data?.Title,\r\n modalClassName: \"default modal-filter modal-scrollable-inside\",\r\n onScrollContent: true,\r\n modalScrollInside: true,\r\n }\r\n )\r\n }\r\n return (\r\n \r\n {_data?.Title && (\r\n
{_data?.Title}
\r\n )}\r\n {_data?.Description && (\r\n \r\n )}\r\n {fullDescription && (\r\n <>\r\n {config?.showFull ? (\r\n \r\n ) : (\r\n \r\n Tìm hiểu thêm\r\n \r\n )}\r\n \r\n )}\r\n
\r\n )\r\n },\r\n cancel_order: (data, config, { fnList, buttonCode }) => {\r\n const { icon, fieldData, title } = config || {}\r\n let btnConfig = fnList?.getButtonConfigByCode(buttonCode?.Cancel)\r\n btnConfig = { ...btnConfig, Name: title, icon: icon, Code: \"NewCancel\" }\r\n const buttonList = [{ ...btnConfig }]\r\n return (\r\n \r\n )\r\n },\r\n}\r\nexport const WrapPartWithIcon = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n & .wrap-title {\r\n align-items: center;\r\n width: calc(100% - 20px);\r\n padding-right: 10px;\r\n color: var(--mauden);\r\n i {\r\n display: flex;\r\n font-size: 20px;\r\n margin-right: 10px;\r\n height: 25px;\r\n align-items: center;\r\n }\r\n }\r\n & i.flaticon-right-arrow {\r\n font-size: 14px;\r\n display: flex;\r\n }\r\n @media (max-width: 996px) {\r\n & .wrap-title {\r\n i {\r\n margin-right: 16px;\r\n }\r\n }\r\n }\r\n`\r\nconst CallWithIcon = styled.a`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n color: var(--mauden);\r\n & .wrap-title {\r\n align-items: center;\r\n width: calc(100% - 20px);\r\n padding-right: 10px;\r\n i {\r\n display: flex;\r\n font-size: 20px;\r\n color: #535151;\r\n margin-right: 10px;\r\n }\r\n }\r\n & i.flaticon-right-arrow {\r\n font-size: 14px;\r\n display: flex;\r\n }\r\n @media (max-width: 996px) {\r\n & .wrap-title {\r\n i {\r\n margin-right: 16px;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapPartWithModal = styled.div`\r\n & .btn-underline-black {\r\n font-weight: 600;\r\n font-size: 16px;\r\n }\r\n & .btn-underline-black,\r\n & .btn-underline-black:hover,\r\n & .btn-underline-black:active,\r\n & .btn-underline-black:focus {\r\n font-weight: 600;\r\n font-size: 16px;\r\n }\r\n`\r\n","import classNames from \"classnames\"\r\nimport { Button } from \"reactstrap\"\r\nimport { MyModal, MyUI } from \"src/core/components\"\r\nimport { isNotEmpty } from \"src/core/helpers/utils\"\r\nimport { historyFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\nimport { UITypes } from \"./UITypes\"\r\nimport { HLink, HUtils } from \"@macashipo/mlib\"\r\n\r\nconst VehicleInfo = props => {\r\n const { data, fnList, buttonCode, moreConfig } = props\r\n const name = data?.[historyFields.fName]\r\n const plate = data?.[historyFields.fPlateNumber]\r\n const img = data?.[historyFields.fAvatarUrl]\r\n const orderNumber = data?.[historyFields.fOrderNumber]\r\n // const buttonCode = fnList?.getActionButtonCode() || {}\r\n /** Get */\r\n const getCanShowByBtnCancel = () => {\r\n if (fnList?.getCanShowByBtnList) {\r\n return fnList?.getCanShowByBtnList(buttonCode?.Cancel)\r\n }\r\n return false\r\n }\r\n const getPartsConfig = () => {\r\n return [\r\n {\r\n title: \"Chính sách hủy chuyến\",\r\n fieldData: historyFields.fCancelBookingPolicyInfo,\r\n type: \"popup_html\",\r\n classWrap: \"devitem-line\",\r\n },\r\n {\r\n type: \"part_with_icon\",\r\n canShow: false,\r\n classWrap: \"devitem-line\",\r\n title: \"Thay đổi đơn đặt xe\",\r\n dataField: \"\",\r\n icon: \"\",\r\n },\r\n {\r\n type: \"cancel_order\",\r\n canShow: getCanShowByBtnCancel(),\r\n classWrap: \"devitem-line\",\r\n title: \"Hủy đơn đặt xe\",\r\n dataField: \"\",\r\n icon: \"flaticon-block\",\r\n },\r\n {\r\n type: \"part_with_icon\",\r\n canShow: true,\r\n classWrap: \"devitem-line\",\r\n title: \"Mẫu hợp đồng thuê xe\",\r\n dataField: \"\",\r\n icon: \"flaticon-list\",\r\n fnOnClick: onOpenFile,\r\n },\r\n ]\r\n }\r\n const onOpenFile = () => {\r\n const file = HUtils.get(moreConfig, \"rentalContractLink\") || \"\"\r\n if (file) {\r\n HLink.openUrl(file, \"_blank\")\r\n }\r\n }\r\n const renderPart = () => {\r\n const parts = getPartsConfig()\r\n return (\r\n <>\r\n {parts &&\r\n parts?.length > 0 &&\r\n parts.map((v, i) => {\r\n if (!isNotEmpty(v?.canShow) || v?.canShow) {\r\n return (\r\n \r\n {UITypes?.[v.type]\r\n ? UITypes[v.type](data, v, {\r\n fnList: {\r\n ...fnList,\r\n },\r\n buttonCode: buttonCode,\r\n })\r\n : null}\r\n \r\n )\r\n }\r\n return <>\r\n })}\r\n \r\n )\r\n }\r\n const renderCharacteristics = () => {\r\n const list = data?.[historyFields.fCharacteristics]\r\n if (list && list?.length > 0) {\r\n return (\r\n \r\n {list.map((v, i) => {\r\n return (\r\n
\r\n \r\n
\r\n {v?.Text}\r\n
\r\n
\r\n )\r\n })}\r\n
\r\n )\r\n }\r\n return <>\r\n }\r\n return (\r\n \r\n
Thông tin đặt xe
\r\n
\r\n
\r\n
{name}
\r\n
{plate}
\r\n {renderCharacteristics()}\r\n
\r\n \"\"\r\n
\r\n
\r\n
Mã xác nhận
\r\n
{orderNumber}
\r\n
\r\n {/*
\r\n
Chính sách hủy chuyến
\r\n
*/}\r\n {renderPart()}\r\n
\r\n
\r\n )\r\n}\r\nconst Wrap = styled.div`\r\n & .label {\r\n color: var(--mauden);\r\n }\r\n & .custom-text {\r\n color: #353434;\r\n }\r\n & .wrap-car-info {\r\n justify-content: space-between;\r\n img {\r\n width: 100px;\r\n max-height: 100px;\r\n object-fit: cover;\r\n border-radius: 10px;\r\n box-shadow: 0px 4px 15px 0px #0000001a;\r\n }\r\n & .name-plate {\r\n width: calc(100% - 100px);\r\n padding-right: 15px;\r\n overflow: hidden;\r\n }\r\n }\r\n & .devitem-line {\r\n &.final {\r\n &:before {\r\n margin-bottom: 0;\r\n }\r\n }\r\n }\r\n`\r\nconst DotList = styled.div`\r\n &.dot-wrap {\r\n display: flex;\r\n flex-wrap: wrap;\r\n width: 100%;\r\n padding-left: 0;\r\n padding-right: 0;\r\n margin-top: 10px;\r\n margin-left: -18px;\r\n }\r\n & .dot_list {\r\n width: unset;\r\n max-width: unset;\r\n padding-left: 0;\r\n padding-right: 16px;\r\n & .dot-icon {\r\n height: 5px;\r\n width: 5px;\r\n margin-right: 16px;\r\n border-radius: 5px;\r\n background: #000;\r\n }\r\n }\r\n`\r\nexport default VehicleInfo\r\n","import classNames from \"classnames\"\r\nimport styled from \"styled-components\"\r\n\r\nconst RentalPriceDetails = props => {\r\n const { data, title } = props\r\n return (\r\n \r\n {data &&\r\n data?.length > 0 &&\r\n data.map((v, i) => {\r\n let isTotal = false\r\n if (v?.Title?.startsWith(\"Tổng\")) {\r\n isTotal = true\r\n }\r\n let information = \"\"\r\n const detail = v?.Detail || {}\r\n if (detail?.IsShowTitleOnly && detail?.Title) {\r\n information = detail?.Title\r\n } else if (v?.Information) {\r\n information = v?.Information\r\n }\r\n return (\r\n \r\n
\r\n
{v?.Title}
\r\n
{v?.PriceText}
\r\n
\r\n {information && (\r\n
{information}
\r\n )}\r\n \r\n )\r\n })}\r\n
\r\n )\r\n}\r\nconst Wrap = styled.div`\r\n & .one-item {\r\n padding-bottom: 16px;\r\n & .content-price {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n &.total {\r\n font-weight: 600;\r\n border-top: 1px solid var(--color-divider);\r\n padding-top: 20px;\r\n margin-top: 10px;\r\n }\r\n & .description-price {\r\n color: #7b7b7b;\r\n font-size: 14px;\r\n width: 100%;\r\n }\r\n &:last-child {\r\n padding-bottom: 0;\r\n }\r\n }\r\n`\r\nexport default RentalPriceDetails\r\n","import classNames from \"classnames\"\r\nimport { MdOutlineClose } from \"react-icons/md\"\r\nimport { Button } from \"reactstrap\"\r\nimport { MyModal } from \"src/core/components\"\r\nimport styled from \"styled-components\"\r\n\r\nconst SurchargesDetails = props => {\r\n const { data, title } = props\r\n return (\r\n \r\n
\r\n {data?.length > 0 &&\r\n data.map((v, i) => {\r\n return (\r\n
\r\n
\r\n {v?.TitleLeft}\r\n {v?.TitleRight}\r\n
\r\n
{v?.Content}
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n )\r\n}\r\nconst Wrap = styled.div`\r\n & .one-surcharge {\r\n border-bottom: 1px solid var(--color-border-dfdfdf);\r\n padding-bottom: 12px;\r\n margin-bottom: 15px;\r\n &:last-child {\r\n border-bottom: none;\r\n margin-bottom: 0;\r\n }\r\n & .wrap-content {\r\n font-size: 14px;\r\n line-height: 17px;\r\n padding-top: 7px;\r\n }\r\n }\r\n & .one-item {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n`\r\nexport default SurchargesDetails\r\n","import classNames from \"classnames\"\r\nimport { Button } from \"reactstrap\"\r\nimport { MyModal } from \"src/core/components\"\r\nimport { isNotEmpty } from \"src/core/helpers/utils\"\r\nimport { historyFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\nimport RentalPriceDetails from \"./RetalPriceDetails\"\r\nimport SurchargeDetails from \"./SurchargeDetails\"\r\nimport { UITypes } from \"./UITypes\"\r\n\r\nconst PaymentInfo = props => {\r\n const { data, fnList } = props\r\n const amountRemain = data?.[historyFields.fAmountRemain]\r\n const deposit = data?.[historyFields.fDepositAmount]\r\n const total = data?.[historyFields.fTotalPrice]\r\n\r\n const getPartsConfig = () => {\r\n return [\r\n {\r\n type: \"part_with_icon\",\r\n canShow: true,\r\n classWrap: \"devitem-line\",\r\n title: \"Chi phí có thể phát sinh bạn cần biết\",\r\n dataField: \"\",\r\n icon: \"flaticon-addition\",\r\n fnOnClick: () => {\r\n handleOpenExtraSurcharges()\r\n },\r\n moreStyleIcon: {\r\n color: \"#535151\",\r\n },\r\n },\r\n {\r\n type: \"part_with_icon\",\r\n classWrap: \"devitem-line\",\r\n canShow: false,\r\n title: \"Nhận phiếu thu\",\r\n dataField: \"\",\r\n icon: \"flaticon-addition\",\r\n },\r\n ]\r\n }\r\n const handleOpenPriceDetail = () => {\r\n const rentalPrice = data?.[historyFields.fRentalPriceDetails]\r\n if (rentalPrice && rentalPrice?.length > 0) {\r\n const component = (\r\n \r\n )\r\n return MyModal.showFromComponent(component, {\r\n size: \"default\",\r\n title: \"Chi tiết giá\",\r\n modalClassName: \"default modal-filter\",\r\n onScrollContent: true,\r\n // showHeader: false,\r\n })\r\n }\r\n }\r\n const handleOpenExtraSurcharges = () => {\r\n const extraSurcharges = data?.[historyFields.fExtraSurcharges]\r\n if (extraSurcharges && extraSurcharges?.length > 0) {\r\n const component = \r\n return MyModal.showFromComponent(component, {\r\n title: \"Phụ phí có thể phát sinh\",\r\n size: \"default\",\r\n modalClassName: \"default modal-filter\",\r\n onScrollContent: true,\r\n // showHeader: false,\r\n })\r\n }\r\n }\r\n const renderPart = () => {\r\n const parts = getPartsConfig()\r\n return (\r\n <>\r\n {parts &&\r\n parts?.length > 0 &&\r\n parts.map((v, i) => {\r\n if (!isNotEmpty(v?.canShow) || v?.canShow) {\r\n return (\r\n \r\n {UITypes?.[v.type]\r\n ? UITypes[v.type](data, v, {\r\n fnList: {\r\n ...fnList,\r\n },\r\n })\r\n : null}\r\n \r\n )\r\n }\r\n return <>\r\n })}\r\n \r\n )\r\n }\r\n return (\r\n \r\n
Thông tin thanh toán
\r\n
\r\n
\r\n
Thanh toán khi nhận xe
\r\n
{amountRemain}
\r\n
\r\n
\r\n
Tiền cọc cần thanh toán
\r\n
{deposit}
\r\n
\r\n
\r\n
\r\n
Tổng
\r\n
{total}
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {renderPart()}\r\n
\r\n )\r\n}\r\nconst Wrap = styled.div`\r\n & .wrap-price {\r\n padding: 0 10px;\r\n }\r\n & .one-item {\r\n display: flex;\r\n justify-content: space-between;\r\n padding-bottom: 15px;\r\n &.total {\r\n font-weight: 600;\r\n }\r\n & .title-item {\r\n padding-right: 10px;\r\n }\r\n }\r\n & .wrap-total {\r\n border-top: 1px solid var(--color-divider);\r\n padding-top: 20px;\r\n margin-top: 10px;\r\n & .one-item {\r\n padding: 5px 0;\r\n }\r\n & .wrap-button {\r\n text-align: right;\r\n }\r\n }\r\n & .btn-underline-black {\r\n font-weight: 600;\r\n }\r\n & .btn-underline-black,\r\n & .btn-underline-black:hover,\r\n & .btn-underline-black:active,\r\n & .btn-underline-black:focus {\r\n font-weight: 600;\r\n }\r\n`\r\nexport default PaymentInfo\r\n","import { HUtils } from \"@macashipo/mlib\"\r\nimport classNames from \"classnames\"\r\nimport { isNotEmpty } from \"src/core/helpers/utils\"\r\nimport { historyFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\nimport { UITypes } from \"./UITypes\"\r\n\r\nconst OwnerInfo = props => {\r\n const { data, fnList } = props\r\n const ownerInfo = data?.[historyFields.fAnotherUserInfo] || {}\r\n const statusCode = data?.[historyFields.fOrderStatusCode]\r\n const name = HUtils.get(ownerInfo, historyFields.fAnotherUsername)\r\n const avt = HUtils.get(ownerInfo, historyFields.fAnotherUserAvatarUrl)\r\n const phoneNumber = HUtils.get(ownerInfo, historyFields.fAnotherUserPhone)\r\n const description = HUtils.get(\r\n ownerInfo,\r\n historyFields.fAnotherUserDescription\r\n )\r\n const getPartsConfig = () => {\r\n return [\r\n {\r\n type: \"call_with_icon\",\r\n canShow:\r\n statusCode && statusCode !== \"DONE\" && phoneNumber ? true : false,\r\n classWrap: \"devitem-line\",\r\n title: \"Gọi cho chủ xe\",\r\n mobileNumber: phoneNumber,\r\n icon: \"flaticon-telephone\",\r\n },\r\n ]\r\n }\r\n const renderPart = () => {\r\n const parts = getPartsConfig()\r\n return (\r\n <>\r\n {parts &&\r\n parts?.length > 0 &&\r\n parts.map((v, i) => {\r\n if (!isNotEmpty(v?.canShow) || v?.canShow) {\r\n return (\r\n \r\n {UITypes?.[v.type]\r\n ? UITypes[v.type](data, v, {\r\n fnList: {\r\n ...fnList,\r\n },\r\n })\r\n : null}\r\n \r\n )\r\n }\r\n return <>\r\n })}\r\n \r\n )\r\n }\r\n return (\r\n \r\n
\r\n Chủ xe: {name}\r\n \"\"\r\n
\r\n {description && (\r\n
\r\n
Giới thiệu về chủ xe
\r\n
{description}
\r\n
\r\n )}\r\n {renderPart()}\r\n
\r\n )\r\n}\r\nconst Wrap = styled.div`\r\n & .wrap-avt {\r\n display: flex;\r\n justify-content: space-between;\r\n & > span {\r\n font-size: 20px;\r\n font-weight: bold;\r\n width: calc(100% - 63px);\r\n padding-right: 10px;\r\n }\r\n img {\r\n width: 63px;\r\n height: 63px;\r\n object-fit: cover;\r\n border-radius: 50%;\r\n }\r\n }\r\n & .label {\r\n font-weight: 600;\r\n color: var(--mauden);\r\n }\r\n`\r\nexport default OwnerInfo\r\n","import classNames from \"classnames\"\r\nimport { HLink } from \"@macashipo/mlib\"\r\nimport styled from \"styled-components\"\r\nimport { isNotEmpty } from \"src/core/helpers/utils\"\r\nimport { UITypes } from \"./UITypes\"\r\n\r\nconst SupportInfo = props => {\r\n const { data, fnList } = props\r\n const getDataConfig = () => {\r\n if (\r\n fnList?.getConfigFromFirstSettingByKey &&\r\n fnList?.getConfigFromFirstSettingByKey(\"supportInfo\")\r\n ) {\r\n return fnList?.getConfigFromFirstSettingByKey(\"supportInfo\")\r\n }\r\n return {}\r\n }\r\n const myData = getDataConfig()\r\n const getPartsConfig = () => {\r\n return [\r\n {\r\n type: \"call_with_icon\",\r\n canShow: true,\r\n classWrap: \"devitem-line\",\r\n title: \"Gọi trợ giúp từ hotline của SIGO\",\r\n dataField: \"\",\r\n icon: \"flaticon-telephone\",\r\n mobileNumber: myData?.callCenter,\r\n },\r\n {\r\n type: \"part_with_icon\",\r\n canShow: myData?.callCenter ? true : false,\r\n classWrap: \"devitem-line\",\r\n title: \"Các câu hỏi thường gặp\",\r\n dataField: \"\",\r\n icon: \"flaticon-information-pamphlet\",\r\n mobileNumber: myData?.callCenter,\r\n fnOnClick: () => {\r\n const link = myData?.linkCommonQuestion\r\n if (link) {\r\n HLink.openUrl(link, \"_blank\")\r\n }\r\n },\r\n },\r\n ]\r\n }\r\n const renderParts = () => {\r\n const parts = getPartsConfig()\r\n return (\r\n <>\r\n {parts &&\r\n parts?.length > 0 &&\r\n parts.map((v, i) => {\r\n if (!isNotEmpty(v?.canShow) || v?.canShow) {\r\n return (\r\n \r\n {UITypes?.[v.type]\r\n ? UITypes[v.type](data, v, {\r\n fnList: {\r\n ...fnList,\r\n },\r\n })\r\n : null}\r\n \r\n )\r\n }\r\n return <>\r\n })}\r\n \r\n )\r\n }\r\n return (\r\n \r\n
{myData?.title}
\r\n
{myData?.description}
\r\n {renderParts()}\r\n
\r\n )\r\n}\r\nconst Wrap = styled.div``\r\nexport default SupportInfo\r\n","import classnames from \"classnames\"\r\nimport { MyUI } from \"src/core/components\"\r\nimport styled from \"styled-components\"\r\n\r\nconst BlogSuggestion = props => {\r\n const { data, moreConfig } = props\r\n const _ui_type =\r\n moreConfig?.default_ui_type ||\r\n moreConfig?.default_ui_type_mobile ||\r\n \"slide_card\"\r\n return (\r\n \r\n
\r\n Khám phá những điều thú vị tại những nơi mà bạn sắp đến trong chuyến đi\r\n của mình\r\n
\r\n \r\n
\r\n )\r\n}\r\nconst Wrap = styled.div`\r\n width: 100%;\r\n & .owl-carousel {\r\n & .owl-stage-outer {\r\n overflow: -webkit-paged-x;\r\n position: relative;\r\n }\r\n }\r\n & .lick-slider {\r\n overflow: -webkit-paged-x;\r\n position: relative;\r\n }\r\n`\r\nexport default BlogSuggestion\r\n","import styled from \"styled-components\"\r\nimport { historyFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport { MyIcon } from \"@macashipo/mlib\"\r\nimport { MyModal } from \"src/core/components\"\r\n\r\nconst InsuranceInfo = props => {\r\n const { data } = props\r\n const insuranceInfo = data?.[historyFields.fDetailInsuranceInfo]\r\n const icon = insuranceInfo?.[historyFields.fDetailInsuranceIcon]\r\n const description = insuranceInfo?.[historyFields.fDetailInsuranceDescription]\r\n const title = insuranceInfo?.[historyFields.fDetailInsuranceTitle]\r\n const content = insuranceInfo?.[historyFields.fDetailInsuranceContent]\r\n const url = insuranceInfo?.[historyFields.fDetailInsuranceUrl]\r\n return (\r\n \r\n {icon && (\r\n
\r\n \r\n
\r\n )}\r\n
{title}
\r\n
{description}
\r\n {content && (\r\n {\r\n MyModal.showFromComponent(\r\n <>\r\n {content && (\r\n
\r\n )}\r\n ,\r\n {\r\n title: title,\r\n modalClassName: \"default modal-filter\",\r\n modalScrollInside: true,\r\n onScrollContent: true,\r\n }\r\n )\r\n }}\r\n >\r\n Tìm hiểu thêm\r\n \r\n )}\r\n {url && (\r\n \r\n )}\r\n
\r\n )\r\n}\r\nconst Wrap = styled.div`\r\n & .i-title {\r\n font-size: 20px;\r\n font-weight: 600;\r\n margin-top: 2rem;\r\n color: var(--mauden);\r\n }\r\n & .i-des {\r\n margin-top: 0.5rem;\r\n }\r\n & .i-icon {\r\n & svg {\r\n height: 73px;\r\n width: 73px;\r\n }\r\n }\r\n & .i-more {\r\n margin-top: 0.5rem;\r\n color: var(--mauden);\r\n text-decoration: underline;\r\n font-weight: 600;\r\n cursor: pointer;\r\n }\r\n & .i-file {\r\n & a {\r\n color: var(--mauden);\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n & i {\r\n &:first-child {\r\n font-size: 20px;\r\n display: flex;\r\n color: #535151;\r\n margin-right: 10px;\r\n }\r\n }\r\n }\r\n & .flex-1 {\r\n flex: 1;\r\n }\r\n }\r\n`\r\nexport default InsuranceInfo\r\n","import {\r\n HLink,\r\n HLocalStorage,\r\n MyControl,\r\n MyUI,\r\n OneButton,\r\n} from \"@macashipo/mlib\"\r\nimport classnames from \"classnames\"\r\nimport React, { useRef } from \"react\"\r\nimport { MyForm, MyModal } from \"src/core/components\"\r\nimport { HApi } from \"src/core/helpers\"\r\nimport { isArray, isNotEmpty } from \"src/core/helpers/utils\"\r\nimport {\r\n categoryFields,\r\n historyFields,\r\n} from \"src/modules/app_sigo/constants/fields\"\r\nimport { useForceUpdate } from \"src/modules/app_sigo/hooks/useForceUpdate\"\r\nimport Dropzone from \"react-dropzone\"\r\nimport styled from \"styled-components\"\r\nimport { showAlert } from \"src/modules/app_sigo/helpers/ui\"\r\nimport NoImage from \"src/modules/app_sigo/assets/imgs/no-image.jpg\"\r\nimport { kObjCategoryLocal } from \"src/modules/app_sigo/constants\"\r\nimport MWEaseLayout from \"../WEaseLayout\"\r\nimport { WrapPartWithIcon } from \"./UITypes\"\r\n/** Component */\r\nconst ReviewModal = props => {\r\n const { onSubmit, fnList } = props\r\n const [data, setData] = React.useState({})\r\n const [loading, setLoading] = React.useState(false)\r\n const [isEdited, setIsEdited] = React.useState(true)\r\n const [quickReview, setQuickReview] = React.useState([] as any)\r\n const [keyReview, forceUpdateReview] = useForceUpdate()\r\n const refReviewForm = React.useRef(null)\r\n\r\n const getQuickReview = ({ values }: any) => {\r\n let _arr = [...quickReview]\r\n let _tmp: any = []\r\n if (values && values?.length > 0) {\r\n if (!isEdited) {\r\n values.forEach(v => {\r\n if (!_arr.find(k => k === v)) {\r\n _tmp.push(v)\r\n _arr.push(v)\r\n }\r\n })\r\n } else {\r\n _tmp = [...values]\r\n }\r\n\r\n _arr = [...values]\r\n }\r\n setQuickReview(_arr)\r\n return _tmp\r\n }\r\n const getQuickReviewContent = ({ newValue, _reviewList }) => {\r\n let str = \"\"\r\n newValue?.forEach((v, i) => {\r\n const _index = _reviewList.findIndex(k => k?.Value === v)\r\n if (_index > -1) {\r\n if (i === 0) {\r\n str += _reviewList[_index]?.Text\r\n } else {\r\n str += \". \" + _reviewList[_index]?.Text\r\n }\r\n }\r\n })\r\n return str\r\n }\r\n const getDisabledReviewBtn = () => {\r\n if (data && data?.[historyFields.fReviewRating]) {\r\n return false\r\n }\r\n return true\r\n }\r\n return (\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n Cảm ơn bạn, bạn đã đánh giá{\" \"}\r\n {data?.[historyFields.fReviewRating]} sao.\r\n \r\n
\r\n
\r\n \r\n ) : null,\r\n type: \"only_label\",\r\n },\r\n {\r\n label: \"\",\r\n fieldName: historyFields.fReviewOption,\r\n type: \"select_custom\",\r\n more: {\r\n sourceData:\r\n fnList?.fnGetOptionList && fnList?.fnGetOptionList(),\r\n multi: true,\r\n },\r\n },\r\n {\r\n label: \"\",\r\n fieldName: historyFields.fReviewContent,\r\n type: \"textarea\",\r\n more: {\r\n placeholder: \"Nội dung đánh giá\",\r\n },\r\n },\r\n ],\r\n } as any\r\n }\r\n fnList={\r\n {\r\n afterUpdateValueControl: opts => {\r\n const { fieldName, newValue } = opts\r\n let newData = { ...data }\r\n if (fieldName !== historyFields.fReviewOption) {\r\n newData[fieldName] = newValue\r\n } else {\r\n if (fnList?.fnGetOptionList) {\r\n const _reviewList = fnList.fnGetOptionList()\r\n let str = data[historyFields.fReviewContent]\r\n if (_reviewList && _reviewList?.length && isArray(newValue)) {\r\n const _newReviewValue = getQuickReview({\r\n values: newValue,\r\n })\r\n let _str = getQuickReviewContent({\r\n newValue: _newReviewValue,\r\n _reviewList,\r\n })\r\n if (str && !isEdited) {\r\n if (_newReviewValue?.length > 0) {\r\n str += \". \" + _str\r\n }\r\n newData[historyFields.fReviewContent] = str\r\n if (\r\n refReviewForm?.current?.fnListFromExtControl?.[\r\n historyFields.fReviewContent\r\n ]\r\n ) {\r\n refReviewForm.current.fnListFromExtControl[\r\n historyFields.fReviewContent\r\n ].updateValue(str)\r\n setIsEdited(false)\r\n }\r\n } else {\r\n str = getQuickReviewContent({\r\n newValue: _newReviewValue,\r\n _reviewList,\r\n })\r\n newData[historyFields.fReviewContent] = str\r\n if (\r\n refReviewForm?.current?.fnListFromExtControl?.[\r\n historyFields.fReviewContent\r\n ]\r\n ) {\r\n refReviewForm.current.fnListFromExtControl[\r\n historyFields.fReviewContent\r\n ].updateValue(str)\r\n setIsEdited(true)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (fieldName === historyFields.fReviewContent) {\r\n if (newValue) {\r\n if (data[historyFields.fReviewContent] != newValue) {\r\n setIsEdited(false)\r\n }\r\n } else {\r\n setIsEdited(true)\r\n }\r\n }\r\n setData({ ...newData })\r\n },\r\n } as any\r\n }\r\n renderFooter={() => {\r\n return (\r\n
\r\n {\r\n setLoading(true)\r\n if (onSubmit) {\r\n onSubmit({\r\n modalData: data,\r\n cbSuccess: () => {\r\n setLoading(false)\r\n },\r\n cbError: () => {\r\n setLoading(false)\r\n },\r\n })\r\n }\r\n }}\r\n disabled={getDisabledReviewBtn()}\r\n >\r\n {\" \"}\r\n Gửi Đánh Giá\r\n \r\n
\r\n )\r\n }}\r\n />\r\n \r\n )\r\n}\r\nconst PaymentModal = props => {\r\n const { data, paymentInfos, fnList, moreConfig } = props\r\n const [isCopied, setCopied] = React.useState(false)\r\n const [loading, setLoading] = React.useState(false)\r\n const [countdown, setShowCountdown] = React.useState(false)\r\n const [isPaid, setIsPaid] = React.useState(false)\r\n const [msg, setMsg] = React.useState(\"\")\r\n const [canCheck, setCanCheck] = React.useState(true)\r\n const [clicked, setClicked] = React.useState(false)\r\n\r\n const copyLink = async text => {\r\n await navigator.clipboard.writeText(text)\r\n setCopied(true)\r\n }\r\n const getCanShowBtn = () => {\r\n if (data?.StatusCode === \"CUS2DEPOSIT\") {\r\n return true\r\n }\r\n return false\r\n }\r\n const getDisabledBtn = () => {\r\n if (loading || countdown || !canCheck) {\r\n return true\r\n }\r\n return false\r\n }\r\n const getEndTime = () => {\r\n let defaultWaitingTime = 30\r\n if (moreConfig?.defaultWaitingTime) {\r\n defaultWaitingTime = moreConfig?.defaultWaitingTime\r\n }\r\n const date = new Date()\r\n date.setSeconds(date.getSeconds() + defaultWaitingTime)\r\n return date.getTime()\r\n }\r\n\r\n const intervalRef = useRef()\r\n const timeoutRef = useRef()\r\n\r\n const reloadList = (cb: () => void) => {\r\n fnList.fnReloadList({\r\n cbSuccess: data => {\r\n if (data?.[historyFields.fOrderStatusCode] === \"WAITING2DEPARTURE\") {\r\n setIsPaid(true)\r\n setLoading(false)\r\n MyModal.hideModalScrollContent(\"component\")\r\n setCanCheck(false)\r\n setShowCountdown(false)\r\n cb?.()\r\n }\r\n },\r\n cbError: () => {\r\n // setLoading(false)\r\n },\r\n })\r\n }\r\n const onHandleCheckPaid = () => {\r\n let defaultWaitingTime = 30 * 1000\r\n if (moreConfig?.defaultWaitingTime) {\r\n defaultWaitingTime = moreConfig?.defaultWaitingTime * 1000\r\n }\r\n if (fnList?.fnReloadList) {\r\n setLoading(true)\r\n setShowCountdown(true)\r\n intervalRef.current = setInterval(() => {\r\n reloadList(() => {\r\n clearInterval(intervalRef.current)\r\n clearTimeout(timeoutRef.current)\r\n })\r\n }, 10000) as any\r\n timeoutRef.current = setTimeout(() => {\r\n clearInterval(intervalRef.current)\r\n setLoading(false)\r\n setMsg(moreConfig?.messageCheckFail)\r\n setCanCheck(false)\r\n setShowCountdown(false)\r\n }, defaultWaitingTime) as any\r\n reloadList(() => {\r\n clearInterval(intervalRef.current)\r\n clearTimeout(timeoutRef.current)\r\n })\r\n }\r\n }\r\n return (\r\n \r\n
\r\n {paymentInfos?.length > 0 &&\r\n paymentInfos.map((v, i) => {\r\n const moneyToPay = v[historyFields.fMoneyToPay]\r\n const transferContent = v[historyFields.fTransferContent]\r\n const bankInfo = v[historyFields.fBankInfo]\r\n const qrCode = v[historyFields.fQRCodeUrl]\r\n return (\r\n
\r\n {qrCode && (\r\n
\r\n \"\"\r\n
\r\n )}\r\n
\r\n

\r\n Số tiền cần thanh toán:{\" \"}\r\n {moneyToPay}\r\n

\r\n

\r\n Nội dung chuyển khoản:{\" \"}\r\n {transferContent}{\" \"}\r\n copyLink(transferContent)}\r\n >\r\n \r\n \r\n

\r\n \r\n Đã sao chép thành công !\r\n
\r\n
\r\n {!countdown && !msg && !loading && (\r\n
\r\n \r\n
\r\n Nếu bạn đã thanh toán, vui lòng nhấn xác nhận chuyển\r\n khoản\r\n
\r\n
\r\n )}\r\n {!countdown && msg && (\r\n
\r\n \r\n
\r\n
\r\n )}\r\n
\r\n \r\n )\r\n })}\r\n \r\n {getCanShowBtn() && (\r\n \r\n {!countdown && !msg && !loading && (\r\n
\r\n Nếu bạn đã thanh toán, vui lòng nhấn xác nhận chuyển khoản\r\n
\r\n )}\r\n {!countdown && msg && (\r\n \r\n )}\r\n {countdown && (\r\n
\r\n \r\n {moreConfig?.messageWaiting}{\" \"}\r\n {\r\n setShowCountdown(false)\r\n setCanCheck(false)\r\n setMsg(\"\")\r\n },\r\n }}\r\n />\r\n \r\n
\r\n )}\r\n \r\n \r\n )}\r\n
\r\n )\r\n}\r\nconst CancelModal = props => {\r\n const { onSubmit, msgWarning, fnList } = props\r\n const [data, setData] = React.useState({})\r\n const [loading, setLoading] = React.useState(false)\r\n const [keyUI, forceUpdate] = useForceUpdate()\r\n return (\r\n \r\n {\r\n const { fieldName, newValue } = opts\r\n let needReload = false\r\n data[fieldName] = newValue\r\n if (fieldName === historyFields.fCancelReasonId) {\r\n const options =\r\n fnList?.getSourceList && fnList.getSourceList()?.OptionList\r\n if (options?.length > 0) {\r\n const option = options.find(v => v.Value === newValue)\r\n if (option) {\r\n data[historyFields.fCancelReasonDetail] =\r\n option.Text_Display\r\n needReload = true\r\n }\r\n }\r\n }\r\n setData({ ...data })\r\n forceUpdate()\r\n },\r\n } as any\r\n }\r\n renderFooter={() => {\r\n return (\r\n
\r\n {msgWarning && (\r\n
\r\n \r\n {msgWarning}\r\n
\r\n )}\r\n {\r\n setLoading(true)\r\n if (onSubmit) {\r\n onSubmit({\r\n modalData: data,\r\n cbSuccess: () => {\r\n setLoading(false)\r\n },\r\n cbError: () => {\r\n setLoading(false)\r\n },\r\n })\r\n }\r\n }}\r\n >\r\n {loading && } Hủy\r\n Chuyến\r\n \r\n
\r\n )\r\n }}\r\n />\r\n
\r\n )\r\n}\r\nconst OneFile = props => {\r\n const { obj, fnList } = props\r\n const [loading, setLoading] = React.useState(false)\r\n const [deleting, setDeleting] = React.useState(false)\r\n const acceptedFiles = \"image/*\"\r\n const requestUpload = files => {\r\n if (files?.length > 0) {\r\n setLoading(true)\r\n HApi.apiUpload({\r\n url: \"RentalServiceUpload/UploadReceiveImage\",\r\n files: files,\r\n customHeader: {\r\n Id: obj.id,\r\n },\r\n })\r\n .then(response => {\r\n setLoading(false)\r\n if (fnList?.cbUpload) {\r\n fnList.cbUpload(response.Data)\r\n }\r\n })\r\n .catch(error => {\r\n setLoading(false)\r\n })\r\n }\r\n }\r\n const requestDelete = key => {\r\n if (key) {\r\n setDeleting(true)\r\n HApi.apiPost({\r\n url: \"RentalServiceUpload/DeleteReceiveImage\",\r\n data: {\r\n Key: key,\r\n },\r\n })\r\n .then(response => {\r\n setDeleting(false)\r\n if (fnList?.cbDelete) {\r\n fnList.cbDelete(key)\r\n }\r\n })\r\n .catch(error => {\r\n setDeleting(false)\r\n })\r\n }\r\n }\r\n\r\n return (\r\n
  • \r\n \r\n {obj?.title}\r\n {obj?.required ? * : null}\r\n \r\n 1 ? true : false}\r\n onDrop={acceptedFiles => {\r\n requestUpload(acceptedFiles)\r\n }}\r\n accept={acceptedFiles}\r\n disabled={obj?.maxFile === obj?.files?.length}\r\n >\r\n {({ getRootProps, getInputProps }) => (\r\n \r\n \r\n Tải Ảnh\r\n \r\n \r\n \r\n )}\r\n \r\n {obj?.files?.length > 0 ? (\r\n <>\r\n {obj.files.map((v, i) => {\r\n return (\r\n
    \r\n \r\n
    \r\n requestDelete(v?.Key)}\r\n >\r\n {deleting && (\r\n \r\n )}\r\n Xóa Ảnh\r\n \r\n
    \r\n
    \r\n )\r\n })}\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
    \r\n
  • \r\n )\r\n}\r\nconst RentModal = props => {\r\n const { data, onSubmit } = props\r\n const [loading, setLoading] = React.useState(false)\r\n const receiveImages = data?.[historyFields.fReceiveImages]\r\n // const isRequired = data?.[historyFields.fIsRequired]\r\n const [myData, setMyData] = React.useState(receiveImages || [])\r\n if (myData?.length > 0) {\r\n const listImg = myData.map(v => {\r\n return {\r\n id: v?.Id,\r\n title: v?.[historyFields.fServiceImageTypeName],\r\n files: v?.[historyFields.fFiles],\r\n maxFile: v?.[historyFields.fLimit],\r\n required: v?.[historyFields.fIsRequired],\r\n }\r\n })\r\n return (\r\n \r\n

    Ảnh thực tế

    \r\n

    \r\n Vui lòng cung cấp hình ảnh để SIGO hoàn thiện hợp đồng bảo hiểm\r\n

    \r\n
      \r\n {listImg.map((v, i) => {\r\n return (\r\n {\r\n let newData = myData\r\n let myFiles = v.files\r\n if (!myFiles) {\r\n myFiles = []\r\n }\r\n if (Array.isArray(files)) {\r\n myFiles = [...myFiles, ...files]\r\n } else {\r\n myFiles.push(files)\r\n }\r\n newData[i][historyFields.fFiles] = myFiles\r\n setMyData([...newData])\r\n },\r\n cbDelete: key => {\r\n let newData = myData\r\n let myFiles = v.files\r\n if (myFiles?.length > 0) {\r\n myFiles = myFiles.filter(v => v.Key !== key)\r\n }\r\n newData[i][historyFields.fFiles] = myFiles\r\n setMyData([...newData])\r\n },\r\n }}\r\n />\r\n )\r\n })}\r\n
    \r\n {\r\n if (onSubmit) {\r\n setLoading(true)\r\n onSubmit({\r\n modalData: {},\r\n cbSuccess: () => {\r\n setLoading(false)\r\n showAlert({\r\n component: (\r\n \r\n ),\r\n opts: {\r\n onScrollContent: true,\r\n },\r\n })\r\n },\r\n cbError: () => {\r\n setLoading(false)\r\n },\r\n })\r\n }\r\n }}\r\n color=\"primary-v2\"\r\n className=\"btn btn-link btnsubxacnhan\"\r\n disabled={loading}\r\n loading={loading}\r\n btnName=\"Xác Nhận\"\r\n loadingColor={\"#fff\"}\r\n />\r\n
    \r\n )\r\n }\r\n return <>\r\n}\r\n/** button */\r\nconst Pay = props => {\r\n const { key, configButton, fnList } = props\r\n const [loading, setLoading] = React.useState(false)\r\n const requestPaymentInfos = () => {\r\n setLoading(true)\r\n HApi.apiPost({\r\n url: configButton?.APIName,\r\n data: configButton?.RequestData,\r\n })\r\n .then(response => {\r\n showPopup(response.Data?.[historyFields.fPaymentInfos], response.Data)\r\n setTimeout(() => {\r\n setLoading(false)\r\n }, 200)\r\n })\r\n .catch(error => {\r\n setLoading(false)\r\n })\r\n }\r\n const showPopup = (paymentInfos, data) => {\r\n MyModal.showFromComponent(\r\n ,\r\n {\r\n title: (Thanh Toán) as any,\r\n size: \"lg\",\r\n modalClassName: \"default modal-filter modal-scrollable-inside\",\r\n onScrollContent: true,\r\n modalScrollInside: true,\r\n }\r\n )\r\n }\r\n return (\r\n \r\n )\r\n}\r\nconst Review = props => {\r\n const { key, configButton, fnList } = props\r\n const requestSubmitReview = ({ apiUrl, query, cbSuccess, cbError }) => {\r\n HApi.apiPost({\r\n url: apiUrl,\r\n data: query,\r\n })\r\n .then(response => {\r\n fnList?.fnReloadList && fnList.fnReloadList()\r\n cbSuccess && cbSuccess()\r\n })\r\n .catch(error => {\r\n cbError && cbError()\r\n })\r\n }\r\n return (\r\n {\r\n MyModal.showFromComponent(\r\n {\r\n requestSubmitReview({\r\n apiUrl: configButton.APIName,\r\n query: {\r\n ...modalData,\r\n ...configButton?.RequestData,\r\n },\r\n cbSuccess: () => {\r\n MyModal.hideModalComponent()\r\n cbSuccess && cbSuccess()\r\n },\r\n cbError: cbError,\r\n })\r\n }}\r\n fnList={fnList}\r\n />,\r\n {\r\n title: (Đánh Giá) as any,\r\n size: \"default\",\r\n modalClassName: \"default modal-header-left\",\r\n onScrollContent: true,\r\n }\r\n )\r\n }}\r\n >\r\n {configButton.Name}\r\n \r\n )\r\n}\r\nconst Insurance = props => {\r\n const { key, configButton } = props\r\n const [iloading, setILoading] = React.useState(false)\r\n const requestGetInsuranceContact = () => {\r\n setILoading(true)\r\n HApi.apiPost({\r\n url: configButton?.APIName,\r\n data: configButton?.RequestData,\r\n })\r\n .then(response => {\r\n setILoading(false)\r\n showPopup(response.Data?.[historyFields.fInsuranceContact])\r\n })\r\n .catch(error => {\r\n setILoading(false)\r\n })\r\n }\r\n const showPopup = data => {\r\n const contacts = data?.ContactNumbers\r\n let component: any = []\r\n if (contacts?.length > 0) {\r\n contacts.forEach(v => {\r\n component.push(\r\n
    \r\n \r\n {v}\r\n \r\n
    \r\n )\r\n })\r\n }\r\n MyModal.showFromComponent(
    {component}
    , {\r\n title: ({data?.Title}) as any,\r\n size: \"default\",\r\n modalClassName: \"default modal-filter\",\r\n onScrollContent: true,\r\n })\r\n }\r\n return (\r\n \r\n )\r\n // return (\r\n // {\r\n // requestGetInsuranceContact()\r\n // }}\r\n // >\r\n // {iloading === true ? (\r\n //
    \r\n // ) : null}\r\n // {configButton.Name}\r\n // \r\n // )\r\n}\r\nconst Cancel = props => {\r\n const { key, data, configButton, fnList } = props\r\n const [loading, setLoading] = React.useState(false)\r\n const requestGetCancelInfo = ({ cbSuccess, cbError }) => {\r\n if (data?.OrderNumber) {\r\n setLoading(true)\r\n HApi.apiPost({\r\n url: \"RentalService/GetCancelOrderInfo\",\r\n data: {\r\n OrderNumber: data?.OrderNumber,\r\n },\r\n })\r\n .then(response => {\r\n setLoading(false)\r\n cbSuccess && cbSuccess(response?.Data)\r\n })\r\n .catch(error => {\r\n setLoading(false)\r\n cbError && cbError()\r\n })\r\n }\r\n }\r\n const requestSubmitCancel = ({ apiUrl, query, cbSuccess, cbError }) => {\r\n HApi.apiPost({\r\n url: apiUrl,\r\n data: query,\r\n })\r\n .then(response => {\r\n fnList?.fnReloadList && fnList.fnReloadList()\r\n cbSuccess && cbSuccess()\r\n })\r\n .catch(error => {\r\n cbError && cbError()\r\n })\r\n }\r\n const showPopup = data => {\r\n MyModal.showFromComponent(\r\n {\r\n requestSubmitCancel({\r\n apiUrl: configButton.APIName,\r\n query: {\r\n ...modalData,\r\n ...configButton?.RequestData,\r\n },\r\n cbSuccess: () => {\r\n MyModal.hideModalComponent()\r\n cbSuccess && cbSuccess()\r\n },\r\n cbError: cbError,\r\n })\r\n }}\r\n fnList={{\r\n getSourceList: () => {\r\n return {\r\n OptionList: configButton?.OptionList,\r\n }\r\n },\r\n }}\r\n />,\r\n {\r\n title: (Hủy Chuyến) as any,\r\n size: \"default\",\r\n modalClassName: \"default modal-header-left\",\r\n backdrop: \"static\",\r\n onScrollContent: true,\r\n }\r\n )\r\n }\r\n return (\r\n {\r\n requestGetCancelInfo({\r\n cbSuccess: data => {\r\n showPopup(data)\r\n },\r\n cbError: () => {},\r\n })\r\n }}\r\n style={{\r\n background: configButton?.Color_BG,\r\n }}\r\n >\r\n {loading && }\r\n {configButton.Name}\r\n \r\n )\r\n}\r\nconst RentCarBegin = props => {\r\n const { key, data, configButton, fnList } = props\r\n const [isSubmited, setIsSubmited] = React.useState(false)\r\n const requestSubmitRentBegin = ({ apiUrl, query, cbSuccess, cbError }) => {\r\n setIsSubmited(true)\r\n HApi.apiPost({\r\n url: apiUrl,\r\n data: query,\r\n })\r\n .then(response => {\r\n fnList?.fnReloadList && fnList.fnReloadList()\r\n setIsSubmited(false)\r\n cbSuccess && cbSuccess()\r\n })\r\n .catch(error => {\r\n setIsSubmited(false)\r\n cbError && cbError()\r\n })\r\n }\r\n const showPopup = () => {\r\n MyModal.showFromComponent(\r\n {\r\n requestSubmitRentBegin({\r\n apiUrl: configButton.APIName,\r\n query: {\r\n ...modalData,\r\n ...configButton?.RequestData,\r\n },\r\n cbSuccess: () => {\r\n MyModal.hideModalScrollContent(\"component\")\r\n cbSuccess && cbSuccess()\r\n },\r\n cbError: cbError,\r\n })\r\n }}\r\n />,\r\n {\r\n title: (Xác Nhận Nhận Xe) as any,\r\n size: \"lg\",\r\n modalClassName: \"default modal-filter modal-scrollable-inside\",\r\n backdrop: \"static\",\r\n onClose: () => {\r\n if (isSubmited === false) {\r\n fnList?.fnReloadList && fnList.fnReloadList()\r\n }\r\n },\r\n onScrollContent: true,\r\n modalScrollInside: true,\r\n }\r\n )\r\n }\r\n return (\r\n \r\n )\r\n}\r\nconst RentAgain = props => {\r\n const { key, configButton } = props\r\n const mapParamsNFields = {\r\n lat: categoryFields.fLatitude,\r\n long: categoryFields.fLongitude,\r\n from: categoryFields.fAddress,\r\n datetimefrom: categoryFields.fFromDate,\r\n datetimeto: categoryFields.fToDate,\r\n }\r\n return (\r\n {\r\n let objSaveLocal: any = {}\r\n const rqData = configButton?.RequestData\r\n const filterInSearch = HLocalStorage.getObj(\r\n kObjCategoryLocal,\r\n null as any\r\n )\r\n let params = \"?\"\r\n if (rqData) {\r\n Object.keys(mapParamsNFields).forEach(f => {\r\n let canFillParam = false\r\n if (\r\n rqData?.[categoryFields.fAddress] &&\r\n rqData?.[categoryFields.fLongitude] &&\r\n rqData?.[categoryFields.fLatitude] &&\r\n (mapParamsNFields[f] === categoryFields.fAddress ||\r\n mapParamsNFields[f] === categoryFields.fLongitude ||\r\n mapParamsNFields[f] === categoryFields.fLatitude)\r\n ) {\r\n canFillParam = true\r\n }\r\n if (\r\n rqData?.[categoryFields.fToDate] &&\r\n rqData?.[categoryFields.fFromDate] &&\r\n rqData?.[categoryFields.fToDate] >\r\n rqData?.[categoryFields.fFromDate] &&\r\n (mapParamsNFields[f] === categoryFields.fFromDate ||\r\n mapParamsNFields[f] === categoryFields.fToDate)\r\n ) {\r\n canFillParam = true\r\n }\r\n if (rqData?.[mapParamsNFields[f]] && canFillParam) {\r\n if (f === \"from\") {\r\n params =\r\n params +\r\n \"&\" +\r\n f +\r\n \"=\" +\r\n rqData?.[mapParamsNFields[f]]?.replaceAll(\" \", \"+\")\r\n } else {\r\n params = params + \"&\" + f + \"=\" + rqData?.[mapParamsNFields[f]]\r\n }\r\n }\r\n })\r\n // if (\r\n // rqData?.[categoryFields.fFromDate] &&\r\n // rqData?.[categoryFields.fToDate] &&\r\n // rqData?.[categoryFields.fFromDate] <\r\n // rqData?.[categoryFields.fToDate]\r\n // ) {\r\n // objSaveLocal[categoryFields.fFromDate] =\r\n // rqData[categoryFields.fFromDate]\r\n // objSaveLocal[categoryFields.fToDate] =\r\n // rqData[categoryFields.fToDate]\r\n // }\r\n }\r\n // if (filterInSearch) {\r\n // HLocalStorage.saveObj(kObjCategoryLocal, {\r\n // ...filterInSearch,\r\n // ...objSaveLocal,\r\n // })\r\n // }\r\n if (configButton?.Url) {\r\n let link = configButton.Url?.startsWith(\"/\")\r\n ? configButton.Url\r\n : `/${configButton.Url}`\r\n if (params !== \"?\") {\r\n link = link + params\r\n }\r\n HLink.openUrl(link, \"_self\")\r\n MyModal.hideModalMyUI()\r\n }\r\n }}\r\n style={{\r\n background: configButton?.Color_BG,\r\n }}\r\n >\r\n {configButton.Name}\r\n \r\n )\r\n}\r\nconst Understand = props => {\r\n const { key, configButton } = props\r\n return (\r\n {\r\n configButton?.fnOnClick && configButton?.fnOnClick()\r\n }}\r\n style={{\r\n background: configButton?.Color_BG,\r\n }}\r\n >\r\n {configButton.Name}\r\n \r\n )\r\n}\r\nconst NewCancel = props => {\r\n const { key, data, configButton, fnList } = props\r\n const { icon } = configButton || {}\r\n const showPopup = () => {\r\n MWEaseLayout.open()\r\n }\r\n return (\r\n <>\r\n {\r\n showPopup()\r\n }}\r\n >\r\n
    \r\n {icon && }\r\n
    {configButton?.Name}
    \r\n
    \r\n \r\n \r\n \r\n {\r\n return {\r\n OptionList: configButton?.OptionList,\r\n }\r\n },\r\n onClose: () => {\r\n MWEaseLayout.close({\r\n skipHideScrollContent: true,\r\n })\r\n },\r\n afterSubmit: () => {\r\n MWEaseLayout.close({\r\n skipHideScrollContent: true,\r\n })\r\n fnList?.fnReloadList && fnList.fnReloadList()\r\n },\r\n }}\r\n />\r\n \r\n \r\n )\r\n}\r\nconst NewReview = props => {\r\n const { key, configButton, fnList, data, moreConfig } = props\r\n const { canReview, defaultRating } = configButton || {}\r\n const [disabledReview, setDisabledReview] = React.useState(!canReview)\r\n const requestSubmitReview = ({ submitData, cbSuccess, cbError }) => {\r\n HApi.apiPost({\r\n url: configButton.APIName,\r\n data: {\r\n ...submitData,\r\n ...configButton?.RequestData,\r\n },\r\n })\r\n .then(response => {\r\n setDisabledReview(true)\r\n cbSuccess && cbSuccess()\r\n })\r\n .catch(error => {\r\n cbError && cbError()\r\n })\r\n }\r\n const onOpenReview = () => {\r\n MWEaseLayout.openWithType(\"review\")\r\n }\r\n return (\r\n
    \r\n
    Đánh giá của bạn
    \r\n {\r\n onOpenReview()\r\n // MyModal.showFromComponent(\r\n // {\r\n // requestSubmitReview({\r\n // apiUrl: configButton.APIName,\r\n // query: {\r\n // ...modalData,\r\n // ...configButton?.RequestData,\r\n // },\r\n // cbSuccess: () => {\r\n // MyModal.hideModalComponent()\r\n // cbSuccess && cbSuccess()\r\n // },\r\n // cbError: cbError,\r\n // })\r\n // }}\r\n // fnList={fnList}\r\n // />,\r\n // {\r\n // title: (\r\n // Đánh Giá\r\n // ) as any,\r\n // size: \"default\",\r\n // modalClassName: \"default modal-header-left\",\r\n // onScrollContent: true,\r\n // }\r\n // )\r\n },\r\n disabled: disabledReview,\r\n },\r\n },\r\n onUpdateValue: val => {},\r\n getDefaultValues: () => {\r\n return {\r\n danhgiachuyendi: defaultRating,\r\n }\r\n },\r\n }}\r\n />\r\n \r\n {\r\n return {\r\n OptionList: configButton?.OptionList,\r\n }\r\n },\r\n onClose: () => {\r\n MWEaseLayout.closeWithType(\"review\", {\r\n skipHideScrollContent: true,\r\n })\r\n fnList?.fnReloadList && fnList.fnReloadList()\r\n },\r\n afterSubmit: () => {\r\n MWEaseLayout.closeWithType(\"review\", {\r\n skipHideScrollContent: true,\r\n })\r\n fnList?.fnReloadList && fnList.fnReloadList()\r\n },\r\n requestSubmitReview: requestSubmitReview,\r\n }}\r\n moreConfig={moreConfig}\r\n />\r\n \r\n
    \r\n )\r\n}\r\n/** */\r\nconst MyUIOrderAction = props => {\r\n const { className, data, buttonList, fnList, moreConfig } = props\r\n const getMyButtons = () => {\r\n let list: any = []\r\n if (buttonList?.length > 0) {\r\n buttonList.forEach(v => {\r\n list.push(\r\n new OneButton({\r\n configButton: {\r\n ...v,\r\n NeedReloadList: true,\r\n Color: \"custom\",\r\n },\r\n })\r\n )\r\n })\r\n }\r\n return list\r\n }\r\n const buttons = getMyButtons()\r\n // const myBtnTypes = Object.keys(UIButtonTypes)\r\n return (\r\n \r\n {buttons?.length > 0 &&\r\n buttons.map((v, i) => {\r\n const configButton = v?._configButton\r\n const p = {\r\n key: `${i}_${data?.Id}_${configButton.Code}`,\r\n data: data,\r\n configButton: configButton,\r\n fnList: {\r\n fnReloadList: () => {\r\n if (fnList?.fnReloadList) {\r\n fnList.fnReloadList()\r\n }\r\n },\r\n fnGetOptionList: () => {\r\n if (configButton && configButton?.OptionList) {\r\n return configButton?.OptionList\r\n }\r\n return null\r\n },\r\n },\r\n }\r\n if (configButton?.Code === \"Pay\") {\r\n const p = {\r\n key: `${i}_${data?.Id}_${configButton.Code}`,\r\n data: data,\r\n configButton: {\r\n ...configButton,\r\n config4Modal: moreConfig?.[\"Pay\"],\r\n },\r\n fnList: {\r\n fnReloadList: ({ cbSuccess, cbError }) => {\r\n if (fnList?.fnReloadList) {\r\n fnList.fnReloadList({ cbSuccess, cbError })\r\n }\r\n },\r\n fnGetOptionList: () => {\r\n if (configButton && configButton?.OptionList) {\r\n return configButton?.OptionList\r\n }\r\n return null\r\n },\r\n fnReloadListWith: () => {},\r\n },\r\n }\r\n return \r\n } else if (configButton?.Code === \"RentCar_Begin\") {\r\n return \r\n } else if (configButton?.Code === \"Review\") {\r\n return \r\n } else if (configButton?.Code === \"Insurance\") {\r\n return \r\n } else if (configButton?.Code === \"Cancel\") {\r\n return \r\n } else if (configButton?.Code === \"RentAgain\") {\r\n return \r\n } else if (configButton?.Code === \"Understand\") {\r\n return \r\n } else if (configButton?.Code === \"NewCancel\") {\r\n return \r\n } else if (configButton?.Code === \"NewReview\") {\r\n return \r\n }\r\n return v.renderMyButton({\r\n key: i,\r\n fnList: {\r\n fnRequestList: () => {\r\n if (fnList?.fnReloadList) {\r\n fnList.fnReloadList()\r\n }\r\n },\r\n },\r\n })\r\n })}\r\n \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n & button {\r\n font-size: 17px !important;\r\n border-radius: 8px !important;\r\n &.disabled {\r\n background-color: #c9c9c9 !important;\r\n opacity: 1;\r\n background-image: unset;\r\n }\r\n }\r\n & .btn-link {\r\n padding-top: 8px;\r\n padding-bottom: 8px;\r\n color: #fff !important;\r\n &:focus,\r\n &:active {\r\n box-shadow: inset 0px 0px 19px rgb(0 0 0 / 15%) !important;\r\n }\r\n }\r\n`\r\nconst WrapReview = styled.div`\r\n & textarea.form-control {\r\n min-height: 78px;\r\n }\r\n & .react-rater {\r\n justify-content: center;\r\n & .fa-star {\r\n font-size: 40px;\r\n width: 50px;\r\n color: #ccc;\r\n text-align: center;\r\n &.active,\r\n &.hover {\r\n color: #ffcc36;\r\n }\r\n }\r\n }\r\n & .success-box {\r\n margin: 10px 0;\r\n padding: 10px 10px;\r\n border: 1px solid #eee;\r\n background: #f9f9f9;\r\n display: none;\r\n & > div {\r\n vertical-align: top;\r\n display: inline-block;\r\n color: #888;\r\n }\r\n & img {\r\n margin-right: 10px;\r\n display: inline-block;\r\n vertical-align: top;\r\n }\r\n }\r\n & .btn.btn-info:disabled {\r\n background-color: var(--mau1);\r\n color: #fff;\r\n border-color: var(--mau1);\r\n }\r\n`\r\nconst WrapPayment = styled.div`\r\n & .qr-code {\r\n display: flex;\r\n justify-content: center;\r\n & img {\r\n box-shadow: rgb(175 230 255) 0px 2px 8px 0px;\r\n border-radius: 4px;\r\n }\r\n padding: 0.5rem 0;\r\n }\r\n & .w-payinfo {\r\n max-height: calc(100vh - 4.5rem - 81px - 185px);\r\n overflow-y: auto;\r\n & .qr-code {\r\n width: 50%;\r\n }\r\n & .right {\r\n width: 50%;\r\n padding-left: 20px;\r\n }\r\n }\r\n & .only-mobile {\r\n display: none;\r\n }\r\n & .mui-countdown-time {\r\n padding-top: 5px;\r\n display: inline-block;\r\n & .item.red {\r\n color: var(--mauden);\r\n }\r\n & .wrap-countdown {\r\n }\r\n & .countdown {\r\n font-size: 16px;\r\n display: inline-block;\r\n }\r\n }\r\n & .btn-primary-v2 {\r\n font-weight: 400;\r\n }\r\n & .info-msg {\r\n padding: 10px;\r\n border: 1px solid #ede7e7;\r\n border-radius: 5px;\r\n background: #f3f3f3;\r\n color: #414141;\r\n font-size: 15px;\r\n display: flex;\r\n i {\r\n margin-right: 5px;\r\n margin-top: 2px;\r\n color: var(--mau1);\r\n }\r\n }\r\n & .warning-msg {\r\n padding: 10px;\r\n border: #fde8cc 1px solid;\r\n border-radius: 5px;\r\n background: #fff5e8;\r\n color: #e99c07;\r\n font-size: 15px;\r\n display: flex;\r\n i {\r\n margin-right: 5px;\r\n margin-top: 2px;\r\n }\r\n }\r\n & .wrap-confirm {\r\n display: flex;\r\n align-items: center;\r\n & .btn-primary-v2 {\r\n max-width: 300px;\r\n }\r\n }\r\n @media (max-width: 996px) {\r\n & .w-payinfo {\r\n & .d-flex {\r\n flex-direction: column-reverse;\r\n }\r\n & .qr-code {\r\n width: 100%;\r\n }\r\n & .right {\r\n width: 100%;\r\n padding-bottom: 20px;\r\n padding-left: 0;\r\n }\r\n }\r\n & .only-mobile {\r\n display: block;\r\n }\r\n & .only-desktop {\r\n display: none;\r\n }\r\n & .wrap-confirm {\r\n display: unset;\r\n & .btn-primary-v2 {\r\n max-width: 100%;\r\n }\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .w-payinfo {\r\n max-height: calc(100vh - 3.5rem - 81px - 210px);\r\n overflow-y: auto;\r\n }\r\n }\r\n`\r\nconst WrapCancel = styled.div`\r\n & .mc-select2 {\r\n font-size: 15px;\r\n & .form-control {\r\n height: auto;\r\n }\r\n }\r\n & textarea.form-control {\r\n min-height: 78px;\r\n }\r\n & i {\r\n &:before {\r\n line-height: inherit;\r\n }\r\n }\r\n`\r\nconst WrapRent = styled.div`\r\n & .listhinh {\r\n & .w-image {\r\n width: 150px;\r\n height: 150px;\r\n float: right;\r\n margin-right: 10px;\r\n position: relative;\r\n & .img-action {\r\n display: none;\r\n }\r\n & img {\r\n margin-right: 0px;\r\n object-fit: cover;\r\n width: 100%;\r\n height: 100%;\r\n }\r\n &:hover {\r\n & .img-action {\r\n background-color: rgba(0, 0, 0, 0.5);\r\n display: flex;\r\n position: absolute;\r\n width: 100%;\r\n height: 100%;\r\n justify-content: center;\r\n align-items: center;\r\n & .btn-delete {\r\n color: #fff;\r\n cursor: pointer;\r\n font-size: 12px;\r\n &:hover,\r\n &:focus {\r\n text-decoration: underline;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n & img {\r\n max-width: 150px;\r\n float: right;\r\n margin-right: 10px;\r\n }\r\n & .upload {\r\n float: right;\r\n & .btn {\r\n font-size: 12px;\r\n }\r\n & .btn-info.disabled {\r\n color: #fff;\r\n background-color: var(--mau1);\r\n border-color: var(--mau2);\r\n opacity: 0.65;\r\n }\r\n }\r\n }\r\n & .btnsubxacnhan {\r\n min-width: 100px;\r\n }\r\n`\r\nexport default MyUIOrderAction\r\n","import styled from \"styled-components\"\r\nimport Odometer from \"react-odometerjs\"\r\nimport GoogleMapReact from \"google-map-react\"\r\nimport { useEffect, useState } from \"react\"\r\nimport RangeSlider from \"react-range-slider-input\"\r\nimport \"react-range-slider-input/dist/style.css\"\r\nimport { IoSearchOutline } from \"react-icons/io5\"\r\nimport { HCF, HUtils, MyIcon, MyUI } from \"@macashipo/mlib\"\r\nimport { Button, Dropdown, DropdownMenu, Input } from \"reactstrap\"\r\nimport { MdOutlineClose } from \"react-icons/md\"\r\n\r\ninterface AnyReactComponentProps {\r\n text?: string\r\n lat: number\r\n lng: number\r\n tooltip?: any\r\n $hover?: any\r\n moreConfig?: any\r\n}\r\n\r\nconst AnyReactComponent = ({\r\n text,\r\n lat,\r\n lng,\r\n tooltip,\r\n $hover,\r\n ...props\r\n}: AnyReactComponentProps) => {\r\n const { moreConfig = {} } = props\r\n const [isHover, setIsHover] = useState(false)\r\n\r\n return (\r\n {\r\n setIsHover(false)\r\n }}\r\n onMouseEnter={() => {\r\n setIsHover(true)\r\n }}\r\n className={`${$hover || isHover ? \"is-hover\" : \"\"}`}\r\n >\r\n
    {text}
    \r\n \r\n )\r\n}\r\nconst WrapMaker = styled.div`\r\n height: 28px;\r\n padding: 0px 8px;\r\n border-radius: 28px;\r\n background: #fff;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.18), 0px 2px 4px 0px rgba(0, 0, 0, 0.18),\r\n 0px 0px 0px 1px rgba(0, 0, 0, 0.08);\r\n color: var(--color-text-000);\r\n display: flex;\r\n align-items: center;\r\n width: fit-content;\r\n justify-content: center;\r\n font-weight: 700;\r\n font-size: 12px;\r\n`\r\n\r\nconst UIOdometer = props => {\r\n const { defaultValue } = props\r\n const [value, setValue] = useState(defaultValue)\r\n\r\n useEffect(() => {\r\n if (defaultValue != value) {\r\n setValue(defaultValue)\r\n }\r\n }, [defaultValue])\r\n return \r\n}\r\n\r\nconst UIChangeDate = props => {\r\n const { defaultValue, fnChangeValue } = props\r\n const [open, setOpen] = useState(false)\r\n const [curValue, setCurValue] = useState(defaultValue)\r\n\r\n const onToggleDropdown = () => {\r\n setOpen(prev => !prev)\r\n }\r\n const onHandleDropdown = value => {\r\n setOpen(value)\r\n }\r\n const handleIncrease = () => {\r\n let newValue = curValue + 1\r\n if (newValue <= 30) {\r\n setCurValue(newValue)\r\n }\r\n }\r\n const handleDecrease = () => {\r\n let newValue = curValue - 1\r\n if (newValue >= 1) {\r\n setCurValue(newValue)\r\n }\r\n }\r\n\r\n return (\r\n \r\n {\r\n onToggleDropdown()\r\n }}\r\n direction=\"right\"\r\n className=\"wrap-estimated\"\r\n >\r\n
    \r\n {defaultValue} ngày\r\n \r\n {\" \"}\r\n với ước tính giá 1.800k vnđ mỗi ngày\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    Bao nhiêu ngày
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n {\r\n let newValue = parseInt(e.target?.value)\r\n if (newValue >= 1 && newValue <= 30) {\r\n setCurValue(parseInt(e.target?.value))\r\n }\r\n }}\r\n />\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {\r\n fnChangeValue && fnChangeValue(curValue)\r\n onHandleDropdown(false)\r\n }}\r\n >\r\n Cập nhật\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n )\r\n}\r\n\r\nconst MUIIncomeAndMap = props => {\r\n const { data } = props\r\n const [amountIncome, setAmountIncome] = useState(1800000)\r\n const [slider, setSliderValue] = useState([1, 1] as any)\r\n\r\n const getCenter = data => {\r\n let totalLat = 0\r\n let totalLng = 0\r\n if (data?.length > 0) {\r\n const count = data?.length\r\n data.forEach(item => {\r\n totalLat += item?.lat\r\n totalLng += item?.lng\r\n })\r\n\r\n return {\r\n lat: totalLat / count,\r\n lng: totalLng / count,\r\n }\r\n }\r\n return\r\n }\r\n const handleChangeNumberOfDate = () => {\r\n // console.log(\"devtest - onThumbDragEnd\", amountIncome)\r\n // setAmountIncome(1800*slider[1])\r\n }\r\n const handleChangeDate = value => {\r\n setSliderValue([1, value])\r\n setAmountIncome(1800000 * value)\r\n }\r\n\r\n const renderChangeNumberOfDate = () => {\r\n return (\r\n \r\n )\r\n }\r\n const renderIncome = () => {\r\n return (\r\n \r\n
    Cho thuê xe trên SIGO.
    \r\n
    Bạn có thể kiếm được
    \r\n
    \r\n \r\n
    VNĐ
    \r\n
    \r\n {renderChangeNumberOfDate()}\r\n {\r\n setSliderValue(value)\r\n setAmountIncome(1800000 * value[1])\r\n }}\r\n onThumbDragEnd={() => {\r\n // Xử lý gọi api khi user kết thúc việc kéo slider thay đổi giá trị\r\n handleChangeNumberOfDate()\r\n }}\r\n />\r\n \r\n
    \r\n \r\n
    \r\n
    Thành phố Hồ Chí Minh
    \r\n
    Xe 4 chỗ - Sedan
    \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n const renderMap = () => {\r\n const points = [\r\n {\r\n lat: 10.809375,\r\n lng: 106.678428,\r\n price: \"116.000đ\",\r\n },\r\n {\r\n lat: 10.814152,\r\n lng: 106.678554,\r\n price: \"216.000đ\",\r\n },\r\n {\r\n lat: 10.811707,\r\n lng: 106.678554,\r\n price: \"1.516.000đ\",\r\n },\r\n {\r\n lat: 10.809262,\r\n lng: 106.678597,\r\n price: \"236.000đ\",\r\n },\r\n ]\r\n const center = getCenter(points)\r\n const defaultProps = {\r\n center: center,\r\n zoom: 17,\r\n }\r\n if (points?.length) {\r\n return (\r\n \r\n
    \r\n \r\n {points?.map((v, i) => {\r\n return (\r\n \r\n )\r\n })}\r\n \r\n
    \r\n
    \r\n )\r\n }\r\n return <>\r\n }\r\n return (\r\n \r\n {renderIncome()}\r\n {renderMap()}\r\n \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n align-items: center;\r\n .odometer.odometer-auto-theme,\r\n .odometer.odometer-theme-default {\r\n display: inline-block;\r\n vertical-align: middle;\r\n *vertical-align: auto;\r\n *zoom: 1;\r\n *display: inline;\r\n position: relative;\r\n }\r\n .odometer.odometer-auto-theme .odometer-digit,\r\n .odometer.odometer-theme-default .odometer-digit {\r\n display: inline-block;\r\n vertical-align: middle;\r\n *vertical-align: auto;\r\n *zoom: 1;\r\n *display: inline;\r\n position: relative;\r\n }\r\n .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer,\r\n .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer {\r\n display: inline-block;\r\n vertical-align: middle;\r\n *vertical-align: auto;\r\n *zoom: 1;\r\n *display: inline;\r\n visibility: hidden;\r\n }\r\n .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner,\r\n .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner {\r\n text-align: left;\r\n display: block;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n overflow: hidden;\r\n }\r\n .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon,\r\n .odometer.odometer-theme-default .odometer-digit .odometer-ribbon {\r\n display: block;\r\n }\r\n .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner,\r\n .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner {\r\n display: block;\r\n -webkit-backface-visibility: hidden;\r\n }\r\n .odometer.odometer-auto-theme .odometer-digit .odometer-value,\r\n .odometer.odometer-theme-default .odometer-digit .odometer-value {\r\n display: block;\r\n -webkit-transform: translateZ(0);\r\n }\r\n .odometer.odometer-auto-theme\r\n .odometer-digit\r\n .odometer-value.odometer-last-value,\r\n .odometer.odometer-theme-default\r\n .odometer-digit\r\n .odometer-value.odometer-last-value {\r\n position: absolute;\r\n }\r\n .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner,\r\n .odometer.odometer-theme-default.odometer-animating-up\r\n .odometer-ribbon-inner {\r\n -webkit-transition: -webkit-transform 2s;\r\n -moz-transition: -moz-transform 2s;\r\n -ms-transition: -ms-transform 2s;\r\n -o-transition: -o-transform 2s;\r\n transition: transform 2s;\r\n }\r\n .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating\r\n .odometer-ribbon-inner,\r\n .odometer.odometer-theme-default.odometer-animating-up.odometer-animating\r\n .odometer-ribbon-inner {\r\n -webkit-transform: translateY(-100%);\r\n -moz-transform: translateY(-100%);\r\n -ms-transform: translateY(-100%);\r\n -o-transform: translateY(-100%);\r\n transform: translateY(-100%);\r\n }\r\n .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner,\r\n .odometer.odometer-theme-default.odometer-animating-down\r\n .odometer-ribbon-inner {\r\n -webkit-transform: translateY(-100%);\r\n -moz-transform: translateY(-100%);\r\n -ms-transform: translateY(-100%);\r\n -o-transform: translateY(-100%);\r\n transform: translateY(-100%);\r\n }\r\n .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating\r\n .odometer-ribbon-inner,\r\n .odometer.odometer-theme-default.odometer-animating-down.odometer-animating\r\n .odometer-ribbon-inner {\r\n -webkit-transition: -webkit-transform 2s;\r\n -moz-transition: -moz-transform 2s;\r\n -ms-transition: -ms-transform 2s;\r\n -o-transition: -o-transform 2s;\r\n transition: transform 2s;\r\n -webkit-transform: translateY(0);\r\n -moz-transform: translateY(0);\r\n -ms-transform: translateY(0);\r\n -o-transform: translateY(0);\r\n transform: translateY(0);\r\n }\r\n\r\n .odometer.odometer-auto-theme,\r\n .odometer.odometer-theme-default {\r\n font-family: \"Helvetica Neue\", sans-serif;\r\n line-height: 1.1em;\r\n }\r\n .odometer.odometer-auto-theme .odometer-value,\r\n .odometer.odometer-theme-default .odometer-value {\r\n text-align: center;\r\n }\r\n @media (max-width: 1099px) {\r\n flex-direction: column;\r\n justify-content: center;\r\n }\r\n`\r\nconst WrapIncome = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n width: 50%;\r\n & .title {\r\n font-size: 40px;\r\n font-weight: 700;\r\n color: var(--color-text-info);\r\n text-align: center;\r\n margin-bottom: 0;\r\n line-height: 55px;\r\n }\r\n & .sub-title {\r\n color: var(--color-text-000);\r\n font-weight: 600;\r\n font-size: 40px;\r\n line-height: 55px;\r\n text-align: center;\r\n }\r\n & .wrap-estimated-income {\r\n margin-top: 2rem;\r\n }\r\n & .wrap-estimated-income,\r\n & .odometer {\r\n font-size: 50px;\r\n color: var(--color-text-000);\r\n font-weight: 700;\r\n }\r\n & .range-slider {\r\n margin-top: 2rem;\r\n max-width: 450px;\r\n height: 4px;\r\n border-radius: 2px;\r\n }\r\n & .range-slider__range {\r\n border-radius: 6px;\r\n }\r\n & .range-slider .range-slider__thumb {\r\n width: 30px;\r\n height: 30px;\r\n border: 1px solid #d0cccc;\r\n background-color: #fff;\r\n box-shadow: 0px 4px 15px 0px #00000026;\r\n &:focus {\r\n border: 2px solid #000000;\r\n }\r\n }\r\n & .range-slider__thumb[data-lower] {\r\n width: 0;\r\n box-shadow: none;\r\n border: none;\r\n }\r\n & .range-slider .range-slider__range {\r\n background: #000;\r\n height: 4px;\r\n pointer-events: none;\r\n }\r\n & .wrap-search {\r\n margin-top: 1.5rem;\r\n display: flex;\r\n padding: 0.75rem 1.5rem;\r\n border: 1px solid #c5c5c5;\r\n border-radius: 40px;\r\n align-items: center;\r\n width: 350px;\r\n & svg {\r\n font-size: 32px;\r\n color: var(--mau1);\r\n }\r\n & .wrap-text {\r\n color: var(--color-text-000);\r\n padding-left: 0.75rem;\r\n & .w-600 {\r\n font-weight: 600;\r\n }\r\n }\r\n }\r\n @media (max-width: 1099px) {\r\n width: 100%;\r\n }\r\n @media (max-width: 767px) {\r\n & .title {\r\n font-size: 32px;\r\n line-height: 40px;\r\n }\r\n & .sub-title {\r\n font-size: 28px;\r\n line-height: 36px;\r\n text-align: center;\r\n }\r\n & .wrap-estimated-income {\r\n margin-top: 1.5rem;\r\n }\r\n & .wrap-estimated-income,\r\n & .odometer {\r\n font-size: 34px;\r\n }\r\n & .range-slider {\r\n margin-top: 1.5rem;\r\n }\r\n & .wrap-search {\r\n margin-top: 1rem;\r\n }\r\n & .btn.btn-underline-black {\r\n white-space: unset;\r\n }\r\n }\r\n`\r\nconst WrapChangeDate = styled.div`\r\n & .wrap-estimated {\r\n margin-top: 0.75rem;\r\n text-align: center;\r\n & span {\r\n font-size: 20px;\r\n color: rgb(101, 101, 101);\r\n }\r\n & span:not(.remove-user-select) {\r\n cursor: pointer;\r\n font-weight: 700;\r\n color: var(--color-text-000);\r\n text-decoration: underline;\r\n }\r\n & .remove-user-select {\r\n cursor: context-menu;\r\n user-select: none;\r\n pointer-event: none;\r\n }\r\n }\r\n & .wrap-dropdown-content {\r\n padding: 20px;\r\n background-color: var(--color-text-fff);\r\n box-shadow: 0 8px 28px rgba(0, 0, 0, 0.28);\r\n width: 400px;\r\n border-radius: 20px;\r\n display: unset;\r\n opacity: 0;\r\n visibility: hidden;\r\n & .header {\r\n position: relative;\r\n text-align: center;\r\n & .btn-hide-dropdown {\r\n padding: 0;\r\n border: none;\r\n box-shadown: none;\r\n color: var(--color-text-222222);\r\n font-size: 16px;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n }\r\n & .title {\r\n font-size: 17px;\r\n font-weight: 600;\r\n color: var(--color-text-000);\r\n }\r\n }\r\n & > hr {\r\n margin: 20px -24px 0 !important;\r\n border-top: 1px solid #ddd;\r\n }\r\n & .content {\r\n padding: 24px 0 0;\r\n & .one-price-detail {\r\n font-size: 14px;\r\n padding-bottom: 10px;\r\n color: var(--color-text-111);\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n & .one-price-detail.amount {\r\n font-weight: 600;\r\n font-size: 15px;\r\n padding-bottom: 0px;\r\n }\r\n & > hr {\r\n margin-top: 10px !important;\r\n }\r\n }\r\n & .wrap-btn {\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n & .btn-circle {\r\n padding: 5px;\r\n border: 1px solid #6a6a6a;\r\n border-radius: 50%;\r\n width: 32px;\r\n height: 32px;\r\n text-align: center !important;\r\n display: inline-flex !important;\r\n align-items: center !important;\r\n justify-content: center !important;\r\n cursor: pointer;\r\n & svg {\r\n width: 12px;\r\n height: 12px;\r\n display: block;\r\n fill: #6a6a6a;\r\n }\r\n &:hover {\r\n border-color: var(--color-text-000);\r\n & svg {\r\n fill: var(--color-text-000);\r\n }\r\n }\r\n }\r\n input {\r\n width: 140px;\r\n font-size: 32px;\r\n color: var(--color-text-000);\r\n height: 48px;\r\n text-align: center;\r\n font-weight: 600;\r\n margin: 0 1.5rem;\r\n }\r\n & .footer {\r\n padding-top: 1.25rem;\r\n & .btn {\r\n width: 100%;\r\n }\r\n }\r\n }\r\n & .wrap-dropdown-content.show {\r\n opacity: 1 !important;\r\n visibility: visible;\r\n pointer-events: unset !important;\r\n top: 25px !important;\r\n }\r\n & .title {\r\n line-height: unset;\r\n }\r\n input::-webkit-outer-spin-button,\r\n input::-webkit-inner-spin-button {\r\n -webkit-appearance: none;\r\n margin: 0;\r\n }\r\n\r\n /* Firefox */\r\n input[type=\"number\"] {\r\n -moz-appearance: textfield;\r\n }\r\n @media (max-width: 767px) {\r\n & .wrap-estimated {\r\n text-align: center;\r\n & span {\r\n font-size: 16px;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapMap = styled.div`\r\n margin-left: 1rem;\r\n &.wrap-map {\r\n display: flex;\r\n border: 1px solid #d1d1d1;\r\n height: 500px;\r\n width: 50%;\r\n border-radius: 15px;\r\n justify-content: center;\r\n align-items: center;\r\n overflow: hidden;\r\n }\r\n & .cover-map {\r\n flex: 1;\r\n margin-right: -2px;\r\n margin-left: -2px;\r\n height: calc(100% + 4px);\r\n }\r\n @media (max-width: 1099px) {\r\n margin-left: 0;\r\n margin-top: 2rem;\r\n &.wrap-map {\r\n width: 100%;\r\n }\r\n }\r\n`\r\nexport default MUIIncomeAndMap\r\n","import React from \"react\"\r\nimport MyUIHelpers from \"src/core/components/MyUI/MyUIHelpers\"\r\n/** Login */\r\nimport MUILogin from \"src/modules/app_sigo/components/MyUI/Types/Login/Login\"\r\n/** Không import lazy */\r\nimport MyUIHomeRentalCar from \"src/modules/app_sigo/components/MyUI/Types/Home/HomeRentalCar\"\r\nimport MUIHelmet from \"src/modules/app_sigo/components/MyUI/Types/Helmet\"\r\nimport MUIButtonRefresh from \"src/modules/app_sigo/components/MyUI/Types/Category/ButtonRefresh\"\r\nimport MUIHeaderCategoryFullv2 from \"src/modules/app_sigo/components/MyUI/Types/HeaderCategoryFullv2\"\r\nimport MUIHeaderCategory from \"src/modules/app_sigo/components/MyUI/Types/HeaderCategory\"\r\nimport MUIButtonForm from \"src/modules/app_sigo/components/MyUI/Types/ButtonForm\"\r\nimport MyUIWLoadingSkeleton from \"src/modules/app_sigo/components/MyUI/Types/WLoadingSkeleton\"\r\nimport MUISlideCard from \"src/modules/app_sigo/components/MyUI/Types/SlideCard\"\r\nimport MUIAvatar from \"src/modules/app_sigo/components/MyUI/Types/Avatar\"\r\nimport MUIBanner from \"src/modules/app_sigo/components/MyUI/Types/Banner\"\r\nimport MUIHeader from \"src/modules/app_sigo/components/MyUI/Types/Header\"\r\nimport MUIHomeSearchbar from \"src/modules/app_sigo/components/MyUI/Types/Home/Searchbar\"\r\nimport MyUIHeaderMobileV2 from \"src/modules/app_sigo/components/MyUI/Types/HeaderMobilev2\"\r\nimport MUIFancybox from \"src/modules/app_sigo/components/MyUI/Types/Fancybox\"\r\nimport MyUIContentOverlay from \"src/modules/app_sigo/components/MyUI/Types/WContentOverlay\"\r\nimport MyUITripDetail from \"src/modules/app_sigo/components/MyUI/Types/TripDetail\"\r\n/** Detail */\r\nimport MyUICarName from \"src/modules/app_sigo/components/MyUI/Types/Detail/CarName\"\r\nimport MyUICarImageSlide from \"src/modules/app_sigo/components/MyUI/Types/Detail/CarImageSlide\"\r\n/** Trip details */\r\nimport GeneralInfo from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/GeneralInfo\"\r\nimport VehicleInfo from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/VehicleInfo\"\r\nimport PaymentInfo from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/PaymentInfo\"\r\nimport OwnerInfo from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/OwnerInfo\"\r\nimport SupportInfo from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/SupportInfo\"\r\nimport BlogSuggestion from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/BlogSuggestion\"\r\nimport InsuranceInfo from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/InsuranceInfo\"\r\nimport Action from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/Action\"\r\n// Landing UI\r\nimport MyUISGEstimatedIncome from \"src/modules/app_sigo/components/MyUI/Types/SGEstimatedIncome\"\r\n/** */\r\nconst MyUIWLoadingOverlay = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/WLoadingOverlay\")\r\n)\r\nconst MyUISGButton = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/SGButton\")\r\n)\r\n\r\n// const MUIHeader = React.lazy(\r\n// () => import(\"src/modules/app_sigo/components/MyUI/Types/Header\")\r\n// )\r\n// const MUIBanner = React.lazy(\r\n// () => import(\"src/modules/app_sigo/components/MyUI/Types/Banner\")\r\n// )\r\nconst MUIComingSoon = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/CommingSoon\")\r\n)\r\nconst MUINotAvailable = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/NotAvailable\")\r\n)\r\n// const MUIAvatar = React.lazy(\r\n// () => import(\"src/modules/app_sigo/components/MyUI/Types/Avatar\")\r\n// )\r\nconst MUIInsurrance = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Insurance\")\r\n)\r\nconst MUIWContent = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/WContent\")\r\n)\r\nconst MUIAutoLoadList = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/AutoLoadList\")\r\n)\r\n// const MUIButtonForm = React.lazy(\r\n// () => import(\"src/modules/app_sigo/components/MyUI/Types/ButtonForm\")\r\n// )\r\nconst MUIAlertTemplate = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/AlertTemplate\")\r\n)\r\nconst MUIImageSlides = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/ImageSlides\")\r\n)\r\n// const MUIFancybox = React.lazy(\r\n// () => import(\"src/modules/app_sigo/components/MyUI/Types/Fancybox\")\r\n// )\r\nconst MUISearchBoxWData = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/SearchBoxWData\")\r\n)\r\nconst MUIListCard = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/ListCard\")\r\n)\r\n// const MUISlideCard = React.lazy(\r\n// () => import(\"src/modules/app_sigo/components/MyUI/Types/SlideCard\")\r\n// )\r\nconst MyUIPopover = React.lazy(() => import(\"./Types/TippyPopover\"))\r\nconst MyUIDownloadAppInfo = React.lazy(() => import(\"./Types/DownloadAppInfo\"))\r\n/** Home */\r\n// const MUIHomeSearchbar = React.lazy(\r\n// () => import(\"src/modules/app_sigo/components/MyUI/Types/Home/Searchbar\")\r\n// )\r\nconst MyUIHomeCarSuggest = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Home/HomeCarSuggest\")\r\n)\r\n/** Category */\r\n// const MUIHeaderCategory = React.lazy(\r\n// () => import(\"src/modules/app_sigo/components/MyUI/Types/HeaderCategory\")\r\n// )\r\nconst MUIFilterCategory = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/FilterCategory\")\r\n)\r\n// const MUIHeaderCategoryFullv2 = React.lazy(\r\n// () =>\r\n// import(\"src/modules/app_sigo/components/MyUI/Types/HeaderCategoryFullv2\")\r\n// )\r\nconst MUIFilterSpecialAttribute = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/Category/FilterSpecialAttribute\"\r\n )\r\n)\r\n// const MUIButtonRefresh = React.lazy(\r\n// () =>\r\n// import(\"src/modules/app_sigo/components/MyUI/Types/Category/ButtonRefresh\")\r\n// )\r\n/** Detail */\r\nconst MUIProduct = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Detail/Product\")\r\n)\r\nconst MUIBookingInfo = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Detail/BookingInfo\")\r\n)\r\nconst MUIConfirmBooking = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Detail/ConfirmBooking\")\r\n)\r\nconst MUIHeaderDetail = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Detail/HeaderDetail\")\r\n)\r\nconst MUIVehicleMap = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Detail/VehicleMap\")\r\n)\r\nconst MUIVehicleDeliveryAdress = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/Detail/VehicleDeliveryAdress\"\r\n )\r\n)\r\nconst MyUIBookingConfirm = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Detail/BookingConfirm\")\r\n)\r\nconst MyUIMessageForOwner = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Detail/MessageForOwner\")\r\n)\r\nconst MyUIPriceDetails = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Detail/PriceDetails\")\r\n)\r\nconst MyUISelectSecurity = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Detail/SelectSecurity\")\r\n)\r\nconst MyUIBookingSuccess = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Detail/BookingSuccess\")\r\n)\r\n/** Order */\r\nconst MUIOrderAction = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Action\")\r\n)\r\n// const MUIOrderDetail = React.lazy(\r\n// () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Detail\")\r\n// )\r\nconst MUIOrderProgress = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Progress\")\r\n)\r\nconst MUIOrderInsurrance = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Insurrance\")\r\n)\r\nconst MUIOrderImages = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Images\")\r\n)\r\nconst MUIOrderPrices = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Prices\")\r\n)\r\nconst MUIOrderOthers = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Others\")\r\n)\r\nconst MUIOrderTrader = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Trader\")\r\n)\r\nconst MUIOrderHeader = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Header\")\r\n)\r\n/*OrderDetail */\r\nconst MUIOrderDetail = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetail\")\r\n)\r\nconst MUIOrderDetailGeneralInfo = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetailGeneralInfo\"\r\n )\r\n)\r\nconst MUIOrderDetailRenterInfo = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetailRenterInfo\"\r\n )\r\n)\r\nconst MUIOrderdetailBookingInfo = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetailBookingInfo\"\r\n )\r\n)\r\nconst MUIOrderDetailPaymentInfo = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetailPaymentInfo\"\r\n )\r\n)\r\nconst MUIOrderDetailInsuranceInfo = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetailInsuranceInfo\"\r\n )\r\n)\r\nconst MUIOrderDetailAction = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetailAction\"\r\n )\r\n)\r\nconst MUIOrderDetailProfitInfo = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/MUIOrderDetailProfitInfo\"\r\n )\r\n)\r\nconst MyUIHeaderOrders = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/HeaderOrders\"\r\n )\r\n)\r\n/** use admin v5 */\r\nconst MUIAdmintableTablListCard = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/AdmintableTablListCard\")\r\n)\r\n/** Popup trip detail */\r\nconst MyUICountdownTime = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/CountdownTime\")\r\n)\r\n/** User profile */\r\nconst MyUIUserAvatar = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/UserProfle/UserAvatar\")\r\n)\r\nconst MyUIUserMainInfo = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/UserProfle/UserMainInfo\")\r\n)\r\nconst MyUIReportUser = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/UserProfle/UserReport\")\r\n)\r\nconst MyUIUserReview = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/UserProfle/UserReview\")\r\n)\r\n/** Verify account */\r\nconst MyUIUploadType = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Verify/VerifyUploadType\")\r\n)\r\nconst MyUIVerifyFace = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Verify/VerifyFace\")\r\n)\r\nconst MyUIEnterOtp = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Login/EnterOtp\")\r\n)\r\nconst MyUIUserRegister = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Login/UserRegister\")\r\n)\r\nconst MyUIForgotPassword = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Login/ForgotPassword\")\r\n)\r\nconst MyUIEnterNewPassword = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Login/EnterNewPassword\")\r\n)\r\nconst MyUIFooter = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Footer\")\r\n)\r\n/** Help us */\r\nconst MyUIHelpusDirection = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Helpus/Direction\")\r\n)\r\nconst MyUIFAQs = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Helpus/FAQs\")\r\n)\r\n/** Html page */\r\nconst MyUITopic = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Topic\")\r\n)\r\nconst MyUIBlog = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Blog\")\r\n)\r\nconst MyUIOneNotification = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/AdminTableCard/OneNotification\"\r\n )\r\n)\r\n/** Payment */\r\nconst MyUIPaymentWallet = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Payment/PaymentWallet\")\r\n)\r\nconst MyUIBankAccount = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Payment/BankAccount\")\r\n)\r\nconst MyUIWithdrawPayment = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Payment/WithdrawPayment\")\r\n)\r\nconst MyUIAddBankAccount = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Payment/AddBankAccount\")\r\n)\r\nconst MyUITransactionHistories = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/Payment/TransactionHistories\"\r\n )\r\n)\r\nconst MyUIVerifyLoadingAnimation = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/VerifyLoadingAnimation\")\r\n)\r\n/** Admin table card type */\r\nconst MyUISavingCoin = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/AdminTableCard/SavingCoin\"\r\n )\r\n)\r\nconst MyUISelectAddress = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/SelectAddress\")\r\n)\r\nconst MyUIShare = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Share\")\r\n)\r\nconst MyUIOrderDetailOld = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Detail_old\")\r\n)\r\nconst MyUICancelOrder = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/CancelOrder\")\r\n)\r\nconst MyUIReviewOrder = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/ReviewOrder\")\r\n)\r\nconst WrapModalCustomHeader = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/WModalCustomHeader\")\r\n)\r\nconst WrapLandingPage = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/LandingPage\")\r\n)\r\nconst MyUILandingPageGrid = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/LandingPageGrid\")\r\n)\r\nconst MyUILandingPageCollapseGroup = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/LandingPageCollapseGroup\"\r\n )\r\n)\r\nconst MyUIHtml = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Html\")\r\n)\r\nconst MyUIRowVideoStepsGuide = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/RowVideoStepsGuide\")\r\n)\r\nconst MyUISEOTitle = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/SEOTitle\")\r\n)\r\nconst MyUIHeaderBlogList = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/HeaderBlogList\")\r\n)\r\nconst MyUISGTravelling = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Travelling/SGTravelling\")\r\n)\r\nconst MyUISGTravellingFilter = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Travelling/Filter\")\r\n)\r\n\r\nconst List = {\r\n sg_header: MUIHeader,\r\n sg_footer: MyUIFooter,\r\n sg_banner: MUIBanner,\r\n sg_avatar: MUIAvatar,\r\n sg_insurance: MUIInsurrance,\r\n sg_comming_soon: MUIComingSoon,\r\n sg_not_available: MUINotAvailable,\r\n wcontent: MUIWContent,\r\n autoload_list: MUIAutoLoadList,\r\n button_form: MUIButtonForm,\r\n alert: MUIAlertTemplate,\r\n image_slides: MUIImageSlides,\r\n fancybox: MUIFancybox,\r\n search_box_withdata: MUISearchBoxWData,\r\n list_card: MUIListCard,\r\n slide_card: MUISlideCard,\r\n popover: MyUIPopover,\r\n helmet: MUIHelmet,\r\n sg_download_app_info: MyUIDownloadAppInfo,\r\n verify_loading_animation: MyUIVerifyLoadingAnimation,\r\n /** Home */\r\n sg_home_searchbar: MUIHomeSearchbar,\r\n sg_home_rental_car: MyUIHomeRentalCar,\r\n sg_home_car_suggest: MyUIHomeCarSuggest,\r\n /**/\r\n /** Category */\r\n sg_header_category: MUIHeaderCategory,\r\n sg_filter_category: MUIFilterCategory,\r\n sg_header_category_full_v2: MUIHeaderCategoryFullv2,\r\n sg_filter_special_attribute: MUIFilterSpecialAttribute,\r\n sg_button_refresh: MUIButtonRefresh,\r\n /**/\r\n /** Detail */\r\n sg_product: MUIProduct,\r\n sg_booking_info: MUIBookingInfo,\r\n sg_confirm_booking: MUIConfirmBooking,\r\n sg_header_detail: MUIHeaderDetail,\r\n sg_vehicle_map: MUIVehicleMap,\r\n sg_vehicle_delivery_adress: MUIVehicleDeliveryAdress,\r\n sg_car_name: MyUICarName,\r\n sg_car_img_slide: MyUICarImageSlide,\r\n sg_booking_confirm: MyUIBookingConfirm,\r\n sg_message_for_owner: MyUIMessageForOwner,\r\n sg_price_details: MyUIPriceDetails,\r\n sg_select_secutity: MyUISelectSecurity,\r\n sg_booking_success: MyUIBookingSuccess,\r\n /** Login */\r\n sg_login: MUILogin,\r\n sg_enter_otp: MyUIEnterOtp,\r\n sg_user_register: MyUIUserRegister,\r\n sg_forgot_pwd: MyUIForgotPassword,\r\n sg_enter_new_pwd: MyUIEnterNewPassword,\r\n /** History */\r\n sg_order_action: MUIOrderAction,\r\n sg_order_detail: MUIOrderDetail,\r\n sg_order_progress: MUIOrderProgress,\r\n sg_order_insurrance: MUIOrderInsurrance,\r\n sg_order_images: MUIOrderImages,\r\n sg_order_prices: MUIOrderPrices,\r\n sg_order_others: MUIOrderOthers,\r\n sg_order_trader: MUIOrderTrader,\r\n sg_order_header: MUIOrderHeader,\r\n /** use admin v5 */\r\n admintable_table_list_card: MUIAdmintableTablListCard,\r\n /** popup trip detail */\r\n countdown_time: MyUICountdownTime,\r\n /** User Profile */\r\n sg_user_avatar: MyUIUserAvatar,\r\n sg_user_main_info: MyUIUserMainInfo,\r\n sg_user_report_user: MyUIReportUser,\r\n sg_user_review: MyUIUserReview,\r\n /** Verify Account */\r\n sg_verify_face: MyUIVerifyFace,\r\n sg_verify_upload_types: MyUIUploadType,\r\n /** Help us */\r\n sg_helpus_direction: MyUIHelpusDirection,\r\n sg_faqs: MyUIFAQs,\r\n /** Html ui */\r\n sg_blog_content: MyUIBlog,\r\n sg_topic_content: MyUITopic,\r\n /** notification */\r\n sg_one_notification: MyUIOneNotification,\r\n /** payment */\r\n sg_payment_wallet: MyUIPaymentWallet,\r\n sg_bank_account: MyUIBankAccount,\r\n sg_withdraw_payment: MyUIWithdrawPayment,\r\n sg_add_bank_account: MyUIAddBankAccount,\r\n sg_transactions_histories: MyUITransactionHistories,\r\n /** OrderDetail */\r\n sg_orderdetail_general_info: MUIOrderDetailGeneralInfo,\r\n sg_orderdetail_renter_info: MUIOrderDetailRenterInfo,\r\n sg_orderdetail_booking_info: MUIOrderdetailBookingInfo,\r\n sg_orderdetail_payment_info: MUIOrderDetailPaymentInfo,\r\n sg_orderdetail_insurance_info: MUIOrderDetailInsuranceInfo,\r\n sg_orderdetail_action: MUIOrderDetailAction,\r\n sg_orderdetail_profit_info: MUIOrderDetailProfitInfo,\r\n sg_header_orders: MyUIHeaderOrders,\r\n /** */\r\n sg_saving_card: MyUISavingCoin,\r\n sg_loading_overlay: MyUIWLoadingOverlay,\r\n sg_button: MyUISGButton,\r\n sg_select_address: MyUISelectAddress,\r\n sg_loading_skeleton: MyUIWLoadingSkeleton,\r\n sg_header_mobile_v2: MyUIHeaderMobileV2,\r\n sg_share: MyUIShare,\r\n sg_content_overlay: MyUIContentOverlay,\r\n // backup Chuyến đi của tôi cũ\r\n sg_order_detail_old: MyUIOrderDetailOld,\r\n /** Trip details */\r\n sg_trip_detail: MyUITripDetail,\r\n tripdetail_general_info: GeneralInfo,\r\n tripdetail_vehicle_info: VehicleInfo,\r\n tripdetail_payment_info: PaymentInfo,\r\n tripdetail_owner_info: OwnerInfo,\r\n tripdetail_support_info: SupportInfo,\r\n tripdetail_blog_suggestion: BlogSuggestion,\r\n tripdetail_insurance_info: InsuranceInfo,\r\n tripdetail_action: Action,\r\n sg_cancel_order: MyUICancelOrder,\r\n sg_review_order: MyUIReviewOrder,\r\n /** */\r\n sg_wrap_modal_custom_header: WrapModalCustomHeader,\r\n sg_landing_page: WrapLandingPage,\r\n sg_landing_page_grid: MyUILandingPageGrid,\r\n sg_landing_page_collapse_group: MyUILandingPageCollapseGroup,\r\n sg_html: MyUIHtml,\r\n sg_row_video_steps_guide: MyUIRowVideoStepsGuide,\r\n sg_estimated_income: MyUISGEstimatedIncome,\r\n sg_seo_title: MyUISEOTitle,\r\n /** Blog list */\r\n sg_header_blog_list: MyUIHeaderBlogList,\r\n sg_travelling: MyUISGTravelling,\r\n sg_travelling_filter: MyUISGTravellingFilter,\r\n}\r\nconst MyUIOne = {\r\n init() {\r\n MyUIHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\nexport default MyUIOne\r\n","import React from \"react\"\r\nimport MyPageHelpers from \"src/core/components/MyPage/MyPageHelpers\"\r\nconst PageHome = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/Home\")\r\n)\r\nconst PageCategory = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/Category\")\r\n)\r\nconst PageDetail = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/Detail\")\r\n)\r\nconst PageHistory = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/History\")\r\n)\r\nconst PageAdminListCard = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/AdminListCard\")\r\n)\r\nconst PageUserProfile = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/UserProfile\")\r\n)\r\nconst PageVerifyAccount = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/VerifyAccount\")\r\n)\r\nconst PageMyService = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/MyService\")\r\n)\r\nconst PageEditMyService = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/EditMyService\")\r\n)\r\nconst PageAddService = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/AddService\")\r\n)\r\nconst PageWSlug = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/Slug\")\r\n)\r\nconst PageSaving = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/Saving\")\r\n)\r\nconst PageHelpUs = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/Helpus\")\r\n)\r\nconst PageNotification = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/Notification\")\r\n)\r\nconst PagePayment = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/Payment\")\r\n)\r\nconst Dev_Test = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/Dev_Test\")\r\n)\r\nconst PageMyTrips = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/MyTrips\")\r\n)\r\nconst PageMyTripsNow = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/MyTripsNow\")\r\n)\r\nconst PageMyTripsHistoty = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/MyTripsHistory\")\r\n)\r\nconst PageMyOrders = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/MyOrders\")\r\n)\r\nconst PageMyActivitySchedule = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyPage/Types/MyActivitySchedule\")\r\n)\r\nconst PageNotFound = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/NotFound\")\r\n)\r\nconst PageSGTravelling = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/SGTravelling\")\r\n)\r\nconst List = {\r\n home: PageHome,\r\n category: PageCategory,\r\n detail: PageDetail,\r\n history: PageHistory,\r\n admin_list_card: PageAdminListCard,\r\n sg_user_profile: PageUserProfile,\r\n sg_verify_account: PageVerifyAccount,\r\n sg_my_service: PageMyService,\r\n sg_edit_my_service: PageEditMyService,\r\n sg_add_service: PageAddService,\r\n slug: PageWSlug,\r\n sg_saving: PageSaving,\r\n helpus: PageHelpUs,\r\n sg_notification: PageNotification,\r\n sg_payment: PagePayment,\r\n sg_dev_test: Dev_Test,\r\n mytrips: PageMyTrips,\r\n my_trips_now: PageMyTripsNow,\r\n my_trips_history: PageMyTripsHistoty,\r\n my_orders: PageMyOrders,\r\n my_activity_schedule: PageMyActivitySchedule,\r\n sg_not_found: PageNotFound,\r\n sg_travelling: PageSGTravelling,\r\n}\r\nconst MyPageOne = {\r\n init() {\r\n MyPageHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\n\r\nexport default MyPageOne\r\n","import React from \"react\"\r\nimport { MyControlHelpers } from \"@macashipo/mlib\"\r\nconst MCInputAddress = React.lazy(() => import(\"./Types/input_address\"))\r\nconst MCRadioList = React.lazy(() => import(\"./Types/list_radio\"))\r\nconst MCCheckboxList = React.lazy(() => import(\"./Types/list_checkbox\"))\r\nconst MCInputRange = React.lazy(() => import(\"./Types/input_range\"))\r\nconst MCInputSelect = React.lazy(() => import(\"./Types/input_select\"))\r\nconst MCInputDatetime = React.lazy(() => import(\"./Types/input_datetime\"))\r\nconst MCNiceSelect = React.lazy(() => import(\"./Types/nice_select\"))\r\nconst MCInputRate = React.lazy(() => import(\"./Types/input_rate\"))\r\nconst MCButtonModalForm = React.lazy(() => import(\"./Types/button_modal_form\"))\r\nconst MCInputDate = React.lazy(() => import(\"./Types/input_date\"))\r\nconst MCSelectCustom = React.lazy(() => import(\"./Types/select_custom\"))\r\nconst MCInputText = React.lazy(() => import(\"./Types/input_text\"))\r\nconst MCInputPassword = React.lazy(() => import(\"./Types/input_password\"))\r\nconst MCInputDateString = React.lazy(() => import(\"./Types/input_date_string\"))\r\nconst MCInputCurrency = React.lazy(() => import(\"./Types/input_currency\"))\r\nconst MCInputPhoneNumber = React.lazy(\r\n () => import(\"./Types/input_phone_number\")\r\n)\r\nconst MCInputPasswordv2 = React.lazy(() => import(\"./Types/input_password_v2\"))\r\nconst MCInputDateFromTo = React.lazy(() => import(\"./Types/input_date_from_to\"))\r\nconst MCInputDateFromToV2 = React.lazy(\r\n () => import(\"./Types/input_date_from_to_v2\")\r\n)\r\nconst MCButtonSelectAddress = React.lazy(\r\n () => import(\"./Types/button_select_address\")\r\n)\r\nconst MCCheckWithIcon = React.lazy(() => import(\"./Types/check_with_icon\"))\r\nconst MCInputDualRange = React.lazy(() => import(\"./Types/input_dual_range\"))\r\nconst MCSelect2CustomFilter = React.lazy(\r\n () => import(\"./Types/select2_custom_filter\")\r\n)\r\nconst MCInputDateTimeV2 = React.lazy(() => import(\"./Types/input_datetime_v2\"))\r\nconst MCInputAddressV2 = React.lazy(() => import(\"./Types/input_address_v2\"))\r\nconst MCInputDateFromToDetail = React.lazy(\r\n () => import(\"./Types/input_date_from_to_detail\")\r\n)\r\nconst MCInputDateFromToSearch = React.lazy(\r\n () => import(\"./Types/input_date_from_to_search\")\r\n)\r\nconst MCInputTimeFromToSearch = React.lazy(\r\n () => import(\"./Types/input_time_from_to_search\")\r\n)\r\nconst List = {\r\n input_address: MCInputAddress,\r\n input_range: MCInputRange,\r\n list_radio: MCRadioList,\r\n list_checkbox: MCCheckboxList,\r\n input_select: MCInputSelect,\r\n input_datetime: MCInputDatetime,\r\n nice_select: MCNiceSelect,\r\n input_rate: MCInputRate,\r\n button_modal_form: MCButtonModalForm,\r\n input_date: MCInputDate,\r\n select_custom: MCSelectCustom,\r\n input_text: MCInputText,\r\n input_password: MCInputPassword,\r\n input_date_string: MCInputDateString,\r\n input_currency: MCInputCurrency,\r\n input_phone_number: MCInputPhoneNumber,\r\n input_password_v2: MCInputPasswordv2,\r\n input_date_from_to: MCInputDateFromTo,\r\n input_date_from_to_v2: MCInputDateFromToV2,\r\n button_select_address: MCButtonSelectAddress,\r\n check_with_icon: MCCheckWithIcon,\r\n input_dual_range: MCInputDualRange,\r\n select2_custom_filter: MCSelect2CustomFilter,\r\n input_datetime_v2: MCInputDateTimeV2,\r\n input_address_v2: MCInputAddressV2,\r\n input_date_from_to_detail: MCInputDateFromToDetail,\r\n input_date_from_to_search: MCInputDateFromToSearch,\r\n input_time_from_to_search: MCInputTimeFromToSearch,\r\n}\r\nconst MyControlOne = {\r\n init() {\r\n MyControlHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\n\r\nexport default MyControlOne\r\n","import React from \"react\"\r\nimport { MyFormControlHelpers, CSuppense } from \"@macashipo/mlib\"\r\n\r\nconst V1_mfc_mycontrol = React.lazy(\r\n () => import(\"src/core/modules/v1page/MyForm/Types/v1_mfc_mycontrol\")\r\n)\r\n\r\nconst ListControl = {\r\n input_address: \"input_address\",\r\n list_radio: \"list_radio\",\r\n list_checkbox: \"list_checkbox\",\r\n input_range: \"input_range\",\r\n input_select: \"input_select\",\r\n input_datetime: \"input_datetime\",\r\n nice_select: \"nice_select\",\r\n input_rate: \"input_rate\",\r\n button_modal_form: \"button_modal_form\",\r\n select_custom: \"select_custom\",\r\n input_text: \"input_text\",\r\n input_password: \"input_password\",\r\n input_date: \"input_date\",\r\n input_date_string: \"input_date_string\",\r\n input_currency: \"input_currency\",\r\n input_phone_number: \"input_phone_number\",\r\n input_password_v2: \"input_password_v2\",\r\n input_date_from_to: \"input_date_from_to\",\r\n input_date_from_to_v2: \"input_date_from_to_v2\",\r\n button_select_address: \"button_select_address\",\r\n check_with_icon: \"check_with_icon\",\r\n input_dual_range: \"input_dual_range\",\r\n select2_custom_filter: \"select2_custom_filter\",\r\n input_datetime_v2: \"input_datetime_v2\",\r\n input_address_v2: \"input_address_v2\",\r\n input_date_from_to_detail: \"input_date_from_to_detail\",\r\n input_date_from_to_search: \"input_date_from_to_search\",\r\n input_time_from_to_search: \"input_time_from_to_search\",\r\n}\r\nconst MyFormControlOne = {\r\n init() {\r\n for (let k of Object.keys(ListControl)) {\r\n MyFormControlHelpers.addTypes(k, props => {\r\n return CSuppense({ ...props, typeControl: k }, V1_mfc_mycontrol)\r\n })\r\n }\r\n },\r\n}\r\n\r\nexport default MyFormControlOne\r\n","import React from \"react\"\r\nconst MC_ic_self_driving = props => {\r\n const { fill, style } = props\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\nexport default MC_ic_self_driving\r\n","import React from \"react\"\r\nconst MC_ic_long_term_rent = props => {\r\n const { fill, style } = props\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\nexport default MC_ic_long_term_rent\r\n","import React from \"react\"\r\nconst MC_ic_has_driver = props => {\r\n const { fill, style } = props\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\nexport default MC_ic_has_driver\r\n","import React from \"react\"\r\nimport { MyIconHelpers } from \"@macashipo/mlib\"\r\nimport MC_ic_self_driving from \"./Types/ic_self_driving\"\r\nimport MC_ic_long_term_rent from \"./Types/ic_long_term_rent\"\r\nimport MC_ic_has_driver from \"./Types/ic_has_driver\"\r\n\r\nconst MI_ic_location_pin = React.lazy(() => import(\"./Types/ic_location_pin\"))\r\nconst MI_ic_heart = React.lazy(() => import(\"./Types/ic_heart\"))\r\nconst MI_ic_vehicle_type = React.lazy(() => import(\"./Types/ic_vehicle_type\"))\r\nconst MI_ic_vehicle_make = React.lazy(() => import(\"./Types/ic_vehicle_make\"))\r\nconst MI_ic_chevron_down = React.lazy(() => import(\"./Types/ic_chevron_down\"))\r\nconst MI_ic_refresh = React.lazy(() => import(\"./Types/ic_refresh\"))\r\nconst MI_ic_filter_category = React.lazy(\r\n () => import(\"./Types/ic_filter_category\")\r\n)\r\nconst MI_ic_facebook = React.lazy(() => import(\"./Types/ic_facebook\"))\r\nconst MI_ic_youtube = React.lazy(() => import(\"./Types/ic_youtube\"))\r\nconst MI_ic_tiktok = React.lazy(() => import(\"./Types/ic_tiktok\"))\r\nconst MI_ic_instagram = React.lazy(() => import(\"./Types/ic_instagram\"))\r\nconst MI_ic_taxi_download = React.lazy(() => import(\"./Types/ic_taxi_download\"))\r\nconst MI_ic_qrdownload = React.lazy(() => import(\"./Types/ic_qrdownload\"))\r\nconst MI_ic_discount = React.lazy(() => import(\"./Types/ic_discount\"))\r\nconst MI_ic_car_insurance = React.lazy(() => import(\"./Types/ic_car_insurance\"))\r\nconst MI_ic_documents = React.lazy(() => import(\"./Types/ic_documents\"))\r\nconst MI_ic_mortgage = React.lazy(() => import(\"./Types/ic_mortgage\"))\r\nconst MI_ic_car_flag = React.lazy(() => import(\"./Types/ic_flag\"))\r\nconst MI_ic_insurance = React.lazy(() => import(\"./Types/ic_insurance\"))\r\nconst MI_ic_gg_map_location_pin = React.lazy(\r\n () => import(\"./Types/ic_gg_map_location_pin\")\r\n)\r\nconst MI_ic_minus = React.lazy(() => import(\"./Types/ic_minus\"))\r\nconst MI_ic_plus = React.lazy(() => import(\"./Types/ic_plus\"))\r\nconst MI_ic_back = React.lazy(() => import(\"./Types/ic_back\"))\r\n// const MC_ic_self_driving = React.lazy(() => import(\"./Types/ic_self_driving\"))\r\n// const MC_ic_long_term_rent = React.lazy(\r\n// () => import(\"./Types/ic_long_term_rent\")\r\n// )\r\n// const MC_ic_has_driver = React.lazy(() => import(\"./Types/ic_has_driver\"))\r\nconst List = {\r\n ic_location_pin: MI_ic_location_pin,\r\n ic_heart: MI_ic_heart,\r\n ic_vehicle_type: MI_ic_vehicle_type,\r\n ic_vehicle_make: MI_ic_vehicle_make,\r\n ic_chevron_down: MI_ic_chevron_down,\r\n ic_refresh: MI_ic_refresh,\r\n ic_filter_category: MI_ic_filter_category,\r\n ic_facebook: MI_ic_facebook,\r\n ic_youtube: MI_ic_youtube,\r\n ic_tiktok: MI_ic_tiktok,\r\n ic_instagram: MI_ic_instagram,\r\n ic_taxi_download: MI_ic_taxi_download,\r\n self_driving: MC_ic_self_driving,\r\n long_term_rent: MC_ic_long_term_rent,\r\n has_driver: MC_ic_has_driver,\r\n ic_qrdownload: MI_ic_qrdownload,\r\n discount: MI_ic_discount,\r\n car_insurance: MI_ic_car_insurance,\r\n documents: MI_ic_documents,\r\n mortgage: MI_ic_mortgage,\r\n ic_flag: MI_ic_car_flag,\r\n ic_insurance: MI_ic_insurance,\r\n ic_gg_map_location_pin: MI_ic_gg_map_location_pin,\r\n ic_minus: MI_ic_minus,\r\n ic_plus: MI_ic_plus,\r\n ic_back: MI_ic_back,\r\n}\r\nconst MyIconOne = {\r\n init() {\r\n MyIconHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\n\r\nexport default MyIconOne\r\n","import React from \"react\"\r\nimport { MyButtonHelpers } from \"@macashipo/mlib\"\r\nimport { CSuppense } from \"src/core/components\"\r\n\r\nconst MB_filter_table = React.lazy(() => import(\"./Types/filter_table\"))\r\n\r\nconst List = {\r\n filter_table: MB_filter_table,\r\n}\r\nconst MyUIOne = {\r\n init() {\r\n MyButtonHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\n\r\nexport default MyUIOne\r\n","import { MyLibHelpers } from \"@macashipo/mlib\"\r\nimport React from \"react\"\r\n\r\nconst MyLib_react_google_places_autocomplete = React.lazy(() =>\r\n import(\"./Types/react_google_places_autocomplete\")\r\n)\r\nconst MyLib_react_google_places_autocomplete_custom = React.lazy(() =>\r\n import(\"./Types/react_google_places_autocomplete_custom\")\r\n)\r\nconst MyLib_react_google_places_autocomplete_custom_dropdown = React.lazy(() =>\r\n import(\"./Types/react_google_places_autocomplete_custom_v2\")\r\n)\r\nconst MyLib_react_google_places_autocomplete_sg_mobile = React.lazy(() =>\r\n import(\"./Types/search_address_mobile\")\r\n)\r\nconst List = {\r\n react_google_places_autocomplete: MyLib_react_google_places_autocomplete,\r\n react_google_places_autocomplete_custom:\r\n MyLib_react_google_places_autocomplete_custom,\r\n react_google_places_autocomplete_custom_dropdown: MyLib_react_google_places_autocomplete_custom_dropdown,\r\n react_google_places_autocomplete_sg_mobile:MyLib_react_google_places_autocomplete_sg_mobile\r\n}\r\nconst MyLibOne = {\r\n init() {\r\n MyLibHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\n\r\nexport default MyLibOne\r\n","import { HLink, HUtils } from \"@macashipo/mlib\"\r\nimport classNames from \"classnames\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst HomeCategoryFields = {\r\n fCarCount: \"carCount\",\r\n fDate: \"date\",\r\n}\r\nconst HomeCategoryCard = props => {\r\n const { data, config } = props\r\n const _url = HUtils.get(data, `${homeSlidesFields.fOneSlideMoreInfo}.url`)\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n const carCount = HUtils.get(data, `Data.${HomeCategoryFields.fCarCount}`)\r\n const date = HUtils.get(data, `Data.${HomeCategoryFields.fDate}`)\r\n const config4EachCard = HUtils.get(config, \"config4EachCard\", {})\r\n const onHandleBtn = e => {\r\n e?.preventDefault()\r\n if (_url) {\r\n HLink.openUrl(_url, \"_blank\")\r\n }\r\n }\r\n return (\r\n \r\n {title\r\n
    \r\n

    {title}

    \r\n {carCount &&
    {carCount}
    }\r\n {date &&
    {date}
    }\r\n
    \r\n \r\n )\r\n}\r\nconst Wrap = styled.a`\r\n background-color: var(--color-text-fff);\r\n border-radius: 15px;\r\n &.cursor-pointer {\r\n cursor: pointer;\r\n }\r\n & img {\r\n height: 300px;\r\n object-fit: cover;\r\n border-radius: 15px 15px 0 0;\r\n }\r\n & .content {\r\n border-radius: 0 0 15px 15px;\r\n padding: 15px;\r\n min-height: 110px;\r\n background-color: var(--color-text-fff);\r\n & .title {\r\n font-size: 20px;\r\n font-weight: 700;\r\n color: var(--color-text-000);\r\n line-height: normal;\r\n }\r\n & .car-count {\r\n font-size: 16px;\r\n color: var(--color-text-000);\r\n min-height: 25px;\r\n }\r\n & .date {\r\n color: #998f8f;\r\n font-size: 12px;\r\n padding-top: 5px;\r\n }\r\n }\r\n @media (max-width: 996px) {\r\n & img {\r\n height: 250px;\r\n }\r\n }\r\n`\r\nexport default HomeCategoryCard\r\n","import { HLink, HUtils } from \"@macashipo/mlib\"\r\nimport classNames from \"classnames\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst HomeBlogFields = {\r\n fDate: \"createdDate\",\r\n fOverview: \"bodyOverview\",\r\n}\r\nconst HomeBlogCard = props => {\r\n const { data, config } = props\r\n const _url = HUtils.get(data, `${homeSlidesFields.fOneSlideMoreInfo}.url`)\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n const description = HUtils.get(data, `Data.${HomeBlogFields.fOverview}`)\r\n const date = HUtils.get(data, `Data.${HomeBlogFields.fDate}`)\r\n const config4EachCard = HUtils.get(config, \"config4EachCard\", {})\r\n\r\n const onHandleClick = e => {\r\n e?.preventDefault()\r\n if (_url) {\r\n HLink.openUrl(_url, \"_blank\")\r\n }\r\n }\r\n\r\n return (\r\n \r\n {title}\r\n
    \r\n {title && (\r\n \r\n )}\r\n {description && (\r\n
    \r\n )}\r\n {date &&
    {date}
    }\r\n \r\n \r\n )\r\n}\r\nconst Wrap = styled.a`\r\n display: block;\r\n border: 1px solid var(--color-border-d4d4d4);\r\n border-radius: 15px;\r\n background-color: var(--color-text-fff);\r\n &.cursor-pointer {\r\n cursor: pointer;\r\n }\r\n & img {\r\n height: 322px;\r\n border-radius: 15px 15px 0 0;\r\n object-fit: cover;\r\n }\r\n & .title {\r\n font-size: 20px;\r\n color: var(--color-text-000);\r\n font-weight: 700;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n display: -webkit-box;\r\n -webkit-line-clamp: 2; /* number of lines to show */\r\n line-clamp: 2;\r\n -webkit-box-orient: vertical;\r\n min-height: 50px;\r\n line-height: normal;\r\n }\r\n & .description {\r\n color: #696969;\r\n font-size: 16px;\r\n padding-top: 15px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n display: -webkit-box;\r\n -webkit-line-clamp: 3; /* number of lines to show */\r\n line-clamp: 3;\r\n -webkit-box-orient: vertical;\r\n }\r\n & .date {\r\n font-size: 12px;\r\n color: #696969;\r\n padding-top: 15px;\r\n }\r\n & .wrap-content {\r\n padding: 15px;\r\n border-radius: 0 0 15px 15px;\r\n }\r\n @media (max-width: 767px) {\r\n & img {\r\n height: 280px;\r\n }\r\n }\r\n`\r\nexport default HomeBlogCard\r\n","import { HUtils } from \"@macashipo/mlib\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\n\r\nconst HomeUsageCard = props => {\r\n const { data } = props\r\n\r\n const _url = HUtils.get(data, `${homeSlidesFields.fOneSlideMoreInfo}.url`)\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n return (\r\n \r\n {title}\r\n

    {title}

    \r\n
    \r\n )\r\n}\r\n\r\nexport default HomeUsageCard\r\n","import { HLink, HUtils } from \"@macashipo/mlib\"\r\nimport classNames from \"classnames\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst HomePromotionCard = props => {\r\n const { data } = props\r\n\r\n const _url = HUtils.get(data, `${homeSlidesFields.fOneSlideMoreInfo}.url`)\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n const onHandleClick = () => {\r\n if (_url) {\r\n HLink.openUrl(_url, \"_blank\")\r\n }\r\n }\r\n return (\r\n \r\n {title}\r\n \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n &.cursor-pointer {\r\n cursor: pointer;\r\n }\r\n & img {\r\n object-fit: cover;\r\n }\r\n`\r\nexport default HomePromotionCard\r\n","import { HLink, HUtils, MyUI } from \"@macashipo/mlib\"\r\nimport classNames from \"classnames\"\r\nimport { Button } from \"reactstrap\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst HomeLanding = {\r\n fCarCount: \"carCount\",\r\n fDate: \"date\",\r\n}\r\nconst HomeLandingCard = props => {\r\n const { data, config } = props\r\n\r\n const _url = HUtils.get(data, `${homeSlidesFields.fOneSlideMoreInfo}.url`)\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n const description = data?.[homeSlidesFields.fOneSlideDescription]\r\n const moreInfo = data?.[homeSlidesFields.fOneSlideMoreInfo] || {}\r\n const configBtn = HUtils.get(moreInfo, \"websiteSetting.configBtn\") || {}\r\n const configImage = HUtils.get(config, \"itemConfig.configImage\") || {}\r\n const configContent = HUtils.get(config, \"itemConfig.configContent\") || {}\r\n const defaultRel =\r\n HUtils.get(config, \"itemConfig.rel\") || \"nofollow noreferrer\"\r\n\r\n const config4SEO = {\r\n useHeading: true,\r\n headingTag: \"h2\",\r\n ...HUtils.get(config, \"itemConfig.config4SEO\"),\r\n ...HUtils.get(moreInfo, \"websiteSetting.config4SEO\"),\r\n }\r\n const onHandleBtnLandingCard = () => {\r\n if (configBtn && configBtn?.url) {\r\n HLink.openUrl(configBtn?.url, \"_blank\")\r\n }\r\n }\r\n return (\r\n \r\n \r\n
    \r\n {title && (\r\n // \r\n \r\n )}\r\n {description && (\r\n
    \r\n )}\r\n {configBtn?.showBtn && (\r\n <>\r\n {/* eslint-disable-next-line */}{\" \"}\r\n \r\n {configBtn?.title}\r\n \r\n \r\n )}\r\n \r\n \r\n
    \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n`\r\nconst WrapContent: any = styled.div`\r\n width: ${(props: any) =>\r\n props?.configImage?.defaultWidth\r\n ? props?.configImage?.defaultWidth\r\n : \"100%\"};\r\n max-width: 100%;\r\n height: ${(props: any) =>\r\n props?.configImage?.defaultHeight\r\n ? props?.configImage?.defaultHeight\r\n : \"486px\"};\r\n background-image: linear-gradient(\r\n 90.05deg,\r\n rgba(0, 0, 0, 0.6) 6.91%,\r\n rgba(0, 0, 0, 0) 58.34%\r\n ),\r\n ${(props: any) => `url(\"${props.bgImage}\")`};\r\n background-repeat: no-repeat;\r\n background-position: ${(props: any) =>\r\n props?.configImage?.backgroundPosition\r\n ? props?.configImage?.backgroundPosition\r\n : \"center\"};\r\n object-fit: cover;\r\n background-size: cover;\r\n border-radius: 15px;\r\n padding: 15px;\r\n position: relative;\r\n\r\n & .wrap-content {\r\n position: absolute;\r\n top: 50%;\r\n left: 40px;\r\n transform: translateY(-50%);\r\n &.text-center {\r\n left: 0 !important;\r\n width: 100%;\r\n padding: 20px;\r\n & .title,\r\n & .description {\r\n text-align: center;\r\n }\r\n }\r\n }\r\n\r\n & .title {\r\n font-size: 36px;\r\n color: var(--color-text-fff);\r\n font-weight: 700;\r\n line-height: 49px;\r\n }\r\n & .description {\r\n color: var(--color-text-fff);\r\n font-size: 20px;\r\n margin-top: 15px;\r\n line-height: 29px;\r\n }\r\n & a.btn {\r\n margin-top: 25px;\r\n text-transform: uppercase;\r\n padding: 9px 30px;\r\n font-weight: 700;\r\n }\r\n @media (max-width: 1499px) {\r\n width: ${(props: any) =>\r\n props?.configImage?.desktopWidth\r\n ? props?.configImage?.desktopWidth\r\n : \"100%\"};\r\n height: ${(props: any) =>\r\n props?.configImage?.desktopHeight\r\n ? props?.configImage?.desktopHeight\r\n : \"486px\"};\r\n background-position: ${(props: any) =>\r\n props?.configImage?.desktopBackgroundPosition\r\n ? props?.configImage?.desktopBackgroundPosition\r\n : \"center\"};\r\n }\r\n @media (min-width: 992px) {\r\n max-width: calc(100vw - 100px);\r\n }\r\n @media (min-width: 768px) {\r\n & .wrap-content {\r\n left: ${(props: any) =>\r\n props?.configContent?.isTextCenterDesktop ? \"0\" : \"40px\"};\r\n width: ${(props: any) =>\r\n props?.configContent?.isTextCenterDesktop ? \"100%\" : \"unset\"};\r\n padding: ${(props: any) =>\r\n props?.configContent?.isTextCenterDesktop ? \"20px\" : \"0\"};\r\n & .title,\r\n & .description {\r\n text-align: ${(props: any) =>\r\n props?.configContent?.isTextCenterDesktop ? \"center\" : \"left\"};\r\n }\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n width: ${(props: any) =>\r\n props?.configImage?.tabletWidth\r\n ? props?.configImage?.tabletWidth\r\n : \"100%\"};\r\n height: ${(props: any) =>\r\n props?.configImage?.tabletHeight\r\n ? props?.configImage?.tabletHeight\r\n : \"486px\"};\r\n background-position: ${(props: any) =>\r\n props?.configImage?.tabletBackgroundPosition\r\n ? props?.configImage?.tabletBackgroundPosition\r\n : \"center\"};\r\n }\r\n @media (max-width: 767px) {\r\n width: ${(props: any) =>\r\n props?.configImage?.mobileWidth\r\n ? props?.configImage?.mobileWidth\r\n : \"100%\"};\r\n height: ${(props: any) =>\r\n props?.configImage?.mobileHeight\r\n ? props?.configImage?.mobileHeight\r\n : \"486px\"};\r\n background-position: ${(props: any) =>\r\n props?.configImage?.mobileBackgroundPosition\r\n ? props?.configImage?.mobileBackgroundPosition\r\n : \"center\"};\r\n & .wrap-content {\r\n left: 20px;\r\n }\r\n & .title {\r\n font-size: 30px;\r\n line-height: 39px;\r\n }\r\n & .description {\r\n font-size: 18px;\r\n line-height: 27px;\r\n }\r\n & .wrap-content {\r\n left: ${(props: any) =>\r\n props?.configContent.isTextCenterMobile ? \"0\" : \"20px\"};\r\n width: ${(props: any) =>\r\n props?.configContent?.isTextCenterMobile ? \"100%\" : \"unset\"};\r\n & .title,\r\n & .description {\r\n text-align: ${(props: any) =>\r\n props?.configContent.isTextCenterMobile ? \"center\" : \"left\"};\r\n }\r\n &.text-center {\r\n left: 0 !important;\r\n width: 100%;\r\n padding: 0px;\r\n & .title,\r\n & .description {\r\n text-align: center;\r\n }\r\n }\r\n }\r\n }\r\n`\r\nconst WrapTitle: any = styled.div`\r\n text-align: center;\r\n`\r\nexport default HomeLandingCard\r\n","import React from \"react\"\r\n\r\nimport iconInsurance from \"./ic_insurance.json\"\r\nimport iconCar from \"./car.json\"\r\nimport iconPriceTag from \"./price_tag.json\"\r\nimport iconMinicar from \"./minicar.json\"\r\n\r\nconst List = {\r\n aic_insurance: iconInsurance,\r\n aic_car: iconCar,\r\n aic_price_tag: iconPriceTag,\r\n aic_minicar: iconMinicar,\r\n}\r\nexport const getIconPath = iconName => {\r\n return List[iconName] ?? \"\"\r\n}\r\n","import { getIconPath } from \"./Types\"\r\nimport Lottie from \"react-lottie\"\r\n\r\nconst MAnimationIcon = props => {\r\n const { type, config, width, height, moreProps } = props\r\n const defaultOptions = {\r\n loop: true,\r\n autoplay: true,\r\n animationData: getIconPath(type),\r\n rendererSettings: {\r\n preserveAspectRatio: \"xMidYMid slice\",\r\n },\r\n ...config,\r\n }\r\n if (getIconPath(type)) {\r\n return (\r\n \r\n )\r\n }\r\n return <>\r\n}\r\n\r\nexport default MAnimationIcon\r\n","import { HLink, HUtils, MyIcon, MyUI } from \"@macashipo/mlib\"\r\nimport classnames from \"classnames\"\r\nimport classNames from \"classnames\"\r\nimport { Button } from \"reactstrap\"\r\nimport { squareBracketReplace, isHTMLString } from \"src/core/helpers/utils\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\nimport MAnimationIcon from \"../../MyAnimationIcon/AnimationIcon\"\r\n\r\nconst HomeDiscoverService = {\r\n fIcon: \"Icon\",\r\n fUrl: \"url\",\r\n}\r\nconst HomeDiscoverServiceCard = props => {\r\n const { data, config, configMoreInfo } = props\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n const description = data?.[homeSlidesFields.fOneSlideDescription]\r\n const icon = data?.[HomeDiscoverService.fIcon]\r\n const moreInfo = data?.[homeSlidesFields.fOneSlideMoreInfo] || {}\r\n const btnConfig =\r\n HUtils.get(configMoreInfo, \"websiteSetting.configBtn4EachCard\") || {}\r\n const itemConfig = HUtils.get(configMoreInfo, \"websiteSetting.itemConfig\")\r\n const url =\r\n moreInfo?.[HomeDiscoverService.fUrl] ||\r\n HUtils.get(moreInfo, \"websiteSetting.url\")\r\n const config4SEO = {\r\n useHeading: true,\r\n headingTag: \"h3\",\r\n ...HUtils.get(config, \"itemConfig.config4SEO\"),\r\n ...HUtils.get(moreInfo, \"websiteSetting.config4SEO\"),\r\n }\r\n\r\n const onHandleBtn = () => {\r\n if (url) {\r\n HLink.openUrl(squareBracketReplace(url, data), \"_blank\")\r\n }\r\n }\r\n const renderIcon = () => {\r\n if (icon) {\r\n if (isHTMLString(icon)) {\r\n return (\r\n \r\n )\r\n }\r\n if (icon?.startsWith(\"aic\")) {\r\n return (\r\n \r\n )\r\n }\r\n return \r\n }\r\n return <>\r\n }\r\n return (\r\n \r\n {renderIcon()}\r\n {img && !icon && (\r\n
    \r\n \"\"\r\n
    \r\n )}\r\n {title && (\r\n //

    \r\n // {title}\r\n //

    \r\n \r\n )}\r\n {description && (\r\n \r\n )}\r\n {url && btnConfig?.canShow && (\r\n \r\n {btnConfig?.title}\r\n \r\n )}\r\n
    \r\n )\r\n}\r\nconst Wrap: any = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n flex-direction: column;\r\n align-items: center;\r\n & svg {\r\n height: 113px;\r\n }\r\n &.mr-3 {\r\n margin-right: 1rem;\r\n }\r\n &.pr-3 {\r\n padding-right: 1rem;\r\n }\r\n & .title {\r\n color: var(--color-text-000);\r\n font-size: 20px;\r\n font-weight: 700;\r\n padding-top: 15px;\r\n }\r\n & .description {\r\n color: var(--color-535353);\r\n font-size: 16px;\r\n padding-top: 15px;\r\n max-width: 217px;\r\n text-align: center;\r\n }\r\n & button {\r\n margin-top: 20px;\r\n padding: 7px 20px;\r\n font-size: 14px !important;\r\n }\r\n & .image {\r\n overflow: hidden;\r\n & img {\r\n object-fit: scale-down;\r\n height: 90px;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n &.mobile-center {\r\n & .image {\r\n display: flex;\r\n justify-content: center;\r\n width: 100%;\r\n & img {\r\n height: 150px;\r\n }\r\n }\r\n & .title {\r\n text-align: center !important;\r\n width: 100%;\r\n }\r\n & .description {\r\n text-align: center !important;\r\n }\r\n }\r\n }\r\n`\r\nexport default HomeDiscoverServiceCard\r\n","import { HLink, HUtils } from \"@macashipo/mlib\"\r\nimport classNames from \"classnames\"\r\nimport { Button } from \"reactstrap\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst HomeHelps = props => {\r\n const { data, configMoreInfo, config } = props\r\n\r\n const _url = HUtils.get(data, `${homeSlidesFields.fOneSlideMoreInfo}.url`)\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n const description = data?.[homeSlidesFields.fOneSlideDescription]\r\n const moreInfo = data?.[homeSlidesFields.fOneSlideMoreInfo] || {}\r\n const config4EachCard = HUtils.get(config, \"config4EachCard\", {})\r\n const btnConfig = {\r\n ...HUtils.get(configMoreInfo, \"websiteSetting.configBtn4EachCard\"),\r\n ...HUtils.get(moreInfo, \"websiteSetting\"), // config của từng card\r\n }\r\n const onHandleBtn = () => {\r\n if (_url) {\r\n HLink.openUrl(_url, \"_blank\")\r\n }\r\n }\r\n return (\r\n \r\n {title}\r\n {title && (\r\n \r\n )}\r\n {description && (\r\n \r\n )}\r\n {btnConfig?.canShow && (\r\n \r\n {btnConfig?.title}\r\n \r\n )}\r\n \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n & .title {\r\n color: var(--color-text-000);\r\n font-size: 20px;\r\n font-weight: 700;\r\n }\r\n & .description {\r\n font-size: 16px;\r\n color: #5a5a5a;\r\n margin-top: 15px;\r\n max-width: 90%;\r\n }\r\n & a.btn {\r\n margin-top: 20px;\r\n padding: 7px 20px;\r\n }\r\n @media (max-width: 767px) {\r\n & .description {\r\n max-width: 100%;\r\n }\r\n }\r\n`\r\nexport default HomeHelps\r\n","import { HLink, HUtils } from \"@macashipo/mlib\"\r\nimport classNames from \"classnames\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst HomeAdvantageCard = props => {\r\n const { data, configMoreInfo } = props\r\n\r\n const _url = HUtils.get(data, `${homeSlidesFields.fOneSlideMoreInfo}.url`)\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n const description = data?.[homeSlidesFields.fOneSlideDescription]\r\n const itemConfig = HUtils.get(configMoreInfo, \"websiteSetting.itemConfig\")\r\n\r\n const onHandleClick = () => {\r\n if (_url) {\r\n HLink.openUrl(_url, \"_blank\")\r\n }\r\n }\r\n return (\r\n \r\n
    \r\n
    \r\n {title}\r\n
    \r\n {title && (\r\n

    \r\n )}\r\n {description && (\r\n \r\n )}\r\n \r\n )\r\n}\r\nconst Wrap: any = styled.div`\r\n &.cursor-pointer {\r\n cursor: pointer;\r\n }\r\n & .wrap-img {\r\n width: 100%;\r\n height: 475px;\r\n position: relative;\r\n & .bg-img {\r\n content: \"\";\r\n position: absolute;\r\n bottom: 0;\r\n right: 0;\r\n background-color: ${(props: any) =>\r\n props?.bgColor ? props?.bgColor : \"#e8e8e8\"};\r\n height: 50%;\r\n width: 50%;\r\n border-radius: 15px;\r\n }\r\n & img {\r\n border: 5px solid var(--color-text-fff);\r\n object-fit: cover;\r\n height: 455px;\r\n border-radius: 15px;\r\n position: absolute;\r\n width: calc(100% - 20px) !important;\r\n }\r\n }\r\n & .title {\r\n padding-top: 15px;\r\n font-size: 20px;\r\n color: var(--color-text-000);\r\n font-weight: 700;\r\n }\r\n & .description {\r\n color: #606060;\r\n font-size: 16px;\r\n padding-top: 15px;\r\n }\r\n`\r\nexport default HomeAdvantageCard\r\n","import React, { useEffect, useState } from \"react\"\r\nimport { HLink, MyIcon, MyUI } from \"@macashipo/mlib\"\r\nimport { categoryFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\nimport classNames from \"classnames\"\r\nimport NoImage from \"src/modules/app_sigo/assets/imgs/no-image.jpg\"\r\nimport { Button, Dropdown, DropdownMenu, DropdownToggle } from \"reactstrap\"\r\nimport { MdOutlineClose } from \"react-icons/md\"\r\n\r\nconst HomeCarCard = props => {\r\n const { data, config, moreConfig } = props\r\n let detailUrl = data?.[categoryFields.fSlug]\r\n const [open, setOpen] = useState(false)\r\n /**New version */\r\n if (window.location.search) {\r\n detailUrl = detailUrl + window.location.search\r\n }\r\n const onToggleDropdown = () => {\r\n setOpen(prev => !prev)\r\n }\r\n const renderImgSlider = () => {\r\n const imgList = data?.[categoryFields.fImageUrls] || []\r\n const dfImage = config?.defaultImage || NoImage\r\n const _slideConfig = config?.slideOptions || {}\r\n\r\n return (\r\n \r\n \r\n {config?.showAddWishList && (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n )\r\n }\r\n const renderContentItem = () => {\r\n const name = data?.[categoryFields.fPDName]\r\n const rate = data?.[categoryFields.fPDRate]\r\n const address = data?.[categoryFields.fAddress]\r\n const distance = data?.[categoryFields.fPDDistance]\r\n const freeDay = data?.[categoryFields.fFreeDaySegment_Text]\r\n const rentalPriceOriginalByDay =\r\n data?.[categoryFields.fRentalPriceByDayOriginal]\r\n const rentalPriceByDay = data?.[categoryFields.fRentalPriceByDay]\r\n let showOriginal =\r\n rentalPriceOriginalByDay && rentalPriceOriginalByDay !== rentalPriceByDay\r\n ? true\r\n : false\r\n // if (config?.isShowAmount) {\r\n // showOriginal =\r\n // rentalPriceOriginal && rentalPriceOriginal !== rentalPrice\r\n // ? true\r\n // : false\r\n // } else {\r\n // showOriginal =\r\n // rentalPriceOriginalByDay &&\r\n // rentalPriceOriginalByDay !== rentalPriceByDay\r\n // ? true\r\n // : false\r\n // }\r\n\r\n return (\r\n \r\n
    \r\n {/* eslint-disable-next-line */}\r\n \r\n

    {name}

    \r\n \r\n {rate && (\r\n
    \r\n \r\n {rate}\r\n
    \r\n )}\r\n
    \r\n {address && (\r\n
    {address}
    \r\n )}\r\n {freeDay &&
    {freeDay}
    }\r\n {/* \r\n {showOriginal && (\r\n 0 && \"mt-1px\"\r\n )}\r\n >\r\n {rentalPriceOriginal}\r\n \r\n )}\r\n */}\r\n \r\n {showOriginal && (\r\n
    {rentalPriceOriginalByDay}
    \r\n )}\r\n {rentalPriceByDay && (\r\n
    \r\n {rentalPriceByDay}\r\n /ngày\r\n
    \r\n )}\r\n \r\n
    \r\n )\r\n }\r\n return (\r\n \r\n {renderImgSlider()}\r\n {renderContentItem()}\r\n \r\n )\r\n}\r\nconst WrapSlider = styled.div`\r\n position: relative;\r\n max-height: 234px;\r\n min-height: 234px;\r\n height: 234px;\r\n\r\n & img {\r\n border-radius: 10px;\r\n max-height: 234px;\r\n height: 234px;\r\n object-fit: cover;\r\n }\r\n & .empty-img {\r\n text-align: center;\r\n }\r\n & .owl-carousel {\r\n z-index: 0 !important;\r\n }\r\n & .owl-dots {\r\n right: unset;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n display: flex;\r\n align-items: center;\r\n max-width: 80px;\r\n overflow: hidden;\r\n bottom: 10px !important;\r\n & .owl-dot {\r\n width: 4px !important;\r\n height: 4px !important;\r\n min-width: 4px !important;\r\n background-color: var(--color-text-e1e1e1) !important;\r\n margin-right: 5px !important;\r\n }\r\n & .owl-dot.active {\r\n background-color: var(--color-text-fff) !important;\r\n width: 6px !important;\r\n height: 6px !important;\r\n min-width: 6px !important;\r\n }\r\n }\r\n & .owl-nav {\r\n i:before {\r\n font-size: 14px;\r\n }\r\n }\r\n\r\n & .owl-nav {\r\n & .owl-prev {\r\n left: 5px !important;\r\n }\r\n & .owl-next {\r\n right: 5px !important;\r\n }\r\n }\r\n\r\n & .heart {\r\n position: absolute;\r\n top: 10px;\r\n right: 10px;\r\n z-index: 1;\r\n cursor: pointer;\r\n }\r\n & .wrap-item {\r\n cursor: pointer;\r\n }\r\n @media (max-width: 1199px) {\r\n & .wrap-item {\r\n .owl-nav {\r\n opacity: 0;\r\n pointer-events: none;\r\n touch-action: none;\r\n transition: all 0.25s;\r\n visibility: hidden;\r\n }\r\n }\r\n & .wrap-item:hover {\r\n .owl-nav {\r\n opacity: 0 !important;\r\n pointer-events: none !important;\r\n touch-action: none !important;\r\n visibility: hidden !important;\r\n & .disabled {\r\n display: none !important;\r\n opacity: 0 !important;\r\n }\r\n }\r\n }\r\n }\r\n`\r\nconst WrapContentItem = styled.div`\r\n padding: 10px 0;\r\n & .wrap-name {\r\n display: flex;\r\n justify-content: space-between;\r\n padding-bottom: 5px;\r\n & .name {\r\n color: var(--color-text-000);\r\n max-width: calc(100% - 60px);\r\n & h3 {\r\n font-size: 16px;\r\n font-weight: 700;\r\n line-height: normal;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n & .rate {\r\n font-size: 16px;\r\n color: var(--color-text-000);\r\n i {\r\n color: var(--color-text-000);\r\n margin-right: 5px;\r\n font-size: 17px;\r\n }\r\n }\r\n }\r\n & .wrap-sub-content {\r\n font-size: 14px;\r\n color: #6b6a6a;\r\n }\r\n & .wrap-price {\r\n display: none;\r\n align-items: center;\r\n & .original {\r\n color: #828282;\r\n font-size: 12px;\r\n text-decoration: line-through;\r\n padding-right: 5px;\r\n &.mt-1px {\r\n margin-top: 1px;\r\n }\r\n }\r\n & .rental-price {\r\n color: var(--color-text-000);\r\n font-weight: 700;\r\n font-size: 14px;\r\n & span.total {\r\n font-weight: 400;\r\n }\r\n &.underline {\r\n text-decoration: underline;\r\n }\r\n }\r\n }\r\n &.show-price-amount {\r\n & #amount-price {\r\n display: flex;\r\n }\r\n & #price-by-day {\r\n display: none;\r\n }\r\n }\r\n &.show-price-by-day {\r\n & #amount-price {\r\n display: none;\r\n }\r\n & #price-by-day {\r\n display: flex;\r\n }\r\n }\r\n & .btn-total-price-dropdown-toggle {\r\n padding: 0;\r\n border: none;\r\n box-shadown: none;\r\n }\r\n & .btn-total-price-dropdown-toggle:hover {\r\n }\r\n & .price-detail-dropdown-menu {\r\n padding: 20px;\r\n background-color: var(--color-text-fff);\r\n box-shadow: 0 8px 28px rgba(0, 0, 0, 0.28);\r\n width: 400px;\r\n border-radius: 20px;\r\n display: unset;\r\n opacity: 0;\r\n visibility: hidden;\r\n // animation: examplehide 400ms ease;\r\n // top: 0 !important;\r\n & .header {\r\n position: relative;\r\n text-align: center;\r\n & .btn-hide-dropdown {\r\n padding: 0;\r\n border: none;\r\n box-shadown: none;\r\n color: var(--color-text-222222);\r\n font-size: 16px;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n }\r\n & .title {\r\n font-size: 17px;\r\n font-weight: 600;\r\n color: var(--color-text-000);\r\n }\r\n }\r\n & > hr {\r\n margin: 20px -24px 0 !important;\r\n border-top: 1px solid #ddd;\r\n }\r\n & .content {\r\n padding: 24px 0 0;\r\n & .one-price-detail {\r\n font-size: 14px;\r\n padding-bottom: 10px;\r\n color: var(--color-text-111);\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n & .one-price-detail.amount {\r\n font-weight: 600;\r\n font-size: 15px;\r\n padding-bottom: 0px;\r\n }\r\n & > hr {\r\n margin-top: 10px !important;\r\n }\r\n }\r\n }\r\n & .price-detail-dropdown-menu.show {\r\n opacity: 1;\r\n visibility: visible;\r\n // animation: exampleshow 400ms ease;\r\n top: 25px !important;\r\n }\r\n // @keyframes examplehide {\r\n // 0% {\r\n // top: -235px;\r\n // }\r\n\r\n // 100% {\r\n // top: -180px;\r\n // }\r\n // }\r\n // @keyframes exampleshow {\r\n // 0% {\r\n // top: -180px;\r\n // }\r\n\r\n // 100% {\r\n // top: -235px;\r\n // }\r\n // }\r\n & .price-detail-dropdown-menu[x-placement=\"left-start\"] {\r\n left: 270px !important;\r\n }\r\n & .price-detail-dropdown-menu[x-placement=\"right-start\"] {\r\n left: -100px !important;\r\n transform: translate3d(100px, 4px, 0px) !important;\r\n }\r\n @media (max-width: 1499px) {\r\n & .price-detail-dropdown-menu[x-placement=\"left-start\"] {\r\n left: 300px !important;\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n & .price-detail-dropdown-menu[x-placement=\"left-start\"] {\r\n left: 250px !important;\r\n }\r\n }\r\n @media (max-width: 1024px) {\r\n & .price-detail-dropdown-menu[x-placement=\"left-start\"] {\r\n left: 235px !important;\r\n }\r\n }\r\n @media (max-width: 576px) {\r\n & .price-detail-dropdown-menu {\r\n width: calc(100vw - 10px);\r\n }\r\n & .price-detail-dropdown-menu[x-placement=\"left-start\"] {\r\n left: 0px !important;\r\n }\r\n }\r\n`\r\nconst Wrap = styled.div`\r\n &.one-car {\r\n margin-bottom: 15px;\r\n }\r\n @media (max-width: 767px) {\r\n padding-left: 0;\r\n padding-right: 0;\r\n }\r\n`\r\n// const Wrap2 = styled.div`\r\n// & .xe:not(.taixe) {\r\n// img {\r\n// width: 100%;\r\n// max-height: 246px;\r\n// height: 230px;\r\n// object-fit: cover;\r\n// }\r\n// }\r\n// @media (max-width: 1023px) {\r\n// & .xe:not(.taixe) {\r\n// img {\r\n// max-height: 230px;\r\n// height: 230px;\r\n// }\r\n// }\r\n// }\r\n// `\r\nexport default HomeCarCard\r\n","import classNames from \"classnames\"\r\nimport { HLink, MyUI } from \"@macashipo/mlib\"\r\nimport { historyFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\nimport Skeleton from \"react-loading-skeleton\"\r\nimport { useState } from \"react\"\r\n\r\nconst OneOrderCard = props => {\r\n const { data, fnList } = props\r\n const [canShow, setCanShow] = useState(false)\r\n\r\n const address = data?.[historyFields.fOwnerAddress]\r\n const name = data?.[historyFields.fRentalServiceName]\r\n const img = data?.[historyFields.fAvatarUrl]\r\n const blogs = data?.[historyFields.fBlogs]\r\n const departureDate = data?.[historyFields.fDaysBeforeDeparture_Text]\r\n const rentalDate = data?.[historyFields.fRentalDate_Text]\r\n const status = data?.[historyFields.fStatusName]\r\n const icon = data?.[historyFields.fIcon] || \"\"\r\n const iconColor = data?.[historyFields.fIconColor] || \"var(--mau-den)\"\r\n\r\n const hideDetailOrder = () => {\r\n setCanShow(false)\r\n fnList?.hideScrollContent && fnList?.hideScrollContent(false)\r\n const navBar = document.getElementById(\"sg-navbar-mobile\")\r\n if (navBar) {\r\n navBar.classList.remove(\"hide\")\r\n }\r\n }\r\n const showDetailOrder = () => {\r\n setCanShow(true)\r\n fnList?.hideScrollContent && fnList?.hideScrollContent(true)\r\n const navBar = document.getElementById(\"sg-navbar-mobile\")\r\n if (navBar) {\r\n navBar.classList.add(\"hide\")\r\n }\r\n }\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n {name &&
    {name}
    }\r\n {address &&
    {address}
    }\r\n
    \r\n
    \r\n {rentalDate && (\r\n
    {rentalDate}
    \r\n )}\r\n {status && (\r\n
    \r\n {icon && }\r\n {status}\r\n
    \r\n )}\r\n
    \r\n
    \r\n \"\"\r\n {departureDate && (\r\n
    {departureDate}
    \r\n )}\r\n
    \r\n {blogs && blogs?.length > 0 && (\r\n
    \r\n {blogs.map((b, j) => {\r\n const _link = b?.BlogUrl\r\n return (\r\n {\r\n if (_link) {\r\n HLink.openUrl(_link, \"_blank\")\r\n }\r\n }}\r\n >\r\n {b?.AvatarUrl && \"\"}\r\n
    {b?.Title}
    \r\n
    \r\n )\r\n })}\r\n
    \r\n )}\r\n \r\n \r\n )\r\n}\r\nconst NowCard = props => {\r\n const { data, loading, fnList } = props\r\n const title = data?.[historyFields.fTitle]\r\n\r\n const getShowTitle = () => {\r\n const orders = data?.[historyFields.fOrders]\r\n if (orders && orders?.length > 0 && title) {\r\n return true\r\n }\r\n return false\r\n }\r\n const hideScrollContent = (v = false) => {\r\n const html: any = document.getElementsByTagName(\"html\")\r\n const header = document.getElementById(\"navbar-category-v2\")\r\n if (!html) {\r\n return\r\n }\r\n if (html[0]) {\r\n if (v === false) {\r\n html[0].style.overflowY = \"scroll\"\r\n } else {\r\n html[0].style.overflowY = \"hidden\"\r\n }\r\n }\r\n if (header) {\r\n if (v === false) {\r\n header?.classList.remove(\"only-logo\")\r\n } else {\r\n header?.classList.add(\"only-logo\")\r\n }\r\n }\r\n }\r\n const renderOthers = () => {\r\n const orders = data?.[historyFields.fOrders]\r\n if (orders && orders?.length > 0) {\r\n return (\r\n \r\n {orders.map((v, i) => {\r\n return (\r\n <>\r\n \r\n \r\n )\r\n })}\r\n \r\n )\r\n }\r\n return <>\r\n // return
    Bạn chưa có chuyến đi
    \r\n }\r\n if (loading) {\r\n return (\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n return (\r\n \r\n {getShowTitle() &&
    {title}
    }\r\n {renderOthers()}\r\n \r\n )\r\n}\r\nconst WrapLoading = styled.div`\r\n margin-bottom: 20px;\r\n & .title-loading {\r\n width: 500px;\r\n height: 25px;\r\n margin-bottom: 30px;\r\n & > span {\r\n display: block;\r\n height: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n & .one-order {\r\n display: flex;\r\n & .card-loading {\r\n width: 66.66667%;\r\n height: 240px;\r\n & > span {\r\n display: block;\r\n height: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n }\r\n & .blogs-loading {\r\n margin-left: 20px;\r\n width: calc(33.333% - 20px);\r\n height: 240px;\r\n & > span {\r\n display: block;\r\n height: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .title-loading {\r\n width: 100%;\r\n }\r\n & .one-order {\r\n flex-direction: column;\r\n & .card-loading {\r\n width: 100%;\r\n height: 408px;\r\n }\r\n }\r\n & .blogs-loading {\r\n margin-left: 0;\r\n margin-top: 446px;\r\n width: 100%;\r\n }\r\n }\r\n`\r\nconst Wrap = styled.div`\r\n &.pd-10px {\r\n padding-bottom: 10px;\r\n }\r\n &:last-child {\r\n padding-bototm: 0;\r\n }\r\n`\r\nconst WrapOrder = styled.div`\r\n & .row {\r\n margin: 0;\r\n }\r\n & .one-order {\r\n display: flex;\r\n margin-bottom: 20px;\r\n & .card {\r\n box-shadow: 0px 4px 15px 0px #0000001a;\r\n border-radius: 10px;\r\n border: 1px solid var(--color-e7e7e7);\r\n flex-direction: row;\r\n padding: 0;\r\n height: fit-content;\r\n position: relative;\r\n }\r\n & .info {\r\n padding: 25px;\r\n width: 50%;\r\n & .name {\r\n font-size: 20px;\r\n font-weight: 700;\r\n line-height: 30px;\r\n }\r\n & .address {\r\n color: var(--color-text-747171);\r\n }\r\n & .wrap-date-status {\r\n padding-top: 15px;\r\n height: 50%;\r\n & > div {\r\n width: 50%;\r\n }\r\n & .border-right {\r\n border-right: 1px solid var(--color-d9d9d9);\r\n }\r\n & .rental-date {\r\n padding-right: 10px;\r\n line-height: 26px;\r\n }\r\n & .status {\r\n padding-left: 10px;\r\n font-weight: 700;\r\n line-height: 26px;\r\n & i {\r\n display: flex;\r\n margin-bottom: 5px;\r\n font-size: 20px;\r\n width: 20px;\r\n height: 20px;\r\n }\r\n & span {\r\n text-decoration: underline;\r\n }\r\n }\r\n }\r\n }\r\n & .wrap-name-address {\r\n height: 50%;\r\n border-bottom: 1px solid var(--color-d9d9d9);\r\n }\r\n & img.car-avtimg {\r\n width: 50%;\r\n max-height: 240px;\r\n object-fit: cover;\r\n border-radius: 0 10px 10px 0;\r\n }\r\n & .departure-date {\r\n position: absolute;\r\n left: calc(50% + 15px);\r\n top: 15px;\r\n background-color: var(--color-text-fff);\r\n font-size: 12px;\r\n font-family: \"Lexend\", sans-serif;\r\n padding: 5px;\r\n border-radius: 5px;\r\n line-height: 15px;\r\n }\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n }\r\n & .blogs {\r\n display: grid;\r\n grid-template-columns: repeat(2, minmax(0px, 1fr));\r\n gap: 10px;\r\n padding-left: 20px;\r\n padding-right: 0;\r\n & .one-blog {\r\n display: flex;\r\n & img {\r\n width: 89px;\r\n height: 66px;\r\n object-fit: cover;\r\n border-radius: 8px;\r\n margin-right: 8px;\r\n }\r\n }\r\n & .title-blog {\r\n width: calc(100% - 97px);\r\n font-size: 12px;\r\n font-weight: 600;\r\n overflow: hidden;\r\n display: -webkit-box;\r\n -webkit-line-clamp: 3;\r\n -webkit-box-orient: vertical;\r\n max-height: 70px;\r\n line-height: 22px;\r\n }\r\n }\r\n @media (max-width: 991px) {\r\n & .blogs {\r\n display: none;\r\n margin-top: 20px;\r\n padding-left: 0px;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .one-order {\r\n & .card {\r\n flex-direction: column-reverse;\r\n }\r\n & .info {\r\n padding: 15px;\r\n width: 100%;\r\n & .wrap-date-status {\r\n padding-top: 15px;\r\n height: 50%;\r\n }\r\n }\r\n & .wrap-name-address {\r\n padding-bottom: 15px;\r\n }\r\n & img.car-avtimg {\r\n width: 100%;\r\n border-radius: 10px 10px 0 0;\r\n }\r\n & .departure-date {\r\n left: 15px;\r\n }\r\n }\r\n & .blogs {\r\n margin-top: 20px;\r\n grid-template-columns: repeat(1, minmax(0px, 1fr));\r\n display: none;\r\n }\r\n }\r\n`\r\nexport default NowCard\r\n","import React from \"react\"\r\nimport styled from \"styled-components\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport { HLink, HUtils } from \"@macashipo/mlib\"\r\nimport classNames from \"classnames\"\r\nimport { squareBracketReplace } from \"src/core/helpers/utils\"\r\nimport classnames from \"classnames\"\r\n\r\nconst RowImageTextHoverBorderCard = props => {\r\n const { data, configMoreInfo } = props\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n const description = data?.[homeSlidesFields.fOneSlideDescription]\r\n const moreInfo = data?.[homeSlidesFields.fOneSlideMoreInfo] || {}\r\n const btnConfig = {\r\n ...HUtils.get(configMoreInfo, \"websiteSetting.configBtn4EachCard\"),\r\n ...HUtils.get(moreInfo, \"websiteSetting\"), // config của từng card\r\n }\r\n const itemConfig = HUtils.get(configMoreInfo, \"websiteSetting.itemConfig\")\r\n const configHover = HUtils.get(configMoreInfo, \"websiteSetting.configHover\")\r\n const url = HUtils.get(btnConfig, \"url\")\r\n const onHandleBtnLandingCard = () => {\r\n if (url) {\r\n HLink.openUrl(squareBracketReplace(url, data), \"_blank\")\r\n }\r\n }\r\n return (\r\n \r\n \r\n {img && (\r\n \"\"\r\n )}\r\n \r\n \r\n {title && (\r\n \r\n )}\r\n {description && (\r\n \r\n )}\r\n {url && btnConfig?.canShow && (\r\n \r\n {btnConfig?.title}\r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\nconst Wrap: any = styled.div`\r\n padding: 10px;\r\n border-radius: 10px;\r\n border: 1px solid transparent;\r\n transition: all 0.25s;\r\n margin-left: 0;\r\n margin-right: 0;\r\n & .title {\r\n color: var(--color-text-000);\r\n font-size: 20px;\r\n font-weight: 700;\r\n padding-top: 15px;\r\n }\r\n & .description {\r\n color: rgb(101, 101, 101);\r\n font-size: 16px;\r\n padding-top: 15px;\r\n }\r\n & .wrap-image {\r\n max-width: 250px;\r\n & > img {\r\n max-height: 500px;\r\n object-fit: contain;\r\n }\r\n }\r\n & .df-button {\r\n background-color: #fff;\r\n border: none;\r\n padding: 0;\r\n color: var(--color-text-000);\r\n text-decoration: underline 1px solid;\r\n font-size: 14px;\r\n font-weight: 600;\r\n }\r\n &:hover {\r\n border: 1px solid\r\n ${(props: any) =>\r\n props?.configHover?.borderColor\r\n ? props?.configHover?.borderColor\r\n : \"#e4e2e2\"};\r\n & .title {\r\n color: ${(props: any) =>\r\n props?.configHover?.titleColor\r\n ? props?.configHover?.titleColor\r\n : \"var(--color-text-info)\"};\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n & .wrap-image,\r\n & .wrap-content {\r\n width: 100%;\r\n }\r\n }\r\n`\r\nexport default RowImageTextHoverBorderCard\r\n","import { HLink, HUtils, MyIcon } from \"@macashipo/mlib\"\r\nimport classnames from \"classnames\"\r\nimport classNames from \"classnames\"\r\nimport { Button } from \"reactstrap\"\r\nimport { squareBracketReplace, isHTMLString } from \"src/core/helpers/utils\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst ColumnContentFields = {\r\n fIcon: \"Icon\",\r\n fUrl: \"url\",\r\n}\r\nconst ColumnContentCard = props => {\r\n const { data, configMoreInfo } = props\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n const description = data?.[homeSlidesFields.fOneSlideDescription]\r\n const icon = data?.[ColumnContentFields.fIcon]\r\n const moreInfo = data?.[homeSlidesFields.fOneSlideMoreInfo] || {}\r\n const btnConfig =\r\n HUtils.get(configMoreInfo, \"websiteSetting.configBtn4EachCard\") || {}\r\n const itemConfig = HUtils.get(configMoreInfo, \"websiteSetting.itemConfig\")\r\n const url =\r\n moreInfo?.[ColumnContentFields.fUrl] ||\r\n HUtils.get(moreInfo, \"websiteSetting.url\")\r\n const onHandleBtn = () => {\r\n if (url) {\r\n HLink.openUrl(squareBracketReplace(url, data), \"_blank\")\r\n }\r\n }\r\n return (\r\n \r\n {icon &&\r\n (isHTMLString(icon) ? (\r\n \r\n ) : (\r\n \r\n ))}\r\n {img && !icon && (\r\n
    \r\n \"\"\r\n
    \r\n )}\r\n {title && (\r\n
    \r\n {title}\r\n
    \r\n )}\r\n {description && (\r\n \r\n )}\r\n {url && btnConfig?.canShow && (\r\n \r\n {btnConfig?.title}\r\n \r\n )}\r\n
    \r\n )\r\n}\r\nconst Wrap: any = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n // align-items: center;\r\n & svg {\r\n height: 113px;\r\n }\r\n &.mr-3 {\r\n margin-right: 1rem;\r\n }\r\n &.pr-3 {\r\n padding-right: 1rem;\r\n }\r\n & .title {\r\n color: var(--color-text-000);\r\n font-size: 20px;\r\n font-weight: 700;\r\n padding-top: 15px;\r\n }\r\n & .des {\r\n color: var(--color-535353);\r\n font-size: 16px;\r\n padding-top: 0.5rem;\r\n }\r\n & button {\r\n margin-top: 20px;\r\n padding: 7px 20px;\r\n font-size: 14px !important;\r\n }\r\n & .image {\r\n overflow: hidden;\r\n & img {\r\n object-fit: scale-down;\r\n height: 90px;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n &.mobile-center {\r\n & .image {\r\n display: flex;\r\n justify-content: center;\r\n width: 100%;\r\n & img {\r\n height: 150px;\r\n }\r\n }\r\n & .title {\r\n text-align: center !important;\r\n width: 100%;\r\n }\r\n & .description {\r\n text-align: center !important;\r\n }\r\n }\r\n }\r\n`\r\nexport default ColumnContentCard\r\n","import React from \"react\"\r\nimport styled from \"styled-components\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport { HLink, HUtils, MyCard } from \"@macashipo/mlib\"\r\nimport classnames from \"classnames\"\r\n\r\nconst ImageRowContentCard = props => {\r\n const { data, configMoreInfo, config } = props\r\n const imageUrl = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const itemConfig = HUtils.get(configMoreInfo, \"websiteSetting.itemConfig\")\r\n const dataConfig = HUtils.get(data, \"MoreInfo.websiteSetting\")\r\n const contentData = data?.Data ?? []\r\n\r\n const renderContent = () => {\r\n if (contentData?.length > 0) {\r\n return (\r\n \r\n {contentData.map((v, i) => {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n })}\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n return (\r\n \r\n {imageUrl && (\r\n
    \r\n \"iphone\"\r\n
    \r\n )}\r\n {renderContent()}\r\n \r\n )\r\n}\r\nconst WrapContent: any = styled.div`\r\n width: 100%;\r\n display: grid;\r\n grid-template-columns: repeat(\r\n ${(props: any) => (props?.numberOfItems < 3 ? props?.numberOfItems : 3)},\r\n minmax(0px, 1fr)\r\n );\r\n gap: 1rem;\r\n margin-right: 0px;\r\n margin-left: 0px;\r\n padding: 0px;\r\n margin-top: 1rem;\r\n @media (max-width: 996px) {\r\n grid-template-columns: repeat(1, minmax(0px, 1fr));\r\n }\r\n`\r\nconst Wrap = styled.div`\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n padding-bottom: 10px;\r\n display: flex;\r\n justify-content: center;\r\n flex-direction: column;\r\n align-items: center;\r\n & .description {\r\n padding-left: 1rem;\r\n color: var(--color-text-000);\r\n }\r\n @media (max-width: 1023px) {\r\n }\r\n @media (max-width: 576px) {\r\n }\r\n`\r\nexport default ImageRowContentCard\r\n","import React from \"react\"\r\nimport { MyCardHelpers } from \"@macashipo/mlib\"\r\nimport HomeCategoryCard from \"./Types/HomeCategory\"\r\nimport HomeBlogCard from \"./Types/HomeBlog\"\r\nimport HomeUsageCard from \"./Types/HomeUsage\"\r\nimport HomePromotionCard from \"./Types/HomePromotion\"\r\nimport HomeLandingCard from \"./Types/HomeLanding\"\r\nimport HomeDiscoverServiceCard from \"./Types/HomeDiscoverService\"\r\nimport HomeHelpsCard from \"./Types/HomeHelps\"\r\nimport HomeAdvantageCard from \"./Types/HomeAdvantage\"\r\nimport HomeCarCard from \"./Types/HomeCar\"\r\nimport NowCard from \"./Types/NowCard\"\r\nimport RowImageTextHoverBorderCard from \"./Types/RowImageTextHoverBorderCard\"\r\nimport ColumnContentCard from \"./Types/ColumnContentCard\"\r\nimport ImageRowContentCard from \"./Types/ImageRowContentCard\"\r\n\r\nconst ProductCard = React.lazy(() => import(\"./Types/ProductCard\"))\r\nconst DiscountCard = React.lazy(() => import(\"./Types/DiscountCard\"))\r\nconst HistoryCard = React.lazy(() => import(\"./Types/HistoryCard\"))\r\nconst ServiceCard = React.lazy(() => import(\"./Types/ServiceCard\"))\r\n// const NowCard = React.lazy(() => import(\"./Types/NowCard\"))\r\n/**Backup chuyến đi của tôi cũ */\r\nconst HistoryCardOld = React.lazy(() => import(\"./Types/HistoryCard_old\"))\r\n\r\nconst OrderCard = React.lazy(() => import(\"./Types/OrderCard\"))\r\nconst OrderDetailBlogCard = React.lazy(() => import(\"./Types/OrderDetailBlog\"))\r\nconst ReviewCard = React.lazy(() => import(\"./Types/ReviewCard\"))\r\nconst RowTextImageCard = React.lazy(() => import(\"./Types/RowTextImageCard\"))\r\nconst RowImageTextArrowCard = React.lazy(\r\n () => import(\"./Types/RowImageTextArrowCard\")\r\n)\r\nconst OnlyTextCard = React.lazy(() => import(\"./Types/OnlyTextCard\"))\r\nconst HTMLTableCard = React.lazy(() => import(\"./Types/HTMLTableCard\"))\r\nconst GuideByImages = React.lazy(() => import(\"./Types/GuideByImages\"))\r\nconst GuideByVideo = React.lazy(() => import(\"./Types/GuideByVideo\"))\r\n\r\nconst TravellingCard = React.lazy(() => import(\"./Types/TravellingCard\"))\r\n\r\nconst List = {\r\n product_card: ProductCard,\r\n discount_card: DiscountCard,\r\n history_card: HistoryCard,\r\n history_card_old: HistoryCardOld,\r\n service_card: ServiceCard,\r\n now_card: NowCard,\r\n home_card_category: HomeCategoryCard,\r\n home_card_blog: HomeBlogCard,\r\n home_card_promotion: HomePromotionCard,\r\n home_card_usage: HomeUsageCard,\r\n home_card_landing: HomeLandingCard,\r\n home_card_discover_service: HomeDiscoverServiceCard,\r\n home_card_helps: HomeHelpsCard,\r\n home_card_advantage: HomeAdvantageCard,\r\n home_card_car: HomeCarCard,\r\n review_card: ReviewCard,\r\n order_card: OrderCard,\r\n order_detail_blog: OrderDetailBlogCard,\r\n row_text_image_card: RowTextImageCard,\r\n row_image_text_arrow_card: RowImageTextArrowCard,\r\n only_text_card: OnlyTextCard,\r\n html_table_card: HTMLTableCard,\r\n guide_by_images: GuideByImages,\r\n guide_by_video: GuideByVideo,\r\n column_content_card: ColumnContentCard,\r\n row_image_text_hover_border_card: RowImageTextHoverBorderCard,\r\n image_row_content_card: ImageRowContentCard,\r\n /** Blog List */\r\n sg_travelling_card: TravellingCard,\r\n}\r\nconst MyLibOne = {\r\n init() {\r\n MyCardHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\n\r\nexport default MyLibOne\r\n","import React from \"react\"\r\nimport MyFormControlHelpers from \"src/core/components/MyForm/MyFormControlHelpers\"\r\n\r\nconst MFCOnlyLabel = React.lazy(() => import(\"./Types/only_label\"))\r\n\r\nconst List = {\r\n only_label: MFCOnlyLabel,\r\n}\r\nconst MyControlForm = {\r\n init() {\r\n MyFormControlHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\n\r\nexport default MyControlForm\r\n","import React from \"react\"\r\nimport MyTableFilterControlHelpers from \"src/core/components/MyTableFilterControl/MyTableFilterControlHelpers\"\r\nimport { CSuppense } from \"src/core/components\"\r\nconst MyFilterControlDateFromTo = React.lazy(() => import(\"./Types/datefromto\"))\r\nconst MyTableFilterControl = {\r\n init() {\r\n //wrap\r\n // MyTableFilterControlHelpers.addTypesWrap(\"_default\", props => {\r\n // return CSuppense(props, MyTFCWrap)\r\n // })\r\n //control\r\n let _mapControl = {\r\n datefromto: MyFilterControlDateFromTo,\r\n }\r\n for (let k of Object.keys(_mapControl)) {\r\n MyTableFilterControlHelpers.addTypes(k, props => {\r\n return CSuppense(props, _mapControl[k])\r\n })\r\n }\r\n },\r\n}\r\n\r\nexport default MyTableFilterControl\r\n","import React from \"react\"\r\nimport MyUIHelpers from \"src/core/components/MyUI/MyUIHelpers\"\r\n\r\n//MyUI\r\nconst MyUI_readonly_cofigstyle = React.lazy(() =>\r\n import(\"./TypesMyUI/readonly_configstyle\")\r\n)\r\n\r\nconst ListMyUI = {\r\n readonly_configstyle: MyUI_readonly_cofigstyle,\r\n}\r\nconst MyTableCell = {\r\n init() {\r\n MyUIHelpers.addTypesFromListLazy(ListMyUI)\r\n },\r\n}\r\n\r\nexport default MyTableCell\r\n","import { HConstant, HIs, HLocalStorage, HUtils } from \"src/core/helpers\"\r\nimport {\r\n MyPageOne,\r\n MyUIOne,\r\n MyLibOne,\r\n MyIconOne,\r\n MyControlOne,\r\n MyFormControlOne,\r\n MyButtonOne,\r\n MyCardOne,\r\n MyControlForm,\r\n MyTableFilterControl,\r\n MyTableCell,\r\n} from \"./components\"\r\nimport \"src/modules/app_sigo/assets/theme-sigo.scss\"\r\nimport \"src/modules/app_sigo/assets/fonts/flaticon.css\"\r\nimport \"src/modules/app_sigo/assets/guest/css/reset.css\"\r\nimport \"src/modules/app_sigo/assets/guest/css/nice-select.css\"\r\nimport \"src/modules/app_sigo/assets/guest/css/guest.css\"\r\nimport \"react-loading-skeleton/dist/skeleton.css\"\r\nimport \"src/modules/app_sigo/assets/icons/flaticon.css\"\r\nimport { kFirstSettingData } from \"./constants\"\r\nimport { store } from \"src/store/store\"\r\nimport { initFirstSettingData } from \"src/App/App.actions\"\r\nimport { SGNewPaths, SGPaths } from \"./constants/paths\"\r\nimport { isLocalDev } from \"src/core/helpers/utils\"\r\n\r\ninterface IModuleAppSigo extends ICore.IOneModule {\r\n runAfterInit: (HConfig: any) => void\r\n}\r\nconst ModuleAppSigo: IModuleAppSigo = {\r\n _key: \"app_sigo\",\r\n _fnList: {},\r\n _config: {},\r\n getMyKey: () => {\r\n return \"app_sigo\"\r\n },\r\n runAfterInit: (HConfig: any) => {\r\n MyPageOne.init()\r\n MyUIOne.init()\r\n MyLibOne.init()\r\n MyIconOne.init()\r\n MyControlOne.init()\r\n MyFormControlOne.init()\r\n MyButtonOne.init()\r\n MyCardOne.init()\r\n MyControlForm.init()\r\n MyTableFilterControl.init()\r\n MyTableCell.init()\r\n window.document.body.classList.add(\"theme-sigo\")\r\n window.document.body.classList.add(\"guest\")\r\n const userAgent =\r\n window.navigator.userAgent && window.navigator.userAgent.toLowerCase()\r\n if (\r\n userAgent &&\r\n userAgent.indexOf(\"iphone\") > -1 &&\r\n userAgent.indexOf(\"safari\") > -1\r\n ) {\r\n window.document.body.classList.add(\"on-ios\")\r\n }\r\n // xử lý init first setting\r\n const firstSettingLocal = HLocalStorage.getObj(kFirstSettingData, {})\r\n store.dispatch(initFirstSettingData(firstSettingLocal))\r\n HUtils.runFuntion(HConfig, HConstant.HConfig.FnList.addPrivateRoutes, [\r\n [\r\n {\r\n Id: \"history\",\r\n UIUrl: \"/dev-v1/:status\",\r\n UIType: \"history\",\r\n Title: \"Chuyến đi của tôi\",\r\n },\r\n {\r\n Id: \"mytrips\",\r\n UIUrl: SGPaths.chuyendicuatoi,\r\n UIType: \"mytrips\",\r\n Title: \"Chuyến đi của tôi\",\r\n RedirectUrl: SGNewPaths.chuyendicuatoi,\r\n },\r\n {\r\n Id: \"mytrips-new\",\r\n UIUrl: SGNewPaths.chuyendicuatoi,\r\n UIType: \"mytrips\",\r\n Title: \"Chuyến đi của tôi\",\r\n },\r\n {\r\n Id: \"my-profile\",\r\n UIUrl: SGPaths.taikhoancuatoi,\r\n UIType: \"sg_user_profile\",\r\n Title: \"Tài khoản của tôi\",\r\n APIName: \"User\",\r\n Config: {\r\n GetData: \"User/MyProfile\",\r\n UpdateData: \"User/UpdateProfile\",\r\n UpdateAvatar: \"Upload/User/MyAvatar\",\r\n },\r\n RedirectUrl: SGNewPaths.taikhoancuatoi,\r\n },\r\n {\r\n Id: \"my-profile-new\",\r\n UIUrl: SGNewPaths.taikhoancuatoi,\r\n UIType: \"sg_user_profile\",\r\n Title: \"Tài khoản của tôi\",\r\n APIName: \"User\",\r\n Config: {\r\n GetData: \"User/MyProfile\",\r\n UpdateData: \"User/UpdateProfile\",\r\n UpdateAvatar: \"Upload/User/MyAvatar\",\r\n },\r\n },\r\n {\r\n Id: \"verify-account\",\r\n UIUrl: SGPaths.xacthuctaikhoan,\r\n UIType: \"sg_verify_account\",\r\n Title: \"Xác thực\",\r\n APIName: \"User/MyProfile\",\r\n RedirectUrl: SGNewPaths.xacthuctaikhoan,\r\n },\r\n {\r\n Id: \"verify-account-new\",\r\n UIUrl: SGNewPaths.xacthuctaikhoan,\r\n UIType: \"sg_verify_account\",\r\n Title: \"Xác thực\",\r\n APIName: \"User/MyProfile\",\r\n },\r\n {\r\n Id: \"my-saving\",\r\n UIUrl: SGPaths.tichluy,\r\n UIType: \"sg_saving\",\r\n Title: \"Tích lũy\",\r\n APIName: \"User/GetCoinReward\",\r\n RedirectUrl: SGNewPaths.tichluy,\r\n },\r\n {\r\n Id: \"my-saving-new\",\r\n UIUrl: SGNewPaths.tichluy,\r\n UIType: \"sg_saving\",\r\n Title: \"Tích lũy\",\r\n APIName: \"User/GetCoinReward\",\r\n },\r\n {\r\n Id: \"my-service\",\r\n UIUrl: SGPaths.xecuatoi,\r\n UIType: \"sg_my_service\",\r\n Title: \"Xe của tôi\",\r\n RedirectUrl: SGNewPaths.xecuatoi,\r\n },\r\n {\r\n Id: \"my-service-new\",\r\n UIUrl: SGNewPaths.xecuatoi,\r\n UIType: \"sg_my_service\",\r\n Title: \"Xe của tôi\",\r\n },\r\n {\r\n Id: \"add-service\",\r\n UIUrl: SGPaths.themxe,\r\n UIType: \"sg_add_service\",\r\n Title: \"Thêm xe\",\r\n RedirectUrl: SGNewPaths.themxe,\r\n },\r\n {\r\n Id: \"add-service-new\",\r\n UIUrl: SGNewPaths.themxe,\r\n UIType: \"sg_add_service\",\r\n Title: \"Thêm xe\",\r\n },\r\n {\r\n UIUrl: SGPaths.lichhoatdong,\r\n UIType: \"slug\",\r\n Title: \"Lịch hoạt động\",\r\n RedirectUrl: SGNewPaths.lichhoatdong,\r\n },\r\n {\r\n UIUrl: SGNewPaths.lichhoatdong,\r\n UIType: \"my_activity_schedule\",\r\n Title: \"Lịch hoạt động\",\r\n },\r\n {\r\n UIUrl: SGPaths.danhmucxe,\r\n UIType: \"slug\",\r\n Title: \"Danh mục xe cho thuê\",\r\n RedirectUrl: SGNewPaths.danhmucxe,\r\n },\r\n {\r\n UIUrl: SGNewPaths.danhmucxe,\r\n UIType: \"slug\",\r\n Title: \"Danh mục xe cho thuê\",\r\n },\r\n {\r\n Id: \"notification\",\r\n UIUrl: SGPaths.thongbao,\r\n UIType: \"sg_notification\",\r\n Title: \"Thông báo\",\r\n APIName: \"Notification\",\r\n RedirectUrl: SGNewPaths.thongbao,\r\n },\r\n {\r\n Id: \"notification-new\",\r\n UIUrl: SGNewPaths.thongbao,\r\n UIType: \"sg_notification\",\r\n Title: \"Thông báo\",\r\n APIName: \"Notification\",\r\n },\r\n {\r\n Id: \"payment\",\r\n UIUrl: SGPaths.thanhtoan,\r\n UIType: \"sg_payment\",\r\n Title: \"Thanh toán\",\r\n RedirectUrl: SGNewPaths.thanhtoan,\r\n },\r\n {\r\n Id: \"payment-new\",\r\n UIUrl: SGNewPaths.thanhtoan,\r\n UIType: \"sg_payment\",\r\n Title: \"Thanh toán\",\r\n },\r\n {\r\n Id: \"edit-my-service\",\r\n UIUrl: SGPaths.chinhsuaxe,\r\n UIType: \"sg_edit_my_service\",\r\n Title: \"Chỉnh sửa xe\",\r\n RedirectUrl: SGNewPaths.chinhsuaxe,\r\n },\r\n {\r\n Id: \"edit-my-service-new\",\r\n UIUrl: SGNewPaths.chinhsuaxe,\r\n UIType: \"sg_edit_my_service\",\r\n Title: \"Chỉnh sửa xe\",\r\n },\r\n {\r\n Id: \"my-orders\",\r\n UIUrl: SGPaths.donhanghientai,\r\n UIType: \"my_orders\",\r\n Title: \"Đơn đặt xe của bạn\",\r\n RedirectUrl: SGNewPaths.donhanghientai,\r\n },\r\n {\r\n Id: \"my-orders-new\",\r\n UIUrl: SGNewPaths.donhanghientai,\r\n UIType: \"my_orders\",\r\n Title: \"Đơn đặt xe của bạn\",\r\n },\r\n {\r\n Id: \"account\",\r\n UIUrl: SGPaths.taikhoan,\r\n UIType: \"slug\",\r\n RedirectUrl: SGNewPaths.taikhoancuatoi,\r\n },\r\n ],\r\n ])\r\n HUtils.runFuntion(HConfig, HConstant.HConfig.FnList.addPublicRoutes, [\r\n [\r\n {\r\n Id: \"profile\",\r\n UIUrl: SGPaths.thongtintaikhoan,\r\n UIType: \"sg_user_profile\",\r\n Title: \"\",\r\n APIName: \"User\",\r\n Config: {\r\n GetData: \"User/Profile\",\r\n ReportUser: \"User/ReportUser\",\r\n },\r\n },\r\n {\r\n Id: \"profile-new\",\r\n UIUrl: SGNewPaths.thongtintaikhoan,\r\n UIType: \"sg_user_profile\",\r\n Title: \"\",\r\n APIName: \"User\",\r\n Config: {\r\n GetData: \"User/Profile\",\r\n ReportUser: \"User/ReportUser\",\r\n },\r\n },\r\n {\r\n Id: \"detail\",\r\n UIUrl: SGPaths.chitietxe,\r\n UIType: \"detail\",\r\n Title: \"Chi tiết xe\",\r\n configMainLayout: {\r\n isHideHeader: true,\r\n },\r\n },\r\n {\r\n Id: \"category\",\r\n UIUrl: SGPaths.searchxe,\r\n UIType: \"category\",\r\n Title: \"Danh sách xe\",\r\n configMainLayout: {\r\n isHideHeader: true,\r\n },\r\n RedirectUrl: SGNewPaths.searchxe,\r\n },\r\n {\r\n Id: \"category-new\",\r\n UIUrl: SGNewPaths.searchxe,\r\n UIType: \"category\",\r\n Title: \"Danh sách xe\",\r\n configMainLayout: {\r\n isHideHeader: true,\r\n },\r\n },\r\n {\r\n Id: \"helpus\",\r\n UIUrl: SGPaths.huongdandatxe,\r\n UIType: \"helpus\",\r\n Title: \"Trợ giúp\",\r\n },\r\n {\r\n Id: \"registerguide\",\r\n UIUrl: SGPaths.huongdandangkyxe,\r\n UIType: \"helpus\",\r\n Title: \"Hướng dẫn đăng ký xe\",\r\n },\r\n {\r\n Id: \"sigotravelling\",\r\n UIUrl: SGPaths.sigotravelling,\r\n UIType: \"sg_travelling\",\r\n Title: \"SIGO Travelling\",\r\n configMainLayout: {\r\n isHideHeader: true,\r\n },\r\n },\r\n {\r\n Id: \"faqs\",\r\n UIUrl: SGPaths.cauhoithuonggap,\r\n UIType: \"helpus\",\r\n Title: \"Hỗ trợ\",\r\n },\r\n {\r\n Id: \"notfound\",\r\n UIUrl: SGPaths.notfound,\r\n UIType: \"sg_not_found\",\r\n },\r\n {\r\n Id: \"slug\",\r\n UIUrl: SGPaths.slug,\r\n UIType: \"slug\",\r\n },\r\n {\r\n Id: \"home\",\r\n UIUrl: SGPaths.home,\r\n UIType: \"home\",\r\n Title: \"Sigo\",\r\n configMainLayout: {\r\n isHideHeader: true,\r\n },\r\n },\r\n ],\r\n ])\r\n },\r\n}\r\n\r\nexport default ModuleAppSigo\r\n","import React, { useEffect, useRef } from \"react\"\r\nimport \"slick-carousel/slick/slick.css\"\r\nimport \"slick-carousel/slick/slick-theme.css\"\r\nimport Slider from \"react-slick\"\r\nimport styled from \"styled-components\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport { MyCard } from \"@macashipo/mlib\"\r\nimport classNames from \"classnames\"\r\n\r\nconst configKeySlide = {\r\n slide_options: \"slide_options\",\r\n url: \"url\",\r\n always_show_nav: \"always_show_nav\",\r\n only_image: \"only_image\",\r\n default_image: \"default_image\",\r\n slide_setting: \"slide_setting\",\r\n use_data: \"use_data\",\r\n slide_options_mobile: \"slide_options_mobile\",\r\n}\r\n\r\nfunction SampleNextArrow(props) {\r\n const { className, style, onClick } = props\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n}\r\n\r\nfunction SamplePrevArrow(props) {\r\n const { className, style, onClick } = props\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n}\r\n\r\nconst MUISlideCardV2 = props => {\r\n const { data, className, config, fnList, classNameWrap, moreInfo } = props\r\n let slideImages = data?.[homeSlidesFields.fSlideImages]\r\n if (config?.[configKeySlide.use_data]) {\r\n slideImages = data\r\n }\r\n const configOptions = config?.[configKeySlide.slide_options_mobile] || {}\r\n const slideSetting = config?.[configKeySlide.slide_setting] || {}\r\n const refWrapSlide = useRef(null)\r\n\r\n useEffect(() => {\r\n if (refWrapSlide.current) {\r\n const slickList = refWrapSlide.current?.querySelector(\".slick-list\")\r\n\r\n const parentNode = slickList?.parentNode as HTMLButtonElement\r\n if (parentNode && slickList) {\r\n // Kiểm tra xem wrapper đã tồn tại hay chưa\r\n if (!parentNode.classList.contains(\"custom-wrapper-slick\")) {\r\n const wrapperDiv = document.createElement(\"div\")\r\n wrapperDiv.className = \"custom-wrapper-slick\"\r\n parentNode.insertBefore(wrapperDiv, slickList)\r\n wrapperDiv.appendChild(slickList)\r\n }\r\n }\r\n }\r\n }, [data])\r\n\r\n var options = {\r\n dots: true,\r\n infinite: false,\r\n swipeToSlide: true,\r\n slidesToShow: 3,\r\n speed: 250,\r\n slidesToScroll: 1,\r\n accessibility: false,\r\n nextArrow: ,\r\n prevArrow: ,\r\n loop: false,\r\n centerPadding: \"15px\",\r\n ...configOptions,\r\n }\r\n const alwaysShowNav =\r\n config?.[configKeySlide.always_show_nav] && options?.loop\r\n\r\n const renderTitle = () => {\r\n const _url = moreInfo?.[configKeySlide.url]\r\n const title = data?.[homeSlidesFields.fTitle]\r\n const description = data?.[homeSlidesFields.fDescription] || \"\"\r\n if (title) {\r\n return (\r\n \r\n {title && (\r\n \r\n )}\r\n {description && (\r\n \r\n )}\r\n {/* {_url && (\r\n \r\n Xem thêm\r\n \r\n )} */}\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n\r\n const _url = moreInfo?.[configKeySlide.url]\r\n const _configBtnNavigation = slideSetting?.configBtnNavigation || {}\r\n const _configDots = slideSetting?.configDots || {}\r\n const classNameSlide = slideSetting?.classNameSlide || \"\"\r\n // const isCenter = getIsCenter()\r\n const slideLength = slideImages?.length\r\n if (slideLength > 0) {\r\n return (\r\n \r\n {renderTitle()}\r\n \r\n {\r\n console.log(\"ref\", ref)\r\n }}\r\n >\r\n {slideImages.map((v, i) => {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n })}\r\n \r\n \r\n \r\n )\r\n }\r\n return <>\r\n}\r\n\r\nconst WrapTitle = styled.div`\r\n &.title-home {\r\n margin-bottom: 30px;\r\n flex-direction: column;\r\n align-items: center;\r\n }\r\n & .wrap-title {\r\n align-items: center;\r\n justify-content: space-between;\r\n }\r\n & .maintxt {\r\n font-size: 36px;\r\n font-weight: 700;\r\n color: var(--color-text-000);\r\n text-align: center;\r\n line-height: 49px;\r\n margin-bottom: 0;\r\n max-width: 80%;\r\n }\r\n & .description {\r\n color: var(--color-text-000);\r\n font-size: 16px;\r\n text-align: center;\r\n padding-top: 15px;\r\n max-width: 80%;\r\n }\r\n @media (max-width: 1199px) {\r\n & .maintxt {\r\n max-width: 90%;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .maintxt {\r\n font-size: 30px;\r\n line-height: 39px;\r\n max-width: 100%;\r\n }\r\n & .description {\r\n padding-top: 10px;\r\n max-width: 100%;\r\n }\r\n }\r\n`\r\n\r\nconst Wrap: any = styled.div`\r\n & .wrap-item {\r\n display: block;\r\n }\r\n & .slick-arrow {\r\n width: 35px;\r\n height: 35px;\r\n z-index: 2;\r\n &.slick-disabled {\r\n display: none !important;\r\n }\r\n &:before {\r\n display: none;\r\n }\r\n & i {\r\n display: block;\r\n border-radius: 50%;\r\n background-color: #fff;\r\n box-shadow: 0 0 6px #999;\r\n height: 35px;\r\n width: 35px;\r\n text-align: center;\r\n line-height: 39px;\r\n color: #888;\r\n font-size: 16px;\r\n }\r\n top: ${(props: any) =>\r\n props?.configBtnNavigation && props?.configBtnNavigation?.default\r\n ? props?.configBtnNavigation?.default\r\n : \"calc(50% - 15px)\"};\r\n &.slick-next {\r\n right: ${(props: any) =>\r\n props?.configBtnNavigation && props?.configBtnNavigation?.rightDefault\r\n ? props?.configBtnNavigation?.rightDefault\r\n : \"-15px\"};\r\n }\r\n &.slick-prev {\r\n left: ${(props: any) =>\r\n props?.configBtnNavigation && props?.configBtnNavigation?.leftDefault\r\n ? props?.configBtnNavigation?.leftDefault\r\n : \"-15px\"};\r\n }\r\n }\r\n & .slick-dots {\r\n right: unset;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n display: flex;\r\n align-items: center;\r\n max-width: 80px;\r\n overflow: hidden;\r\n bottom: ${(props: any) =>\r\n props?.configDots && props?.configDots?.bottom\r\n ? props?.configDots?.bottom\r\n : \"10px\"};\r\n & li {\r\n margin: 0;\r\n width: auto;\r\n height: auto;\r\n &.slick-active button {\r\n background-color: ${(props: any) =>\r\n props?.configDots && props?.configDots?.activeColor\r\n ? props?.configDots?.activeColor\r\n : \"var(--color-text-fff)\"};\r\n width: ${(props: any) =>\r\n props?.configDots && props?.configDots?.activeWidth\r\n ? props?.configDots?.activeWidth\r\n : \"7px\"};\r\n height: ${(props: any) =>\r\n props?.configDots && props?.configDots?.activeWidth\r\n ? props?.configDots?.activeWidth\r\n : \"7px\"};\r\n min-width: ${(props: any) =>\r\n props?.configDots && props?.configDots?.activeWidth\r\n ? props?.configDots?.activeWidth\r\n : \"7px\"};\r\n }\r\n & button {\r\n margin: 0;\r\n border-radius: 50%;\r\n padding: 0;\r\n width: ${(props: any) =>\r\n props?.configDots && props?.configDots?.defaultWidth\r\n ? props?.configDots?.defaultWidth\r\n : \"5px\"};\r\n height: ${(props: any) =>\r\n props?.configDots && props?.configDots?.defaultWidth\r\n ? props?.configDots?.defaultWidth\r\n : \"5px\"};\r\n min-width: ${(props: any) =>\r\n props?.configDots && props?.configDots?.defaultWidth\r\n ? props?.configDots?.defaultWidth\r\n : \"5px\"};\r\n background-color: ${(props: any) =>\r\n props?.configDots && props?.configDots?.defaultColor\r\n ? props?.configDots?.defaultColor\r\n : \"var(--color-text-e1e1e1)\"};\r\n margin-right: ${(props: any) =>\r\n props?.configDots && props?.configDots?.marginRight\r\n ? props?.configDots?.marginRight\r\n : \"5px\"};\r\n &:before {\r\n display: none;\r\n }\r\n }\r\n }\r\n }\r\n\r\n & .slide-item {\r\n background: yellow;\r\n border-right: 1px solid #000;\r\n }\r\n & .custom-wrapper-slick {\r\n overflow: hidden;\r\n }\r\n & .slick-list {\r\n margin-right: -${(props: any) => (props?.configOptions?.margin ? props?.configOptions?.margin / 2 : 7.5)}px;\r\n margin-left: -${(props: any) => (props?.configOptions?.margin ? props?.configOptions?.margin / 2 : 7.5)}px;\r\n }\r\n & .slick-slide {\r\n padding-left: ${(props: any) =>\r\n props?.configOptions?.margin ? props?.configOptions?.margin / 2 : 7.5}px;\r\n padding-right: ${(props: any) =>\r\n props?.configOptions?.margin ? props?.configOptions?.margin / 2 : 7.5}px;\r\n & img {\r\n width: 100%;\r\n }\r\n }\r\n`\r\n\r\nexport default MUISlideCardV2\r\n","import { ConnectedProps, connect } from \"react-redux\"\r\nimport { MyUI } from \"@macashipo/mlib\"\r\nimport styled from \"styled-components\"\r\n\r\nconst mapStateToProps = state => ({\r\n isAuthenticated: state.app.isAuthenticated,\r\n dataFirstSetting: state.app.dataFirstSetting,\r\n uiNavbarType: state.app.uiNavbarType,\r\n})\r\nconst mapDispatchToProps = {}\r\nconst connector = connect(mapStateToProps, mapDispatchToProps)\r\ninterface Props extends ConnectedProps {\r\n moreConfig?: any\r\n}\r\nconst MyUINavbar = (props: Props) => {\r\n const { uiNavbarType, isAuthenticated } = props\r\n console.warn(\"uiNavType\", uiNavbarType)\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n position: fixed;\r\n height: 85px;\r\n width: 100%;\r\n bottom: 0;\r\n left: 0;\r\n background-color: #fff;\r\n z-index: 100;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n &.hide {\r\n display: none;\r\n }\r\n`\r\nexport default connector(MyUINavbar)\r\n","import styled from \"styled-components\"\r\nimport { WrapOneCollapse } from \"./Searchbar\"\r\nimport { forwardRef, useEffect, useRef, useState } from \"react\"\r\nimport { Collapse } from \"reactstrap\"\r\nimport { HLocalStorage, HUtils } from \"@macashipo/mlib\"\r\nimport { geocodeByPlaceId } from \"react-google-places-autocomplete\"\r\nimport classnames from \"classnames\"\r\nimport { categoryFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport { BsClock } from \"react-icons/bs\"\r\nimport GooglePlacesAutocomplete from \"src/modules/app_sigo/components/MyLib/Types/search_address_mobile.js\"\r\nimport { MyModal } from \"src/core/components\"\r\n\r\nconst EnterAddress = props => {\r\n const { open = false, title, label, moreConfig, fnList, address } = props\r\n const [value, setValue] = useState(address || \"\")\r\n const [loading, setLoading] = useState(false)\r\n const [focusing, setFocusing] = useState(false)\r\n const autoCompleteRef = useRef()\r\n\r\n useEffect(() => {\r\n setValue(address || \"\")\r\n }, [address])\r\n\r\n /**Get */\r\n const getListRecentlyAddressFromLocal = () => {\r\n const list = HLocalStorage.getObj(\"recentlyAddress\", [])\r\n return list\r\n }\r\n const getDateText = date => {\r\n const yyyy = date.getFullYear()\r\n let mm = date.getMonth() + 1\r\n let dd = date.getDate()\r\n return \"Ngày \" + dd + \" tháng \" + mm + \" năm \" + yyyy\r\n }\r\n const getCurAddressText = value => {\r\n const _address = HUtils.get(\r\n value,\r\n `${categoryFields.fAddress}_MoreInfo[0].address_components`\r\n )\r\n let _result = HUtils.get(value, `${categoryFields.fAddress}`)\r\n if (_address && _address?.length > 0) {\r\n _address.forEach(v => {\r\n const _type = HUtils.get(v, \"types\")\r\n const name = HUtils.get(v, \"long_name\")\r\n if (_type && _type?.length > 0) {\r\n _type.every(t => {\r\n if (t === \"postal_code\" || t === \"country\") {\r\n if (_result?.includes(name)) {\r\n _result = _result.replace(name, \"\")\r\n }\r\n return false\r\n }\r\n return true\r\n })\r\n }\r\n })\r\n } else {\r\n _result = onRemoveVietNam(_result)\r\n }\r\n return _result?.replace(/,+\\s*$/, \"\")\r\n }\r\n const updateAdress = (v, { afterUpdate }: any = {}) => {\r\n setValue(v)\r\n afterUpdate && afterUpdate()\r\n }\r\n const doUpdate = (obj, { skipCloseDropdown = false }: any = {}) => {\r\n if (fnList?.afterUpdateMultiValues) {\r\n fnList.afterUpdateMultiValues(\r\n {\r\n values: obj,\r\n },\r\n {\r\n afterUpdate: () => {\r\n if (!skipCloseDropdown) {\r\n fnList?.onHanleDropdown && fnList?.onHanleDropdown(false)\r\n }\r\n },\r\n }\r\n )\r\n }\r\n }\r\n const onUpdate = (v, fnList) => {\r\n const fieldAddress = moreConfig?.fieldAddress || \"\"\r\n const fieldAddressInfo = `${fieldAddress}_MoreInfo`\r\n let more = {\r\n cbSuccess: v?.cbSuccess,\r\n cbError: v?.cbError,\r\n }\r\n\r\n if (v?.Value) {\r\n updateAdress(v.Text, {\r\n afterUpdate: () => {\r\n let obj: any = {\r\n [fieldAddress]: v.Text,\r\n [fieldAddressInfo]: null,\r\n }\r\n let _placeId = HUtils.get(v, \"More.place_id\")\r\n if (_placeId) {\r\n setLoading(false)\r\n\r\n geocodeByPlaceId(_placeId)\r\n .then(results => {\r\n setLoading(false)\r\n console.log(\"results:\", results)\r\n let _formated = HUtils.get(results, \"0.formatted_address\")\r\n if (_formated) {\r\n v.label = _formated\r\n updateAdress(_formated)\r\n obj[fieldAddress] = _formated\r\n }\r\n if (results && results.length > 0) {\r\n obj[fieldAddressInfo] = results\r\n }\r\n doUpdate(obj)\r\n })\r\n .catch(error => {\r\n setLoading(false)\r\n doUpdate(obj)\r\n })\r\n } else {\r\n doUpdate(obj)\r\n }\r\n },\r\n })\r\n } else {\r\n updateAdress(null, {\r\n afterUpdate: () => {\r\n const obj = {\r\n [fieldAddress]: null,\r\n [fieldAddressInfo]: null,\r\n }\r\n doUpdate(obj, { skipCloseDropdown: true })\r\n },\r\n })\r\n }\r\n if (v?.cbChange) {\r\n v.cbChange(value)\r\n }\r\n }\r\n const onRemoveVietNam = str => {\r\n const regex = /\\s*,?\\s*việt nam/gi\r\n\r\n return str?.replace(regex, \"\") || \"\"\r\n }\r\n const onHandleSelectAddressFromList = value => {\r\n if (value) {\r\n setValue(value?.Address)\r\n fnList?.updateAddress &&\r\n fnList?.updateAddress(value, {\r\n afterUpdate: () => {},\r\n })\r\n }\r\n }\r\n const onHandleSelectAddressFromListRecently = value => {\r\n if (value) {\r\n setValue(value?.Address)\r\n fnList?.updateAddress &&\r\n fnList?.updateAddress(value, {\r\n afterUpdate: () => {},\r\n updateWithTime: true,\r\n })\r\n }\r\n }\r\n /** Render */\r\n const renderRecentlyAddress = () => {\r\n const list = getListRecentlyAddressFromLocal()\r\n if (list && list?.length > 0) {\r\n return (\r\n \r\n
    {moreConfig?.recentSearch}
    \r\n {list?.map((v, i) => {\r\n let isActive = false\r\n let _start = v?.[categoryFields.fFromDate]\r\n let _text = \"\"\r\n if (_start) {\r\n _text = getDateText(new Date(_start))\r\n }\r\n let _end = v?.[categoryFields.fToDate]\r\n if (_end) {\r\n _text += \" - \" + getDateText(new Date(_end))\r\n }\r\n return (\r\n {\r\n e.stopPropagation()\r\n onHandleSelectAddressFromListRecently(v)\r\n }}\r\n >\r\n
    \r\n \r\n
    \r\n
    \r\n
    {getCurAddressText(v)}
    \r\n
    \r\n {_text || moreConfig?.defaultRecentlyLocationTimeText}\r\n
    \r\n
    \r\n \r\n )\r\n })}\r\n
    \r\n )\r\n }\r\n return <>\r\n }\r\n const renderPopularLocation = () => {\r\n const sourceList = fnList?.getSourceList && fnList?.getSourceList()\r\n let list: any = []\r\n if (sourceList) {\r\n list = sourceList?.PopularPlaces || []\r\n }\r\n if (list && list?.length > 0) {\r\n return (\r\n \r\n
    {moreConfig?.popularAddressTitle}
    \r\n
    \r\n {list?.map((v, i) => {\r\n let isActive = false\r\n return (\r\n {\r\n onHandleSelectAddressFromList(v)\r\n }}\r\n key={i}\r\n >\r\n {v?.Name}\r\n
    \r\n )\r\n })}\r\n \r\n
    \r\n )\r\n }\r\n return <>\r\n }\r\n return (\r\n \r\n {!focusing ? (\r\n {\r\n MyModal.hideModalComponent()\r\n }}\r\n >\r\n \r\n \r\n ) : (\r\n {\r\n ;(autoCompleteRef?.current as any)?.lostFocusInput()\r\n setFocusing(false)\r\n fnList?.onHandleHideFooter && fnList?.onHandleHideFooter(false)\r\n }}\r\n >\r\n \r\n \r\n )}\r\n
    Bạn muốn thuê xe ở đâu?
    \r\n {\r\n if (opts?.isWaiting === false) {\r\n onUpdate(v, fnList)\r\n } else {\r\n onUpdate(v, fnList)\r\n }\r\n },\r\n configMsg: moreConfig?.configMsg4InputAddress || {},\r\n hasFirstDropDown: true,\r\n fnRenderPopularrLocation: () => {\r\n return (\r\n
    \r\n {renderPopularLocation()}\r\n
    \r\n )\r\n },\r\n fnRenderRecentlyAddress: () => {\r\n return (\r\n
    \r\n {renderRecentlyAddress()}\r\n
    \r\n )\r\n },\r\n moreConfig: {\r\n renderCustomOption: true,\r\n },\r\n setFocusing: value => {\r\n setFocusing(value)\r\n fnList?.onHandleHideFooter && fnList?.onHandleHideFooter(value)\r\n },\r\n }}\r\n />\r\n \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n & .title {\r\n color: var(--mauden);\r\n font-size: 22px;\r\n font-weight: 700;\r\n }\r\n & .sub-title {\r\n font-size: 14px;\r\n color: #7b7878;\r\n margin: 16px 0;\r\n line-height: 19.12px;\r\n }\r\n & .btn-close-modal {\r\n font-size: 20px;\r\n position: fixed;\r\n top: 19px;\r\n left: 16px;\r\n z-index: 1;\r\n color: var(--mauden);\r\n i {\r\n display: flex;\r\n }\r\n & .ic-back {\r\n width: 20px;\r\n height: 20px;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 18px;\r\n }\r\n }\r\n &.focusing {\r\n background: #fff;\r\n height: 100%;\r\n position: fixed;\r\n left: 0;\r\n width: 100%;\r\n max-width: 100%;\r\n top: 53px;\r\n padding: 16px;\r\n border-radius: 30px;\r\n box-shadow: 0px 4px 10px 0px #00000026;\r\n }\r\n`\r\nconst WrapPopularAddress = styled.div`\r\n & .list {\r\n margin-top: 16px;\r\n display: flex;\r\n flex-wrap: wrap;\r\n & .one-address {\r\n margin-bottom: 8px;\r\n margin-right: 8px;\r\n font-size: 14px;\r\n }\r\n & .one-address:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n & .one-address {\r\n border: 1px solid var(--color-border-control);\r\n transition: ease-in-out all 0.3s;\r\n padding: 5px 13px;\r\n border-radius: 20px;\r\n cursor: pointer;\r\n font-weight: 600;\r\n color: var(--color-text-363636);\r\n &.active {\r\n border-color: var(--color-border-blue-light);\r\n background-color: var(--color-bg-blue-light);\r\n user-select: none;\r\n pointer-events: none;\r\n cursor: context-menu;\r\n }\r\n }\r\n`\r\nconst WrapRecentlyAddress = styled.div`\r\n & .one-address {\r\n margin-top: -5px;\r\n transition: ease-in-out all 0.3s;\r\n display: flex;\r\n align-items: flex-start;\r\n padding: 8px;\r\n margin-left: -8px;\r\n cursor: pointer;\r\n border: 1px solid transparent;\r\n & .wrap-ic {\r\n margin-top: 3px;\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 8px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: #dddddd;\r\n margin-right: 16px;\r\n }\r\n & svg {\r\n font-size: 18px;\r\n color: var(--color-text-000);\r\n }\r\n & .address-content {\r\n color: #7b7878;\r\n width: calc(100% - 56px);\r\n & .address {\r\n font-weight: 600;\r\n color: var(--color-text-363636);\r\n margin: 0;\r\n font-size: 14px;\r\n line-height: 19.12px;\r\n }\r\n & .time {\r\n margin-top: 3px;\r\n font-size: 13px;\r\n line-height: 16px;\r\n }\r\n }\r\n &.active {\r\n user-select: none;\r\n pointer-events: none;\r\n cursor: context-menu;\r\n background-color: #ebebeb;\r\n border-color: #ebebeb;\r\n border-radius: 8px;\r\n }\r\n }\r\n`\r\nexport default forwardRef(EnterAddress)\r\n","import styled from \"styled-components\"\r\nimport { forwardRef, useEffect, useRef, useState } from \"react\"\r\nimport classnames from \"classnames\"\r\nimport { MyForm, MyModal } from \"src/core/components\"\r\nimport { useForceUpdate } from \"src/modules/app_sigo/hooks/useForceUpdate\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\n\r\nconst EnterDate = props => {\r\n const { fnList, data } = props\r\n const refTopForm = useRef(null)\r\n const [keySearchDateUI, forceUpdateSearchDate] = useForceUpdate()\r\n const [dataFilter, setDataFilter] = useState(data)\r\n\r\n useEffect(() => {\r\n forceUpdateSearchDate()\r\n }, [data])\r\n const configFormBooking: any = {\r\n defaultValues: {\r\n ...dataFilter,\r\n DateFromTo: [\r\n dataFilter?.[homeSlidesFields.fFromDate],\r\n dataFilter?.[homeSlidesFields.fToDate],\r\n ],\r\n },\r\n controls: [\r\n {\r\n label: \"\",\r\n fieldName: \"DateFromTo\",\r\n type: \"input_date_from_to_search\",\r\n more: {\r\n morePropsDateFlatPickr: {\r\n calendarStartDay: 0,\r\n numberOfMonths: 2,\r\n orientation: \"verticalScrollable\",\r\n },\r\n moreOptionsDateFlatPickr: {\r\n disable: [\r\n function (date) {\r\n return (\r\n date < new Date().setHours(0, 0, 0, 0) &&\r\n date.getTime() !== new Date().setHours(0, 0, 0, 0)\r\n )\r\n },\r\n ],\r\n },\r\n configMergeText: {\r\n titleWhenMergeText: \"Chọn ngày\",\r\n },\r\n mappingField: {\r\n fFrom: homeSlidesFields.fFromDate,\r\n fTo: homeSlidesFields.fToDate,\r\n },\r\n configSelectTime: {\r\n titleTimeFrom: \"Giờ nhận xe\",\r\n titleTimeTo: \"Giờ trả xe\",\r\n },\r\n configSelectDate: {\r\n titleDatePicker: \"Chuyến đi của bạn diễn ra khi nào?\",\r\n labelFrom: \"Ngày nhận\",\r\n labelTo: \"Ngày trả\",\r\n },\r\n classNameGroup: \"w-100 datefromto\",\r\n classNameControl: \"date-from-to\",\r\n },\r\n },\r\n ],\r\n }\r\n\r\n const onHandleUpdate = (values = {}, needReloadUI = false) => {\r\n setDataFilter({ ...dataFilter, ...values })\r\n needReloadUI && forceUpdateSearchDate()\r\n }\r\n\r\n return (\r\n \r\n {\r\n const { fieldName, newValue } = opts\r\n let needReload = false\r\n let values = {\r\n [fieldName]: newValue,\r\n }\r\n if (fieldName === \"DateFromTo\") {\r\n values[homeSlidesFields.fFromDate] = newValue[0]\r\n values[homeSlidesFields.fToDate] = newValue[1]\r\n }\r\n onHandleUpdate(values)\r\n },\r\n onCloseSelectTime: () => {\r\n fnList?.onCloseCollapse && fnList?.onCloseCollapse()\r\n },\r\n afterSaveSelectTime: obj => {\r\n fnList?.onUpdateDate && fnList?.onUpdateDate(dataFilter)\r\n },\r\n } as any\r\n }\r\n renderFooter={() => <>}\r\n />\r\n \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n & .mc-input-date-from-to .wrap-title {\r\n padding: 16px;\r\n padding-bottom: 0;\r\n }\r\n\r\n & .check-in-out-time {\r\n flex: 1 1 auto;\r\n }\r\n & .mc-input-date-from-to,\r\n & .date-from-to {\r\n height: 100%;\r\n }\r\n & .input-react-dates {\r\n height: 100% !important;\r\n }\r\n & .mc-input-date-from-to > div {\r\n height: 100%;\r\n & .wrap-time {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n }\r\n`\r\nexport default forwardRef(EnterDate)\r\n","import styled from \"styled-components\"\r\nimport { forwardRef, useEffect, useRef, useState } from \"react\"\r\nimport classnames from \"classnames\"\r\nimport { MyForm, MyModal } from \"src/core/components\"\r\nimport { useForceUpdate } from \"src/modules/app_sigo/hooks/useForceUpdate\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\n\r\nconst EnterTime = props => {\r\n const { fnList, tabActive, data } = props\r\n const refTopForm = useRef(null)\r\n const [keySearchDateUI, forceUpdateSearchDate] = useForceUpdate()\r\n const [dataFilter, setDataFilter] = useState(data)\r\n useEffect(() => {\r\n forceUpdateSearchDate()\r\n }, [tabActive])\r\n const configFormBooking: any = {\r\n defaultValues: {\r\n ...dataFilter,\r\n DateFromTo: [\r\n dataFilter?.[homeSlidesFields.fTimeStart],\r\n dataFilter?.[homeSlidesFields.fTimeEnd],\r\n ],\r\n },\r\n controls: [\r\n {\r\n label: \"\",\r\n fieldName: \"DateFromTo\",\r\n type: \"input_time_from_to_search\",\r\n more: {\r\n morePropsDateFlatPickr: {\r\n calendarStartDay: 0,\r\n numberOfMonths: 2,\r\n orientation: \"vertical\",\r\n },\r\n moreOptionsDateFlatPickr: {},\r\n configMergeText: {\r\n titleWhenMergeText: \"Chọn ngày\",\r\n },\r\n mappingField: {\r\n fFrom: homeSlidesFields.fTimeStart,\r\n fTo: homeSlidesFields.fTimeEnd,\r\n },\r\n configSelectTime: {\r\n titleTimeFrom: \"Giờ nhận xe\",\r\n titleTimeTo: \"Giờ trả xe\",\r\n titleTimePicker: \"Chọn giờ nhận/trả xe\",\r\n descriptionTimePicker: \"Thêm giờ chính xác bạn muốn nhận và trả xe\",\r\n },\r\n classNameGroup: \"w-100 datefromto\",\r\n },\r\n },\r\n ],\r\n }\r\n\r\n const onHandleUpdate = (values = {}, needReloadUI = false) => {\r\n setDataFilter({ ...dataFilter, ...values })\r\n fnList?.onUpdateTime && fnList?.onUpdateTime({ ...dataFilter, ...values })\r\n needReloadUI && forceUpdateSearchDate()\r\n }\r\n\r\n return (\r\n \r\n {\r\n const { fieldName, newValue } = opts\r\n let values = {\r\n [fieldName]: newValue,\r\n }\r\n if (fieldName === \"DateFromTo\") {\r\n values[homeSlidesFields.fTimeStart] = newValue[0]\r\n values[homeSlidesFields.fTimeEnd] = newValue[1]\r\n }\r\n onHandleUpdate(values)\r\n },\r\n } as any\r\n }\r\n renderFooter={() => <>}\r\n />\r\n \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n & .mc-input-date-from-to .wrap-select-time {\r\n padding: 0;\r\n }\r\n`\r\nexport default forwardRef(EnterTime)\r\n","import React, { useEffect, useRef, useState } from \"react\"\r\nimport { HFormat, HLink, HUtils } from \"src/core/helpers\"\r\nimport { MyForm, MyModal, MyUI } from \"src/core/components\"\r\nimport { isNotEmpty } from \"src/core/helpers/utils\"\r\nimport styled from \"styled-components\"\r\nimport { showAlert } from \"src/modules/app_sigo/helpers/ui\"\r\nimport { mobileWidth } from \"src/modules/app_sigo/constants\"\r\nimport { headerTabList } from \"src/modules/app_sigo/constants\"\r\nimport classNames from \"classnames\"\r\nimport { Button, Collapse } from \"reactstrap\"\r\nimport EnterAddress from \"./EnterAddress\"\r\nimport { connect, ConnectedProps } from \"react-redux\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport EnterDate from \"./EnterDate\"\r\nimport EnterTime from \"./EnterTime\"\r\n\r\nconst mapStateToProps = state => ({\r\n dataFirstSetting: state.app.dataFirstSetting,\r\n})\r\nconst mapDispatchToProps = {}\r\n\r\nconst getHourStringFromTime = time => {\r\n if (!time) {\r\n return \"00:00\"\r\n }\r\n const date = new Date(time)\r\n const hoursDate = date.getHours().toString().padStart(2, \"0\")\r\n const minutesDate = date.getMinutes().toString().padStart(2, \"0\")\r\n return hoursDate + \":\" + minutesDate\r\n}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps)\r\ninterface Props extends ConnectedProps {\r\n tabList?: any\r\n moreConfig?: any\r\n fnList?: any\r\n dataFilter?: any\r\n goBackHome?: any\r\n}\r\nconst OneCollapse = props => {\r\n const {\r\n children,\r\n label,\r\n placeholder,\r\n value,\r\n defaultStatus,\r\n classNameCollapse,\r\n open,\r\n onChangeCollapseActive,\r\n moreConfig,\r\n } = props\r\n const [isShow, setIsShow] = useState(open)\r\n\r\n let _value = placeholder\r\n if (value) {\r\n _value = value\r\n }\r\n return (\r\n {\r\n if (!open) {\r\n onChangeCollapseActive()\r\n }\r\n }}\r\n >\r\n {!open ? (\r\n
    \r\n
    {label}
    \r\n
    {_value}
    \r\n
    \r\n ) : (\r\n children\r\n )}\r\n \r\n )\r\n}\r\n\r\nconst Search = props => {\r\n const { fnList, dataFilter = {} } = props\r\n const [myFilter, setMyFilter] = useState({\r\n [homeSlidesFields.fAddress]: null as any,\r\n [homeSlidesFields.fFromDate]: new Date().setHours(21, 0, 0, 0),\r\n [homeSlidesFields.fToDate]: new Date(\r\n new Date().setHours(24, 0, 0, 0)\r\n ).setHours(20, 0, 0, 0),\r\n [homeSlidesFields.fTimeStart]: \"21:00\",\r\n [homeSlidesFields.fTimeEnd]: \"20:00\",\r\n ...dataFilter,\r\n })\r\n\r\n const [curCollapseOpen, setCurCollapseOpen] = useState(\"address\")\r\n const [focusingAddress, setFocusingAddress] = useState(false)\r\n\r\n /** Get */\r\n const getDisabledSearch = () => {\r\n let isDisabled = false\r\n const requiredFields = {\r\n [homeSlidesFields.fAddress]: homeSlidesFields.fAddress,\r\n [homeSlidesFields.fFromDate]: homeSlidesFields.fFromDate,\r\n [homeSlidesFields.fToDate]: homeSlidesFields.fToDate,\r\n }\r\n Object.keys(requiredFields).every(f => {\r\n if (!isNotEmpty(myFilter[f])) {\r\n isDisabled = true\r\n return false\r\n }\r\n return true\r\n })\r\n if (\r\n myFilter?.[homeSlidesFields.fFromDate] >=\r\n myFilter?.[homeSlidesFields.fToDate]\r\n ) {\r\n isDisabled = true\r\n }\r\n return isDisabled\r\n }\r\n const convertHourStringToMilliseconds = timeString => {\r\n if (!timeString) {\r\n return 0\r\n }\r\n // Tách chuỗi thành giờ và phút\r\n const [hours, minutes] = timeString.split(\":\").map(Number)\r\n\r\n // Tính tổng số mili giây\r\n const totalMilliseconds = hours * 3600000 + minutes * 60000\r\n\r\n return totalMilliseconds\r\n }\r\n\r\n const getFnList = () => {\r\n return {\r\n afterUpdateMultiValues: obj => {\r\n const { values, cbSuccess } = obj\r\n let objUpdate: any = {}\r\n objUpdate = { ...values }\r\n if (values?.[`${homeSlidesFields.fAddress}_MoreInfo`]) {\r\n const location = HUtils.get(\r\n values,\r\n `${homeSlidesFields.fAddress}_MoreInfo[0].geometry.location`\r\n )\r\n if (location?.lat) {\r\n objUpdate[homeSlidesFields.fLatitude] = location.lat()\r\n }\r\n if (location?.lng) {\r\n objUpdate[homeSlidesFields.fLongitude] = location.lng()\r\n }\r\n delete objUpdate[`${homeSlidesFields.fAddress}_MoreInfo`]\r\n cbSuccess && cbSuccess()\r\n setMyFilter({\r\n ...myFilter,\r\n ...objUpdate,\r\n })\r\n updateDataOnSearchBar({ ...myFilter, ...objUpdate })\r\n onChangeCollapseActive(\"date\")\r\n onHandleHideFooter(false)\r\n } else {\r\n }\r\n },\r\n onCloseCollapse: () => {\r\n onChangeCollapseActive(null)\r\n },\r\n onUpdateDate: values => {\r\n let newValuesUpdate: any = {}\r\n let timeStart = myFilter?.[homeSlidesFields.fTimeStart]\r\n let timeEnd = myFilter?.[homeSlidesFields.fTimeEnd]\r\n newValuesUpdate[homeSlidesFields.fFromDate] =\r\n values[homeSlidesFields.fFromDate]\r\n newValuesUpdate[homeSlidesFields.fToDate] =\r\n values[homeSlidesFields.fToDate]\r\n\r\n // Nếu chọn giờ trước thì cần apply giờ vào ngày\r\n if (timeStart && values[homeSlidesFields.fFromDate]) {\r\n const resetTimeOfValue = new Date(\r\n values?.[homeSlidesFields.fFromDate]\r\n ).setHours(0, 0, 0, 0)\r\n newValuesUpdate[homeSlidesFields.fFromDate] = new Date(\r\n resetTimeOfValue\r\n ).setMilliseconds(convertHourStringToMilliseconds(timeStart))\r\n }\r\n if (timeEnd && values[homeSlidesFields.fToDate]) {\r\n const resetTimeOfValue = new Date(\r\n values?.[homeSlidesFields.fToDate]\r\n ).setHours(0, 0, 0, 0)\r\n newValuesUpdate[homeSlidesFields.fToDate] = new Date(\r\n resetTimeOfValue\r\n ).setMilliseconds(convertHourStringToMilliseconds(timeEnd))\r\n }\r\n // Cần cộng thêm 1 ngày nếu ngày thuê >= ngày trả\r\n if (\r\n newValuesUpdate[homeSlidesFields.fFromDate] &&\r\n newValuesUpdate[homeSlidesFields.fToDate] &&\r\n newValuesUpdate[homeSlidesFields.fFromDate] >=\r\n newValuesUpdate[homeSlidesFields.fToDate]\r\n ) {\r\n let _newToDate =\r\n newValuesUpdate[homeSlidesFields.fFromDate] + 86400000\r\n let endHours = new Date(\r\n newValuesUpdate[homeSlidesFields.fToDate]\r\n ).getHours()\r\n let endMinute = new Date(\r\n newValuesUpdate[homeSlidesFields.fToDate]\r\n ).getMinutes()\r\n newValuesUpdate[homeSlidesFields.fToDate] = new Date(\r\n new Date(_newToDate).setHours(endHours, endMinute, 0, 0)\r\n ).getTime()\r\n }\r\n setMyFilter({\r\n ...myFilter,\r\n ...newValuesUpdate,\r\n })\r\n updateDataOnSearchBar({ ...myFilter, ...values })\r\n onChangeCollapseActive(\"time\")\r\n },\r\n onUpdateTime: values => {\r\n let newValuesUpdate: any = {}\r\n let timeStart = values[homeSlidesFields.fTimeStart]\r\n let timeEnd = values[homeSlidesFields.fTimeEnd]\r\n\r\n if (timeStart) {\r\n newValuesUpdate[homeSlidesFields.fTimeStart] = timeStart\r\n if (myFilter?.[homeSlidesFields.fFromDate]) {\r\n const resetTimeOfValue = new Date(\r\n myFilter?.[homeSlidesFields.fFromDate]\r\n ).setHours(0, 0, 0, 0)\r\n newValuesUpdate[homeSlidesFields.fFromDate] = new Date(\r\n resetTimeOfValue\r\n ).setMilliseconds(convertHourStringToMilliseconds(timeStart))\r\n }\r\n }\r\n if (timeEnd) {\r\n newValuesUpdate[homeSlidesFields.fTimeEnd] = timeEnd\r\n if (myFilter?.[homeSlidesFields.fToDate]) {\r\n const resetTimeOfValue = new Date(\r\n myFilter?.[homeSlidesFields.fToDate]\r\n ).setHours(0, 0, 0, 0)\r\n newValuesUpdate[homeSlidesFields.fToDate] = new Date(\r\n resetTimeOfValue\r\n ).setMilliseconds(convertHourStringToMilliseconds(timeEnd))\r\n }\r\n }\r\n // Cần cộng thêm 1 ngày nếu ngày thuê >= ngày trả\r\n if (\r\n newValuesUpdate[homeSlidesFields.fFromDate] &&\r\n newValuesUpdate[homeSlidesFields.fToDate] &&\r\n newValuesUpdate[homeSlidesFields.fFromDate] >=\r\n newValuesUpdate[homeSlidesFields.fToDate]\r\n ) {\r\n let _newToDate =\r\n newValuesUpdate[homeSlidesFields.fFromDate] + 86400000\r\n let endHours = new Date(\r\n newValuesUpdate[homeSlidesFields.fToDate]\r\n ).getHours()\r\n let endMinute = new Date(\r\n newValuesUpdate[homeSlidesFields.fToDate]\r\n ).getMinutes()\r\n newValuesUpdate[homeSlidesFields.fToDate] = new Date(\r\n new Date(_newToDate).setHours(endHours, endMinute, 0, 0)\r\n ).getTime()\r\n }\r\n //Nếu có thời gian nhưng không có ngày\r\n setMyFilter({\r\n ...myFilter,\r\n ...newValuesUpdate,\r\n })\r\n updateDataOnSearchBar({ ...myFilter, ...values })\r\n },\r\n updateAddress: (\r\n obj,\r\n { afterUpdate, updateWithTime = false }: any = {}\r\n ) => {\r\n if (updateWithTime) {\r\n const { FromDate, ToDate, ...other } = obj\r\n let newData: any = {\r\n ...myFilter,\r\n ...other,\r\n }\r\n let isFormatted = false\r\n if (FromDate && ToDate) {\r\n if (\r\n FromDate <= new Date().getTime() ||\r\n ToDate <= new Date().getTime()\r\n ) {\r\n // showAlert({\r\n // component: (\r\n // \r\n // ),\r\n // })\r\n } else if (FromDate >= ToDate) {\r\n // Trường hợp ngày nhận >= ngày trả\r\n let _newToDate = FromDate + 86400000\r\n let endHours = new Date(ToDate).getHours()\r\n let endMinute = new Date(ToDate).getMinutes()\r\n newData[homeSlidesFields.fToDate] = new Date(\r\n new Date(_newToDate).setHours(endHours, endMinute, 0, 0)\r\n ).getTime()\r\n newData[homeSlidesFields.fFromDate] = FromDate\r\n isFormatted = true\r\n } else {\r\n newData[homeSlidesFields.fToDate] = ToDate\r\n newData[homeSlidesFields.fFromDate] = FromDate\r\n }\r\n }\r\n if (newData[homeSlidesFields.fFromDate]) {\r\n newData[homeSlidesFields.fTimeStart] = getHourStringFromTime(\r\n newData[homeSlidesFields.fFromDate]\r\n )\r\n }\r\n if (newData[homeSlidesFields.fToDate]) {\r\n newData[homeSlidesFields.fTimeEnd] = getHourStringFromTime(\r\n newData[homeSlidesFields.fToDate]\r\n )\r\n }\r\n\r\n if (\r\n (FromDate === newData[homeSlidesFields.fFromDate] &&\r\n ToDate === newData[homeSlidesFields.fToDate]) ||\r\n isFormatted\r\n ) {\r\n setMyFilter(newData)\r\n onChangeCollapseActive(\"date\")\r\n updateDataOnSearchBar({ ...myFilter, ...other })\r\n fnList?.onFilter && fnList?.onFilter({ ...myFilter, ...other })\r\n MyModal.hideModalComponent()\r\n // onHandleHideFooter(false)\r\n } else {\r\n setMyFilter(newData)\r\n updateDataOnSearchBar(newData)\r\n // Xử lý trường hợp recently address chưa có thời gian hoặc thời gian đã cũ\r\n onChangeCollapseActive(\"date\")\r\n onHandleHideFooter(false)\r\n }\r\n } else {\r\n const { Name, ...other } = obj\r\n let newData = {\r\n ...myFilter,\r\n ...other,\r\n [`${homeSlidesFields.fAddress}_MoreInfo`]: [],\r\n }\r\n setMyFilter(newData)\r\n onChangeCollapseActive(\"date\")\r\n onHandleHideFooter(false)\r\n }\r\n },\r\n setFocusingAddress: setFocusingAddress,\r\n onHandleHideFooter: onHandleHideFooter,\r\n }\r\n }\r\n\r\n const getDateToShow = () => {\r\n const start = myFilter?.[homeSlidesFields.fFromDate]\r\n const end = myFilter?.[homeSlidesFields.fToDate]\r\n let dateStart: any = \"\"\r\n let dateEnd: any = \"\"\r\n if (!start || !end) {\r\n return\r\n }\r\n\r\n if (start) {\r\n const _dateStart = new Date(start)\r\n const y = _dateStart?.getFullYear()\r\n const m = _dateStart?.getMonth() + 1\r\n const d = _dateStart?.getDate()\r\n let formattedDate = `${d < 10 ? `${d}` : d} tháng ${m}, ${y}`\r\n\r\n dateStart = formattedDate\r\n }\r\n if (end) {\r\n const _dateEnd = new Date(end)\r\n const y = _dateEnd?.getFullYear()\r\n const m = _dateEnd?.getMonth() + 1\r\n const d = _dateEnd?.getDate()\r\n let formattedDate = `${d < 10 ? `${d}` : d} tháng ${m}, ${y}`\r\n\r\n dateEnd = formattedDate\r\n }\r\n // if (dateStart) {\r\n // let commaIndex = dateStart.indexOf(\",\")\r\n // if (commaIndex !== -1) {\r\n // dateStart = dateStart.slice(0, commaIndex)\r\n // }\r\n // }\r\n return dateStart + \"-\" + dateEnd\r\n }\r\n\r\n const getTimeToShow = () => {\r\n const _timeStart = myFilter?.[homeSlidesFields.fTimeStart]\r\n const _timeEnd = myFilter?.[homeSlidesFields.fTimeEnd]\r\n if (!_timeStart || !_timeEnd) {\r\n return false\r\n }\r\n return _timeStart + \"-\" + _timeEnd\r\n }\r\n\r\n const getConfigCollapseList = () => {\r\n const moreCfAddress =\r\n (fnList?.getConfigFromFirstSettingByKey &&\r\n fnList?.getConfigFromFirstSettingByKey(\"address\")) ||\r\n {}\r\n return [\r\n {\r\n key: \"address\",\r\n label: \"Địa điểm\",\r\n placeholder: \"Chọn địa điểm\",\r\n value: myFilter?.[homeSlidesFields.fAddress],\r\n content: (\r\n \r\n ),\r\n },\r\n {\r\n key: \"date\",\r\n label: \"Thời gian\",\r\n value: getDateToShow(),\r\n placeholder: \"Chọn ngày\",\r\n classNameCollapse: \"wrap-part-date\",\r\n content: (\r\n \r\n ),\r\n },\r\n {\r\n key: \"time\",\r\n label: \"Nhận/Trả xe\",\r\n placeholder: \"Chọn giờ\",\r\n value: getTimeToShow(),\r\n content: (\r\n \r\n ),\r\n },\r\n ]\r\n }\r\n const updateDataOnSearchBar = newValue => {\r\n fnList?.setCurData && fnList?.setCurData(newValue)\r\n }\r\n const onChangeCollapseActive = key => {\r\n setCurCollapseOpen(key)\r\n const btnHideModal = document.getElementById(\"btn-close-modal\")\r\n if (btnHideModal) {\r\n if (key === \"address\" && !btnHideModal?.classList.contains(\"hide\")) {\r\n btnHideModal?.classList.add(\"hide\")\r\n } else if (\r\n key !== \"address\" &&\r\n btnHideModal?.classList.contains(\"hide\")\r\n ) {\r\n btnHideModal?.classList.remove(\"hide\")\r\n }\r\n }\r\n }\r\n const onSearch = () => {\r\n if (myFilter) {\r\n fnList?.onFilter && fnList?.onFilter(myFilter)\r\n MyModal.hideModalComponent()\r\n }\r\n }\r\n const onHandleClear = () => {\r\n setMyFilter({})\r\n // setMyFilter({\r\n // [homeSlidesFields.fAddress]: null as any,\r\n // [homeSlidesFields.fFromDate]: new Date().setHours(21, 0, 0, 0),\r\n // [homeSlidesFields.fToDate]: new Date(\r\n // new Date().setHours(24, 0, 0, 0)\r\n // ).setHours(20, 0, 0, 0),\r\n // [homeSlidesFields.fTimeStart]: \"21:00\",\r\n // [homeSlidesFields.fTimeEnd]: \"20:00\",\r\n // })\r\n setCurCollapseOpen(\"address\")\r\n }\r\n const onHandleHideFooter = value => {\r\n const footer = document.getElementById(\"search-mobile-footer\")\r\n if (footer) {\r\n if (value && !footer?.classList?.contains(\"hide\")) {\r\n footer.classList?.add(\"hide\")\r\n } else if (!value && footer?.classList?.contains(\"hide\")) {\r\n footer.classList.remove(\"hide\")\r\n }\r\n }\r\n }\r\n // const renderForm = () => {\r\n // return (\r\n //
    \r\n //
    \r\n // {\r\n // const { fieldName, newValue } = opts\r\n // let newData: any = JSON.parse(JSON.stringify(myFilter))\r\n // newData[fieldName] = newValue\r\n // if (\r\n // fieldName === \"datetimefrom\" &&\r\n // newData.datetimefrom >= newData.datetimeto\r\n // ) {\r\n // const _newDateTimeTo = newValue + 86400000\r\n // newData.datetimeto = _newDateTimeTo\r\n // if (\r\n // refTopForm?.current?.fnListFromExtControl?.[\"datetimeto\"]\r\n // ) {\r\n // refTopForm.current.fnListFromExtControl[\r\n // \"datetimeto\"\r\n // ].updateValue(_newDateTimeTo)\r\n // }\r\n // setMyFilter(newData)\r\n // } else if (\r\n // fieldName === \"datetimeto\" &&\r\n // newData.datetimeto <= newData.datetimefrom\r\n // ) {\r\n // if (\r\n // refTopForm?.current?.fnListFromExtControl?.[fieldName]\r\n // ) {\r\n // refTopForm.current.fnListFromExtControl[\r\n // fieldName\r\n // ].updateValue(myFilter[fieldName])\r\n // }\r\n // showAlert({\r\n // component: (\r\n // \r\n // ),\r\n // })\r\n // } else {\r\n // setMyFilter(newData)\r\n // }\r\n // },\r\n // afterUpdateMultiValues: obj => {\r\n // const { values, cbSuccess } = obj\r\n // let objUpdate: any = {}\r\n // objUpdate = { ...values }\r\n // if (values?.[`from_MoreInfo`]) {\r\n // const location = HUtils.get(\r\n // values,\r\n // `from_MoreInfo[0].geometry.location`\r\n // )\r\n // if (location?.lat) {\r\n // objUpdate.lat = location.lat()\r\n // }\r\n // if (location?.lng) {\r\n // objUpdate.long = location.lng()\r\n // }\r\n // delete objUpdate[\"from_MoreInfo\"]\r\n // cbSuccess && cbSuccess()\r\n // setMyFilter({\r\n // ...myFilter,\r\n // ...objUpdate,\r\n // })\r\n // }\r\n // },\r\n // } as any\r\n // }\r\n // renderFooter={() => {\r\n // return (\r\n //
    \r\n // {\r\n // HLink.openUrl(getLinkSearch(), \"_self\")\r\n // MyModal.hideModalComponent()\r\n // }}\r\n // >\r\n // \r\n // \r\n //
    \r\n // )\r\n // }}\r\n // />\r\n //
    \r\n //
    \r\n // )\r\n // }\r\n const renderContent = () => {\r\n const collapseList = getConfigCollapseList() || []\r\n if (collapseList && collapseList?.length > 0) {\r\n return (\r\n
    \r\n {collapseList?.map((v, i) => {\r\n let active = false\r\n if (v?.key === curCollapseOpen) {\r\n active = true\r\n }\r\n return (\r\n {\r\n onChangeCollapseActive(v?.key)\r\n }}\r\n key={i}\r\n >\r\n {v?.content}\r\n \r\n )\r\n })}\r\n
    \r\n )\r\n }\r\n return <>\r\n }\r\n const renderFooter = () => {\r\n return (\r\n
    \r\n \r\n Xóa tất cả\r\n \r\n \r\n Tìm kiếm\r\n \r\n
    \r\n )\r\n }\r\n return (\r\n \r\n {renderContent()}\r\n {renderFooter()}\r\n \r\n )\r\n}\r\nconst MUISearchbar = (props: Props) => {\r\n const {\r\n tabList,\r\n dataFirstSetting,\r\n fnList,\r\n dataFilter = {},\r\n goBackHome,\r\n } = props\r\n const fromDate = dataFilter?.[homeSlidesFields.fFromDate]\r\n const toDate = dataFilter?.[homeSlidesFields.fToDate]\r\n const [curTab, setCurTab] = useState(\"xe-tu-lai\")\r\n const [configFirstSetting, setConfigFirstSetting] = useState(\r\n HUtils.get(dataFirstSetting, \"DefaultValues.websiteSetting\") || {}\r\n )\r\n useEffect(() => {\r\n setConfigFirstSetting(\r\n HUtils.get(dataFirstSetting, \"DefaultValues.websiteSetting\")\r\n )\r\n // eslint-disable-next-line\r\n }, [dataFirstSetting])\r\n const getConfigFromFirstSettingByKey = key => {\r\n if (configFirstSetting) {\r\n const { config_search_in_header } = configFirstSetting || {}\r\n return HUtils.get(config_search_in_header, key)\r\n }\r\n return\r\n }\r\n\r\n const getTimeText = () => {\r\n if (fromDate && toDate) {\r\n const dateStart = new Date(fromDate)\r\n const dateEnd = new Date(toDate)\r\n return `${HFormat.format(dateStart, {\r\n type: \"date\",\r\n format: \"HH:mm DD/MM/YYYY\",\r\n })}-${HFormat.format(dateEnd, {\r\n type: \"date\",\r\n format: \"HH:mm DD/MM/YYYY\",\r\n })}`\r\n }\r\n return \"\"\r\n }\r\n\r\n const getDataFilter = () => {\r\n let _dataFilter = dataFilter || {}\r\n if (_dataFilter?.[homeSlidesFields.fFromDate]) {\r\n _dataFilter[homeSlidesFields.fTimeStart] = getHourStringFromTime(\r\n _dataFilter?.[homeSlidesFields.fFromDate]\r\n )\r\n }\r\n if (_dataFilter?.[homeSlidesFields.fToDate]) {\r\n _dataFilter[homeSlidesFields.fTimeEnd] = getHourStringFromTime(\r\n _dataFilter?.[homeSlidesFields.fToDate]\r\n )\r\n }\r\n return _dataFilter\r\n }\r\n return (\r\n \r\n {\r\n MyModal.showFromComponent(\r\n ,\r\n {\r\n title: (\r\n
    \r\n {\r\n MyModal.hideModalComponent()\r\n }}\r\n >\r\n \r\n \r\n
    \r\n {headerTabList &&\r\n headerTabList?.length > 0 &&\r\n headerTabList?.map((v, i) => {\r\n return (\r\n \r\n {v?.title}\r\n \r\n )\r\n })}\r\n
    \r\n
    \r\n ) as any,\r\n showHeader: true,\r\n backdrop: \"static\",\r\n modalClassName:\r\n \"default footer-space-between modal-filter modal-full modal-search-mobile \",\r\n showFooter: false,\r\n }\r\n )\r\n }}\r\n >\r\n {goBackHome ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )}\r\n
    \r\n
    \r\n {dataFilter?.[homeSlidesFields.fAddress]\r\n ? dataFilter?.[homeSlidesFields.fAddress]\r\n : \"Bạn muốn thuê xe ở đâu?\"}\r\n
    \r\n
    \r\n {fromDate && toDate ? (\r\n getTimeText()\r\n ) : (\r\n <>\r\n {!dataFilter?.[homeSlidesFields.fAddress] && (\r\n <>\r\n Địa điểm
    \r\n \r\n )}\r\n Ngày nhận\r\n
    Ngày trả\r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n \r\n )\r\n}\r\nconst Header = styled.div`\r\n & .btn-close-modal {\r\n position: absolute;\r\n font-size: 20px;\r\n top: 18px;\r\n left: 15px;\r\n & i {\r\n display: flex;\r\n }\r\n &.hide {\r\n display: none;\r\n }\r\n }\r\n & .first-menu {\r\n display: flex;\r\n width: calc(100% - 36px);\r\n justify-content: center;\r\n margin-left: 36px;\r\n & .menu-item {\r\n margin-right: 16px;\r\n color: #5b5959;\r\n font-weight: 500;\r\n font-size: 14px;\r\n min-width: 60px;\r\n &:last-child {\r\n margin-right: 0;\r\n }\r\n }\r\n & .menu-item.active {\r\n color: var(--color-text-000);\r\n font-weight: 700;\r\n user-select: none;\r\n pointer-events: none;\r\n &:after {\r\n height: 2px;\r\n content: \"\";\r\n background: #444444;\r\n width: 100%;\r\n display: block;\r\n }\r\n }\r\n }\r\n`\r\nconst Wrap = styled.div`\r\n &.search-popup {\r\n display: flex;\r\n height: 100%;\r\n flex-direction: column;\r\n & .w-content {\r\n flex: 1 1 auto;\r\n padding-left: 16px;\r\n padding-right: 16px;\r\n height: 100%;\r\n overflow: auto;\r\n &::-webkit-scrollbar {\r\n display: none;\r\n }\r\n }\r\n & .btnsearch {\r\n margin-bottom: 0px !important;\r\n }\r\n & .wpsearchsl {\r\n margin-bottom: 0px !important;\r\n padding: 0px;\r\n }\r\n }\r\n & .search-bar {\r\n cursor: pointer;\r\n margin-top: 0.5rem;\r\n box-shadow: 0 3px 10px rgba(0 0 0 / 0.1);\r\n border: 0.5px solid rgba(0 0 0 / 0.08);\r\n min-height: 56px;\r\n border-radius: 50px;\r\n display: flex;\r\n align-items: center;\r\n padding: 0 1rem;\r\n & i {\r\n flex-shrink: 1;\r\n margin-top: 0.25rem;\r\n font-size: 25px;\r\n color: var(--color-text-363636);\r\n }\r\n & .btn-back {\r\n width: 30px;\r\n height: 40px;\r\n & i {\r\n font-size: 16px;\r\n color: var(--den);\r\n }\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 12px;\r\n cursor: pointer;\r\n }\r\n\r\n & .intro-text {\r\n flex: 1;\r\n min-width: 0;\r\n margin-left: 0.5rem;\r\n & .main {\r\n font-weight: 600;\r\n color: var(--color-text-222222);\r\n font-size: 16px;\r\n line-height: 1.5rem;\r\n letter-spacing: normal;\r\n }\r\n & .des {\r\n font-size: 12px;\r\n line-height: 1rem;\r\n color: #939393;\r\n letter-spacing: normal;\r\n display: flex;\r\n align-items: center;\r\n & .dot-icon {\r\n height: 3px;\r\n width: 3px;\r\n margin-right: 8px;\r\n margin-left: 8px;\r\n border-radius: 3px;\r\n background: #000;\r\n }\r\n }\r\n }\r\n }\r\n & .label-text {\r\n color: #555;\r\n font-size: 16px;\r\n cursor: default;\r\n }\r\n & .filter-top {\r\n display: flex;\r\n align-items: center;\r\n & > .form-group {\r\n height: 48px;\r\n margin: 0px !important;\r\n & label {\r\n line-height: 30px;\r\n margin: 0 !important;\r\n font-weight: 700;\r\n color: #555;\r\n line-height: 25px;\r\n }\r\n & > div:nth-child(2) {\r\n flex: 1;\r\n }\r\n & .react-datepicker-wrapper {\r\n width: 90px !important;\r\n }\r\n }\r\n & .mc-input-datetime {\r\n justify-content: space-between;\r\n }\r\n & .nice-select .current {\r\n line-height: 1;\r\n }\r\n & input {\r\n padding-left: 0 !important;\r\n padding-bottom: 0 !important;\r\n height: 22px;\r\n }\r\n & .mc_input_address {\r\n .clear > button {\r\n height: 23px;\r\n }\r\n }\r\n }\r\n & .btnsearch {\r\n &:disabled {\r\n color: #fff;\r\n background-color: var(--mau1);\r\n border-color: var(--mau1);\r\n }\r\n }\r\n & .w-content {\r\n }\r\n @media (min-width: 768px) and (max-width: ${mobileWidth}px) {\r\n .wpinput.mid {\r\n border-left: none;\r\n border-right: none;\r\n }\r\n }\r\n @media (max-width: ${mobileWidth}px) {\r\n & .wpsearchsl {\r\n max-width: 100%;\r\n height: auto;\r\n padding: 10px;\r\n margin-bottom: 15px;\r\n }\r\n & .filter-top {\r\n flex-direction: column;\r\n & .form-group {\r\n margin-bottom: 20px !important;\r\n padding: 0 10px;\r\n width: 100%;\r\n }\r\n & .btnsearch {\r\n width: 100%;\r\n margin-top: 5px;\r\n border-radius: 20px;\r\n }\r\n }\r\n & .wpsearchsl {\r\n padding-bottom: 0;\r\n }\r\n }\r\n`\r\nconst Footer = styled.div`\r\n // position: fixed;\r\n display: flex;\r\n justify-content: space-between;\r\n bottom: 0;\r\n background: #fff;\r\n width: 100%;\r\n margin: 0;\r\n left: 0;\r\n padding: 16px;\r\n align-items: center;\r\n & .btn-primary-v2 {\r\n min-width: 150px;\r\n font-size: 16px;\r\n min-height: 48px;\r\n }\r\n &.hide {\r\n display: none;\r\n }\r\n`\r\nexport const WrapOneCollapse = styled.div`\r\n border: 1px solid #e9e9e9;\r\n box-shadow: 0px 4px 10px 0px #00000026;\r\n padding: 16px;\r\n border-radius: 12px;\r\n margin-bottom: 16px;\r\n background: var(--mautrang);\r\n\r\n &.wrap-part-date {\r\n &.is-open {\r\n position: absolute;\r\n width: calc(100% - 32px);\r\n padding: 0;\r\n top: 75px;\r\n bottom: 0;\r\n z-index: 10;\r\n margin-bottom: 0;\r\n }\r\n & .value {\r\n width: calc(100% - 70px);\r\n }\r\n }\r\n & .label {\r\n color: #7b7878;\r\n font-weight: 600;\r\n font-size: 14px;\r\n max-width: 90px;\r\n padding-right: 8px;\r\n }\r\n & .value {\r\n color: #585858;\r\n font-weight: 600;\r\n font-size: 14px;\r\n width: calc(100% - 90px);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n text-align: right;\r\n }\r\n`\r\nexport default connector(MUISearchbar)\r\n","import classNames from \"classnames\"\r\nimport classnames from \"classnames\"\r\nimport { HLink, HUtils } from \"@macashipo/mlib\"\r\nimport React, { useEffect, useState } from \"react\"\r\nimport Skeleton from \"react-loading-skeleton\"\r\nimport OwlCarousel from \"react-owl-carousel2\"\r\nimport { MyModal, MyUI } from \"src/core/components\"\r\nimport { detailFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst MyUICarImageSlide = props => {\r\n const {\r\n allData,\r\n className,\r\n config,\r\n configFromFirstSetting,\r\n loading,\r\n mobileWidth,\r\n fnList,\r\n } = props\r\n const [isMobileView, setIsMobileView] = useState(false)\r\n const [itemCount, setItemCount] = useState(4)\r\n const { data } = allData || {}\r\n const { imageSlides, shareSettings, fancyboxSettings } =\r\n configFromFirstSetting || {}\r\n\r\n useEffect(() => {\r\n const ro = new ResizeObserver((entries, observer) => {\r\n for (const entry of entries) {\r\n const { left, top, width, height } = entry.contentRect\r\n if (entry.target == document.body) {\r\n if (width <= mobileWidth) {\r\n if (isMobileView === false) {\r\n setIsMobileView(true)\r\n setItemCount(2)\r\n }\r\n } else {\r\n setIsMobileView(false)\r\n }\r\n if (width <= 767) {\r\n setItemCount(1)\r\n }\r\n }\r\n }\r\n })\r\n ro.observe(document.body)\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n /** Get */\r\n const getNewArray = item => {\r\n const arr = Array.from({ length: item }, (_, index) => index + 1)\r\n return arr\r\n }\r\n const getCanShowBtnPreviewImages = () => {\r\n if (config?.showBtnPreview && data?.length >= itemCount) {\r\n return true\r\n }\r\n return false\r\n }\r\n const getConfigFromFirstSettingDetail = key => {\r\n if (fnList?.getDataFirstSettingByKey) {\r\n const detail = fnList?.getDataFirstSettingByKey(\r\n \"DefaultValues.websiteSetting.detail\"\r\n )\r\n return HUtils.get(detail, key)\r\n }\r\n return\r\n }\r\n /** */\r\n const onHanleShare = () => {\r\n MyModal.showFromMyUI(\r\n {\r\n type: \"sg_share\",\r\n data: allData,\r\n shareSettings: shareSettings,\r\n },\r\n {\r\n size: \"top\",\r\n showHeader: false,\r\n showHeaderClose: false,\r\n modalClassName: \"modal-share\",\r\n }\r\n )\r\n }\r\n /** Render */\r\n const renderLoading = () => {\r\n let emptyImgs: any = getNewArray(3)\r\n if (isMobileView) {\r\n emptyImgs = getNewArray(1)\r\n }\r\n return (\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n {emptyImgs &&\r\n emptyImgs?.length > 0 &&\r\n emptyImgs.map((v, i) => {\r\n return (\r\n
    \r\n \r\n
    \r\n )\r\n })}\r\n
    \r\n
    \r\n )\r\n }\r\n const renderActions = () => {\r\n const isShowLike = getConfigFromFirstSettingDetail(\"canShowLike\")\r\n return (\r\n \r\n
    \r\n \r\n
    \r\n {isShowLike && (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n )\r\n }\r\n const renderBack = () => {\r\n return (\r\n {\r\n if (window.history) {\r\n window.history?.back()\r\n } else {\r\n HLink.push(\"/\")\r\n }\r\n }}\r\n >\r\n \r\n \r\n )\r\n }\r\n const renderImage = (fancyboxName?: any) => {\r\n let otherImgs: any = []\r\n let firstImg = \"\"\r\n let emptyImgs: any = []\r\n let hiddenImgs: any = []\r\n let item = 3\r\n if (data) {\r\n if (data?.length > 0) {\r\n firstImg = data[0]\r\n }\r\n if (data?.length > 1 && item) {\r\n otherImgs = data?.slice(1, item + 1)\r\n }\r\n if (data?.length > 4) {\r\n hiddenImgs = data?.slice(4)\r\n }\r\n if (otherImgs && otherImgs?.length < item) {\r\n emptyImgs = getNewArray(config?.item - otherImgs?.length)\r\n }\r\n }\r\n return (\r\n \r\n
    \r\n \r\n \"car_image\"\r\n \r\n
    \r\n
    \r\n {otherImgs &&\r\n otherImgs?.length > 0 &&\r\n otherImgs?.map((v, i) => {\r\n return (\r\n 0 && \"hidden\"\r\n )}\r\n key={i}\r\n href={v}\r\n data-fancybox={fancyboxName}\r\n >\r\n \"car_mage\"\r\n \r\n )\r\n })}\r\n {imageSlides?.showEmptyImg &&\r\n emptyImgs &&\r\n emptyImgs?.length > 0 &&\r\n emptyImgs.map((v, i) => {\r\n return (\r\n
    \r\n )\r\n })}\r\n {hiddenImgs &&\r\n hiddenImgs?.length > 0 &&\r\n hiddenImgs.map((v, i) => {\r\n return (\r\n \r\n \"car_mage\"\r\n \r\n )\r\n })}\r\n
    \r\n {renderActions()}\r\n {renderBack()}\r\n
    \r\n )\r\n }\r\n if (data?.length > 0) {\r\n const fancyboxName = \"images\"\r\n const canShowPreview = getCanShowBtnPreviewImages()\r\n const { infinite = false } = fancyboxSettings || {}\r\n return (\r\n \r\n `,\r\n click: e => {\r\n onHanleShare()\r\n },\r\n },\r\n },\r\n display: {\r\n left: [],\r\n middle: [],\r\n right: [\"slideshow\", \"fullscreen\", \"thumbs\", \"share\", \"close\"],\r\n },\r\n },\r\n }}\r\n >\r\n {({ show }) => {\r\n return (\r\n <>\r\n {renderImage(fancyboxName)}\r\n {canShowPreview && (\r\n {\r\n show && show()\r\n }}\r\n >\r\n \r\n {imageSlides?.textBtnPreview}\r\n \r\n )}\r\n \r\n )\r\n }}\r\n \r\n \r\n )\r\n } else if (loading) {\r\n return {renderLoading()}\r\n }\r\n return <>\r\n}\r\nconst WrapLoading: any = styled.div`\r\n display: flex;\r\n & .first-image {\r\n width: calc(66.6667% - 8px);\r\n margin-right: 8px;\r\n height: 570px;\r\n & > span {\r\n display: block;\r\n height: 100%;\r\n & > span {\r\n height: 100%;\r\n }\r\n }\r\n }\r\n @media (max-width: 1010px) {\r\n & .first-image {\r\n width: 100%;\r\n margin-right: 0;\r\n height: 400px;\r\n }\r\n & .others-image {\r\n display: none;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .first-image {\r\n height: 300px;\r\n }\r\n }\r\n`\r\nconst WrapImage: any = styled.div`\r\n display: flex;\r\n & .first-image {\r\n width: calc(66.6667% - 8px);\r\n margin-right: 8px;\r\n img {\r\n height: 570px;\r\n width: 100%;\r\n object-fit: cover;\r\n border-radius: 15px 0 0 15px;\r\n }\r\n }\r\n & .others-image {\r\n width: 33.3333%;\r\n img {\r\n max-height: 185px;\r\n width: 100%;\r\n object-fit: cover;\r\n border-radius: 0 15px 15px 0;\r\n }\r\n & .one-other-image {\r\n margin-bottom: 8px;\r\n display: block;\r\n &.empty {\r\n background-color: #e3e1e1;\r\n width: 100%;\r\n height: 185px;\r\n border-radius: 0 15px 15px 0;\r\n }\r\n &.hidden {\r\n display: none;\r\n }\r\n }\r\n }\r\n & .wrap-actions-mobile {\r\n margin-top: 10px;\r\n position: absolute;\r\n display: flex;\r\n justify-content: space-between;\r\n right: 8px;\r\n &.back {\r\n left: 8px;\r\n width: 38px;\r\n height: 38px;\r\n justify-content: center;\r\n & .circle {\r\n margin-right: 0;\r\n }\r\n }\r\n &.justify-end {\r\n justify-content: flex-end;\r\n }\r\n & .one-button {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n }\r\n & .circle {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n border-radius: 50%;\r\n background-color: white;\r\n height: 38px;\r\n width: 38px;\r\n text-align: center;\r\n line-height: 39px;\r\n color: #888;\r\n font-size: 17px;\r\n border: 1px solid var(--color-border-dfdfdf);\r\n margin-right: 7px;\r\n cursor: pointer;\r\n }\r\n @media (max-width: 1010px) {\r\n & .first-image {\r\n width: 100%;\r\n margin-right: 0;\r\n img {\r\n max-height: 400px;\r\n width: 100%;\r\n border-radius: 15px;\r\n }\r\n }\r\n & .others-image {\r\n display: none;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n & .first-image {\r\n img {\r\n max-height: 300px;\r\n }\r\n }\r\n }\r\n`\r\nconst Wrap = styled.div`\r\n position: relative;\r\n .owl-carousel,\r\n .owl-carousel .owl-item {\r\n -webkit-tap-highlight-color: transparent;\r\n position: relative;\r\n }\r\n\r\n .owl-carousel {\r\n display: none;\r\n width: 100%;\r\n z-index: 1;\r\n }\r\n\r\n .owl-carousel .owl-stage {\r\n position: relative;\r\n -ms-touch-action: pan-Y;\r\n -moz-backface-visibility: hidden;\r\n }\r\n\r\n .owl-carousel .owl-stage:after {\r\n content: \".\";\r\n display: block;\r\n clear: both;\r\n visibility: hidden;\r\n line-height: 0;\r\n height: 0;\r\n }\r\n\r\n .owl-carousel .owl-stage-outer {\r\n position: relative;\r\n overflow: hidden;\r\n -webkit-transform: translate3d(0, 0, 0);\r\n }\r\n\r\n .owl-carousel .owl-item,\r\n .owl-carousel .owl-wrapper {\r\n -webkit-backface-visibility: hidden;\r\n -moz-backface-visibility: hidden;\r\n -ms-backface-visibility: hidden;\r\n -webkit-transform: translate3d(0, 0, 0);\r\n -moz-transform: translate3d(0, 0, 0);\r\n -ms-transform: translate3d(0, 0, 0);\r\n }\r\n\r\n .owl-carousel .owl-item {\r\n min-height: 1px;\r\n float: left;\r\n -webkit-backface-visibility: hidden;\r\n -webkit-touch-callout: none;\r\n }\r\n\r\n .owl-carousel .owl-item img {\r\n display: block;\r\n width: 100%;\r\n height: 400px;\r\n object-fit: cover;\r\n }\r\n\r\n .owl-carousel .owl-dots.disabled,\r\n .owl-carousel .owl-nav.disabled {\r\n display: none;\r\n }\r\n\r\n .no-js .owl-carousel,\r\n .owl-carousel.owl-loaded {\r\n display: block;\r\n }\r\n\r\n .owl-carousel .owl-dot,\r\n .owl-carousel .owl-nav .owl-next,\r\n .owl-carousel .owl-nav .owl-prev {\r\n cursor: pointer;\r\n cursor: hand;\r\n -webkit-user-select: none;\r\n -khtml-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n }\r\n\r\n .owl-carousel.owl-loading {\r\n opacity: 0;\r\n display: block;\r\n }\r\n\r\n .owl-carousel.owl-hidden {\r\n opacity: 0;\r\n }\r\n\r\n .owl-carousel.owl-refresh .owl-item {\r\n visibility: hidden;\r\n }\r\n\r\n .owl-carousel.owl-drag .owl-item {\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n }\r\n\r\n .owl-carousel.owl-grab {\r\n cursor: move;\r\n cursor: grab;\r\n }\r\n\r\n .owl-carousel.owl-rtl {\r\n direction: rtl;\r\n }\r\n\r\n .owl-carousel.owl-rtl .owl-item {\r\n float: right;\r\n }\r\n\r\n .owl-carousel .animated {\r\n animation-duration: 1s;\r\n animation-fill-mode: both;\r\n }\r\n\r\n .owl-carousel .owl-animated-in {\r\n z-index: 0;\r\n }\r\n\r\n .owl-carousel .owl-animated-out {\r\n z-index: 1;\r\n }\r\n\r\n .owl-carousel .fadeOut {\r\n animation-name: fadeOut;\r\n }\r\n\r\n @keyframes fadeOut {\r\n 0% {\r\n opacity: 1;\r\n }\r\n\r\n 100% {\r\n opacity: 0;\r\n }\r\n }\r\n\r\n .owl-height {\r\n transition: height 0.5s ease-in-out;\r\n }\r\n\r\n .owl-carousel .owl-item .owl-lazy {\r\n opacity: 0;\r\n transition: opacity 0.4s ease;\r\n }\r\n\r\n .owl-carousel .owl-item img.owl-lazy {\r\n transform-style: preserve-3d;\r\n }\r\n\r\n .owl-carousel .owl-video-wrapper {\r\n position: relative;\r\n height: 100%;\r\n background: #000;\r\n }\r\n\r\n .owl-carousel .owl-video-play-icon {\r\n position: absolute;\r\n height: 80px;\r\n width: 80px;\r\n left: 50%;\r\n top: 50%;\r\n margin-left: -40px;\r\n margin-top: -40px;\r\n background: url(owl.video.play.png) no-repeat;\r\n cursor: pointer;\r\n z-index: 1;\r\n -webkit-backface-visibility: hidden;\r\n transition: transform 0.1s ease;\r\n }\r\n\r\n .owl-carousel .owl-video-play-icon:hover {\r\n -ms-transform: scale(1.3, 1.3);\r\n transform: scale(1.3, 1.3);\r\n }\r\n\r\n .owl-carousel .owl-video-playing .owl-video-play-icon,\r\n .owl-carousel .owl-video-playing .owl-video-tn {\r\n display: none;\r\n }\r\n\r\n .owl-carousel .owl-video-tn {\r\n opacity: 0;\r\n height: 100%;\r\n background-position: center center;\r\n background-repeat: no-repeat;\r\n background-size: contain;\r\n transition: opacity 0.4s ease;\r\n }\r\n\r\n .owl-carousel .owl-video-frame {\r\n position: relative;\r\n z-index: 1;\r\n height: 100%;\r\n width: 100%;\r\n }\r\n & .show-images,\r\n & .show-images:hover,\r\n & .show-images:focus,\r\n & .show-images:active {\r\n background-color: var(--color-text-fff);\r\n border: 1px solid var(--color-border-dfdfdf);\r\n color: var(--color-text-000);\r\n font-size: 14px;\r\n font-weight: 500;\r\n display: flex;\r\n align-items: center;\r\n position: absolute;\r\n bottom: 20px;\r\n right: 20px;\r\n z-index: 1;\r\n i {\r\n margin-right: 5px;\r\n font-size: 16px;\r\n display: flex;\r\n width: 16px;\r\n height: 16px;\r\n align-items: center;\r\n justify-content: center;\r\n color: #6c6c6c;\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n .owl-carousel .owl-item img {\r\n height: 300px;\r\n }\r\n }\r\n`\r\nconst WrapShare = styled.div`\r\n border-radius: 3px;\r\n & .fancybox-share_button {\r\n display: inline-block;\r\n text-decoration: none;\r\n margin: 0 10px 10px 0;\r\n padding: 10px 20px;\r\n border: 0;\r\n border-radius: 3px;\r\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.16);\r\n background: #fff;\r\n white-space: nowrap;\r\n font-size: 16px;\r\n line-height: 23px;\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n min-width: 140px;\r\n color: #707070;\r\n transition: all 0.2s;\r\n & svg {\r\n margin-right: 5px;\r\n width: 20px;\r\n height: 20px;\r\n vertical-align: text-bottom;\r\n }\r\n }\r\n & input {\r\n box-sizing: border-box;\r\n width: 100%;\r\n margin: 5px 0 0;\r\n padding: 10px 15px;\r\n border: 1px solid #d7d7d7;\r\n border-radius: 3px;\r\n background: #ebebeb;\r\n color: #5d5b5b;\r\n font-size: 14px;\r\n outline: none;\r\n }\r\n`\r\nexport default MyUICarImageSlide\r\n","import { HLink, HUtils, MyControl, MyUI } from \"@macashipo/mlib\"\r\nimport { MyModal } from \"src/core/components\"\r\nimport { historyFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\nimport { isNotEmpty } from \"src/core/helpers/utils\"\r\nimport classNames from \"classnames\"\r\nimport { useForceUpdate } from \"src/modules/app_sigo/hooks/useForceUpdate\"\r\nimport AddressDirection from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/AddressDirection\"\r\nimport RentalDocuments from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/RentalDocuments\"\r\n\r\nconst UITypes = {\r\n documents: (data, config, { fnList }) => {\r\n const { icon, title, description, fieldData } = config || {}\r\n const handleOpenModal = () => {\r\n MyModal.showFromComponent(, {\r\n size: \"lg\",\r\n modalClassName:\r\n \"default modal-filter modal-understood-footer modal-scrollable-inside\",\r\n onScrollContent: true,\r\n title: \"Thủ tục nhận xe\",\r\n modalScrollInside: true,\r\n showFooterClose: true,\r\n titleBtnClose: \"Đã hiểu\",\r\n showFooter: true,\r\n onClickClose: () => {\r\n MyModal.hideModalScrollContent(\"component\")\r\n },\r\n })\r\n }\r\n return (\r\n \r\n {icon && }\r\n
    \r\n
    {title}
    \r\n
    {description}
    \r\n
    \r\n \r\n )\r\n },\r\n address_direction: (data, config, { fnList, buttonCode }) => {\r\n const { icon, title, fieldData, statusNotPaidYet } = config || {}\r\n const getIsPaid = () => {\r\n const statusCode = data?.[historyFields.fOrderStatusCode]\r\n let notPaidYet = false\r\n if (statusCode && statusNotPaidYet && statusNotPaidYet?.length > 0) {\r\n if (statusNotPaidYet.findIndex(v => v === statusCode) > -1) {\r\n notPaidYet = true\r\n }\r\n }\r\n return notPaidYet\r\n }\r\n const getCanShowDirectionButton = () => {\r\n let notPaidYet = getIsPaid()\r\n if (data?.[historyFields.fIsUserTakeSelected] && notPaidYet) {\r\n return false\r\n }\r\n return true\r\n }\r\n const getDescription = () => {\r\n let notPaidYet = getIsPaid()\r\n let des = \"\"\r\n if (data?.[historyFields.fIsUserTakeSelected] && notPaidYet) {\r\n des = \"Địa điểm chính xác sẽ hiển thị khi hoàn tất đặt cọc\"\r\n } else {\r\n des = data?.[historyFields.fDeliveryAddress]\r\n }\r\n return des\r\n }\r\n const handleOpenDirection = () => {\r\n MyModal.showFromComponent(\r\n ,\r\n {\r\n size: \"lg\",\r\n modalClassName: \"default modal-filter modal-scrollable-inside\",\r\n onScrollContent: true,\r\n title: \"Hướng dẫn chỉ đường\",\r\n modalScrollInside: true,\r\n }\r\n )\r\n }\r\n return (\r\n \r\n {icon && }\r\n
    \r\n
    {title}
    \r\n
    {getDescription()}
    \r\n
    \r\n \r\n )\r\n },\r\n popup_html: (data, config) => {\r\n const { icon, title, description, fieldData, code } = config || {}\r\n const listThingsToKnow = data?.[fieldData] || []\r\n let _data: any = null\r\n if (listThingsToKnow?.length > 0 && code) {\r\n listThingsToKnow.every(v => {\r\n if (v?.Code === code) {\r\n _data = { ...v }\r\n return false\r\n }\r\n return true\r\n })\r\n }\r\n const fullDescription = _data?.Content || \"\"\r\n const onOpenModal = () => {\r\n MyModal.showFromComponent(\r\n ,\r\n {\r\n title: _data?.Title,\r\n modalClassName:\r\n \"default modal-filter modal-understood-footer modal-scrollable-inside\",\r\n onScrollContent: true,\r\n titleBtnClose: \"Đã hiểu\",\r\n modalScrollInside: true,\r\n showFooter: true,\r\n showFooterClose: true,\r\n onClickClose: () => {\r\n MyModal.hideModalScrollContent(\"component\")\r\n },\r\n }\r\n )\r\n }\r\n if (_data) {\r\n return (\r\n \r\n {icon && }\r\n
    \r\n
    {title}
    \r\n
    {description}
    \r\n
    \r\n \r\n )\r\n }\r\n return <>\r\n },\r\n link: (data, config) => {\r\n const { icon, title, description, fieldData, moreStyleIcon } = config || {}\r\n const link = data?.[fieldData]\r\n const onOpenLink = () => {\r\n if (link) {\r\n window.document.body.classList.remove(\"modal-custom-style\")\r\n const navBar = document.getElementById(\"sg-navbar-mobile\")\r\n if (navBar) {\r\n navBar.classList.remove(\"hide\")\r\n }\r\n const html: any = document.getElementsByTagName(\"html\")\r\n if (html?.[0]) {\r\n html[0].style.overflowY = \"scroll\"\r\n }\r\n HLink.openUrl(`/${link}`, \"_self\")\r\n }\r\n }\r\n return (\r\n \r\n {icon && }\r\n
    \r\n
    {title}
    \r\n
    {description}
    \r\n
    \r\n \r\n )\r\n },\r\n}\r\nconst GeneralInfo = props => {\r\n const { data, config, fnList, buttonCode, statusCodeList, statusNotPaidYet } =\r\n props\r\n const statusCode = data?.[historyFields.fOrderStatusCode]\r\n const [keyUI, forceUpdate] = useForceUpdate()\r\n\r\n /** get */\r\n const getPartsConfig = () => {\r\n return [\r\n {\r\n type: \"address_direction\",\r\n canShow: true,\r\n classWrap: \"\",\r\n fieldData: historyFields.fDeliveryAddress,\r\n title: \"Hướng dẫn địa chỉ nhận xe\",\r\n icon: \"flaticon-pin\",\r\n statusNotPaidYet: statusNotPaidYet,\r\n },\r\n {\r\n type: \"documents\",\r\n canShow: true,\r\n classWrap: \"\",\r\n title: \"Thủ tục nhận xe\",\r\n description: \"Giấy tờ thuê xe và tài sản thế chấp\",\r\n icon: \"flaticon-driving-license\",\r\n },\r\n {\r\n type: \"popup_html\",\r\n canShow: true,\r\n classWrap: \"\",\r\n title: \"Những điều cần biết\",\r\n description: \"Quy định chung về sử dụng xe & hủy chuyến\",\r\n icon: \"flaticon-resume\",\r\n code: \"Things_To_Know_Rent_Experience\",\r\n fieldData: historyFields.fThingsToKnow,\r\n },\r\n {\r\n type: \"link\",\r\n canShow: true,\r\n classWrap: \"\",\r\n title: \"Thông tin xe thuê\",\r\n description: `${data?.[historyFields.fName]} - ${\r\n data?.[historyFields.fAddress]\r\n }`,\r\n fieldData: historyFields.fSlug,\r\n icon: \"flaticon-car-3\",\r\n moreStyleIcon: {\r\n fontSize: 40,\r\n width: 30,\r\n },\r\n },\r\n ]\r\n }\r\n /**other */\r\n\r\n /** render */\r\n const renderRating = () => {\r\n const rating = data?.[historyFields.fMyRating]\r\n let btnConfig = fnList?.getButtonConfigByCode(buttonCode?.Review)\r\n if (btnConfig) {\r\n const canReview = fnList?.getCanShowByBtnList(buttonCode?.Review)\r\n btnConfig = {\r\n ...btnConfig,\r\n Name: \"Đánh giá của bạn\",\r\n Code: \"NewReview\",\r\n canReview: canReview,\r\n defaultRating: rating,\r\n }\r\n }\r\n const buttonList = [{ ...btnConfig }]\r\n const moreConfigActions =\r\n fnList?.getConfigFromFirstSettingByKey(\"moreConfigActions\") || {}\r\n // only when status = DONE\r\n if (statusCode === statusCodeList?.DONE) {\r\n return (\r\n {\r\n fnList?.fnReloadList &&\r\n fnList?.fnReloadList({\r\n cbSuccess: () => {\r\n forceUpdate()\r\n },\r\n })\r\n },\r\n }}\r\n buttonList={buttonList}\r\n key={keyUI}\r\n moreConfig={{\r\n ...moreConfigActions,\r\n Review: {\r\n ...moreConfigActions?.[\"Review\"],\r\n review: {\r\n reviewContent: {\r\n title: \"Viết đánh giá công khai\",\r\n description:\r\n \"Chúng tôi sẽ hiển thị phần đánh giá này cho các khách thuê khác, và sau khi kết thúc giai đoạn đánh giá, chúng tôi sẽ đăng trên trang chủ của chủ xe [AnotherUserInfo.Name]\",\r\n },\r\n reviewRating: {\r\n title: \"Về tổng thể, chuyến đi của bạn thế nào?\",\r\n avatarField: `${historyFields.fAnotherUserInfo}.${historyFields.fAnotherUserAvatarUrl}`,\r\n description:\r\n \"Hãy cho chúng tôi một đánh giá chung nhất về toàn bộ trải nghiệm chuyến đi của bạn từ xe của chủ xe này\",\r\n },\r\n },\r\n },\r\n }}\r\n />\r\n )\r\n }\r\n return <>\r\n }\r\n const renderRetalDate = () => {\r\n const timeText = data?.[historyFields.fHeaderInfo] || {}\r\n const _slideConfig =\r\n fnList?.getConfigFromFirstSettingByKey(\"configTripCarImageSlide\") || {}\r\n const dfImage = config?.defaultImage\r\n let detailUrl = \"\"\r\n const imgList = data?.[historyFields.fRentalServiceItemImageUrls]\r\n const fromDate = data?.[historyFields.fFromDate_Format_1]\r\n const toDate = data?.[historyFields.fToDate_Format_1]\r\n return (\r\n \r\n {/* {timeText?.Title && (\r\n
    {timeText?.Title}
    \r\n )} */}\r\n {renderRating()}\r\n \r\n
    \r\n
    \r\n
    Nhận xe
    \r\n
    {fromDate}
    \r\n
    \r\n
    \r\n
    Trả xe
    \r\n
    {toDate}
    \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n const renderInformationAndGuide = () => {\r\n const parts = getPartsConfig()\r\n return (\r\n \r\n {parts &&\r\n parts?.length > 0 &&\r\n parts.map((v, i) => {\r\n if (!isNotEmpty(v?.canShow) || v?.canShow) {\r\n return (\r\n \r\n {UITypes?.[v.type]\r\n ? UITypes[v.type](data, v, {\r\n fnList: {\r\n ...fnList,\r\n },\r\n buttonCode: buttonCode,\r\n })\r\n : null}\r\n \r\n )\r\n }\r\n return <>\r\n })}\r\n \r\n )\r\n }\r\n return (\r\n \r\n {renderRetalDate()}\r\n {renderInformationAndGuide()}\r\n \r\n )\r\n}\r\nconst Wrap = styled.div``\r\nconst WrapRentalDate = styled.div`\r\n & .react-rater {\r\n & .fa-star {\r\n font-size: 22px;\r\n width: 25px;\r\n color: #ccc;\r\n text-align: center;\r\n &.active,\r\n &.hover {\r\n color: var(--mau1);\r\n }\r\n }\r\n }\r\n & .img {\r\n width: 100%;\r\n object-fit: cover;\r\n max-height: 378px;\r\n border-radius: 15px;\r\n border: 1px solid #dfdfdf;\r\n }\r\n & .wrap-detail-slide {\r\n img {\r\n width: 100%;\r\n object-fit: cover;\r\n max-height: 378px;\r\n border-radius: 15px;\r\n border: 1px solid #dfdfdf;\r\n }\r\n }\r\n & .rental-date {\r\n justify-content: space-between;\r\n & .label {\r\n text-transform: uppercase;\r\n font-weight: 600;\r\n line-height: 26px;\r\n padding-bottom: 8px;\r\n }\r\n & .to,\r\n & .from {\r\n width: 50%;\r\n line-height: 26px;\r\n }\r\n & .from {\r\n border-right: 1px solid #edecec;\r\n }\r\n & .to {\r\n text-align: right;\r\n }\r\n }\r\n & .wrap-rating {\r\n margin-top: -10px;\r\n margin-bottom: 25px;\r\n & .tt {\r\n line-height: 22px;\r\n color: #5f5d5d;\r\n }\r\n & .mc_input_rate {\r\n margin-top: 10px;\r\n }\r\n }\r\n`\r\nconst WrapParts = styled.div`\r\n & .label {\r\n font-weight: 600;\r\n color: var(--mauden);\r\n }\r\n & .des {\r\n color: #9f9d9d;\r\n }\r\n`\r\nconst WrapOnePart = styled.div`\r\n display: flex;\r\n align-items: flex-start;\r\n i {\r\n font-size: 30px;\r\n display: flex;\r\n height: 30px;\r\n margin-right: 15px;\r\n color: var(--mauden);\r\n }\r\n & .wrap-content {\r\n width: calc(100% - 50px);\r\n }\r\n`\r\nconst WrapPartWithModal = styled.div``\r\nexport default GeneralInfo\r\n","import styled from \"styled-components\"\r\nimport Odometer from \"react-odometerjs\"\r\nimport GoogleMapReact from \"google-map-react\"\r\nimport { useEffect, useState } from \"react\"\r\nimport RangeSlider from \"react-range-slider-input\"\r\nimport \"react-range-slider-input/dist/style.css\"\r\nimport { IoSearchOutline } from \"react-icons/io5\"\r\nimport { HCF, HUtils, MyIcon, MyUI } from \"@macashipo/mlib\"\r\nimport { Button, Dropdown, DropdownMenu, Input } from \"reactstrap\"\r\nimport { MdOutlineClose } from \"react-icons/md\"\r\nimport { MyModal } from \"src/core/components\"\r\n\r\ninterface AnyReactComponentProps {\r\n text?: string\r\n lat: number\r\n lng: number\r\n tooltip?: any\r\n $hover?: any\r\n moreConfig?: any\r\n}\r\n\r\nconst AnyReactComponent = ({\r\n text,\r\n lat,\r\n lng,\r\n tooltip,\r\n $hover,\r\n ...props\r\n}: AnyReactComponentProps) => {\r\n const { moreConfig = {} } = props\r\n const [isHover, setIsHover] = useState(false)\r\n\r\n return (\r\n {\r\n setIsHover(false)\r\n }}\r\n onMouseEnter={() => {\r\n setIsHover(true)\r\n }}\r\n className={`${$hover || isHover ? \"is-hover\" : \"\"}`}\r\n >\r\n
    {text}
    \r\n \r\n )\r\n}\r\nconst WrapMaker = styled.div`\r\n height: 28px;\r\n padding: 0px 8px;\r\n border-radius: 28px;\r\n background: #fff;\r\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.18), 0px 2px 4px 0px rgba(0, 0, 0, 0.18),\r\n 0px 0px 0px 1px rgba(0, 0, 0, 0.08);\r\n color: var(--color-text-000);\r\n display: flex;\r\n align-items: center;\r\n width: fit-content;\r\n justify-content: center;\r\n font-weight: 700;\r\n font-size: 12px;\r\n`\r\n\r\nconst UIOdometer = props => {\r\n const { defaultValue } = props\r\n const [value, setValue] = useState(defaultValue)\r\n\r\n useEffect(() => {\r\n if (defaultValue != value) {\r\n setValue(defaultValue)\r\n }\r\n }, [defaultValue])\r\n return \r\n}\r\n\r\nconst UIChangeDate = props => {\r\n const { defaultValue, fnChangeValue } = props\r\n const [curValue, setCurValue] = useState(defaultValue)\r\n\r\n const handleIncrease = () => {\r\n let newValue = curValue + 1\r\n if (newValue <= 30) {\r\n setCurValue(newValue)\r\n }\r\n }\r\n const handleDecrease = () => {\r\n let newValue = curValue - 1\r\n if (newValue >= 1) {\r\n setCurValue(newValue)\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n {\r\n let newValue = parseInt(e.target?.value)\r\n if (newValue >= 1 && newValue <= 30) {\r\n setCurValue(parseInt(e.target?.value))\r\n }\r\n }}\r\n />\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {\r\n fnChangeValue && fnChangeValue(curValue)\r\n MyModal.hideModalComponent()\r\n }}\r\n >\r\n Cập nhật\r\n \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nconst MUIIncomeAndMap = props => {\r\n const { data } = props\r\n const [amountIncome, setAmountIncome] = useState(1800000)\r\n const [slider, setSliderValue] = useState([1, 1] as any)\r\n\r\n const getCenter = data => {\r\n let totalLat = 0\r\n let totalLng = 0\r\n if (data?.length > 0) {\r\n const count = data?.length\r\n data.forEach(item => {\r\n totalLat += item?.lat\r\n totalLng += item?.lng\r\n })\r\n\r\n return {\r\n lat: totalLat / count,\r\n lng: totalLng / count,\r\n }\r\n }\r\n return\r\n }\r\n const handleChangeNumberOfDate = () => {\r\n // console.log(\"devtest - onThumbDragEnd\", amountIncome)\r\n // setAmountIncome(1800*slider[1])\r\n }\r\n const handleChangeDate = value => {\r\n setSliderValue([1, value])\r\n setAmountIncome(1800000 * value)\r\n }\r\n const onOpenModal = () => {\r\n MyModal.showFromComponent(\r\n ,\r\n {\r\n size: \"default\",\r\n title: \"Bao nhiêu ngày\",\r\n modalClassName: \"default modal-filter modal-change-number-of-date\",\r\n onScrollContent: true,\r\n }\r\n )\r\n }\r\n\r\n const renderChangeNumberOfDate = () => {\r\n return (\r\n \r\n
    \r\n
    \r\n {slider[1]} ngày\r\n \r\n {\" \"}\r\n với ước tính giá 1.800k vnđ mỗi ngày\r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n const renderIncome = () => {\r\n return (\r\n \r\n
    Cho thuê xe trên SIGO.
    \r\n
    Bạn có thể kiếm được
    \r\n
    \r\n \r\n
    VNĐ
    \r\n
    \r\n {renderChangeNumberOfDate()}\r\n {\r\n setSliderValue(value)\r\n setAmountIncome(1800000 * value[1])\r\n }}\r\n onThumbDragEnd={() => {\r\n // Xử lý gọi api khi user kết thúc việc kéo slider thay đổi giá trị\r\n handleChangeNumberOfDate()\r\n }}\r\n />\r\n \r\n
    \r\n \r\n
    \r\n
    Thành phố Hồ Chí Minh
    \r\n
    Xe 4 chỗ - Sedan
    \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n const renderMap = () => {\r\n const points = [\r\n {\r\n lat: 10.809375,\r\n lng: 106.678428,\r\n price: \"116.000đ\",\r\n },\r\n {\r\n lat: 10.814152,\r\n lng: 106.678554,\r\n price: \"216.000đ\",\r\n },\r\n {\r\n lat: 10.811707,\r\n lng: 106.678554,\r\n price: \"1.516.000đ\",\r\n },\r\n {\r\n lat: 10.809262,\r\n lng: 106.678597,\r\n price: \"236.000đ\",\r\n },\r\n ]\r\n const center = getCenter(points)\r\n const defaultProps = {\r\n center: center,\r\n zoom: 17,\r\n }\r\n if (points?.length) {\r\n return (\r\n \r\n
    \r\n \r\n {points?.map((v, i) => {\r\n return (\r\n \r\n )\r\n })}\r\n \r\n
    \r\n
    \r\n )\r\n }\r\n return <>\r\n }\r\n return (\r\n \r\n {renderIncome()}\r\n {renderMap()}\r\n \r\n )\r\n}\r\nconst Wrap = styled.div`\r\n align-items: center;\r\n .odometer.odometer-auto-theme,\r\n .odometer.odometer-theme-default {\r\n display: inline-block;\r\n vertical-align: middle;\r\n *vertical-align: auto;\r\n *zoom: 1;\r\n *display: inline;\r\n position: relative;\r\n }\r\n .odometer.odometer-auto-theme .odometer-digit,\r\n .odometer.odometer-theme-default .odometer-digit {\r\n display: inline-block;\r\n vertical-align: middle;\r\n *vertical-align: auto;\r\n *zoom: 1;\r\n *display: inline;\r\n position: relative;\r\n }\r\n .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer,\r\n .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer {\r\n display: inline-block;\r\n vertical-align: middle;\r\n *vertical-align: auto;\r\n *zoom: 1;\r\n *display: inline;\r\n visibility: hidden;\r\n }\r\n .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner,\r\n .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner {\r\n text-align: left;\r\n display: block;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n overflow: hidden;\r\n }\r\n .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon,\r\n .odometer.odometer-theme-default .odometer-digit .odometer-ribbon {\r\n display: block;\r\n }\r\n .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner,\r\n .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner {\r\n display: block;\r\n -webkit-backface-visibility: hidden;\r\n }\r\n .odometer.odometer-auto-theme .odometer-digit .odometer-value,\r\n .odometer.odometer-theme-default .odometer-digit .odometer-value {\r\n display: block;\r\n -webkit-transform: translateZ(0);\r\n }\r\n .odometer.odometer-auto-theme\r\n .odometer-digit\r\n .odometer-value.odometer-last-value,\r\n .odometer.odometer-theme-default\r\n .odometer-digit\r\n .odometer-value.odometer-last-value {\r\n position: absolute;\r\n }\r\n .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner,\r\n .odometer.odometer-theme-default.odometer-animating-up\r\n .odometer-ribbon-inner {\r\n -webkit-transition: -webkit-transform 2s;\r\n -moz-transition: -moz-transform 2s;\r\n -ms-transition: -ms-transform 2s;\r\n -o-transition: -o-transform 2s;\r\n transition: transform 2s;\r\n }\r\n .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating\r\n .odometer-ribbon-inner,\r\n .odometer.odometer-theme-default.odometer-animating-up.odometer-animating\r\n .odometer-ribbon-inner {\r\n -webkit-transform: translateY(-100%);\r\n -moz-transform: translateY(-100%);\r\n -ms-transform: translateY(-100%);\r\n -o-transform: translateY(-100%);\r\n transform: translateY(-100%);\r\n }\r\n .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner,\r\n .odometer.odometer-theme-default.odometer-animating-down\r\n .odometer-ribbon-inner {\r\n -webkit-transform: translateY(-100%);\r\n -moz-transform: translateY(-100%);\r\n -ms-transform: translateY(-100%);\r\n -o-transform: translateY(-100%);\r\n transform: translateY(-100%);\r\n }\r\n .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating\r\n .odometer-ribbon-inner,\r\n .odometer.odometer-theme-default.odometer-animating-down.odometer-animating\r\n .odometer-ribbon-inner {\r\n -webkit-transition: -webkit-transform 2s;\r\n -moz-transition: -moz-transform 2s;\r\n -ms-transition: -ms-transform 2s;\r\n -o-transition: -o-transform 2s;\r\n transition: transform 2s;\r\n -webkit-transform: translateY(0);\r\n -moz-transform: translateY(0);\r\n -ms-transform: translateY(0);\r\n -o-transform: translateY(0);\r\n transform: translateY(0);\r\n }\r\n\r\n .odometer.odometer-auto-theme,\r\n .odometer.odometer-theme-default {\r\n font-family: \"Helvetica Neue\", sans-serif;\r\n line-height: 1.1em;\r\n }\r\n .odometer.odometer-auto-theme .odometer-value,\r\n .odometer.odometer-theme-default .odometer-value {\r\n text-align: center;\r\n }\r\n @media (max-width: 1099px) {\r\n flex-direction: column;\r\n justify-content: center;\r\n }\r\n`\r\nconst WrapIncome = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n width: 50%;\r\n & .title {\r\n font-size: 40px;\r\n font-weight: 700;\r\n color: var(--color-text-info);\r\n text-align: center;\r\n margin-bottom: 0;\r\n line-height: 55px;\r\n }\r\n & .sub-title {\r\n color: var(--color-text-000);\r\n font-weight: 600;\r\n font-size: 40px;\r\n line-height: 55px;\r\n text-align: center;\r\n }\r\n & .wrap-estimated-income {\r\n margin-top: 2rem;\r\n }\r\n & .wrap-estimated-income,\r\n & .odometer {\r\n font-size: 50px;\r\n color: var(--color-text-000);\r\n font-weight: 700;\r\n }\r\n & .range-slider {\r\n margin-top: 2rem;\r\n max-width: 450px;\r\n height: 4px;\r\n border-radius: 2px;\r\n }\r\n & .range-slider__range {\r\n border-radius: 6px;\r\n }\r\n & .range-slider .range-slider__thumb {\r\n width: 30px;\r\n height: 30px;\r\n border: 1px solid #d0cccc;\r\n background-color: #fff;\r\n box-shadow: 0px 4px 15px 0px #00000026;\r\n &:focus {\r\n border: 2px solid #000000;\r\n }\r\n }\r\n & .range-slider__thumb[data-lower] {\r\n width: 0;\r\n box-shadow: none;\r\n border: none;\r\n }\r\n & .range-slider .range-slider__range {\r\n background: #000;\r\n height: 4px;\r\n pointer-events: none;\r\n }\r\n & .wrap-search {\r\n margin-top: 1.5rem;\r\n display: flex;\r\n padding: 0.75rem 1.5rem;\r\n border: 1px solid #c5c5c5;\r\n border-radius: 40px;\r\n align-items: center;\r\n width: 350px;\r\n & svg {\r\n font-size: 32px;\r\n color: var(--mau1);\r\n }\r\n & .wrap-text {\r\n color: var(--color-text-000);\r\n padding-left: 0.75rem;\r\n & .w-600 {\r\n font-weight: 600;\r\n }\r\n }\r\n }\r\n @media (max-width: 1099px) {\r\n width: 100%;\r\n }\r\n @media (max-width: 767px) {\r\n & .title {\r\n font-size: 32px;\r\n line-height: 40px;\r\n }\r\n & .sub-title {\r\n font-size: 28px;\r\n line-height: 36px;\r\n text-align: center;\r\n }\r\n & .wrap-estimated-income {\r\n margin-top: 1.5rem;\r\n }\r\n & .wrap-estimated-income,\r\n & .odometer {\r\n font-size: 34px;\r\n }\r\n & .range-slider {\r\n margin-top: 1.5rem;\r\n }\r\n & .wrap-search {\r\n margin-top: 1rem;\r\n }\r\n & .btn.btn-underline-black {\r\n white-space: unset;\r\n }\r\n }\r\n`\r\nconst WrapChangeDate = styled.div`\r\n & .wrap-estimated {\r\n margin-top: 0.75rem;\r\n text-align: center;\r\n & span {\r\n font-size: 20px;\r\n color: rgb(101, 101, 101);\r\n }\r\n & span:not(.remove-user-select) {\r\n cursor: pointer;\r\n font-weight: 700;\r\n color: var(--color-text-000);\r\n text-decoration: underline;\r\n }\r\n & .remove-user-select {\r\n cursor: context-menu;\r\n user-select: none;\r\n pointer-event: none;\r\n }\r\n }\r\n & .wrap-dropdown-content {\r\n padding: 20px;\r\n background-color: var(--color-text-fff);\r\n box-shadow: 0 8px 28px rgba(0, 0, 0, 0.28);\r\n width: 400px;\r\n border-radius: 20px;\r\n display: unset;\r\n opacity: 0;\r\n visibility: hidden;\r\n & .header {\r\n position: relative;\r\n text-align: center;\r\n & .btn-hide-dropdown {\r\n padding: 0;\r\n border: none;\r\n box-shadown: none;\r\n color: var(--color-text-222222);\r\n font-size: 16px;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n }\r\n & .title {\r\n font-size: 17px;\r\n font-weight: 600;\r\n color: var(--color-text-000);\r\n }\r\n }\r\n & > hr {\r\n margin: 20px -24px 0 !important;\r\n border-top: 1px solid #ddd;\r\n }\r\n & .content {\r\n padding: 24px 0 0;\r\n & .one-price-detail {\r\n font-size: 14px;\r\n padding-bottom: 10px;\r\n color: var(--color-text-111);\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n & .one-price-detail.amount {\r\n font-weight: 600;\r\n font-size: 15px;\r\n padding-bottom: 0px;\r\n }\r\n & > hr {\r\n margin-top: 10px !important;\r\n }\r\n }\r\n & .wrap-btn {\r\n justify-content: center;\r\n align-items: center;\r\n }\r\n & .btn-circle {\r\n padding: 5px;\r\n border: 1px solid #6a6a6a;\r\n border-radius: 50%;\r\n width: 32px;\r\n height: 32px;\r\n text-align: center !important;\r\n display: inline-flex !important;\r\n align-items: center !important;\r\n justify-content: center !important;\r\n cursor: pointer;\r\n & svg {\r\n width: 12px;\r\n height: 12px;\r\n display: block;\r\n fill: #6a6a6a;\r\n }\r\n &:hover {\r\n border-color: var(--color-text-000);\r\n & svg {\r\n fill: var(--color-text-000);\r\n }\r\n }\r\n }\r\n input {\r\n width: 140px;\r\n font-size: 32px;\r\n color: var(--color-text-000);\r\n height: 48px;\r\n text-align: center;\r\n font-weight: 600;\r\n margin: 0 1.5rem;\r\n }\r\n & .footer {\r\n padding-top: 1.25rem;\r\n & .btn {\r\n width: 100%;\r\n }\r\n }\r\n }\r\n & .wrap-dropdown-content.show {\r\n opacity: 1 !important;\r\n visibility: visible;\r\n pointer-events: unset !important;\r\n top: 25px !important;\r\n }\r\n & .title {\r\n line-height: unset;\r\n }\r\n input::-webkit-outer-spin-button,\r\n input::-webkit-inner-spin-button {\r\n -webkit-appearance: none;\r\n margin: 0;\r\n }\r\n\r\n /* Firefox */\r\n input[type=\"number\"] {\r\n -moz-appearance: textfield;\r\n }\r\n @media (max-width: 767px) {\r\n & .wrap-estimated {\r\n text-align: center;\r\n & span {\r\n font-size: 16px;\r\n }\r\n }\r\n }\r\n`\r\nconst WrapMap = styled.div`\r\n margin-left: 1rem;\r\n &.wrap-map {\r\n display: flex;\r\n border: 1px solid #d1d1d1;\r\n height: 500px;\r\n width: 50%;\r\n border-radius: 15px;\r\n justify-content: center;\r\n align-items: center;\r\n overflow: hidden;\r\n }\r\n & .cover-map {\r\n flex: 1;\r\n margin-right: -2px;\r\n margin-left: -2px;\r\n height: calc(100% + 4px);\r\n }\r\n @media (max-width: 1099px) {\r\n margin-left: 0;\r\n margin-top: 2rem;\r\n &.wrap-map {\r\n width: 100%;\r\n }\r\n }\r\n`\r\nexport default MUIIncomeAndMap\r\n","import React from \"react\"\r\nimport MyUIHelpers from \"src/core/components/MyUI/MyUIHelpers\"\r\n/** Login */\r\nimport MUILogin from \"src/modules/app_sigo/components/MyUI/Types/Login/Login\"\r\n/** Không import lazy */\r\nimport MyUIHomeRentalCar from \"src/modules/app_sigo/components/MyUI/Types/Home/HomeRentalCar\"\r\nimport MUIHelmet from \"src/modules/app_sigo/components/MyUI/Types/Helmet\"\r\nimport MUIButtonRefresh from \"src/modules/app_sigo/components/MyUI/Types/Category/ButtonRefresh\"\r\nimport MUIHeaderCategoryFullv2 from \"src/modules/app_sigo/components/MyUI/Types/HeaderCategoryFullv2\"\r\nimport MUIHeaderCategory from \"src/modules/app_sigo/components/MyUI/Types/HeaderCategory\"\r\nimport MUIButtonForm from \"src/modules/app_sigo/components/MyUI/Types/ButtonForm\"\r\nimport MyUIWLoadingSkeleton from \"src/modules/app_sigo/components/MyUI/Types/WLoadingSkeleton\"\r\nimport MUISlideCard from \"src/modules/app_sigo/components/MyUI/Types/SlideCard\"\r\nimport MUISlideCardV2 from \"src/modules/app_sigo/components/MyUI/Types/SlideCardV2\"\r\nimport MUIAvatar from \"src/modules/app_sigo/components/MyUI/Types/Avatar\"\r\nimport MUIBanner from \"src/modules/app_sigo/components/MyUI/Types/Banner\"\r\n// import MUIHeader from \"src/modules/app_sigo/components/MyUI/Types/Header\"\r\nimport MUIHeader from \"src/modules/app_sigo_responsive/components/MyUI/Types/Header\"\r\nimport MUIHomeSearchbar from \"src/modules/app_sigo_responsive/components/MyUI/Types/Home/Searchbar\"\r\nimport MyUIHeaderMobileV2 from \"src/modules/app_sigo/components/MyUI/Types/HeaderMobilev2\"\r\nimport MUIFancybox from \"src/modules/app_sigo/components/MyUI/Types/Fancybox\"\r\nimport MyUIContentOverlay from \"src/modules/app_sigo/components/MyUI/Types/WContentOverlay\"\r\nimport MyUITripDetail from \"src/modules/app_sigo/components/MyUI/Types/TripDetail\"\r\n/** Detail */\r\nimport MyUICarName from \"src/modules/app_sigo/components/MyUI/Types/Detail/CarName\"\r\nimport MyUICarImageSlide from \"src/modules/app_sigo_responsive/components/MyUI/Types/Detail/CarImageSlide\"\r\n/** Trip details */\r\nimport GeneralInfo from \"src/modules/app_sigo_responsive/components/MyUI/Types/TripDetail/GeneralInfo\"\r\nimport VehicleInfo from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/VehicleInfo\"\r\nimport PaymentInfo from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/PaymentInfo\"\r\nimport OwnerInfo from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/OwnerInfo\"\r\nimport SupportInfo from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/SupportInfo\"\r\nimport BlogSuggestion from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/BlogSuggestion\"\r\nimport InsuranceInfo from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/InsuranceInfo\"\r\nimport Action from \"src/modules/app_sigo/components/MyUI/Types/TripDetail/Action\"\r\n// Landing UI\r\nimport MyUISGEstimatedIncome from \"src/modules/app_sigo_responsive/components/MyUI/Types/SGEstimatedIncome\"\r\n/** */\r\nconst MyUIWLoadingOverlay = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/WLoadingOverlay\")\r\n)\r\nconst MyUISGButton = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/SGButton\")\r\n)\r\nconst MUIComingSoon = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/CommingSoon\")\r\n)\r\nconst MUIInsurrance = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Insurance\")\r\n)\r\nconst MUIWContent = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/WContent\")\r\n)\r\nconst MUIAutoLoadList = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/AutoLoadList\")\r\n)\r\nconst MUIAlertTemplate = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/AlertTemplate\")\r\n)\r\nconst MUIImageSlides = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/ImageSlides\")\r\n)\r\nconst MUISearchBoxWData = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/SearchBoxWData\")\r\n)\r\nconst MUIListCard = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/ListCard\")\r\n)\r\nconst MyUIPopover = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/TippyPopover\")\r\n)\r\nconst MyUIDownloadAppInfo = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/DownloadAppInfo\")\r\n)\r\nconst MyUIHomeCarSuggest = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Home/HomeCarSuggest\")\r\n)\r\nconst MUIFilterCategory = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/FilterCategory\")\r\n)\r\nconst MUIFilterSpecialAttribute = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/Category/FilterSpecialAttribute\"\r\n )\r\n)\r\nconst MUIProduct = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyUI/Types/Detail/Product\"\r\n )\r\n)\r\nconst MUIBookingInfo = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Detail/BookingInfo\")\r\n)\r\nconst MUIConfirmBooking = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Detail/ConfirmBooking\")\r\n)\r\nconst MUIHeaderDetail = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Detail/HeaderDetail\")\r\n)\r\nconst MUIVehicleMap = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Detail/VehicleMap\")\r\n)\r\nconst MUIVehicleDeliveryAdress = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/Detail/VehicleDeliveryAdress\"\r\n )\r\n)\r\nconst MyUIBookingConfirm = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyUI/Types/Detail/BookingConfirm\"\r\n )\r\n)\r\nconst MyUIMessageForOwner = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Detail/MessageForOwner\")\r\n)\r\nconst MyUIPriceDetails = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Detail/PriceDetails\")\r\n)\r\nconst MyUISelectSecurity = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Detail/SelectSecurity\")\r\n)\r\nconst MyUIBookingSuccess = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyUI/Types/Detail/BookingSuccess\"\r\n )\r\n)\r\n/** Order */\r\nconst MUIOrderAction = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Action\")\r\n)\r\nconst MUIOrderProgress = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Progress\")\r\n)\r\nconst MUIOrderInsurrance = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Insurrance\")\r\n)\r\nconst MUIOrderImages = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Images\")\r\n)\r\nconst MUIOrderPrices = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Prices\")\r\n)\r\nconst MUIOrderOthers = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Others\")\r\n)\r\nconst MUIOrderTrader = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Trader\")\r\n)\r\nconst MUIOrderHeader = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Header\")\r\n)\r\n/*OrderDetail */\r\nconst MUIOrderDetail = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetail\")\r\n)\r\nconst MUIOrderDetailGeneralInfo = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetailGeneralInfo\"\r\n )\r\n)\r\nconst MUIOrderDetailRenterInfo = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetailRenterInfo\"\r\n )\r\n)\r\nconst MUIOrderdetailBookingInfo = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetailBookingInfo\"\r\n )\r\n)\r\nconst MUIOrderDetailPaymentInfo = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetailPaymentInfo\"\r\n )\r\n)\r\nconst MUIOrderDetailInsuranceInfo = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetailInsuranceInfo\"\r\n )\r\n)\r\nconst MUIOrderDetailAction = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/OrderDetailAction\"\r\n )\r\n)\r\nconst MUIOrderDetailProfitInfo = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/MUIOrderDetailProfitInfo\"\r\n )\r\n)\r\nconst MyUIHeaderOrders = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/OrderDetail/HeaderOrders\"\r\n )\r\n)\r\n/** use admin v5 */\r\nconst MUIAdmintableTablListCard = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/AdmintableTablListCard\")\r\n)\r\n/** Popup trip detail */\r\nconst MyUICountdownTime = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/CountdownTime\")\r\n)\r\n/** User profile */\r\nconst MyUIUserAvatar = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/UserProfle/UserAvatar\")\r\n)\r\nconst MyUIUserMainInfo = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/UserProfle/UserMainInfo\")\r\n)\r\nconst MyUIReportUser = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/UserProfle/UserReport\")\r\n)\r\nconst MyUIUserReview = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/UserProfle/UserReview\")\r\n)\r\n/** Verify account */\r\nconst MyUIUploadType = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Verify/VerifyUploadType\")\r\n)\r\nconst MyUIVerifyFace = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Verify/VerifyFace\")\r\n)\r\nconst MyUIEnterOtp = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Login/EnterOtp\")\r\n)\r\nconst MyUIUserRegister = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Login/UserRegister\")\r\n)\r\nconst MyUIForgotPassword = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Login/ForgotPassword\")\r\n)\r\nconst MyUIEnterNewPassword = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Login/EnterNewPassword\")\r\n)\r\nconst MyUIFooter = React.lazy(\r\n () => import(\"src/modules/app_sigo_responsive/components/MyUI/Types/Footer\")\r\n)\r\n/** Help us */\r\nconst MyUIHelpusDirection = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Helpus/Direction\")\r\n)\r\nconst MyUIFAQs = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Helpus/FAQs\")\r\n)\r\n/** Html page */\r\nconst MyUITopic = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Topic\")\r\n)\r\nconst MyUIBlog = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Blog\")\r\n)\r\nconst MyUIOneNotification = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/AdminTableCard/OneNotification\"\r\n )\r\n)\r\n/** Payment */\r\nconst MyUIPaymentWallet = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Payment/PaymentWallet\")\r\n)\r\nconst MyUIBankAccount = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Payment/BankAccount\")\r\n)\r\nconst MyUIWithdrawPayment = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Payment/WithdrawPayment\")\r\n)\r\nconst MyUIAddBankAccount = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Payment/AddBankAccount\")\r\n)\r\nconst MyUITransactionHistories = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/Payment/TransactionHistories\"\r\n )\r\n)\r\nconst MyUIVerifyLoadingAnimation = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/VerifyLoadingAnimation\")\r\n)\r\n/** Admin table card type */\r\nconst MyUISavingCoin = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/AdminTableCard/SavingCoin\"\r\n )\r\n)\r\nconst MyUISelectAddress = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/SelectAddress\")\r\n)\r\nconst MyUIShare = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Share\")\r\n)\r\nconst MyUIOrderDetailOld = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/Detail_old\")\r\n)\r\nconst MyUICancelOrder = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/CancelOrder\")\r\n)\r\nconst MyUIReviewOrder = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Order/ReviewOrder\")\r\n)\r\nconst WrapModalCustomHeader = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/WModalCustomHeader\")\r\n)\r\n\r\n/** Responsive */\r\nconst NavbarDefault = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyUI/Types/NavbarDefault\"\r\n )\r\n)\r\nconst NavbarOrder = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo_responsive/components/MyUI/Types/NavbarOrder\")\r\n)\r\nconst AccountSettings = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyUI/Types/AccountSettings\"\r\n )\r\n)\r\n/* Home */\r\nconst MyUIHomeCarSuggestMobile = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyUI/Home/HomeCarSuggestMobile\"\r\n )\r\n)\r\n/* Category */\r\nconst MyUIHeaderFilter = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyUI/Category/HeaderFilter\"\r\n )\r\n)\r\n/* Detail */\r\nconst MyUIBookingSelectDate = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyUI/Types/Detail/BookingSelectDate\"\r\n )\r\n)\r\nconst MUINotAvailable = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/NotAvailable\")\r\n)\r\n/** Dynamic landing page */\r\nconst WrapLandingPage = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo_responsive/components/MyUI/Types/LandingPage\")\r\n)\r\nconst MyUILandingPageGrid = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/LandingPageGrid\")\r\n)\r\nconst MyUILandingPageCollapseGroup = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo/components/MyUI/Types/LandingPageCollapseGroup\"\r\n )\r\n)\r\nconst MyUIHtml = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Html\")\r\n)\r\nconst MyUIRowVideoStepsGuide = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/RowVideoStepsGuide\")\r\n)\r\nconst MyUISEOTitle = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/SEOTitle\")\r\n)\r\n\r\nconst MyUIHeaderBlogList = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyUI/Types/HeaderBlogList\"\r\n )\r\n)\r\nconst MyUISGTravelling = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyUI/Types/Travelling/SGTravelling\")\r\n)\r\nconst MyUISGTravellingFilter = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyUI/Types/Travelling/Filter\")\r\n)\r\nconst MyUISearchBlogList = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyUI/Types/SearchBlogList\"\r\n )\r\n)\r\nconst List = {\r\n /** Responsive */\r\n sg_nav_default: NavbarDefault,\r\n sg_nav_order: NavbarOrder,\r\n sg_account_settings: AccountSettings,\r\n /* Category */\r\n sg_header_filter: MyUIHeaderFilter,\r\n /* Detail */\r\n sg_booking_select_date: MyUIBookingSelectDate,\r\n /** */\r\n sg_header: MUIHeader,\r\n sg_footer: MyUIFooter,\r\n sg_banner: MUIBanner,\r\n sg_avatar: MUIAvatar,\r\n sg_insurance: MUIInsurrance,\r\n sg_comming_soon: MUIComingSoon,\r\n sg_not_available: MUINotAvailable,\r\n wcontent: MUIWContent,\r\n autoload_list: MUIAutoLoadList,\r\n button_form: MUIButtonForm,\r\n alert: MUIAlertTemplate,\r\n image_slides: MUIImageSlides,\r\n fancybox: MUIFancybox,\r\n search_box_withdata: MUISearchBoxWData,\r\n list_card: MUIListCard,\r\n slide_card: MUISlideCard,\r\n slide_card_v2: MUISlideCardV2,\r\n popover: MyUIPopover,\r\n helmet: MUIHelmet,\r\n sg_download_app_info: MyUIDownloadAppInfo,\r\n verify_loading_animation: MyUIVerifyLoadingAnimation,\r\n /** Home */\r\n sg_home_searchbar: MUIHomeSearchbar,\r\n sg_home_rental_car: MyUIHomeRentalCar,\r\n sg_home_car_suggest: MyUIHomeCarSuggest,\r\n sg_home_car_suggest_mobile: MyUIHomeCarSuggestMobile,\r\n /**/\r\n /** Category */\r\n sg_header_category: MUIHeaderCategory,\r\n sg_filter_category: MUIFilterCategory,\r\n sg_header_category_full_v2: MUIHeaderCategoryFullv2,\r\n sg_filter_special_attribute: MUIFilterSpecialAttribute,\r\n sg_button_refresh: MUIButtonRefresh,\r\n /**/\r\n /** Detail */\r\n sg_product: MUIProduct,\r\n sg_booking_info: MUIBookingInfo,\r\n sg_confirm_booking: MUIConfirmBooking,\r\n sg_header_detail: MUIHeaderDetail,\r\n sg_vehicle_map: MUIVehicleMap,\r\n sg_vehicle_delivery_adress: MUIVehicleDeliveryAdress,\r\n sg_car_name: MyUICarName,\r\n sg_car_img_slide: MyUICarImageSlide,\r\n sg_booking_confirm: MyUIBookingConfirm,\r\n sg_message_for_owner: MyUIMessageForOwner,\r\n sg_price_details: MyUIPriceDetails,\r\n sg_select_secutity: MyUISelectSecurity,\r\n sg_booking_success: MyUIBookingSuccess,\r\n /** Login */\r\n sg_login: MUILogin,\r\n sg_enter_otp: MyUIEnterOtp,\r\n sg_user_register: MyUIUserRegister,\r\n sg_forgot_pwd: MyUIForgotPassword,\r\n sg_enter_new_pwd: MyUIEnterNewPassword,\r\n /** History */\r\n sg_order_action: MUIOrderAction,\r\n sg_order_detail: MUIOrderDetail,\r\n sg_order_progress: MUIOrderProgress,\r\n sg_order_insurrance: MUIOrderInsurrance,\r\n sg_order_images: MUIOrderImages,\r\n sg_order_prices: MUIOrderPrices,\r\n sg_order_others: MUIOrderOthers,\r\n sg_order_trader: MUIOrderTrader,\r\n sg_order_header: MUIOrderHeader,\r\n /** use admin v5 */\r\n admintable_table_list_card: MUIAdmintableTablListCard,\r\n /** popup trip detail */\r\n countdown_time: MyUICountdownTime,\r\n /** User Profile */\r\n sg_user_avatar: MyUIUserAvatar,\r\n sg_user_main_info: MyUIUserMainInfo,\r\n sg_user_report_user: MyUIReportUser,\r\n sg_user_review: MyUIUserReview,\r\n /** Verify Account */\r\n sg_verify_face: MyUIVerifyFace,\r\n sg_verify_upload_types: MyUIUploadType,\r\n /** Help us */\r\n sg_helpus_direction: MyUIHelpusDirection,\r\n sg_faqs: MyUIFAQs,\r\n /** Html ui */\r\n sg_blog_content: MyUIBlog,\r\n sg_topic_content: MyUITopic,\r\n /** notification */\r\n sg_one_notification: MyUIOneNotification,\r\n /** payment */\r\n sg_payment_wallet: MyUIPaymentWallet,\r\n sg_bank_account: MyUIBankAccount,\r\n sg_withdraw_payment: MyUIWithdrawPayment,\r\n sg_add_bank_account: MyUIAddBankAccount,\r\n sg_transactions_histories: MyUITransactionHistories,\r\n /** OrderDetail */\r\n sg_orderdetail_general_info: MUIOrderDetailGeneralInfo,\r\n sg_orderdetail_renter_info: MUIOrderDetailRenterInfo,\r\n sg_orderdetail_booking_info: MUIOrderdetailBookingInfo,\r\n sg_orderdetail_payment_info: MUIOrderDetailPaymentInfo,\r\n sg_orderdetail_insurance_info: MUIOrderDetailInsuranceInfo,\r\n sg_orderdetail_action: MUIOrderDetailAction,\r\n sg_orderdetail_profit_info: MUIOrderDetailProfitInfo,\r\n sg_header_orders: MyUIHeaderOrders,\r\n /** */\r\n sg_saving_card: MyUISavingCoin,\r\n sg_loading_overlay: MyUIWLoadingOverlay,\r\n sg_button: MyUISGButton,\r\n sg_select_address: MyUISelectAddress,\r\n sg_loading_skeleton: MyUIWLoadingSkeleton,\r\n sg_header_mobile_v2: MyUIHeaderMobileV2,\r\n sg_share: MyUIShare,\r\n sg_content_overlay: MyUIContentOverlay,\r\n // backup Chuyến đi của tôi cũ\r\n sg_order_detail_old: MyUIOrderDetailOld,\r\n /** Trip details */\r\n sg_trip_detail: MyUITripDetail,\r\n tripdetail_general_info: GeneralInfo,\r\n tripdetail_vehicle_info: VehicleInfo,\r\n tripdetail_payment_info: PaymentInfo,\r\n tripdetail_owner_info: OwnerInfo,\r\n tripdetail_support_info: SupportInfo,\r\n tripdetail_blog_suggestion: BlogSuggestion,\r\n tripdetail_insurance_info: InsuranceInfo,\r\n tripdetail_action: Action,\r\n sg_cancel_order: MyUICancelOrder,\r\n sg_review_order: MyUIReviewOrder,\r\n /** */\r\n sg_wrap_modal_custom_header: WrapModalCustomHeader,\r\n sg_landing_page: WrapLandingPage,\r\n sg_landing_page_grid: MyUILandingPageGrid,\r\n sg_landing_page_collapse_group: MyUILandingPageCollapseGroup,\r\n sg_html: MyUIHtml,\r\n sg_row_video_steps_guide: MyUIRowVideoStepsGuide,\r\n sg_estimated_income: MyUISGEstimatedIncome,\r\n sg_seo_title: MyUISEOTitle,\r\n /**Blog List */\r\n sg_header_blog_list: MyUIHeaderBlogList,\r\n sg_travelling: MyUISGTravelling,\r\n sg_travelling_filter: MyUISGTravellingFilter,\r\n sg_mobile_search_blog_list: MyUISearchBlogList,\r\n}\r\nconst MyUIOne = {\r\n init() {\r\n MyUIHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\nexport default MyUIOne\r\n","import React from \"react\"\r\nimport MyPageHelpers from \"src/core/components/MyPage/MyPageHelpers\"\r\nconst PageHome = React.lazy(\r\n () => import(\"src/modules/app_sigo_responsive/components/MyPage/Types/Home\")\r\n)\r\nconst PageCategory = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo_responsive/components/MyPage/Types/Category\")\r\n)\r\nconst PageDetail = React.lazy(\r\n () => import(\"src/modules/app_sigo_responsive/components/MyPage/Types/Detail\")\r\n)\r\nconst PageHistory = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo_responsive/components/MyPage/Types/History\")\r\n)\r\nconst PageAdminListCard = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyPage/Types/AdminListCard\"\r\n )\r\n)\r\nconst PageUserProfile = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyPage/Types/UserProfile\"\r\n )\r\n)\r\nconst PageVerifyAccount = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyPage/Types/VerifyAccount\"\r\n )\r\n)\r\nconst PageMyService = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo_responsive/components/MyPage/Types/MyService\")\r\n)\r\nconst PageEditMyService = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyPage/Types/EditMyService\"\r\n )\r\n)\r\nconst PageAddService = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo_responsive/components/MyPage/Types/AddService\")\r\n)\r\nconst PageWSlug = React.lazy(\r\n () => import(\"src/modules/app_sigo_responsive/components/MyPage/Types/Slug\")\r\n)\r\nconst PageSaving = React.lazy(\r\n () => import(\"src/modules/app_sigo_responsive/components/MyPage/Types/Saving\")\r\n)\r\nconst PageHelpUs = React.lazy(\r\n () => import(\"src/modules/app_sigo_responsive/components/MyPage/Types/Helpus\")\r\n)\r\nconst PageNotification = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyPage/Types/Notification\"\r\n )\r\n)\r\nconst PagePayment = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo_responsive/components/MyPage/Types/Payment\")\r\n)\r\nconst Dev_Test = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo_responsive/components/MyPage/Types/Dev_Test\")\r\n)\r\nconst PageMyTrips = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo_responsive/components/MyPage/Types/MyTrips\")\r\n)\r\nconst PageMyTripsNow = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo_responsive/components/MyPage/Types/MyTripsNow\")\r\n)\r\nconst PageMyTripsHistoty = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyPage/Types/MyTripsHistory\"\r\n )\r\n)\r\nconst PageMyOrders = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo_responsive/components/MyPage/Types/MyOrders\")\r\n)\r\nconst PageAccount = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo_responsive/components/MyPage/Types/Account\")\r\n)\r\nconst PageMyActivitySchedule = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyPage/Types/MyActivitySchedule\"\r\n )\r\n)\r\nconst PageNotFound = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyPage/Types/NotFound\")\r\n)\r\nconst PageSGTravelling = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyPage/Types/SGTravelling\"\r\n )\r\n)\r\nconst List = {\r\n home: PageHome,\r\n category: PageCategory,\r\n detail: PageDetail,\r\n history: PageHistory,\r\n admin_list_card: PageAdminListCard,\r\n sg_user_profile: PageUserProfile,\r\n sg_verify_account: PageVerifyAccount,\r\n sg_my_service: PageMyService,\r\n sg_edit_my_service: PageEditMyService,\r\n sg_add_service: PageAddService,\r\n slug: PageWSlug,\r\n sg_saving: PageSaving,\r\n helpus: PageHelpUs,\r\n sg_notification: PageNotification,\r\n sg_payment: PagePayment,\r\n sg_dev_test: Dev_Test,\r\n mytrips: PageMyTrips,\r\n my_trips_now: PageMyTripsNow,\r\n my_trips_history: PageMyTripsHistoty,\r\n my_orders: PageMyOrders,\r\n sg_account: PageAccount,\r\n my_activity_schedule: PageMyActivitySchedule,\r\n sg_not_found: PageNotFound,\r\n sg_travelling: PageSGTravelling,\r\n}\r\nconst MyPageOne = {\r\n init() {\r\n MyPageHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\n\r\nexport default MyPageOne\r\n","import { HLink, HUtils } from \"@macashipo/mlib\"\r\nimport classNames from \"classnames\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst HomeCategoryFields = {\r\n fCarCount: \"carCount\",\r\n fDate: \"date\",\r\n}\r\nconst HomeCategoryCard = props => {\r\n const { data, config } = props\r\n const _url = HUtils.get(data, `${homeSlidesFields.fOneSlideMoreInfo}.url`)\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n const carCount = HUtils.get(data, `Data.${HomeCategoryFields.fCarCount}`)\r\n const date = HUtils.get(data, `Data.${HomeCategoryFields.fDate}`)\r\n const config4EachCard = HUtils.get(config, \"config4EachCard\", {})\r\n const onHandleBtn = e => {\r\n e?.preventDefault()\r\n if (_url) {\r\n HLink.openUrl(_url, \"_self\")\r\n }\r\n }\r\n return (\r\n \r\n {title\r\n
    \r\n

    {title}

    \r\n {carCount &&
    {carCount}
    }\r\n {date &&
    {date}
    }\r\n
    \r\n
    \r\n )\r\n}\r\nconst Wrap = styled.a`\r\n background-color: var(--color-text-fff);\r\n border-radius: 15px;\r\n &.cursor-pointer {\r\n cursor: pointer;\r\n }\r\n & img {\r\n height: 300px;\r\n object-fit: cover;\r\n border-radius: 15px 15px 0 0;\r\n }\r\n & .content {\r\n border-radius: 0 0 15px 15px;\r\n background-color: var(--color-text-fff);\r\n padding: 15px;\r\n min-height: 110px;\r\n & .title {\r\n font-size: 20px;\r\n font-weight: 700;\r\n color: var(--color-text-000);\r\n line-height: normal;\r\n }\r\n & .car-count {\r\n font-size: 16px;\r\n color: var(--color-text-000);\r\n min-height: 25px;\r\n }\r\n & .date {\r\n color: #998f8f;\r\n font-size: 12px;\r\n padding-top: 5px;\r\n }\r\n }\r\n @media (max-width: 996px) {\r\n & img {\r\n height: 250px;\r\n }\r\n }\r\n`\r\nexport default HomeCategoryCard\r\n","import { HLink, HUtils, MyIcon, MyUI } from \"@macashipo/mlib\"\r\nimport classnames from \"classnames\"\r\nimport classNames from \"classnames\"\r\nimport { Button } from \"reactstrap\"\r\nimport { squareBracketReplace, isHTMLString } from \"src/core/helpers/utils\"\r\nimport MAnimationIcon from \"src/modules/app_sigo/components/MyAnimationIcon/AnimationIcon\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\n\r\nconst HomeDiscoverService = {\r\n fIcon: \"Icon\",\r\n fUrl: \"url\",\r\n}\r\nconst HomeDiscoverServiceCard = props => {\r\n const { data, config, configMoreInfo } = props\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n const description = data?.[homeSlidesFields.fOneSlideDescription]\r\n const icon = data?.[HomeDiscoverService.fIcon]\r\n const moreInfo = data?.[homeSlidesFields.fOneSlideMoreInfo] || {}\r\n const btnConfig =\r\n HUtils.get(configMoreInfo, \"websiteSetting.configBtn4EachCard\") || {}\r\n const itemConfig = HUtils.get(configMoreInfo, \"websiteSetting.itemConfig\")\r\n const url =\r\n moreInfo?.[HomeDiscoverService.fUrl] ||\r\n HUtils.get(moreInfo, \"websiteSetting.url\")\r\n const onHandleBtn = () => {\r\n if (url) {\r\n HLink.openUrl(squareBracketReplace(url, data), \"_blank\")\r\n }\r\n }\r\n const classNameItem = itemConfig?.classNameMobile || itemConfig?.className\r\n const titleStyle = itemConfig?.titleStyleMobile || itemConfig?.titleStyle\r\n const imgStyle = itemConfig?.imgStyleMobile || itemConfig?.imgStyle\r\n const descriptionStyle =\r\n itemConfig?.descriptionStyleMobile || itemConfig?.descriptionStyle\r\n const config4SEO = {\r\n useHeading: true,\r\n headingTag: \"h3\",\r\n ...HUtils.get(config, \"itemConfig.config4SEO\"),\r\n ...HUtils.get(moreInfo, \"websiteSetting.config4SEO\"),\r\n }\r\n const renderIcon = () => {\r\n if (icon) {\r\n if (isHTMLString(icon)) {\r\n return (\r\n \r\n )\r\n }\r\n if (icon?.startsWith(\"aic\")) {\r\n return (\r\n \r\n )\r\n }\r\n return \r\n }\r\n return <>\r\n }\r\n return (\r\n \r\n {renderIcon()}\r\n {img && !icon && (\r\n
    \r\n \"\"\r\n
    \r\n )}\r\n {title && (\r\n //
    \r\n // {title}\r\n //
    \r\n \r\n )}\r\n {description && (\r\n \r\n )}\r\n {url && btnConfig?.canShow && (\r\n \r\n {btnConfig?.title}\r\n \r\n )}\r\n
    \r\n )\r\n}\r\nconst Wrap: any = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n flex-direction: column;\r\n align-items: center;\r\n & svg {\r\n height: 113px;\r\n }\r\n &.mr-3 {\r\n margin-right: 1rem;\r\n }\r\n &.pr-3 {\r\n padding-right: 1rem;\r\n }\r\n & .title {\r\n color: var(--color-text-000);\r\n font-size: 20px;\r\n font-weight: 700;\r\n padding-top: 15px;\r\n }\r\n & .description {\r\n color: var(--color-535353);\r\n font-size: 16px;\r\n padding-top: 15px;\r\n max-width: 217px;\r\n text-align: center;\r\n }\r\n & button {\r\n margin-top: 20px;\r\n padding: 7px 20px;\r\n font-size: 14px !important;\r\n }\r\n & .image {\r\n overflow: hidden;\r\n & img {\r\n object-fit: scale-down;\r\n height: 90px;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n &.mobile-center {\r\n & .image {\r\n display: flex;\r\n justify-content: center;\r\n width: 100%;\r\n & img {\r\n height: 150px;\r\n }\r\n }\r\n & .title {\r\n text-align: center !important;\r\n width: 100%;\r\n }\r\n & .description {\r\n text-align: center !important;\r\n }\r\n }\r\n }\r\n`\r\nexport default HomeDiscoverServiceCard\r\n","import React, { useEffect, useState } from \"react\"\r\nimport { HLink, MyIcon, MyUI } from \"@macashipo/mlib\"\r\nimport { categoryFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport styled from \"styled-components\"\r\nimport classNames from \"classnames\"\r\nimport NoImage from \"src/modules/app_sigo/assets/imgs/no-image.jpg\"\r\nimport { Button, Dropdown, DropdownMenu, DropdownToggle } from \"reactstrap\"\r\nimport { MdOutlineClose } from \"react-icons/md\"\r\n\r\nconst HomeCarCard = props => {\r\n const { data, config, moreConfig } = props\r\n let detailUrl = data?.[categoryFields.fSlug]\r\n const [open, setOpen] = useState(false)\r\n /**New version */\r\n if (window.location.search) {\r\n detailUrl = detailUrl + window.location.search\r\n }\r\n const onToggleDropdown = () => {\r\n setOpen(prev => !prev)\r\n }\r\n const renderImgSlider = () => {\r\n const imgList = data?.[categoryFields.fImageUrls] || []\r\n const dfImage = config?.defaultImage || NoImage\r\n const _slideConfig = config?.slideOptions || {}\r\n\r\n return (\r\n \r\n \r\n {config?.showAddWishList && (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n )\r\n }\r\n const renderContentItem = () => {\r\n const name = data?.[categoryFields.fPDName]\r\n const rate = data?.[categoryFields.fPDRate]\r\n const address = data?.[categoryFields.fAddress]\r\n const distance = data?.[categoryFields.fPDDistance]\r\n const freeDay = data?.[categoryFields.fFreeDaySegment_Text]\r\n const rentalPriceOriginalByDay =\r\n data?.[categoryFields.fRentalPriceByDayOriginal]\r\n const rentalPriceByDay = data?.[categoryFields.fRentalPriceByDay]\r\n let showOriginal =\r\n rentalPriceOriginalByDay && rentalPriceOriginalByDay !== rentalPriceByDay\r\n ? true\r\n : false\r\n // if (config?.isShowAmount) {\r\n // showOriginal =\r\n // rentalPriceOriginal && rentalPriceOriginal !== rentalPrice\r\n // ? true\r\n // : false\r\n // } else {\r\n // showOriginal =\r\n // rentalPriceOriginalByDay &&\r\n // rentalPriceOriginalByDay !== rentalPriceByDay\r\n // ? true\r\n // : false\r\n // }\r\n\r\n return (\r\n \r\n {\r\n // HLink.openUrl(detailUrl, \"_self\")\r\n // }}\r\n >\r\n {/* eslint-disable-next-line */}\r\n \r\n

    {name}

    \r\n \r\n {rate && (\r\n
    \r\n \r\n {rate}\r\n
    \r\n )}\r\n \r\n {address && (\r\n
    {address}
    \r\n )}\r\n {freeDay &&
    {freeDay}
    }\r\n {/* \r\n {showOriginal && (\r\n 0 && \"mt-1px\"\r\n )}\r\n >\r\n {rentalPriceOriginal}\r\n \r\n )}\r\n */}\r\n \r\n {showOriginal && (\r\n
    {rentalPriceOriginalByDay}
    \r\n )}\r\n {rentalPriceByDay && (\r\n
    \r\n {rentalPriceByDay}\r\n /ngày\r\n
    \r\n )}\r\n \r\n
    \r\n )\r\n }\r\n return (\r\n \r\n {renderImgSlider()}\r\n {renderContentItem()}\r\n \r\n )\r\n}\r\nconst WrapSlider = styled.div`\r\n position: relative;\r\n max-height: 234px;\r\n min-height: 234px;\r\n height: 234px;\r\n\r\n & img {\r\n border-radius: 10px;\r\n max-height: 234px;\r\n height: 234px;\r\n object-fit: cover;\r\n }\r\n & .empty-img {\r\n text-align: center;\r\n }\r\n & .owl-carousel {\r\n z-index: 0 !important;\r\n }\r\n & .owl-dots {\r\n right: unset;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n display: flex;\r\n align-items: center;\r\n max-width: 80px;\r\n overflow: hidden;\r\n bottom: 10px !important;\r\n & .owl-dot {\r\n width: 4px !important;\r\n height: 4px !important;\r\n min-width: 4px !important;\r\n background-color: var(--color-text-e1e1e1) !important;\r\n margin-right: 5px !important;\r\n }\r\n & .owl-dot.active {\r\n background-color: var(--color-text-fff) !important;\r\n width: 6px !important;\r\n height: 6px !important;\r\n min-width: 6px !important;\r\n }\r\n }\r\n & .owl-nav {\r\n i:before {\r\n font-size: 14px;\r\n }\r\n }\r\n\r\n & .owl-nav {\r\n & .owl-prev {\r\n left: 5px !important;\r\n }\r\n & .owl-next {\r\n right: 5px !important;\r\n }\r\n }\r\n\r\n & .heart {\r\n position: absolute;\r\n top: 10px;\r\n right: 10px;\r\n z-index: 1;\r\n cursor: pointer;\r\n }\r\n & .wrap-item {\r\n cursor: pointer;\r\n }\r\n @media (max-width: 1199px) {\r\n & .wrap-item {\r\n .owl-nav {\r\n opacity: 0;\r\n pointer-events: none;\r\n touch-action: none;\r\n transition: all 0.25s;\r\n visibility: hidden;\r\n }\r\n }\r\n & .wrap-item:hover {\r\n .owl-nav {\r\n opacity: 0 !important;\r\n pointer-events: none !important;\r\n touch-action: none !important;\r\n visibility: hidden !important;\r\n & .disabled {\r\n display: none !important;\r\n opacity: 0 !important;\r\n }\r\n }\r\n }\r\n }\r\n`\r\nconst WrapContentItem = styled.div`\r\n padding: 10px 0;\r\n & .wrap-name {\r\n display: flex;\r\n justify-content: space-between;\r\n padding-bottom: 5px;\r\n & .name {\r\n fcolor: var(--color-text-000);\r\n max-width: calc(100% - 60px);\r\n & h3 {\r\n font-size: 16px;\r\n font-weight: 700;\r\n line-height: normal;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n }\r\n & .rate {\r\n font-size: 16px;\r\n color: var(--color-text-000);\r\n i {\r\n color: var(--color-text-000);\r\n margin-right: 5px;\r\n font-size: 17px;\r\n }\r\n }\r\n }\r\n & .wrap-sub-content {\r\n font-size: 14px;\r\n color: #6b6a6a;\r\n }\r\n & .wrap-price {\r\n display: none;\r\n align-items: center;\r\n & .original {\r\n color: #828282;\r\n font-size: 12px;\r\n text-decoration: line-through;\r\n padding-right: 5px;\r\n &.mt-1px {\r\n margin-top: 1px;\r\n }\r\n }\r\n & .rental-price {\r\n color: var(--color-text-000);\r\n font-weight: 700;\r\n font-size: 14px;\r\n & span.total {\r\n font-weight: 400;\r\n }\r\n &.underline {\r\n text-decoration: underline;\r\n }\r\n }\r\n }\r\n &.show-price-amount {\r\n & #amount-price {\r\n display: flex;\r\n }\r\n & #price-by-day {\r\n display: none;\r\n }\r\n }\r\n &.show-price-by-day {\r\n & #amount-price {\r\n display: none;\r\n }\r\n & #price-by-day {\r\n display: flex;\r\n }\r\n }\r\n & .btn-total-price-dropdown-toggle {\r\n padding: 0;\r\n border: none;\r\n box-shadown: none;\r\n }\r\n & .btn-total-price-dropdown-toggle:hover {\r\n }\r\n & .price-detail-dropdown-menu {\r\n padding: 20px;\r\n background-color: var(--color-text-fff);\r\n box-shadow: 0 8px 28px rgba(0, 0, 0, 0.28);\r\n width: 400px;\r\n border-radius: 20px;\r\n display: unset;\r\n opacity: 0;\r\n visibility: hidden;\r\n // animation: examplehide 400ms ease;\r\n // top: 0 !important;\r\n & .header {\r\n position: relative;\r\n text-align: center;\r\n & .btn-hide-dropdown {\r\n padding: 0;\r\n border: none;\r\n box-shadown: none;\r\n color: var(--color-text-222222);\r\n font-size: 16px;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n }\r\n & .title {\r\n font-size: 17px;\r\n font-weight: 600;\r\n color: var(--color-text-000);\r\n }\r\n }\r\n & > hr {\r\n margin: 20px -24px 0 !important;\r\n border-top: 1px solid #ddd;\r\n }\r\n & .content {\r\n padding: 24px 0 0;\r\n & .one-price-detail {\r\n font-size: 14px;\r\n padding-bottom: 10px;\r\n color: var(--color-text-111);\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n & .one-price-detail.amount {\r\n font-weight: 600;\r\n font-size: 15px;\r\n padding-bottom: 0px;\r\n }\r\n & > hr {\r\n margin-top: 10px !important;\r\n }\r\n }\r\n }\r\n & .price-detail-dropdown-menu.show {\r\n opacity: 1;\r\n visibility: visible;\r\n // animation: exampleshow 400ms ease;\r\n top: 25px !important;\r\n }\r\n // @keyframes examplehide {\r\n // 0% {\r\n // top: -235px;\r\n // }\r\n\r\n // 100% {\r\n // top: -180px;\r\n // }\r\n // }\r\n // @keyframes exampleshow {\r\n // 0% {\r\n // top: -180px;\r\n // }\r\n\r\n // 100% {\r\n // top: -235px;\r\n // }\r\n // }\r\n & .price-detail-dropdown-menu[x-placement=\"left-start\"] {\r\n left: 270px !important;\r\n }\r\n & .price-detail-dropdown-menu[x-placement=\"right-start\"] {\r\n left: -100px !important;\r\n transform: translate3d(100px, 4px, 0px) !important;\r\n }\r\n @media (max-width: 1499px) {\r\n & .price-detail-dropdown-menu[x-placement=\"left-start\"] {\r\n left: 300px !important;\r\n }\r\n }\r\n @media (max-width: 1199px) {\r\n & .price-detail-dropdown-menu[x-placement=\"left-start\"] {\r\n left: 250px !important;\r\n }\r\n }\r\n @media (max-width: 1024px) {\r\n & .price-detail-dropdown-menu[x-placement=\"left-start\"] {\r\n left: 235px !important;\r\n }\r\n }\r\n @media (max-width: 576px) {\r\n & .price-detail-dropdown-menu {\r\n width: calc(100vw - 10px);\r\n }\r\n & .price-detail-dropdown-menu[x-placement=\"left-start\"] {\r\n left: 0px !important;\r\n }\r\n }\r\n`\r\nconst Wrap = styled.div`\r\n &.one-car {\r\n margin-bottom: 15px;\r\n }\r\n @media (max-width: 767px) {\r\n padding-left: 0;\r\n padding-right: 0;\r\n }\r\n`\r\n// const Wrap2 = styled.div`\r\n// & .xe:not(.taixe) {\r\n// img {\r\n// width: 100%;\r\n// max-height: 246px;\r\n// height: 230px;\r\n// object-fit: cover;\r\n// }\r\n// }\r\n// @media (max-width: 1023px) {\r\n// & .xe:not(.taixe) {\r\n// img {\r\n// max-height: 230px;\r\n// height: 230px;\r\n// }\r\n// }\r\n// }\r\n// `\r\nexport default HomeCarCard\r\n","import React from \"react\"\r\nimport styled from \"styled-components\"\r\nimport { homeSlidesFields } from \"src/modules/app_sigo/constants/fields\"\r\nimport { HLink, HUtils } from \"@macashipo/mlib\"\r\nimport classNames from \"classnames\"\r\nimport { squareBracketReplace } from \"src/core/helpers/utils\"\r\nimport classnames from \"classnames\"\r\n\r\nconst RowImageTextHoverBorderCard = props => {\r\n const { data, configMoreInfo } = props\r\n const img = data?.[homeSlidesFields.fOneSlideImageUrl]\r\n const title = data?.[homeSlidesFields.fOneSlideTitle]\r\n const description = data?.[homeSlidesFields.fOneSlideDescription]\r\n const moreInfo = data?.[homeSlidesFields.fOneSlideMoreInfo] || {}\r\n const btnConfig = {\r\n ...HUtils.get(configMoreInfo, \"websiteSetting.configBtn4EachCard\"),\r\n ...HUtils.get(moreInfo, \"websiteSetting\"), // config của từng card\r\n }\r\n const itemConfig = HUtils.get(configMoreInfo, \"websiteSetting.itemConfig\")\r\n const configHover = HUtils.get(configMoreInfo, \"websiteSetting.configHover\")\r\n const url = HUtils.get(btnConfig, \"url\")\r\n const classNameItem = itemConfig?.classNameMobile || itemConfig?.className\r\n const titleStyle = itemConfig?.titleStyleMobile || itemConfig?.titleStyle\r\n const imgStyle = itemConfig?.imgStyleMobile || itemConfig?.imgStyle\r\n const descriptionStyle =\r\n itemConfig?.descriptionStyleMobile || itemConfig?.descriptionStyle\r\n const rightStyle = itemConfig?.rightStyleMobile || itemConfig?.rightStyle\r\n\r\n const onHandleBtnLandingCard = () => {\r\n if (url) {\r\n HLink.openUrl(squareBracketReplace(url, data), \"_blank\")\r\n }\r\n }\r\n return (\r\n \r\n \r\n {img && \"\"}\r\n \r\n \r\n {title && (\r\n \r\n )}\r\n {description && (\r\n \r\n )}\r\n {url && btnConfig?.canShow && (\r\n \r\n {btnConfig?.title}\r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\nconst Wrap: any = styled.div`\r\n padding: 10px;\r\n border-radius: 10px;\r\n border: 1px solid transparent;\r\n transition: all 0.25s;\r\n margin-left: 0;\r\n margin-right: 0;\r\n & .title {\r\n color: var(--color-text-000);\r\n font-size: 20px;\r\n font-weight: 700;\r\n padding-top: 15px;\r\n }\r\n & .description {\r\n color: rgb(101, 101, 101);\r\n font-size: 16px;\r\n padding-top: 15px;\r\n }\r\n & .wrap-image {\r\n max-width: 250px;\r\n & > img {\r\n max-height: 500px;\r\n object-fit: contain;\r\n }\r\n }\r\n & .df-button {\r\n background-color: #fff;\r\n border: none;\r\n padding: 0;\r\n color: var(--color-text-000);\r\n text-decoration: underline 1px solid;\r\n font-size: 14px;\r\n font-weight: 600;\r\n }\r\n @media (max-width: 1199px) {\r\n & .wrap-image,\r\n & .wrap-content {\r\n width: 100%;\r\n }\r\n }\r\n @media (max-width: 767px) {\r\n padding: 0;\r\n &.horizontal-mobile {\r\n & .wrap-image {\r\n width: 40%;\r\n max-width: 250px;\r\n padding: 0;\r\n & > img {\r\n max-height: 500px;\r\n object-fit: contain;\r\n }\r\n }\r\n & .wrap-content {\r\n padding-left: 16px;\r\n width: 60%;\r\n }\r\n }\r\n }\r\n`\r\nexport default RowImageTextHoverBorderCard\r\n","import React from \"react\"\r\nimport { MyCardHelpers } from \"@macashipo/mlib\"\r\nimport HomeCategoryCard from \"src/modules/app_sigo_responsive/components/MyCard/Types/HomeCategory\"\r\nimport HomeBlogCard from \"src/modules/app_sigo/components/MyCard/Types/HomeBlog\"\r\nimport HomeUsageCard from \"src/modules/app_sigo/components/MyCard/Types/HomeUsage\"\r\nimport HomePromotionCard from \"src/modules/app_sigo/components/MyCard/Types/HomePromotion\"\r\nimport HomeLandingCard from \"src/modules/app_sigo/components/MyCard/Types/HomeLanding\"\r\nimport HomeDiscoverServiceCard from \"src/modules/app_sigo_responsive/components/MyCard/Types/HomeDiscoverService\"\r\nimport HomeHelpsCard from \"src/modules/app_sigo/components/MyCard/Types/HomeHelps\"\r\nimport HomeAdvantageCard from \"src/modules/app_sigo/components/MyCard/Types/HomeAdvantage\"\r\nimport HomeCarCard from \"src/modules/app_sigo_responsive/components/MyCard/Types/HomeCar\"\r\nimport NowCard from \"src/modules/app_sigo/components/MyCard/Types/NowCard\"\r\nimport RowImageTextHoverBorderCard from \"src/modules/app_sigo_responsive/components/MyCard/Types/RowImageTextHoverBorderCard\"\r\nimport ImageRowContentCard from \"src/modules/app_sigo/components/MyCard/Types/ImageRowContentCard\"\r\nimport ColumnContentCard from \"src/modules/app_sigo/components/MyCard/Types/ColumnContentCard\"\r\n\r\nconst ProductCard = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyCard/Types/ProductCard\"\r\n )\r\n)\r\nconst DiscountCard = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyCard/Types/DiscountCard\")\r\n)\r\nconst HistoryCard = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyCard/Types/HistoryCard\")\r\n)\r\nconst ServiceCard = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyCard/Types/ServiceCard\")\r\n)\r\n// const NowCard = React.lazy(() => import(\"src/modules/app_sigo/components/MyCard/Types/NowCard\"))\r\n/**Backup chuyến đi của tôi cũ */\r\nconst HistoryCardOld = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyCard/Types/HistoryCard_old\")\r\n)\r\n\r\nconst OrderCard = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyCard/Types/OrderCard\")\r\n)\r\nconst OrderDetailBlogCard = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyCard/Types/OrderDetailBlog\")\r\n)\r\nconst ReviewCard = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyCard/Types/ReviewCard\")\r\n)\r\nconst RowTextImageCard = React.lazy(\r\n () =>\r\n import(\r\n \"src/modules/app_sigo_responsive/components/MyCard/Types/RowTextImageCard\"\r\n )\r\n)\r\nconst RowImageTextArrowCard = React.lazy(\r\n () =>\r\n import(\"src/modules/app_sigo/components/MyCard/Types/RowImageTextArrowCard\")\r\n)\r\nconst OnlyTextCard = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyCard/Types/OnlyTextCard\")\r\n)\r\nconst HTMLTableCard = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyCard/Types/HTMLTableCard\")\r\n)\r\nconst GuideByImages = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyCard/Types/GuideByImages\")\r\n)\r\nconst GuideByVideo = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyCard/Types/GuideByVideo\")\r\n)\r\nconst TravellingCard = React.lazy(\r\n () => import(\"src/modules/app_sigo/components/MyCard/Types/TravellingCard\")\r\n)\r\n\r\nconst List = {\r\n product_card: ProductCard,\r\n discount_card: DiscountCard,\r\n history_card: HistoryCard,\r\n history_card_old: HistoryCardOld,\r\n service_card: ServiceCard,\r\n now_card: NowCard,\r\n home_card_category: HomeCategoryCard,\r\n home_card_blog: HomeBlogCard,\r\n home_card_promotion: HomePromotionCard,\r\n home_card_usage: HomeUsageCard,\r\n home_card_landing: HomeLandingCard,\r\n home_card_discover_service: HomeDiscoverServiceCard,\r\n home_card_helps: HomeHelpsCard,\r\n home_card_advantage: HomeAdvantageCard,\r\n home_card_car: HomeCarCard,\r\n review_card: ReviewCard,\r\n order_card: OrderCard,\r\n order_detail_blog: OrderDetailBlogCard,\r\n row_text_image_card: RowTextImageCard,\r\n row_image_text_arrow_card: RowImageTextArrowCard,\r\n only_text_card: OnlyTextCard,\r\n html_table_card: HTMLTableCard,\r\n guide_by_images: GuideByImages,\r\n guide_by_video: GuideByVideo,\r\n row_image_text_hover_border_card: RowImageTextHoverBorderCard,\r\n image_row_content_card: ImageRowContentCard,\r\n column_content_card: ColumnContentCard,\r\n /** Blog List */\r\n sg_travelling_card: TravellingCard,\r\n}\r\nconst MyLibOne = {\r\n init() {\r\n MyCardHelpers.addTypesFromListLazy(List)\r\n },\r\n}\r\n\r\nexport default MyLibOne\r\n","import { HConstant, HIs, HLocalStorage, HUtils } from \"src/core/helpers\"\r\nimport {\r\n MyPageOne,\r\n MyUIOne,\r\n MyLibOne,\r\n MyIconOne,\r\n MyControlOne,\r\n MyFormControlOne,\r\n MyButtonOne,\r\n MyCardOne,\r\n MyControlForm,\r\n MyTableFilterControl,\r\n MyTableCell,\r\n} from \"./components\"\r\nimport \"src/modules/app_sigo/assets/theme-sigo.scss\"\r\nimport \"src/modules/app_sigo/assets/fonts/flaticon.css\"\r\nimport \"src/modules/app_sigo/assets/guest/css/reset.css\"\r\nimport \"src/modules/app_sigo/assets/guest/css/nice-select.css\"\r\nimport \"src/modules/app_sigo/assets/guest/css/guest.css\"\r\nimport \"react-loading-skeleton/dist/skeleton.css\"\r\nimport \"src/modules/app_sigo/assets/icons/flaticon.css\"\r\nimport \"src/modules/app_sigo_responsive/assets/theme-sigo-responsive.scss\"\r\nimport { kFirstSettingData } from \"src/modules/app_sigo/constants\"\r\nimport { store } from \"src/store/store\"\r\nimport { initFirstSettingData } from \"src/App/App.actions\"\r\nimport { SGNewPaths, SGPaths } from \"src/modules/app_sigo/constants/paths\"\r\n\r\ninterface IModuleAppSigo extends ICore.IOneModule {\r\n runAfterInit: (HConfig: any) => void\r\n}\r\nconst ModuleAppSigoResponsive: IModuleAppSigo = {\r\n _key: \"app_sigo\",\r\n _fnList: {},\r\n _config: {},\r\n getMyKey: () => {\r\n return \"app_sigo\"\r\n },\r\n runAfterInit: (HConfig: any) => {\r\n MyPageOne.init()\r\n MyUIOne.init()\r\n MyLibOne.init()\r\n MyIconOne.init()\r\n MyControlOne.init()\r\n MyFormControlOne.init()\r\n MyButtonOne.init()\r\n MyCardOne.init()\r\n MyControlForm.init()\r\n MyTableFilterControl.init()\r\n MyTableCell.init()\r\n window.document.body.classList.add(\"theme-sigo\")\r\n window.document.body.classList.add(\"theme-sigo-responsive\")\r\n window.document.body.classList.add(\"guest\")\r\n const userAgent =\r\n window.navigator.userAgent && window.navigator.userAgent.toLowerCase()\r\n if (\r\n userAgent &&\r\n userAgent.indexOf(\"iphone\") > -1 &&\r\n userAgent.indexOf(\"safari\") > -1\r\n ) {\r\n window.document.body.classList.add(\"on-ios\")\r\n }\r\n // xử lý init first setting\r\n const firstSettingLocal = HLocalStorage.getObj(kFirstSettingData, {})\r\n store.dispatch(initFirstSettingData(firstSettingLocal))\r\n HUtils.runFuntion(HConfig, HConstant.HConfig.FnList.addPrivateRoutes, [\r\n [\r\n {\r\n Id: \"history\",\r\n UIUrl: \"/dev-v1/:status\",\r\n UIType: \"history\",\r\n Title: \"Chuyến đi của tôi\",\r\n },\r\n {\r\n Id: \"mytrips\",\r\n UIUrl: SGPaths.chuyendicuatoi,\r\n UIType: \"mytrips\",\r\n Title: \"Chuyến đi của tôi\",\r\n RedirectUrl: SGNewPaths.chuyendicuatoi,\r\n },\r\n {\r\n Id: \"mytrips-new\",\r\n UIUrl: SGNewPaths.chuyendicuatoi,\r\n UIType: \"mytrips\",\r\n Title: \"Chuyến đi của tôi\",\r\n configMainLayout: {\r\n isHideFooter: true,\r\n },\r\n },\r\n {\r\n Id: \"my-profile\",\r\n UIUrl: SGPaths.taikhoancuatoi,\r\n UIType: \"sg_user_profile\",\r\n Title: \"Tài khoản của tôi\",\r\n APIName: \"User\",\r\n Config: {\r\n GetData: \"User/MyProfile\",\r\n UpdateData: \"User/UpdateProfile\",\r\n UpdateAvatar: \"Upload/User/MyAvatar\",\r\n },\r\n configMainLayout: {\r\n isHideHeader: true,\r\n },\r\n RedirectUrl: SGNewPaths.taikhoancuatoi,\r\n },\r\n {\r\n Id: \"my-profile-new\",\r\n UIUrl: SGNewPaths.taikhoancuatoi,\r\n UIType: \"sg_user_profile\",\r\n Title: \"Tài khoản của tôi\",\r\n APIName: \"User\",\r\n Config: {\r\n GetData: \"User/MyProfile\",\r\n UpdateData: \"User/UpdateProfile\",\r\n UpdateAvatar: \"Upload/User/MyAvatar\",\r\n },\r\n configMainLayout: {\r\n isHideHeader: true,\r\n },\r\n },\r\n {\r\n Id: \"verify-account\",\r\n UIUrl: SGPaths.xacthuctaikhoan,\r\n UIType: \"sg_verify_account\",\r\n Title: \"Xác thực\",\r\n APIName: \"User/MyProfile\",\r\n RedirectUrl: SGNewPaths.xacthuctaikhoan,\r\n },\r\n {\r\n Id: \"verify-account-new\",\r\n UIUrl: SGNewPaths.xacthuctaikhoan,\r\n UIType: \"sg_verify_account\",\r\n Title: \"Xác thực\",\r\n APIName: \"User/MyProfile\",\r\n },\r\n {\r\n Id: \"my-saving\",\r\n UIUrl: SGPaths.tichluy,\r\n UIType: \"sg_saving\",\r\n Title: \"Tích lũy\",\r\n APIName: \"User/GetCoinReward\",\r\n RedirectUrl: SGNewPaths.tichluy,\r\n },\r\n {\r\n Id: \"my-saving-new\",\r\n UIUrl: SGNewPaths.tichluy,\r\n UIType: \"sg_saving\",\r\n Title: \"Tích lũy\",\r\n APIName: \"User/GetCoinReward\",\r\n },\r\n {\r\n Id: \"my-service\",\r\n UIUrl: SGPaths.xecuatoi,\r\n UIType: \"sg_my_service\",\r\n Title: \"Xe của tôi\",\r\n RedirectUrl: SGNewPaths.xecuatoi,\r\n configMainLayout: {\r\n isHideFooter: true,\r\n },\r\n },\r\n {\r\n Id: \"my-service-new\",\r\n UIUrl: SGNewPaths.xecuatoi,\r\n UIType: \"sg_my_service\",\r\n Title: \"Xe của tôi\",\r\n configMainLayout: {\r\n isHideFooter: true,\r\n },\r\n },\r\n {\r\n Id: \"add-service\",\r\n UIUrl: SGPaths.themxe,\r\n UIType: \"sg_add_service\",\r\n Title: \"Thêm xe\",\r\n RedirectUrl: SGNewPaths.themxe,\r\n },\r\n {\r\n Id: \"add-service-new\",\r\n UIUrl: SGNewPaths.themxe,\r\n UIType: \"sg_add_service\",\r\n Title: \"Thêm xe\",\r\n },\r\n {\r\n UIUrl: SGPaths.lichhoatdong,\r\n UIType: \"slug\",\r\n Title: \"Lịch hoạt động\",\r\n RedirectUrl: SGNewPaths.lichhoatdong,\r\n },\r\n {\r\n UIUrl: SGNewPaths.lichhoatdong,\r\n UIType: \"my_activity_schedule\",\r\n Title: \"Lịch hoạt động\",\r\n configMainLayout: {\r\n isHideFooter: true,\r\n },\r\n },\r\n {\r\n UIUrl: SGPaths.danhmucxe,\r\n UIType: \"slug\",\r\n Title: \"Danh mục xe cho thuê\",\r\n RedirectUrl: SGNewPaths.danhmucxe,\r\n },\r\n {\r\n UIUrl: SGNewPaths.danhmucxe,\r\n UIType: \"slug\",\r\n Title: \"Danh mục xe cho thuê\",\r\n },\r\n {\r\n Id: \"notification\",\r\n UIUrl: SGPaths.thongbao,\r\n UIType: \"sg_notification\",\r\n Title: \"Thông báo\",\r\n APIName: \"Notification\",\r\n RedirectUrl: SGNewPaths.thongbao,\r\n },\r\n {\r\n Id: \"notification-new\",\r\n UIUrl: SGNewPaths.thongbao,\r\n UIType: \"sg_notification\",\r\n Title: \"Thông báo\",\r\n APIName: \"Notification\",\r\n },\r\n {\r\n Id: \"payment\",\r\n UIUrl: SGPaths.thanhtoan,\r\n UIType: \"sg_payment\",\r\n Title: \"Thanh toán\",\r\n RedirectUrl: SGNewPaths.thanhtoan,\r\n },\r\n {\r\n Id: \"payment-new\",\r\n UIUrl: SGNewPaths.thanhtoan,\r\n UIType: \"sg_payment\",\r\n Title: \"Thanh toán\",\r\n },\r\n {\r\n Id: \"edit-my-service\",\r\n UIUrl: SGPaths.chinhsuaxe,\r\n UIType: \"sg_edit_my_service\",\r\n Title: \"Chỉnh sửa xe\",\r\n RedirectUrl: SGNewPaths.chinhsuaxe,\r\n },\r\n {\r\n Id: \"edit-my-service-new\",\r\n UIUrl: SGNewPaths.chinhsuaxe,\r\n UIType: \"sg_edit_my_service\",\r\n Title: \"Chỉnh sửa xe\",\r\n },\r\n {\r\n Id: \"my-orders\",\r\n UIUrl: SGPaths.donhanghientai,\r\n UIType: \"my_orders\",\r\n Title: \"Đơn đặt xe của bạn\",\r\n RedirectUrl: SGNewPaths.donhanghientai,\r\n },\r\n {\r\n Id: \"my-orders-new\",\r\n UIUrl: SGNewPaths.donhanghientai,\r\n UIType: \"my_orders\",\r\n Title: \"Đơn đặt xe của bạn\",\r\n configMainLayout: {\r\n isHideFooter: true,\r\n },\r\n },\r\n ],\r\n ])\r\n HUtils.runFuntion(HConfig, HConstant.HConfig.FnList.addPublicRoutes, [\r\n [\r\n {\r\n Id: \"profile\",\r\n UIUrl: SGPaths.thongtintaikhoan,\r\n UIType: \"sg_user_profile\",\r\n Title: \"\",\r\n APIName: \"User\",\r\n Config: {\r\n GetData: \"User/Profile\",\r\n ReportUser: \"User/ReportUser\",\r\n },\r\n },\r\n {\r\n Id: \"profile-new\",\r\n UIUrl: SGNewPaths.thongtintaikhoan,\r\n UIType: \"sg_user_profile\",\r\n Title: \"\",\r\n APIName: \"User\",\r\n Config: {\r\n GetData: \"User/Profile\",\r\n ReportUser: \"User/ReportUser\",\r\n },\r\n },\r\n // isLocalDev() && {\r\n // Id: \"dev_test\",\r\n // UIUrl: SGPaths.dev_test,\r\n // UIType: \"sg_dev_test\",\r\n // Title: \"\",\r\n // Config: {},\r\n // },\r\n {\r\n Id: \"detail\",\r\n UIUrl: SGPaths.chitietxe,\r\n UIType: \"detail\",\r\n Title: \"Chi tiết xe\",\r\n configMainLayout: {\r\n isHideHeader: true,\r\n },\r\n },\r\n {\r\n Id: \"category\",\r\n UIUrl: SGPaths.searchxe,\r\n UIType: \"category\",\r\n Title: \"Danh sách xe\",\r\n RedirectUrl: SGNewPaths.searchxe,\r\n },\r\n {\r\n Id: \"category-new\",\r\n UIUrl: SGNewPaths.searchxe,\r\n UIType: \"category\",\r\n Title: \"Danh sách xe\",\r\n configMainLayout: {\r\n isHideFooter: true,\r\n },\r\n },\r\n {\r\n Id: \"helpus\",\r\n UIUrl: SGPaths.huongdandatxe,\r\n UIType: \"helpus\",\r\n Title: \"Trợ giúp\",\r\n },\r\n {\r\n Id: \"registerguide\",\r\n UIUrl: SGPaths.huongdandangkyxe,\r\n UIType: \"helpus\",\r\n Title: \"Hướng dẫn đăng ký xe\",\r\n },\r\n {\r\n Id: \"sigotravelling\",\r\n UIUrl: SGPaths.sigotravelling,\r\n UIType: \"sg_travelling\",\r\n Title: \"SIGO Travelling\",\r\n configMainLayout: {\r\n isHideHeader: true,\r\n },\r\n },\r\n {\r\n Id: \"faqs\",\r\n UIUrl: SGPaths.cauhoithuonggap,\r\n UIType: \"helpus\",\r\n Title: \"Hỗ trợ\",\r\n },\r\n {\r\n Id: \"sg_account\",\r\n UIUrl: SGPaths.taikhoan,\r\n UIType: \"sg_account\",\r\n Title: \"Tài khoản\",\r\n configMainLayout: {\r\n isHideFooter: true,\r\n },\r\n },\r\n {\r\n Id: \"notfound\",\r\n UIUrl: SGPaths.notfound,\r\n UIType: \"sg_not_found\",\r\n },\r\n {\r\n Id: \"slug\",\r\n UIUrl: SGPaths.slug,\r\n UIType: \"slug\",\r\n configMainLayout: {\r\n isHideHeader: true,\r\n },\r\n },\r\n {\r\n Id: \"home\",\r\n UIUrl: SGPaths.home,\r\n UIType: \"home\",\r\n Title: \"Sigo\",\r\n },\r\n ],\r\n ])\r\n },\r\n}\r\n\r\nexport default ModuleAppSigoResponsive\r\n","import ModuleAppSigo from \"../app_sigo\"\r\nimport ModuleAppSigoResponsive from \"../app_sigo_responsive\"\r\ninterface IModuleAppSigoGeneric extends ICore.IOneModule {\r\n runAfterInit: (HConfig: any) => void\r\n}\r\nconst ModuleAppSigoGeneric: IModuleAppSigoGeneric = {\r\n _key: \"app_sigo\",\r\n _fnList: {},\r\n _config: {},\r\n getMyKey: () => {\r\n return \"app_sigo\"\r\n },\r\n runAfterInit: (HConfig: any) => {\r\n if (window.innerWidth <= 1010) {\r\n ModuleAppSigoResponsive.runAfterInit(HConfig)\r\n } else {\r\n ModuleAppSigo.runAfterInit(HConfig)\r\n }\r\n },\r\n}\r\n\r\nexport default ModuleAppSigoGeneric\r\n","import { HLog } from \"src/core/helpers\"\r\nimport { HLocalStorage } from \"@macashipo/mlib\"\r\nimport ModuleFirstSetting from \"src/core/modules/firstsetting\"\r\n// import ModuleCategoryScreen from \"src/core/modules/categoryscreen\"\r\nimport ModuleV1Page from \"src/core/modules/v1page\"\r\nimport ModuleDev from \"src/core/modules/dev\"\r\nimport ModuleIconHiOutline from \"src/core/modules/iconHiOutline\"\r\nimport ModuleSetting from \"src/core/modules/setting\"\r\nimport ModuleSetting2FA from \"src/core/modules/setting2fa\"\r\nimport ModuleRedirectToken from \"src/core/modules/redirectToken\"\r\nimport ModuleDevSimulator from \"src/core/modules/dev_simulator\"\r\nimport ModuleCore from \"src/core/modules/core\"\r\nimport ModuleReactGA from \"src/modules/reactga\"\r\nimport ModuleCheckIdle from \"src/modules/check_idle\"\r\nimport ModuleAdminTable from \"src/modules/admintable\"\r\nimport ModuleAppSigoGeneric from \"src/modules/app_sigo_generic\"\r\n\r\nimport Lang_en from \"src/assets/i18n/en.json\"\r\nimport Lang_vi from \"src/assets/i18n/vi.json\"\r\n\r\nimport { store } from \"src/store/store\"\r\nimport K from \"src/helpers/K\"\r\nimport {\r\n fetchFirstSettingSuccess,\r\n logout,\r\n updateHeaderTitle,\r\n} from \"src/App/App.actions\"\r\nimport \"src/assets/scss/theme-layout.css\"\r\nconst kFirstSettingData = \"FIRST_SETTING_DATA\"\r\nconst AppConfig: IConfigApp = {\r\n appInfo: {\r\n title: \"SIGO® | Ứng dụng cho thuê xe tự lái 4 - 7 chỗ\",\r\n appName: \"sigoweb\",\r\n home: \"/\",\r\n logoUrl: \"/\",\r\n targetLogoUrl: \"_self\",\r\n acceptFiles:\r\n \".pdf, .doc, .docx, .csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\r\n GAId: \"G-RSHGJ465P9\",\r\n GAIdDev: \"UA-119777650-2\",\r\n GooglePlaceApiKey: \"AIzaSyBzpjMv2KczEub9Od-uYrB6Skvqslkf3Fg\",\r\n hasCheckIdle: false,\r\n checkIdleSecond: 600,\r\n checkIdleInterval: 5,\r\n checkIdleCountdown: 60,\r\n configLogin: {\r\n showRegister: false,\r\n textWelcome: \"MEZY CUSTOMER PORTAL\",\r\n },\r\n facebookAppId: \"543044071219951\",\r\n facebookAdmins: \"100002470701612\",\r\n dfMetaConfig: {\r\n MetaUrl: \"https://sigo.vn/\",\r\n MetaTitle:\r\n \"SIGO® | Ứng dụng cho thuê xe tự lái 4 - 7 chỗ | 1900 99 99 19 | 02888889399\",\r\n MetaKeyWords:\r\n \"Sigo, cho thuê xe tự lái, 4 chỗ, 7 chỗ, 1900 99 99 19, 02888889399\",\r\n MetaDescription:\r\n \"Sigo là một platform (nền tảng), là một ứng dụng đặt xe online, là nền tảng kết nối giữa chủ xe và người thuê xe (car-sharing). Qua Sigo, khách hàng có nhu cầu thuê xe tự lái sẽ liên hệ với những chủ xe tại địa phương. Mọi thắc mắc xin liên hệ tổng đài 1900 99 99 19 và vui lòng nhấc máy khi nhận được cuộc gọi từ số 02888889399 nhé!\",\r\n },\r\n },\r\n configApi: {\r\n baseUrl: \"https://sigo-api-dev2.allianceitsc.com\", //\"https://sigo-api-dev.allianceitsc.com\",\r\n fnLogout: opts => {\r\n // console.warn(\"logout\")\r\n store.dispatch(logout(opts))\r\n },\r\n },\r\n configI18n: {\r\n lng: \"en\",\r\n defaultNS: \"common\",\r\n resources: {\r\n en: {\r\n common: Lang_en,\r\n },\r\n vi: {\r\n common: Lang_vi,\r\n },\r\n },\r\n },\r\n configAuth: {\r\n afterLogin: () => {\r\n console.log(\"afterLogin\")\r\n ModuleCheckIdle._fnList.checkIdleAfterLogin()\r\n },\r\n },\r\n fnList: {\r\n dispatchFromStore(action) {\r\n store.dispatch(action)\r\n },\r\n updateHeaderTitle: title => {\r\n store.dispatch(updateHeaderTitle(title))\r\n },\r\n onAfterInit: function (HConfig) {\r\n HLog.logW(\"After init\", HConfig)\r\n },\r\n fnGetRequestUIAppConfigFirstSetting: () => {\r\n let _keys = [\r\n K.mobileNumberInvalidMessage,\r\n K.mobileNumberValidRegexPattern,\r\n K.acceptedTypeIDUpload,\r\n K.acceptedTypeIDUploadName,\r\n ]\r\n let _obj = {}\r\n for (let k of _keys) {\r\n if (AppConfig.UIAppConfig[k] != null) {\r\n _obj[k] = AppConfig.UIAppConfig[k]\r\n }\r\n }\r\n return _obj\r\n },\r\n afterCallFirstSetting: config => {\r\n HLocalStorage.saveObj(kFirstSettingData, config)\r\n store.dispatch(fetchFirstSettingSuccess(config))\r\n },\r\n },\r\n modules: [\r\n ModuleCore,\r\n ModuleDev,\r\n ModuleDevSimulator,\r\n ModuleFirstSetting,\r\n // ModuleCategoryScreen,\r\n ModuleV1Page,\r\n ModuleIconHiOutline,\r\n ModuleSetting,\r\n ModuleSetting2FA,\r\n ModuleRedirectToken,\r\n ModuleReactGA,\r\n ModuleCheckIdle,\r\n ModuleAdminTable,\r\n ModuleAppSigoGeneric,\r\n ],\r\n UIAppConfig: {\r\n numeralFormat: \"0,0.[0]\",\r\n numeralFormatMoney: \"0,0.[00]\",\r\n timeFormat: \"HH:mm\",\r\n dateFormat: \"DD-MMMYY\", //MomentJS\r\n datetimeFormat: \"DD-MMMYY HH:mm\", //MomentJS\r\n widthMobile: 1000,\r\n symbolDecimal: \",\",\r\n symbolThousand: \".\",\r\n mobileNumberValidRegexPattern: \"^(0[4|5])([0-9]{8})$\",\r\n mobileNumberInvalidMessage:\r\n \"Please enter a valid Australian mobile number (04xxxxxxxx or 05xxxxxxxx).\",\r\n acceptedTypeIDUpload: \".jpg,.jpeg,.png,.pdf\",\r\n acceptedTypeIDUploadName: \".jpg .jpeg .png .pdf\",\r\n },\r\n}\r\n\r\nexport default AppConfig\r\n","import AppConfig from \"src/modules/app_sigo_generic/Config\"\r\nexport default AppConfig\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === \"localhost\" ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === \"[::1]\" ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n)\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void\r\n}\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return\r\n }\r\n\r\n window.addEventListener(\"load\", () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config)\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n \"This web app is being served cache-first by a service \" +\r\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\r\n )\r\n })\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config)\r\n }\r\n })\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing\r\n if (installingWorker == null) {\r\n return\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === \"installed\") {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n \"New content is available and will be used when all \" +\r\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\r\n )\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration)\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log(\"Content is cached for offline use.\")\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n })\r\n .catch(error => {\r\n console.error(\"Error during service worker registration:\", error)\r\n })\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { \"Service-Worker\": \"script\" }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get(\"content-type\")\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload()\r\n })\r\n })\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config)\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n \"No internet connection found. App is running in offline mode.\"\r\n )\r\n })\r\n}\r\n\r\nexport function unregister() {\r\n if (\"serviceWorker\" in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister()\r\n })\r\n .catch(error => {\r\n console.error(error.message)\r\n })\r\n }\r\n}\r\n","import React from \"react\"\r\nimport ReactDOM from \"react-dom\"\r\nimport { Provider } from \"react-redux\"\r\nimport { I18nextProvider } from \"react-i18next\"\r\nimport i18next from \"i18next\"\r\nimport { ToastContainer } from \"react-toastify\"\r\nimport \"src/assets/scss/index.scss\"\r\nimport App from \"./App/App\"\r\nimport AppConfig from \"./App/AppConfig\"\r\n// eslint-disable-next-line\r\nimport * as HCore from \"./core/helpers/index\"\r\nimport * as serviceWorker from \"./serviceWorker\"\r\nimport { store } from \"./store/store\"\r\nimport MyModal from \"src/core/components/MyModal/MyModal\"\r\nimport MyLightbox from \"src/core/components/MyModal/MyLightbox\"\r\nimport { GlobalLockScreen } from \"src/core/components\"\r\nimport \"react-toastify/dist/ReactToastify.css\"\r\nimport \"font-awesome/css/font-awesome.min.css\"\r\nimport * as MLib from \"@macashipo/mlib\"\r\nwindow[\"MLib\"] = MLib\r\n/** Init Config App */\r\n\r\nHCore.HConfig.initConfigApp(AppConfig)\r\n\r\nReactDOM.render(\r\n // \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n // \r\n document.getElementById(\"root\")\r\n)\r\n\r\nvar dom_firstLoading = document.getElementById(\"first_loading\")\r\nif (dom_firstLoading) {\r\n dom_firstLoading.style.visibility = \"hidden\"\r\n}\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister()\r\n","import * as types from \"./App.constants\"\r\nimport { FETCH_LOGIN_SUCCESS } from \"src/pages/Login/Login.constants\"\r\nimport produce from \"immer\"\r\nimport {\r\n authLogout,\r\n authLoginWithRes,\r\n authCheckSavedAuthorized,\r\n authIsLogged,\r\n} from \"../core/helpers/auth\"\r\nconst initialState: any = {\r\n isAuthenticated: authCheckSavedAuthorized(),\r\n closeSideNav: true,\r\n sideNavItems: [],\r\n headerTitle: \"\",\r\n dataFirstSetting: {},\r\n quickOverviewData: {},\r\n uiNavbarType: \"sg_nav_default\",\r\n}\r\n\r\nif (window.document.body.clientWidth <= 1024) {\r\n initialState.closeSideNav = true\r\n}\r\n\r\nexport const AppReducer = (state = initialState, action) =>\r\n produce(state, draft => {\r\n // console.warn(\"AppReducer\", state, draft, action)\r\n switch (action.type) {\r\n case types.LOGOUT:\r\n authLogout(action.opts)\r\n draft.isAuthenticated = authIsLogged()\r\n break\r\n case FETCH_LOGIN_SUCCESS:\r\n draft.isAuthenticated = authLoginWithRes(action.res)\r\n break\r\n case types.SIDE_NAV_CLOSE:\r\n draft.closeSideNav = !state.closeSideNav\r\n break\r\n case types.SIDE_NAV_UPDATE:\r\n draft.sideNavItems = [...draft.sideNavItems, ...action.items]\r\n break\r\n case types.HEADER_TITLE_UPDATE:\r\n draft.headerTitle = action.title\r\n break\r\n case types.FETCH_FS_ERROR:\r\n break\r\n case types.FETCH_FS_PENDING:\r\n break\r\n case types.FETCH_FS_SUCCESS:\r\n draft.dataFirstSetting = { ...action.data }\r\n break\r\n case types.INIT_FS_DATA:\r\n if (Object.keys(draft.dataFirstSetting)?.length === 0) {\r\n draft.dataFirstSetting = { ...action.data }\r\n }\r\n break\r\n case types.HEADER_QUICKOVERVIEW_UPDATE:\r\n draft.quickOverviewData = action.data\r\n break\r\n case types.NAVBAR_UITYPE_UPDATE:\r\n draft.uiNavbarType = action.data\r\n break\r\n default:\r\n return state\r\n }\r\n })\r\n","import * as types from \"./Login.constants\"\r\nimport produce from \"immer\"\r\n\r\nconst initialState = {\r\n loading: false,\r\n}\r\n\r\nexport const loginReducer = (state = initialState, action) =>\r\n produce(state, draft => {\r\n // console.warn(\"loginReducer\", state, draft, action)\r\n switch (action.type) {\r\n case types.FETCH_LOGIN_PENDING:\r\n draft.loading = true\r\n break\r\n case types.FETCH_LOGIN_SUCCESS:\r\n draft.loading = false\r\n break\r\n case types.FETCH_LOGIN_ERROR:\r\n draft.loading = false\r\n break\r\n default:\r\n return state\r\n }\r\n })\r\n","import { combineReducers } from \"redux\"\r\nimport { AppReducer } from \"src/App/App.reducer\"\r\nimport { loginReducer } from \"src/pages/Login/Login.reducer\"\r\n\r\nconst rootReducer = combineReducers({\r\n app: AppReducer,\r\n login: loginReducer,\r\n})\r\n\r\nexport default rootReducer\r\n","import { createStore, applyMiddleware, compose } from \"redux\"\r\nimport thunk from \"redux-thunk\"\r\nimport rootReducer from \"src/reducer/reducer\"\r\nconst composeEnhancers =\r\n typeof window === \"object\" &&\r\n process.env.NODE_ENV === \"development\" &&\r\n (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\r\n ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({})\r\n : compose\r\nconst enhancer = composeEnhancers(applyMiddleware(thunk))\r\nexport const store = createStore(rootReducer, enhancer)\r\n","import { HJson, HCF, HLocalStorage, HUtils, HEE } from \"@macashipo/mlib\"\r\nimport K, { KStorage } from \"src/helpers/K\"\r\n\r\nexport const KAuth = {\r\n fnUpdateAuthInfo: \"fnUpdateAuthInfo\",\r\n eeUpdateAuthInfo: \"eeUpdateAuthInfo\",\r\n}\r\nexport const FlowParseAuthInfo = authInfo => {\r\n console.warn(\"parse auth info\", authInfo)\r\n if (authInfo) {\r\n if (authInfo.configs) {\r\n let _configs = HJson.getObj(authInfo.configs, {})\r\n if (_configs && _configs.home_url) {\r\n HCF.setCF(K.KConfigApp.home_url, _configs.home_url)\r\n HLocalStorage.saveString(KStorage.HomeURL, _configs.home_url)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const FlowUpdateAuthInfo = ({ name, avatar } = {}) => {\r\n let _authInfo = HLocalStorage.getObj(KStorage.AuthInfo)\r\n if (_authInfo) {\r\n if (name && _authInfo.name != name) {\r\n _authInfo.name = name\r\n }\r\n if (avatar && _authInfo.avatar_url != avatar) {\r\n _authInfo.avatar_url = avatar\r\n }\r\n HLocalStorage.saveObj(KStorage.AuthInfo, _authInfo)\r\n HUtils.runFuntion(HCF.CF, KAuth.fnUpdateAuthInfo, [_authInfo])\r\n HEE.emit(KAuth.eeUpdateAuthInfo, _authInfo)\r\n }\r\n}\r\n","const HConstant = {\r\n Modules: {\r\n FnList: {\r\n runAfterInit: \"runAfterInit\",\r\n },\r\n },\r\n ConfigAppExt: {\r\n footer: \"footer\",\r\n dateFormat: \"dateFormat\",\r\n urlForLogException: \"urlForLogException\",\r\n },\r\n ConfigApp: {\r\n FnList: {\r\n onAfterInit: \"onAfterInit\",\r\n },\r\n },\r\n Dev: {\r\n Key: {\r\n _DEBUG_: \"_DEBUG_\",\r\n },\r\n },\r\n Api: {\r\n Name: {\r\n List: \"List\",\r\n UpdateFields: \"UpdateFields\",\r\n },\r\n },\r\n HConfig: {\r\n FnList: {\r\n addPublicRoutes: \"addPublicRoutes\",\r\n addPrivateRoutes: \"addPrivateRoutes\",\r\n registerAfterLogin: \"registerAfterLogin\",\r\n registerExtSettingParts: \"registerExtSettingParts\",\r\n registerHeaderTitle: \"registerHeaderTitle\",\r\n dispatchFromStore: \"dispatchFromStore\",\r\n updateHeaderTitle: \"updateHeaderTitle\",\r\n },\r\n },\r\n MyTableCell: {\r\n FnList: {\r\n onUpdateValue: \"onUpdateValue\",\r\n },\r\n // UIRowField: {\r\n // _UI_JustUpdated: \"_UI_JustUpdated\",\r\n // },\r\n },\r\n MyFormControl: {\r\n FnList: {\r\n onUpdateValue: \"onUpdateValue\",\r\n onUpdateValueMulti: \"onUpdateValueMulti\",\r\n },\r\n },\r\n Auth: {\r\n dispatchLoginSuccess: \"dispatchLoginSuccess\",\r\n },\r\n ExtModulesName: {\r\n sidenavitems: \"sidenavitems\",\r\n },\r\n ScreenConfig: {\r\n Header: {\r\n showProjectHeader: \"showProjectHeader\",\r\n showAddNew: \"showAddNew\",\r\n },\r\n Table: {\r\n isCheckInvalidProject: \"isCheckInvalidProject\",\r\n tableProps: \"tableProps\",\r\n \"tableProps.hover\": \"hover\",\r\n hasExpand: \"hasExpand\",\r\n showDetails: \"showDetails\",\r\n canDelete: \"canDelete\",\r\n },\r\n Detail: {\r\n titleField: \"titleField\",\r\n controller: \"controller\",\r\n screenCode: \"screenCode\",\r\n queryFromParent: \"queryFromParent\",\r\n },\r\n },\r\n}\r\n\r\nexport default HConstant\r\n","export const FETCH_LOGIN_PENDING = \"FETCH_LOGIN_PENDING\"\r\nexport const FETCH_LOGIN_SUCCESS = \"FETCH_LOGIN_SUCCESS\"\r\nexport const FETCH_LOGIN_ERROR = \"FETCH_LOGIN_ERROR\"\r\n","import React from \"react\"\r\nimport styled from \"styled-components\"\r\nimport classNames from \"classnames\"\r\n\r\ninterface IProps {\r\n id: string\r\n classNameWrap?: any\r\n renderMore?: any\r\n idHeader?: any\r\n className?: any\r\n style?: any\r\n type: string\r\n}\r\n\r\ninterface IState {\r\n isShow?: boolean\r\n}\r\nclass MWEaseLayout extends React.Component {\r\n state: any = {\r\n isShow: false,\r\n opts: {},\r\n }\r\n componentDidMount() {\r\n const { type } = this.props\r\n MWEaseLayout.Helpers.initComponent(type, this)\r\n }\r\n show = (opts: any) => {\r\n this.setState(\r\n {\r\n isShow: true,\r\n },\r\n () => {\r\n this.hideScrollContent(true)\r\n window.document.body.classList.add(\"modal-custom-style\")\r\n const navBar = document.getElementById(\"sg-navbar-mobile\")\r\n if (navBar) {\r\n navBar.classList.add(\"hide\")\r\n }\r\n }\r\n )\r\n }\r\n hide = ({ skipHideScrollContent = false }: any = {}) => {\r\n this.setState(\r\n {\r\n isShow: false,\r\n },\r\n () => {\r\n if (skipHideScrollContent !== true) {\r\n this.hideScrollContent(false)\r\n window.document.body.classList.remove(\"modal-custom-style\")\r\n const navBar = document.getElementById(\"sg-navbar-mobile\")\r\n if (navBar) {\r\n navBar.classList.remove(\"hide\")\r\n }\r\n }\r\n }\r\n )\r\n }\r\n hideScrollContent = (v = false) => {\r\n const { idHeader } = this.props\r\n const html: any = document.getElementsByTagName(\"html\")\r\n const header = document.getElementById(idHeader)\r\n if (!html) {\r\n return\r\n }\r\n if (html[0]) {\r\n if (v === false) {\r\n html[0].style.overflowY = \"scroll\"\r\n } else {\r\n html[0].style.overflowY = \"hidden\"\r\n }\r\n }\r\n if (header) {\r\n if (v === false) {\r\n header?.classList.remove(\"only-logo\")\r\n } else {\r\n header?.classList.add(\"only-logo\")\r\n }\r\n }\r\n }\r\n render() {\r\n const { children, id, classNameWrap, renderMore } = this.props\r\n const { isShow } = this.state\r\n return (\r\n \r\n {isShow && (\r\n <>\r\n {children}\r\n {renderMore && renderMore()}\r\n \r\n )}\r\n \r\n )\r\n }\r\n static Helpers = {\r\n types: {\r\n component: \"component\",\r\n },\r\n initComponent: (type, component) => {\r\n if (type && component) {\r\n MWEaseLayout.Helpers.components[type] = component\r\n }\r\n if (!type) {\r\n MWEaseLayout.Helpers.components[\"component\"] = component\r\n }\r\n },\r\n components: {},\r\n }\r\n static open = () => {\r\n MWEaseLayout.Helpers.components[\"component\"].show()\r\n }\r\n static close = (opts: any = {}) => {\r\n MWEaseLayout.Helpers.components[\"component\"].hide({ ...opts })\r\n }\r\n static openWithType = type => {\r\n if (MWEaseLayout.Helpers.components[type]) {\r\n MWEaseLayout.Helpers.components[type].show()\r\n }\r\n }\r\n static closeWithType = (type, opts: any = {}) => {\r\n if (MWEaseLayout.Helpers.components[type]) {\r\n MWEaseLayout.Helpers.components[type].hide({\r\n ...opts,\r\n })\r\n }\r\n }\r\n}\r\nconst Wrap = styled.div`\r\n &.overlay {\r\n height: 100%;\r\n position: fixed;\r\n z-index: 11;\r\n top: 65px;\r\n background-color: #fff;\r\n overflow-x: hidden;\r\n transition: 0.7s;\r\n padding: 0;\r\n opacity: 1;\r\n left: -100%;\r\n width: 100%;\r\n &.header-no-search {\r\n top: 60px;\r\n }\r\n &.wrap-order-detail {\r\n top: 60px;\r\n padding-top: 0;\r\n background: #f8f8f8;\r\n }\r\n }\r\n &.show {\r\n width: 100%;\r\n padding-top: 30px;\r\n opacity: 1;\r\n left: 0;\r\n padding-bottom: 70px;\r\n }\r\n & .hide {\r\n display: none;\r\n }\r\n @media (max-width: 820px) {\r\n &.overlay {\r\n top: 0px !important;\r\n }\r\n &.show {\r\n padding-top: 15px;\r\n }\r\n }\r\n`\r\nexport default MWEaseLayout\r\n","import React from \"react\"\r\nimport { isArray } from \"src/core/helpers/utils\"\r\nimport Ext_Control from \"./Ext_Control\"\r\nimport { HIs, HUI } from \"@macashipo/mlib\"\r\nclass Select_Ext extends Ext_Control {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n value: null, //chua thay doi gia tri\r\n }\r\n\r\n //init default\r\n if (\r\n this.props.controlOpts?.defaultCheckAll === true &&\r\n this.props.controlOpts.handleUpdateDefaultValues\r\n ) {\r\n let _source = this.getSourceData() || []\r\n let _objDefault = {\r\n [this.getFieldName()]: _source.map((v: any, i) => {\r\n return v.Value\r\n }),\r\n }\r\n console.warn(\"handleUpdateDefaultValues:\", _source, _objDefault)\r\n this.props.controlOpts.handleUpdateDefaultValues(_objDefault)\r\n this.forceUpdate()\r\n var a =\r\n this.props.controlOpts.getDefaultValues &&\r\n this.props.controlOpts.getDefaultValues()\r\n console.warn(\"handleUpdateDefaultValues after:\", a)\r\n }\r\n HUI.initInnerRef(this)\r\n }\r\n setValue = v => {\r\n console.warn(\"setValue:\", v)\r\n this.onCheckOption({\r\n Value: v,\r\n })\r\n }\r\n getValueState = () => {\r\n return this.state.value\r\n }\r\n getValueForChange = () => {\r\n const { value } = this.state\r\n if (!this.getMulti() && HIs.isArray(value)) {\r\n if (value.length > 0) {\r\n return value[0]\r\n }\r\n return \"\"\r\n }\r\n return value\r\n }\r\n getThisValue = () => {\r\n const { value } = this.state\r\n if (value !== null) {\r\n return value\r\n } else {\r\n let _defaultChecks = this.getDefaultValueCheck()\r\n // console.warn(\"getThisValue from default:\", _defaultChecks)\r\n if (_defaultChecks && isArray(_defaultChecks)) {\r\n //tao object moi de tranh viec su dung tren obj default values\r\n return [..._defaultChecks]\r\n } else if (\r\n // Truong hop chi co 1 gia tri\r\n this.getPropsSelect2ByKey(\"simpleValue\") &&\r\n typeof _defaultChecks !== \"object\"\r\n ) {\r\n return [_defaultChecks]\r\n } else if (!this.getMulti() && typeof _defaultChecks !== \"object\") {\r\n return [_defaultChecks]\r\n }\r\n }\r\n return []\r\n }\r\n getDefaultValueCheck = () => {\r\n const defaultValue = this.props.defaultValue\r\n // console.warn(\"getDefaultValueCheck:\", defaultValue)\r\n return defaultValue || []\r\n }\r\n getMulti = () => {\r\n const { controlOpts } = this.props\r\n if (controlOpts && controlOpts.multi === false) {\r\n return false\r\n }\r\n return true //default true\r\n }\r\n getInLine = () => {\r\n const { controlOpts } = this.props\r\n if (controlOpts && controlOpts.inline === true) {\r\n return true\r\n }\r\n return false //default false\r\n }\r\n getFieldName = () => {\r\n const { controlOpts } = this.props\r\n if (controlOpts && controlOpts.fieldName) {\r\n return controlOpts.fieldName\r\n }\r\n return \"\"\r\n }\r\n getSourceData = () => {\r\n const { controlOpts } = this.props\r\n if (controlOpts && controlOpts.sourceData) {\r\n return controlOpts.sourceData\r\n }\r\n return []\r\n }\r\n getOnUpdateValue = () => {\r\n const { controlOpts } = this.props\r\n if (controlOpts && controlOpts.onUpdateValue) {\r\n return controlOpts.onUpdateValue\r\n }\r\n return () => {\r\n console.warn(\"Missing onUpdateValue on controlOpts\", this.props)\r\n }\r\n }\r\n getPropsSelect2ByKey = key => {\r\n const { controlOpts } = this.props\r\n const morePropsSelect2 = controlOpts?.morePropsSelect2\r\n if (morePropsSelect2?.[key]) {\r\n return morePropsSelect2[key]\r\n }\r\n return null\r\n }\r\n isChecked = option => {\r\n const thisValue = this.getThisValue()\r\n if (thisValue !== null && thisValue !== undefined) {\r\n if (HIs.isArray(thisValue) && thisValue.indexOf(option.Value) > -1) {\r\n return true\r\n } else if (thisValue.toString() === option.Value) {\r\n // 3 và \"3\"\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n clearAll = () => {\r\n const onUpdateValue = this.getOnUpdateValue()\r\n this.setState(\r\n {\r\n value: [],\r\n },\r\n () => {\r\n if (onUpdateValue) {\r\n onUpdateValue(this.state.value)\r\n }\r\n }\r\n )\r\n }\r\n onCheckOption = option => {\r\n let _value = this.getThisValue()\r\n const onUpdateValue = this.getOnUpdateValue()\r\n const isMulti = this.getMulti()\r\n console.warn(\"onCheckOption:\", isMulti, _value)\r\n if (isMulti === false) {\r\n if (this.getPropsSelect2ByKey(\"simpleValue\")) {\r\n //TH co 1 value khong truyen dang mang\r\n _value = option?.Value\r\n } else {\r\n _value = [option.Value]\r\n }\r\n } else {\r\n if (this.isChecked(option)) {\r\n let _index = _value.indexOf(option.Value)\r\n _value.splice(_index, 1)\r\n } else {\r\n _value.push(option.Value)\r\n }\r\n }\r\n\r\n this.setState(\r\n {\r\n value: _value,\r\n },\r\n () => {\r\n let _valueForChange = this.getValueForChange()\r\n console.warn(\"onCheckOption after:\", _valueForChange)\r\n if (onUpdateValue) {\r\n onUpdateValue(_valueForChange)\r\n }\r\n }\r\n )\r\n }\r\n render() {\r\n return
    \r\n }\r\n}\r\n\r\nexport default Select_Ext\r\n","import React from \"react\"\r\nimport Ext_Control from \"./Ext_Control\"\r\nimport { HUI, HIs } from \"@macashipo/mlib\"\r\nconst NotPropsInput = [\r\n \"controlOpts\",\r\n \"innerRef\",\r\n \"controlRef\",\r\n \"fieldName\",\r\n \"isControlFirst\",\r\n \"hint\",\r\n \"onUpdateValue\",\r\n \"label\",\r\n]\r\nconst PropsInput = [\r\n \"placeholder\",\r\n \"autoComplete\",\r\n \"autoFocus\",\r\n \"disabled\",\r\n \"rows\",\r\n \"onKeyDown\",\r\n \"onChange\",\r\n]\r\nclass Ext_Input extends Ext_Control {\r\n _cInput: any = null\r\n constructor(props) {\r\n super(props)\r\n HUI.initInnerRef(this)\r\n }\r\n getRefInput = () => {\r\n return this._cInput\r\n }\r\n getInputValue = () => {\r\n if (this._cInput) {\r\n return this._cInput.value\r\n }\r\n return \"\"\r\n }\r\n setValue = v => {\r\n console.warn(\"setValue:\", v)\r\n if (this._cInput) {\r\n if (HIs.isString(v)) {\r\n this._cInput.value = v\r\n } else if (HIs.isBoolean(v)) {\r\n this._cInput.checked = v\r\n }\r\n this.onUpdateValue(v)\r\n this.onAfterSetValue(v)\r\n }\r\n }\r\n onAfterSetValue = v => {}\r\n getPropsInput = () => {\r\n let _moreProps = {\r\n autoComplete: \"off\",\r\n onBlur: (ev: any) => {},\r\n innerRef: r => {\r\n this._cInput = r\r\n },\r\n }\r\n let _keys = Object.keys(this.props)\r\n for (let k of _keys) {\r\n if (k === \"controlOpts\") {\r\n // _moreProps = { ..._moreProps, ...this.props[k] }\r\n if (this.props.controlOpts) {\r\n for (let kk of Object.keys(this.props.controlOpts)) {\r\n if (PropsInput.indexOf(kk) !== -1) {\r\n _moreProps[kk] = this.props.controlOpts[kk]\r\n }\r\n }\r\n }\r\n } else if (NotPropsInput.indexOf(k) === -1) {\r\n _moreProps[k] = this.props[k]\r\n }\r\n }\r\n // console.warn(\"_moreProps:\", _moreProps, this.props, this.props.controlOpts)\r\n return {\r\n ..._moreProps,\r\n ...this.getAttributes4Selenium(),\r\n }\r\n }\r\n render() {\r\n return
    \r\n }\r\n}\r\n\r\nexport default Ext_Input\r\n","import _extends from \"@babel/runtime/helpers/esm/extends\"\r\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\"\r\nimport React from \"react\"\r\nimport PropTypes from \"prop-types\"\r\nimport classNames from \"classnames\"\r\nimport { mapToCssModules, tagPropType } from \"reactstrap/src/utils\"\r\nvar propTypes = {\r\n color: PropTypes.string,\r\n pill: PropTypes.bool,\r\n tag: tagPropType,\r\n innerRef: PropTypes.oneOfType([\r\n PropTypes.object,\r\n PropTypes.func,\r\n PropTypes.string,\r\n ]),\r\n children: PropTypes.node,\r\n className: PropTypes.string,\r\n cssModule: PropTypes.object,\r\n style: PropTypes.object,\r\n}\r\nvar defaultProps = {\r\n color: \"secondary\",\r\n pill: false,\r\n tag: \"span\",\r\n}\r\n\r\nvar Badge = function Badge(props) {\r\n var className = props.className,\r\n cssModule = props.cssModule,\r\n color = props.color,\r\n innerRef = props.innerRef,\r\n pill = props.pill,\r\n Tag = props.tag,\r\n attributes = _objectWithoutPropertiesLoose(props, [\r\n \"className\",\r\n \"cssModule\",\r\n \"color\",\r\n \"innerRef\",\r\n \"pill\",\r\n \"tag\",\r\n ])\r\n\r\n var classes = mapToCssModules(\r\n classNames(\r\n className,\r\n \"badge\",\r\n \"bg-\" + color,\r\n pill ? \"rounded-pill\" : false\r\n ),\r\n cssModule\r\n )\r\n\r\n if (attributes.href && Tag === \"span\") {\r\n Tag = \"a\"\r\n }\r\n\r\n return /*#__PURE__*/ React.createElement(\r\n Tag,\r\n _extends({}, attributes, {\r\n className: classes,\r\n style: props.style,\r\n ref: innerRef,\r\n })\r\n )\r\n}\r\n\r\nBadge.propTypes = propTypes\r\nBadge.defaultProps = defaultProps\r\nexport default Badge\r\n","import { Alert } from \"reactstrap\"\r\nexport default Alert\r\n","import { MyLoading } from \"@macashipo/mlib\"\r\nexport default MyLoading\r\n","import MyModal from \"./MyModal\"\r\nconst MyDialog = {\r\n show({ title = \"\", msg = \"\", onClickOK = (cModal: any) => {} } = {}) {\r\n MyModal.showMyDialog({\r\n title: title,\r\n component: msg,\r\n modalCentered: true,\r\n size: \"md\",\r\n showFooter: true,\r\n showFooterOK: true,\r\n backdrop: \"static\",\r\n onClickOK: cModal => {\r\n if (onClickOK) {\r\n onClickOK(cModal)\r\n }\r\n if (cModal.hide) {\r\n cModal.hide()\r\n }\r\n },\r\n })\r\n },\r\n}\r\n\r\nexport default MyDialog\r\n","import RcTooltip from \"rc-tooltip\"\r\nimport React from \"react\"\r\nimport \"rc-tooltip/assets/bootstrap.css\"\r\nimport \"./m-popover.css\"\r\nimport { isOnScreen } from \"src/core/helpers/utils\"\r\nfunction RcPopover(props) {\r\n const [visible, setVisible] = React.useState(false)\r\n const { disabled } = props\r\n if (disabled) {\r\n return props.children\r\n }\r\n if (props.overlay)\r\n return (\r\n {\r\n setVisible(v)\r\n }}\r\n overlayClassName=\"m-popover\"\r\n onPopupAlign={(node, align) => {\r\n if (props.autoScrollIntoViewWhenOutOfScreen) {\r\n if (!isOnScreen(node)) {\r\n console.warn(\"onPopupAlign:\", node, align, node.offsetTop)\r\n node.scrollIntoView({ behavior: \"smooth\" })\r\n }\r\n }\r\n }}\r\n {...props}\r\n overlay={() => {\r\n // console.warn(\"typeof \", typeof props.overlay)\r\n if (typeof props.overlay == \"function\") {\r\n return props.overlay({\r\n hide: () => {\r\n setVisible(false)\r\n },\r\n hidePopover: () => {\r\n setVisible(false)\r\n },\r\n })\r\n }\r\n return props.overlay\r\n }}\r\n >\r\n {props.children}\r\n \r\n )\r\n return props.children\r\n}\r\n\r\nexport default RcPopover\r\n","import React from \"react\"\r\nimport styled from \"styled-components\"\r\n\r\ninterface IProps {}\r\ninterface IState {\r\n isShow?: boolean\r\n opts?: IConfigModal\r\n}\r\ninterface IConfigModal {}\r\nclass GlobalLockScreen extends React.Component {\r\n state: any = {\r\n isShow: true,\r\n opts: {},\r\n }\r\n componentDidMount() {\r\n GlobalLockScreen.Helpers.initComponent(this)\r\n }\r\n show = (opts: any) => {\r\n this.setState({\r\n isShow: true,\r\n opts: { ...opts },\r\n })\r\n }\r\n hide = () => {\r\n this.setState({\r\n isShow: false,\r\n opts: {},\r\n })\r\n }\r\n render() {\r\n const { isShow } = this.state\r\n if (isShow) {\r\n return \r\n }\r\n return <>\r\n }\r\n static Helpers = {\r\n initComponent: component => {\r\n if (component) {\r\n GlobalLockScreen.Helpers.component = component\r\n }\r\n },\r\n component: null as any,\r\n }\r\n static show = () => {\r\n if (GlobalLockScreen.Helpers.component) {\r\n GlobalLockScreen.Helpers.component.show()\r\n }\r\n }\r\n static hide = () => {\r\n if (GlobalLockScreen.Helpers.component) {\r\n GlobalLockScreen.Helpers.component.hide()\r\n }\r\n }\r\n}\r\nconst Wrap = styled.div`\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n z-index: 999999;\r\n background-color: transparent;\r\n animation: bganimation 15s linear infinite;\r\n @keyframes bganimation {\r\n 0% {\r\n background-color: transparent;\r\n }\r\n 25% {\r\n background-color: #ffffff66;\r\n }\r\n 50% {\r\n background-color: #ffffff99;\r\n }\r\n 75% {\r\n background-color: #ffffff66;\r\n }\r\n 100% {\r\n background-color: transparent;\r\n }\r\n }\r\n`\r\nexport default GlobalLockScreen\r\n"],"sourceRoot":""}