{"version":3,"sources":["components/admin_left_menu/index.js","components/partner_left_menu/index.js","components/search_button/index.js","components/clear_button/index.js","components/app_context/index.js","components/empty_row/index.js","components/loading_row/index.js","components/format_number/index.js","components/save_button/index.js","components/close_button/index.js","components/loading_button/index.js","components/upload_img/index.js","components/upload_product_img/index.jsx","components/icon_button/index.js","components/avatar_row/index.js","components/notification/index.js","components/input_select/index.js","components/pagination/index.js","components/read_excel_button/index.js","components/number_up_down/index.js","components/detail_row/index.jsx","components/shopee_product_avatar/index.jsx","components/product_status/index.jsx","components/auth_admin_view/index.jsx","components/action_row/index.jsx","components/action_item/index.jsx","components/category_dropdown_tree/index.jsx","components/modal_popup/index.jsx","components/custom_select/index.jsx","components/check_box/CheckBox.jsx","components/upload_file_button/UploadFileButton.jsx","services/admin/category_service.js","services/admin/attribute_service.js","services/admin/children_attribute_service.js","pages/admin/category_page/components/filter/index.js","pages/admin/category_page/components/table/index.js","pages/admin/category_page/components/modal_add/index.js","pages/admin/category_page/components/modal_edit/index.js","pages/admin/category_page/index.js","pages/admin/product_page/components/filter/index.js","pages/admin/product_page/components/table/index.js","pages/admin/product_page/components/modal_add/index.js","pages/admin/product_page/components/modal_edit_price/index.js","pages/admin/product_page/components/modal_edit_qty/index.js","pages/admin/product_page/components/modal_edit/index.js","pages/admin/product_page/components/modal_edit_qty_excel/index.js","pages/admin/product_page/components/modal_edit_status/ModalEditStatus.jsx","pages/admin/product_page/index.js","pages/admin/partner_group_page/components/table/index.js","pages/admin/partner_group_page/components/modal_add/index.js","pages/admin/partner_group_page/components/modal_edit/index.js","pages/admin/partner_group_page/index.js","pages/admin/partner_page/components/filter/index.js","pages/admin/partner_page/components/table/index.js","pages/admin/partner_page/components/modal_add/index.js","pages/admin/partner_page/components/modal_edit/index.js","pages/admin/partner_page/components/modal_set_pwd/index.js","pages/admin/partner_page/components/modal_recharge/index.js","pages/admin/partner_page/components/balance_table/index.jsx","pages/admin/partner_page/components/order_table/index.jsx","pages/admin/partner_page/components/shopee_table/index.jsx","pages/admin/partner_page/components/detail/index.jsx","pages/admin/partner_page/components/info_block/index.jsx","pages/admin/partner_page/components/freeship_table/FreeShipTable.jsx","pages/admin/partner_page/components/modal_children/ModalChildren.jsx","pages/admin/partner_page/index.js","pages/admin/dashboard_page/components/best_selling_product/index.jsx","pages/admin/dashboard_page/components/order_block/index.jsx","pages/admin/dashboard_page/components/partner_chart/index.jsx","pages/admin/dashboard_page/components/revenue_profit/index.jsx","pages/admin/dashboard_page/components/main_block/index.jsx","pages/admin/dashboard_page/components/welcome/index.jsx","pages/admin/dashboard_page/index.js","pages/admin/attribute_page/components/table_attr/index.js","pages/admin/attribute_page/components/table_attr_child/index.js","pages/admin/attribute_page/components/modal_add_attr/index.js","pages/admin/attribute_page/components/moda_add_attr_child/index.js","pages/admin/attribute_page/components/modal_edit_attr/index.js","pages/admin/attribute_page/components/modal_edit_attr_child/index.js","pages/admin/attribute_page/index.js","pages/admin/order_page/components/filter/index.jsx","pages/admin/order_page/components/table/index.jsx","pages/admin/order_page/components/modal_update_status/index.jsx","pages/admin/order_page/components/modal_edit_warehouse_note/index.jsx","pages/admin/order_page/components/modal_edit/index.jsx","pages/admin/order_page/index.jsx","pages/admin/statistic_partner_order/components/filter/index.jsx","pages/admin/statistic_partner_order/components/table/index.jsx","pages/admin/statistic_partner_order/index.jsx","pages/admin/shipping_unit_page/components/table/index.js","pages/admin/shipping_unit_page/components/modal_add/index.js","pages/admin/shipping_unit_page/components/modal_edit/index.js","pages/admin/shipping_unit_page/index.js","pages/admin/user_page/components/modal_add_user/index.js","pages/admin/user_page/components/modal_edit_user/index.js","pages/admin/user_page/components/table/index.js","pages/admin/user_page/components/filter/index.js","pages/admin/user_page/components/modal_set_pwd_user/index.js","pages/admin/user_page/index.js","pages/admin/role_page/components/modal_add/index.js","pages/admin/role_page/components/modal_edit/index.js","pages/admin/role_page/components/modal_permission/index.js","pages/admin/role_page/components/table/index.js","pages/admin/role_page/index.js","pages/admin/popup_page/components/filter/index.js","pages/admin/popup_page/components/table/index.js","pages/admin/popup_page/components/modal_add/index.js","pages/admin/popup_page/components/modal_edit/index.js","pages/admin/popup_page/index.js","pages/admin/user_info_page/components/profile/index.js","pages/admin/user_info_page/components/password/index.js","pages/admin/user_info_page/index.js","pages/admin/setting_page/components/setting_affiliate/SettingAffiliate.jsx","pages/admin/setting_page/index.js","pages/admin/product_from_excel/index.jsx","pages/admin/login_page/index.jsx","pages/admin/freeship_page/components/filter/index.jsx","pages/admin/freeship_page/components/modal_add/index.jsx","pages/admin/freeship_page/components/table/index.jsx","pages/admin/freeship_page/index.jsx","AdminLayout.js","pages/partner/customer_page/components/filter/index.js","pages/partner/customer_page/components/table/index.js","pages/partner/customer_page/components/modal_add/index.js","pages/partner/customer_page/components/modal_edit/index.js","pages/partner/customer_page/index.js","pages/partner/dashboard_page/components/order_block/index.jsx","pages/partner/dashboard_page/components/partner_info/index.jsx","pages/partner/dashboard_page/components/message/index.jsx","pages/partner/dashboard_page/components/revenue/index.jsx","pages/partner/dashboard_page/index.js","pages/partner/product_page/components/filter/index.js","pages/partner/product_page/components/list/index.js","pages/partner/product_page/components/modal_add_to_card/index.js","pages/partner/product_page/components/modal_detail/index.js","pages/partner/product_page/components/modal_order/index.js","pages/partner/product_page/index.js","pages/partner/product_checking_page/components/filter/index.js","pages/partner/product_checking_page/components/table/index.js","pages/partner/product_checking_page/index.js","pages/partner/order_page/components/filter/index.js","pages/partner/order_page/components/table/index.js","pages/partner/order_page/components/modal_edit_warehouse_note/index.js","pages/partner/order_page/index.js","pages/partner/profile_page/components/profile/index.js","pages/partner/profile_page/components/password/index.js","pages/partner/profile_page/index.js","pages/partner/balance_history_page/components/filter/index.js","pages/partner/balance_history_page/components/table/index.js","pages/partner/balance_history_page/index.js","pages/partner/partner_shop/components/modal_add/index.jsx","pages/partner/partner_shop/components/modal_edit/index.jsx","pages/partner/partner_shop/components/table/index.jsx","pages/partner/partner_shop/index.jsx","pages/partner/order_from_shopee/components/filter/index.jsx","pages/partner/order_from_shopee/components/table/index.jsx","pages/partner/order_from_shopee/index.jsx","pages/partner/register_page/index.jsx","pages/partner/login_page/index.jsx","pages/partner/children_page/ChildrenPage.jsx","PartnerLayout.js","App.js","reportWebVitals.js","index.js"],"names":["AdminLeftMenu","props","className","to","right","onClick","onLogout","defaultProps","PartnerLeftMenu","SearchButton","type","ClearButton","AppContext","React","createContext","EmptyRow","colSpan","title","LoadingRow","role","FormatNumber","children","maxDigit","toLocaleString","maximumFractionDigits","SaveButton","disabled","isBusy","icon","CloseButton","LoadingButton","useState","setIsBusy","apiUrl","window","UploadImg","fileInput","useRef","uploadUrl","isPartner","style","display","accept","ref","onChange","e","files","target","length","file","name","size","formData","FormData","append","url","axios","post","then","res","data","onCompleted","backgroundImage","imgUrl","thumbnailSize","current","click","UploadProductImg","me","IconButton","variant","undefined","text","AvatarRow","fullUrl","baseUrl","duration","Notification","success","msg","store","addNotification","message","insert","container","animationIn","animationOut","dismiss","pauseOnHover","warning","danger","confirm","ok","cancel","Swal","fire","showCloseButton","showCancelButton","confirmButtonText","cancelButtonText","result","isConfirmed","DismissReason","confirmHtml","objText","str","html","InputSelect","isChecked","checked","value","parseInt","renderControl","options","isVertical","map","item","index","id","htmlFor","label","renderContainer","defaultValue","Pagination","pageBreak","Math","floor","displayPage","onPrevClick","currentPage","onNextClick","onFirstClick","onLastClick","totalPage","onPageChange","renderNum","start","end","i","push","isHideIfOnePage","renderHtml","ReadExcelButton","NumberUpDown","placeholder","max","step","currentValue","setCurrentValue","useEffect","inputValue","currentVal","newValue","allowNegative","decimalScale","onValueChange","val","min","DetailRow","titleColumn","childrenColumn","ShopeeProductAvatar","getImgUrl","renderStatus","statusId","ProductStatus","AuthAdminView","appSettings","useContext","rights","some","n","renderChildrent","ActionRow","ActionItem","getCategoryLevel","parentId","catName","lst","filter","ParentId","forEach","levelCatName","CategoryName","Label","CategoryId","cat","CategoryDropdownTree","isClearable","categories","setCategories","category","setCategory","cats","tempList","selectedValue","classNamePrefix","isSearchable","ModalPopup","partnerPopupId","content","onSave","onClose","isShow","Modal","show","onHide","backdrop","centered","onExited","Header","closeButton","Title","Body","dangerouslySetInnerHTML","__html","Footer","handleSave","CustomSelect","noOptionsMessage","newValues","detaultProps","CheckBox","UploadFileButton","finally","CategoryService","filters","keyword","get","getDropdown","create","getById","categoryId","update","delete","AttributeService","getAll","attributeId","ChildrenAttributeService","getByAttribute","childAttributeId","Filter","onSearch","setKeyword","handleSearch","autoFocus","onKeyDown","key","autoComplete","Table","CategoryNote","ProductCount","CreatedDate","CreatedTime","StatusId","onEdit","onDelete","renderTable","schema","yup","shape","required","integer","Note","statusOptions","ModalAdd","useForm","resolver","yupResolver","defaultValues","control","register","handleSubmit","reset","errors","formState","onSubmit","render","field","parent","rows","ModalEdit","setValue","onShow","info","CategoryPage","isShowModalCategoryAdd","setIsShowModalCategoryAdd","isShowModalCategoryEdit","setEditIsShowModalCategoryEdit","categoryDropdown","setCategoryDropdown","categoryInfo","setCategoryInfo","setFilters","document","getElementById","innerText","loadCategoryDropdown","IsSuccess","Result","reloadCategory","params","newFilters","productTypes","catId","typeId","productStatus","setProductStatus","productStatusList","setProductStatusList","productType","setProductType","setCatId","proStatusList","ProductStatusId","ProductStatusName","onParentClick","onAvatarClick","pageItem","pageIndex","ProductId","IsParent","ProductCode","AvatarUrl","urlObj","ProductName","OutputPrice","Quantity","onEditStatus","onEditPrice","onEditQty","invalidValue","InputPrice","oneOf","Detail","ProductPrices","SubProducts","ProductChildrentAttribute","getCombn","arr","ans","otherCases","slice","j","idArr","getValues","childrenProduct","setChildrenProduct","qty","setQty","sttList","onChangeChildExtName","ExtensionName","onChangeChildQty","groupList","GroupId","UnitPrice","proChildAttr","temp","x","concat","subProArr","ChildrentAttributes","ChildrenAttrList","href","ImageUrl","SupplierProductCode","modules","Config","editorCfg","GroupName","groupId","findIndex","handleGroupPriceChange","allAttribute","childAttr","Children","child","ChildrenAttributeId","ChildrenAttributeName","AttributeName","idList","combnArr","split","num","reqStr","join","attr_name","attr","trim","AttrName","initCombn","isMulti","AttributeId","list","ModalEditPrice","animation","ProductPriceId","PartnerGroupId","isParent","productId","defaultChecked","ModalEditQty","productList","onBlur","IsApplyForAll","ModalEditQtyExcel","setProductList","ID","TEN_SP","SO_LUONG","onNumberChange","defaultPropts","orderId","ModalEditStatus","statuses","productStatuses","setProductStatuses","statusList","downloadFile","downloadUrl","URL","createObjectURL","Blob","link","createElement","setAttribute","body","appendChild","remove","ProductPage","history","useHistory","isShowModalProAdd","setIsShowModalProAdd","modalEditPriceInfo","setModalEditPriceInfo","setGroupList","setAllAttribute","totalRow","pagination","setPagination","modalEditQtyInfo","setModalEditQtyInfo","modalEditInfo","setModalEditInfo","isShowModalEditQtyExcel","setIsShowModalEditQtyExcel","setParent","isShowViewer","setIsShowViewer","isShowModalEditStatus","setisShowModalEditStatus","editStatusInfo","setEditStatusInfo","viewerList","setViewerList","loadCategory","loadPropductStatus","loadPartnerGroup","loadAllAttrParentChildren","getParamString","strParam","newPagination","TotalRow","TotalPage","PageIndex","Data","reloadProduct","isKeepCurrent","Dropdown","Toggle","Menu","Item","responseType","renderParent","newFilter","product","pIndex","date","products","ProductList","isForAllChildrent","src","currentIndex","disableScroll","closeOnClickOutside","TotalPartner","DropShipFee","transform","_value","originalValue","Number","replaceAll","negative","c","setVal","vallue","PartnerGroupPage","partnerGroup","setPartnerGroup","editValue","setEditValue","isShowModalPartnerGroupEdit","setIsShowModalPartnerGroupEdit","isShowModalPartnerGroupAdd","setIsShowModalPartnerGroupAdd","formVal","groupOptions","setGroupOptions","group","setGroup","status","setStatus","onShowChildren","renderDetail","isSelected","detail","orders","partnerOrders","partnerOrderPagination","onPartnerOrderPageChange","PartnerId","balanceHistories","balanceHistoryPagination","onBalanceHistoryPageChange","balancePageItem","balancePageIndex","shops","shopeeShops","onRecharge","onSetPassword","onLogOut","onCloseDetail","onOpenDetail","FullName","Email","Phone","Balance","WardId","nullable","ShopName","email","Password","Address","ShipFeeId","GHTKToken","provinceId","onProvinceChange","province","ProvinceId","Prefix","ProvinceName","districtId","onDistrictChange","district","DistrictId","DistrictName","ward","WardName","setProvinceId","setDistrictId","partner","Partner","NewPassword","ModalSetPwd","partnerId","RechargeTypeId","Amount","ModalRecharge","BalanceTable","renderObjectValue","objectValue","renderType","amount","ObjectValue","PartnerBalanceHistoryId","OrderTable","orderStatusId","orderStatusName","order","OrderId","CustomerName","Products","SumOutputPrice","SumPartnerPrice","PartnerDropShipFee","OrderStatusId","OrderStatusName","ShopeeTable","Portrait","ShopId","UserName","PartnerShopId","FreeShipQty","PartnerCode","RefFullName","InfoBlock","FreeShipTable","TypeId","Qty","FreeShipTitle","FreeShipHistoryId","ModalChildren","partners","PartnerPage","setPartner","setProvince","setDistrict","setWard","isShowModalPartnerAdd","setIsShowModalPartnerAdd","isShowModalPartnerEdit","setIsShowModalPartnerEdit","partnerEdit","setPartnerEdit","partnerSetPwd","setPartnerSetPwd","partnerRecharge","setPartnerRecharge","allPartner","activePartner","inActivePartner","balance","setInfo","isShowModalChildren","setIsShowModalChildren","childrenPartners","setChildrenPartners","loadInfo","loadProvince","setPartnerOrderPagination","balanceHistoryPatination","setBalanceHistoryPatination","freeShipPatination","setFreeShipPatination","setPartnerOrders","setBalanceHistories","partnerDetail","setPartnerDetail","setShopeeShops","freeShips","setFreeShips","loadDistrict","loadWard","handleRowClick","newindex","newItem","prevIndex","prev","clearDetail","loadDetail","loadPartnerDetail","loadPartnerOrders","loadBalanceHistory","loadShopeeShop","loadFreeShip","reloadPartner","AllPartner","ActivePartner","InActivePartner","Provinces","Districts","Wards","reqInfo","newPartnerDetail","BestSellingProduct","paddingBottom","width","OrderBlock","header","percent","PartnerChart","colors","series","partnerGroups","color","PartnerGroupName","CountPartner","RevenueProfit","setSeries","chart","height","toolbar","plotOptions","bar","borderRadius","dataLabels","position","enabled","formatter","offsetY","fontSize","xaxis","axisBorder","axisTicks","crosshairs","fill","gradient","colorFrom","colorTo","stops","opacityFrom","opacityTo","tooltip","yaxis","labels","floating","align","setOptions","valueList","Value","dateList","Date","MainBlock","newOrder","setNewOrder","inProcessOrder","setInProcessOrder","shippingOrder","setShippingOrder","countProduct","setCountProduct","revenueProfit","setRevenueProfit","setProducts","legend","responsive","breakpoint","partnerGroupChart","setPartnerGroupChart","Percent","loadNewOrder","loadInProcessOrder","loadShippingOrder","loadProductCount","loadRevenueProfit","loadBestSellingProduct","Welcome","alt","DashboardPage","TableAttr","onSelect","stopPropagation","TableAttrChild","TotalUsing","ModalAddAttr","ModalAddAttrChild","attrId","ModalEditAttr","ModalEditAttrChild","AttributePage","attribute","childrenAttribute","setChildrenAttribute","isShowModalAttrAdd","setIsShowModalAttrAdd","isShowModalAttrEdit","setIsShowModalAttrEdit","isShowModalChildAttrAdd","setIsShowModalChildAttrAdd","isShowModalChildAttrEdit","setIsShowModalChildAttrEdit","attrEditInfo","setAttrEditInfo","setAttributeId","childAttrEditInfo","setChildAttrEditInfo","loadAttribute","obj","loadChildrenAttribute","firstAttributeId","nextIndex","selectedAttrIndex","wayBillCode","fromDate","toDate","orderFromId","loadOptions","callback","partnerLst","orderFroms","setOrderId","setWayBillCode","setFromDate","setToDate","setStatusOptions","orderFromOptions","setOrderFromOptions","orderFrom","setOrderFrom","orderFromList","OrderFromId","OrderFromName","cacheOptions","defaultOptions","debounce","loadingMessage","placeholderText","dateFormat","selected","day","getDate","month","getMonth","year","getFullYear","strDate","onUpdateStatus","onDownloadWaybill","onGetWaybill","onDownloadAttachWaybill","renderDownloadAttachWaybill","FileUrl","renderGetWaybill","renderUpdateCmd","renderDownloadWaybill","WaybillUrl","statusName","handleChangeStatus","renderChildrenProduct","productLength","CustomerUnitPrice","rowSpan","firstProduct","PartnerFullName","WaybillCode","ShippingUnitName","DropshipFee","onEditWarehouseNote","ModalUpdateStatus","orderStatuses","setOrderStatuses","WarehouseNote","ModalEditWarehouseNote","isEnableEdit","setIsEnableEdit","CustomerPhone","CustomerAddress","CustomerWardId","ShippingUnitId","ShippingWeight","ShippingMethodId","ShippingFeeTypeId","ShippingFeeAmount","ShippingNote","OrderTypeId","orderTypes","shippingTypes","provinces","setProvinces","districts","setDistricts","wards","setWards","shippingUnits","setShippingUnits","shippingMethods","setShippingMethods","tienHang","setTienHang","provinceArray","districtArray","wardArray","shippingUnitArray","shippingMethodArray","ShippingMethodName","tien_hang","reduce","TotalAmount","formProducts","ReceiverName","WeightInGram","ShippingFree","CustomerProvinceId","CustomerDistrictId","PartnerUnitPrice","removeProduct","renderProduct","ShippingFeeTypeObj","OrderPage","setOrderFroms","setOrders","modalStatus","setModalStatus","modalEditWarehouseNote","setModalEditWarehouseNote","modalOrderEditInfo","setModalOrderEditInfo","loadOrderStatus","loadOrderFrom","loadShippingUnit","loadShippingMethod","provinceList","setProvinceList","districtList","setDistrictList","wardList","setWardList","reloadOrder","fileName","ShopeeOrderSn","open","orderList","wardId","dropShipFee","newProducts","dateOptions","now","toLocaleDateString","rederDetail","CountOrder","CountCancel","TotalMoney","TotalRecharge","CountProduct","TotalDropshipFee","StatisticPartnerOrder","setPartners","setDetail","ShippingUnitStatusId","ShippingUnitPage","isShowModalShippingUnitAdd","setIsShowModalShippingUnitAdd","isShowModalShippingUnitEdit","setIsShowModalShippingUnitEdit","shippingUnit","setShippingUnit","shippingUnitEditInfo","setShippingUnitEditInfo","RoleId","ModalAddUser","roleOptions","setRoleOptions","roles","RoleName","UserId","ModalEditUser","onSetPwd","roleId","setRole","ModalUserSetPwd","userId","UserPage","userList","setUserList","isShowModalUserAdd","setIsShowModalUserAdd","isShowModalUserEdit","setIsShowModalUserEdit","infoModalUserSetPwd","setInfoModalUserSetPwd","roleList","setRoleList","userEditInfo","setUserEditInfo","loadRole","reloadUser","RoleNote","ModalPermission","rightList","setRightList","groups","inputList","arrRight","Rights","IsAllow","RightId","RightGroupName","rightId","newList","indexOf","splice","onRightChange","RightName","RightGroupId","UserCount","onPermission","RolePage","isShowModalRoleAdd","setIsShowModalRoleAdd","infoModalRoleEdit","setInfoModalRoleEdit","infoModalPer","setInfoModalPer","PopupId","PopupTypeId","when","is","Content","poupTypes","popupType","setPopupType","isShowCTV","setIsShowCTV","isShowGroup","setIsShowGroup","renderPartner","renderGroup","PopupPage","popupList","setPopupList","isShowModalPopupAdd","setIsShowModalPopupAdd","partnerGoupList","setPartnerGroupList","popupEditInfo","setPopupEditInfo","reloadPopup","Profile","CurrentPassword","NewPasswordConfirm","UserInfoPage","userInfo","setUserInfo","loadUserInfo","setAdminFullName","localStorage","setItem","setAdminAvatarUrl","callBack","AffAmount","SettingAffiliate","setting","emailStatusOptions","EmailToAddress","SendingEmailStatusId","EmailSubject","SettingPage","setContent","isBusyEmail","setIsBusyEmail","setSetting","loadSetting","Message","resStatus","ProductFromExcel","Json","JSON","stringify","PartnerGroupPrices","AttributeList","replace","imgInfo","parentIndex","Id","childIndex","onUploadComplete","mbClass","LoginPage","setFocus","setMessage","a_token","getItem","from","useLocation","state","pathname","Token","defaults","headers","common","setRights","setAdminRole","marginTop","adminLoginLogoHeight","setTimeout","onLogin","types","loadPartner","freeShipType","setFreeShipType","FreeShipId","FreeShipPage","isShowModalAdd","setIsShowModalAdd","setPartnerGroups","collapsed","handleCollapse","classList","add","App","token","pathName","location","logoHeight","removeItem","adminFullName","paddingTop","path","version","CustomerId","WardObj","wardObj","selectedWard","selectedProvince","selectedDistrict","CustomerPage","customerList","setCustomerList","reloadCustomer","customer","CustomerInfo","PartnerInfo","freeShipQty","groupName","countCustomer","orderToday","Revenue","horizontal","columnWidth","endingShape","stroke","opacity","y","income","Income","revenue","newOptions","refLink","setRefLink","setRevenue","loadRevenue","setPartnerInfo","CountCustomer","OrderToday","origin","toLowerCase","loadPartnerInfo","IsShow","loadMessage","partnerInfo","readOnly","onCopy","cursor","setIsBusyOrder","onOrder","countCart","List","onShowDetail","avatarUrl","background","UnitPriceByPartnerGroup","onAddToCart","ModalAddToCart","renderQty","renderNumberInput","ModalDetail","setProductId","customerPrice","partnerPrice","productName","parentInfo","setParentInfo","setChildren","Parent","CustomerPrice","PartnerPrice","childrenArray","IsSelected","extName","startsWith","substring","isDisabled","setIsBusyBtn","CustomerWardObj","ShippingUnitObj","ShippingMethodObj","IsUseFreeShip","ModalOrder","shippingNote","setFileName","tongTienHang","productArray","customerWardObj","shippingUnitObj","shippingMethodObj","onRemoveCart","CartId","isCheck","onFreeShipChange","FileName","setCountCart","modalAddToCartInfo","setModalAddToCartInfo","modalDetailInfo","setModalDetailInfo","dropShipFeeBase","modalOrderInfo","setModalOrderInfo","loadCountCart","cartId","renderFirstChild","renderChildren","ProductCheckingPage","setStatuses","froms","renderAddress","address","wardName","districtName","provinceName","wardPrefix","districtPrefix","provincePrefix","ProvinceNam","WardPrefix","DistrictPrefix","ProvincePrefix","modalEditWarehouseNoteInfo","setModalEditWarehouseNoteInfo","param","provinceOptions","setProvinceOptions","districtOptions","setDistrictOptions","wardOptions","setWardOptions","partnerWard","partnerDistrict","partnerProvince","ProfilePage","loadProfile","profileInfo","setProfileInfo","Info","setPartnerFullName","setPartnerAvatarUrl","resetForm","BalanceHistoryPage","histories","setHistories","PartnerShopPage","setShops","loadShop","shop","sortOptions","partnerShopId","sortBy","shopeeShopOptions","setShopeeShopOptions","shopeeShop","setShopeeShop","sort","setSort","shopeeShopList","renderFooter","Order_Items","Item_Model","Sku","handleOrder","orderItems","totalProductPrice","Product","Price","Order_Sn","Buyer_Address_Name","Buyer_Address_Phone","Shipping_Fee","imgs","Images","Name","Order_Id","OrderFromShopee","RegisterPage","refCode","search","useMemo","URLSearchParams","useQuery","refPartnerName","setRefPartnerName","partnerLoginLogoHeight","newFormData","AffCode","p_token","LoginTypeId","ChildrenPage","globalPopups","renderAvatar","PartnerLayout","popupInfo","setPopupInfo","popups","popup","PartnerPopupId","loadPopup","partnerAvatarUrl","partnerFullName","nextPopups","nextPopup","loadProgressBar","registerLocale","vi","setDefaultLocale","baseURL","timeout","interceptors","response","use","config","Code","urlArr","adminOrPartner","reload","error","Promise","reject","strRight","fullName","adminAvatarUrl","roleName","adminRole","Provider","AdminLayout","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode"],"mappings":"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","file":"static/js/main.7fca0d16.chunk.js","sourcesContent":["import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport {\r\n    IoBagHandleOutline, IoBicycleOutline, IoCardOutline, IoChatboxEllipsesOutline, IoCubeOutline,\r\n    IoExtensionPuzzleOutline, IoLogOutOutline, IoPeopleOutline, IoPersonOutline, IoPieChartOutline, IoPricetagOutline, IoReceiptOutline, IoSettingsOutline, IoShirtOutline, IoSpeedometerOutline, IoTicketOutline\r\n} from 'react-icons/io5'\r\nimport { NavLink } from \"react-router-dom\"\r\nimport { AuthAdminView } from '..'\r\n\r\nconst AdminLeftMenu = (props) => {\r\n    return (\r\n        <ul className=\"side-nav\">\r\n\r\n            <li className=\"side-nav-title side-nav-item\">Trang chủ</li>\r\n\r\n            <li className=\"side-nav-item\">\r\n                <NavLink to=\"/admin/dashboard\" className=\"side-nav-link\">\r\n                    <IoSpeedometerOutline />\r\n                    <span> Tổng quan </span>\r\n                </NavLink>\r\n            </li>\r\n\r\n            <li className=\"side-nav-title side-nav-item\">Danh mục</li>\r\n\r\n            <AuthAdminView right=\"partner_group_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/partner-group\" className=\"side-nav-link\">\r\n                        <IoPeopleOutline />\r\n                        <span> Nhóm cộng tác viên </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <AuthAdminView right=\"partner_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/partner\" className=\"side-nav-link\">\r\n                        <IoPersonOutline />\r\n                        <span> Cộng tác viên </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <AuthAdminView right=\"category_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/category\" className=\"side-nav-link\">\r\n                        <IoCubeOutline />\r\n                        <span> Nhóm sản phẩm </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <AuthAdminView right=\"product_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/product\" className=\"side-nav-link\">\r\n                        <IoShirtOutline />\r\n                        <span> Sản phẩm </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <AuthAdminView right=\"attribute_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/attribute\" className=\"side-nav-link\">\r\n                        <IoPricetagOutline />\r\n                        <span> Thuộc tính </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <AuthAdminView right=\"shipping_unit_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/shipping-unit\" className=\"side-nav-link\">\r\n                        <IoBicycleOutline />\r\n                        <span> Đơn vị vận chuyển </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <li className=\"side-nav-title side-nav-item\">Quản lý</li>\r\n\r\n            <AuthAdminView right=\"order_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/order\" className=\"side-nav-link\">\r\n                        <IoReceiptOutline />\r\n                        <span> Đơn hàng </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <AuthAdminView right=\"statistic_partner_order\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/statistic-partner-order\" className=\"side-nav-link\">\r\n                        <IoPieChartOutline />\r\n                        <span> Thống kê đơn hàng </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <AuthAdminView right=\"popup_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/popup\" className=\"side-nav-link\">\r\n                        <IoChatboxEllipsesOutline />\r\n                        <span> Popup </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <AuthAdminView right=\"popup_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/freeship\" className=\"side-nav-link\">\r\n                        <IoBagHandleOutline />\r\n                        <span> Miễn phí đóng gói </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <li className=\"side-nav-title side-nav-item\">Tài khoản</li>\r\n\r\n            <AuthAdminView right=\"account_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/user-info\" className=\"side-nav-link\">\r\n                        <IoCardOutline />\r\n                        <span> Thông tin cá nhân </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <li className=\"side-nav-item\">\r\n                <span className=\"side-nav-link cursor-point\" onClick={() => {\r\n                    props.onLogout()\r\n                }}>\r\n                    <IoLogOutOutline />\r\n                    <span> Đăng xuất </span>\r\n                </span>\r\n            </li>\r\n\r\n            <li className=\"side-nav-title side-nav-item\">Hệ thống</li>\r\n\r\n            <AuthAdminView right=\"user_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/user\" className=\"side-nav-link\">\r\n                        <IoExtensionPuzzleOutline />\r\n                        <span> Thành viên </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <AuthAdminView right=\"role_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/role\" className=\"side-nav-link\">\r\n                        <IoTicketOutline />\r\n                        <span> Vai trò </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n            <AuthAdminView right=\"setting_view\">\r\n                <li className=\"side-nav-item\">\r\n                    <NavLink to=\"/admin/setting\" className=\"side-nav-link\">\r\n                        <IoSettingsOutline />\r\n                        <span> Cấu hình </span>\r\n                    </NavLink>\r\n                </li>\r\n            </AuthAdminView>\r\n\r\n        </ul>\r\n    )\r\n}\r\n\r\nAdminLeftMenu.propTypes = {\r\n    onLogout: PropTypes.func,\r\n}\r\n\r\nAdminLeftMenu.defaultProps = {\r\n    onLogout: () => { }\r\n}\r\n\r\nexport default AdminLeftMenu","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { AiOutlineHistory } from 'react-icons/ai'\r\nimport {\r\n    IoCardOutline,\r\n    IoLogOutOutline, IoPersonOutline, IoReceiptOutline, IoScanCircleOutline, IoShirtOutline, IoSpeedometerOutline,\r\n    IoLayersOutline,\r\n    // IoCloudDownloadOutline,\r\n    // IoStorefrontOutline,\r\n} from 'react-icons/io5'\r\nimport { NavLink } from \"react-router-dom\"\r\n\r\nfunction PartnerLeftMenu(props) {\r\n    return (\r\n        <ul className=\"side-nav\">\r\n\r\n            <li className=\"side-nav-title side-nav-item\">Trang chủ</li>\r\n\r\n            <li className=\"side-nav-item\">\r\n                <NavLink to=\"/partner/dashboard\" className=\"side-nav-link\">\r\n                    <IoSpeedometerOutline />\r\n                    <span> Tổng quan </span>\r\n                </NavLink>\r\n            </li>\r\n\r\n            <li className=\"side-nav-title side-nav-item\">Quản lý</li>\r\n\r\n            <li className=\"side-nav-item\">\r\n                <NavLink to=\"/partner/product\" className=\"side-nav-link\">\r\n                    <IoShirtOutline />\r\n                    <span> Danh sách sản phẩm </span>\r\n                </NavLink>\r\n            </li>\r\n\r\n            <li className=\"side-nav-item\">\r\n                <NavLink to=\"/partner/product-checking\" className=\"side-nav-link\">\r\n                    <IoScanCircleOutline />\r\n                    <span> Kiểm tra ID sản phẩm </span>\r\n                </NavLink>\r\n            </li>\r\n\r\n            <li className=\"side-nav-item\">\r\n                <NavLink to=\"/partner/customer\" className=\"side-nav-link\">\r\n                    <IoPersonOutline />\r\n                    <span> Khách hàng </span>\r\n                </NavLink>\r\n            </li>\r\n\r\n            <li className=\"side-nav-item\">\r\n                <NavLink to=\"/partner/order\" className=\"side-nav-link\">\r\n                    <IoReceiptOutline />\r\n                    <span> Đơn hàng </span>\r\n                </NavLink>\r\n\r\n            </li>\r\n\r\n            {/* <li className=\"side-nav-item\">\r\n                <NavLink to=\"/partner/shop\" className=\"side-nav-link\">\r\n                    <IoStorefrontOutline />\r\n                    <span> Tài khoản shopee</span>\r\n                </NavLink>\r\n            </li>\r\n\r\n            <li className=\"side-nav-item\">\r\n                <NavLink to=\"/partner/order-from-shopee\" className=\"side-nav-link\">\r\n                    <IoCloudDownloadOutline />\r\n                    <span> Đơn hàng từ shopee</span>\r\n                </NavLink>\r\n            </li> */}\r\n\r\n            <li className=\"side-nav-item\">\r\n                <NavLink to=\"/partner/children\" className=\"side-nav-link\">\r\n                    <IoLayersOutline />\r\n                    <span> Đã giới thiệu</span>\r\n                </NavLink>\r\n            </li>\r\n\r\n            <li className=\"side-nav-title side-nav-item\">Tài khoản</li>\r\n\r\n            <li className=\"side-nav-item\">\r\n                <NavLink to=\"/partner/profile\" className=\"side-nav-link\">\r\n                    <IoCardOutline />\r\n                    <span> Thông tin cá nhân </span>\r\n                </NavLink>\r\n            </li>\r\n\r\n            <li className=\"side-nav-item\">\r\n                <NavLink to=\"/partner/balance-history\" className=\"side-nav-link\">\r\n                    <AiOutlineHistory />\r\n                    <span> Lịch sử giao dịch </span>\r\n                </NavLink>\r\n            </li>\r\n\r\n            <li className=\"side-nav-item\">\r\n                <span className=\"side-nav-link cursor-point\" onClick={() => {\r\n                    props.onLogout()\r\n                }}>\r\n                    <IoLogOutOutline />\r\n                    <span> Đăng xuất </span>\r\n                </span>\r\n            </li>\r\n\r\n        </ul>\r\n    )\r\n}\r\n\r\nPartnerLeftMenu.propTypes = {\r\n    onLogout: PropTypes.func,\r\n}\r\n\r\nPartnerLeftMenu.defaultProps = {\r\n    onLogout: () => { }\r\n}\r\n\r\nexport default PartnerLeftMenu","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { IoSearchOutline } from 'react-icons/io5'\r\n\r\nconst SearchButton = (props) => {\r\n    const { onClick, type } = props\r\n\r\n    return (\r\n        <button onClick={onClick} className=\"btn btn-primary\" type={type}>\r\n            <IoSearchOutline className=\"me-1 mt--2-px font-17\" />Tìm kiếm\r\n        </button>\r\n    )\r\n}\r\n\r\nSearchButton.propTypes = {\r\n    onClick: PropTypes.func,\r\n    type: PropTypes.string\r\n}\r\n\r\nSearchButton.defaultProps = {\r\n    onClick: () => { },\r\n    type: 'button'\r\n}\r\n\r\nexport default SearchButton","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { GiBroom } from 'react-icons/gi';\r\n\r\nconst ClearButton = (props) => {\r\n    return (\r\n        <button onClick={props.onClick} type=\"button\" className=\"btn btn-warning\">\r\n            <GiBroom className=\"me-1 mt--2-px font-17\" />Xóa Tìm kiếm\r\n        </button>\r\n    )\r\n}\r\n\r\nClearButton.propTypes = {\r\n    onClick: PropTypes.func\r\n}\r\n\r\nClearButton.defaultProps = {\r\n    onClick: () => { }\r\n}\r\n\r\nexport default ClearButton","import React from \"react\";\r\n\r\nconst AppContext = React.createContext();\r\n\r\nexport default AppContext;","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { IoFileTrayOutline } from 'react-icons/io5'\r\n\r\nconst EmptyRow = props => {\r\n    return (\r\n        <tr className=\"cursor-default\">\r\n            <td colSpan={props.colSpan} className=\"text-center\">\r\n                <IoFileTrayOutline className=\"fs-1 mt-2\" />\r\n                <p>{props.title}</p>\r\n            </td>\r\n        </tr>\r\n    )\r\n}\r\n\r\nEmptyRow.propTypes = {\r\n    colSpan: PropTypes.number,\r\n    title: PropTypes.string\r\n}\r\n\r\nEmptyRow.defaultProps = {\r\n    colSpan: 1,\r\n    title: 'Không tìm thấy dữ liệu'\r\n}\r\n\r\nexport default EmptyRow","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst LoadingRow = props => {\r\n    return (\r\n        <tr>\r\n            <td colSpan={props.colSpan} className=\"text-center\">\r\n                <div className=\"spinner-border text-primary mt-2 mb-1\" role=\"status\"></div>\r\n                <p>{props.title}</p>\r\n            </td>\r\n        </tr>\r\n    )\r\n}\r\n\r\nLoadingRow.propTypes = {\r\n    colSpan: PropTypes.number,\r\n    title: PropTypes.string\r\n}\r\n\r\nLoadingRow.defaultProps = {\r\n    colSpan: 1,\r\n    title: 'Đang tải dữ liệu'\r\n}\r\n\r\nexport default LoadingRow","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst FormatNumber = props => {\r\n    const { children, maxDigit } = props\r\n\r\n    return (\r\n        <Fragment>\r\n            {children.toLocaleString('vi-VN', { maximumFractionDigits: maxDigit })}\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nFormatNumber.propTypes = {\r\n    children: PropTypes.number,\r\n    maxDigit: PropTypes.number\r\n}\r\n\r\nFormatNumber.defaultProps = {\r\n    children: 0,\r\n    maxDigit: 0\r\n}\r\n\r\nexport default FormatNumber","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { IoSaveOutline } from 'react-icons/io5'\r\n\r\nconst SaveButton = props => {\r\n    const handleOnClick = () => {\r\n        if (props.onClick) {\r\n            props.onClick()\r\n        }\r\n    }\r\n\r\n    const renderIcon = () => {\r\n        if (props.isBusy) {\r\n            return <div className=\"spinner-border spinner-border-sm me-1\" role=\"status\"></div>;\r\n        }\r\n        else {\r\n            return props.icon\r\n        }\r\n    }\r\n\r\n    return (\r\n        <button type={props.type} className={props.className + ' btn btn-primary'} onClick={handleOnClick} disabled={props.isBusy}>\r\n            {renderIcon()}\r\n            {props.title}\r\n        </button>\r\n    )\r\n}\r\n\r\nSaveButton.propTypes = {\r\n    type: PropTypes.string,\r\n    title: PropTypes.string,\r\n    onClick: PropTypes.func,\r\n    icon: PropTypes.element,\r\n    isBusy: PropTypes.bool,\r\n    className: PropTypes.string,\r\n}\r\n\r\nSaveButton.defaultProps = {\r\n    type: 'submit',\r\n    title: 'Lưu',\r\n    onClick: () => { },\r\n    icon: <IoSaveOutline className=\"mt--3-px me-1 font-17\" />,\r\n    isBusy: false,\r\n    className: ''\r\n}\r\n\r\nexport default SaveButton","import React from 'react'\r\nimport { IoBanOutline } from 'react-icons/io5'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst CloseButton = props => {\r\n    const handleOnClick = () => {\r\n        if (props.onClick) {\r\n            props.onClick()\r\n        }\r\n    }\r\n\r\n    return (\r\n        <button type=\"button\" className=\"btn btn-light\" onClick={handleOnClick}>\r\n            <IoBanOutline className=\"mt--3-px me-1 font-17\" />\r\n            {props.title}\r\n        </button>\r\n    )\r\n}\r\n\r\nCloseButton.propTypes = {\r\n    title: PropTypes.string,\r\n    onClick: PropTypes.func\r\n}\r\n\r\nCloseButton.defaultProps = {\r\n    title: 'Đóng',\r\n    onClick: () => { }\r\n}\r\n\r\nexport default CloseButton","import React, { useState } from 'react'\r\nimport { IoSaveOutline } from 'react-icons/io5'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst LoadingButton = props => {\r\n    const [isBusy, setIsBusy] = useState(false);\r\n\r\n    const handleOnClick = () => {\r\n        if (props.onClick) {\r\n            props.onClick(setIsBusy)\r\n        }\r\n    }\r\n\r\n    const renderIcon = () => {\r\n        if (isBusy) {\r\n            return <div className=\"spinner-border spinner-border-sm me-1\" role=\"status\"></div>\r\n        }\r\n        else {\r\n            return props.icon;\r\n        }\r\n    }\r\n\r\n    return (\r\n        <button type={props.type} className=\"btn btn-primary\" onClick={handleOnClick} disabled={isBusy}>\r\n            {renderIcon()}\r\n            {props.title}\r\n        </button>\r\n    );\r\n}\r\n\r\nLoadingButton.propTypes = {\r\n    type: PropTypes.string,\r\n    title: PropTypes.string,\r\n    onClick: PropTypes.func,\r\n    // icon: \r\n}\r\n\r\nLoadingButton.defaultProps = {\r\n    type: 'button',\r\n    title: 'Lưu',\r\n    onClick: null,\r\n    icon: <IoSaveOutline className=\"mt--3-px me-1 font-17\" />\r\n}\r\n\r\nexport default LoadingButton","import axios from 'axios'\r\nimport PropTypes from 'prop-types'\r\nimport React, { Fragment, useRef } from 'react'\r\n\r\nconst maxSizeInBute = 5_242_880 // 5MB\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nconst apiUrl = window.apiUrl\r\n\r\nconst UploadImg = props => {\r\n    const fileInput = useRef(null)\r\n\r\n    const handleTrigger = () => {\r\n        fileInput.current.click()\r\n    }\r\n\r\n    const handleUpload = e => {\r\n        let files = e.target.files\r\n        if (files.length !== 0) {\r\n            let file = files[0]\r\n            let name = file.name\r\n            let sizeInByte = file.size\r\n            if (sizeInByte > maxSizeInBute) {\r\n                return\r\n            }\r\n            const formData = new FormData()\r\n            formData.append('formFile', file)\r\n            formData.append('fileName', name)\r\n            const url = uploadUrl();\r\n            axios.post(url, formData).then(res => {\r\n                let data = res.data\r\n                if (props.onCompleted) {\r\n                    props.onCompleted(data)\r\n                }\r\n            })\r\n        }\r\n    }\r\n\r\n    const uploadUrl = () => {\r\n        if (props.isPartner) return '/partner/storage/upload-image'\r\n        else return '/admin/storage/upload-image'\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <input\r\n                style={{ display: 'none' }}\r\n                type=\"file\"\r\n                accept=\".gif, .jpg, jpeg, .png\"\r\n                ref={fileInput}\r\n                onChange={handleUpload} />\r\n            <p\r\n                className=\"bg-img cursor-point\"\r\n                style={{ backgroundImage: `url(${(props.imgUrl === '' ? noImgUrl : `${apiUrl}/admin/storage/thumbnail?url=${props.imgUrl}&size=${props.thumbnailSize}`)})` }}\r\n                onClick={handleTrigger}\r\n            />\r\n            <p className=\"mb-0 fst-italic\">Ảnh tối đa 5MB (.jpg .jpeg .gif .png)</p>\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nUploadImg.propTypes = {\r\n    imgUrl: PropTypes.string,\r\n    thumbnailSize: PropTypes.number,\r\n    onCompleted: PropTypes.func,\r\n    isPartner: PropTypes.bool\r\n}\r\n\r\nUploadImg.defaultProps = {\r\n    imgUrl: '',\r\n    thumbnailSize: 400,\r\n    onCompleted: () => { },\r\n    isPartner: false\r\n}\r\n\r\nexport default UploadImg","import axios from 'axios'\r\nimport PropTypes from 'prop-types'\r\nimport React, { Fragment, useRef } from 'react'\r\n\r\nconst maxSizeInBute = 5_242_880 // 5MB\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nconst apiUrl = window.apiUrl\r\n\r\nconst UploadProductImg = props => {\r\n    const fileInput = useRef(null)\r\n\r\n    const handleTrigger = () => {\r\n        fileInput.current.click()\r\n    }\r\n\r\n    const handleUpload = e => {\r\n        let files = e.target.files\r\n        if (files.length !== 0) {\r\n            let file = files[0]\r\n            let name = file.name\r\n            let sizeInByte = file.size\r\n            if (sizeInByte > maxSizeInBute) {\r\n                return\r\n            }\r\n            const formData = new FormData()\r\n            formData.append('formFile', file)\r\n            formData.append('fileName', name)\r\n            const url = uploadUrl();\r\n            axios.post(url, formData).then(res => {\r\n                let data = res.data\r\n                if (props.onCompleted) {\r\n                    props.onCompleted(data)\r\n                }\r\n            })\r\n        }\r\n    }\r\n\r\n    const uploadUrl = () => {\r\n        if (props.isPartner) return '/partner/storage/upload-image'\r\n        else return '/admin/storage/upload-image'\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <input\r\n                style={{ display: 'none' }}\r\n                type=\"file\"\r\n                accept=\".gif, .jpg, jpeg, .png\"\r\n                ref={fileInput}\r\n                onChange={handleUpload} />\r\n            <span\r\n                className={`bg-avatar rounded-circle cursor-point me-${props.me}`}\r\n                style={{ backgroundImage: `url(${(props.imgUrl === '' ? noImgUrl : `${apiUrl}/admin/storage/thumbnail?url=${props.imgUrl}&size=${props.thumbnailSize}`)})` }}\r\n                onClick={handleTrigger}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nUploadProductImg.propTypes = {\r\n    imgUrl: PropTypes.string,\r\n    thumbnailSize: PropTypes.number,\r\n    onCompleted: PropTypes.func,\r\n    me: PropTypes.number,\r\n}\r\n\r\nUploadProductImg.defaultProps = {\r\n    imgUrl: '',\r\n    thumbnailSize: 50,\r\n    onCompleted: () => { },\r\n    me: 1\r\n}\r\n\r\nexport default UploadProductImg","import React, { useState } from 'react';\r\nimport { IoExtensionPuzzleOutline } from 'react-icons/io5'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst IconButton = props => {\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const btnClassName = () => {\r\n        return `btn btn-${props.variant} btn-icon ${props.className}`\r\n    }\r\n\r\n    const handleClick = () => {\r\n        if (props.onClick) {\r\n            props.onClick(setIsBusy)\r\n        }\r\n    }\r\n\r\n    const renderIcon = () => {\r\n        if (isBusy) {\r\n            return <div className=\"spinner-border spinner-border-sm me-1\" role=\"status\"></div>;\r\n        }\r\n        else {\r\n            return props.icon\r\n        }\r\n    }\r\n\r\n    const renderContent = () => {\r\n        if (props.children !== undefined) return props.children\r\n        else return props.text\r\n    }\r\n\r\n    return (\r\n        <button onClick={handleClick} className={btnClassName()} disabled={isBusy} type={props.type}>\r\n            {renderIcon()}\r\n            {renderContent()}\r\n        </button>\r\n    )\r\n}\r\n\r\nIconButton.propTypes = {\r\n    icon: PropTypes.element,\r\n    text: PropTypes.string,\r\n    variant: PropTypes.string,\r\n    onClick: PropTypes.func,\r\n    className: PropTypes.string,\r\n    type: PropTypes.string,\r\n}\r\n\r\nIconButton.defaultProps = {\r\n    icon: <IoExtensionPuzzleOutline />,\r\n    text: 'Text',\r\n    variant: 'primary',\r\n    onClick: () => { },\r\n    className: '',\r\n    type: \"button\"\r\n}\r\n\r\nexport default IconButton","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nconst apiUrl = window.apiUrl\r\n\r\nconst AvatarRow = props => {\r\n    const { className, onClick, url, me, size } = props\r\n\r\n    const getImgUrl = () => {\r\n        if (url === '' || url === null) return `url(${noImgUrl})`\r\n        else return `url(${apiUrl}/admin/storage/thumbnail?url=${url}&size=${size})`\r\n    }\r\n\r\n    const iconClass = () => {\r\n        return `bg-avatar me-${me} rounded-circle`\r\n    }\r\n\r\n    const handleClick = () => {\r\n        if (onClick) {\r\n            const fullUrl = `${apiUrl}${url}`\r\n            onClick({\r\n                baseUrl: url,\r\n                fullUrl\r\n            })\r\n        }\r\n    }\r\n\r\n    return (\r\n        <span\r\n            onClick={handleClick}\r\n            className={iconClass() + ` ${className}`}\r\n            style={{ backgroundImage: getImgUrl() }}\r\n        ></span>\r\n    )\r\n}\r\n\r\nAvatarRow.propTypes = {\r\n    url: PropTypes.string,\r\n    size: PropTypes.number,\r\n    me: PropTypes.number,\r\n    className: PropTypes.string,\r\n    onClick: PropTypes.func,\r\n}\r\n\r\nAvatarRow.defaultProps = {\r\n    url: '',\r\n    size: 50,\r\n    me: 1,\r\n    className: '',\r\n    onClick: null\r\n}\r\n\r\nexport default AvatarRow","import { store } from 'react-notifications-component';\r\nimport Swal from 'sweetalert2'\r\n\r\nconst duration = 3_500\r\n\r\nconst Notification = {\r\n    success: msg => {\r\n        store.addNotification({\r\n            // title: \"Wonderful!\",\r\n            message: msg,\r\n            type: \"success\",\r\n            insert: \"top\",\r\n            container: \"bottom-right\",\r\n            animationIn: [\"animate__animated\", \"animate__fadeIn\"],\r\n            animationOut: [\"animate__animated\", \"animate__fadeOut\"],\r\n            dismiss: {\r\n                duration: duration,\r\n                pauseOnHover: true\r\n                // onScreen: true\r\n            }\r\n        });\r\n    },\r\n    warning: msg => {\r\n        store.addNotification({\r\n            message: msg,\r\n            type: \"warning\",\r\n            insert: \"top\",\r\n            container: \"bottom-right\",\r\n            animationIn: [\"animate__animated\", \"animate__fadeIn\"],\r\n            animationOut: [\"animate__animated\", \"animate__fadeOut\"],\r\n            dismiss: {\r\n                duration: duration,\r\n                pauseOnHover: true\r\n            }\r\n        });\r\n    },\r\n    danger: msg => {\r\n        store.addNotification({\r\n            message: msg,\r\n            type: \"danger\",\r\n            insert: \"top\",\r\n            container: \"bottom-right\",\r\n            animationIn: [\"animate__animated\", \"animate__fadeIn\"],\r\n            animationOut: [\"animate__animated\", \"animate__fadeOut\"],\r\n            dismiss: {\r\n                duration: duration,\r\n                pauseOnHover: true\r\n            }\r\n        });\r\n    },\r\n    confirm: (msg = 'Bạn có chắc muốn thực hiện?', ok, cancel) => {\r\n        Swal.fire({\r\n            // title: 'Xác nhận',\r\n            text: msg,\r\n            icon: 'question',\r\n            showCloseButton: false,\r\n            showCancelButton: true,\r\n            confirmButtonText: 'Đồng ý',\r\n            cancelButtonText: 'Bỏ qua'\r\n        }).then((result) => {\r\n            if (result.isConfirmed) {\r\n                ok();\r\n            } else if (result.dismiss === Swal.DismissReason.cancel) {\r\n                if (cancel) {\r\n                    cancel()\r\n                }\r\n            }\r\n        })\r\n    },\r\n    confirmHtml: (msg, objText, ok) => {\r\n        const str = `${msg} <span class=\"text-danger\">${objText}</span> không?`\r\n        Swal.fire({\r\n            html: str,\r\n            icon: 'question',\r\n            showCloseButton: false,\r\n            showCancelButton: true,\r\n            confirmButtonText: 'Đồng ý',\r\n            cancelButtonText: 'Bỏ qua'\r\n        }).then((result) => {\r\n            if (result.isConfirmed) {\r\n                ok();\r\n            } else if (result.dismiss === Swal.DismissReason.cancel) {\r\n\r\n            }\r\n        })\r\n    }\r\n}\r\n\r\nexport default Notification","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\n\r\nfunction InputSelect(props) {\r\n    const variantClassName = (variant) => {\r\n        return `form-control form-check form-radio-${variant !== undefined ? variant : props.variant} position-relative`\r\n    }\r\n\r\n    const onChange = (e) => {\r\n        const isChecked = e.target.checked\r\n        const value = parseInt(e.target.value)\r\n        if (isChecked) {\r\n            if (props.onChange) {\r\n                props.onChange(value)\r\n            }\r\n        }\r\n    }\r\n\r\n    const renderControl = () => {\r\n        const name = props.name\r\n        const options = props.options\r\n        const className = !props.isVertical ? 'col' : 'col-12'\r\n        return options.map((item, index) => {\r\n            return (\r\n                <div className={className} key={item.value}>\r\n                    <div className={variantClassName(item.variant)}>\r\n                        <input\r\n                            checked={item.value === props.value}\r\n                            type=\"radio\"\r\n                            value={item.value}\r\n                            id={name + '-' + index}\r\n                            name={name}\r\n                            className=\"form-check-input input-select-radio\"\r\n                            onChange={onChange}\r\n                        />\r\n                        <label\r\n                            className=\"form-check-label input-select-label\"\r\n                            htmlFor={name + '-' + index}>{item.label}\r\n                        </label>\r\n                    </div>\r\n                </div>\r\n            )\r\n        })\r\n    }\r\n\r\n    const renderContainer = () => {\r\n        const className = !props.isVertical ? 'row' : 'row gy-2'\r\n        return <div className={className}>\r\n            {renderControl()}\r\n        </div>\r\n    }\r\n\r\n    return (\r\n        renderContainer()\r\n    )\r\n}\r\n\r\nInputSelect.propTypes = {\r\n    options: PropTypes.array,\r\n    value: PropTypes.number,\r\n    defaultValue: PropTypes.number,\r\n    name: PropTypes.string,\r\n    variant: PropTypes.string,\r\n    onChange: PropTypes.func,\r\n    isVertical: PropTypes.bool\r\n}\r\n\r\nInputSelect.defaultProps = {\r\n    options: [\r\n        {\r\n            value: 1,\r\n            label: 'Option 1',\r\n            variant: 'primary'\r\n        },\r\n        {\r\n            value: 2,\r\n            label: 'Option 2',\r\n            variant: 'warning'\r\n        }\r\n    ],\r\n    value: 0,\r\n    defaultValue: 0,\r\n    name: 'input-select',\r\n    variant: 'primary',\r\n    onChange: () => { },\r\n    isVertical: false\r\n}\r\n\r\nexport default InputSelect","import PropTypes from 'prop-types'\r\nimport React, { Fragment } from 'react'\r\n\r\nfunction Pagination(props) {\r\n    const pageBreak = () => Math.floor(props.displayPage / 2)\r\n\r\n    const startPage = () => {\r\n        if (props.totalPage > props.displayPage) {\r\n            if (props.currentPage > props.displayPage - pageBreak()) {\r\n                return props.currentPage - pageBreak < 1 ? 1 : props.currentPage - pageBreak()\r\n            }\r\n            else return 1\r\n        }\r\n        else return 1\r\n    }\r\n\r\n    const endPage = () => {\r\n        if (props.totalPage > props.displayPage) {\r\n            if (props.currentPage > props.displayPage - pageBreak()) {\r\n                if (props.currentPage < props.totalPage - pageBreak())\r\n                    return pageBreak() % 2 === 0 ? props.currentPage + pageBreak() : props.currentPage + (pageBreak() - 1)\r\n                else return props.totalPage\r\n            }\r\n            else return props.displayPage\r\n        }\r\n        else return props.totalPage\r\n    }\r\n\r\n    const isCanPrev = () => props.currentPage > 1\r\n\r\n    const isCanNext = () => props.currentPage < props.totalPage\r\n\r\n    const isCanFirst = () => props.currentPage > 1\r\n\r\n    const isCanLast = () => props.currentPage < props.totalPage\r\n\r\n    const isRender = () => {\r\n        if (props.totalPage > 1) return true\r\n        else if (!props.isHideIfOnePage) return true\r\n        return false\r\n    }\r\n\r\n    const onPageClick = (pageIndex) => {\r\n        onChange(pageIndex)\r\n    }\r\n\r\n    const onPrevClick = () => {\r\n        onChange(props.currentPage - 1)\r\n    }\r\n\r\n    const onNextClick = () => {\r\n        onChange(props.currentPage + 1)\r\n    }\r\n\r\n    const onFirstClick = () => {\r\n        onChange(1)\r\n    }\r\n\r\n    const onLastClick = () => {\r\n        onChange(props.totalPage)\r\n    }\r\n\r\n    const onChange = (currentPage) => {\r\n        props.onPageChange(currentPage)\r\n    }\r\n\r\n    const renderHtml = () => {\r\n        if (isRender()) {\r\n            return (\r\n                <nav className=\"mt-3 float-end\">\r\n                    <ul className=\"pagination pagination-rounded mb-0\">\r\n                        <li className={'page-item first' + (!isCanFirst() ? ' disabled' : '')}>\r\n                            <button className=\"page-link\" onClick={onFirstClick}>←</button>\r\n                        </li>\r\n                        <li className={'page-item' + (!isCanPrev() ? ' disabled' : '')}>\r\n                            <button className=\"page-link\" aria-label=\"Previous\" onClick={onPrevClick}>\r\n                                <span aria-hidden=\"true\">&laquo;</span>\r\n                            </button>\r\n                        </li>\r\n                        {renderNum()}\r\n                        <li className={'page-item' + (!isCanNext() ? ' disabled' : '')}>\r\n                            <button className=\"page-link\" aria-label=\"Next\" onClick={onNextClick}>\r\n                                <span aria-hidden=\"true\">&raquo;</span>\r\n                            </button>\r\n                        </li>\r\n                        <li className={'page-item last' + (!isCanLast() ? ' disabled' : '')}>\r\n                            <button className=\"page-link\" onClick={onLastClick}>→</button>\r\n                        </li>\r\n                    </ul >\r\n                </nav >\r\n            )\r\n        }\r\n    }\r\n\r\n    const renderNum = () => {\r\n        const start = startPage()\r\n        const end = endPage() + 1\r\n        const html = []\r\n        for (let i = start; i < end; i++) {\r\n            html.push(<li className={'page-item' + (i === props.currentPage ? ' active' : '')} key={i}>\r\n                <button className=\"page-link\" onClick={() => onPageClick(i)}>{i}</button>\r\n            </li>)\r\n        }\r\n        return html\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            {renderHtml()}\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nPagination.propTypes = {\r\n    onPageChange: PropTypes.func,\r\n    totalPage: PropTypes.number,\r\n    currentPage: PropTypes.number,\r\n    displayPage: PropTypes.number,\r\n    isHideIfOnePage: PropTypes.bool\r\n}\r\n\r\nPagination.defaultProps = {\r\n    onPageChange: () => { },\r\n    totalPage: 10,\r\n    currentPage: 1,\r\n    displayPage: 5,\r\n    isHideIfOnePage: true\r\n}\r\n\r\nexport default Pagination","import React, { Fragment, useRef, useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { SiMicrosoftexcel } from 'react-icons/si'\r\nimport axios from 'axios'\r\n\r\nconst maxSizeInBute = 5_242_880 // 5MB\r\n\r\nconst url = '/admin/storage/excel-to-json'\r\n\r\nfunction ReadExcelButton(props) {\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const fileInput = useRef(null)\r\n\r\n    const handleTrigger = () => {\r\n        fileInput.current.click()\r\n    }\r\n\r\n    const handleUpload = (e) => {\r\n        let files = e.target.files\r\n        if (files.length !== 0) {\r\n            let file = files[0]\r\n            let name = file.name\r\n            let sizeInByte = file.size\r\n            if (sizeInByte > maxSizeInBute) {\r\n                return\r\n            }\r\n            setIsBusy(true)\r\n            const formData = new FormData()\r\n            formData.append('formFile', file)\r\n            formData.append('fileName', name)\r\n            axios.post(url, formData).then(({ data }) => {\r\n                if (props.onCompleted) {\r\n                    props.onCompleted(data)\r\n                }\r\n                setIsBusy(false)\r\n            })\r\n        }\r\n    }\r\n\r\n    const renderIcon = () => {\r\n        if (isBusy) return <div className=\"spinner-border spinner-border-sm me-1\" role=\"status\"></div>\r\n        else return <SiMicrosoftexcel className=\"mt--3-px me-1 font-17\" />\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <input\r\n                style={{ display: 'none' }}\r\n                type=\"file\"\r\n                accept=\".xlsx\"\r\n                ref={fileInput}\r\n                onChange={handleUpload}\r\n            />\r\n            <button\r\n                className={'btn btn-' + props.variant}\r\n                type=\"button\"\r\n                onClick={handleTrigger}\r\n            >\r\n                {renderIcon()}\r\n                Chọn file excel\r\n            </button>\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nReadExcelButton.propTypes = {\r\n    onCompleted: PropTypes.func,\r\n    variant: PropTypes.string\r\n}\r\n\r\nReadExcelButton.defaultProps = {\r\n    onCompleted: () => { },\r\n    variant: 'success'\r\n}\r\n\r\nexport default ReadExcelButton","import PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport NumberFormat from 'react-number-format'\r\n\r\nconst NumberUpDown = (props) => {\r\n    const {\r\n        placeholder,\r\n        // min,\r\n        max,\r\n        step,\r\n        onChange,\r\n        value,\r\n        className\r\n    } = props\r\n\r\n    const [currentValue, setCurrentValue] = useState(0)\r\n\r\n    useEffect(() => {\r\n        const inputValue = value\r\n        if (inputValue > max) {\r\n            setCurrentValue(max)\r\n        }\r\n        else {\r\n            if (inputValue !== currentValue) {\r\n                setCurrentValue(inputValue)\r\n            }\r\n        }\r\n        // eslint-disable-next-line\r\n    }, [value])\r\n\r\n    const onIncrease = () => {\r\n        let currentVal = parseInt(currentValue)\r\n        if (currentVal + step >= max) {\r\n            setCurrentValue(max)\r\n            onChange(max)\r\n        }\r\n        else {\r\n            const newValue = currentVal + step\r\n            setCurrentValue(newValue)\r\n            onChange(newValue)\r\n        }\r\n    }\r\n\r\n    const onDecrease = () => {\r\n        let currentVal = parseInt(currentValue)\r\n        if (currentVal <= step) {\r\n            setCurrentValue(0)\r\n            onChange(0)\r\n        }\r\n        else {\r\n            const newValue = currentVal - step\r\n            setCurrentValue(newValue)\r\n            onChange(newValue)\r\n        }\r\n    }\r\n\r\n    return (\r\n        <div className={className + ' input-group flex-nowrap'}>\r\n            <span className=\"input-group-text cursor-point\" onClick={onDecrease}>-</span>\r\n            <NumberFormat\r\n                placeholder={placeholder}\r\n                className=\"form-control\"\r\n                // thousandSeparator={\".\"}\r\n                // decimalSeparator={\",\"}\r\n                allowNegative={false}\r\n                defaultValue={0}\r\n                decimalScale={0}\r\n                value={currentValue}\r\n                onValueChange={val => {\r\n                    if (val.value !== '') {\r\n                        if (val.value > max) setCurrentValue(max)\r\n                        else setCurrentValue(val.value)\r\n                    }\r\n                    else setCurrentValue(0)\r\n                }}\r\n            />\r\n            <span className=\"input-group-text cursor-point\" onClick={onIncrease}>+</span>\r\n        </div>\r\n    )\r\n}\r\n\r\nNumberUpDown.propTypes = {\r\n    placeholder: PropTypes.string,\r\n    min: PropTypes.number,\r\n    max: PropTypes.number,\r\n    step: PropTypes.number,\r\n    onChange: PropTypes.func,\r\n    value: PropTypes.number,\r\n    className: PropTypes.string\r\n}\r\n\r\nNumberUpDown.defaultProps = {\r\n    placeholder: '0',\r\n    min: 0,\r\n    max: 1_000_000,\r\n    step: 1,\r\n    onChange: () => { },\r\n    value: 0,\r\n    className: ''\r\n}\r\n\r\nexport default NumberUpDown","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nfunction DetailRow(props) {\r\n    const { className, title, titleColumn, childrenColumn } = props\r\n\r\n    const titleColumnString = () => `col-sm-${titleColumn}`\r\n\r\n    const childrenColumnString = () => `col-sm-${childrenColumn}`\r\n\r\n    return (\r\n        <div className={className}>\r\n            <div className=\"border-bottom\">\r\n                <div className=\"row gx-2 pt-2 pb-2\">\r\n                    <div className={titleColumnString()}>\r\n                        <p className=\"fw-bold mb-0\">{title}</p>\r\n                    </div>\r\n                    <div className={childrenColumnString()}>\r\n                        <p className=\"mb-0\">{props.children}</p>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nDetailRow.propTypes = {\r\n    className: PropTypes.string,\r\n    title: PropTypes.string,\r\n    titleColumn: PropTypes.number,\r\n    childrenColumn: PropTypes.number,\r\n}\r\n\r\nDetailRow.defaultProps = {\r\n    className: \"col-sm-12 col-md-6 col-lg-6 col-xl-4\",\r\n    title: 'Title',\r\n    titleColumn: 4,\r\n    childrenColumn: 8\r\n}\r\n\r\nexport default DetailRow","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nfunction ShopeeProductAvatar(props) {\r\n    const getImgUrl = () => {\r\n        const url = props.url\r\n        if (url === '' || url === null) return `url(${noImgUrl})`\r\n        else return `url('https://cf.shopee.vn/file/${url}')`\r\n    }\r\n\r\n    return (\r\n        <span\r\n            className=\"bg-avatar me-1 rounded-circle\"\r\n            style={{ backgroundImage: getImgUrl() }}\r\n        ></span>\r\n    )\r\n}\r\n\r\nShopeeProductAvatar.propTypes = {\r\n    url: PropTypes.string\r\n}\r\n\r\nShopeeProductAvatar.defaultProps = {\r\n    url: ''\r\n}\r\n\r\nexport default ShopeeProductAvatar","import React, { Fragment } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst renderStatus = (statusId, className, onClick) => {\r\n  if (statusId === 1)\r\n    return (\r\n      <span className={`badge bg-success ` + className} onClick={onClick}>\r\n        Đang bán\r\n      </span>\r\n    );\r\n  else if (statusId === 2)\r\n    return (\r\n      <span className={`badge bg-danger ` + className} onClick={onClick}>\r\n        Ngừng bán\r\n      </span>\r\n    );\r\n  else\r\n    return (\r\n      <span className={`badge bg-warning ` + className} onClick={onClick}>\r\n        Hết hàng\r\n      </span>\r\n    );\r\n};\r\n\r\nfunction ProductStatus(props) {\r\n  const { statusId, onClick, className } = props;\r\n\r\n  return <Fragment>{renderStatus(statusId, className, onClick)}</Fragment>;\r\n}\r\n\r\nProductStatus.propTypes = {\r\n  statusId: PropTypes.number,\r\n  onClick: PropTypes.func,\r\n  className: PropTypes.string,\r\n};\r\n\r\nProductStatus.defaultProps = {\r\n  statusId: 0,\r\n  onClick: () => {},\r\n  className: \"\",\r\n};\r\n\r\nexport default ProductStatus;\r\n","import PropTypes from 'prop-types'\r\nimport { useContext } from 'react'\r\nimport { AppContext } from './../../components'\r\nimport { Fragment } from 'react'\r\n\r\nfunction AuthAdminView(props) {\r\n    const { right, children } = props\r\n\r\n    const appSettings = useContext(AppContext)\r\n\r\n    function renderChildrent() {\r\n        if (appSettings.rights.some(n => n === right)) return children\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            {renderChildrent()}\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nAuthAdminView.propTypes = {\r\n    right: PropTypes.string,\r\n}\r\n\r\nAuthAdminView.defaultProps = {\r\n    right: ''\r\n}\r\n\r\nexport default AuthAdminView","import React from 'react'\r\nimport { IoEllipsisVertical } from 'react-icons/io5'\r\n\r\nfunction ActionRow(props) {\r\n    const { children } = props\r\n\r\n    return (\r\n        <div className=\"dropdown float-end\">\r\n            <button className=\"dropdown-toggle arrow-none card-drop btn-drop\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n                <IoEllipsisVertical className=\"fs-4 text-primary\" />\r\n            </button>\r\n            <div className=\"dropdown-menu dropdown-menu-end\">\r\n                {children}\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default ActionRow","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { IoExtensionPuzzleOutline } from 'react-icons/io5'\r\nimport { AuthAdminView } from '..'\r\n\r\nfunction ActionItem(props) {\r\n    const { title, icon, onClick, className, right } = props\r\n\r\n    return (\r\n        <AuthAdminView right={right}>\r\n            <button\r\n                onClick={onClick}\r\n                className={'dropdown-item action-item ' + className}\r\n            >\r\n                {icon}\r\n                {title}\r\n            </button>\r\n        </AuthAdminView>\r\n    )\r\n}\r\n\r\nActionItem.propTypes = {\r\n    title: PropTypes.string,\r\n    icon: PropTypes.element,\r\n    onClick: PropTypes.func,\r\n    className: PropTypes.string,\r\n    right: PropTypes.string,\r\n}\r\n\r\nActionItem.defaultProps = {\r\n    title: 'Title',\r\n    icon: <IoExtensionPuzzleOutline />,\r\n    onClick: () => { },\r\n    className: '',\r\n    right: ''\r\n}\r\n\r\nexport default ActionItem","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport Select from 'react-select'\r\n\r\n// const getLevel = (data, parentId, level) => {\r\n//     let result = []\r\n//     const lst = data.filter(n => n.ParentId === parentId)\r\n//     if (lst.length !== 0) {\r\n//         const aLevel = level + 1\r\n//         lst.forEach((item) => {\r\n//             result.push({\r\n//                 ...item,\r\n//                 Level: level\r\n//             })\r\n//             const temp = getLevel(data, item.CategoryId, aLevel)\r\n//             temp.forEach(cat => {\r\n//                 result.push(cat)\r\n//             })\r\n//         })\r\n//     }\r\n//     return result\r\n// }\r\n\r\nconst getCategoryLevel = (data, parentId, catName) => {\r\n    let result = []\r\n    const lst = data.filter(n => n.ParentId === parentId)\r\n    if (lst.length !== 0) {\r\n        lst.forEach((item) => {\r\n            const levelCatName = `${catName !== '' ? `${catName} > ` : ''}${item.CategoryName}`\r\n            result.push({\r\n                ...item,\r\n                Label: `${catName !== '' ? `${catName} > ` : ''}${item.CategoryName}`\r\n            })\r\n            const temp = getCategoryLevel(data, item.CategoryId, levelCatName)\r\n            temp.forEach(cat => {\r\n                result.push(cat)\r\n            })\r\n        })\r\n    }\r\n    return result\r\n}\r\n\r\n// const getLabel = (catName, level) => {\r\n//     let str = ''\r\n//     for (let index = 0; index < level; index++) {\r\n//         str += '--- '\r\n//     }\r\n//     str += catName\r\n//     return str\r\n// }\r\n\r\nfunction CategoryDropdownTree(props) {\r\n    const { options, onChange, value, isClearable } = props\r\n\r\n    const [categories, setCategories] = useState([])\r\n\r\n    const [category, setCategory] = useState(null)\r\n\r\n    useEffect(() => {\r\n        if (options.length !== 0) {\r\n            // const cats = getLevel(options, 0, 0).map(item => {\r\n            //     return {\r\n            //         label: getLabel(item.CategoryName, item.Level),\r\n            //         value: item.CategoryId\r\n            //     }\r\n            // })\r\n            const cats = getCategoryLevel(options, 0, '').map(item => {\r\n                return {\r\n                    label: item.Label,\r\n                    value: item.CategoryId\r\n                }\r\n            })\r\n            setCategories(cats)\r\n        }\r\n    }, [options])\r\n\r\n    useEffect(() => {\r\n        if (categories.length !== 0) {\r\n            const tempList = categories.filter(n => n.value === value)\r\n            if (tempList.length !== 0) {\r\n                const selectedValue = tempList[0]\r\n                setCategory(selectedValue)\r\n            }\r\n            else {\r\n                setCategory(0)\r\n            }\r\n        }\r\n\r\n        // eslint-disable-next-line\r\n    }, [value])\r\n\r\n    return (\r\n        <Select\r\n            className=\"react-select-container\"\r\n            classNamePrefix=\"custom-select\"\r\n            isSearchable={false}\r\n            isClearable={isClearable}\r\n            options={categories}\r\n            value={category}\r\n            onChange={item => {\r\n                if (item !== null) {\r\n                    onChange(item.value)\r\n                }\r\n                else {\r\n                    onChange(0)\r\n                }\r\n            }}\r\n            placeholder='Nhóm sản phẩm'\r\n        />\r\n    )\r\n}\r\n\r\nCategoryDropdownTree.propTypes = {\r\n    options: PropTypes.array.isRequired,\r\n    onChange: PropTypes.func,\r\n    value: PropTypes.number,\r\n    isClearable: PropTypes.bool,\r\n}\r\n\r\nCategoryDropdownTree.defaultProps = {\r\n    options: [],\r\n    onChange: () => { },\r\n    value: 0,\r\n    isClearable: true\r\n}\r\n\r\nexport default CategoryDropdownTree","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\n\r\nfunction ModalPopup(props) {\r\n    const { partnerPopupId, title, content, onSave, onClose, isShow } = props\r\n\r\n    function handleSave(e) {\r\n        let isChecked = e.target.checked\r\n        onSave(isChecked, partnerPopupId)\r\n    }\r\n\r\n    return (\r\n        <Modal show={isShow} onHide={() => onClose(partnerPopupId)} backdrop=\"static\" centered\r\n            onExited={() => {\r\n\r\n            }}>\r\n            <Modal.Header closeButton className=\"border-bottom-0\">\r\n                <Modal.Title>{title}</Modal.Title>\r\n            </Modal.Header>\r\n            <Modal.Body>\r\n                <div dangerouslySetInnerHTML={{ __html: content }}></div>\r\n            </Modal.Body>\r\n            <Modal.Footer className=\"border-top-0\">\r\n                <div className=\"form-check form-checkbox-success\">\r\n                    <input type=\"checkbox\" className=\"form-check-input\" id=\"partner-popup\" onChange={e => handleSave(e)} />\r\n                    <label className=\"form-check-label\" htmlFor=\"partner-popup\">Không hiển thị lại</label>\r\n                </div>\r\n            </Modal.Footer>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalPopup.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    partnerPopupId: PropTypes.number,\r\n    title: PropTypes.string,\r\n    content: PropTypes.string,\r\n}\r\n\r\nModalPopup.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    partnerPopupId: 0,\r\n    title: '',\r\n    content: ''\r\n}\r\n\r\nexport default ModalPopup","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport Select from 'react-select'\r\n\r\nfunction CustomSelect(props) {\r\n    const { options, value, onChange, placeholder, noOptionsMessage, isSearchable, isClearable } = props\r\n\r\n    const [currentValue, setCurrentValue] = useState(null)\r\n\r\n    useEffect(() => {\r\n        const newValues = options.filter(n => n.value === value)\r\n        if (newValues.length !== 0) {\r\n            setCurrentValue(newValues[0])\r\n        }\r\n        else {\r\n            setCurrentValue(null)\r\n        }\r\n        // eslint-disable-next-line\r\n    }, [value])\r\n\r\n    return (\r\n        <Select\r\n            className=\"react-select-container\"\r\n            classNamePrefix=\"custom-select\"\r\n            isSearchable={isSearchable}\r\n            isClearable={isClearable}\r\n            options={options}\r\n            value={currentValue}\r\n            onChange={item => {\r\n                if (item !== null) {\r\n                    onChange(item.value)\r\n                }\r\n                else {\r\n                    onChange(0)\r\n                }\r\n            }}\r\n            placeholder={placeholder}\r\n            noOptionsMessage={() => noOptionsMessage}\r\n        />\r\n    )\r\n}\r\n\r\nCustomSelect.propTypes = {\r\n    options: PropTypes.array,\r\n    value: PropTypes.any,\r\n    onChange: PropTypes.func,\r\n    placeholder: PropTypes.string,\r\n    noOptionsMessage: PropTypes.string,\r\n    isSearchable: PropTypes.bool,\r\n    isClearable: PropTypes.bool,\r\n}\r\n\r\nCustomSelect.detaultProps = {\r\n    options: [\r\n        {\r\n            value: 1,\r\n            label: 'Option 1'\r\n        },\r\n        {\r\n            value: 1,\r\n            label: 'Option 2'\r\n        }\r\n    ],\r\n    value: 1,\r\n    onChange: () => { },\r\n    placeholder: '',\r\n    noOptionsMessage: '',\r\n    isSearchable: true,\r\n    isClearable: false\r\n}\r\n\r\nexport default CustomSelect","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nfunction CheckBox(props) {\r\n\r\n    const { title, name, className, variant, onChange, checked } = props\r\n\r\n    const variantClassName = () => {\r\n        return `form-control form-check form-radio-${variant !== undefined ? variant : props.variant} position-relative`\r\n    }\r\n\r\n    const handleChange = (e) => {\r\n        const isChecked = e.target.checked\r\n        onChange(isChecked)\r\n    }\r\n\r\n\r\n    return (\r\n        <div\r\n            className={className}\r\n        >\r\n            <div\r\n                className={variantClassName()}\r\n            >\r\n                <input\r\n                    type=\"checkbox\"\r\n                    checked={checked}\r\n                    id={name}\r\n                    name={name}\r\n                    className=\"form-check-input input-select-radio\"\r\n                    onChange={handleChange}\r\n                />\r\n                <label\r\n                    className=\"form-check-label input-select-label\"\r\n                    htmlFor={name}\r\n                >\r\n                    {title}\r\n                </label>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nCheckBox.propTypes = {\r\n    checked: PropTypes.bool,\r\n    name: PropTypes.string,\r\n    variant: PropTypes.string,\r\n    onChange: PropTypes.func,\r\n    title: PropTypes.string,\r\n    className: PropTypes.string\r\n}\r\n\r\nCheckBox.defaultProps = {\r\n    checked: false,\r\n    name: 'input-checkbox',\r\n    variant: 'primary',\r\n    onChange: () => { },\r\n    title: 'Title',\r\n    className: ''\r\n}\r\n\r\nexport default CheckBox","import axios from \"axios\";\r\nimport PropTypes from \"prop-types\";\r\nimport React, { Fragment, useRef, useState } from \"react\";\r\nimport { IoCloudUploadOutline } from \"react-icons/io5\";\r\n\r\nconst maxSizeInBute = 5_242_880; // 5MB\r\n\r\nconst apiUrl = window.apiUrl;\r\n\r\nfunction UploadFileButton(props) {\r\n  const fileInput = useRef(null);\r\n\r\n  const handleTrigger = () => {\r\n    fileInput.current.click();\r\n  };\r\n\r\n  const handleUpload = (e) => {\r\n    let files = e.target.files;\r\n    if (files.length !== 0) {\r\n      let file = files[0];\r\n      let name = file.name;\r\n      let sizeInByte = file.size;\r\n      if (sizeInByte > maxSizeInBute) {\r\n        return;\r\n      }\r\n      const formData = new FormData();\r\n      formData.append(\"formFile\", file);\r\n      formData.append(\"fileName\", name);\r\n      const url = apiUrl + \"/partner/storage/upload-file\";\r\n      setIsBusy(true);\r\n      axios\r\n        .post(url, formData)\r\n        .then((res) => {\r\n          let data = res.data;\r\n          if (props.onCompleted) {\r\n            props.onCompleted(data);\r\n          }\r\n        })\r\n        .finally(() => setIsBusy(false));\r\n    }\r\n  };\r\n\r\n  const [isBusy, setIsBusy] = useState(false);\r\n\r\n  const renderIcon = () => {\r\n    if (isBusy) {\r\n      return (\r\n        <div\r\n          className=\"spinner-border spinner-border-sm me-1\"\r\n          role=\"status\"\r\n        ></div>\r\n      );\r\n    } else {\r\n      return <IoCloudUploadOutline className=\"mt--3-px me-1 font-17\" />;\r\n    }\r\n  };\r\n\r\n  return (\r\n    <Fragment>\r\n      <input\r\n        style={{ display: \"none\" }}\r\n        type=\"file\"\r\n        accept=\".pdf\"\r\n        ref={fileInput}\r\n        onChange={handleUpload}\r\n      />\r\n      <button\r\n        onClick={handleTrigger}\r\n        className=\"btn btn-success\"\r\n        disabled={isBusy}\r\n        type=\"button\"\r\n      >\r\n        {renderIcon()}\r\n        Chọn file pdf\r\n      </button>\r\n    </Fragment>\r\n  );\r\n}\r\n\r\nUploadFileButton.propTypes = {\r\n  onCompleted: PropTypes.func,\r\n};\r\n\r\nexport default UploadFileButton;\r\n","import axios from 'axios'\r\n\r\nconst CategoryService = {\r\n    filter: (filters) => {\r\n        const url = `/admin/category/filter?keyword=${filters.keyword}`\r\n        const request = axios.get(url)\r\n        return request\r\n    },\r\n    getDropdown: () => {\r\n        const url = '/admin/category/get-dropdown'\r\n        const request = axios.get(url)\r\n        return request\r\n    },\r\n    create: (formData) => {\r\n        const url = '/admin/category/create'\r\n        return axios.post(url, formData)\r\n    },\r\n    getById: (categoryId) => {\r\n        const url = `/admin/category/get-by-id?id=${categoryId}`\r\n        const request = axios.get(url)\r\n        return request\r\n    },\r\n    update: (formData) => {\r\n        const url = '/admin/category/update'\r\n        return axios.post(url, formData)\r\n    },\r\n    delete: (categoryId) => {\r\n        const url = `/admin/category/delete?id=${categoryId}`\r\n        const request = axios.post(url)\r\n        return request\r\n    }\r\n}\r\n\r\nexport default CategoryService","import axios from 'axios'\r\n\r\nconst AttributeService = {\r\n    getAll: () => {\r\n        const url = '/admin/attribute/get-all'\r\n        return axios.get(url)\r\n    },\r\n    create: (formData) => {\r\n        const url = 'admin/attribute/create'\r\n        return axios.post(url, formData)\r\n    },\r\n    getById: (attributeId) => {\r\n        const url = `/admin/attribute/get-by-id?id=${attributeId}`\r\n        return axios.get(url)\r\n    },\r\n    update: (formData) => {\r\n        const url = '/admin/attribute/update'\r\n        return axios.post(url, formData)\r\n    },\r\n    delete: (attributeId) => {\r\n        const url = `/admin/attribute/delete?id=${attributeId}`\r\n        return axios.post(url)\r\n    }\r\n}\r\n\r\nexport default AttributeService","import axios from 'axios'\r\n\r\nconst ChildrenAttributeService = {\r\n    getByAttribute: attributeId => {\r\n        const url = `/admin/children-attribute/get-by-attribute?id=${attributeId}`\r\n        return axios.get(url)\r\n    },\r\n    create: formData => {\r\n        const url = '/admin/children-attribute/create'\r\n        return axios.post(url, formData)\r\n    },\r\n    getById: childAttributeId => {\r\n        const url = `/admin/children-attribute/get-by-id?id=${childAttributeId}`\r\n        return axios.get(url)\r\n    },\r\n    update: formData => {\r\n        const url = '/admin/children-attribute/update'\r\n        return axios.post(url, formData)\r\n    },\r\n    delete: childAttributeId => {\r\n        const url = `/admin/children-attribute/delete?id=${childAttributeId}`\r\n        return axios.post(url)\r\n    }\r\n}\r\n\r\nexport default ChildrenAttributeService","import React, { useState } from 'react'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst filters = {\r\n    keyword: ''\r\n}\r\n\r\nconst Filter = props => {\r\n    const { onSearch } = props\r\n\r\n    const [keyword, setKeyword] = useState('')\r\n\r\n    const handleKeywordChange = (e) => {\r\n        const value = e.target.value\r\n        setKeyword(value)\r\n        filters.keyword = value\r\n    }\r\n\r\n    const handleSearch = () => {\r\n        onSearch(filters)\r\n    }\r\n\r\n    const handleClearSearch = () => {\r\n        setKeyword('')\r\n        filters.keyword = ''\r\n        onSearch(filters)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-4 col-md-4 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <input\r\n                            autoFocus\r\n                            onChange={handleKeywordChange}\r\n                            onKeyDown={e => {\r\n                                if (e.key === 'Enter') {\r\n                                    handleSearch()\r\n                                }\r\n                            }}\r\n                            value={keyword} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Tên nhóm\" />\r\n                    </div>\r\n                    <div className=\"col-sm-8 col-md-8 col-lg-9 col-xl-9 col-xxl-10\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={handleSearch} />\r\n                            <ClearButton onClick={handleClearSearch} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func\r\n}\r\n\r\nFilter.defaultProps = {\r\n    onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, FormatNumber, LoadingRow } from '../../../../../components'\r\n\r\nconst Table = props => {\r\n    const renderTable = () => {\r\n        let data = props.data\r\n        if (data === null) return <LoadingRow colSpan={7} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={7} />\r\n        else {\r\n            return data.map((item, index) => <tr key={item.CategoryId}>\r\n                <td className=\"text-center\">{(index + 1)}</td>\r\n                <td>{item.Label}</td>\r\n                <td>{item.CategoryNote}</td>\r\n                <td className=\"text-end text-primary\">\r\n                    {<FormatNumber>{item.ProductCount}</FormatNumber>}\r\n                </td>\r\n                <td>\r\n                    {item.CreatedDate}\r\n                    <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n                </td>\r\n                <td>\r\n                    {renderStatus(item.StatusId)}\r\n                </td>\r\n                <td>\r\n                    <ActionRow>\r\n                        <ActionItem right=\"category_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sửa' />\r\n                        <ActionItem right=\"category_delete\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className=\"text-danger\" />\r\n                    </ActionRow>\r\n                </td>\r\n            </tr>)\r\n        }\r\n    }\r\n\r\n    const renderStatus = statusId => {\r\n        if (statusId === 1) return <span className=\"badge bg-success\">Hoạt động</span>\r\n        else return <span className=\"badge bg-warning\">Tạm khóa</span>\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Tên nhóm</th>\r\n                        <th>Ghi chú</th>\r\n                        <th className='text-end'>Sản phẩm</th>\r\n                        <th>Ngày tạo</th>\r\n                        <th>Trạng thái</th>\r\n                        <th className=\"w-52-px\"></th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    data: PropTypes.array,\r\n    onEdit: PropTypes.func,\r\n    onDelete: PropTypes.func\r\n}\r\n\r\nTable.defaultProps = {\r\n    data: null,\r\n    onEdit: null,\r\n    onDelete: null\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, InputSelect, CategoryDropdownTree } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    CategoryName: yup.string().required('Vui lòng nhập tên nhóm sản phẩm').max(100, 'Tên nhóm sản phẩm quá dài'),\r\n    ParentId: yup.number().min(0).integer(),\r\n    StatusId: yup.number().min(1).max(2).integer(),\r\n    Note: yup.string().max(100, 'Ghi chú quá dài')\r\n})\r\n\r\nconst statusOptions = [\r\n    {\r\n        value: 1,\r\n        label: 'Hoạt động'\r\n    },\r\n    {\r\n        value: 2,\r\n        label: 'Tạm khóa'\r\n    }\r\n]\r\n\r\nconst ModalAdd = props => {\r\n    const { control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema),\r\n        defaultValues: {\r\n            StatusId: 1\r\n        }\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới nhóm sản phẩm</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tên nhóm sản phẩm <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('CategoryName')} type=\"text\" className=\"form-control\" placeholder=\"Tên nhóm sản phẩm\" />\r\n                        {errors.CategoryName && <div className=\"validation-message\">{errors.CategoryName.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Nhóm cha</label>\r\n                        <Controller\r\n                            name=\"ParentId\"\r\n                            control={control}\r\n                            render={({ field: { onChange, value } }) => {\r\n                                return (\r\n                                    <CategoryDropdownTree\r\n                                        options={props.parent}\r\n                                        onChange={onChange}\r\n                                        value={value}\r\n                                    />\r\n                                )\r\n                            }}\r\n                        />\r\n                        {errors.ParentId && <div className=\"validation-message\">{errors.ParentId.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Trạng thái</label>\r\n                        <Controller\r\n                            name=\"StatusId\"\r\n                            control={control}\r\n                            render={({ field: { onChange, value } }) => {\r\n                                return (\r\n                                    <InputSelect\r\n                                        options={statusOptions}\r\n                                        defaultValue={1}\r\n                                        onChange={onChange}\r\n                                        value={value}\r\n                                        variant='success'\r\n                                    />\r\n                                )\r\n                            }}\r\n                        />\r\n                        {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Ghi chú</label>\r\n                        <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                        {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n    parent: PropTypes.array,\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n    parent: [],\r\n    onSave: null,\r\n    onClose: null,\r\n    isShow: false\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, InputSelect, CategoryDropdownTree } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    CategoryName: yup.string().required('Vui lòng nhập tên nhóm sản phẩm').max(100, 'Tên nhóm sản phẩm quá dài'),\r\n    ParentId: yup.number().min(0).integer(),\r\n    StatusId: yup.number().min(1).max(2).integer(),\r\n    Note: yup.string().max(100, 'Ghi chú quá dài')\r\n})\r\n\r\nconst statusOptions = [\r\n    {\r\n        value: 1,\r\n        label: 'Hoạt động'\r\n    },\r\n    {\r\n        value: 2,\r\n        label: 'Tạm khóa'\r\n    }\r\n]\r\n\r\nconst ModalEdit = props => {\r\n    const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                let info = props.data\r\n                setValue('CategoryId', info.CategoryId)\r\n                setValue('CategoryName', info.CategoryName)\r\n                setValue('ParentId', info.ParentId)\r\n                setValue('StatusId', info.StatusId)\r\n                setValue('Note', info.Note)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa nhóm sản phẩm</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tên nhóm sản phẩm <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('CategoryName')} type=\"text\" className=\"form-control\" placeholder=\"Tên nhóm sản phẩm\" />\r\n                        {errors.CategoryName && <div className=\"validation-message\">{errors.CategoryName.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Nhóm cha</label>\r\n                        <Controller\r\n                            name=\"ParentId\"\r\n                            control={control}\r\n                            render={({ field: { onChange, value } }) => {\r\n                                return (\r\n                                    <CategoryDropdownTree\r\n                                        options={props.parent}\r\n                                        onChange={onChange}\r\n                                        value={value}\r\n                                    />\r\n                                )\r\n                            }}\r\n                        />\r\n                        {errors.ParentId && <div className=\"validation-message\">{errors.ParentId.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Trạng thái</label>\r\n                        <Controller\r\n                            name=\"StatusId\"\r\n                            control={control}\r\n                            render={({ field: { onChange, value } }) => {\r\n                                return (\r\n                                    <InputSelect\r\n                                        options={statusOptions}\r\n                                        defaultValue={1}\r\n                                        onChange={onChange}\r\n                                        value={value}\r\n                                        variant='success'\r\n                                    />\r\n                                )\r\n                            }}\r\n                        />\r\n                        {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Ghi chú</label>\r\n                        <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                        {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n    data: PropTypes.object,\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    isBusy: PropTypes.bool\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n    data: {},\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    isBusy: false\r\n}\r\n\r\nexport default ModalEdit","import React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { CategoryService } from './../../../services/admin'\r\nimport { AuthAdminView, IconButton, Notification } from './../../../components'\r\nimport { Filter, ModalAdd, ModalEdit, Table } from './components'\r\n\r\nconst getCategoryLevel = (data, parentId, catName) => {\r\n    let result = []\r\n    const lst = data.filter(n => n.ParentId === parentId)\r\n    if (lst.length !== 0) {\r\n        lst.forEach((item) => {\r\n            const levelCatName = `${catName !== '' ? `${catName} > ` : ''}${item.CategoryName}`\r\n            result.push({\r\n                ...item,\r\n                Label: `${catName !== '' ? `${catName} > ` : ''}${item.CategoryName}`\r\n            })\r\n            const temp = getCategoryLevel(data, item.CategoryId, levelCatName)\r\n            temp.forEach(cat => {\r\n                result.push(cat)\r\n            })\r\n        })\r\n    }\r\n    return result\r\n}\r\n\r\nconst CategoryPage = () => {\r\n    // State lưu danh sách nhóm sản phẩm\r\n    const [category, setCategory] = useState()\r\n\r\n    // State lưu trạng thái đóng mở modal thêm mới nhóm sản phẩm\r\n    const [isShowModalCategoryAdd, setIsShowModalCategoryAdd] = useState(false)\r\n\r\n    // State lưu trạng thái đóng mở modal chỉnh sửa nhóm sản phẩm\r\n    const [isShowModalCategoryEdit, setEditIsShowModalCategoryEdit] = useState(false)\r\n\r\n    // State lưu danh sách nhóm sản phẩm dropdown để chọn khi thêm hoặc sửa nhóm san phẩm\r\n    const [categoryDropdown, setCategoryDropdown] = useState([])\r\n\r\n    // State lưu thông tin nhóm sản phẩm để chỉnh sửa\r\n    const [categoryInfo, setCategoryInfo] = useState({})\r\n\r\n    const [filters, setFilters] = useState({\r\n        keyword: ''\r\n    })\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Nhóm sản phẩm';\r\n        loadCategoryDropdown()\r\n    }, [])\r\n\r\n    useEffect(() => {\r\n        CategoryService.filter(filters).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                const cats = getCategoryLevel(data.Result, 0, '')\r\n                setCategory(cats)\r\n            }\r\n        })\r\n    }, [filters])\r\n\r\n    const loadCategoryDropdown = () => {\r\n        CategoryService.getDropdown().then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setCategoryDropdown(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const reloadCategory = () => {\r\n        setFilters({\r\n            ...filters\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <Filter\r\n                onSearch={params => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n            />\r\n\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"row\">\r\n                        <div className=\"col-12\">\r\n                            <AuthAdminView right=\"category_add\">\r\n                                <IconButton\r\n                                    className=\"mb-2\"\r\n                                    text=\"Thêm mới\"\r\n                                    icon={<IoAddCircleOutline />}\r\n                                    onClick={() => {\r\n                                        setIsShowModalCategoryAdd(true);\r\n                                    }} />\r\n                            </AuthAdminView>\r\n                        </div>\r\n                    </div>\r\n                    <Table\r\n                        data={category}\r\n                        onEdit={item => {\r\n                            CategoryService.getById(item.CategoryId).then(({ data }) => {\r\n                                if (data.IsSuccess) {\r\n                                    setCategoryInfo(data.Result)\r\n                                    setEditIsShowModalCategoryEdit(true)\r\n                                }\r\n                            })\r\n                        }}\r\n                        onDelete={item => {\r\n                            Notification.confirmHtml('Bạn có chắc muốn xóa nhóm sản phẩm', item.CategoryName, () => {\r\n                                CategoryService.delete(item.CategoryId).then(({ data }) => {\r\n                                    if (data.IsSuccess) {\r\n                                        reloadCategory()\r\n                                        loadCategoryDropdown()\r\n                                        Notification.success('Xóa nhóm sản phẩm thành công')\r\n                                    }\r\n                                })\r\n                            })\r\n                        }} />\r\n                </div>\r\n            </div>\r\n\r\n            <ModalAdd\r\n                parent={categoryDropdown}\r\n                isShow={isShowModalCategoryAdd}\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    CategoryService.create(formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            reloadCategory()\r\n                            loadCategoryDropdown()\r\n                            setIsShowModalCategoryAdd(false)\r\n                            Notification.success('Thêm mới nhóm sản phẩm thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalCategoryAdd(false)\r\n                }} />\r\n\r\n            <ModalEdit\r\n                data={categoryInfo}\r\n                parent={categoryDropdown}\r\n                isShow={isShowModalCategoryEdit}\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    CategoryService.update(formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            reloadCategory()\r\n                            loadCategoryDropdown()\r\n                            setCategoryInfo({})\r\n                            setEditIsShowModalCategoryEdit(false)\r\n                            Notification.success('Chỉnh sửa nhóm sản phẩm thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setCategoryInfo({})\r\n                    setEditIsShowModalCategoryEdit(false)\r\n                }} />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default CategoryPage","import PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Select from 'react-select'\r\nimport { ClearButton, SearchButton, CategoryDropdownTree } from './../../../../../components'\r\n\r\nconst productTypes = [\r\n    {\r\n        value: 0,\r\n        label: 'Sản phẩm cha con'\r\n    },\r\n    {\r\n        value: 1,\r\n        label: 'Chỉ sản phẩm cha'\r\n    },\r\n    {\r\n        value: 2,\r\n        label: 'Chỉ sản phẩm con'\r\n    }\r\n]\r\n\r\nconst filters = {\r\n    keyword: '',\r\n    catId: 0,\r\n    statusId: 0,\r\n    typeId: 0\r\n}\r\n\r\nconst Filter = props => {\r\n    const { onSearch } = props\r\n\r\n    const [keyword, setKeyword] = useState('')\r\n\r\n    const [productStatus, setProductStatus] = useState()\r\n\r\n    const [productStatusList, setProductStatusList] = useState([])\r\n\r\n    const [productType, setProductType] = useState()\r\n\r\n    const [catId, setCatId] = useState(0)\r\n\r\n    useEffect(() => {\r\n        const proStatusList = props.productStatus.map(item => {\r\n            return {\r\n                value: item.ProductStatusId,\r\n                label: item.ProductStatusName\r\n            }\r\n        })\r\n        setProductStatusList(proStatusList)\r\n    }, [props.productStatus])\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-3 col-xxl-2\">\r\n                        <input value={keyword}\r\n                            autoFocus\r\n                            onChange={e => {\r\n                                const value = e.target.value\r\n                                setKeyword(value)\r\n                                filters.keyword = value\r\n                            }}\r\n                            onKeyDown={e => {\r\n                                if (e.key === 'Enter') {\r\n                                    onSearch(filters)\r\n                                }\r\n                            }}\r\n                            type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Mã, tên sản phẩm\" />\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-3 col-xxl-2\">\r\n                        <CategoryDropdownTree\r\n                            options={props.category}\r\n                            onChange={(value) => {\r\n                                setCatId(value)\r\n                                filters.catId = value\r\n                            }}\r\n                            value={catId}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-3 col-xxl-2\">\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={false}\r\n                            isClearable={true}\r\n                            options={productStatusList}\r\n                            value={productStatus}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    setProductStatus(item)\r\n                                    filters.statusId = item.value\r\n                                }\r\n                                else {\r\n                                    setProductStatus(null)\r\n                                    filters.statusId = 0\r\n                                }\r\n                            }}\r\n                            placeholder='Trạng thái'\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-3 col-xxl-2\">\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={false}\r\n                            isClearable={false}\r\n                            options={productTypes}\r\n                            value={productType}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    setProductType(item)\r\n                                    filters.typeId = item.value\r\n                                }\r\n                                else {\r\n                                    setProductType(null)\r\n                                    filters.typeId = 0\r\n                                }\r\n                            }}\r\n                            defaultValue={productTypes[0]}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-12 col-lg-8 col-xl-12 col-xxl-4\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={() => {\r\n                                onSearch(filters)\r\n                            }} />\r\n                            <ClearButton onClick={() => {\r\n                                setKeyword('')\r\n                                filters.keyword = ''\r\n                                setCatId(0)\r\n                                filters.catId = 0\r\n                                setProductStatus(null)\r\n                                filters.statusId = 0\r\n                                setProductType(productTypes[0])\r\n                                filters.typeId = 0\r\n                                onSearch(filters)\r\n                            }} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func,\r\n    category: PropTypes.array,\r\n    productStatus: PropTypes.array\r\n}\r\n\r\nFilter.defaultProps = {\r\n    onSearch: () => { },\r\n    category: [],\r\n    productStatus: []\r\n}\r\n\r\nexport default Filter","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoCopyOutline, IoGridOutline, IoReceiptOutline, IoServerOutline, IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, AvatarRow, EmptyRow, FormatNumber, LoadingRow, ProductStatus } from '../../../../../components'\r\n\r\nconst Table = props => {\r\n    const { onParentClick, onAvatarClick } = props\r\n\r\n    const renderTable = () => {\r\n        const data = props.data\r\n        if (data === null) return <LoadingRow colSpan={9} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={9} />\r\n        else return data.map((item, index) => <tr key={item.ProductId}>\r\n            <td className=\"text-center\">{(props.pageItem * (props.pageIndex - 1)) + index + 1}</td>\r\n            <td>{item.ProductId}</td>\r\n            <td>\r\n                {item.IsParent ? <IoGridOutline className=\"me-1 text-primary\" /> : <IoCopyOutline className=\"me-1 text-success\" />}\r\n                {item.ProductCode}\r\n            </td>\r\n            <td>\r\n                <AvatarRow\r\n                    url={item.AvatarUrl}\r\n                    onClick={(urlObj) => {\r\n                        onAvatarClick(urlObj)\r\n                    }}\r\n                    className=\"cursor-zoom\"\r\n                />\r\n                <span className={item.IsParent ? 'cursor-point text-primary' : ''}\r\n                    onClick={() => {\r\n                        if (item.IsParent) {\r\n                            onParentClick((item))\r\n                        }\r\n                    }}\r\n                >\r\n                    {item.ProductName}\r\n                </span>\r\n            </td>\r\n            <td className=\"text-end text-primary\">\r\n                <FormatNumber>{item.OutputPrice}</FormatNumber>\r\n            </td>\r\n            <td className=\"text-end text-primary\">\r\n                <FormatNumber>{item.Quantity}</FormatNumber>\r\n            </td>\r\n            <td>{item.CategoryName}</td>\r\n            <td>\r\n                <ProductStatus className='cursor-point'\r\n                    statusId={item.ProductStatusId}\r\n                    onClick={() => props.onEditStatus(item)}\r\n                />\r\n            </td>\r\n            <td>\r\n                <ActionRow>\r\n                    <ActionItem right=\"product_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sửa' />\r\n                    <ActionItem right=\"product_edit_partner_group\" onClick={() => props.onEditPrice(item)} icon={<IoReceiptOutline />} title='Chỉnh sửa theo nhóm CTV' />\r\n                    <ActionItem right=\"product_receipt\" onClick={() => props.onEditQty(item)} icon={<IoServerOutline />} title='Cập nhật số lượng' />\r\n                    <ActionItem right=\"product_delete\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className=\"text-danger\" />\r\n                </ActionRow>\r\n            </td>\r\n        </tr >)\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered table-avatar mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>ID</th>\r\n                        <th>Mã</th>\r\n                        <th>Tên sản phẩm</th>\r\n                        <th className='text-end'>Giá bán</th>\r\n                        <th className='text-end'>SL</th>\r\n                        <th>Nhóm</th>\r\n                        <th>Trạng thái</th>\r\n                        <th className=\"w-52-px\"></th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    onEdit: PropTypes.func,\r\n    onEditPrice: PropTypes.func,\r\n    onEditQty: PropTypes.func,\r\n    onDelete: PropTypes.func,\r\n    data: PropTypes.array,\r\n    pageItem: PropTypes.number,\r\n    pageIndex: PropTypes.number,\r\n    onParentClick: PropTypes.func,\r\n    onAvatarClick: PropTypes.func,\r\n    onEditStatus: PropTypes.func\r\n}\r\n\r\nTable.defaultProps = {\r\n    onEdit: () => { },\r\n    onEditPrice: () => { },\r\n    onEditQty: () => { },\r\n    onDelete: () => { },\r\n    data: null,\r\n    pageItem: 10,\r\n    pageIndex: 1,\r\n    onParentClick: () => { },\r\n    onAvatarClick: () => { },\r\n    onEditStatus: () => { }\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport axios from 'axios'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport { IoShareSocialOutline } from 'react-icons/io5'\r\nimport NumberFormat from 'react-number-format'\r\nimport ReactQuill from 'react-quill'\r\nimport 'react-quill/dist/quill.snow.css'\r\nimport Select from 'react-select'\r\nimport * as yup from \"yup\"\r\nimport { CategoryDropdownTree, CloseButton, Config, EmptyRow, IconButton, InputSelect, LoadingRow, SaveButton, UploadImg } from './../../../../../components'\r\n\r\nconst invalidValue = 'Giá trị không hợp lệ'\r\n\r\nconst schema = yup.object().shape({\r\n    ProductName: yup.string().required('Vui lòng nhập tên sản phẩm').max(200, 'Tên sản phẩm quá dài'),\r\n    ProductCode: yup.string().required('Vui lòng nhập mã sản phẩm').max(50, 'Mã sản phẩm quá dài'),\r\n    CategoryId: yup.number().min(1, 'Vui lòng chọn nhóm sản phẩm'),\r\n    InputPrice: yup.number().min(0, invalidValue),\r\n    OutputPrice: yup.number().required('Vui lòng nhập giá bán').min(0, invalidValue),\r\n    StatusId: yup.number().oneOf([1, 2, 3], invalidValue),\r\n    Detail: yup.string().max(4_000, 'Chi tiết sản phẩm quá dài'),\r\n    AvatarUrl: yup.string().max(2_000, 'Đường dẫn ảnh quá dài'),\r\n    ProductPrices: yup.array(),\r\n    SubProducts: yup.array(),\r\n    ProductChildrentAttribute: yup.array()\r\n})\r\n\r\nconst getCombn = arr => {\r\n    if (arr.length === 1) {\r\n        return arr[0]\r\n    }\r\n    else {\r\n        var ans = []\r\n        var otherCases = getCombn(arr.slice(1));\r\n        for (var i = 0; i < otherCases.length; i++) {\r\n            for (var j = 0; j < arr[0].length; j++) {\r\n                ans.push(arr[0][j] + ' - ' + otherCases[i])\r\n            }\r\n        }\r\n        return ans\r\n    }\r\n}\r\n\r\nvar idArr = []\r\n\r\nconst ModalAdd = props => {\r\n    const { control, register, handleSubmit, reset, getValues, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema),\r\n        defaultValues: {\r\n            StatusId: 1,\r\n            CategoryId: 0\r\n        }\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [productStatus, setProductStatus] = useState([])\r\n\r\n    const [childrenProduct, setChildrenProduct] = useState([])\r\n\r\n    const [qty, setQty] = useState(0)\r\n\r\n    useEffect(() => {\r\n        const sttList = props.productStatus.map(item => {\r\n            return {\r\n                value: item.ProductStatusId,\r\n                label: item.ProductStatusName\r\n            }\r\n        })\r\n        setProductStatus(sttList)\r\n    }, [props.productStatus])\r\n\r\n    const handleGroupPriceChange = (value, groupId) => {\r\n        const lst = getValues('ProductPrices')\r\n        const index = lst.findIndex(n => n.GroupId === groupId)\r\n        lst[index].UnitPrice = parseInt(value)\r\n        setValue('ProductPrices', lst)\r\n    }\r\n\r\n    const renderGroupPrice = () => {\r\n        const groupList = props.groupList\r\n        return groupList.map((item, index) => {\r\n            return <tr key={item.GroupId}>\r\n                <td className=\"text-center\">{index + 1}</td>\r\n                <td>{item.GroupName}</td>\r\n                <td>\r\n                    <div className=\"input-group\">\r\n                        <NumberFormat\r\n                            placeholder='Giá bán'\r\n                            className=\"form-control\"\r\n                            // thousandSeparator={\".\"}\r\n                            // decimalSeparator={\",\"}\r\n                            allowNegative={false}\r\n                            defaultValue={0}\r\n                            decimalScale={0}\r\n                            onValueChange={val => {\r\n                                const value = val.value\r\n                                handleGroupPriceChange(value === '' ? 0 : value, item.GroupId)\r\n                            }}\r\n                        />\r\n                        <span className=\"input-group-text\">VNĐ</span>\r\n                    </div>\r\n                </td>\r\n            </tr>\r\n        })\r\n    }\r\n\r\n    const renderChildrenProduct = () => {\r\n        if (childrenProduct === null) return <LoadingRow colSpan={4} />\r\n        else if (childrenProduct.length === 0) return <EmptyRow colSpan={4} />\r\n        else return childrenProduct.map((item, index) => <tr key={index}>\r\n            <td className=\"text-center\">{index + 1}</td>\r\n            <td>{item.AttrName}</td>\r\n            <td>\r\n                <input type=\"text\" className=\"form-control\"\r\n                    value={item.ExtensionName}\r\n                    onChange={e => onChangeChildExtName(index, e.target.value)}\r\n                />\r\n            </td>\r\n            <td>\r\n                <NumberFormat\r\n                    placeholder='Số lượng'\r\n                    className=\"form-control\"\r\n                    // thousandSeparator={\".\"}\r\n                    // decimalSeparator={\",\"}\r\n                    allowNegative={false}\r\n                    defaultValue={0}\r\n                    decimalScale={0}\r\n                    value={item.Quantity}\r\n                    onValueChange={val => {\r\n                        const value = val.value\r\n                        onChangeChildQty(index, value)\r\n                    }}\r\n                />\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    const onChangeChildExtName = (index, name) => {\r\n        const lst = [...childrenProduct]\r\n        lst[index].ExtensionName = name\r\n        setChildrenProduct(lst)\r\n    }\r\n\r\n    const onChangeChildQty = (index, qty) => {\r\n        const lst = [...childrenProduct]\r\n        lst[index].Quantity = qty\r\n        setChildrenProduct(lst)\r\n    }\r\n\r\n    const initCombn = (val, index) => {\r\n        const lst = val.map(n => n.value + '')\r\n        idArr[index] = lst\r\n\r\n        const idList = []\r\n        const combnArr = getCombn(idArr)\r\n        combnArr.forEach(str => {\r\n            const arr = (str + '').split('-')\r\n            arr.forEach(num => {\r\n                const id = parseInt(num)\r\n                idList.push(id)\r\n            })\r\n        })\r\n\r\n        const reqStr = idList.join('_')\r\n        const url = `/admin/children-attribute/get-by-ids?ids=${reqStr}`\r\n        axios.get(url).then(res => {\r\n            const data = res.data\r\n            if (data.IsSuccess) {\r\n                let temp = []\r\n                combnArr.forEach(x => {\r\n                    let attr_name = ''\r\n                    let arr = (x + '').split('-')\r\n                    arr.forEach(num => {\r\n                        let id = parseInt(num)\r\n                        let attr = data.Result.filter(n => n.ChildrenAttributeId === id)[0]\r\n                        if (attr !== null) {\r\n                            let name = attr.ChildrenAttributeName\r\n                            attr_name += name + \" - \"\r\n                        }\r\n                    })\r\n                    attr_name = attr_name.trim()\r\n                    attr_name = attr_name.slice(0, -1)\r\n                    attr_name = attr_name.trim()\r\n                    temp.push({\r\n                        AttrName: attr_name,\r\n                        ExtensionName: \"- \" + attr_name,\r\n                        Quantity: 0,\r\n                        ChildrenAttrList: arr.map(n => parseInt(n))\r\n                    })\r\n                })\r\n                setChildrenProduct(temp)\r\n            }\r\n        })\r\n    }\r\n\r\n    const renderAttribute = () => {\r\n        let allAttr = props.allAttribute\r\n        return allAttr.map((item, index) => {\r\n            const childAttr = item.Children.map(child => {\r\n                return {\r\n                    value: child.ChildrenAttributeId,\r\n                    label: child.ChildrenAttributeName\r\n                }\r\n            })\r\n            return <div className=\"col-md-6 col-lg-6\" key={item.AttributeId}>\r\n                <div className=\"relative-position mb-2\">\r\n                    <label className=\"form-label\">{item.AttributeName}</label>\r\n                    <Select\r\n                        className=\"react-select-container\"\r\n                        classNamePrefix=\"custom-select\"\r\n                        isSearchable={false}\r\n                        isClearable={false}\r\n                        options={childAttr}\r\n                        // value={value}\r\n                        // onChange={onChange}\r\n                        onChange={val => {\r\n                            initCombn(val, index)\r\n                        }}\r\n                        placeholder='Giá trị thuộc tính'\r\n                        isMulti={true}\r\n                    />\r\n                </div>\r\n            </div>\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n            onExited={() => {\r\n                reset()\r\n                idArr = []\r\n                setChildrenProduct([])\r\n                setQty(0)\r\n            }}\r\n            onShow={() => {\r\n                let lst = props.groupList.map(item => {\r\n                    return {\r\n                        GroupId: item.GroupId,\r\n                        UnitPrice: 0\r\n                    }\r\n                })\r\n                setValue('ProductPrices', lst)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới sản phẩm</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                let proChildAttr = []\r\n                idArr.forEach(n => {\r\n                    const temp = n.map(x => parseInt(x))\r\n                    proChildAttr = proChildAttr.concat(temp)\r\n                })\r\n                formData.ProductChildrentAttribute = proChildAttr\r\n\r\n                const subProArr = []\r\n                childrenProduct.forEach(n => {\r\n                    subProArr.push({\r\n                        ExtensionName: n.ExtensionName,\r\n                        Quantity: n.Quantity,\r\n                        ChildrentAttributes: n.ChildrenAttrList\r\n                    })\r\n                })\r\n                formData.SubProducts = subProArr\r\n\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <ul className=\"nav nav-tabs nav-bordered mb-3\">\r\n                        <li className=\"nav-item\">\r\n                            <a href=\"#tab-add-1\" data-bs-toggle=\"tab\" aria-expanded=\"false\" className=\"nav-link active\">\r\n                                <i className=\"mdi mdi-home-variant d-md-none d-block\"></i>\r\n                                <span className=\"d-none d-md-block\">Thông tin</span>\r\n                            </a>\r\n                        </li>\r\n                        <li className=\"nav-item\">\r\n                            <a href=\"#tab-add-2\" data-bs-toggle=\"tab\" aria-expanded=\"true\" className=\"nav-link\">\r\n                                <i className=\"mdi mdi-account-circle d-md-none d-block\"></i>\r\n                                <span className=\"d-none d-md-block\">Giá theo nhóm</span>\r\n                            </a>\r\n                        </li>\r\n                        <li className=\"nav-item\">\r\n                            <a href=\"#tab-add-3\" data-bs-toggle=\"tab\" aria-expanded=\"false\" className=\"nav-link\">\r\n                                <i className=\"mdi mdi-settings-outline d-md-none d-block\"></i>\r\n                                <span className=\"d-none d-md-block\">Sản phẩm con</span>\r\n                            </a>\r\n                        </li>\r\n                    </ul>\r\n\r\n                    <div className=\"tab-content\">\r\n                        <div className=\"tab-pane show active\" id=\"tab-add-1\">\r\n                            <div className=\"row\">\r\n                                <div className=\"col-sm-4 col-md-3 col-lg-3 col-xl-2\">\r\n                                    <Controller\r\n                                        control={control}\r\n                                        name=\"AvatarUrl\"\r\n                                        render={({\r\n                                            field: { onChange, value }\r\n                                        }) => (\r\n                                            <UploadImg\r\n                                                imgUrl={value}\r\n                                                onCompleted={data => {\r\n                                                    onChange(data.Result.ImageUrl)\r\n                                                }}\r\n                                            />\r\n                                        )}\r\n                                    />\r\n                                    {errors.AvatarUrl && <div className=\"validation-message\">{errors.AvatarUrl.message}</div>}\r\n                                </div>\r\n                                <div className=\"col-sm-8 col-md-9 col-lg-9 col-xl-10\">\r\n                                    <div className=\"row\">\r\n                                        <div className=\"col-12\">\r\n                                            <div className=\"relative-position mb-2\">\r\n                                                <label className=\"form-label\">Tên sản phẩm <span className=\"text-danger\">*</span></label>\r\n                                                <input {...register('ProductName')} type=\"text\" className=\"form-control\" placeholder=\"Tên sản phẩm\" />\r\n                                                {errors.ProductName && <div className=\"validation-message\">{errors.ProductName.message}</div>}\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className=\"col-sm-12 col-md-12 col-lg-6 col-xl-3 col-xxl-3\">\r\n                                            <div className=\"relative-position mb-2\">\r\n                                                <label className=\"form-label\">Mã sản phẩm <span className=\"text-danger\">*</span></label>\r\n                                                <input {...register('ProductCode')} type=\"text\" className=\"form-control\" placeholder=\"Mã sản phẩm\" />\r\n                                                {errors.ProductCode && <div className=\"validation-message\">{errors.ProductCode.message}</div>}\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className=\"col-sm-12 col-md-12 col-lg-6 col-xl-4 col-xxl-4\">\r\n                                            <div className=\"relative-position mb-2\">\r\n                                                <label className=\"form-label\">Mã sản phẩm nhà cung cấp</label>\r\n                                                <input {...register('SupplierProductCode')} type=\"text\" className=\"form-control\" placeholder=\"Mã sản phẩm nhà cung cấp\" />\r\n                                                {errors.SupplierProductCode && <div className=\"validation-message\">{errors.SupplierProductCode.message}</div>}\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-5 col-xxl-5\">\r\n                                            <div className=\"relative-position mb-2\">\r\n                                                <label className=\"form-label\">Nhóm sản phẩm <span className=\"text-danger\">*</span></label>\r\n                                                <Controller\r\n                                                    control={control}\r\n                                                    name=\"CategoryId\"\r\n                                                    render={({\r\n                                                        field: { onChange, value }\r\n                                                    }) => (\r\n                                                        <CategoryDropdownTree\r\n                                                            options={props.category}\r\n                                                            onChange={onChange}\r\n                                                            value={value}\r\n                                                        />\r\n                                                    )}\r\n                                                />\r\n                                                {errors.CategoryId && <div className=\"validation-message\">{errors.CategoryId.message}</div>}\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className=\"col-sm-6 col-md-6 col-lg-6 col-xl-3 col-xxl-3\">\r\n                                            <div className=\"relative-position mb-2\">\r\n                                                <label className=\"form-label\">Giá nhập</label>\r\n                                                <div className=\"input-group\">\r\n                                                    <Controller\r\n                                                        name=\"InputPrice\"\r\n                                                        control={control}\r\n                                                        render={({ field: { onChange, value } }) => {\r\n                                                            return (\r\n                                                                <NumberFormat\r\n                                                                    placeholder='Giá nhập'\r\n                                                                    className=\"form-control\"\r\n                                                                    // thousandSeparator={\".\"}\r\n                                                                    // decimalSeparator={\",\"}\r\n                                                                    allowNegative={false}\r\n                                                                    defaultValue={0}\r\n                                                                    decimalScale={0}\r\n                                                                    value={value}\r\n                                                                    onValueChange={val => onChange(val.value)}\r\n                                                                />\r\n                                                            )\r\n                                                        }}\r\n                                                    />\r\n                                                    <span className=\"input-group-text\">VNĐ</span>\r\n                                                </div>\r\n                                                {errors.InputPrice && <div className=\"validation-message\">{errors.InputPrice.message}</div>}\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className=\"col-sm-6 col-md-6 col-lg-6 col-xl-3 col-xxl-3\">\r\n                                            <div className=\"relative-position mb-2\">\r\n                                                <label className=\"form-label\">Giá bán <span className=\"text-danger\">*</span></label>\r\n                                                <div className=\"input-group\">\r\n                                                    <Controller\r\n                                                        name=\"OutputPrice\"\r\n                                                        control={control}\r\n                                                        render={({ field: { onChange, value } }) => {\r\n                                                            return (\r\n                                                                <NumberFormat\r\n                                                                    placeholder='Giá bán'\r\n                                                                    className=\"form-control\"\r\n                                                                    // thousandSeparator={\".\"}\r\n                                                                    // decimalSeparator=\",\"\r\n                                                                    allowNegative={false}\r\n                                                                    defaultValue={0}\r\n                                                                    decimalScale={0}\r\n                                                                    value={value}\r\n                                                                    onValueChange={val => onChange(val.value)}\r\n                                                                />\r\n                                                            )\r\n                                                        }}\r\n                                                    />\r\n                                                    <span className=\"input-group-text\">VNĐ</span>\r\n                                                </div>\r\n                                                {errors.OutputPrice && <div className=\"validation-message\">{errors.OutputPrice.message}</div>}\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-6 col-xxl-6\">\r\n                                            <div className=\"relative-position mb-2\">\r\n                                                <label className=\"form-label\">Trạng thái</label>\r\n                                                <Controller\r\n                                                    name=\"StatusId\"\r\n                                                    control={control}\r\n                                                    render={({ field: { onChange, value } }) => {\r\n                                                        return (\r\n                                                            <InputSelect\r\n                                                                options={productStatus}\r\n                                                                value={value}\r\n                                                                defaultValue={1}\r\n                                                                name='product-add'\r\n                                                                variant='success'\r\n                                                                onChange={onChange}\r\n                                                            />\r\n                                                        )\r\n                                                    }}\r\n                                                />\r\n                                            </div>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Chi tiết sản phẩm</label>\r\n                                <Controller\r\n                                    control={control}\r\n                                    name=\"Detail\"\r\n                                    render={({\r\n                                        field: { onChange, value }\r\n                                    }) => (\r\n                                        <ReactQuill\r\n                                            value={value}\r\n                                            modules={Config.editorCfg}\r\n                                            onChange={onChange}\r\n                                        />\r\n                                    )}\r\n                                />\r\n                                {errors.Detail && <div className=\"validation-message\">{errors.Detail.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"tab-pane\" id=\"tab-add-2\">\r\n                            <div className=\"table-responsive\">\r\n                                <table className=\"table table-centered table-input mb-0\">\r\n                                    <thead>\r\n                                        <tr>\r\n                                            <th className=\"w-52-px\">#</th>\r\n                                            <th>Tên nhóm</th>\r\n                                            <th className=\"w-280-px\">Giá bán</th>\r\n                                        </tr>\r\n                                    </thead>\r\n                                    <tbody>\r\n                                        {renderGroupPrice()}\r\n                                    </tbody>\r\n                                </table>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"tab-pane\" id=\"tab-add-3\">\r\n                            <div className=\"row\">\r\n                                {renderAttribute()}\r\n                            </div>\r\n                            <div className='row'>\r\n                                <div className='col-3'>\r\n                                    <div className=\"input-group\">\r\n                                        <span className=\"input-group-text\">Số lượng</span>\r\n                                        <NumberFormat\r\n                                            placeholder='Số lượng'\r\n                                            className=\"form-control\"\r\n                                            allowNegative={false}\r\n                                            defaultValue={0}\r\n                                            decimalScale={0}\r\n                                            value={qty}\r\n                                            onValueChange={val => {\r\n                                                setQty(val.value)\r\n                                            }}\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                                <div className='col-9'>\r\n                                    <IconButton variant='success' icon={<IoShareSocialOutline />} onClick={() => {\r\n                                        const list = [...childrenProduct].map(n => {\r\n                                            return {\r\n                                                ...n,\r\n                                                Quantity: qty\r\n                                            }\r\n                                        })\r\n                                        setChildrenProduct(list)\r\n                                    }}>Đặt số lượng hàng loạt</IconButton>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"table-responsive\">\r\n                                <table className=\"table table-centered table-input mb-0\">\r\n                                    <thead>\r\n                                        <tr>\r\n                                            <th className=\"w-52-px\">#</th>\r\n                                            <th>Thuộc tính</th>\r\n                                            <th>Tên mở rộng</th>\r\n                                            <th className=\"w-280-px\">Số lượng</th>\r\n                                        </tr>\r\n                                    </thead>\r\n                                    <tbody>\r\n                                        {renderChildrenProduct()}\r\n                                    </tbody>\r\n                                </table>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal >\r\n    )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    category: PropTypes.array,\r\n    productStatus: PropTypes.array,\r\n    groupList: PropTypes.array,\r\n    allAttribute: PropTypes.array\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    category: [],\r\n    productStatus: [],\r\n    groupList: [],\r\n    allAttribute: []\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    // IsParent: yup.bool(),\r\n    // IsForAllChildrent: yup.bool(),\r\n    // ProductId: yup.number,\r\n    // Prices: yup.array()\r\n})\r\n\r\nfunction ModalEditPrice(props) {\r\n    const { handleSubmit, reset, setValue, getValues } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const renderTable = () => {\r\n        return props.data.map((item, index) => <tr key={item.GroupId}>\r\n            <td className=\"text-center\">{index + 1}</td>\r\n            <td>{item.GroupName}</td>\r\n            <td>\r\n                <NumberFormat\r\n                    placeholder='Giá nhập'\r\n                    className=\"form-control\"\r\n                    // thousandSeparator={\".\"}\r\n                    // decimalSeparator={\",\"}\r\n                    allowNegative={false}\r\n                    defaultValue={item.UnitPrice}\r\n                    onValueChange={val => {\r\n                        const temp = [...getValues(\"Prices\")]\r\n                        const index = temp.findIndex(n => n.PartnerGroupId === item.GroupId)\r\n                        temp[index].UnitPrice = parseInt(val.value)\r\n                        setValue(\"Prices\", temp)\r\n                    }}\r\n                />\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true}\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                let temp = []\r\n                temp = props.data.map(item => {\r\n                    return {\r\n                        ProductPriceId: item.ProductPriceId,\r\n                        UnitPrice: item.UnitPrice,\r\n                        PartnerGroupId: item.GroupId\r\n                    }\r\n                })\r\n                setValue(\"Prices\", temp)\r\n                setValue(\"IsParent\", props.isParent)\r\n                setValue(\"IsForAllChildrent\", true)\r\n                setValue(\"ProductId\", props.productId)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa giá theo nhóm cộng tác viên</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"table-responsive\">\r\n                        <table className=\"table table-centered table-input mb-0\">\r\n                            <thead>\r\n                                <tr>\r\n                                    <th className=\"w-52-px\">#</th>\r\n                                    <th>Nhóm cộng tác viên</th>\r\n                                    <th className=\"w-150-px\">Đơn giá</th>\r\n                                </tr>\r\n                            </thead>\r\n                            <tbody>\r\n                                {renderTable()}\r\n                            </tbody>\r\n                        </table>\r\n                    </div>\r\n                    {\r\n                        props.isParent && <div className=\"text-center mt-2\">\r\n                            <div className=\"form-check form-checkbox-success display-inline-block\">\r\n                                <input type=\"checkbox\" className=\"form-check-input\" id=\"edit-price\" defaultChecked={true} onChange={e => {\r\n                                    setValue('IsForAllChildrent', e.target.checked)\r\n                                }} />\r\n                                <label className=\"form-check-label\" htmlFor=\"edit-price\">Áp dụng cho tất cả các sản phẩm con</label>\r\n                            </div>\r\n                        </div>\r\n                    }\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEditPrice.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    data: PropTypes.array,\r\n    isParent: PropTypes.bool,\r\n    productId: PropTypes.number\r\n}\r\n\r\nModalEditPrice.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    data: [],\r\n    isParent: false,\r\n    productId: 0\r\n}\r\n\r\nexport default ModalEditPrice","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n\r\n})\r\n\r\nfunction ModalEditQty(props) {\r\n    const { control, handleSubmit, reset, setValue } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const renderTable = () => {\r\n        return props.productList.map((item, index) => {\r\n            return <tr key={item.ProductId}>\r\n                <td className=\"text-cemter\">{index + 1}</td>\r\n                <td>{item.ProductName}</td>\r\n                <td>\r\n                    <Controller\r\n                        control={control}\r\n                        name={`Products.${index}.Quantity`}\r\n                        render={({\r\n                            field: { onChange, onBlur, value, name, ref }\r\n                        }) => (\r\n                            <NumberFormat\r\n                                placeholder='Số lượng'\r\n                                className=\"form-control\"\r\n                                // thousandSeparator={\".\"}\r\n                                // decimalSeparator={\",\"}\r\n                                allowNegative={false}\r\n                                value={value}\r\n                                onValueChange={val => onChange(parseInt(val.value))}\r\n                            />\r\n                        )}\r\n                    />\r\n                </td>\r\n            </tr>\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true} size=\"lg\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                const temp = props.productList.map((item, index) => {\r\n                    return {\r\n                        ProductId: item.ProductId,\r\n                        Quantity: item.Quantity\r\n                    }\r\n                })\r\n                setValue('Products', temp)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Cập nhật số lượng sản phẩm</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"table-responsive\">\r\n                        <table className=\"table table-centered table-input mb-0\">\r\n                            <thead>\r\n                                <tr>\r\n                                    <th className=\"w-52-px\">#</th>\r\n                                    <th>Tên sản phẩm</th>\r\n                                    <th className=\"w-150-px\">Số lượng</th>\r\n                                </tr>\r\n                            </thead>\r\n                            <tbody>\r\n                                {renderTable()}\r\n                            </tbody>\r\n                        </table>\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEditQty.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    data: PropTypes.array\r\n}\r\n\r\nModalEditQty.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    productList: []\r\n}\r\n\r\nexport default ModalEditQty","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport ReactQuill from 'react-quill'\r\nimport 'react-quill/dist/quill.snow.css'\r\nimport * as yup from \"yup\"\r\nimport { CategoryDropdownTree, CloseButton, Config, InputSelect, SaveButton, UploadImg } from './../../../../../components'\r\n\r\nconst invalidValue = 'Giá trị không hợp lệ'\r\n\r\nconst schema = yup.object().shape({\r\n    ProductName: yup.string().required('Vui lòng nhập tên sản phẩm').max(200, 'Tên sản phẩm quá dài'),\r\n    ProductCode: yup.string().required('Vui lòng nhập mã sản phẩm').max(50, 'Mã sản phẩm quá dài'),\r\n    CategoryId: yup.number().min(1, 'Vui lòng chọn nhóm sản phẩm'),\r\n    InputPrice: yup.number().min(0, invalidValue),\r\n    OutputPrice: yup.number().required('Vui lòng nhập giá bán').min(0, invalidValue),\r\n    StatusId: yup.number().oneOf([1, 2, 3], invalidValue),\r\n    Detail: yup.string().max(4_000, 'Chi tiết sản phẩm quá dài'),\r\n    AvatarUrl: yup.string().max(2_000, 'Đường dẫn ảnh quá dài'),\r\n    IsApplyForAll: yup.bool(),\r\n    ProductId: yup.number()\r\n})\r\n\r\nfunction ModalEdit(props) {\r\n    const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema),\r\n        defaultValues: {\r\n            StatusId: 1\r\n        }\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [productStatus, setProductStatus] = useState([])\r\n\r\n    useEffect(() => {\r\n        const sttList = props.productStatus.map(item => {\r\n            return {\r\n                value: item.ProductStatusId,\r\n                label: item.ProductStatusName\r\n            }\r\n        })\r\n        setProductStatus(sttList)\r\n    }, [props.productStatus])\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                const info = props.info\r\n                setValue('ProductName', info.ProductName)\r\n                setValue('ProductCode', info.ProductCode)\r\n                setValue('InputPrice', info.InputPrice)\r\n                setValue('OutputPrice', info.OutputPrice)\r\n                setValue('StatusId', info.ProductStatusId)\r\n                setValue('Detail', info.Detail == null ? '' : info.Detail)\r\n                setValue('AvatarUrl', info.AvatarUrl == null ? '' : info.AvatarUrl)\r\n                setValue('CategoryId', info.CategoryId)\r\n                setValue('IsApplyForAll', true)\r\n                setValue('ProductId', info.ProductId)\r\n\r\n                const cat = props.category.filter(n => n.CategoryId === info.CategoryId).map(item => {\r\n                    return {\r\n                        value: item.CategoryId,\r\n                        label: item.CategoryName\r\n                    }\r\n                })[0]\r\n\r\n                setValue('CategoryObj', cat)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa sản phẩm</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"row\">\r\n                        <div className=\"col-sm-4 col-md-3 col-lg-3 col-xl-2\">\r\n                            <Controller\r\n                                control={control}\r\n                                name=\"AvatarUrl\"\r\n                                render={({\r\n                                    field: { onChange, value }\r\n                                }) => (\r\n                                    <UploadImg\r\n                                        imgUrl={value}\r\n                                        onCompleted={data => {\r\n                                            onChange(data.Result.ImageUrl)\r\n                                        }}\r\n                                    />\r\n                                )}\r\n                            />\r\n                            {errors.AvatarUrl && <div className=\"validation-message\">{errors.AvatarUrl.message}</div>}\r\n                        </div>\r\n                        <div className=\"col-sm-8 col-md-9 col-lg-9 col-xl-10\">\r\n                            <div className=\"row\">\r\n                                <div className=\"col-12\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Tên sản phẩm <span className=\"text-danger\">*</span></label>\r\n                                        <input {...register('ProductName')} type=\"text\" className=\"form-control\" placeholder=\"Tên sản phẩm\" />\r\n                                        {errors.ProductName && <div className=\"validation-message\">{errors.ProductName.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-12 col-md-12 col-lg-6 col-xl-3 col-xxl-3\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Mã sản phẩm <span className=\"text-danger\">*</span></label>\r\n                                        <input {...register('ProductCode')} type=\"text\" className=\"form-control\" placeholder=\"Mã sản phẩm\" />\r\n                                        {errors.ProductCode && <div className=\"validation-message\">{errors.ProductCode.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-12 col-md-12 col-lg-6 col-xl-4 col-xxl-4\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Mã sản phẩm nhà cung cấp</label>\r\n                                        <input {...register('SupplierProductCode')} type=\"text\" className=\"form-control\" placeholder=\"Mã sản phẩm nhà cung cấp\" />\r\n                                        {errors.SupplierProductCode && <div className=\"validation-message\">{errors.SupplierProductCode.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-5 col-xxl-5\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Nhóm sản phẩm <span className=\"text-danger\">*</span></label>\r\n                                        <Controller\r\n                                            control={control}\r\n                                            name=\"CategoryId\"\r\n                                            render={({\r\n                                                field: { onChange, value }\r\n                                            }) => (\r\n                                                <CategoryDropdownTree\r\n                                                    options={props.category}\r\n                                                    onChange={onChange}\r\n                                                    value={value}\r\n                                                />\r\n                                            )}\r\n                                        />\r\n                                        {errors.CategoryId && <div className=\"validation-message\">{errors.CategoryId.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-6 col-md-6 col-lg-6 col-xl-3 col-xxl-3\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Giá nhập</label>\r\n                                        <div className=\"input-group\">\r\n                                            <Controller\r\n                                                name=\"InputPrice\"\r\n                                                control={control}\r\n                                                render={({ field: { onChange, value } }) => {\r\n                                                    return (\r\n                                                        <NumberFormat\r\n                                                            placeholder='Giá nhập'\r\n                                                            className=\"form-control\"\r\n                                                            // thousandSeparator={\".\"}\r\n                                                            // decimalSeparator={\",\"}\r\n                                                            allowNegative={false}\r\n                                                            defaultValue={0}\r\n                                                            decimalScale={0}\r\n                                                            value={value}\r\n                                                            onValueChange={val => onChange(val.value)}\r\n                                                        />\r\n                                                    )\r\n                                                }}\r\n                                            />\r\n                                            <span className=\"input-group-text\">VNĐ</span>\r\n                                        </div>\r\n                                        {errors.InputPrice && <div className=\"validation-message\">{errors.InputPrice.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-6 col-md-6 col-lg-6 col-xl-3 col-xxl-3\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Giá bán <span className=\"text-danger\">*</span></label>\r\n                                        <div className=\"input-group\">\r\n                                            <Controller\r\n                                                name=\"OutputPrice\"\r\n                                                control={control}\r\n                                                render={({ field: { onChange, value } }) => {\r\n                                                    return (\r\n                                                        <NumberFormat\r\n                                                            placeholder='Giá bán'\r\n                                                            className=\"form-control\"\r\n                                                            // thousandSeparator={\".\"}\r\n                                                            // decimalSeparator=\",\"\r\n                                                            allowNegative={false}\r\n                                                            defaultValue={0}\r\n                                                            decimalScale={0}\r\n                                                            value={value}\r\n                                                            onValueChange={val => onChange(val.value)}\r\n                                                        />\r\n                                                    )\r\n                                                }}\r\n                                            />\r\n                                            <span className=\"input-group-text\">VNĐ</span>\r\n                                        </div>\r\n                                        {errors.OutputPrice && <div className=\"validation-message\">{errors.OutputPrice.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-6 col-xxl-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Trạng thái</label>\r\n                                        <Controller\r\n                                            name=\"StatusId\"\r\n                                            control={control}\r\n                                            render={({ field: { onChange, value } }) => {\r\n                                                return (\r\n                                                    <InputSelect\r\n                                                        options={productStatus}\r\n                                                        value={value}\r\n                                                        defaultValue={1}\r\n                                                        name='product-add'\r\n                                                        variant='success'\r\n                                                        onChange={onChange}\r\n                                                    />\r\n                                                )\r\n                                            }}\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Chi tiết sản phẩm</label>\r\n                        <Controller\r\n                            control={control}\r\n                            name=\"Detail\"\r\n                            render={({\r\n                                field: { onChange, value }\r\n                            }) => (\r\n                                <ReactQuill\r\n                                    value={value}\r\n                                    modules={Config.editorCfg}\r\n                                    onChange={onChange}\r\n                                />\r\n                            )}\r\n                        />\r\n                        {errors.Detail && <div className=\"validation-message\">{errors.Detail.message}</div>}\r\n                    </div>\r\n                    {\r\n                        props.info.IsParent && <div className=\"text-center mt-2\">\r\n                            <div className=\"form-check form-checkbox-success display-inline-block\">\r\n                                <input type=\"checkbox\" className=\"form-check-input\" id=\"edit-price\" {...register('IsApplyForAll')} />\r\n                                <label className=\"form-check-label\" htmlFor=\"edit-price\">Áp dụng cho tất cả các sản phẩm con</label>\r\n                            </div>\r\n                        </div>\r\n                    }\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal >\r\n    )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    category: PropTypes.array,\r\n    productStatus: PropTypes.array,\r\n    groupList: PropTypes.array,\r\n    info: PropTypes.object\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    category: [],\r\n    productStatus: [],\r\n    info: {}\r\n}\r\n\r\nexport default ModalEdit","import PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport NumberFormat from 'react-number-format'\r\nimport 'react-quill/dist/quill.snow.css'\r\nimport { CloseButton, EmptyRow, ReadExcelButton, SaveButton } from './../../../../../components'\r\n\r\nfunction ModalEditQtyExcel(props) {\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [productList, setProductList] = useState([])\r\n\r\n    const onNumberChange = (value, productId) => {\r\n        const temp = [...productList]\r\n        const index = temp.findIndex(n => n.ID === productId)\r\n        temp[index].SO_LUONG = value\r\n        setProductList(temp)\r\n    }\r\n\r\n    const renderTable = () => {\r\n        if (productList.length === 0) return <EmptyRow colSpan={4} />\r\n        else return productList.map((item, index) => <tr key={index}>\r\n            <td>{index + 1}</td>\r\n            <td>{item.ID}</td>\r\n            <td>{item.TEN_SP}</td>\r\n            <td>\r\n                <NumberFormat\r\n                    placeholder='Số lượng'\r\n                    className=\"form-control\"\r\n                    // thousandSeparator={\".\"}\r\n                    // decimalSeparator={\",\"}\r\n                    allowNegative={false}\r\n                    defaultValue={item.SO_LUONG}\r\n                    onValueChange={val => onNumberChange(parseInt(val.value), item.ID)}\r\n                />\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n            onExited={() => {\r\n                setProductList([])\r\n            }}\r\n            onShow={() => {\r\n\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Cập nhật số lượng sản phẩm bằng file excel</Modal.Title>\r\n            </Modal.Header>\r\n            <Modal.Body>\r\n                <div className=\"table-responsive\">\r\n                    <table className=\"table table-centered table-input mb-0\">\r\n                        <thead>\r\n                            <tr>\r\n                                <th className=\"w-52-px\">#</th>\r\n                                <th>ID</th>\r\n                                <th>Tên sản phẩm</th>\r\n                                <th className=\"w-150-px\">Số lượng</th>\r\n                            </tr>\r\n                        </thead>\r\n                        <tbody>\r\n                            {renderTable()}\r\n                        </tbody>\r\n                    </table>\r\n                </div>\r\n            </Modal.Body>\r\n            <Modal.Footer>\r\n                <ReadExcelButton\r\n                    onCompleted={data => {\r\n                        setProductList(data.Result)\r\n                    }}\r\n                />\r\n                <SaveButton type=\"button\" isBusy={isBusy}\r\n                    onClick={() => {\r\n                        props.onSave(productList, setIsBusy)\r\n                    }}\r\n                />\r\n                <CloseButton onClick={props.onClose} />\r\n            </Modal.Footer>\r\n        </Modal >\r\n    )\r\n}\r\n\r\nModalEditQtyExcel.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool\r\n}\r\n\r\nModalEditQtyExcel.defaultPropts = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false\r\n}\r\n\r\nexport default ModalEditQtyExcel","import { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport PropTypes from \"prop-types\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport Modal from \"react-bootstrap/Modal\";\r\nimport { Controller, useForm } from \"react-hook-form\";\r\nimport * as yup from \"yup\";\r\nimport {\r\n  CloseButton,\r\n  InputSelect,\r\n  SaveButton,\r\n} from \"./../../../../../components\";\r\n\r\nconst schema = yup.object().shape({\r\n  orderId: yup.number(),\r\n  statusId: yup.number(),\r\n});\r\n\r\nconst ModalEditStatus = (props) => {\r\n  const { setValue, control, handleSubmit, reset } = useForm({\r\n    resolver: yupResolver(schema),\r\n  });\r\n\r\n  const [isBusy, setIsBusy] = useState(false);\r\n\r\n  const { statuses } = props;\r\n\r\n  const [productStatuses, setProductStatuses] = useState([]);\r\n\r\n  useEffect(() => {\r\n    const statusList = statuses.map((item) => {\r\n      return {\r\n        value: item.ProductStatusId,\r\n        label: item.ProductStatusName,\r\n      };\r\n    });\r\n    setProductStatuses(statusList);\r\n  }, [statuses]);\r\n\r\n  return (\r\n    <Modal\r\n      show={props.isShow}\r\n      onHide={props.onClose}\r\n      backdrop=\"static\"\r\n      onExited={() => {\r\n        reset();\r\n      }}\r\n      onShow={() => {\r\n        setValue(\"productId\", props.productId);\r\n        setValue(\"statusId\", props.statusId);\r\n        setValue(\"isParent\", props.isParent);\r\n        setValue(\"isForAllChildrent\", true);\r\n      }}\r\n    >\r\n      <Modal.Header closeButton>\r\n        <Modal.Title>Sửa trạng thái sản phẩm</Modal.Title>\r\n      </Modal.Header>\r\n      <form\r\n        onSubmit={handleSubmit((formData) => {\r\n          props.onSave(formData, setIsBusy);\r\n        })}\r\n      >\r\n        <Modal.Body>\r\n          <Controller\r\n            name=\"statusId\"\r\n            control={control}\r\n            render={({ field: { onChange, value } }) => {\r\n              return (\r\n                <InputSelect\r\n                  isVertical={true}\r\n                  options={productStatuses}\r\n                  value={value}\r\n                  defaultValue={value}\r\n                  name=\"product-status\"\r\n                  variant=\"success\"\r\n                  onChange={onChange}\r\n                />\r\n              );\r\n            }}\r\n          />\r\n          {props.isParent && (\r\n            <div className=\"text-center mt-2\">\r\n              <div className=\"form-check form-checkbox-success display-inline-block\">\r\n                <input\r\n                  type=\"checkbox\"\r\n                  className=\"form-check-input\"\r\n                  id=\"edit-status\"\r\n                  defaultChecked={true}\r\n                  onChange={(e) => {\r\n                    setValue(\"isForAllChildrent\", e.target.checked);\r\n                  }}\r\n                />\r\n                <label className=\"form-check-label\" htmlFor=\"edit-price\">\r\n                  Áp dụng cho tất cả các sản phẩm con\r\n                </label>\r\n              </div>\r\n            </div>\r\n          )}\r\n        </Modal.Body>\r\n        <Modal.Footer>\r\n          <SaveButton isBusy={isBusy} />\r\n          <CloseButton onClick={props.onClose} />\r\n        </Modal.Footer>\r\n      </form>\r\n    </Modal>\r\n  );\r\n};\r\n\r\nModalEditStatus.propTypes = {\r\n  statuses: PropTypes.array,\r\n  onSave: PropTypes.func,\r\n  onClose: PropTypes.func,\r\n  isShow: PropTypes.bool,\r\n  statusId: PropTypes.number,\r\n  productId: PropTypes.number,\r\n  isParent: PropTypes.bool\r\n};\r\n\r\nexport default ModalEditStatus;\r\n","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { Dropdown } from 'react-bootstrap'\r\nimport { IoAddCircleOutline, IoCloudUploadOutline } from 'react-icons/io5'\r\nimport { SiMicrosoftexcel } from 'react-icons/si'\r\nimport { useHistory } from \"react-router-dom\"\r\nimport { IconButton, Notification, Pagination, AuthAdminView } from './../../../components'\r\nimport { Filter, ModalAdd, ModalEdit, ModalEditPrice, ModalEditQty, ModalEditQtyExcel, Table, ModalEditStatus } from './components'\r\nimport ImageViewer from 'react-simple-image-viewer'\r\n\r\nconst downloadFile = (data) => {\r\n    const downloadUrl = window.URL.createObjectURL(new Blob([data]))\r\n    const link = document.createElement('a')\r\n    link.href = downloadUrl\r\n    link.setAttribute('download', 'ProductImport.xlsx')\r\n    document.body.appendChild(link)\r\n    link.click()\r\n    link.remove()\r\n}\r\n\r\nconst ProductPage = () => {\r\n    const history = useHistory()\r\n\r\n    const [category, setCategory] = useState([])\r\n\r\n    const [productStatus, setProductStatus] = useState([])\r\n\r\n    const [isShowModalProAdd, setIsShowModalProAdd] = useState(false)\r\n\r\n    const [modalEditPriceInfo, setModalEditPriceInfo] = useState({\r\n        data: [],\r\n        isShow: false,\r\n        isParent: false,\r\n        productId: 0\r\n    })\r\n\r\n    const [groupList, setGroupList] = useState([])\r\n\r\n    const [allAttribute, setAllAttribute] = useState([])\r\n\r\n    const [productList, setProductList] = useState(null)\r\n\r\n    const [filters, setFilters] = useState({\r\n        keyword: '',\r\n        catId: 0,\r\n        statusId: 0,\r\n        typeId: 0,\r\n        pageItem: 10,\r\n        pageIndex: 1,\r\n        parentId: 0\r\n    })\r\n\r\n    const [pagination, setPagination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [modalEditQtyInfo, setModalEditQtyInfo] = useState({\r\n        isShow: false,\r\n        productList: []\r\n    })\r\n\r\n    const [modalEditInfo, setModalEditInfo] = useState({\r\n        isShow: false,\r\n        data: {}\r\n    })\r\n\r\n    const [isShowModalEditQtyExcel, setIsShowModalEditQtyExcel] = useState(false)\r\n\r\n    const [parent, setParent] = useState(null)\r\n\r\n    const [isShowViewer, setIsShowViewer] = useState(false)\r\n\r\n    const [isShowModalEditStatus, setisShowModalEditStatus] = useState(false)\r\n\r\n    const [editStatusInfo, setEditStatusInfo] = useState(null)\r\n\r\n    const [viewerList, setViewerList] = useState([])\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Sản phẩm'\r\n\r\n        loadCategory()\r\n        loadPropductStatus()\r\n        loadPartnerGroup()\r\n        loadAllAttrParentChildren()\r\n    }, [])\r\n\r\n    const getParamString = () => {\r\n        const strParam = `keyword=${filters.keyword}&catId=${filters.catId}&statusId=${filters.statusId}&proType=${filters.typeId}&parentId=${filters.parentId}`\r\n        return strParam\r\n    }\r\n\r\n    useEffect(() => {\r\n        const strParam = `keyword=${filters.keyword}&catId=${filters.catId}&statusId=${filters.statusId}&proType=${filters.typeId}&parentId=${filters.parentId}`\r\n        const url = `/admin/product/filter?${strParam}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n        axios.get(url).then(res => {\r\n            const data = res.data\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex\r\n                }\r\n                setPagination(newPagination)\r\n                setProductList(data.Result.Data)\r\n            }\r\n        })\r\n    }, [filters])\r\n\r\n    const loadCategory = () => {\r\n        const url = '/admin/category/get-dropdown'\r\n        axios.get(url).then(res => {\r\n            const data = res.data\r\n            if (data.IsSuccess) {\r\n                setCategory(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadPropductStatus = () => {\r\n        const url = '/admin/product-status/get-all'\r\n        axios.get(url).then(res => {\r\n            const data = res.data\r\n            if (data.IsSuccess) {\r\n                setProductStatus(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadPartnerGroup = () => {\r\n        const url = '/admin/partner-group/get-all'\r\n        axios.get(url).then(res => {\r\n            const data = res.data\r\n            if (data.IsSuccess) {\r\n                setGroupList(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadAllAttrParentChildren = () => {\r\n        const url = '/admin/attribute/get-all-parent-children'\r\n        axios.get(url).then(res => {\r\n            const data = res.data\r\n            if (data.IsSuccess) {\r\n                setAllAttribute(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const reloadProduct = (isKeepCurrent = false) => {\r\n        const newFilters = { ...filters }\r\n        if (!isKeepCurrent) {\r\n            newFilters.pageIndex = 1\r\n        }\r\n        setFilters(newFilters)\r\n    }\r\n\r\n    const renderParent = () => {\r\n        if (parent !== null) {\r\n            return (\r\n                <div className=\"row mb-2\">\r\n                    <div className=\"col-12\">\r\n                        <div className=\"alert alert-primary alert-dismissible fade show mb-0\">\r\n                            <button type=\"button\" className=\"btn-close\"\r\n                                onClick={() => {\r\n                                    setParent(null)\r\n                                    const newFilters = {\r\n                                        ...filters,\r\n                                        pageIndex: 1,\r\n                                        parentId: 0\r\n                                    }\r\n                                    setFilters(newFilters)\r\n                                }}\r\n                            ></button>\r\n                            <strong>Sản phẩm cha: </strong> {parent.ProductName}\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            )\r\n        }\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <Filter\r\n                category={category}\r\n                productStatus={productStatus}\r\n                onSearch={params => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params,\r\n                        pageIndex: 1\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n            />\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"row\">\r\n                        <div className=\"col-md-6\">\r\n                            <div className=\"button-list mb-2\">\r\n                                <AuthAdminView right=\"product_add\">\r\n                                    <IconButton\r\n                                        text=\"Thêm mới\"\r\n                                        icon={<IoAddCircleOutline />}\r\n                                        onClick={() => {\r\n                                            setIsShowModalProAdd(true)\r\n                                        }} />\r\n                                    <IconButton\r\n                                        variant='info'\r\n                                        text=\"Thêm từ file excel\"\r\n                                        icon={<IoAddCircleOutline />}\r\n                                        onClick={() => {\r\n                                            history.push('/admin/product/create-from-excel')\r\n                                        }} />\r\n                                </AuthAdminView>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-md-6\">\r\n                            <div className=\"button-list mb-2 text-end\">\r\n                                <AuthAdminView right=\"product_edit\">\r\n                                    <IconButton\r\n                                        variant='success'\r\n                                        text=\"Cập nhật số lượng\"\r\n                                        icon={<IoCloudUploadOutline />}\r\n                                        onClick={() => {\r\n                                            setIsShowModalEditQtyExcel(true)\r\n                                        }}\r\n                                    />\r\n                                </AuthAdminView>\r\n                                <AuthAdminView right=\"product_export\">\r\n                                    <Dropdown className=\"display-inline-block\">\r\n                                        <Dropdown.Toggle variant=\"danger\">\r\n                                            <SiMicrosoftexcel className=\"font-17 mt--2-px me-1\" />\r\n                                            Xuất excel\r\n                                        </Dropdown.Toggle>\r\n                                        <Dropdown.Menu>\r\n                                            <Dropdown.Item onClick={() => {\r\n                                                const strParam = getParamString()\r\n                                                const url = `/admin/product/export?${strParam}&pageItem=10&pageIndex=1`\r\n                                                axios.get(url, { responseType: 'blob' }).then(({ data }) => {\r\n                                                    downloadFile(data)\r\n                                                })\r\n                                            }}>Mặc định trang hiện tại</Dropdown.Item>\r\n                                            <Dropdown.Item onClick={() => {\r\n                                                const strParam = getParamString()\r\n                                                const url = `/admin/product/export?${strParam}&pageItem=10&pageIndex=0`\r\n                                                axios.get(url, { responseType: 'blob' }).then(({ data }) => {\r\n                                                    downloadFile(data)\r\n                                                })\r\n                                            }}>Mặc định tất cả các trang</Dropdown.Item>\r\n                                            <Dropdown.Item onClick={() => {\r\n                                                const strParam = getParamString()\r\n                                                const url = `/admin/product/export-quantity-update?${strParam}&pageItem=10&pageIndex=1`\r\n                                                axios.get(url, { responseType: 'blob' }).then(({ data }) => {\r\n                                                    downloadFile(data)\r\n                                                })\r\n                                            }}>Cập nhật số lượng trang hiện tại</Dropdown.Item>\r\n                                            <Dropdown.Item onClick={() => {\r\n                                                const strParam = getParamString()\r\n                                                const url = `/admin/product/export-quantity-update?${strParam}&pageItem=10&pageIndex=0`\r\n                                                axios.get(url, { responseType: 'blob' }).then(({ data }) => {\r\n                                                    downloadFile(data)\r\n                                                })\r\n                                            }}>Cập nhật số lượng tất cả các trang</Dropdown.Item>\r\n                                        </Dropdown.Menu>\r\n                                    </Dropdown>\r\n                                </AuthAdminView>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    {renderParent()}\r\n                    <Table\r\n                        pageItem={filters.pageItem}\r\n                        pageIndex={filters.pageIndex}\r\n                        data={productList}\r\n                        onEdit={item => {\r\n                            const url = `/admin/product/get-by-id?id=${item.ProductId}`\r\n                            axios.get(url).then(({ data }) => {\r\n                                if (data.IsSuccess) {\r\n                                    setModalEditInfo({\r\n                                        isShow: true,\r\n                                        data: data.Result\r\n                                    })\r\n                                }\r\n                            })\r\n                        }}\r\n                        onEditPrice={item => {\r\n                            const url = `/admin/product/get-price?id=${item.ProductId}`\r\n                            axios.get(url).then(({ data }) => {\r\n                                if (data.IsSuccess) {\r\n                                    setModalEditPriceInfo({\r\n                                        data: data.Result,\r\n                                        isShow: true,\r\n                                        isParent: item.IsParent,\r\n                                        productId: item.ProductId\r\n                                    })\r\n                                }\r\n                            })\r\n                        }}\r\n                        onEditQty={item => {\r\n                            let url = ''\r\n                            if (item.IsParent) {\r\n                                url = `/admin/product/get-children?parentId=${item.ProductId}`\r\n                            }\r\n                            else {\r\n                                url = `/admin/product/get-detail?id=${item.ProductId}`\r\n                            }\r\n                            axios.get(url).then(({ data }) => {\r\n                                if (data.IsSuccess) {\r\n                                    setModalEditQtyInfo({\r\n                                        isShow: true,\r\n                                        productList: (item.IsParent ? data.Result : [data.Result])\r\n                                    })\r\n                                }\r\n                            })\r\n                        }}\r\n                        onDelete={item => {\r\n                            Notification.confirmHtml('Bạn có chắc muốn xóa sản phẩm', item.ProductName, () => {\r\n                                const url = `/admin/product/delete?id=${item.ProductId}`\r\n                                axios.post(url).then(({ data }) => {\r\n                                    if (data.IsSuccess) {\r\n                                        reloadProduct()\r\n                                        Notification.success('Xóa sản phẩm thành công')\r\n                                    }\r\n                                })\r\n                            })\r\n                        }}\r\n                        onParentClick={(item) => {\r\n                            setParent(item)\r\n                            const newFilter = {\r\n                                ...filters,\r\n                                parentId: item.ProductId,\r\n                                pageIndex: 1\r\n                            }\r\n                            setFilters(newFilter)\r\n                        }}\r\n                        onAvatarClick={(urlObj) => {\r\n                            setIsShowViewer(true)\r\n                            setViewerList([urlObj.fullUrl])\r\n                        }}\r\n                        onEditStatus={product => {\r\n                            setEditStatusInfo({\r\n                                productId: product.ProductId,\r\n                                statusId: product.ProductStatusId,\r\n                                isParent: product.IsParent\r\n                            })\r\n                            setisShowModalEditStatus(true)\r\n                        }}\r\n                    />\r\n                    <Pagination\r\n                        totalPage={pagination.totalPage}\r\n                        currentPage={pagination.pageIndex}\r\n                        onPageChange={(pIndex) => {\r\n                            const newPagination = { ...pagination, pageIndex: pIndex }\r\n                            setPagination(newPagination)\r\n                            const newFilters = {\r\n                                ...filters,\r\n                                pageIndex: pIndex\r\n                            }\r\n                            setFilters(newFilters)\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n            <ModalAdd\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/product/create'\r\n                    axios.post(url, formData).then(res => {\r\n                        const data = res.data\r\n                        if (data.IsSuccess) {\r\n                            reloadProduct()\r\n                            setIsShowModalProAdd(false)\r\n                            Notification.success('Thêm mới sản phẩm thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalProAdd(false)\r\n                }}\r\n                isShow={isShowModalProAdd}\r\n                category={category}\r\n                productStatus={productStatus}\r\n                groupList={groupList}\r\n                allAttribute={allAttribute}\r\n            />\r\n            <ModalEditPrice\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/product/update-price'\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            setModalEditPriceInfo({\r\n                                data: [],\r\n                                isShow: false\r\n                            })\r\n                            Notification.success('Chỉnh sửa giá theo nhóm cộng tác viên thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setModalEditPriceInfo({\r\n                        data: [],\r\n                        isShow: false\r\n                    })\r\n                }}\r\n                isShow={modalEditPriceInfo.isShow}\r\n                data={modalEditPriceInfo.data}\r\n                isParent={modalEditPriceInfo.isParent}\r\n                productId={modalEditPriceInfo.productId}\r\n            />\r\n            <ModalEditQty\r\n                onSave={(formData, setIsBusy) => {\r\n                    const url = '/admin/product/update-quantity'\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            reloadProduct(true)\r\n                            setModalEditQtyInfo({\r\n                                isShow: false,\r\n                                productList: []\r\n                            })\r\n                            Notification.success('Cập nhật số lượng sản phẩm thành công')\r\n                        }\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setModalEditQtyInfo({\r\n                        isShow: false,\r\n                        productList: []\r\n                    })\r\n                }}\r\n                isShow={modalEditQtyInfo.isShow}\r\n                productList={modalEditQtyInfo.productList}\r\n            />\r\n            <ModalEdit\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/product/update'\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            reloadProduct(true)\r\n                            setModalEditInfo({\r\n                                isShow: false,\r\n                                date: {}\r\n                            })\r\n                            Notification.success('Chỉnh sửa sản phẩm thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setModalEditInfo({\r\n                        isShow: false,\r\n                        data: {}\r\n                    })\r\n                }}\r\n                isShow={modalEditInfo.isShow}\r\n                productStatus={productStatus}\r\n                category={category}\r\n                info={modalEditInfo.data}\r\n            />\r\n            <ModalEditQtyExcel\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const products = formData.map(item => {\r\n                        return {\r\n                            ProductId: item.ID,\r\n                            Quantity: item.SO_LUONG\r\n                        }\r\n                    })\r\n                    const url = '/admin/product/import-quantity'\r\n                    axios.post(url, {\r\n                        ProductList: products\r\n                    }).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            reloadProduct(true)\r\n                            setIsShowModalEditQtyExcel(false)\r\n                            Notification.success('Cập nhật số lượng sản phẩm bằng file excel thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalEditQtyExcel(false)\r\n                }}\r\n                isShow={isShowModalEditQtyExcel}\r\n            />\r\n            <ModalEditStatus\r\n                productId={editStatusInfo?.productId}\r\n                statusId={editStatusInfo?.statusId}\r\n                isParent={editStatusInfo?.isParent}\r\n                statuses={productStatus} onSave={(params, setIsBusy) => {\r\n                    let url = `/admin/product/update-status?productId=${params.productId}&statusId=${params.statusId}&isParent=${params.isParent}`\r\n                    if (params.isParent) {\r\n                        url += `&isAllowForChildrent=${params.isForAllChildrent}`\r\n                    }\r\n                    axios.post(url).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            reloadProduct(true)\r\n                            Notification.success('Cập nhật trạng thái sản phẩm thành công')\r\n                            setisShowModalEditStatus(false)\r\n                            setEditStatusInfo(null)\r\n                        }\r\n                    })\r\n                }} onClose={() => {\r\n                    setisShowModalEditStatus(false)\r\n                    setEditStatusInfo(null)\r\n                }} isShow={isShowModalEditStatus} />\r\n            {isShowViewer && (\r\n                <ImageViewer\r\n                    src={viewerList}\r\n                    currentIndex={0}\r\n                    disableScroll={false}\r\n                    closeOnClickOutside={true}\r\n                    onClose={() => {\r\n                        setIsShowViewer(false)\r\n                    }}\r\n                />\r\n            )}\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default ProductPage","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { ActionItem, ActionRow, EmptyRow, FormatNumber, LoadingRow } from '../../../../../components'\r\n\r\nconst renderTable = (props) => {\r\n    let data = props.data\r\n    if (data === null) return <LoadingRow colSpan={7} />\r\n    else if (data.length !== 0) {\r\n        return (\r\n            data.map(item => {\r\n                return (\r\n                    <tr key={item.GroupId}>\r\n                        <td>{item.GroupId}</td>\r\n                        <td>{item.GroupName}</td>\r\n                        <td>{item.Note}</td>\r\n                        <td className=\"text-end text-primary\">\r\n                            <FormatNumber>\r\n                                {item.TotalPartner}\r\n                            </FormatNumber>\r\n                        </td>\r\n                        <td className=\"text-end text-primary\">\r\n                            <FormatNumber>\r\n                                {item.DropShipFee}\r\n                            </FormatNumber>\r\n                        </td>\r\n                        <td>\r\n                            {renderStatus(item.StatusId)}\r\n                        </td>\r\n                        <td className=\"text-center\">\r\n                            <ActionRow>\r\n                                <ActionItem right=\"role_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sửa' />\r\n                            </ActionRow>\r\n                        </td>\r\n                    </tr>\r\n                )\r\n            })\r\n        )\r\n    }\r\n    else return <EmptyRow colSpan=\"7\" />\r\n}\r\n\r\nconst renderStatus = (statusId) => {\r\n    if (statusId === 1) return <span className=\"badge bg-success\">Hoạt động</span>\r\n    else return <span className=\"badge bg-warning\">Tạm khóa</span>\r\n}\r\n\r\nconst Table = props => {\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">ID</th>\r\n                        <th>Tên nhóm</th>\r\n                        <th>Ghi chú</th>\r\n                        <th className='text-end'>Cộng tác viên</th>\r\n                        <th className='text-end'>Phí dropship</th>\r\n                        <th>Trạng thái</th>\r\n                        <th className=\"w-52-px\"></th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable(props)}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    data: PropTypes.array\r\n}\r\n\r\nTable.defaultProps = {\r\n    data: null\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, InputSelect } from './../../../../../components'\r\n\r\nconst invalidValue = 'Giá trị không hợp lệ'\r\n\r\nconst schema = yup.object().shape({\r\n    GroupName: yup.string().required('Vui lòng nhập tên nhóm').max(100, 'Tên nhóm quá dài'),\r\n    DropShipFee: yup.number().transform((_value, originalValue) => Number(originalValue.replaceAll('.', '')))\r\n        .negative(invalidValue)\r\n        .integer(invalidValue)\r\n        .min(0, invalidValue)\r\n        .max(2_000_000_000, invalidValue),\r\n    StatusId: yup.number(),\r\n    Note: yup.string().max(200, 'Ghi chú quá dài')\r\n})\r\n\r\nconst statusOptions = [\r\n    {\r\n        value: 1,\r\n        label: 'Hoạt động'\r\n    },\r\n    {\r\n        value: 2,\r\n        label: 'Tạm khóa'\r\n    }\r\n]\r\n\r\nconst ModalAdd = props => {\r\n    const { control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema),\r\n        defaultValues: {\r\n            StatusId: 1\r\n        }\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true}\r\n            onExited={() => {\r\n                reset()\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới nhóm cộng tác viên</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tên nhóm <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('GroupName')} type=\"text\" className=\"form-control\" placeholder=\"Tên nhóm\" />\r\n                        {errors.GroupName && <div className=\"validation-message\">{errors.GroupName.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Phí dropship <span className=\"text-danger\">*</span></label>\r\n                        <div className=\"input-group\">\r\n                            <Controller\r\n                                name=\"DropShipFee\"\r\n                                control={control}\r\n                                render={({ field }) => {\r\n                                    return (\r\n                                        <NumberFormat\r\n                                            {...field}\r\n                                            className=\"form-control\"\r\n                                            // thousandSeparator={\".\"}\r\n                                            // decimalSeparator=\",\"\r\n                                            allowNegative={false}\r\n                                            defaultValue={0}\r\n                                            onValueChange={(c) => {\r\n                                                field.onChange(c.value)\r\n                                            }}\r\n                                            decimalScale={0}\r\n                                        />\r\n                                    )\r\n                                }}\r\n                            />\r\n                            <span className=\"input-group-text\">VNĐ</span>\r\n                        </div>\r\n                        {errors.DropShipFee && <div className=\"validation-message\">{errors.DropShipFee.message}</div>}\r\n                    </div>\r\n\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Trạng thái</label>\r\n                        <Controller\r\n                            name=\"StatusId\"\r\n                            control={control}\r\n                            render={({ field: { onChange, value } }) => {\r\n                                return (\r\n                                    <InputSelect\r\n                                        options={statusOptions}\r\n                                        defaultValue={1}\r\n                                        onChange={onChange}\r\n                                        value={value}\r\n                                        variant='success'\r\n                                    />\r\n                                )\r\n                            }}\r\n                        />\r\n                        {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Ghi chú</label>\r\n                        <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                        {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, InputSelect } from './../../../../../components'\r\n\r\nconst invalidValue = 'Giá trị không hợp lệ'\r\n\r\nconst schema = yup.object().shape({\r\n    GroupName: yup.string().required('Vui lòng nhập tên nhóm').max(100, 'Tên nhóm quá dài'),\r\n    DropShipFee: yup.number()\r\n        .negative(invalidValue)\r\n        .integer(invalidValue)\r\n        .min(0, invalidValue)\r\n        .max(2_000_000_000, invalidValue),\r\n    StatusId: yup.number(),\r\n    Note: yup.string().max(200, 'Ghi chú quá dài')\r\n})\r\n\r\nconst statusOptions = [\r\n    {\r\n        value: 1,\r\n        label: 'Hoạt động'\r\n    },\r\n    {\r\n        value: 2,\r\n        label: 'Tạm khóa'\r\n    }\r\n]\r\n\r\nconst ModalEdit = props => {\r\n    const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [val, setVal] = useState(0)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true}\r\n            onExited={() => {\r\n                reset()\r\n                setVal(0)\r\n            }}\r\n            onShow={() => {\r\n                let data = props.data\r\n                setValue('GroupName', data.GroupName)\r\n                setValue('DropShipFee', data.DropShipFee)\r\n                setValue('StatusId', data.StatusId)\r\n                setValue('Note', data.Note)\r\n\r\n                setVal(data.DropShipFee)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa nhóm cộng tác viên</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tên nhóm <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('GroupName')} type=\"text\" className=\"form-control\" placeholder=\"Tên nhóm\" />\r\n                        {errors.GroupName && <div className=\"validation-message\">{errors.GroupName.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Phí dropship <span className=\"text-danger\">*</span></label>\r\n                        <div className=\"input-group\">\r\n                            <NumberFormat\r\n                                className=\"form-control\"\r\n                                // thousandSeparator=\".\"\r\n                                // decimalSeparator=\",\"\r\n                                allowNegative={false}\r\n                                defaultValue={0}\r\n                                value={val}\r\n                                onValueChange={(c) => {\r\n                                    let num = c.vallue !== '' ? c.value : 0\r\n                                    setVal(num)\r\n                                    setValue('DropShipFee', num)\r\n                                }}\r\n                                decimalScale={0}\r\n                            />\r\n                            <span className=\"input-group-text\">VNĐ</span>\r\n                        </div>\r\n                        {errors.DropShipFee && <div className=\"validation-message\">{errors.DropShipFee.message}</div>}\r\n                    </div>\r\n\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Trạng thái</label>\r\n                        <Controller\r\n                            name=\"StatusId\"\r\n                            control={control}\r\n                            render={({ field: { onChange, value } }) => {\r\n                                return (\r\n                                    <InputSelect\r\n                                        options={statusOptions}\r\n                                        defaultValue={1}\r\n                                        onChange={onChange}\r\n                                        value={value}\r\n                                        variant='success'\r\n                                    />\r\n                                )\r\n                            }}\r\n                        />\r\n                        {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Ghi chú</label>\r\n                        <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                        {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n    data: PropTypes.object,\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    isBusy: PropTypes.bool\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n    data: {},\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    isBusy: false\r\n}\r\n\r\nexport default ModalEdit","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { IconButton, Notification, AuthAdminView } from '../../../components'\r\nimport { ModalAdd, ModalEdit, Table } from './components'\r\n\r\nconst PartnerGroupPage = () => {\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Nhóm cộng tác viên'\r\n        loadPartnerGroup()\r\n    }, [])\r\n\r\n    // State danh sách nhóm CTV\r\n    const [partnerGroup, setPartnerGroup] = useState(null)\r\n\r\n    // State lưu data sửa nhóm CTV\r\n    const [editValue, setEditValue] = useState({})\r\n\r\n    // State đóng mở modal sửa nhóm CTV\r\n    const [isShowModalPartnerGroupEdit, setIsShowModalPartnerGroupEdit] = useState(false)\r\n\r\n    // State lưu trạng thái đóng mở modal thêm mới nhóm CTV\r\n    const [isShowModalPartnerGroupAdd, setIsShowModalPartnerGroupAdd] = useState(false)\r\n\r\n    // Load danh sách nhóm cộng tác viên\r\n    const loadPartnerGroup = () => {\r\n        let url = '/admin/partner-group/get-all'\r\n        axios.get(url).then(res => {\r\n            let data = res.data\r\n            if (data.IsSuccess) {\r\n                setPartnerGroup(data.Result)\r\n            }\r\n        });\r\n    }\r\n\r\n    // Mở modal sửa nhóm cộng tác viên và load chi tiết\r\n    const handleOpenModalEdit = (item) => {\r\n        let url = `/admin/partner-group/get-by-id?id=${item.GroupId}`\r\n        axios.get(url).then(res => {\r\n            let data = res.data\r\n            setEditValue(data.Result)\r\n            setIsShowModalPartnerGroupEdit(true)\r\n        })\r\n    }\r\n\r\n    // Đóng modal sửa nhóm cộng tác viên\r\n    const handleCloseModalEdit = () => setIsShowModalPartnerGroupEdit(false)\r\n\r\n    // Lưu sửa nhóm cộng tác viên\r\n    const handleSavePartnerGroupEdit = (formVal, setIsBusy) => {\r\n        setIsBusy(true)\r\n        let url = '/admin/partner-group/update'\r\n        axios.post(url, {\r\n            GroupId: editValue.GroupId,\r\n            GroupName: formVal.GroupName,\r\n            DropShipFee: formVal.DropShipFee,\r\n            StatusId: formVal.StatusId,\r\n            Note: formVal.Note\r\n        }).then(res => {\r\n            let data = res.data\r\n            if (data.IsSuccess) {\r\n                loadPartnerGroup()\r\n                setIsShowModalPartnerGroupEdit(false)\r\n                Notification.success('Chỉnh sửa nhóm cộng tác viên thành công')\r\n            }\r\n            setIsBusy(false)\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"row\">\r\n                        <div className=\"col-12\">\r\n                            <AuthAdminView right=\"partner_group_add\">\r\n                                <IconButton\r\n                                    className=\"mb-2\"\r\n                                    text=\"Thêm mới\"\r\n                                    icon={<IoAddCircleOutline />}\r\n                                    onClick={() => {\r\n                                        setIsShowModalPartnerGroupAdd(true)\r\n                                    }}\r\n                                />\r\n                            </AuthAdminView>\r\n\r\n                        </div>\r\n                    </div>\r\n                    <Table\r\n                        data={partnerGroup}\r\n                        onEdit={handleOpenModalEdit} />\r\n                </div>\r\n            </div>\r\n\r\n            <ModalAdd\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    if (formData.DropShipFee === undefined) {\r\n                        formData.DropShipFee = 0\r\n                    }\r\n                    const url = '/admin/partner-group/create'\r\n                    axios.post(url, formData).then(res => {\r\n                        let data = res.data\r\n                        if (data.IsSuccess) {\r\n                            loadPartnerGroup()\r\n                            setIsShowModalPartnerGroupAdd(false)\r\n                            Notification.success('Thêm mới nhóm cộng tác viên thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalPartnerGroupAdd(false)\r\n                }}\r\n                isShow={isShowModalPartnerGroupAdd}\r\n                data={editValue} />\r\n\r\n            <ModalEdit\r\n                onSave={handleSavePartnerGroupEdit}\r\n                onClose={handleCloseModalEdit}\r\n                isShow={isShowModalPartnerGroupEdit}\r\n                data={editValue} />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default PartnerGroupPage","import React, { useEffect, useState } from 'react'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\nimport Select from 'react-select'\r\n\r\nconst statusOptions = [\r\n    {\r\n        value: 1,\r\n        label: 'Hoạt động'\r\n    },\r\n    {\r\n        value: 2,\r\n        label: 'Tạm khóa'\r\n    }\r\n]\r\n\r\nconst filters = {\r\n    keyword: '',\r\n    groupId: 0,\r\n    statusId: 0\r\n}\r\n\r\nconst Filter = props => {\r\n    const { onSearch } = props\r\n\r\n    const [keyword, setKeyword] = useState('')\r\n\r\n    const [groupOptions, setGroupOptions] = useState([])\r\n\r\n    useEffect(() => {\r\n        let lst = props.partnerGroup.map(item => {\r\n            return {\r\n                value: item.GroupId,\r\n                label: item.GroupName\r\n            }\r\n        })\r\n        setGroupOptions(lst)\r\n    }, [props.partnerGroup])\r\n\r\n    const [group, setGroup] = useState(0)\r\n\r\n    const [status, setStatus] = useState(0)\r\n\r\n    const handleSearch = () => {\r\n        onSearch(filters)\r\n    }\r\n\r\n    const handleClearSearch = () => {\r\n        setKeyword('')\r\n        filters.keyword = ''\r\n        setGroup(null)\r\n        filters.groupId = 0\r\n        setStatus(null)\r\n        filters.statusId = 0\r\n        onSearch(filters)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-4 col-md-4 col-lg-4 col-xl-3 col-xxl-2\">\r\n                        <input\r\n                            autoFocus\r\n                            onChange={e => {\r\n                                const value = e.target.value\r\n                                setKeyword(value)\r\n                                filters.keyword = value\r\n                            }}\r\n                            onKeyDown={e => {\r\n                                if (e.key === 'Enter') {\r\n                                    handleSearch()\r\n                                }\r\n                            }}\r\n                            value={keyword} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Họ tên, email, điện thoại\" />\r\n                    </div>\r\n                    <div className=\"col-sm-4 col-md-8 col-lg-4 col-xl-4 col-xxl-3\">\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={false}\r\n                            isClearable={true}\r\n                            placeholder='Nhóm cộng tác viên'\r\n                            options={groupOptions}\r\n                            value={group}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    setGroup(item)\r\n                                    filters.groupId = item.value\r\n                                }\r\n                                else {\r\n                                    setGroup(item)\r\n                                    filters.groupId = 0\r\n                                }\r\n                            }}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-4 col-md-4 col-lg-4 col-xl-3 col-xxl-2\">\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={false}\r\n                            isClearable={true}\r\n                            placeholder='Trạng thái'\r\n                            options={statusOptions}\r\n                            value={status}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    setStatus(item)\r\n                                    filters.statusId = item.value\r\n                                }\r\n                                else {\r\n                                    setStatus(null)\r\n                                    filters.statusId = 0\r\n                                }\r\n                            }}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-8 col-lg-12 col-xl-12 col-xxl-5\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={handleSearch} />\r\n                            <ClearButton onClick={handleClearSearch} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    partnerGroup: PropTypes.array,\r\n    onSearch: PropTypes.func,\r\n    onClear: PropTypes.func\r\n}\r\n\r\nFilter.defaultProps = {\r\n    partnerGroup: [],\r\n    onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import React, { Fragment } from 'react'\r\nimport { AiOutlineKey } from 'react-icons/ai'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport {\r\n    IoLogOutOutline, IoTrashOutline, IoWalletOutline,\r\n    IoListOutline, IoReceiptOutline,\r\n    IoStorefrontOutline, IoBagHandleOutline, IoLayersOutline\r\n} from 'react-icons/io5'\r\nimport { AiOutlineHistory } from 'react-icons/ai'\r\nimport { AvatarRow, CloseButton, EmptyRow, FormatNumber, LoadingRow, AuthAdminView } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\nimport { BalanceTable, OrderTable, Detail, ShopeeTable } from './../'\r\n\r\nconst Table = props => {\r\n    const { onShowChildren } = props\r\n\r\n    const renderTable = () => {\r\n        let data = props.data;\r\n        if (data === null) return <LoadingRow colSpan={6} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n        else return data.map(item => {\r\n            return (\r\n                <Fragment key={item.PartnerId}>\r\n                    <tr onClick={() => props.onOpenDetail(item)} className={(item.isSelected ? 'row-master' : '')}>\r\n                        <td>\r\n                            <AvatarRow url={item.AvatarUrl} />\r\n                            {item.FullName}\r\n                        </td>\r\n                        <td>{item.Email}</td>\r\n                        <td>{item.Phone}</td>\r\n                        <td className=\"text-end text-primary\">\r\n                            <FormatNumber>{item.Balance}</FormatNumber>\r\n                        </td>\r\n                        <td className={item.GroupId === 0 ? 'text-danger' : ''}>{item.GroupName}</td>\r\n                        <td>\r\n                            {renderStatus(item.StatusId)}\r\n                        </td>\r\n                    </tr>\r\n                    {renderDetail(item)}\r\n                </Fragment>\r\n            )\r\n        })\r\n    }\r\n\r\n    const renderStatus = (statusId) => {\r\n        if (statusId === 1) return <span className=\"badge bg-success\">Hoạt động</span>\r\n        else return <span className=\"badge bg-warning\">Tạm khóa</span>\r\n    }\r\n\r\n    const renderDetail = item => {\r\n        if (item.isSelected) {\r\n            return (\r\n                <tr className=\"row-detail\">\r\n                    <td colSpan=\"6\" className=\"ps-1 pt-0 pe-1 pb-1\">\r\n                        <div className=\"card mb-0 cursor-default\">\r\n                            <div className=\"card-body\">\r\n                                <ul className=\"nav nav-tabs nav-bordered mb-3\">\r\n                                    <li className=\"nav-item\">\r\n                                        <a href=\"#tab-1\" data-bs-toggle=\"tab\" aria-expanded=\"false\" className=\"nav-link active\">\r\n                                            <IoListOutline className='d-md-none d-block' />\r\n                                            <span className=\"d-none d-md-block\">Chi tiết</span>\r\n                                        </a>\r\n                                    </li>\r\n                                    <AuthAdminView right=\"partner_order_filter\">\r\n                                        <li className=\"nav-item\">\r\n                                            <a href=\"#tab-2\" data-bs-toggle=\"tab\" aria-expanded=\"true\" className=\"nav-link\">\r\n                                                <IoReceiptOutline className='d-md-none d-block' />\r\n                                                <span className=\"d-none d-md-block\">Đơn hàng</span>\r\n                                            </a>\r\n                                        </li>\r\n                                    </AuthAdminView>\r\n                                    <AuthAdminView right=\"partner_balance_history\">\r\n                                        <li className=\"nav-item\">\r\n                                            <a href=\"#tab-3\" data-bs-toggle=\"tab\" aria-expanded=\"false\" className=\"nav-link\">\r\n                                                <AiOutlineHistory className='d-md-none d-block' />\r\n                                                <span className=\"d-none d-md-block\">Lịch sử số dư</span>\r\n                                            </a>\r\n                                        </li>\r\n                                    </AuthAdminView>\r\n                                    <AuthAdminView right=\"partner_shopee_list\">\r\n                                        <li className=\"nav-item\">\r\n                                            <a href=\"#tab-4\" data-bs-toggle=\"tab\" aria-expanded=\"false\" className=\"nav-link\">\r\n                                                <IoStorefrontOutline className='d-md-none d-block' />\r\n                                                <span className=\"d-none d-md-block\">Shopee</span>\r\n                                            </a>\r\n                                        </li>\r\n                                    </AuthAdminView>\r\n                                    <AuthAdminView right='partner_freeship_his'>\r\n                                        <li className=\"nav-item\">\r\n                                            <a href=\"#tab-5\" data-bs-toggle=\"tab\" aria-expanded=\"false\" className=\"nav-link\">\r\n                                                <IoBagHandleOutline className='d-md-none d-block' />\r\n                                                <span className=\"d-none d-md-block\">Lịch sử miễn phí đóng gói</span>\r\n                                            </a>\r\n                                        </li>\r\n                                    </AuthAdminView>\r\n                                </ul>\r\n\r\n                                <div className=\"tab-content\">\r\n                                    <div className=\"tab-pane show active\" id=\"tab-1\">\r\n                                        <Detail\r\n                                            detail={props.detail}\r\n                                        />\r\n                                    </div>\r\n                                    <AuthAdminView right=\"partner_order_filter\">\r\n                                        <div className=\"tab-pane\" id=\"tab-2\">\r\n                                            <OrderTable\r\n                                                orders={props.partnerOrders}\r\n                                                pagination={props.partnerOrderPagination}\r\n                                                onPageChange={(pIndex) => {\r\n                                                    props.onPartnerOrderPageChange(item.PartnerId, pIndex)\r\n                                                }}\r\n                                            />\r\n                                        </div>\r\n                                    </AuthAdminView>\r\n                                    <AuthAdminView right=\"partner_balance_history\">\r\n                                        <div className=\"tab-pane\" id=\"tab-3\">\r\n                                            <BalanceTable\r\n                                                balanceHistories={props.balanceHistories}\r\n                                                pagination={props.balanceHistoryPagination}\r\n                                                onPageChange={(pIndex) => {\r\n                                                    props.onBalanceHistoryPageChange(item.PartnerId, pIndex)\r\n                                                }}\r\n                                                pageItem={props.balancePageItem}\r\n                                                pageIndex={props.balancePageIndex}\r\n                                            />\r\n                                        </div>\r\n                                    </AuthAdminView>\r\n                                    <AuthAdminView right=\"partner_shopee_list\">\r\n                                        <div className=\"tab-pane\" id=\"tab-4\">\r\n                                            <ShopeeTable\r\n                                                shops={props.shopeeShops}\r\n                                            />\r\n                                        </div>\r\n                                    </AuthAdminView>\r\n                                    <AuthAdminView right='partner_freeship_his'>\r\n                                        <div className=\"tab-pane\" id=\"tab-5\">\r\n                                            {props.children}\r\n                                        </div>\r\n                                    </AuthAdminView>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div className=\"p-2 border-top\">\r\n                                <div className=\"button-list\">\r\n                                    <AuthAdminView right=\"partner_edit\">\r\n                                        <button onClick={() => props.onEdit(item)} className=\"btn btn-primary\"><FiEdit className=\"me-1 mt--2-px font-16\" />Chỉnh sửa</button>\r\n                                    </AuthAdminView>\r\n                                    <AuthAdminView right=\"partner_recharge\">\r\n                                        <button onClick={() => props.onRecharge(item)} className=\"btn btn-info\"><IoWalletOutline className=\"me-1 mt--2-px font-16\" />Nạp tiền</button>\r\n                                    </AuthAdminView>\r\n                                    <AuthAdminView right=\"partner_set_password\">\r\n                                        <button onClick={() => props.onSetPassword(item)} className=\"btn btn-success\"><AiOutlineKey className=\"me-1 mt--2-px font-16\" />Đặt lại mật khẩu</button>\r\n                                    </AuthAdminView>\r\n                                    <AuthAdminView right=\"partner_logout\">\r\n                                        <button onClick={() => props.onLogOut(item)} className=\"btn btn-warning\"><IoLogOutOutline className=\"me-1 mt--2-px font-16\" />Đăng xuất</button>\r\n                                    </AuthAdminView>\r\n\r\n                                    <button onClick={() => onShowChildren(item)} className=\"btn btn-primary\"><IoLayersOutline className=\"me-1 mt--2-px font-16\" />Đã giới thiệu</button>\r\n\r\n                                    <AuthAdminView right=\"partner_delete\">\r\n                                        <button onClick={() => props.onDelete(item)} className=\"btn btn-danger\"><IoTrashOutline className=\"me-1 mt--2-px font-16\" />Xóa</button>\r\n                                    </AuthAdminView>\r\n                                    <CloseButton onClick={() => props.onCloseDetail(item)} />\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </td>\r\n                </tr>\r\n            )\r\n        }\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered table-point table-avatar mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th>Họ tên</th>\r\n                        <th>Email</th>\r\n                        <th>Điện thoại</th>\r\n                        <th className='text-end'>Số dư TK</th>\r\n                        <th>Nhóm</th>\r\n                        <th>Trạng thái</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    data: PropTypes.array,\r\n    onOpenDetail: PropTypes.func,\r\n    onEdit: PropTypes.func,\r\n    onRecharge: PropTypes.func,\r\n    onSetPassword: PropTypes.func,\r\n    onLogOut: PropTypes.func,\r\n    onDelete: PropTypes.func,\r\n    onCloseDetail: PropTypes.func,\r\n    onShowChildren: PropTypes.func,\r\n\r\n    detail: PropTypes.object,\r\n\r\n    partnerOrders: PropTypes.array,\r\n    partnerOrderPagination: PropTypes.object,\r\n\r\n    balanceHistories: PropTypes.array,\r\n    balanceHistoryPagination: PropTypes.object,\r\n    onBalanceHistoryPageChange: PropTypes.func,\r\n    balancePageItem: PropTypes.number,\r\n    balancePageIndex: PropTypes.number,\r\n\r\n    shopeeShops: PropTypes.array\r\n}\r\n\r\nTable.defaultProps = {\r\n    data: null,\r\n    onOpenDetail: null,\r\n    onEdit: null,\r\n    onRecharge: null,\r\n    onSetPassword: null,\r\n    onLogOut: null,\r\n    onDelete: null,\r\n    onCloseDetail: null,\r\n    onShowChildren: () => { },\r\n\r\n    detail: {},\r\n\r\n    partnerOrders: [],\r\n    partnerOrderPagination: {},\r\n    onPartnerOrderPageChange: () => { },\r\n\r\n    balanceHistories: [],\r\n    balanceHistoryPagination: {},\r\n    onBalanceHistoryPageChange: () => { },\r\n    balancePageItem: 0,\r\n    balancePageIndex: 0,\r\n\r\n    shopeeShops: [],\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, UploadImg } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    GroupId: yup.number().min(1, 'Vui lòng chọn nhóm'),\r\n    WardId: yup.number(),\r\n    FullName: yup.string().required('Vui lòng nhập tên nhóm').max(100, 'Tên nhóm quá dài').nullable(),\r\n    ShopName: yup.string().max(100, 'Tên shop quá dài').nullable(),\r\n    Phone: yup.string().required('Vui lòng nhập số điện thoại').max(20, 'Số điện thoại quá dài').nullable(),\r\n    Email: yup.string().required('Vui lòng nhập email').max(70, 'Email quá dài').email('Email không đúng').nullable(),\r\n    Password: yup.string().required('Vui lòng nhập mật khẩu').max(100, 'Mật khẩu quá dài').nullable(),\r\n    Address: yup.string().nullable(),\r\n    StatusId: yup.number(),\r\n    ShipFeeId: yup.number(),\r\n    Note: yup.string().max(200, 'Ghi chú quá dài').nullable(),\r\n    GHTKToken: yup.string().max(500, 'Token quá dài').nullable(),\r\n    AvatarUrl: yup.string().max(2_000, 'Đường dẫn ảnh quá dài').nullable()\r\n})\r\n\r\nconst ModalAdd = props => {\r\n    const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            size=\"lg\"\r\n            onExited={() => {\r\n                reset()\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới cộng tác viên</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"row row-cols-1 row-cols-lg-3\">\r\n                        <div className=\"col-sm-4 col-md-3\">\r\n                            <Controller\r\n                                control={control}\r\n                                name=\"AvatarUrl\"\r\n                                render={({\r\n                                    field: { onChange, value }\r\n                                }) => (\r\n                                    <UploadImg\r\n                                        imgUrl={value}\r\n                                        onCompleted={data => {\r\n                                            onChange(data.Result.ImageUrl)\r\n                                        }}\r\n                                    />\r\n                                )}\r\n                            />\r\n                        </div>\r\n                        <div className=\"col-sm-8 col-md-9\">\r\n                            <div className=\"row\">\r\n                                <div className=\"col-sm-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Họ tên <span className=\"text-danger\">*</span></label>\r\n                                        <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Họ tên\" />\r\n                                        {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Tên shop</label>\r\n                                        <input {...register('ShopName')} type=\"text\" className=\"form-control\" placeholder=\"Tên shop\" />\r\n                                        {errors.ShopName && <div className=\"validation-message\">{errors.ShopName.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Điện thoại <span className=\"text-danger\">*</span></label>\r\n                                        <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Điện thoại\" />\r\n                                        {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Email <span className=\"text-danger\">*</span></label>\r\n                                        <input {...register('Email')} type=\"text\" className=\"form-control\" placeholder=\"Email\" />\r\n                                        {errors.Email && <div className=\"validation-message\">{errors.Email.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Nhóm cộng tác viên <span className=\"text-danger\">*</span></label>\r\n                                        <select {...register('GroupId')} className=\"form-select\">\r\n                                            <option value=\"0\">Nhóm cộng tác viên</option>\r\n                                            {\r\n                                                props.partnerGroup.map(item => {\r\n                                                    return (\r\n                                                        <option key={item.GroupId} value={item.GroupId}>{item.GroupName}</option>\r\n                                                    )\r\n                                                })\r\n                                            }\r\n                                        </select>\r\n                                        {errors.GroupId && <div className=\"validation-message\">{errors.GroupId.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Mật khẩu <span className=\"text-danger\">*</span></label>\r\n                                        <input {...register('Password')} type=\"Password\" className=\"form-control\" placeholder=\"Mật khẩu\" />\r\n                                        {errors.Password && <div className=\"validation-message\">{errors.Password.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Tỉnh/Tp</label>\r\n                                <select className=\"form-select\" onChange={e => {\r\n                                    let provinceId = e.target.value\r\n                                    props.onProvinceChange(provinceId)\r\n                                    setValue('WardId', 0)\r\n                                }}>\r\n                                    <option value=\"0\">Chọn Tỉnh/Tp</option>\r\n                                    {\r\n                                        props.province.map(item => {\r\n                                            return (\r\n                                                <option key={item.ProvinceId} value={item.ProvinceId}>{item.Prefix} {item.ProvinceName}</option>\r\n                                            )\r\n                                        })\r\n                                    }\r\n                                </select>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Quận/Huyện</label>\r\n                                <select className=\"form-select\" onChange={e => {\r\n                                    let districtId = e.target.value\r\n                                    props.onDistrictChange(districtId)\r\n                                    setValue('WardId', 0)\r\n                                }}>\r\n                                    <option value=\"0\">Chọn Quận/Huyện</option>\r\n                                    {\r\n                                        props.district.map(item => {\r\n                                            return (\r\n                                                <option key={item.DistrictId} value={item.DistrictId}>{item.Prefix} {item.DistrictName}</option>\r\n                                            )\r\n                                        })\r\n                                    }\r\n                                </select>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Phường/Xã</label>\r\n                                <select {...register('WardId')} className=\"form-select\">\r\n                                    <option value=\"0\">Chọn Phường/Xã</option>\r\n                                    {\r\n                                        props.ward.map(item => {\r\n                                            return (\r\n                                                <option key={item.WardId} value={item.WardId}>{item.Prefix} {item.WardName}</option>\r\n                                            )\r\n                                        })\r\n                                    }\r\n                                </select>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-lg-8\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Địa chỉ</label>\r\n                                <input {...register('Address')} type=\"text\" className=\"form-control\" placeholder=\"Địa chỉ\" />\r\n                                {errors.Address && <div className=\"validation-message\">{errors.Address.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Trạng thái</label>\r\n                                <select {...register('StatusId')} className=\"form-select\">\r\n                                    <option value=\"1\">Hoạt động</option>\r\n                                    <option value=\"2\">Tạm khóa</option>\r\n                                </select>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-12\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">GHTK token</label>\r\n                                <input {...register('GHTKToken')} type=\"text\" className=\"form-control\" placeholder=\"GHTK token\" />\r\n                                {errors.GHTKToken && <div className=\"validation-message\">{errors.GHTKToken.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-12\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Ghi chú</label>\r\n                                <textarea {...register('Note')} rows=\"2\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                                {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    province: PropTypes.array,\r\n    district: PropTypes.array,\r\n    ward: PropTypes.array,\r\n    partnerGroup: PropTypes.array,\r\n    onProvinceChange: PropTypes.func,\r\n    onDistrictChange: PropTypes.func\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    province: [],\r\n    district: [],\r\n    ward: [],\r\n    partnerGroup: [],\r\n    onProvinceChange: () => { },\r\n    onDistrictChange: () => { }\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, UploadImg } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    GroupId: yup.number().min(1, 'Vui lòng chọn nhóm'),\r\n    WardId: yup.number(),\r\n    FullName: yup.string().required('Vui lòng nhập tên nhóm').max(100, 'Tên nhóm quá dài').nullable(),\r\n    ShopName: yup.string().max(100, 'Tên shop quá dài').nullable(),\r\n    Phone: yup.string().required('Vui lòng nhập số điện thoại').max(20, 'Số điện thoại quá dài').nullable(),\r\n    Email: yup.string().required('Vui lòng nhập email').max(70, 'Email quá dài').email('Email không đúng').nullable(),\r\n    Address: yup.string().nullable(),\r\n    StatusId: yup.number(),\r\n    ShipFeeId: yup.number(),\r\n    Note: yup.string().max(200, 'Ghi chú quá dài').nullable(),\r\n    GHTKToken: yup.string().max(500, 'Token quá dài').nullable(),\r\n    AvatarUrl: yup.string().max(2_000, 'Đường dẫn ảnh quá dài').nullable()\r\n})\r\n\r\nconst ModalEdit = props => {\r\n    const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [ProvinceId, setProvinceId] = useState(0)\r\n\r\n    const [DistrictId, setDistrictId] = useState(0)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            size=\"lg\"\r\n            onExited={() => {\r\n                reset()\r\n                // setAvatarUrl('')\r\n            }}\r\n            onShow={() => {\r\n                let data = props.data\r\n                let partner = data.Partner\r\n                setProvinceId(partner.ProvinceId)\r\n                setDistrictId(partner.DistrictId)\r\n                setValue('AvatarUrl', partner.AvatarUrl)\r\n                setValue('PartnerId', partner.PartnerId)\r\n                setValue('FullName', partner.FullName)\r\n                setValue('ShopName', partner.ShopName)\r\n                setValue('Phone', partner.Phone)\r\n                setValue('Email', partner.Email)\r\n                setValue('GroupId', partner.GroupId)\r\n                setValue('WardId', partner.WardId)\r\n                setValue('Address', partner.Address)\r\n                setValue('StatusId', partner.StatusId)\r\n                setValue('Note', partner.Note)\r\n                setValue('GHTKToken', partner.GHTKToken)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa cộng tác viên</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"row row-cols-1 row-cols-lg-3\">\r\n                        <div className=\"col-sm-4 col-md-3\">\r\n                            <Controller\r\n                                control={control}\r\n                                name=\"AvatarUrl\"\r\n                                render={({\r\n                                    field: { onChange, value }\r\n                                }) => (\r\n                                    <UploadImg\r\n                                        imgUrl={value}\r\n                                        onCompleted={data => {\r\n                                            onChange(data.Result.ImageUrl)\r\n                                        }}\r\n                                    />\r\n                                )}\r\n                            />\r\n                        </div>\r\n                        <div className=\"col-sm-8 col-md-9\">\r\n                            <div className=\"row\">\r\n                                <div className=\"col-sm-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Họ tên <span className=\"text-danger\">*</span></label>\r\n                                        <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Họ tên\" />\r\n                                        {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Tên shop</label>\r\n                                        <input {...register('ShopName')} type=\"text\" className=\"form-control\" placeholder=\"Tên shop\" />\r\n                                        {errors.ShopName && <div className=\"validation-message\">{errors.ShopName.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Điện thoại <span className=\"text-danger\">*</span></label>\r\n                                        <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Điện thoại\" />\r\n                                        {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Email <span className=\"text-danger\">*</span></label>\r\n                                        <input {...register('Email')} type=\"text\" className=\"form-control\" placeholder=\"Email\" />\r\n                                        {errors.Email && <div className=\"validation-message\">{errors.Email.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-sm-12\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Nhóm cộng tác viên <span className=\"text-danger\">*</span></label>\r\n                                        <select {...register('GroupId')} className=\"form-select\">\r\n                                            <option value=\"0\">Nhóm cộng tác viên</option>\r\n                                            {\r\n                                                props.partnerGroup.map(item => {\r\n                                                    return (\r\n                                                        <option key={item.GroupId} value={item.GroupId}>{item.GroupName}</option>\r\n                                                    )\r\n                                                })\r\n                                            }\r\n                                        </select>\r\n                                        {errors.GroupId && <div className=\"validation-message\">{errors.GroupId.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Tỉnh/Tp</label>\r\n                                <select className=\"form-select\" value={ProvinceId} onChange={e => {\r\n                                    let provinceId = e.target.value\r\n                                    props.onProvinceChange(provinceId)\r\n                                    setValue('WardId', 0)\r\n                                }}>\r\n                                    <option value=\"0\">Chọn Tỉnh/Tp</option>\r\n                                    {\r\n                                        props.province.map(item => {\r\n                                            return (\r\n                                                <option key={item.ProvinceId} value={item.ProvinceId}>{item.Prefix} {item.ProvinceName}</option>\r\n                                            )\r\n                                        })\r\n                                    }\r\n                                </select>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Quận/Huyện</label>\r\n                                <select className=\"form-select\" value={DistrictId} onChange={e => {\r\n                                    let districtId = e.target.value\r\n                                    props.onDistrictChange(districtId)\r\n                                    setValue('WardId', 0)\r\n                                }}>\r\n                                    <option value=\"0\">Chọn Quận/Huyện</option>\r\n                                    {\r\n                                        props.district.map(item => {\r\n                                            return (\r\n                                                <option key={item.DistrictId} value={item.DistrictId}>{item.Prefix} {item.DistrictName}</option>\r\n                                            )\r\n                                        })\r\n                                    }\r\n                                </select>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Phường/Xã</label>\r\n                                <select {...register('WardId')} className=\"form-select\">\r\n                                    <option value=\"0\">Chọn Phường/Xã</option>\r\n                                    {\r\n                                        props.ward.map(item => {\r\n                                            return (\r\n                                                <option key={item.WardId} value={item.WardId}>{item.Prefix} {item.WardName}</option>\r\n                                            )\r\n                                        })\r\n                                    }\r\n                                </select>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-lg-8\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Địa chỉ</label>\r\n                                <input {...register('Address')} type=\"text\" className=\"form-control\" placeholder=\"Địa chỉ\" />\r\n                                {errors.Address && <div className=\"validation-message\">{errors.Address.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Trạng thái</label>\r\n                                <select {...register('StatusId')} className=\"form-select\">\r\n                                    <option value=\"1\">Hoạt động</option>\r\n                                    <option value=\"2\">Tạm khóa</option>\r\n                                </select>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-12\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">GHTK token</label>\r\n                                <input {...register('GHTKToken')} type=\"text\" className=\"form-control\" placeholder=\"GHTK token\" />\r\n                                {errors.GHTKToken && <div className=\"validation-message\">{errors.GHTKToken.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-12\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Ghi chú</label>\r\n                                <textarea {...register('Note')} rows=\"2\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                                {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n    data: PropTypes.object,\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    province: PropTypes.array,\r\n    district: PropTypes.array,\r\n    ward: PropTypes.array,\r\n    partnerGroup: PropTypes.array,\r\n    onProvinceChange: PropTypes.func,\r\n    onDistrictChange: PropTypes.func\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n    data: {},\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    province: [],\r\n    district: [],\r\n    ward: [],\r\n    partnerGroup: [],\r\n    onProvinceChange: () => { },\r\n    onDistrictChange: () => { }\r\n}\r\n\r\nexport default ModalEdit","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    NewPassword: yup.string().required('Vui lòng nhập mật khẩu mới').max(70, 'Mật khẩu mới quá dài'),\r\n})\r\n\r\nexport default function ModalSetPwd(props) {\r\n    const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                setValue(\"PartnerId\", props.partnerId)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Đặt lại mật khẩu</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Mật khẩu mới <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('NewPassword')} type=\"password\" className=\"form-control\" placeholder=\"Mật khẩu mới\" />\r\n                        {errors.NewPassword && <div className=\"validation-message\">{errors.NewPassword.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalSetPwd.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    partnerId: PropTypes.number\r\n}\r\n\r\nModalSetPwd.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    partnerId: 0\r\n}","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst invalidValue = 'Giá trị không hợp lệ'\r\n\r\nconst schema = yup.object().shape({\r\n    RechargeTypeId: yup.number().min(1, invalidValue).max(2, invalidValue),\r\n    Amount: yup.number().min(1, invalidValue).max(2_000_000_000, invalidValue),\r\n    Note: yup.string().max(100, 'Ghi chú quá dài'),\r\n})\r\n\r\nfunction ModalRecharge(props) {\r\n    const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [val, setVal] = useState(0)\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n                setVal(0)\r\n            }}\r\n            onShow={() => {\r\n                setValue(\"PartnerId\", props.partnerId)\r\n                setValue(\"Amount\", 0)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Nạp tiền</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Loại</label>\r\n                        <select {...register('RechargeTypeId')} className=\"form-select\">\r\n                            <option value={2}>Cộng tiền</option>\r\n                            <option value={1}>Trừ tiền</option>\r\n                        </select>\r\n                        {errors.RechargeTypeId && <div className=\"validation-message\">{errors.RechargeTypeId.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Số tiền <span className=\"text-danger\">*</span></label>\r\n                        <div className=\"input-group\">\r\n                            <NumberFormat\r\n                                className=\"form-control\"\r\n                                // thousandSeparator={\".\"}\r\n                                // decimalSeparator=\",\"\r\n                                allowNegative={false}\r\n                                defaultValue={0}\r\n                                onValueChange={(c) => {\r\n                                    setValue('Amount', c.value)\r\n                                    setVal(c.value)\r\n                                }}\r\n                                value={val}\r\n                                decimalScale={0}\r\n                            />\r\n                            <span className=\"input-group-text\">VNĐ</span>\r\n                        </div>\r\n                        {errors.Amount && <div className=\"validation-message\">{errors.Amount.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Ghi chú</label>\r\n                        <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                        {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalRecharge.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    partnerId: PropTypes.number\r\n}\r\n\r\nModalRecharge.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    partnerId: 0\r\n}\r\n\r\nexport default ModalRecharge\r\n\r\n","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { EmptyRow, FormatNumber, LoadingRow, Pagination } from '../../../../../components'\r\n\r\nfunction BalanceTable(props) {\r\n    const { balanceHistories, pagination } = props\r\n\r\n    function renderTable() {\r\n        if (balanceHistories === null) return <LoadingRow colSpan={6} />\r\n        else if (balanceHistories.length === 0) return <EmptyRow colSpan={6} />\r\n        else return balanceHistories.map((item, index) => <tr key={item.PartnerBalanceHistoryId}>\r\n            <td className=\"text-center\">\r\n                <FormatNumber>\r\n                    {(props.pageItem * (props.pageIndex - 1)) + index + 1}\r\n                </FormatNumber>\r\n            </td>\r\n            <td>\r\n                {item.Detail}\r\n                {renderObjectValue(item.ObjectValue)}\r\n            </td>\r\n            <td>{item.Note}</td>\r\n            <td className={item.Amount >= 0 ? 'text-end text-primary' : 'text-end text-danger'}>\r\n                <FormatNumber>\r\n                    {item.Amount}\r\n                </FormatNumber>\r\n            </td>\r\n            <td>\r\n                {renderType(item.Amount)}\r\n            </td>\r\n            <td>\r\n                {item.CreatedDate}\r\n                <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    const renderObjectValue = (objectValue) => {\r\n        if (objectValue !== '') return <span className=\"text-primary\"> #{objectValue}</span>\r\n        else return ''\r\n    }\r\n\r\n    const renderType = (amount) => {\r\n        if (amount >= 0) return <span className=\"badge bg-success min-w-50-px\">Cộng</span>\r\n        else return <span className=\"badge bg-warning min-w-50-px\">Trừ</span>\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <div className=\"table-responsive\">\r\n                <table className=\"table table-centered mb-0\">\r\n                    <thead>\r\n                        <tr>\r\n                            <th className=\"w-52-px\">#</th>\r\n                            <th>Giao dịch</th>\r\n                            <th>Ghi chú</th>\r\n                            <th className='text-end'>Số tiền</th>\r\n                            <th>Loại</th>\r\n                            <th>Ngày giao dịch</th>\r\n                        </tr>\r\n                    </thead>\r\n                    <tbody>\r\n                        {renderTable()}\r\n                    </tbody>\r\n                </table>\r\n            </div>\r\n            <Pagination\r\n                totalPage={pagination.totalPage}\r\n                currentPage={pagination.pageIndex}\r\n                onPageChange={(pIndex) => {\r\n                    props.onPageChange(pIndex)\r\n                }}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nBalanceTable.propTypes = {\r\n    balanceHistories: PropTypes.array,\r\n    pagination: PropTypes.object,\r\n    onPageChange: PropTypes.func,\r\n    pageItem: PropTypes.number,\r\n    pageIndex: PropTypes.number,\r\n}\r\n\r\nBalanceTable.defaultProps = {\r\n    balanceHistories: [],\r\n    pagination: {},\r\n    onPageChange: () => { },\r\n    pageItem: 0,\r\n    pageIndex: 0\r\n}\r\n\r\nexport default BalanceTable","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { EmptyRow, FormatNumber, LoadingRow, Pagination } from '../../../../../components'\r\n\r\nconst OrderTable = (props) => {\r\n    const { orders, pagination } = props\r\n\r\n    const renderTable = () => {\r\n        if (orders === null) return <LoadingRow colSpan={7} />\r\n        else if (orders.length === 0) return <EmptyRow colSpan={7} />\r\n        else return orders.map(order => <tr key={order.OrderId}>\r\n            <td>{order.OrderId}</td>\r\n            <td>{order.CustomerName}</td>\r\n            <td className=\"text-end text-primary\">\r\n                <FormatNumber>\r\n                    {order.Products.length}\r\n                </FormatNumber>\r\n            </td>\r\n            <td className=\"text-end text-primary\">\r\n                <FormatNumber>\r\n                    {order.SumOutputPrice}\r\n                </FormatNumber>\r\n            </td>\r\n            <td className=\"text-end text-primary\">\r\n                <FormatNumber>\r\n                    {order.SumPartnerPrice}\r\n                </FormatNumber>\r\n                <span> + </span>\r\n                <span className=\"text-success\">\r\n                    <FormatNumber>\r\n                        {order.PartnerDropShipFee}\r\n                    </FormatNumber>\r\n                </span>\r\n            </td>\r\n            <td>\r\n                {renderStatus(order.OrderStatusId, order.OrderStatusName)}\r\n            </td>\r\n            <td>\r\n                {order.CreatedDate}\r\n                <small className=\"text-muted\"> {order.CreatedTime}</small>\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    const renderStatus = (orderStatusId, orderStatusName) => {\r\n        let className = ''\r\n        if (orderStatusId !== 5) {\r\n            className = orderStatusId === 1 ? 'badge bg-success min-w-50-px' : 'badge bg-danger min-w-50-px'\r\n        }\r\n        else {\r\n            className = orderStatusId === 1 ? 'badge bg-success min-w-50-px' : 'badge bg-danger min-w-50-px'\r\n        }\r\n        return <span className={className}>{orderStatusName}</span>\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <div className=\"table-responsive\">\r\n                <table className=\"table table-centered mb-0\">\r\n                    <thead>\r\n                        <tr>\r\n                            <th>ID</th>\r\n                            <th>Người nhận</th>\r\n                            <th className='text-end'>Số lượng</th>\r\n                            <th className='text-end'>Tổng</th>\r\n                            <th className='text-end'>Thu CTV</th>\r\n                            <th>Trạng thái</th>\r\n                            <th>Ngày</th>\r\n                        </tr>\r\n                    </thead>\r\n                    <tbody>\r\n                        {renderTable()}\r\n                    </tbody>\r\n                </table>\r\n            </div>\r\n            <Pagination\r\n                totalPage={pagination.totalPage}\r\n                currentPage={pagination.pageIndex}\r\n                onPageChange={(pIndex) => {\r\n                    props.onPageChange(pIndex)\r\n                }}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nOrderTable.propTypes = {\r\n    orders: PropTypes.array,\r\n    pagination: PropTypes.object,\r\n    onPageChange: PropTypes.func,\r\n}\r\n\r\nOrderTable.defaultProps = {\r\n    orders: [],\r\n    pagination: {},\r\n    onPageChange: () => { }\r\n}\r\n\r\nexport default OrderTable","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { LoadingRow, EmptyRow, ShopeeProductAvatar } from './../../../../../components'\r\n\r\nfunction ShopeeTable(props) {\r\n    const { shops } = props\r\n\r\n    function renderTable() {\r\n        if (shops === null) return <LoadingRow colSpan={5} />\r\n        else if (shops.length === 0) return <EmptyRow colSpan={5} />\r\n        else return shops.map((item, index) => <tr key={item.PartnerShopId}>\r\n            <td className=\"text-center\">{index + 1}</td>\r\n            <td>\r\n                <ShopeeProductAvatar\r\n                    url={item.Portrait}\r\n                />\r\n                {item.ShopName}\r\n            </td>\r\n            <td>{item.ShopId}</td>\r\n            <td>{item.UserName}</td>\r\n            <td>\r\n                {item.CreatedDate}\r\n                <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Tên shop</th>\r\n                        <th>ID shop</th>\r\n                        <th>Tài khoản</th>\r\n                        <th>Ngày tạo</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nShopeeTable.propTypes = {\r\n    shops: PropTypes.array\r\n}\r\n\r\nShopeeTable.defaultProps = {\r\n    shops: []\r\n}\r\n\r\nexport default ShopeeTable","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { DetailRow, FormatNumber } from './../../../../../components'\r\n\r\nfunction Detail(props) {\r\n    const { detail } = props\r\n\r\n    function renderDetail() {\r\n        if (detail !== {}) {\r\n            return (\r\n                <Fragment>\r\n                    <DetailRow title=\"Họ tên\">{detail.FullName}</DetailRow>\r\n                    <DetailRow title=\"Email\">{detail.Email}</DetailRow>\r\n                    <DetailRow title=\"Phone\">{detail.Email}</DetailRow>\r\n                    <DetailRow title=\"Số dư\">\r\n                        <span className=\"text-primary\">\r\n                            <FormatNumber>\r\n                                {detail.Balance}\r\n                            </FormatNumber>\r\n                        </span>\r\n                    </DetailRow>\r\n                    <DetailRow title=\"Nhóm\"><span className={detail.GroupId === 0 ? 'text-danger' : ''}>{detail.GroupName}</span></DetailRow>\r\n                    <DetailRow title=\"Trạng thái\">{detail.StatusId === 1 ? <span className=\"text-primary\">Hoạt động</span> : <span className=\"text-danger\">Tạm khóa</span>}</DetailRow>\r\n                    <DetailRow title=\"Địa chỉ\">{detail.Address}</DetailRow>\r\n                    <DetailRow title=\"Ngày tạo\">{detail.CreatedDate}<small className=\"text-muted\"> {detail.CreatedTime}</small></DetailRow>\r\n                    <DetailRow title=\"Tên shop\">{detail.ShopName}</DetailRow>\r\n                    <DetailRow title=\"Ghi chú\">{detail.Note}</DetailRow>\r\n                    <DetailRow title=\"GHTK token\">{detail.GHTKToken}</DetailRow>\r\n                    <DetailRow title=\"Miễn phí đóng gói\"><span className='text-primary'>{detail.FreeShipQty}</span></DetailRow>\r\n                    <DetailRow className='col-sm-12 col-md-6 col-lg-6 col-xl-8' title=\"Mã giới thiệu\"><span className='text-primary'>{detail.PartnerCode}</span></DetailRow>\r\n                    <DetailRow className='col-sm-12 col-md-6 col-lg-6 col-xl-4' title=\"Người giới thiệu\"><span className='text-primary'>{detail.RefFullName}</span></DetailRow>\r\n                </Fragment>\r\n            )\r\n        }\r\n    }\r\n\r\n    return (\r\n        <div className=\"row\">\r\n            {renderDetail()}\r\n        </div>\r\n    )\r\n}\r\n\r\nDetail.propTypes = {\r\n    detail: PropTypes.object,\r\n}\r\n\r\nDetail.defaultProps = {\r\n    detail: {}\r\n}\r\n\r\nexport default Detail","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { FormatNumber } from './../../../../../components'\r\nimport { IoExtensionPuzzleOutline } from 'react-icons/io5'\r\n\r\nfunction InfoBlock(props) {\r\n    const { icon, value, title } = props\r\n\r\n    return (\r\n        <div className=\"card widget-flat mb-0\">\r\n            <div className=\"card-body\">\r\n                <div className=\"float-end\">\r\n                    <span className=\"widget-icon\">\r\n                        {icon}\r\n                    </span>\r\n                </div>\r\n                <h5 className=\"text-muted fw-normal mt-0\" title=\"Growth\">{title}</h5>\r\n                <h3 className=\"mt-3 mb-3\">\r\n                    <FormatNumber>{value}</FormatNumber>\r\n                </h3>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nInfoBlock.propTypes = {\r\n    icon: PropTypes.element,\r\n    value: PropTypes.number,\r\n    title: PropTypes.string,\r\n}\r\n\r\nInfoBlock.defaultProps = {\r\n    icon: <IoExtensionPuzzleOutline />,\r\n    value: 0,\r\n    title: 'Title'\r\n}\r\n\r\nexport default InfoBlock","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { EmptyRow, FormatNumber, LoadingRow, Pagination } from '../../../../../components'\r\nimport { IoEllipseSharp } from 'react-icons/io5'\r\n\r\nfunction FreeShipTable(props) {\r\n\r\n    const { data, pagination, onPageChange, pageItem } = props\r\n\r\n    const renderTable = () => {\r\n\r\n        const { pageIndex } = pagination\r\n\r\n        if (data === null) return <LoadingRow colSpan={6} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n        else return data.map((item, index) => <tr key={item.FreeShipHistoryId}>\r\n            <td className=\"text-primary\">\r\n                <FormatNumber>\r\n                    {(pageItem * (pageIndex - 1)) + index + 1}\r\n                </FormatNumber>\r\n            </td>\r\n            <td>\r\n                {renderType(item.TypeId)}\r\n            </td>\r\n            <td className={item.Qty > -1 ? 'text-end text-primary' : 'text-end text-danger'}>\r\n                <FormatNumber>\r\n                    {item.Qty}\r\n                </FormatNumber>\r\n            </td>\r\n            <td>\r\n                {item.FreeShipTitle}\r\n            </td>\r\n            <td>\r\n                {item.OrderId !== null ? item.OrderId : ''}\r\n            </td>\r\n            <td>\r\n                {item.CreatedDate}\r\n                <small className='text-muted'> {item.CreatedTime}</small>\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    function renderType(typeId) {\r\n        if (typeId === 1) return <><IoEllipseSharp className=\"text-info mt--3-px\" /> Admin cộng</>\r\n        else if (typeId === 2) return <><IoEllipseSharp className=\"text-primary mt--3-px\" /> Trừ khi đặt hàng</>\r\n        else return <><IoEllipseSharp className=\"text-warning mt--3-px\" /> Cộng từ hủy đơn hàng</>\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <div className=\"table-responsive\">\r\n                <table className=\"table table-centered mb-0\">\r\n                    <thead>\r\n                        <tr>\r\n                            <th className=\"w-52-px\">#</th>\r\n                            <th>Loại</th>\r\n                            <th className='text-end'>Số lượng</th>\r\n                            <th>Miễn phí vận chuyển</th>\r\n                            <th>ID đơn hàng</th>\r\n                            <th>Ngày tạo</th>\r\n                        </tr>\r\n                    </thead>\r\n                    <tbody>\r\n                        {renderTable()}\r\n                    </tbody>\r\n                </table>\r\n            </div>\r\n            <Pagination\r\n                totalPage={pagination.totalPage}\r\n                currentPage={pagination.pageIndex}\r\n                onPageChange={(pIndex) => {\r\n                    onPageChange(pagination.partnerId, pIndex)\r\n                }}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nFreeShipTable.propTypes = {\r\n    data: PropTypes.array,\r\n    pagination: PropTypes.object,\r\n    onPageChange: PropTypes.func,\r\n    pageItem: PropTypes.number\r\n}\r\n\r\nFreeShipTable.defaultProps = {\r\n    data: [],\r\n    pagination: {},\r\n    onPageChange: () => { },\r\n    pageItem: 0\r\n}\r\n\r\nexport default FreeShipTable","import PropTypes from \"prop-types\";\r\nimport React from \"react\";\r\nimport Modal from \"react-bootstrap/Modal\";\r\nimport { CloseButton, EmptyRow } from \"./../../../../../components\";\r\n\r\nfunction ModalChildren(props) {\r\n  const { partners } = props;\r\n\r\n  function renderTable() {\r\n    if (partners.length === 0) return <EmptyRow colSpan={5} />;\r\n    else\r\n      return partners.map((item, index) => (\r\n        <tr key={index}>\r\n          <td className=\"text-center\">{index + 1}</td>\r\n          <td>{item.FullName}</td>\r\n          <td>{item.Email}</td>\r\n          <td>{item.Phone}</td>\r\n          <td>{item.GroupName}</td>\r\n        </tr>\r\n      ));\r\n  }\r\n\r\n  return (\r\n    <Modal\r\n      show={props.isShow}\r\n      onHide={props.onClose}\r\n      backdrop=\"static\"\r\n      size=\"xl\"\r\n      onExited={() => {}}\r\n      onShow={() => {}}\r\n    >\r\n      <Modal.Header closeButton>\r\n        <Modal.Title>Cộng tác viên đã giới thiệu</Modal.Title>\r\n      </Modal.Header>\r\n      <Modal.Body>\r\n        <table className=\"table table-centered mb-0\">\r\n          <thead>\r\n            <tr>\r\n              <th className=\"w-52-px\">#</th>\r\n              <th>Họ tên</th>\r\n              <th>Điện thoại</th>\r\n              <th>Email</th>\r\n              <th>Nhóm</th>\r\n            </tr>\r\n          </thead>\r\n          <tbody>{renderTable()}</tbody>\r\n        </table>\r\n      </Modal.Body>\r\n      <Modal.Footer>\r\n        <CloseButton onClick={props.onClose} />\r\n      </Modal.Footer>\r\n    </Modal>\r\n  );\r\n}\r\n\r\nModalChildren.propTypes = {\r\n  onClose: PropTypes.func,\r\n  isShow: PropTypes.bool,\r\n  partners: PropTypes.array,\r\n};\r\n\r\nModalChildren.defaultProps = {\r\n  onClose: () => {},\r\n  isShow: false,\r\n  partners: [],\r\n};\r\n\r\nexport default ModalChildren;\r\n","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline, IoPeopleOutline, IoPersonAddOutline, IoPersonRemoveOutline, IoWalletOutline } from 'react-icons/io5'\r\nimport { IconButton, Notification, Pagination, AuthAdminView } from '../../../components'\r\nimport {\r\n    Filter, InfoBlock, ModalAdd,\r\n    ModalEdit, ModalRecharge, ModalSetPwd, Table,\r\n    FreeShipTable, ModalChildren\r\n} from './components'\r\n\r\nconst freeShipPageItem = 5\r\n\r\nconst PartnerPage = () => {\r\n    // State lưu danh sách CTV\r\n    const [partner, setPartner] = useState(null);\r\n\r\n    // State lưu danh sách Tỉnh/Tp\r\n    const [province, setProvince] = useState([]);\r\n\r\n    // State lưu danh sách Quận/Huyện\r\n    const [district, setDistrict] = useState([]);\r\n\r\n    // State lưu danh sách Phường/Xã\r\n    const [ward, setWard] = useState([]);\r\n\r\n    // State lưu danh sách nhóm CTV\r\n    const [partnerGroup, setPartnerGroup] = useState([]);\r\n\r\n    // State mở, đóng modal thêm CTV\r\n    const [isShowModalPartnerAdd, setIsShowModalPartnerAdd] = useState(false);\r\n\r\n    // State mở, đóng modal thêm CTV\r\n    const [isShowModalPartnerEdit, setIsShowModalPartnerEdit] = useState(false);\r\n\r\n    // State lưu thông tin cập nhật CTV\r\n    const [partnerEdit, setPartnerEdit] = useState({});\r\n\r\n    // State đóng mở modal và PartnerId set lại mật khẩu\r\n    const [partnerSetPwd, setPartnerSetPwd] = useState({\r\n        isShow: false,\r\n        partnerId: 0\r\n    })\r\n\r\n    // State đóng mở modal và ParnerId nạp tiền\r\n    const [partnerRecharge, setPartnerRecharge] = useState({\r\n        isShow: false,\r\n        partnerId: 0\r\n    })\r\n\r\n    const [info, setInfo] = useState({\r\n        allPartner: 0,\r\n        activePartner: 0,\r\n        inActivePartner: 0,\r\n        balance: 0\r\n    })\r\n\r\n    const [isShowModalChildren, setIsShowModalChildren] = useState(false)\r\n\r\n    const [childrenPartners, setChildrenPartners] = useState([])\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Cộng tác viên'\r\n\r\n        loadInfo()\r\n\r\n        loadProvince()\r\n        loadPartnerGroup()\r\n    }, [])\r\n\r\n    const [filters, setFilters] = useState({\r\n        keyword: '',\r\n        groupId: 0,\r\n        statusId: 0,\r\n        pageItem: 10,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [pagination, setPagination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [partnerOrderPagination, setPartnerOrderPagination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [balanceHistoryPatination, setBalanceHistoryPatination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [freeShipPatination, setFreeShipPatination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1,\r\n        partnerId: 0\r\n    })\r\n\r\n    useEffect(() => {\r\n        let url = `/admin/partner/filter?keyword=${filters.keyword}&groupId=${filters.groupId}&statusId=${filters.statusId}&pageItem=10&pageIndex=${filters.pageIndex}`;\r\n        axios.get(url).then(res => {\r\n            let data = res.data;\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex\r\n                }\r\n                setPagination(newPagination)\r\n                setPartner(data.Result.Data);\r\n            }\r\n        })\r\n    }, [filters])\r\n\r\n    const [partnerOrders, setPartnerOrders] = useState([])\r\n\r\n    const [balanceHistories, setBalanceHistories] = useState([])\r\n\r\n    const [partnerDetail, setPartnerDetail] = useState({})\r\n\r\n    const [shopeeShops, setShopeeShops] = useState([])\r\n\r\n    const [freeShips, setFreeShips] = useState([])\r\n\r\n    // Load danh sách nhóm CTV\r\n    const loadPartnerGroup = () => {\r\n        const url = '/admin/partner-group/get-all';\r\n        axios.get(url).then(res => {\r\n            let data = res.data;\r\n            if (data.IsSuccess) {\r\n                setPartnerGroup(data.Result);\r\n            }\r\n        })\r\n    }\r\n\r\n    // Load danh sách Tỉnh/Tp\r\n    const loadProvince = () => {\r\n        const url = '/admin/province/get-all';\r\n        axios.get(url).then(res => {\r\n            let data = res.data;\r\n            if (data.IsSuccess) {\r\n                setProvince(data.Result);\r\n            }\r\n        });\r\n    }\r\n\r\n    // Load danh sách Quận/Huyện theo Tỉnh/Tp\r\n    const loadDistrict = (provinceId) => {\r\n        const url = `/admin/district/get-by-province?id=${provinceId}`;\r\n        axios.get(url).then(res => {\r\n            let data = res.data;\r\n            if (data.IsSuccess) {\r\n                setDistrict(data.Result);\r\n                setWard([]);\r\n            }\r\n        })\r\n    }\r\n\r\n    //Load danh sách Phường/Xã theo Quận/Huyện\r\n    const loadWard = (districtId) => {\r\n        const url = `/admin/ward/get-by-district?id=${districtId}`;\r\n        axios.get(url).then(res => {\r\n            let data = res.data;\r\n            if (data.IsSuccess) {\r\n                setWard(data.Result);\r\n            }\r\n        })\r\n    }\r\n\r\n    //Thực hiện mở hoặc đóng detail table\r\n    const handleRowClick = item => {\r\n        const partnerId = item.PartnerId\r\n        let lst = [...partner];\r\n        let newindex = lst.findIndex(n => n.PartnerId === item.PartnerId);\r\n        let newItem = lst[newindex];\r\n        let prevIndex = lst.findIndex(n => n.isSelected);\r\n        if (prevIndex > -1) {\r\n            let prev = lst[prevIndex];\r\n            if (prev.PartnerId === newItem.PartnerId) {\r\n                clearDetail()\r\n                newItem.isSelected = false;\r\n            }\r\n            else {\r\n                loadDetail(partnerId)\r\n                prev.isSelected = false;\r\n                newItem.isSelected = true;\r\n            }\r\n        }\r\n        else {\r\n            loadDetail(partnerId)\r\n            newItem.isSelected = true;\r\n        }\r\n        setPartner(lst);\r\n    }\r\n\r\n    const loadDetail = (partnerId) => {\r\n        loadPartnerDetail(partnerId)\r\n        loadPartnerOrders(partnerId, 1)\r\n        loadBalanceHistory(partnerId, 1)\r\n        loadShopeeShop(partnerId)\r\n        loadFreeShip(partnerId, 1)\r\n    }\r\n\r\n    const clearDetail = () => {\r\n        setPartnerDetail({})\r\n        setPartnerOrders([])\r\n        setBalanceHistories([])\r\n        setShopeeShops([])\r\n        setFreeShips([])\r\n    }\r\n\r\n    // Sự kiện đóng hoặc mở chi tiết table\r\n    function onOpenDetail(item) {\r\n        handleRowClick(item);\r\n    }\r\n\r\n    const loadPartnerOrders = (partnerId, pageIndex) => {\r\n        const url = `/admin/partner/order-filter?partnerId=${partnerId}&pageItem=5&pageIndex=${pageIndex}`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex\r\n                }\r\n                setPartnerOrderPagination(newPagination)\r\n                setPartnerOrders(data.Result.Data)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadBalanceHistory = (partnerId, pageIndex) => {\r\n        const url = `/admin/partner/balance-history?partnerId=${partnerId}&pageItem=5&pageIndex=${pageIndex}`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex\r\n                }\r\n                setBalanceHistoryPatination(newPagination)\r\n                setBalanceHistories(data.Result.Data)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadPartnerDetail = (partnerId) => {\r\n        const url = `/admin/partner/detail?id=${partnerId}`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setPartnerDetail(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadShopeeShop = (partnerId) => {\r\n        const url = `/admin/partner/shopee-shops?partnerId=${partnerId}`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setShopeeShops(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadFreeShip = (partnerId, pageIndex) => {\r\n        const url = `/admin/partner/freeship-histories?partnerId=${partnerId}&pageItem=${freeShipPageItem}&pageIndex=${pageIndex}`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex,\r\n                    partnerId: partnerId\r\n                }\r\n                setFreeShipPatination(newPagination)\r\n                setFreeShips(data.Result.Data)\r\n            }\r\n        })\r\n    }\r\n\r\n    const onEdit = item => {\r\n        const url = `/admin/partner/get-by-id?id=${item.PartnerId}`\r\n        axios.get(url).then(res => {\r\n            let data = res.data\r\n            if (data.IsSuccess) {\r\n                setProvince(data.Result.Provinces)\r\n                setDistrict(data.Result.Districts)\r\n                setWard(data.Result.Wards)\r\n                setPartnerEdit(data.Result)\r\n                setIsShowModalPartnerEdit(true)\r\n            }\r\n        })\r\n    }\r\n\r\n    const onRecharge = item => {\r\n        setPartnerRecharge({\r\n            isShow: true,\r\n            partnerId: item.PartnerId\r\n        })\r\n    }\r\n\r\n    const onSetPassword = item => {\r\n        setPartnerSetPwd({\r\n            isShow: true,\r\n            partnerId: item.PartnerId\r\n        })\r\n    }\r\n\r\n    const onLogOut = item => {\r\n        Notification.confirmHtml('Bạn có chắc muốn đăng xuất cộng tác viên', item.FullName, () => {\r\n            const url = `/admin/partner/logout?id=${item.PartnerId}`\r\n            axios.post(url).then(res => {\r\n                let data = res.data\r\n                if (data.IsSuccess) {\r\n                    Notification.success('Đăng xuất cộng tác viên thành công')\r\n                }\r\n            })\r\n        })\r\n    }\r\n\r\n    const onDelete = item => {\r\n        Notification.confirmHtml('Bạn có chắc muốn xóa cộng tác viên', item.FullName, () => {\r\n            const url = `/admin/partner/delete?id=${item.PartnerId}`\r\n            axios.post(url).then(res => {\r\n                let data = res.data\r\n                if (data.IsSuccess) {\r\n                    reloadPartner()\r\n                    loadInfo()\r\n                    Notification.success('Xóa cộng tác viên thành công')\r\n                }\r\n            })\r\n        })\r\n    }\r\n\r\n    // Sự kiện đóng chi tiết table\r\n    const onCloseDetail = (item) => {\r\n        handleRowClick(item);\r\n    }\r\n\r\n    const reloadPartner = () => {\r\n        setFilters({\r\n            ...filters,\r\n            pageIndex: 1\r\n        })\r\n    }\r\n\r\n    const loadInfo = () => {\r\n        const url = '/admin/partner/info'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setInfo({\r\n                    allPartner: data.Result.AllPartner,\r\n                    activePartner: data.Result.ActivePartner,\r\n                    inActivePartner: data.Result.InActivePartner,\r\n                    balance: data.Result.Balance\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            {/* Bộ lọc CTV */}\r\n            <Filter\r\n                onSearch={params => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params,\r\n                        pageIndex: 1\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n                partnerGroup={partnerGroup}\r\n            />\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"row\">\r\n                        <div className=\"col-12\">\r\n                            <AuthAdminView right=\"partner_add\">\r\n                                <IconButton\r\n                                    className=\"mb-2\"\r\n                                    text=\"Thêm mới\"\r\n                                    icon={<IoAddCircleOutline />}\r\n                                    onClick={() => {\r\n                                        setIsShowModalPartnerAdd(true)\r\n                                    }} />\r\n                            </AuthAdminView>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <Table\r\n                        data={partner}\r\n                        onOpenDetail={onOpenDetail}\r\n                        onEdit={onEdit}\r\n                        onRecharge={onRecharge}\r\n                        onSetPassword={onSetPassword}\r\n                        onLogOut={onLogOut}\r\n                        onDelete={onDelete}\r\n                        onCloseDetail={onCloseDetail}\r\n                        onShowChildren={(partner) => {\r\n                            const url = `/admin/partner/get-children?partnerId=${partner.PartnerId}`\r\n                            axios.get(url).then(({ data }) => {\r\n                                if (data.IsSuccess) {\r\n                                    setChildrenPartners(data.Result)\r\n                                    setIsShowModalChildren(true)\r\n                                }\r\n                            })\r\n                        }}\r\n\r\n                        detail={partnerDetail}\r\n\r\n                        partnerOrders={partnerOrders}\r\n                        partnerOrderPagination={partnerOrderPagination}\r\n                        onPartnerOrderPageChange={(partnerId, pIndex) => {\r\n                            const newPagination = { ...partnerOrderPagination, pageIndex: pIndex }\r\n                            setPartnerOrderPagination(newPagination)\r\n                            loadPartnerOrders(partnerId, pIndex)\r\n                        }}\r\n\r\n                        balanceHistories={balanceHistories}\r\n                        balanceHistoryPagination={balanceHistoryPatination}\r\n                        onBalanceHistoryPageChange={(partnerId, pIndex) => {\r\n                            const newPagination = { ...balanceHistoryPatination, pageIndex: pIndex }\r\n                            setBalanceHistoryPatination(newPagination)\r\n                            loadBalanceHistory(partnerId, pIndex)\r\n                        }}\r\n                        balancePageItem={5}\r\n                        balancePageIndex={balanceHistoryPatination.pageIndex}\r\n\r\n                        shopeeShops={shopeeShops}\r\n                    >\r\n                        <FreeShipTable\r\n                            data={freeShips}\r\n                            pagination={freeShipPatination}\r\n                            onPageChange={(partnerId, pIndex) => {\r\n                                const newPagination = { ...freeShipPatination, pageIndex: pIndex }\r\n                                setFreeShipPatination(newPagination)\r\n                                loadFreeShip(partnerId, pIndex)\r\n                            }}\r\n                            pageItem={freeShipPageItem}\r\n                        />\r\n                    </Table>\r\n\r\n                    <Pagination\r\n                        totalPage={pagination.totalPage}\r\n                        currentPage={pagination.pageIndex}\r\n                        onPageChange={(pIndex) => {\r\n                            const newPagination = { ...pagination, pageIndex: pIndex }\r\n                            setPagination(newPagination)\r\n                            const newFilters = {\r\n                                ...filters,\r\n                                pageIndex: pIndex\r\n                            }\r\n                            setFilters(newFilters)\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n\r\n            <div className=\"mb-3\">\r\n                <div className=\"row row-cols-1 row-cols-sm-2 row-cols-md-4 gy-2\">\r\n                    <div className=\"col\">\r\n                        <InfoBlock icon={<IoPeopleOutline />} value={info.allPartner} title=\"Số cộng tác viên\" />\r\n                    </div>\r\n                    <div className=\"col\">\r\n                        <InfoBlock icon={<IoPersonAddOutline />} value={info.activePartner} title=\"Cộng tác viên hoạt động\" />\r\n                    </div>\r\n                    <div className=\"col\">\r\n                        <InfoBlock icon={<IoPersonRemoveOutline />} value={info.inActivePartner} title=\"Cộng tác viên tạm khóa\" />\r\n                    </div>\r\n                    <div className=\"col\">\r\n                        <InfoBlock icon={<IoWalletOutline />} value={info.balance} title=\"Tổng số dư\" />\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            {/* Modal thêm mới CTV */}\r\n            <ModalAdd\r\n                onClose={() => {\r\n                    setIsShowModalPartnerAdd(false);\r\n                }}\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = 'admin/partner/create';\r\n                    let reqInfo = formData;\r\n                    reqInfo.ShipFeeId = 1;\r\n                    axios.post(url, reqInfo).then(res => {\r\n                        let data = res.data;\r\n                        if (data.IsSuccess) {\r\n                            reloadPartner()\r\n                            loadInfo()\r\n                            setIsShowModalPartnerAdd(false);\r\n                            Notification.success('Thêm mới cộng tác viên thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                isShow={isShowModalPartnerAdd}\r\n                province={province}\r\n                district={district}\r\n                ward={ward}\r\n                partnerGroup={partnerGroup}\r\n                onProvinceChange={loadDistrict}\r\n                onDistrictChange={loadWard} />\r\n\r\n            {/* Modal chỉnh sửa CTV */}\r\n            <ModalEdit\r\n                data={partnerEdit}\r\n                onClose={() => {\r\n                    setIsShowModalPartnerEdit(false);\r\n                }}\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = 'admin/partner/update';\r\n                    let reqInfo = formData;\r\n                    reqInfo.ShipFeeId = 1;\r\n                    axios.post(url, reqInfo).then(res => {\r\n                        let data = res.data;\r\n                        if (data.IsSuccess) {\r\n                            reloadPartner()\r\n                            loadInfo()\r\n                            setIsShowModalPartnerEdit(false)\r\n                            setPartnerEdit({})\r\n                            Notification.success('Chỉnh sửa cộng tác viên thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                isShow={isShowModalPartnerEdit}\r\n                province={province}\r\n                district={district}\r\n                ward={ward}\r\n                partnerGroup={partnerGroup}\r\n                onProvinceChange={loadDistrict}\r\n                onDistrictChange={loadWard} />\r\n\r\n            {/* Modal set lại mật khẩu */}\r\n            <ModalSetPwd\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/partner/set-password'\r\n                    axios.post(url, formData).then(res => {\r\n                        let data = res.data\r\n                        if (data.IsSuccess) {\r\n                            setPartnerSetPwd({\r\n                                isShow: false,\r\n                                partnerId: 0\r\n                            })\r\n                            Notification.success('Đặt lại mật khẩu thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setPartnerSetPwd({\r\n                        isShow: false,\r\n                        partnerId: 0\r\n                    })\r\n                }}\r\n                isShow={partnerSetPwd.isShow}\r\n                partnerId={partnerSetPwd.partnerId}\r\n            />\r\n\r\n            {/* Modal nạp tiền */}\r\n            <ModalRecharge\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/partner/recharge'\r\n                    axios.post(url, formData).then(res => {\r\n                        let data = res.data\r\n                        if (data.IsSuccess) {\r\n                            const newPartnerDetail = { ...partnerDetail }\r\n                            if (formData.RechargeTypeId === 2) {\r\n                                newPartnerDetail.Balance += formData.Amount\r\n                            }\r\n                            else {\r\n                                newPartnerDetail.Balance -= formData.Amount\r\n                            }\r\n                            setPartnerDetail(newPartnerDetail)\r\n\r\n                            loadInfo()\r\n                            loadBalanceHistory(formData.PartnerId, 1)\r\n                            setPartnerRecharge({\r\n                                isShow: false,\r\n                                partnerId: 0\r\n                            })\r\n                            Notification.success('Nạp tiền thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setPartnerRecharge({\r\n                        isShow: false,\r\n                        partnerId: 0\r\n                    })\r\n                }}\r\n                isShow={partnerRecharge.isShow}\r\n                partnerId={partnerRecharge.partnerId}\r\n            />\r\n\r\n            <ModalChildren\r\n                isShow={isShowModalChildren}\r\n                onClose={() => {\r\n                    setIsShowModalChildren(false)\r\n                    setChildrenPartners([])\r\n                }}\r\n                partners={childrenPartners}\r\n            />\r\n        </Fragment>\r\n\r\n    );\r\n};\r\n\r\nexport default PartnerPage;","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { LoadingRow, EmptyRow, FormatNumber, AvatarRow } from './../../../../../components'\r\n\r\nfunction BestSellingProduct(props) {\r\n    const { products } = props\r\n\r\n    function renderTable() {\r\n        if (products === null) return <LoadingRow colSpan={5} />\r\n        else if (products.length === 0) return <EmptyRow colSpan={5} />\r\n        else return products.map(item => <tr key={item.ProductId}>\r\n            <td style={{ width: '60.38px' }}>\r\n                <AvatarRow url={item.AvatarUrl} me={0} />\r\n            </td>\r\n            <td>\r\n                <p className=\"mb-1\">{item.ProductName}</p>\r\n                <p className=\"text-muted mb-0\">{item.CategoryName}</p>\r\n            </td>\r\n            <td className=\"text-end\">\r\n                <p className=\"mb-1 text-primary\"><FormatNumber>{item.OutputPrice}</FormatNumber></p>\r\n                <p className=\"text-muted mb-0\">Giá đề xuất</p>\r\n            </td>\r\n            <td className=\"text-end\">\r\n                <p className=\"mb-1 text-primary\"><FormatNumber>{item.Quantity}</FormatNumber></p>\r\n                <p className=\"text-muted mb-0\">Số lượng</p>\r\n            </td>\r\n            <td className=\"text-end\">\r\n                <p className=\"mb-1 text-primary\"><FormatNumber>{item.OutputPrice * item.Quantity}</FormatNumber></p>\r\n                <p className=\"text-muted mb-0\">Thành tiền</p>\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\" style={{ paddingBottom: '1.7rem' }}>\r\n                <h5 className=\"card-title mb-2\">SẢN PHẨM BÁN CHẠY TRONG THÁNG</h5>\r\n                <div className=\"table-responsive\">\r\n                    <table className=\"table table-centered mb-0\">\r\n                        <tbody>\r\n                            {renderTable()}\r\n                        </tbody>\r\n                    </table>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nBestSellingProduct.propTypes = {\r\n    products: PropTypes.array,\r\n}\r\n\r\nBestSellingProduct.defaultProps = {\r\n    products: []\r\n}\r\n\r\nexport default BestSellingProduct","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { IoExtensionPuzzleOutline, IoArrowUpOutline, IoArrowDownOutline } from 'react-icons/io5'\r\nimport { FormatNumber } from './../../../../../components'\r\n\r\nfunction OrderBlock(props) {\r\n    const { icon, header, val, percent } = props\r\n\r\n    function renderUpDown() {\r\n        if (val < 0) return <IoArrowDownOutline className=\"mt--2-px\" />\r\n        else return <IoArrowUpOutline className=\"mt--2-px\" />\r\n    }\r\n\r\n    return (\r\n        <div className=\"card widget-flat\">\r\n            <div className=\"card-body\">\r\n                <div className=\"float-end\">\r\n                    <span className=\"widget-icon\">\r\n                        {icon}\r\n                    </span>\r\n                </div>\r\n                <h5 className=\"text-muted fw-normal mt-0\">{header}</h5>\r\n                <h3 className=\"mt-3 mb-3\">\r\n                    <FormatNumber maxDigit={2}>\r\n                        {val}\r\n                    </FormatNumber>\r\n                </h3>\r\n                <p className=\"mb-0 text-muted\">\r\n                    <span className={val < 0 ? 'text-danger me-2' : 'text-success me-2'}>\r\n                        {renderUpDown()}\r\n                        <FormatNumber maxDigit={2}>{percent}</FormatNumber>\r\n                        %\r\n                    </span>\r\n                    <span className=\"text-nowrap\">So với hôm trước</span>\r\n                </p>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nOrderBlock.propTypes = {\r\n    icon: PropTypes.element,\r\n    header: PropTypes.string,\r\n    val: PropTypes.number,\r\n    percent: PropTypes.number,\r\n}\r\n\r\nOrderBlock.defaultProps = {\r\n    icon: <IoExtensionPuzzleOutline />,\r\n    header: 'Title',\r\n    val: 0,\r\n    percent: 0\r\n}\r\n\r\nexport default OrderBlock","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport ReactApexChart from 'react-apexcharts'\r\nimport { IoSquare } from 'react-icons/io5'\r\nimport { FormatNumber } from './../../../../../components'\r\n\r\nfunction PartnerChart(props) {\r\n    const { data, colors } = props\r\n\r\n    function renderLabel() {\r\n        return data.partnerGroups.map((item, index) => {\r\n            return (\r\n                <p key={index} className={data.partnerGroups.length - 1 === index ? 'mb-0' : ''}>\r\n                    <IoSquare className=\"me-1\" style={{ color: colors[index] }} />\r\n                    {item.PartnerGroupName}\r\n                    <span className=\"float-end\"><FormatNumber>{item.CountPartner}</FormatNumber></span>\r\n                </p>\r\n            )\r\n        })\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <h5 className=\"card-title mb-2\">SỐ CỘNG TÁC VIÊN</h5>\r\n                <ReactApexChart options={data.options} series={data.series} type=\"donut\" />\r\n                <div className=\"chart-widget-list\">\r\n                    {renderLabel()}\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nPartnerChart.propTypes = {\r\n    data: PropTypes.object,\r\n    colors: PropTypes.array,\r\n}\r\n\r\nPartnerChart.defaultProps = {\r\n    data: {},\r\n    colors: []\r\n}\r\n\r\nexport default PartnerChart","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport ReactApexChart from 'react-apexcharts'\r\n\r\nfunction RevenueProfit(props) {\r\n    const { data } = props\r\n\r\n    const [series, setSeries] = useState(\r\n        [{\r\n            name: 'Doanh thu',\r\n            data: []\r\n        }]\r\n    )\r\n\r\n    const [options, setOptions] = useState(\r\n        {\r\n            chart: {\r\n                height: 350,\r\n                type: 'bar',\r\n                toolbar: {\r\n                    show: false\r\n                }\r\n            },\r\n            plotOptions: {\r\n                bar: {\r\n                    borderRadius: 0,\r\n                    dataLabels: {\r\n                        position: 'top', // top, center, bottom\r\n                    },\r\n                }\r\n            },\r\n            dataLabels: {\r\n                enabled: true,\r\n                formatter: function (val) {\r\n                    return val + \"%\";\r\n                },\r\n                offsetY: -20,\r\n                style: {\r\n                    fontSize: '12px',\r\n                    colors: [\"#304758\"]\r\n                }\r\n            },\r\n            xaxis: {\r\n                categories: [],\r\n                position: '',\r\n                axisBorder: {\r\n                    show: false\r\n                },\r\n                axisTicks: {\r\n                    show: false\r\n                },\r\n                crosshairs: {\r\n                    fill: {\r\n                        type: 'gradient',\r\n                        gradient: {\r\n                            colorFrom: '#D8E3F0',\r\n                            colorTo: '#BED1E6',\r\n                            stops: [0, 100],\r\n                            opacityFrom: 0.4,\r\n                            opacityTo: 0.5,\r\n                        }\r\n                    }\r\n                },\r\n                tooltip: {\r\n                    enabled: false,\r\n                }\r\n            },\r\n            yaxis: {\r\n                axisBorder: {\r\n                    show: false\r\n                },\r\n                axisTicks: {\r\n                    show: false,\r\n                },\r\n                labels: {\r\n                    show: true,\r\n                    formatter: function (val) {\r\n                        return val.toLocaleString('vi-VN');\r\n                    }\r\n                }\r\n            },\r\n            title: {\r\n                text: 'Title',\r\n                floating: true,\r\n                offsetY: 330,\r\n                align: 'center',\r\n                style: {\r\n                    color: '#444'\r\n                }\r\n            }\r\n        }\r\n    )\r\n\r\n    useEffect(() => {\r\n        const valueList = data.map(item => {\r\n            return item.Value\r\n        })\r\n        setSeries(\r\n            [{\r\n                name: 'Doanh thu',\r\n                data: valueList\r\n            }]\r\n        )\r\n\r\n        const dateList = data.map(item => {\r\n            return item.Date\r\n        })\r\n        setOptions({\r\n            ...options,\r\n            xaxis: {\r\n                ...options.xaxis,\r\n                categories: dateList\r\n            }\r\n        })\r\n        // eslint-disable-next-line\r\n    }, [data])\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <ReactApexChart options={options} series={series} type=\"bar\" height={279} />\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nRevenueProfit.propTypes = {\r\n    data: PropTypes.array,\r\n}\r\n\r\nRevenueProfit.defaultProps = {\r\n    data: []\r\n}\r\n\r\nexport default RevenueProfit","import React, { useEffect, useState } from 'react'\r\nimport { OrderBlock, RevenueProfit, BestSellingProduct, PartnerChart } from './..'\r\nimport { IoCubeOutline, IoFileTrayOutline, IoReloadOutline } from 'react-icons/io5'\r\nimport { BiRun } from 'react-icons/bi'\r\nimport axios from 'axios'\r\n\r\nconst colors = [\"#727cf5\", \"#fa5c7c\", \"#0acf97\", \"#ffbc00\"]\r\n\r\nconst MainBlock = () => {\r\n    const [newOrder, setNewOrder] = useState({\r\n        value: 0,\r\n        percent: 0\r\n    })\r\n\r\n    const [inProcessOrder, setInProcessOrder] = useState({\r\n        value: 0,\r\n        percent: 0\r\n    })\r\n\r\n    const [shippingOrder, setShippingOrder] = useState({\r\n        value: 0,\r\n        percent: 0\r\n    })\r\n\r\n    const [countProduct, setCountProduct] = useState({\r\n        value: 0,\r\n        percent: 0\r\n    })\r\n\r\n    const [revenueProfit, setRevenueProfit] = useState([])\r\n\r\n    const [products, setProducts] = useState(null)\r\n\r\n    const [partnerGroupChart, setPartnerGroupChart] = useState({\r\n        series: [],\r\n        options: {\r\n            chart: {\r\n                type: 'donut',\r\n            },\r\n            labels: [],\r\n            legend: {\r\n                show: !1\r\n            },\r\n            colors: colors,\r\n            responsive: [{\r\n                breakpoint: 480,\r\n                options: {\r\n                    chart: {\r\n                        width: 200\r\n                    },\r\n                    legend: {\r\n                        position: 'bottom'\r\n                    }\r\n                }\r\n            }]\r\n        },\r\n        partnerGroups: []\r\n    })\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Tổng quan'\r\n        loadNewOrder()\r\n        loadInProcessOrder()\r\n        loadShippingOrder()\r\n        loadProductCount()\r\n        loadRevenueProfit()\r\n        loadBestSellingProduct()\r\n        loadPartnerGroup()\r\n    }, [])\r\n\r\n    function loadNewOrder() {\r\n        const url = '/admin/dashboard/new-order'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setNewOrder({\r\n                    value: data.Result.Value,\r\n                    percent: data.Result.Percent\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    function loadInProcessOrder() {\r\n        const url = '/admin/dashboard/in-process-order'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setInProcessOrder({\r\n                    value: data.Result.Value,\r\n                    percent: data.Result.Percent\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    function loadShippingOrder() {\r\n        const url = '/admin/dashboard/shipping-order'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setShippingOrder({\r\n                    value: data.Result.Value,\r\n                    percent: data.Result.Percent\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    function loadProductCount() {\r\n        const url = '/admin/dashboard/count-product'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setCountProduct({\r\n                    value: data.Result.Value,\r\n                    percent: data.Result.Percent\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    function loadRevenueProfit() {\r\n        const url = `/admin/dashboard/total-revenue`\r\n        const request = axios.get(url)\r\n        request.then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setRevenueProfit(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    function loadBestSellingProduct() {\r\n        const url = `/admin/dashboard/best-selling`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setProducts(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    function loadPartnerGroup() {\r\n        const url = `/admin/dashboard/partner-group`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                const series = data.Result.map(item => item.CountPartner)\r\n                const labels = data.Result.map(item => item.PartnerGroupName)\r\n                setPartnerGroupChart({\r\n                    series: series,\r\n                    options: {\r\n                        chart: {\r\n                            type: 'donut',\r\n                        },\r\n                        labels: labels,\r\n                        legend: {\r\n                            show: !1\r\n                        },\r\n                        colors: colors,\r\n                        responsive: [{\r\n                            breakpoint: 480,\r\n                            options: {\r\n                                chart: {\r\n                                    width: 200\r\n                                },\r\n                                legend: {\r\n                                    position: 'bottom'\r\n                                }\r\n                            }\r\n                        }]\r\n                    },\r\n                    partnerGroups: data.Result\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    return (\r\n        <div className=\"row\">\r\n            <div className=\"col-xl-5 col-lg-6\">\r\n                <div className=\"row\">\r\n                    <div className=\"col-lg-6\">\r\n                        <OrderBlock\r\n                            icon={<IoFileTrayOutline />}\r\n                            header=\"Đơn tạo mới\"\r\n                            val={newOrder.value}\r\n                            percent={newOrder.percent}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-lg-6\">\r\n                        <OrderBlock\r\n                            icon={<IoReloadOutline />}\r\n                            header=\"Đang xử lý\"\r\n                            val={inProcessOrder.value}\r\n                            percent={inProcessOrder.percent}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-lg-6\">\r\n                        <OrderBlock\r\n                            icon={<BiRun />}\r\n                            header=\"Đã gửi vận chuyển\"\r\n                            val={shippingOrder.value}\r\n                            percent={shippingOrder.percent}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-lg-6\">\r\n                        <OrderBlock\r\n                            icon={<IoCubeOutline />}\r\n                            header=\"Số lượng sản phẩm\"\r\n                            val={countProduct.value}\r\n                            percent={countProduct.percent}\r\n                        />\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <div className=\"col-xl-7 col-lg-6\">\r\n                <RevenueProfit\r\n                    data={revenueProfit}\r\n                />\r\n            </div>\r\n            <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-9\">\r\n                <BestSellingProduct\r\n                    products={products}\r\n                />\r\n            </div>\r\n            <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-3\">\r\n                <PartnerChart\r\n                    data={partnerGroupChart}\r\n                    colors={colors}\r\n                />\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default MainBlock","import React from 'react'\r\n\r\nfunction Welcome(props) {\r\n    return (\r\n        <div className=\"row justify-content-center\">\r\n            <div className=\"col-lg-4\">\r\n                <div className=\"text-center mt-5\">\r\n                    <img src=\"/assets/images/file-searching.svg\" height=\"90\" alt=\"\" />\r\n                    <h4 className=\"text-uppercase text-danger mt-3\">Chào mừng</h4>\r\n                    <p className=\"text-muted mt-3\">Bạn đến với hệ thống quản lý đơn hàng Rado Vietnam</p>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default Welcome","import React, { useContext } from 'react'\r\nimport { MainBlock, Welcome } from './components'\r\nimport { AppContext } from './../../../components'\r\n\r\nconst DashboardPage = () => {\r\n    const appSettings = useContext(AppContext)\r\n\r\n    return (\r\n        <>\r\n            {\r\n                appSettings.rights.some(n => n === 'other_dashboard') ? <MainBlock /> : <Welcome />\r\n            }\r\n        </>\r\n    )\r\n}\r\n\r\nexport default DashboardPage","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, LoadingRow } from './../../../../../components'\r\n\r\nconst TableAttr = props => {\r\n    const onEdit = (item, e) => {\r\n        e.stopPropagation()\r\n        props.onEdit(item);\r\n    }\r\n\r\n    const onDelete = (item, e) => {\r\n        e.stopPropagation()\r\n        props.onDelete(item)\r\n    }\r\n\r\n    const renderTable = () => {\r\n        let data = props.data;\r\n        if (data === null) return <LoadingRow colSpan={3} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={3} />\r\n        else return data.map((item, index) => <tr key={item.AttributeId} onClick={() => props.onSelect(item)} className={item.isSelected ? 'table-primary' : ''}>\r\n            <td className=\"text-center\">{(index + 1)}</td>\r\n            <td>{item.AttributeName}</td>\r\n            <td>\r\n                <ActionRow>\r\n                    <ActionItem right=\"attribute_edit\" onClick={e => onEdit(item, e)} icon={<FiEdit />} title='Chỉnh sửa' />\r\n                    <ActionItem right=\"attribute_delete\" onClick={e => onDelete(item, e)} icon={<IoTrashOutline />} title='Xóa' className=\"text-danger\" />\r\n                </ActionRow>\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered table-point mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Tên thuộc tính</th>\r\n                        <th className=\"w-52-px\"></th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTableAttr.propTypes = {\r\n    data: PropTypes.array,\r\n    onEdit: PropTypes.func,\r\n    onDelete: PropTypes.func,\r\n    onSelect: PropTypes.func\r\n}\r\n\r\nTableAttr.defaultProps = {\r\n    data: null,\r\n    onEdit: () => { },\r\n    onDelete: () => { },\r\n    onSelect: () => { }\r\n}\r\n\r\nexport default TableAttr","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, FormatNumber, LoadingRow } from '../../../../../components'\r\n\r\nconst TableAttrChild = props => {\r\n    const renderTable = () => {\r\n        let data = props.data\r\n        if (data === null) return <LoadingRow colSpan={5} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={5} />\r\n        else return data.map((item, index) => <tr key={item.ChildrenAttributeId}>\r\n            <td className=\"text-center\">{index + 1}</td>\r\n            <td>{item.ChildrenAttributeName}</td>\r\n            <td className=\"text-end text-primary\">\r\n                <FormatNumber>\r\n                    {item.TotalUsing}\r\n                </FormatNumber>\r\n            </td>\r\n            <td>\r\n                {item.CreatedDate}\r\n                <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n            </td>\r\n            <td>\r\n                <ActionRow>\r\n                    <ActionItem right=\"attribute_edit_child\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sửa' />\r\n                    <ActionItem right=\"attribute_delete_child\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className=\"text-danger\" />\r\n                </ActionRow>\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Giá trị</th>\r\n                        <th className='text-end'>Sử dụng</th>\r\n                        <th>Ngày tạo</th>\r\n                        <th className=\"w-52-px\"></th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTableAttrChild.propTypes = {\r\n    onEdit: PropTypes.func,\r\n    onDelete: PropTypes.func,\r\n    data: PropTypes.array\r\n}\r\n\r\nTableAttrChild.defaultProps = {\r\n    onEdit: () => { },\r\n    onDelete: () => { },\r\n    data: null\r\n}\r\n\r\nexport default TableAttrChild","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { yupResolver } from '@hookform/resolvers/yup'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport Modal from 'react-bootstrap/Modal'\r\n\r\nconst schema = yup.object().shape({\r\n    AttributeName: yup.string().required('Vui lòng nhập tên thuộc tính').max(50, 'Tên thuộc tính quá dài')\r\n})\r\n\r\nconst ModalAddAttr = props => {\r\n    const { register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới thuộc tính</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Tên thuộc tính <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('AttributeName')} type=\"text\" className=\"form-control\" placeholder=\"Tên thuộc tính\" />\r\n                        {errors.AttributeName && <div className=\"validation-message\">{errors.AttributeName.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAddAttr.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool\r\n}\r\n\r\nModalAddAttr.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false\r\n}\r\n\r\nexport default ModalAddAttr","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { yupResolver } from '@hookform/resolvers/yup'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport Modal from 'react-bootstrap/Modal'\r\n\r\nconst schema = yup.object().shape({\r\n    ChildrenAttributeName: yup.string().required('Vui lòng nhập tên thuộc tính').max(50, 'Tên giá trị quá dài')\r\n})\r\n\r\nconst ModalAddAttrChild = props => {\r\n    const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                setValue(\"AttributeId\", props.attrId)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới giá trị thuộc tính</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Giá trị thuộc tính <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('ChildrenAttributeName')} type=\"text\" className=\"form-control\" placeholder=\"Giá trị thuộc tính\" />\r\n                        {errors.ChildrenAttributeName && <div className=\"validation-message\">{errors.ChildrenAttributeName.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAddAttrChild.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    attrId: PropTypes.number\r\n}\r\n\r\nModalAddAttrChild.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    attrId: 0\r\n}\r\n\r\nexport default ModalAddAttrChild","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { yupResolver } from '@hookform/resolvers/yup'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport Modal from 'react-bootstrap/Modal'\r\n\r\nconst schema = yup.object().shape({\r\n    AttributeName: yup.string().required('Vui lòng nhập tên thuộc tính').max(50, 'Tên thuộc tính quá dài')\r\n})\r\n\r\nconst ModalEditAttr = props => {\r\n    const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                let data = props.data\r\n                setValue(\"AttributeId\", data.AttributeId)\r\n                setValue(\"AttributeName\", data.AttributeName)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa thuộc tính</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Tên thuộc tính <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('AttributeName')} type=\"text\" className=\"form-control\" placeholder=\"Tên thuộc tính\" />\r\n                        {errors.AttributeName && <div className=\"validation-message\">{errors.AttributeName.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEditAttr.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    data: PropTypes.object\r\n}\r\n\r\nModalEditAttr.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    data: {}\r\n}\r\n\r\nexport default ModalEditAttr","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { yupResolver } from '@hookform/resolvers/yup'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport Modal from 'react-bootstrap/Modal'\r\n\r\nconst schema = yup.object().shape({\r\n    ChildrenAttributeName: yup.string().required('Vui lòng nhập tên thuộc tính').max(50, 'Tên giá trị quá dài')\r\n})\r\n\r\nconst ModalEditAttrChild = props => {\r\n    const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                setValue(\"ChildrenAttributeId\", props.data.ChildrenAttributeId)\r\n                setValue(\"ChildrenAttributeName\", props.data.ChildrenAttributeName)\r\n                setValue(\"AttributeId\", props.data.AttributeId)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa giá trị thuộc tính</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Giá trị thuộc tính <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('ChildrenAttributeName')} type=\"text\" className=\"form-control\" placeholder=\"Giá trị thuộc tính\" />\r\n                        {errors.ChildrenAttributeName && <div className=\"validation-message\">{errors.ChildrenAttributeName.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEditAttrChild.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    data: PropTypes.object\r\n}\r\n\r\nModalEditAttrChild.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    data: {}\r\n}\r\n\r\nexport default ModalEditAttrChild","import React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { AuthAdminView, IconButton, Notification } from '../../../components'\r\nimport { AttributeService, ChildrenAttributeService } from './../../../services/admin'\r\nimport { ModalAddAttr, ModalAddAttrChild, ModalEditAttr, ModalEditAttrChild, TableAttr, TableAttrChild } from './components'\r\n\r\nconst AttributePage = () => {\r\n    const [attribute, setAttribute] = useState(null)\r\n\r\n    const [childrenAttribute, setChildrenAttribute] = useState(null)\r\n\r\n    const [isShowModalAttrAdd, setIsShowModalAttrAdd] = useState(false)\r\n\r\n    const [isShowModalAttrEdit, setIsShowModalAttrEdit] = useState(false)\r\n\r\n    const [isShowModalChildAttrAdd, setIsShowModalChildAttrAdd] = useState(false)\r\n\r\n    const [isShowModalChildAttrEdit, setIsShowModalChildAttrEdit] = useState(false)\r\n\r\n    const [attrEditInfo, setAttrEditInfo] = useState({})\r\n\r\n    const [attributeId, setAttributeId] = useState(0)\r\n\r\n    const [childAttrEditInfo, setChildAttrEditInfo] = useState({})\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Thuộc tính'\r\n        loadAttribute()\r\n    }, [])\r\n\r\n    useEffect(() => {\r\n        if (attribute !== null) {\r\n            if (attribute.length !== 0) {\r\n                let index = attribute.findIndex(obj => obj.isSelected)\r\n                let item = attribute[index];\r\n                loadChildrenAttribute(item.AttributeId)\r\n            }\r\n        }\r\n    }, [attribute])\r\n\r\n    const loadAttribute = () => {\r\n        AttributeService.getAll().then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                if (data.Result.length !== 0) {\r\n                    let firstAttribute = data.Result[0]\r\n                    let firstAttributeId = firstAttribute.AttributeId\r\n                    let lst = [...data.Result]\r\n                    let index = lst.findIndex(obj => obj.AttributeId === firstAttributeId)\r\n                    lst[index].isSelected = true\r\n                    setAttribute(lst)\r\n                }\r\n                else {\r\n                    setAttribute(data.Result)\r\n                    setChildrenAttribute([])\r\n                }\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadChildrenAttribute = (attributeId) => {\r\n        ChildrenAttributeService.getByAttribute(attributeId).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setChildrenAttribute(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <div className=\"row\">\r\n                <div className=\"col-xl-4 col-xxl-3\">\r\n                    <div className=\"card\">\r\n                        <div className=\"card-body\">\r\n                            <h5 className=\"card-title mb-0\">Thuộc tính</h5>\r\n                            {/* Table thuộc tính cha */}\r\n                            <TableAttr\r\n                                onSelect={item => {\r\n                                    let lst = [...attribute]\r\n                                    let prevIndex = lst.findIndex(obj => obj.isSelected)\r\n                                    let nextIndex = lst.findIndex(obj => obj.AttributeId === item.AttributeId)\r\n                                    if (prevIndex !== nextIndex) {\r\n                                        if (prevIndex > -1) {\r\n                                            lst[prevIndex].isSelected = false\r\n                                        }\r\n                                        lst[nextIndex].isSelected = true\r\n                                        loadChildrenAttribute(item.AttributeId)\r\n                                    }\r\n\r\n                                }}\r\n                                onEdit={item => {\r\n                                    AttributeService.getById(item.AttributeId).then(({ data }) => {\r\n                                        if (data.IsSuccess) {\r\n                                            setAttrEditInfo(data.Result)\r\n                                            setIsShowModalAttrEdit(true)\r\n                                        }\r\n                                    })\r\n                                }}\r\n                                onDelete={item => {\r\n                                    Notification.confirmHtml('Bạn có chắc muốn xóa thuộc tính', item.AttributeName, () => {\r\n                                        AttributeService.delete(item.AttributeId).then(({ data }) => {\r\n                                            if (data.IsSuccess) {\r\n                                                loadAttribute()\r\n                                                Notification.success('Xóa thuộc tính thành công')\r\n                                            }\r\n                                        })\r\n                                    })\r\n                                }}\r\n                                data={attribute} />\r\n                            <div className=\"mt-2\">\r\n                                {/* Button thêm mới thuộc tính cha */}\r\n                                <AuthAdminView right=\"attribute_add\">\r\n                                    <IconButton\r\n                                        icon={<IoAddCircleOutline />}\r\n                                        text=\"Thêm mới\"\r\n                                        onClick={() => {\r\n                                            setIsShowModalAttrAdd(true)\r\n                                        }} />\r\n                                </AuthAdminView>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div className=\"col-xl-8 col-xxl-9\">\r\n                    <div className=\"card\">\r\n                        <div className=\"card-body\">\r\n                            <h5 className=\"card-title mb-0\">Giá trị thuộc tính {isShowModalChildAttrAdd}</h5>\r\n                            {/* Table thuộc tính con */}\r\n                            <TableAttrChild\r\n                                onEdit={item => {\r\n                                    ChildrenAttributeService.getByAttribute(item.ChildrenAttributeId).then(({ data }) => {\r\n                                        if (data.IsSuccess) {\r\n                                            setChildAttrEditInfo(data.Result)\r\n                                            setIsShowModalChildAttrEdit(true)\r\n                                        }\r\n                                    })\r\n                                }}\r\n                                onDelete={item => {\r\n                                    Notification.confirmHtml('Bạn có chắc muốn xóa giá trị thuộc tính', item.ChildrenAttributeName, () => {\r\n                                        ChildrenAttributeService.delete(item.ChildrenAttributeId).then(({ data }) => {\r\n                                            if (data.IsSuccess) {\r\n                                                loadChildrenAttribute(item.AttributeId)\r\n                                                Notification.success('Xóa giá trị thuộc tính thành công')\r\n                                            }\r\n                                        })\r\n                                    })\r\n                                }}\r\n                                data={childrenAttribute}\r\n                            />\r\n                            <div className=\"mt-2\">\r\n                                {/* Button thêm mới thuộc tính con */}\r\n                                <AuthAdminView right=\"attribute_add_child\">\r\n                                    <IconButton\r\n                                        icon={<IoAddCircleOutline />}\r\n                                        text=\"Thêm mới\"\r\n                                        onClick={() => {\r\n                                            let selectedAttrIndex = attribute.findIndex(obj => obj.isSelected)\r\n                                            if (selectedAttrIndex > -1) {\r\n                                                let attrId = attribute[selectedAttrIndex].AttributeId\r\n                                                setAttributeId(attrId)\r\n                                            }\r\n                                            setIsShowModalChildAttrAdd(true)\r\n                                        }} />\r\n                                </AuthAdminView>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            {/* Modal thêm mới thuộc tính cha */}\r\n            <ModalAddAttr\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    AttributeService.create(formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            loadAttribute()\r\n                            setIsShowModalAttrAdd(false)\r\n                            Notification.success('Thêm mới thuộc tính thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalAttrAdd(false)\r\n                }}\r\n                isShow={isShowModalAttrAdd}\r\n            />\r\n\r\n            {/* Modal chỉnh sửa thuộc tính cha */}\r\n            <ModalEditAttr\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    AttributeService.update(formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            loadAttribute()\r\n                            setIsShowModalAttrEdit(false)\r\n                            Notification.success('Chỉnh sửa thuộc tính thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalAttrEdit(false)\r\n                }}\r\n                isShow={isShowModalAttrEdit}\r\n                data={attrEditInfo}\r\n            />\r\n\r\n            {/* Modal thêm mới thuộc tính con */}\r\n            <ModalAddAttrChild\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    ChildrenAttributeService.create(formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            loadChildrenAttribute(formData.AttributeId)\r\n                            setIsShowModalChildAttrAdd(false)\r\n                            setAttrEditInfo({})\r\n                            Notification.success('Thêm mới giá trị thuộc tính thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalChildAttrAdd(false)\r\n                    setAttrEditInfo({})\r\n                }}\r\n                isShow={isShowModalChildAttrAdd}\r\n                attrId={attributeId}\r\n            />\r\n\r\n            {/* Modal chỉnh sửa thuộc tính con */}\r\n            <ModalEditAttrChild\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    ChildrenAttributeService.update(formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            loadChildrenAttribute(formData.AttributeId)\r\n                            setIsShowModalChildAttrEdit(false)\r\n                            setChildAttrEditInfo({})\r\n                            Notification.success('Chỉnh sửa giá trị thuộc tính thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setChildAttrEditInfo({})\r\n                    setIsShowModalChildAttrEdit(false)\r\n                }}\r\n                isShow={isShowModalChildAttrEdit}\r\n                data={childAttrEditInfo}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default AttributePage","import React, { useEffect, useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport DatePicker from 'react-datepicker'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\nimport Select from 'react-select'\r\nimport AsyncSelect from 'react-select/async'\r\nimport axios from 'axios'\r\nimport { debounce } from 'lodash'\r\n\r\nconst filters = {\r\n    orderId: '',\r\n    partnerId: 0,\r\n    wayBillCode: '',\r\n    fromDate: '',\r\n    toDate: '',\r\n    statusId: 0,\r\n    orderFromId: 0\r\n}\r\n\r\nconst loadOptions = (inputValue, callback) => {\r\n    const url = `/admin/partner/dropdown-filter?keyword=${inputValue}&pageItem=5&pageIndex=1`\r\n    axios.get(url).then(({ data }) => {\r\n        if (data.IsSuccess) {\r\n            let partnerLst = data.Result.Data.map(item => {\r\n                return {\r\n                    value: item.PartnerId,\r\n                    label: item.FullName + ` (${item.Email})`\r\n                }\r\n            })\r\n            callback(partnerLst)\r\n        }\r\n    })\r\n}\r\n\r\nconst Filter = (props) => {\r\n    const { onSearch, statuses, orderFroms } = props\r\n\r\n    const [orderId, setOrderId] = useState('')\r\n\r\n    const [partner, setPartner] = useState(null)\r\n\r\n    const [wayBillCode, setWayBillCode] = useState('')\r\n\r\n    const [fromDate, setFromDate] = useState()\r\n\r\n    const [toDate, setToDate] = useState()\r\n\r\n    const [statusOptions, setStatusOptions] = useState([])\r\n\r\n    const [status, setStatus] = useState(null)\r\n\r\n    const [orderFromOptions, setOrderFromOptions] = useState([])\r\n\r\n    const [orderFrom, setOrderFrom] = useState(null)\r\n\r\n    useEffect(() => {\r\n        const statusList = statuses.map(item => {\r\n            return {\r\n                value: item.OrderStatusId,\r\n                label: item.OrderStatusName\r\n            }\r\n        })\r\n        setStatusOptions(statusList)\r\n    }, [statuses])\r\n\r\n    useEffect(() => {\r\n        const orderFromList = orderFroms.map(item => {\r\n            return {\r\n                value: item.OrderFromId,\r\n                label: item.OrderFromName\r\n            }\r\n        })\r\n        setOrderFromOptions(orderFromList)\r\n    }, [orderFroms])\r\n\r\n    const handleSearch = () => {\r\n        onSearch(filters)\r\n    }\r\n\r\n    const handleClear = () => {\r\n        setOrderId('')\r\n        filters.orderId = ''\r\n        setPartner(null)\r\n        filters.partnerId = 0\r\n        setWayBillCode('')\r\n        filters.wayBillCode = ''\r\n        setFromDate(null)\r\n        filters.fromDate = ''\r\n        setToDate(null)\r\n        filters.toDate = ''\r\n        setStatus(null)\r\n        filters.statusId = 0\r\n        setOrderFrom(null)\r\n        filters.orderFromId = 0\r\n        onSearch(filters)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <input value={orderId}\r\n                            autoFocus\r\n                            onChange={e => {\r\n                                const value = e.target.value\r\n                                setOrderId(value)\r\n                                filters.orderId = value\r\n                            }}\r\n                            onKeyDown={e => {\r\n                                if (e.key === 'Enter') {\r\n                                    handleSearch()\r\n                                }\r\n                            }}\r\n                            type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"ID đơn hàng\" />\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <input value={wayBillCode}\r\n                            onChange={e => {\r\n                                const value = e.target.value\r\n                                setWayBillCode(value)\r\n                                filters.wayBillCode = value\r\n                            }}\r\n                            onKeyDown={e => {\r\n                                if (e.key === 'Enter') {\r\n                                    handleSearch()\r\n                                }\r\n                            }}\r\n                            type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Mã vận đơn\" />\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-12 col-lg-6 col-xl-6 col-xxl-4\">\r\n                        <AsyncSelect\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            placeholder='Cộng tác viên'\r\n                            cacheOptions\r\n                            defaultOptions\r\n                            isSearchable={true}\r\n                            isClearable={true}\r\n                            value={partner}\r\n                            loadOptions={debounce(loadOptions, 250)}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    filters.partnerId = item.value\r\n                                    setPartner(item)\r\n                                }\r\n                                else {\r\n                                    setPartner(null)\r\n                                    filters.partnerId = 0\r\n                                }\r\n                            }}\r\n                            loadingMessage={() => \"Đang tìm kiếm\"}\r\n                            noOptionsMessage={() => \"Không tìm thấy dữ liệu\"}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n                        <div className=\"input-group flex-nowrap\">\r\n                            <span className=\"input-group-text\">Từ ngày</span>\r\n                            <DatePicker\r\n                                className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n                                placeholderText=\"dd/mm/yyyy\"\r\n                                dateFormat=\"dd/MM/yyyy\"\r\n                                selected={fromDate}\r\n                                onChange={date => {\r\n                                    if (date !== null) {\r\n                                        const day = date.getDate()\r\n                                        const month = date.getMonth() + 1\r\n                                        const year = date.getFullYear()\r\n                                        const strDate = `${day}/${month}/${year}`\r\n                                        filters.fromDate = strDate\r\n                                    }\r\n                                    setFromDate(date)\r\n                                }}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n                        <div className=\"input-group flex-nowrap\">\r\n                            <span className=\"input-group-text\">Đến ngày</span>\r\n                            <DatePicker\r\n                                className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n                                placeholderText=\"dd/mm/yyyy\"\r\n                                dateFormat=\"dd/MM/yyyy\"\r\n                                selected={toDate}\r\n                                onChange={date => {\r\n                                    if (date !== null) {\r\n                                        const day = date.getDate()\r\n                                        const month = date.getMonth() + 1\r\n                                        const year = date.getFullYear()\r\n                                        const strDate = `${day}/${month}/${year}`\r\n                                        filters.toDate = strDate\r\n                                    }\r\n                                    setToDate(date)\r\n                                }}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={false}\r\n                            isClearable={true}\r\n                            options={statusOptions}\r\n                            value={status}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    setStatus(item)\r\n                                    filters.statusId = item.value\r\n                                }\r\n                                else {\r\n                                    setStatus(null)\r\n                                    filters.statusId = 0\r\n                                }\r\n                            }}\r\n                            placeholder='Trạng thái'\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={false}\r\n                            isClearable={true}\r\n                            options={orderFromOptions}\r\n                            value={orderFrom}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    setOrderFrom(item)\r\n                                    filters.orderFromId = item.value\r\n                                }\r\n                                else {\r\n                                    setOrderFrom(null)\r\n                                    filters.orderFromId = 0\r\n                                }\r\n                            }}\r\n                            placeholder='Đơn nguồn'\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-12 col-lg-8 col-xl-8 col-xxl-8\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={handleSearch} />\r\n                            <ClearButton onClick={handleClear} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func,\r\n    statuses: PropTypes.array,\r\n    orderFrom: PropTypes.array\r\n}\r\n\r\nFilter.defaultProps = {\r\n    onSearch: () => { },\r\n    statuses: [],\r\n    orderFroms: []\r\n}\r\n\r\nexport default Filter","import PropTypes from \"prop-types\";\r\nimport React, { Fragment } from \"react\";\r\nimport { FiEdit } from \"react-icons/fi\";\r\nimport {\r\n  IoCloudDownloadOutline,\r\n  IoEllipsisHorizontalSharp,\r\n  IoSwapHorizontalOutline,\r\n  IoTrashOutline,\r\n  IoReloadOutline,\r\n} from \"react-icons/io5\";\r\nimport {\r\n  ActionItem,\r\n  ActionRow,\r\n  AvatarRow,\r\n  EmptyRow,\r\n  FormatNumber,\r\n  LoadingRow,\r\n} from \"./../../../../../components\";\r\n\r\nconst Table = (props) => {\r\n  const {\r\n    data,\r\n    onEdit,\r\n    onDelete,\r\n    onUpdateStatus,\r\n    onDownloadWaybill,\r\n    onAvatarClick,\r\n    onGetWaybill,\r\n    onDownloadAttachWaybill,\r\n  } = props;\r\n\r\n  const renderTable = () => {\r\n    if (data === null) return <LoadingRow colSpan={9} />;\r\n    else if (data.length === 0) return <EmptyRow colSpan={9} />;\r\n    else\r\n      return data.map((item) => {\r\n        const rowSpan = item.Products.length;\r\n        const firstProduct = item.Products[0];\r\n        return (\r\n          <Fragment key={item.OrderId}>\r\n            <tr>\r\n              <td className=\"text-center\" rowSpan={rowSpan}>\r\n                {item.OrderId}\r\n                <br />\r\n                <span className=\"text-success\">{item.CreatedDate}</span>\r\n                <br />\r\n                <small className=\"text-muted\">{item.CreatedTime}</small>\r\n              </td>\r\n              <td rowSpan={rowSpan}>{item.PartnerFullName}</td>\r\n              <td>\r\n                <p className=\"mb-1\">\r\n                  <AvatarRow\r\n                    url={firstProduct.AvatarUrl}\r\n                    onClick={(urlObj) => {\r\n                      onAvatarClick(urlObj);\r\n                    }}\r\n                    className=\"cursor-zoom\"\r\n                  />\r\n                  {firstProduct.ProductName}\r\n                </p>\r\n                <p className=\"mb-0\">\r\n                  <span>\r\n                    Giá:{\" \"}\r\n                    <span className=\"text-danger fw-bold\">\r\n                      <FormatNumber>\r\n                        {firstProduct.CustomerUnitPrice}\r\n                      </FormatNumber>\r\n                    </span>\r\n                  </span>\r\n                  <span className=\"float-end\">\r\n                    Số lượng:{\" \"}\r\n                    <span className=\"text-danger fw-bold\">\r\n                      <FormatNumber>{firstProduct.Quantity}</FormatNumber>\r\n                    </span>\r\n                  </span>\r\n                </p>\r\n              </td>\r\n              <td className=\"text-end text-primary\" rowSpan={rowSpan}>\r\n                <FormatNumber>{item.SumOutputPrice}</FormatNumber>\r\n              </td>\r\n              <td rowSpan={rowSpan}>\r\n                <p className=\"mb-1\">{item.WaybillCode}</p>\r\n                <p className=\"mb-0\">{item.ShippingUnitName}</p>\r\n              </td>\r\n              <td className=\"text-end\" rowSpan={rowSpan}>\r\n                <p className=\"text-primary fw-bold mb-1\">\r\n                  <FormatNumber>{item.SumPartnerPrice}</FormatNumber>\r\n                </p>\r\n                <p className=\"text-success mb-0\">\r\n                  +<FormatNumber>{item.DropshipFee}</FormatNumber>\r\n                </p>\r\n              </td>\r\n              <td className=\"text-center text-primary\" rowSpan={rowSpan}>\r\n                <IoEllipsisHorizontalSharp\r\n                  className=\"cursor-point fs-4\"\r\n                  onClick={() => {\r\n                    props.onEditWarehouseNote(item);\r\n                  }}\r\n                />\r\n              </td>\r\n              <td rowSpan={rowSpan}>{renderStatus(item)}</td>\r\n              <td rowSpan={rowSpan}>\r\n                <ActionRow>\r\n                  {renderDownloadWaybill(item)}\r\n                  {renderUpdateCmd(item)}\r\n                  {renderGetWaybill(item)}\r\n                  {renderDownloadAttachWaybill(item)}\r\n                  <ActionItem\r\n                    right=\"order_edit\"\r\n                    onClick={() => onUpdateStatus(item)}\r\n                    icon={<IoSwapHorizontalOutline />}\r\n                    title=\"Cập nhật trạng thái\"\r\n                  />\r\n                  <ActionItem\r\n                    right=\"order_delete\"\r\n                    onClick={() => onDelete(item)}\r\n                    icon={<IoTrashOutline />}\r\n                    title=\"Xóa\"\r\n                    className=\"text-danger\"\r\n                  />\r\n                </ActionRow>\r\n              </td>\r\n            </tr>\r\n            {renderChildrenProduct(item.Products)}\r\n          </Fragment>\r\n        );\r\n      });\r\n  };\r\n\r\n  const renderDownloadAttachWaybill = (order) => {\r\n    if (order.FileUrl !== \"\")\r\n      return (\r\n        <ActionItem\r\n          right=\"order_waybill_attach_download\"\r\n          onClick={() => onDownloadAttachWaybill(order)}\r\n          icon={<IoCloudDownloadOutline />}\r\n          title=\"Tải vận đơn (đính kèm)\"\r\n        />\r\n      );\r\n  };\r\n\r\n  const renderGetWaybill = (order) => {\r\n    if (order.OrderFromId === 1)\r\n      // Đơn hàng từ shopee\r\n      return (\r\n        <ActionItem\r\n          right=\"order_waybill_get\"\r\n          onClick={() => onGetWaybill(order)}\r\n          icon={<IoReloadOutline />}\r\n          title=\"Tải lại vận đơn\"\r\n        />\r\n      );\r\n  };\r\n\r\n  const renderUpdateCmd = (item) => {\r\n    if (item.OrderStatusId === 1) {\r\n      <ActionItem\r\n        right=\"order_edit\"\r\n        onClick={() => onEdit(item)}\r\n        icon={<FiEdit />}\r\n        title=\"Chỉnh sửa\"\r\n      />;\r\n    }\r\n  };\r\n\r\n  const renderDownloadWaybill = (order) => {\r\n    if (order.WaybillUrl !== null && order.WaybillUrl !== \"\")\r\n      return (\r\n        <ActionItem\r\n          right=\"order_waybill_download\"\r\n          onClick={() => onDownloadWaybill(order)}\r\n          icon={<IoCloudDownloadOutline />}\r\n          title=\"Tải vận đơn\"\r\n        />\r\n      );\r\n  };\r\n\r\n  const renderStatus = (order) => {\r\n    const statusId = order.OrderStatusId;\r\n    const statusName = order.OrderStatusName;\r\n    let className = \"\";\r\n    if (statusId !== 5) {\r\n      className =\r\n        statusId === 1\r\n          ? \"badge bg-success min-w-50-px cursor-point\"\r\n          : \"badge bg-danger min-w-50-px cursor-point\";\r\n    } else {\r\n      className =\r\n        statusId === 1\r\n          ? \"badge bg-success min-w-50-px\"\r\n          : \"badge bg-danger min-w-50-px\";\r\n    }\r\n    return (\r\n      <span className={className} onClick={() => handleChangeStatus(order)}>\r\n        {statusName}\r\n      </span>\r\n    );\r\n  };\r\n\r\n  const handleChangeStatus = (order) => {\r\n    if (order.OrderStatusId !== 5) {\r\n      onUpdateStatus(order);\r\n    }\r\n  };\r\n\r\n  const renderChildrenProduct = (products) => {\r\n    const html = [];\r\n    const productLength = products.length;\r\n    for (let i = 1; i < productLength; i++) {\r\n      const product = products[i];\r\n      html.push(\r\n        <tr key={product.ProductId}>\r\n          <td>\r\n            <p className=\"mb-1\">\r\n              <AvatarRow\r\n                url={product.AvatarUrl}\r\n                onClick={(urlObj) => {\r\n                  onAvatarClick(urlObj);\r\n                }}\r\n                className=\"cursor-zoom\"\r\n              />\r\n              {product.ProductName}\r\n            </p>\r\n            <p className=\"mb-0\">\r\n              <span>\r\n                Giá:{\" \"}\r\n                <span className=\"text-danger fw-bold\">\r\n                  <FormatNumber>{product.CustomerUnitPrice}</FormatNumber>\r\n                </span>\r\n              </span>\r\n              <span className=\"float-end\">\r\n                Số lượng:{\" \"}\r\n                <span className=\"text-danger fw-bold\">\r\n                  <FormatNumber>{product.Quantity}</FormatNumber>\r\n                </span>\r\n              </span>\r\n            </p>\r\n          </td>\r\n        </tr>\r\n      );\r\n    }\r\n    return html;\r\n  };\r\n\r\n  return (\r\n    <div className=\"table-responsive\">\r\n      <table className=\"table table-centered table-avatar mb-0\">\r\n        <thead>\r\n          <tr>\r\n            <th>ID</th>\r\n            <th>CTV</th>\r\n            <th>Tên sản phẩm</th>\r\n            <th className=\"text-end\">Tổng</th>\r\n            <th>Vận chuyển</th>\r\n            <th className=\"text-end\">Thu CTV</th>\r\n            <th>Ghi chú</th>\r\n            <th>Trạng thái</th>\r\n            <th className=\"w-52-px\"></th>\r\n          </tr>\r\n        </thead>\r\n        <tbody>{renderTable()}</tbody>\r\n      </table>\r\n    </div>\r\n  );\r\n};\r\n\r\nTable.propTypes = {\r\n  data: PropTypes.array,\r\n  onEdit: PropTypes.func,\r\n  onDelete: PropTypes.func,\r\n  onUpdateStatus: PropTypes.func,\r\n  onEditWarehouseNote: PropTypes.func,\r\n  onDownloadWaybill: PropTypes.func,\r\n  onAvatarClick: PropTypes.func,\r\n  onGetWaybill: PropTypes.func,\r\n  onDownloadAttachWaybill: PropTypes.func,\r\n};\r\n\r\nTable.defaultProps = {\r\n  data: [],\r\n  onEdit: () => {},\r\n  onDelete: () => {},\r\n  onUpdateStatus: () => {},\r\n  onEditWarehouseNote: () => {},\r\n  onDownloadWaybill: () => {},\r\n  onAvatarClick: () => {},\r\n  onGetWaybill: () => {},\r\n  onDownloadAttachWaybill: () => {},\r\n};\r\n\r\nexport default Table;\r\n","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, InputSelect, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    orderId: yup.number(),\r\n    statusId: yup.number()\r\n})\r\n\r\nconst ModalUpdateStatus = (props) => {\r\n    const { setValue, control, handleSubmit, reset } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [orderStatuses, setOrderStatuses] = useState([])\r\n\r\n    useEffect(() => {\r\n        const statusList = props.statuses.map(item => {\r\n            return {\r\n                value: item.OrderStatusId,\r\n                label: item.OrderStatusName\r\n            }\r\n        })\r\n        setOrderStatuses(statusList)\r\n    }, [props.statuses])\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                setValue('orderId', props.orderId)\r\n                setValue('statusId', props.statusId)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Sửa trạng thái đơn hàng</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <Controller\r\n                        name=\"statusId\"\r\n                        control={control}\r\n                        render={({ field: { onChange, value } }) => {\r\n                            return (\r\n                                <InputSelect\r\n                                    isVertical={true}\r\n                                    options={orderStatuses}\r\n                                    value={value}\r\n                                    defaultValue={value}\r\n                                    name='order-status'\r\n                                    variant='success'\r\n                                    onChange={onChange}\r\n                                />\r\n                            )\r\n                        }}\r\n                    />\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalUpdateStatus.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    statuses: PropTypes.array,\r\n    statusId: PropTypes.number,\r\n    orderId: PropTypes.number,\r\n    isShow: PropTypes.bool\r\n}\r\n\r\nModalUpdateStatus.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    statuses: [],\r\n    statusId: 0,\r\n    orderId: 0,\r\n    isShow: false\r\n}\r\n\r\nexport default ModalUpdateStatus","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    OrderId: yup.number(),\r\n    WarehouseNote: yup.string().max(1_000, 'Ghi chú gửi kho quá dài')\r\n})\r\n\r\nconst ModalEditWarehouseNote = (props) => {\r\n    const { setValue, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [isEnableEdit, setIsEnableEdit] = useState(true)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"lg\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                const data = props.data\r\n                if (data !== null) {\r\n                    setValue('OrderId', data.OrderId)\r\n                    setValue('WarehouseNote', data.WarehouseNote)\r\n                    setIsEnableEdit(data.OrderStatusId === 1) // Chỉ cho phép sửa ghi chú gửi kho đơn hàng mới\r\n                }\r\n            }\r\n            }>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa ghi chú gửi kho</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Ghi chú gửi kho</label>\r\n                        <textarea {...register('WarehouseNote')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú gửi kho\" disabled={!isEnableEdit}></textarea>\r\n                        {errors.WarehouseNote && <div className=\"validation-message\">{errors.WarehouseNote.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    {isEnableEdit ? <SaveButton isBusy={isBusy} /> : ''}\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEditWarehouseNote.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    data: PropTypes.object\r\n}\r\n\r\nModalEditWarehouseNote.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    data: {}\r\n}\r\n\r\nexport default ModalEditWarehouseNote","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport { IoTrashOutline } from 'react-icons/io5'\r\nimport NumberFormat from 'react-number-format'\r\nimport * as yup from \"yup\"\r\nimport {\r\n    AvatarRow, CloseButton, Config, CustomSelect, EmptyRow,\r\n    FormatNumber, InputSelect, LoadingRow, Notification, SaveButton\r\n} from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    OrderId: yup.number(),\r\n    CustomerName: yup.string().max(100, 'Tên người nhận quá dài'),\r\n    CustomerPhone: yup.string().max(20, 'Số điện thoại quá dài'),\r\n    CustomerAddress: yup.string().max(200, 'Địa chỉ quá dài'),\r\n    CustomerWardId: yup.number().nullable(),\r\n    WarehouseNote: yup.string().max(1_000, 'Ghi chú gửi kho quá dài'),\r\n    ShippingUnitId: yup.number().required('Vui lòng chọn đơn vị giao hàng'),\r\n    WaybillCode: yup.string().required('Vui lòng nhập mã đơn hàng').max(50, 'Mã đơn hàng quá dài'),\r\n    ShippingWeight: yup.number().max(2_000_000_000, 'Trọng lượng quá lớn'),\r\n    ShippingMethodId: yup.number().required('Vui lòng chọn phương thức vận chuyển'),\r\n    ShippingFeeTypeId: yup.number().required('Vui lòng chọn phí vận chuyển'),\r\n    ShippingFeeAmount: yup.number().max(2_000_000_000, 'Phí vận chuyển quá lớn'),\r\n    ShippingNote: yup.string().max(1_000, 'Ghi chú vận chuyển quá dài'),\r\n    OrderTypeId: yup.number().required('Vui lòng chọn loại đơn hàng'),\r\n    Products: yup.array()\r\n})\r\n\r\nconst orderTypes = Config.orderTypes\r\n\r\nconst shippingTypes = Config.shippingTypes\r\n\r\nfunction ModalEdit(props) {\r\n    const { setValue, control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema),\r\n        defaultValues: {\r\n            ShippingNote: '',\r\n            OrderTypeId: 1,\r\n            ShippingFeeTypeId: 1,\r\n            ShippingFeeAmount: 0,\r\n            ShippingWeight: 0\r\n        }\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [provinces, setProvinces] = useState([])\r\n\r\n    const [provinceId, setProvinceId] = useState(0)\r\n\r\n    const [districts, setDistricts] = useState([])\r\n\r\n    const [districtId, setDistrictId] = useState(0)\r\n\r\n    const [wards, setWards] = useState([])\r\n\r\n    const [shippingUnits, setShippingUnits] = useState([])\r\n\r\n    const [shippingMethods, setShippingMethods] = useState([])\r\n\r\n    const [tienHang, setTienHang] = useState()\r\n\r\n    useEffect(() => {\r\n        const provinceArray = props.provinces.map(item => {\r\n            return {\r\n                value: item.ProvinceId,\r\n                label: `${item.Prefix} ${item.ProvinceName}`\r\n            }\r\n        })\r\n        setProvinces(provinceArray)\r\n    }, [props.provinces])\r\n\r\n    useEffect(() => {\r\n        const districtArray = props.districts.map(item => {\r\n            return {\r\n                value: item.DistrictId,\r\n                label: `${item.Prefix} ${item.DistrictName}`\r\n            }\r\n        })\r\n        setDistricts(districtArray)\r\n    }, [props.districts])\r\n\r\n    useEffect(() => {\r\n        const wardArray = props.wards.map(item => {\r\n            return {\r\n                value: item.WardId,\r\n                label: `${item.Prefix} ${item.WardName}`\r\n            }\r\n        })\r\n        setWards(wardArray)\r\n    }, [props.wards])\r\n\r\n    useEffect(() => {\r\n        const shippingUnitArray = props.shippingUnits.map(item => {\r\n            return {\r\n                value: item.ShippingUnitId,\r\n                label: item.ShippingUnitName\r\n            }\r\n        })\r\n        setShippingUnits(shippingUnitArray)\r\n    }, [props.shippingUnits])\r\n\r\n    useEffect(() => {\r\n        const shippingMethodArray = props.shippingMethods.map(item => {\r\n            return {\r\n                value: item.ShippingMethodId,\r\n                label: item.ShippingMethodName\r\n            }\r\n        })\r\n        setShippingMethods(shippingMethodArray)\r\n    }, [props.shippingMethods])\r\n\r\n    const renderProduct = () => {\r\n        const products = props.detail.Products\r\n        if (products === null || products === undefined) return <LoadingRow colSpan={6} />\r\n        else if (products.length === 0) return <EmptyRow colSpan={6} />\r\n        else return products.map((item, index) => <tr key={item.ProductId}>\r\n            <td className=\"text-center\">{index + 1}</td>\r\n            <td>\r\n                <AvatarRow\r\n                    url={item.AvatarUrl}\r\n                />\r\n                {item.ProductName}\r\n            </td>\r\n            <td className=\"text-end text-primary\">{item.Quantity}</td>\r\n            <td className=\"text-end text-primary\">\r\n                <FormatNumber>\r\n                    {item.PartnerUnitPrice}\r\n                </FormatNumber>\r\n            </td>\r\n            <td className=\"text-end text-primary\">\r\n                <FormatNumber>\r\n                    {item.TotalAmount}\r\n                </FormatNumber>\r\n            </td>\r\n            <td className=\"text-end text-danger\">\r\n                <IoTrashOutline className=\"cursor-point\" onClick={() => props.removeProduct(item.ProductId)} />\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    useEffect(() => {\r\n        const products = props.detail.Products\r\n        if (products !== undefined && products !== null) {\r\n            const tien_hang = products.reduce((prev, current) => prev + current.TotalAmount, 0)\r\n            setTienHang(tien_hang)\r\n\r\n            const formProducts = products.map(item => {\r\n                return {\r\n                    ProductId: item.ProductId,\r\n                    Quantity: item.Quantity\r\n                }\r\n            })\r\n            setValue('Products', formProducts)\r\n        }\r\n\r\n        // eslint-disable-next-line\r\n    }, [props.detail.Products])\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                const detail = props.detail\r\n                setValue('OrderId', detail.OrderId)\r\n                setValue('CustomerName', detail.ReceiverName)\r\n                setValue('CustomerPhone', detail.CustomerPhone)\r\n                setValue('CustomerAddress', detail.CustomerAddress)\r\n                setValue('CustomerWardId', detail.CustomerWardId)\r\n                setValue('WarehouseNote', detail.WarehouseNote)\r\n                setValue('ShippingUnitId', detail.ShippingUnitId)\r\n                setValue('WaybillCode', detail.WaybillCode)\r\n                setValue('ShippingWeight', detail.WeightInGram)\r\n                setValue('ShippingMethodId', detail.ShippingMethodId)\r\n                setValue('ShippingFeeTypeId', detail.ShippingFeeTypeId)\r\n                setValue('ShippingFeeAmount', detail.ShippingFree)\r\n                setValue('ShippingNote', detail.ShippingNote)\r\n                setValue('OrderTypeId', detail.OrderTypeId)\r\n                setProvinceId(detail.CustomerProvinceId)\r\n                setDistrictId(detail.CustomerDistrictId)\r\n                setValue('CustomerWardId', detail.CustomerWardId)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Đặt hàng</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                if (props.detail.Products.length === 0) {\r\n                    Notification.warning('Vui lòng chọn sản phẩm trước khi đặt hàng')\r\n                    return\r\n                }\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"card border-primary border\">\r\n                        <div className=\"card-body\">\r\n                            <h5 className=\"card-title text-primary\">Thông tin khách hàng</h5>\r\n                            <div className=\"row\">\r\n                                <div className=\"col-md-3\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Người nhận</label>\r\n                                        <input {...register('CustomerName')} type=\"text\" className=\"form-control\" placeholder=\"Người nhận\" />\r\n                                        {errors.CustomerName && <div className=\"validation-message\">{errors.CustomerName.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-3\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Điện thoại</label>\r\n                                        <input {...register('CustomerPhone')} type=\"text\" className=\"form-control\" placeholder=\"Điện thoại\" />\r\n                                        {errors.CustomerPhone && <div className=\"validation-message\">{errors.CustomerPhone.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Địa chỉ</label>\r\n                                        <input {...register('CustomerAddress')} type=\"text\" className=\"form-control\" placeholder=\"Địa chỉ\" />\r\n                                        {errors.CustomerAddress && <div className=\"validation-message\">{errors.CustomerAddress.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-4\">\r\n                                    <div className=\"relative-position\">\r\n                                        <label className=\"form-label\">Tỉnh/Tp</label>\r\n                                        <CustomSelect\r\n                                            options={provinces}\r\n                                            isSearchable={true}\r\n                                            isClearable={true}\r\n                                            value={provinceId}\r\n                                            onChange={val => {\r\n                                                setProvinceId(val)\r\n                                                setDistrictId(null)\r\n                                                setValue('CustomerWardId', null)\r\n                                                props.onProvinceChange(val)\r\n                                            }}\r\n                                            placeholder='Tỉnh/Tp'\r\n                                            noOptionsMessage='Tỉnh/Tp'\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-4\">\r\n                                    <div className=\"relative-position\">\r\n                                        <label className=\"form-label\">Quận/Huyện</label>\r\n                                        <CustomSelect\r\n                                            options={districts}\r\n                                            isSearchable={true}\r\n                                            isClearable={false}\r\n                                            value={districtId}\r\n                                            onChange={val => {\r\n                                                setDistrictId(val)\r\n                                                setValue('CustomerWardId', null)\r\n                                                props.onDistrictChange(val)\r\n                                            }}\r\n                                            placeholder='Quận/Huyện'\r\n                                            noOptionsMessage='Quận/Huyện'\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-4\">\r\n                                    <div className=\"relative-position\">\r\n                                        <label className=\"form-label\">Phường/Xã</label>\r\n                                        <Controller\r\n                                            control={control}\r\n                                            name=\"CustomerWardId\"\r\n                                            render={({\r\n                                                field: { onChange, value }\r\n                                            }) => (\r\n                                                <CustomSelect\r\n                                                    options={wards}\r\n                                                    isSearchable={true}\r\n                                                    isClearable={false}\r\n                                                    value={value}\r\n                                                    onChange={onChange}\r\n                                                    placeholder='Phường/Xã'\r\n                                                    noOptionsMessage='noOptionsMessage'\r\n                                                />\r\n                                            )}\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"card border-primary border\">\r\n                        <div className=\"card-body\">\r\n                            <h5 className=\"card-title text-primary\">Danh sách sản phẩm</h5>\r\n                            <div className=\"relative-position\">\r\n                                <div className=\"table-responsive\">\r\n                                    <table className=\"table table-centered table-avatar mb-2\">\r\n                                        <thead>\r\n                                            <tr>\r\n                                                <th className=\"w-52-px\">#</th>\r\n                                                <th>Tên sản phẩm</th>\r\n                                                <th>Số lượng</th>\r\n                                                <th>Giá CTV</th>\r\n                                                <th>Thành tiền</th>\r\n                                                <th className=\"w-52-px\"></th>\r\n                                            </tr>\r\n                                        </thead>\r\n                                        <tbody>\r\n                                            {renderProduct()}\r\n                                            <tr>\r\n                                                <td colSpan={4} className=\"text-end fw-bold\">Tổng thành tiền</td>\r\n                                                <td className=\"text-end text-primary\">\r\n                                                    <FormatNumber>\r\n                                                        {tienHang}\r\n                                                    </FormatNumber>\r\n                                                </td>\r\n                                                <td></td>\r\n                                            </tr>\r\n                                        </tbody>\r\n                                    </table>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Cộng tác viên thanh toán với kho</label>\r\n                                <div className=\"table-responsive\">\r\n                                    <table className=\"table table-centered\">\r\n                                        <tbody>\r\n                                            <tr>\r\n                                                <td className=\"text-end w-50-pc\">Tiền hàng</td>\r\n                                                <td className=\"text-primary\">\r\n                                                    <FormatNumber>\r\n                                                        {tienHang}\r\n                                                    </FormatNumber>\r\n                                                </td>\r\n                                            </tr>\r\n                                            <tr>\r\n                                                <td className=\"text-end\">Phí dropship</td>\r\n                                                <td className=\"text-primary\">\r\n                                                    <FormatNumber>\r\n                                                        {props.detail.DropshipFee}\r\n                                                    </FormatNumber>\r\n                                                </td>\r\n                                            </tr>\r\n                                            <tr>\r\n                                                <td className=\"text-end fw-bold\">Cộng tác viên thanh toán</td>\r\n                                                <td className=\"text-primary\">\r\n                                                    <FormatNumber>\r\n                                                        {props.detail.DropshipFee + tienHang}\r\n                                                    </FormatNumber>\r\n                                                </td>\r\n                                            </tr>\r\n                                        </tbody>\r\n                                    </table>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Ghi chú gửi kho</label>\r\n                                <textarea {...register('WarehouseNote')} rows=\"2\" className=\"form-control\" placeholder=\"Ghi chú gửi kho\"></textarea>\r\n                                {errors.WarehouseNote && <div className=\"validation-message\">{errors.WarehouseNote.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"card border-primary border mb-0\">\r\n                        <div className=\"card-body\">\r\n                            <h5 className=\"card-title text-primary mb-2\">Vận chuyển</h5>\r\n                            <div className=\"row\">\r\n                                <div className=\"col-md-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Đơn vị giao hàng <span className=\"text-danger\">*</span></label>\r\n                                        <Controller\r\n                                            control={control}\r\n                                            name=\"ShippingUnitId\"\r\n                                            render={({\r\n                                                field: { onChange, value }\r\n                                            }) => (\r\n                                                <CustomSelect\r\n                                                    options={shippingUnits}\r\n                                                    isSearchable={false}\r\n                                                    isClearable={false}\r\n                                                    value={value}\r\n                                                    onChange={onChange}\r\n                                                    placeholder=\"Đơn vị giao hàng\"\r\n                                                    noOptionsMessage=\"Đơn vị giao hàng\"\r\n                                                />\r\n                                            )}\r\n                                        />\r\n                                        {errors.ShippingUnitId && <div className=\"validation-message\">{errors.ShippingUnitId.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-3\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Mã vận đơn <span className=\"text-danger\">*</span></label>\r\n                                        <input {...register('WaybillCode')} type=\"text\" className=\"form-control\" placeholder=\"Mã vận đơn\" />\r\n                                        {errors.WaybillCode && <div className=\"validation-message\">{errors.WaybillCode.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-3\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Trọng lượng</label>\r\n                                        <div className=\"input-group\">\r\n                                            <Controller\r\n                                                control={control}\r\n                                                name=\"ShippingWeight\"\r\n                                                render={({\r\n                                                    field: { onChange, value }\r\n                                                }) => (\r\n                                                    <NumberFormat\r\n                                                        placeholder='Trọng lượng'\r\n                                                        className=\"form-control\"\r\n                                                        // thousandSeparator={\".\"}\r\n                                                        // decimalSeparator={\",\"}\r\n                                                        allowNegative={false}\r\n                                                        defaultValue={0}\r\n                                                        decimalScale={0}\r\n                                                        value={value}\r\n                                                        onValueChange={val => onChange(val.value)}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                            <span className=\"input-group-text\">Gram</span>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-5\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Loại đơn <span className=\"text-danger\">*</span></label>\r\n                                        <Controller\r\n                                            control={control}\r\n                                            name=\"OrderTypeId\"\r\n                                            render={({\r\n                                                field: { onChange, value }\r\n                                            }) => (\r\n                                                <InputSelect\r\n                                                    options={orderTypes}\r\n                                                    value={value}\r\n                                                    defaultValue={1}\r\n                                                    name='order-type'\r\n                                                    variant='success'\r\n                                                    onChange={onChange}\r\n                                                />\r\n                                            )}\r\n                                        />\r\n                                        {errors.OrderTypeId && <div className=\"validation-message\">{errors.OrderTypeId.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-7\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Phương thức vận chuyển <span className=\"text-danger\">*</span></label>\r\n                                        <Controller\r\n                                            control={control}\r\n                                            name=\"ShippingMethodId\"\r\n                                            render={({\r\n                                                field: { onChange, value }\r\n                                            }) => (\r\n                                                <CustomSelect\r\n                                                    options={shippingMethods}\r\n                                                    isSearchable={false}\r\n                                                    isClearable={false}\r\n                                                    value={value}\r\n                                                    onChange={onChange}\r\n                                                    placeholder=\"Phương thức vận chuyển\"\r\n                                                    noOptionsMessage=\"Phương thức vận chuyển\"\r\n                                                />\r\n                                            )}\r\n                                        />\r\n                                        {errors.ShippingMethodId && <div className=\"validation-message\">{errors.ShippingMethodId.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-8\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Loại phí vận chuyển <span className=\"text-danger\">*</span></label>\r\n                                        <Controller\r\n                                            control={control}\r\n                                            name=\"ShippingFeeTypeId\"\r\n                                            render={({\r\n                                                field: { onChange, value }\r\n                                            }) => (\r\n                                                <InputSelect\r\n                                                    options={shippingTypes}\r\n                                                    value={value}\r\n                                                    defaultValue={1}\r\n                                                    name='shipping-fee-type'\r\n                                                    variant='success'\r\n                                                    onChange={onChange}\r\n                                                />\r\n                                            )}\r\n                                        />\r\n                                        {errors.ShippingFeeTypeObj && <div className=\"validation-message\">{errors.ShippingFeeTypeObj.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-4\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Phí vận chuyển thỏa thuận</label>\r\n                                        <div className=\"input-group\">\r\n                                            <Controller\r\n                                                control={control}\r\n                                                name=\"ShippingFeeAmount\"\r\n                                                render={({\r\n                                                    field: { onChange, value }\r\n                                                }) => (\r\n                                                    <NumberFormat\r\n                                                        placeholder='Phí vận chuyển thỏa thuận'\r\n                                                        className=\"form-control\"\r\n                                                        // thousandSeparator={\".\"}\r\n                                                        // decimalSeparator={\",\"}\r\n                                                        allowNegative={false}\r\n                                                        defaultValue={0}\r\n                                                        decimalScale={0}\r\n                                                        value={value}\r\n                                                        onValueChange={val => onChange(val.value)}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                            <span className=\"input-group-text\">VNĐ</span>\r\n                                        </div>\r\n                                        {errors.ShippingFeeAmount && <div className=\"validation-message\">{errors.ShippingFeeAmount.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Ghi chú vận chuyển</label>\r\n                                <textarea {...register('ShippingNote')} rows=\"2\" className=\"form-control\" placeholder=\"Ghi chú vận chuyển\"></textarea>\r\n                                {errors.ShippingNote && <div className=\"validation-message\">{errors.ShippingNote.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n    isShow: PropTypes.bool,\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    provinces: PropTypes.array,\r\n    onProvinceChange: PropTypes.func,\r\n    districts: PropTypes.array,\r\n    onDistrictChange: PropTypes.func,\r\n    wards: PropTypes.array,\r\n    shippingUnits: PropTypes.array,\r\n    shippingMethods: PropTypes.array,\r\n    detail: PropTypes.object,\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n    isShow: false,\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    provinces: [],\r\n    onProvinceChange: () => { },\r\n    districts: [],\r\n    onDistrictChange: () => { },\r\n    wards: [],\r\n    shippingUnits: [],\r\n    shippingMethods: [],\r\n    detail: {}\r\n}\r\n\r\nexport default ModalEdit","import axios from \"axios\";\r\nimport React, { Fragment, useEffect, useState } from \"react\";\r\nimport {\r\n  Filter,\r\n  Table,\r\n  ModalUpdateStatus,\r\n  ModalEditWarehouseNote,\r\n  ModalEdit,\r\n} from \"./components\";\r\nimport { Pagination, Notification } from \"./../../../components\";\r\nimport ImageViewer from \"react-simple-image-viewer\";\r\n\r\nconst downloadFile = (data, fileName) => {\r\n  const downloadUrl = window.URL.createObjectURL(new Blob([data]));\r\n  const link = document.createElement(\"a\");\r\n  link.href = downloadUrl;\r\n  link.setAttribute(\"download\", fileName);\r\n  document.body.appendChild(link);\r\n  link.click();\r\n  link.remove();\r\n};\r\n\r\nconst OrderPage = () => {\r\n  const [orderStatuses, setOrderStatuses] = useState([]);\r\n\r\n  const [orderFroms, setOrderFroms] = useState([]);\r\n\r\n  const [filters, setFilters] = useState({\r\n    orderId: \"\",\r\n    partnerId: 0,\r\n    wayBillCode: \"\",\r\n    fromDate: \"\",\r\n    toDate: \"\",\r\n    statusId: 0,\r\n    orderFromId: 0,\r\n    pageItem: 10,\r\n    pageIndex: 1,\r\n  });\r\n\r\n  const [pagination, setPagination] = useState({\r\n    totalRow: 0,\r\n    totalPage: 0,\r\n    pageIndex: 1,\r\n  });\r\n\r\n  const [orders, setOrders] = useState(null);\r\n\r\n  const [modalStatus, setModalStatus] = useState({\r\n    isShow: false,\r\n    statusId: 0,\r\n    orderId: 0,\r\n  });\r\n\r\n  const [modalEditWarehouseNote, setModalEditWarehouseNote] = useState({\r\n    isShow: false,\r\n    data: {},\r\n  });\r\n\r\n  const [modalOrderEditInfo, setModalOrderEditInfo] = useState({\r\n    isShow: false,\r\n    detail: {},\r\n  });\r\n\r\n  const [isShowViewer, setIsShowViewer] = useState(false);\r\n\r\n  const [viewerList, setViewerList] = useState([]);\r\n\r\n  useEffect(() => {\r\n    let url = `/admin/order/filter?orderId=${filters.orderId}&partnerId=${filters.partnerId}&waybillCode=${filters.wayBillCode}`;\r\n    url += `&fromDate=${filters.fromDate}&toDate=${filters.toDate}&orderStatusId=${filters.statusId}`;\r\n    url += `&paymentStatusId=0&orderFromId=${filters.orderFromId}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`;\r\n    axios.get(url).then(({ data }) => {\r\n      if (data.IsSuccess) {\r\n        const newPagination = {\r\n          totalRow: data.Result.TotalRow,\r\n          totalPage: data.Result.TotalPage,\r\n          pageIndex: data.Result.PageIndex,\r\n        };\r\n        setPagination(newPagination);\r\n        setOrders(data.Result.Data);\r\n      }\r\n    });\r\n  }, [filters]);\r\n\r\n  useEffect(() => {\r\n    document.getElementById(\"page-header\").innerText = \"Đơn hàng\";\r\n\r\n    loadOrderStatus();\r\n    loadOrderFrom();\r\n\r\n    loadShippingUnit();\r\n    loadProvince();\r\n    loadShippingMethod();\r\n  }, []);\r\n\r\n  const loadOrderStatus = () => {\r\n    const url = \"/admin/order-status/get-dropdown\";\r\n    axios.get(url).then(({ data }) => {\r\n      if (data.IsSuccess) {\r\n        setOrderStatuses(data.Result);\r\n      }\r\n    });\r\n  };\r\n\r\n  const loadOrderFrom = () => {\r\n    const url = \"/admin/order-from/get-dropdown\";\r\n    axios.get(url).then(({ data }) => {\r\n      if (data.IsSuccess) {\r\n        setOrderFroms(data.Result);\r\n      }\r\n    });\r\n  };\r\n\r\n  const [provinceList, setProvinceList] = useState([]);\r\n\r\n  const [districtList, setDistrictList] = useState([]);\r\n\r\n  const [wardList, setWardList] = useState([]);\r\n\r\n  const [shippingUnits, setShippingUnits] = useState([]);\r\n\r\n  const [shippingMethods, setShippingMethods] = useState([]);\r\n\r\n  const loadProvince = () => {\r\n    const url = \"/admin/province/get-all\";\r\n    axios.get(url).then(({ data }) => {\r\n      if (data.IsSuccess) {\r\n        setProvinceList(data.Result);\r\n      }\r\n    });\r\n  };\r\n\r\n  const loadDistrict = (provinceId) => {\r\n    const url = `/admin/province/${provinceId}/districts`;\r\n    axios.get(url).then(({ data }) => {\r\n      if (data.IsSuccess) {\r\n        setDistrictList(data.Result);\r\n      }\r\n    });\r\n  };\r\n\r\n  const loadWard = (wardId) => {\r\n    const url = `/admin/district/${wardId}/wards`;\r\n    axios.get(url).then(({ data }) => {\r\n      if (data.IsSuccess) {\r\n        setWardList(data.Result);\r\n      }\r\n    });\r\n  };\r\n\r\n  const loadShippingUnit = () => {\r\n    const url = \"/admin/shipping-unit/get-dropdown\";\r\n    axios.get(url).then(({ data }) => {\r\n      if (data.IsSuccess) {\r\n        setShippingUnits(data.Result);\r\n      }\r\n    });\r\n  };\r\n\r\n  const loadShippingMethod = () => {\r\n    const url = \"/admin/shipping-method/get-dropdown\";\r\n    axios.get(url).then(({ data }) => {\r\n      if (data.IsSuccess) {\r\n        setShippingMethods(data.Result);\r\n      }\r\n    });\r\n  };\r\n\r\n  const reloadOrder = () => {\r\n    setFilters({\r\n      ...filters,\r\n      pageIndex: 1,\r\n    });\r\n  };\r\n\r\n  return (\r\n    <Fragment>\r\n      <Filter\r\n        onSearch={(params) => {\r\n          const newFilters = {\r\n            ...filters,\r\n            ...params,\r\n            pageIndex: 1,\r\n          };\r\n          setFilters(newFilters);\r\n        }}\r\n        statuses={orderStatuses}\r\n        orderFroms={orderFroms}\r\n      />\r\n      <div className=\"card\">\r\n        <div className=\"card-body\">\r\n          <Table\r\n            data={orders}\r\n            onDownloadWaybill={(order) => {\r\n              const url = `/admin/order/download-waybill?orderId=${order.OrderId}`;\r\n              axios.get(url, { responseType: \"blob\" }).then(({ data }) => {\r\n                const fileName = `${order.ShopeeOrderSn}.pdf`;\r\n                downloadFile(data, fileName);\r\n              });\r\n            }}\r\n            onEdit={(order) => {\r\n              const url = `/admin/order/detail?orderId=${order.OrderId}`;\r\n              axios.get(url).then(({ data }) => {\r\n                if (data.IsSuccess) {\r\n                  const districts = data.Result.Districts;\r\n                  setDistrictList(districts);\r\n                  const wards = data.Result.Wards;\r\n                  setWardList(wards);\r\n                  setModalOrderEditInfo({\r\n                    isShow: true,\r\n                    detail: data.Result,\r\n                  });\r\n                }\r\n              });\r\n            }}\r\n            onEditWarehouseNote={(order) => {\r\n              const url = `/admin/order/get-warehouse-note?id=${order.OrderId}`;\r\n              axios.get(url).then(({ data }) => {\r\n                if (data.IsSuccess) {\r\n                  setModalEditWarehouseNote({\r\n                    isShow: true,\r\n                    data: data.Result,\r\n                  });\r\n                }\r\n              });\r\n            }}\r\n            onDelete={(order) => {\r\n              Notification.confirmHtml(\r\n                \"Bạn có chắc muốn xóa đơn hàng\",\r\n                order.OrderId,\r\n                () => {\r\n                  const url = `/admin/order/delete?id=${order.OrderId}`;\r\n                  axios.post(url).then(({ data }) => {\r\n                    if (data.IsSuccess) {\r\n                      reloadOrder();\r\n                      Notification.success(\"Xóa đơn hàng thành công\");\r\n                    }\r\n                  });\r\n                }\r\n              );\r\n            }}\r\n            onUpdateStatus={(order) => {\r\n              setModalStatus({\r\n                isShow: true,\r\n                statusId: order.OrderStatusId,\r\n                orderId: order.OrderId,\r\n              });\r\n            }}\r\n            onAvatarClick={(urlObj) => {\r\n              setIsShowViewer(true);\r\n              setViewerList([urlObj.fullUrl]);\r\n            }}\r\n            onGetWaybill={(order) => {\r\n              const url = `/admin/order/get-waybill?orderId=${order.OrderId}`;\r\n              axios.post(url).then(({ data }) => {\r\n                if (data.IsSuccess) {\r\n                  Notification.success(\"Tải lại vận đơn thành công\");\r\n                }\r\n              });\r\n            }}\r\n            onDownloadAttachWaybill={(order) => {\r\n              const url = `${window.apiUrl}${order.FileUrl}`;\r\n              window.open(url);\r\n            }}\r\n          />\r\n          <Pagination\r\n            totalPage={pagination.totalPage}\r\n            currentPage={pagination.pageIndex}\r\n            onPageChange={(pIndex) => {\r\n              const newPagination = { ...pagination, pageIndex: pIndex };\r\n              setPagination(newPagination);\r\n              const newFilters = {\r\n                ...filters,\r\n                pageIndex: pIndex,\r\n              };\r\n              setFilters(newFilters);\r\n            }}\r\n          />\r\n        </div>\r\n      </div>\r\n      <ModalUpdateStatus\r\n        onSave={(formData, setIsBusy) => {\r\n          setIsBusy(true);\r\n          const url = `/admin/order/update-status?orderId=${formData.orderId}&statusId=${formData.statusId}`;\r\n          axios.post(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n              const orderList = [...orders];\r\n              const index = orderList.findIndex(\r\n                (n) => n.OrderId === formData.orderId\r\n              );\r\n              orderList[index].OrderStatusId = formData.statusId;\r\n              orderList[index].OrderStatusName = data.Result.OrderStatusName;\r\n              setOrders(orderList);\r\n              setModalStatus({\r\n                isShow: false,\r\n                statusId: 0,\r\n                orderId: 0,\r\n              });\r\n              Notification.success(\"Sửa trạng thái đơn hàng thành công\");\r\n            }\r\n            setIsBusy(false);\r\n          });\r\n        }}\r\n        onClose={() => {\r\n          setModalStatus({\r\n            isShow: false,\r\n            statusId: 0,\r\n            orderId: 0,\r\n          });\r\n        }}\r\n        statuses={orderStatuses}\r\n        statusId={modalStatus.statusId}\r\n        orderId={modalStatus.orderId}\r\n        isShow={modalStatus.isShow}\r\n      />\r\n      <ModalEditWarehouseNote\r\n        onSave={(formData, setIsBusy) => {\r\n          setIsBusy(true);\r\n          const url = \"/admin/order/update-warehouse-note\";\r\n          axios.post(url, formData).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n              setModalEditWarehouseNote({\r\n                isShow: false,\r\n                data: {},\r\n              });\r\n              Notification.success(\"Chỉnh sửa ghi chú gửi kho thành công\");\r\n            }\r\n            setIsBusy(false);\r\n          });\r\n        }}\r\n        onClose={() => {\r\n          setModalEditWarehouseNote({\r\n            isShow: false,\r\n            data: {},\r\n          });\r\n        }}\r\n        isShow={modalEditWarehouseNote.isShow}\r\n        data={modalEditWarehouseNote.data}\r\n      />\r\n      <ModalEdit\r\n        isShow={modalOrderEditInfo.isShow}\r\n        onSave={(formData, setIsBusy) => {\r\n          setIsBusy(true);\r\n          const url = \"/admin/order/update\";\r\n          axios.post(url, formData).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n              reloadOrder();\r\n              setModalOrderEditInfo({\r\n                isShow: false,\r\n                detail: {},\r\n              });\r\n              Notification.success(\"Chỉnh sửa đơn hàng thành công\");\r\n            }\r\n            setIsBusy(false);\r\n          });\r\n        }}\r\n        onClose={() => {\r\n          setModalOrderEditInfo({\r\n            isShow: false,\r\n            detail: {},\r\n          });\r\n        }}\r\n        provinces={provinceList}\r\n        onProvinceChange={(provinceId) => {\r\n          loadDistrict(provinceId);\r\n        }}\r\n        districts={districtList}\r\n        onDistrictChange={(districtId) => {\r\n          loadWard(districtId);\r\n        }}\r\n        wards={wardList}\r\n        shippingUnits={shippingUnits}\r\n        shippingMethods={shippingMethods}\r\n        dropShipFee={0}\r\n        detail={modalOrderEditInfo.detail}\r\n        removeProduct={(productId) => {\r\n          const products = [...modalOrderEditInfo.detail.Products];\r\n          const newProducts = products.filter((n) => n.ProductId !== productId);\r\n          setModalOrderEditInfo({\r\n            ...modalOrderEditInfo,\r\n            detail: {\r\n              ...modalOrderEditInfo.detail,\r\n              Products: newProducts,\r\n            },\r\n          });\r\n        }}\r\n      />\r\n      {isShowViewer && (\r\n        <ImageViewer\r\n          src={viewerList}\r\n          currentIndex={0}\r\n          disableScroll={false}\r\n          closeOnClickOutside={true}\r\n          onClose={() => {\r\n            setIsShowViewer(false);\r\n          }}\r\n        />\r\n      )}\r\n    </Fragment>\r\n  );\r\n};\r\n\r\nexport default OrderPage;\r\n","import PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport DatePicker from 'react-datepicker'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\n\r\nconst dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' }\r\n\r\nconst now = new Date()\r\n\r\nconst filters = {\r\n    fromDate: new Date(now.getFullYear(), now.getMonth(), 1).toLocaleDateString('vi-VN', dateOptions),\r\n    toDate: new Date(now.getFullYear(), now.getMonth() + 1, 0).toLocaleDateString('vi-VN', dateOptions)\r\n}\r\n\r\nconst Filter = (props) => {\r\n    const { onSearch } = props\r\n\r\n    const [fromDate, setFromDate] = useState(() => {\r\n        const day = 1\r\n        const month = now.getMonth()\r\n        const year = now.getFullYear()\r\n        const date = new Date(year, month, day)\r\n        return date\r\n    })\r\n\r\n    const [toDate, setToDate] = useState(() => {\r\n        const day = 0\r\n        const month = now.getMonth()\r\n        const year = now.getFullYear()\r\n        const date = new Date(year, month + 1, day)\r\n        return date\r\n    })\r\n\r\n    const handleSearch = () => {\r\n        onSearch(filters)\r\n    }\r\n\r\n    const handleClear = () => {\r\n        setFromDate(null)\r\n        filters.fromDate = ''\r\n        setToDate(null)\r\n        filters.toDate = ''\r\n        onSearch(filters)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n                        <div className=\"input-group flex-nowrap\">\r\n                            <span className=\"input-group-text\">Từ ngày</span>\r\n                            <DatePicker\r\n                                className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n                                placeholderText=\"dd/mm/yyyy\"\r\n                                dateFormat=\"dd/MM/yyyy\"\r\n                                selected={fromDate}\r\n                                onChange={date => {\r\n                                    if (date !== null) {\r\n                                        const day = date.getDate()\r\n                                        const month = date.getMonth() + 1\r\n                                        const year = date.getFullYear()\r\n                                        const strDate = `${day}/${month}/${year}`\r\n                                        filters.fromDate = strDate\r\n                                    }\r\n                                    setFromDate(date)\r\n                                }}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n                        <div className=\"input-group flex-nowrap\">\r\n                            <span className=\"input-group-text\">Đến ngày</span>\r\n                            <DatePicker\r\n                                className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n                                placeholderText=\"dd/mm/yyyy\"\r\n                                dateFormat=\"dd/MM/yyyy\"\r\n                                selected={toDate}\r\n                                onChange={date => {\r\n                                    if (date !== null) {\r\n                                        const day = date.getDate()\r\n                                        const month = date.getMonth() + 1\r\n                                        const year = date.getFullYear()\r\n                                        const strDate = `${day}/${month}/${year}`\r\n                                        filters.toDate = strDate\r\n                                    }\r\n                                    setToDate(date)\r\n                                }}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-12 col-xxl-8\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={handleSearch} />\r\n                            <ClearButton onClick={handleClear} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func\r\n}\r\n\r\nFilter.defaultProps = {\r\n    onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { EmptyRow, LoadingRow, FormatNumber, AvatarRow, DetailRow } from '../../../../../components'\r\n\r\nfunction Table(props) {\r\n    const { data, onOpenDetail, detail } = props\r\n\r\n    function renderTable() {\r\n        if (data === null) return <LoadingRow colSpan={6} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n        else return data.map((item, index) => {\r\n            return (\r\n                <Fragment key={item.PartnerId}>\r\n                    <tr onClick={() => onOpenDetail(item)} className={(item.isSelected ? 'row-master' : '')}>\r\n                        <td className=\"text-center\">{(props.pageItem * (props.pageIndex - 1)) + index + 1}</td>\r\n                        <td>\r\n                            <AvatarRow\r\n                                url={item.AvatarUrl}\r\n                            />\r\n                            {item.FullName}\r\n                        </td>\r\n                        <td>{item.Email}</td>\r\n                        <td>{item.Phone}</td>\r\n                        <td className=\"text-end text-primary\">\r\n                            <FormatNumber>\r\n                                {item.CountOrder}\r\n                            </FormatNumber>\r\n                        </td>\r\n                        <td className=\"text-end text-primary\">\r\n                            <FormatNumber>\r\n                                {item.TotalMoney}\r\n                            </FormatNumber>\r\n                        </td>\r\n                    </tr>\r\n                    {rederDetail(item)}\r\n                </Fragment>\r\n            )\r\n        })\r\n    }\r\n\r\n    function rederDetail(item) {\r\n        if (item.isSelected) {\r\n            return (\r\n                <tr className=\"row-detail\">\r\n                    <td colSpan={6} className=\"ps-1 pt-0 pe-1 pb-1\">\r\n                        <div className=\"card mb-0 cursor-default\">\r\n                            <div className=\"card-body\">\r\n                                <div className=\"row\">\r\n                                    <DetailRow title=\"Tổng đơn\">\r\n                                        <span className=\"text-primary\">\r\n                                            <FormatNumber>\r\n                                                {detail.CountOrder}\r\n                                            </FormatNumber>\r\n                                        </span>\r\n                                    </DetailRow>\r\n                                    <DetailRow title=\"Đơn hủy\">\r\n                                        <span className=\"text-primary\">\r\n                                            <FormatNumber>\r\n                                                {detail.CountCancel}\r\n                                            </FormatNumber>\r\n                                        </span>\r\n                                    </DetailRow>\r\n                                    <DetailRow title=\"Doanh thu\">\r\n                                        <span className=\"text-primary\">\r\n                                            <FormatNumber>\r\n                                                {detail.TotalMoney}\r\n                                            </FormatNumber>\r\n                                        </span>\r\n                                    </DetailRow>\r\n                                    <DetailRow title=\"Tổng nạp\">\r\n                                        <span className=\"text-primary\">\r\n                                            <FormatNumber>\r\n                                                {detail.TotalRecharge}\r\n                                            </FormatNumber>\r\n                                        </span>\r\n                                    </DetailRow>\r\n                                    <DetailRow title=\"Số lượng sản phẩm\">\r\n                                        <span className=\"text-primary\">\r\n                                            <FormatNumber>\r\n                                                {detail.CountProduct}\r\n                                            </FormatNumber>\r\n                                        </span>\r\n                                    </DetailRow>\r\n                                    <DetailRow title=\"Tổng phí dropship\">\r\n                                        <span className=\"text-primary\">\r\n                                            <FormatNumber>\r\n                                                {detail.TotalDropshipFee}\r\n                                            </FormatNumber>\r\n                                        </span>\r\n                                    </DetailRow>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </td>\r\n                </tr>\r\n            )\r\n        }\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered table-avatar table-point mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Họ tên</th>\r\n                        <th>Email</th>\r\n                        <th>Điện thoại</th>\r\n                        <th className='text-end'>Số đơn hàng</th>\r\n                        <th className='text-end'>Doanh thu</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    data: PropTypes.array,\r\n    pageItem: PropTypes.number,\r\n    pageIndex: PropTypes.number,\r\n    onOpenDetail: PropTypes.func,\r\n    detail: PropTypes.object,\r\n}\r\n\r\nTable.defaultProps = {\r\n    data: [],\r\n    pageItem: 10,\r\n    pageIndex: 1,\r\n    onOpenDetail: () => { },\r\n    detail: {}\r\n}\r\n\r\nexport default Table","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { Pagination } from '../../../components'\r\nimport { Filter, Table } from './components'\r\n\r\nconst dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' }\r\n\r\nconst now = new Date()\r\n\r\nconst StatisticPartnerOrder = () => {\r\n    const [partners, setPartners] = useState(null)\r\n\r\n    const [filters, setFilters] = useState({\r\n        fromDate: new Date(now.getFullYear(), now.getMonth(), 1).toLocaleDateString('vi-VN', dateOptions),\r\n        toDate: new Date(now.getFullYear(), now.getMonth() + 1, 0).toLocaleDateString('vi-VN', dateOptions),\r\n        pageItem: 10,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [pagination, setPagination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [detail, setDetail] = useState({})\r\n\r\n    useEffect(() => {\r\n        const url = `/admin/statistic/order-by-partner?fromDate=${filters.fromDate}&toDate=${filters.toDate}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n        axios.get(url).then(res => {\r\n            let data = res.data\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex\r\n                }\r\n                setPagination(newPagination)\r\n                setPartners(data.Result.Data)\r\n            }\r\n        })\r\n    }, [filters])\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Thống kê đơn hàng'\r\n    }, []);\r\n\r\n    const handleRowClick = item => {\r\n        const partnerId = item.PartnerId\r\n        let lst = [...partners];\r\n        let newindex = lst.findIndex(n => n.PartnerId === item.PartnerId);\r\n        let newItem = lst[newindex];\r\n        let prevIndex = lst.findIndex(n => n.isSelected);\r\n        if (prevIndex > -1) {\r\n            let prev = lst[prevIndex];\r\n            if (prev.PartnerId === newItem.PartnerId) {\r\n                clearDetail()\r\n                newItem.isSelected = false;\r\n            }\r\n            else {\r\n                loadDetail(partnerId)\r\n                prev.isSelected = false;\r\n                newItem.isSelected = true;\r\n            }\r\n        }\r\n        else {\r\n            loadDetail(partnerId)\r\n            newItem.isSelected = true;\r\n        }\r\n        setPartners(lst);\r\n    }\r\n\r\n    function loadDetail(partnerId) {\r\n        const url = `/admin/statistic/order-by-partner-detail?partnerId=${partnerId}&fromDate=${filters.fromDate}&toDate=${filters.toDate}`\r\n        const request = axios.get(url)\r\n        request.then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setDetail(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    function clearDetail() {\r\n        setDetail({})\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <Filter\r\n                onSearch={(params) => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params,\r\n                        pageIndex: 1\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n            />\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <Table\r\n                        pageItem={filters.pageItem}\r\n                        pageIndex={filters.pageIndex}\r\n                        data={partners}\r\n                        onOpenDetail={(item) => {\r\n                            handleRowClick(item)\r\n                        }}\r\n                        detail={detail}\r\n                    />\r\n                    <Pagination\r\n                        totalPage={pagination.totalPage}\r\n                        currentPage={pagination.pageIndex}\r\n                        onPageChange={(pIndex) => {\r\n                            const newPagination = { ...pagination, pageIndex: pIndex }\r\n                            setPagination(newPagination)\r\n                            const newFilters = {\r\n                                ...filters,\r\n                                pageIndex: pIndex\r\n                            }\r\n                            setFilters(newFilters)\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n        </Fragment>\r\n    );\r\n};\r\n\r\nexport default StatisticPartnerOrder;","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, LoadingRow } from './../../../../../components'\r\n\r\nconst Table = props => {\r\n    const renderTable = () => {\r\n        let data = props.data\r\n        if (data === null) return <LoadingRow colSpan={6} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n        else {\r\n            return data.map((item, index) => {\r\n                return <tr key={item.ShippingUnitId}>\r\n                    <td className=\"text-center\">{(index + 1)}</td>\r\n                    <td>{item.ShippingUnitName}</td>\r\n                    <td>\r\n                        {renderStatus(item.ShippingUnitStatusId)}\r\n                    </td>\r\n                    <td>{item.Note}</td>\r\n                    <td>\r\n                        {item.CreatedDate}\r\n                        <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n                    </td>\r\n                    <td>\r\n                        <ActionRow>\r\n                            <ActionItem right=\"shipping_unit_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sửa' />\r\n                            <ActionItem right=\"shipping_unit_delete\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className=\"text-danger\" />\r\n                        </ActionRow>\r\n                    </td>\r\n                </tr>\r\n            })\r\n        }\r\n    }\r\n\r\n    const renderStatus = statusId => {\r\n        if (statusId === 1) return <span className=\"badge bg-success\">Hoạt động</span>\r\n        else return <span className=\"badge bg-warning\">Tạm khóa</span>\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Đơn vị vận chuyển</th>\r\n                        <th>Trạng thái</th>\r\n                        <th>Ghi chú</th>\r\n                        <th>Ngày tạo</th>\r\n                        <th className=\"w-52-px\"></th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    data: PropTypes.array,\r\n    onEdit: PropTypes.func,\r\n    onDelete: PropTypes.func\r\n}\r\n\r\nTable.defaultProps = {\r\n    data: null,\r\n    onEdit: () => { },\r\n    onDelete: () => { }\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst schema = yup.object().shape({\r\n    ShippingUnitName: yup.string().required('Vui lòng nhập tên đơn vị giao hàng').max(100, 'Tên quá dài'),\r\n    StatusId: yup.number(),\r\n    Note: yup.string().max(200, 'Ghi chú quá dài')\r\n})\r\n\r\nconst ModalAdd = props => {\r\n    const { register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới đơn vị vận chuyển</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tên đơn vị giao hàng <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('ShippingUnitName')} type=\"text\" className=\"form-control\" placeholder=\"Tên đơn vị giao hàng\" />\r\n                        {errors.ShippingUnitName && <div className=\"validation-message\">{errors.ShippingUnitName.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Trạng thái</label>\r\n                        <select {...register('StatusId')} className=\"form-select\">\r\n                            <option value=\"1\">Hoạt động</option>\r\n                            <option value=\"2\">Tạm khóa</option>\r\n                        </select>\r\n                        {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Ghi chú</label>\r\n                        <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                        {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst schema = yup.object().shape({\r\n    ShippingUnitName: yup.string().required('Vui lòng nhập tên đơn vị giao hàng').max(100, 'Tên quá dài'),\r\n    StatusId: yup.number(),\r\n    Note: yup.string().max(200, 'Ghi chú quá dài')\r\n})\r\n\r\nconst ModalEdit = props => {\r\n    const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                setValue('ShippingUnitId', props.data.ShippingUnitId)\r\n                setValue('ShippingUnitName', props.data.ShippingUnitName)\r\n                setValue('StatusId', props.data.ShippingUnitStatusId)\r\n                setValue('Note', props.data.Note)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa đơn vị vận chuyển</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tên đơn vị giao hàng <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('ShippingUnitName')} type=\"text\" className=\"form-control\" placeholder=\"Tên đơn vị giao hàng\" />\r\n                        {errors.ShippingUnitName && <div className=\"validation-message\">{errors.ShippingUnitName.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Trạng thái</label>\r\n                        <select {...register('StatusId')} className=\"form-select\">\r\n                            <option value=\"1\">Hoạt động</option>\r\n                            <option value=\"2\">Tạm khóa</option>\r\n                        </select>\r\n                        {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Ghi chú</label>\r\n                        <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                        {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    );\r\n};\r\n\r\nModalEdit.propTypes = {\r\n    data: PropTypes.object,\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n    data: {},\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false\r\n}\r\n\r\nexport default ModalEdit","import axios from 'axios';\r\nimport React, { Fragment, useEffect, useState } from 'react';\r\nimport { IoAddCircleOutline } from 'react-icons/io5';\r\nimport { Notification, AuthAdminView, IconButton } from '../../../components';\r\nimport { ModalAdd, ModalEdit, Table } from './components';\r\n\r\nconst ShippingUnitPage = props => {\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Đơn vị vận chuyển';\r\n        loadShippingUnit();\r\n    }, []);\r\n\r\n    // State trạng thái đóng mở modal thêm mới đơn vị vận chuyển\r\n    const [isShowModalShippingUnitAdd, setIsShowModalShippingUnitAdd] = useState(false);\r\n\r\n    // State trạng thái đóng mở modal chỉnh sửa đơn vị vận chuyển\r\n    const [isShowModalShippingUnitEdit, setIsShowModalShippingUnitEdit] = useState(false);\r\n\r\n    // State lưu danh sách đơn vị vận chuyển\r\n    const [shippingUnit, setShippingUnit] = useState(null);\r\n\r\n    // State lưu thông tin chi tiết đơn vị giao hàng cho chỉnh sửa\r\n    const [shippingUnitEditInfo, setShippingUnitEditInfo] = useState({});\r\n\r\n    // Load danh sách đơn vị vận chuyển\r\n    const loadShippingUnit = () => {\r\n        const url = '/admin/shipping-unit/get-all';\r\n        axios.get(url).then(res => {\r\n            let data = res.data;\r\n            if (data.IsSuccess) {\r\n                setShippingUnit(data.Result);\r\n            }\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"row\">\r\n                        <div className=\"col-12\">\r\n                            <AuthAdminView right=\"shipping_unit_add\">\r\n                                <IconButton\r\n                                    className=\"mb-2\"\r\n                                    text=\"Thêm mới\"\r\n                                    icon={<IoAddCircleOutline />}\r\n                                    onClick={() => {\r\n                                        setIsShowModalShippingUnitAdd(true)\r\n                                    }}\r\n                                />\r\n                            </AuthAdminView>\r\n                        </div>\r\n                    </div>\r\n                    <Table\r\n                        data={shippingUnit}\r\n                        onEdit={item => {\r\n                            const url = `/admin/shipping-unit/get-by-id?id=${item.ShippingUnitId}`;\r\n                            axios.get(url).then(res => {\r\n                                let data = res.data;\r\n                                if (data.IsSuccess) {\r\n                                    setShippingUnitEditInfo(data.Result);\r\n                                    setIsShowModalShippingUnitEdit(true);\r\n                                }\r\n                            })\r\n                        }}\r\n                        onDelete={item => {\r\n                            Notification.confirmHtml('Bạn có chắc muốn xóa đơn vị vận chuyển', item.ShippingUnitName, () => {\r\n                                const url = `/admin/shipping-unit/delete?id=${item.ShippingUnitId}`;\r\n                                axios.post(url).then(res => {\r\n                                    let data = res.data;\r\n                                    if (data.IsSuccess) {\r\n                                        loadShippingUnit();\r\n                                        Notification.success('Xóa đơn vị giao hàng thành công');\r\n                                    }\r\n                                })\r\n                            })\r\n                        }} />\r\n                </div>\r\n            </div>\r\n\r\n            {/* Modal thêm mới đơn vị giao hàng */}\r\n            <ModalAdd\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/shipping-unit/create';\r\n                    axios.post(url, formData).then(res => {\r\n                        let data = res.data;\r\n                        if (data.IsSuccess) {\r\n                            loadShippingUnit();\r\n                            setIsShowModalShippingUnitAdd(false);\r\n                            Notification.success('Thêm mới đơn vị giao hàng thành công');\r\n                        }\r\n                        setIsBusy(false)\r\n                    });\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalShippingUnitAdd(false)\r\n                }}\r\n                isShow={isShowModalShippingUnitAdd} />\r\n\r\n            {/* Modal chỉnh sửa đơn vị giao hàng */}\r\n            <ModalEdit\r\n                data={shippingUnitEditInfo}\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/shipping-unit/update';\r\n                    axios.post(url, formData).then(res => {\r\n                        let data = res.data;\r\n                        if (data.IsSuccess) {\r\n                            setShippingUnitEditInfo({});\r\n                            loadShippingUnit();\r\n                            setIsShowModalShippingUnitEdit(false);\r\n                            Notification.success('Chỉnh sửa đơn vị giao hàng thành công');\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setShippingUnitEditInfo({});\r\n                    setIsShowModalShippingUnitEdit(false);\r\n                }}\r\n                isShow={isShowModalShippingUnitEdit} />\r\n        </Fragment>\r\n    );\r\n}\r\n\r\nexport default ShippingUnitPage;","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, CustomSelect, InputSelect } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst schema = yup.object().shape({\r\n    FullName: yup.string().required('Vui lòng nhập họ tên').max(100, 'Họ tên quá dài'),\r\n    UserName: yup.string().required('Vui lòng nhập tài khoản').max(70, 'Tài khoản quá dài'),\r\n    Password: yup.string().required('Vui lòng nhập mật khẩu').max(70, 'Mật khẩu quá dài'),\r\n    Email: yup.string().required('Vui lòng nhập email').email('Email không đúng').max(70, 'Email quá dài'),\r\n    Phone: yup.string().required('Vui lòng nhập số điện thoại').max(20, 'Số điện thoại quá dài'),\r\n    StatusId: yup.number(),\r\n    RoleId: yup.number().required('Vui lòng chọn vai trò')\r\n})\r\n\r\nconst statusOptions = [\r\n    {\r\n        value: 1,\r\n        label: 'Hoạt động'\r\n    },\r\n    {\r\n        value: 2,\r\n        label: 'Tạm khóa'\r\n    }\r\n]\r\n\r\nfunction ModalAddUser(props) {\r\n    const { control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema),\r\n        defaultValues: {\r\n            StatusId: 1\r\n        }\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [roleOptions, setRoleOptions] = useState([])\r\n\r\n    useEffect(() => {\r\n        const roles = props.role.map(item => {\r\n            return {\r\n                value: item.RoleId,\r\n                label: item.RoleName\r\n            }\r\n        })\r\n        setRoleOptions(roles)\r\n    }, [props.role])\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới thành viên</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Họ tên <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Họ tên\" />\r\n                        {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n                    </div>\r\n                    <div className=\"row\">\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Tài khoản <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('UserName')} type=\"text\" className=\"form-control\" placeholder=\"Tài khoản\" />\r\n                                {errors.UserName && <div className=\"validation-message\">{errors.UserName.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Mật khẩu <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('Password')} type=\"password\" className=\"form-control\" placeholder=\"Mật khẩu\" />\r\n                                {errors.Password && <div className=\"validation-message\">{errors.Password.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"row\">\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Email <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('Email')} type=\"text\" className=\"form-control\" placeholder=\"Email\" />\r\n                                {errors.Email && <div className=\"validation-message\">{errors.Email.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Điện thoại <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Điện thoại\" />\r\n                                {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Vai trò <span className=\"text-danger\">*</span></label>\r\n                        <Controller\r\n                            control={control}\r\n                            name=\"RoleId\"\r\n                            render={({\r\n                                field: { onChange, value }\r\n                            }) => (\r\n                                <CustomSelect\r\n                                    isClearable={false}\r\n                                    isSearchable={false}\r\n                                    options={roleOptions}\r\n                                    value={value}\r\n                                    onChange={onChange}\r\n                                    placeholder='Vai trò'\r\n                                />\r\n                            )}\r\n                        />\r\n                        {errors.RoleId && <div className=\"validation-message\">{errors.RoleId.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Trạng thái</label>\r\n                        <Controller\r\n                            control={control}\r\n                            name=\"StatusId\"\r\n                            render={({\r\n                                field: { onChange, value }\r\n                            }) => (\r\n                                <InputSelect\r\n                                    variant='success'\r\n                                    options={statusOptions}\r\n                                    value={value}\r\n                                    onChange={onChange}\r\n                                />\r\n                            )}\r\n                        />\r\n                        {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAddUser.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    role: PropTypes.array\r\n}\r\n\r\nModalAddUser.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    role: []\r\n}\r\n\r\nexport default ModalAddUser","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, CustomSelect, InputSelect } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst schema = yup.object().shape({\r\n    UserId: yup.number(),\r\n    FullName: yup.string().required('Vui lòng nhập họ tên').max(100, 'Họ tên quá dài'),\r\n    UserName: yup.string().required('Vui lòng nhập tài khoản').max(70, 'Tài khoản quá dài'),\r\n    Email: yup.string().required('Vui lòng nhập email').email('Email không đúng').max(70, 'Email quá dài'),\r\n    Phone: yup.string().required('Vui lòng nhập số điện thoại').max(20, 'Số điện thoại quá dài'),\r\n    StatusId: yup.number(),\r\n    RoleId: yup.number().required('Vui lòng chọn vai trò')\r\n})\r\n\r\nconst statusOptions = [\r\n    {\r\n        value: 1,\r\n        label: 'Hoạt động'\r\n    },\r\n    {\r\n        value: 2,\r\n        label: 'Tạm khóa'\r\n    }\r\n]\r\n\r\nfunction ModalEditUser(props) {\r\n    const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [roleOptions, setRoleOptions] = useState([])\r\n\r\n    useEffect(() => {\r\n        const roles = props.role.map(item => {\r\n            return {\r\n                value: item.RoleId,\r\n                label: item.RoleName\r\n            }\r\n        })\r\n        setRoleOptions(roles)\r\n    }, [props.role])\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                let info = props.info\r\n                setValue('UserId', info.UserId)\r\n                setValue('FullName', info.FullName)\r\n                setValue('UserName', info.UserName)\r\n                setValue('Email', info.Email)\r\n                setValue('Phone', info.Phone)\r\n                setValue('StatusId', info.StatusId)\r\n                setValue('RoleId', info.RoleId)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa thành viên</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Họ tên <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Họ tên\" />\r\n                        {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tài khoản <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('UserName')} type=\"text\" className=\"form-control\" placeholder=\"Tài khoản\" />\r\n                        {errors.UserName && <div className=\"validation-message\">{errors.UserName.message}</div>}\r\n                    </div>\r\n                    <div className=\"row\">\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Email <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('Email')} type=\"text\" className=\"form-control\" placeholder=\"Email\" />\r\n                                {errors.Email && <div className=\"validation-message\">{errors.Email.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Điện thoại <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Điện thoại\" />\r\n                                {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Vai trò <span className=\"text-danger\">*</span></label>\r\n                        <Controller\r\n                            control={control}\r\n                            name=\"RoleId\"\r\n                            render={({\r\n                                field: { onChange, value }\r\n                            }) => (\r\n                                <CustomSelect\r\n                                    isClearable={false}\r\n                                    isSearchable={false}\r\n                                    options={roleOptions}\r\n                                    value={value}\r\n                                    onChange={onChange}\r\n                                    placeholder='Vai trò'\r\n                                />\r\n                            )}\r\n                        />\r\n                        {errors.RoleId && <div className=\"validation-message\">{errors.RoleId.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Trạng thái</label>\r\n                        <Controller\r\n                            control={control}\r\n                            name=\"StatusId\"\r\n                            render={({\r\n                                field: { onChange, value }\r\n                            }) => (\r\n                                <InputSelect\r\n                                    variant='success'\r\n                                    options={statusOptions}\r\n                                    value={value}\r\n                                    onChange={onChange}\r\n                                />\r\n                            )}\r\n                        />\r\n                        {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEditUser.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    role: PropTypes.array,\r\n    info: PropTypes.object\r\n}\r\n\r\nModalEditUser.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    role: [],\r\n    info: {}\r\n}\r\n\r\nexport default ModalEditUser","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoKeyOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, LoadingRow } from './../../../../../components'\r\n\r\nfunction Table(props) {\r\n    const renderTable = () => {\r\n        let data = props.data\r\n        if (data === null) return <LoadingRow colSpan={8} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={8} />\r\n        else return data.map((item, index) => <tr key={item.UserId}>\r\n            <td className=\"text-center\">{index + 1}</td>\r\n            <td>{item.FullName}</td>\r\n            <td>{item.UserName}</td>\r\n            <td>{item.Phone}</td>\r\n            <td>{item.Email}</td>\r\n            <td>{item.RoleName}</td>\r\n            <td>\r\n                {renderStatus(item.StatusId)}\r\n            </td>\r\n            <td>\r\n                <ActionRow>\r\n                    <ActionItem right=\"user_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sửa' />\r\n                    <ActionItem right=\"user_set_password\" onClick={() => props.onSetPwd(item)} icon={<IoKeyOutline />} title='Đặt lại mật khẩu' />\r\n                </ActionRow>\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    const renderStatus = statusId => {\r\n        if (statusId === 1) return <span className=\"badge bg-success\">Hoạt động</span>\r\n        else return <span className=\"badge bg-warning\">Tạm khóa</span>\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Họ tên</th>\r\n                        <th>Tài khoản</th>\r\n                        <th>Điện thoại</th>\r\n                        <th>Email</th>\r\n                        <th>Vai trò</th>\r\n                        <th>Trạng thái</th>\r\n                        <th className=\"w-52-px\"></th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    data: PropTypes.array,\r\n    onEdit: PropTypes.func,\r\n    onSetPwd: PropTypes.func\r\n}\r\n\r\nTable.defaultProps = {\r\n    data: null,\r\n    onEdit: () => { },\r\n    onSetPwd: () => { }\r\n}\r\n\r\nexport default Table","import PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\nimport Select from 'react-select'\r\n\r\nconst filters = {\r\n    keyword: '',\r\n    roleId: 0\r\n}\r\n\r\nfunction Filter(props) {\r\n    const { onSearch, roles } = props\r\n\r\n    const [keyword, setKeyword] = useState('')\r\n\r\n    const [role, setRole] = useState(null)\r\n\r\n    const [roleOptions, setRoleOptions] = useState([])\r\n\r\n    useEffect(() => {\r\n        let data = roles.map(item => {\r\n            return {\r\n                value: item.RoleId,\r\n                label: item.RoleName\r\n            }\r\n        })\r\n        setRoleOptions(data)\r\n    }, [roles])\r\n\r\n    const handleSearch = () => {\r\n        onSearch(filters)\r\n    }\r\n\r\n    const handleClear = () => {\r\n        setKeyword('')\r\n        filters.keyword = ''\r\n        setRole(null)\r\n        filters.roleId = 0\r\n        onSearch(filters)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-4 col-md-4 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <input value={keyword}\r\n                            autoFocus\r\n                            onChange={e => {\r\n                                setKeyword(e.target.value)\r\n                            }} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Họ tên, email, điện thoại\" />\r\n                    </div>\r\n                    <div className=\"col-sm-4 col-md-4 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={false}\r\n                            isClearable={true}\r\n                            placeholder='Vai trò'\r\n                            options={roleOptions}\r\n                            value={role}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    setRole(item)\r\n                                    filters.roleId = item.value\r\n                                }\r\n                                else {\r\n                                    setRole(null)\r\n                                    filters.roleId = 0\r\n                                }\r\n                            }}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-4 col-md-4 col-lg-6 col-xl-6 col-xxl-8\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={handleSearch} />\r\n                            <ClearButton onClick={handleClear} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func,\r\n    roles: PropTypes.array\r\n}\r\n\r\nFilter.defaultProps = {\r\n    onSearch: () => { },\r\n    roles: []\r\n}\r\n\r\nexport default Filter","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    NewPassword: yup.string().required('Vui lòng nhập mật khẩu mới').max(70, 'Mật khẩu quá dài')\r\n})\r\n\r\nfunction ModalUserSetPwd(props) {\r\n    const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                setValue('UserId', props.userId)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Đặt lại mật khẩu</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Mật khẩu mới <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('NewPassword')} type=\"password\" className=\"form-control\" placeholder=\"Mật khẩu mới\" />\r\n                        {errors.NewPassword && <div className=\"validation-message\">{errors.NewPassword.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalUserSetPwd.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    userId: PropTypes.number\r\n}\r\n\r\nModalUserSetPwd.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    userId: 0\r\n}\r\n\r\nexport default ModalUserSetPwd\r\n\r\n","import React, { Fragment, useEffect, useState } from 'react'\r\nimport { Filter } from './components'\r\nimport { IconButton, Notification, AuthAdminView } from './../../../components'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { Table, ModalAddUser, ModalEditUser, ModalUserSetPwd } from './components'\r\nimport axios from 'axios'\r\n\r\nfunction UserPage(props) {\r\n    const [userList, setUserList] = useState(null)\r\n\r\n    const [isShowModalUserAdd, setIsShowModalUserAdd] = useState(false)\r\n\r\n    const [isShowModalUserEdit, setIsShowModalUserEdit] = useState(false)\r\n\r\n    const [infoModalUserSetPwd, setInfoModalUserSetPwd] = useState({\r\n        isShow: false,\r\n        userId: 0\r\n    })\r\n\r\n    const [roleList, setRoleList] = useState([])\r\n\r\n    const [userEditInfo, setUserEditInfo] = useState({})\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Thành viên'\r\n\r\n        loadRole()\r\n    }, [])\r\n\r\n    const [filters, setFilters] = useState({\r\n        keyword: '',\r\n        roleId: 0\r\n    })\r\n\r\n    useEffect(() => {\r\n        const url = `/admin/user/filter?keyword=${filters.keyword}&roleId=${filters.roleId}`\r\n        axios.get(url).then(res => {\r\n            let data = res.data\r\n            if (data.IsSuccess) {\r\n                setUserList(data.Result)\r\n            }\r\n        })\r\n    }, [filters])\r\n\r\n    const loadRole = () => {\r\n        const url = '/admin/role/get-dropdown'\r\n        axios.get(url).then(res => {\r\n            let data = res.data\r\n            if (data.IsSuccess) {\r\n                setRoleList(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const reloadUser = () => [\r\n        setFilters({\r\n            ...filters\r\n        })\r\n    ]\r\n\r\n    return (\r\n        <Fragment>\r\n            <Filter\r\n                onSearch={params => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n                roles={roleList}\r\n            />\r\n\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"row\">\r\n                        <div className=\"col-12\">\r\n                            <AuthAdminView right=\"user_add\">\r\n                                <IconButton\r\n                                    className=\"mb-2\"\r\n                                    icon={<IoAddCircleOutline />}\r\n                                    text=\"Thêm mới\"\r\n                                    onClick={() => {\r\n                                        setIsShowModalUserAdd(true)\r\n                                    }} />\r\n                            </AuthAdminView>\r\n                        </div>\r\n                    </div>\r\n                    <Table\r\n                        data={userList}\r\n                        onEdit={item => {\r\n                            const url = `/admin/user/get-by-id?id=${item.UserId}`\r\n                            axios.get(url).then(res => {\r\n                                let data = res.data\r\n                                if (data.IsSuccess) {\r\n                                    setUserEditInfo(data.Result)\r\n                                    setIsShowModalUserEdit(true)\r\n                                }\r\n                            })\r\n                        }}\r\n                        onSetPwd={item => {\r\n                            setInfoModalUserSetPwd({\r\n                                isShow: true,\r\n                                userId: item.UserId\r\n                            })\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n\r\n            <ModalAddUser\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/user/create'\r\n                    axios.post(url, formData).then(res => {\r\n                        const data = res.data\r\n                        if (data.IsSuccess) {\r\n                            reloadUser()\r\n                            setIsShowModalUserAdd(false)\r\n                            Notification.success('Thêm mới thành viên thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalUserAdd(false)\r\n                }}\r\n                isShow={isShowModalUserAdd}\r\n                role={roleList}\r\n            />\r\n\r\n            <ModalEditUser\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/user/update'\r\n                    axios.post(url, formData).then(res => {\r\n                        let data = res.data\r\n                        if (data.IsSuccess) {\r\n                            reloadUser()\r\n                            setIsShowModalUserEdit(false)\r\n                            Notification.success('Chỉnh sửa thành viên thành công')\r\n                            setUserEditInfo({})\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setUserEditInfo({})\r\n                    setIsShowModalUserEdit(false)\r\n                }}\r\n                isShow={isShowModalUserEdit}\r\n                role={roleList}\r\n                info={userEditInfo}\r\n            />\r\n\r\n            <ModalUserSetPwd\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/user/set-password'\r\n                    axios.post(url, formData).then(res => {\r\n                        let data = res.data\r\n                        if (data.IsSuccess) {\r\n                            setInfoModalUserSetPwd({\r\n                                isShow: false,\r\n                                userId: 0\r\n                            })\r\n                            Notification.success('Đặt lại mật khẩu thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setInfoModalUserSetPwd({\r\n                        isShow: false,\r\n                        userId: 0\r\n                    })\r\n                }}\r\n                isShow={infoModalUserSetPwd.isShow}\r\n                userId={infoModalUserSetPwd.userId}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default UserPage","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { yupResolver } from '@hookform/resolvers/yup'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    RoleName: yup.string().required('Vui lòng nhập tên vai trò').max(50, 'Tên vai trò quá dài'),\r\n    RoleNote: yup.string().max(100, 'Ghi chú quá dài')\r\n})\r\n\r\nfunction ModalAdd(props) {\r\n    const { register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới vai trò</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tên vai trò <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('RoleName')} type=\"text\" className=\"form-control\" placeholder=\"Tên vai trò\" />\r\n                        {errors.RoleName && <div className=\"validation-message\">{errors.RoleName.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Ghi chú</label>\r\n                        <textarea {...register('RoleNote')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                        {errors.RoleNote && <div className=\"validation-message\">{errors.RoleNote.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    RoleId: yup.number(),\r\n    RoleName: yup.string().required('Vui lòng nhập tên vai trò').max(50, 'Tên vai trò quá dài'),\r\n    RoleNote: yup.string().max(100, 'Ghi chú quá dài')\r\n})\r\n\r\nfunction ModalEdit(props) {\r\n    const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                let info = props.info\r\n                setValue('RoleId', info.RoleId)\r\n                setValue('RoleName', info.RoleName)\r\n                setValue('RoleNote', info.RoleNote)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới vai trò</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tên vai trò <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('RoleName')} type=\"text\" className=\"form-control\" placeholder=\"Tên vai trò\" />\r\n                        {errors.RoleName && <div className=\"validation-message\">{errors.RoleName.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Ghi chú</label>\r\n                        <textarea {...register('RoleNote')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                        {errors.RoleNote && <div className=\"validation-message\">{errors.RoleNote.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    info: PropTypes.object\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    info: {}\r\n}\r\n\r\nexport default ModalEdit","import PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nfunction ModalPermission(props) {\r\n    const [rightList, setRightList] = useState([])\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    function onRightChange(rightId, e) {\r\n        let isChecked = e.target.checked\r\n        if (isChecked) {\r\n\r\n            let newList = [...rightList]\r\n            let index = newList.indexOf(rightId)\r\n            if (index < 0) {\r\n                newList.push(rightId)\r\n                setRightList(newList)\r\n            }\r\n        }\r\n        else {\r\n            let newList = [...rightList]\r\n            let index = newList.indexOf(rightId)\r\n            if (index > -1) {\r\n                newList.splice(index, 1)\r\n                setRightList(newList)\r\n            }\r\n        }\r\n    }\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"lg\"\r\n            onExited={() => {\r\n                setRightList([])\r\n            }}\r\n            onShow={() => {\r\n                let groups = props.info\r\n                let inputList = []\r\n                groups.forEach(item => {\r\n                    const rightCheckedList = item.Rights.filter(x => x.IsAllow)\r\n                    const arrRight = rightCheckedList.map(x => x.RightId)\r\n                    inputList = inputList.concat(arrRight);\r\n                })\r\n                setRightList(inputList)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Phân quyền vai trò</Modal.Title>\r\n            </Modal.Header>\r\n            <Modal.Body>\r\n                <div className=\"row\">\r\n                    {\r\n                        props.info.map(item => <div className=\"col-md-3\" key={item.RightGroupId}>\r\n                            <label className=\"fw-bold mb-1\">{item.RightGroupName}</label>\r\n                            <div className=\"form-group ms-1\">\r\n                                {\r\n                                    item.Rights.map(right => <div className=\"form-check form-checkbox-success mb-1\" key={right.RightId}>\r\n                                        <input type=\"checkbox\" className=\"form-check-input\"\r\n                                            defaultChecked={right.IsAllow}\r\n                                            id={right.RightId}\r\n                                            onChange={e => onRightChange(right.RightId, e)}\r\n                                        />\r\n                                        <label className=\"form-check-label\" htmlFor={right.RightId}>{right.RightName}</label>\r\n                                    </div>)\r\n                                }\r\n                            </div>\r\n                        </div>)\r\n                    }\r\n                </div>\r\n            </Modal.Body>\r\n            <Modal.Footer>\r\n                <SaveButton type=\"button\" isBusy={isBusy}\r\n                    onClick={() => {\r\n                        props.onSave(rightList, props.roleId, setIsBusy)\r\n                    }} />\r\n                <CloseButton onClick={props.onClose} />\r\n            </Modal.Footer>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalPermission.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    info: PropTypes.array,\r\n    roleId: PropTypes.number\r\n}\r\n\r\nModalPermission.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    info: [],\r\n    roleId: 0\r\n}\r\n\r\nexport default ModalPermission","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoTicketOutline, IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, FormatNumber, LoadingRow } from './../../../../../components'\r\n\r\nfunction Table(props) {\r\n    const renderTable = () => {\r\n        let data = props.data\r\n        if (data === null) return <LoadingRow colSpan={6} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n        else return data.map((item, index) => <tr key={item.RoleId}>\r\n            <td>{index + 1}</td>\r\n            <td>{item.RoleName}</td>\r\n            <td>{item.RoleNote}</td>\r\n            <td className=\"text-end text-primary\">\r\n                <FormatNumber>\r\n                    {item.UserCount}\r\n                </FormatNumber>\r\n            </td>\r\n            <td>\r\n                {item.CreatedDate}\r\n                <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n            </td>\r\n            <td>\r\n                <ActionRow>\r\n                    <ActionItem right=\"role_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sửa' />\r\n                    <ActionItem right=\"role_permission\" onClick={() => props.onPermission(item)} icon={<IoTicketOutline />} title='Phân quyền' />\r\n                    <ActionItem right=\"role_delete\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className='text-danger' />\r\n                </ActionRow>\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responseive\">\r\n            <table className=\"table table-centered mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Vai trò</th>\r\n                        <th>Ghi chú</th>\r\n                        <th className='text-end'>Thành viên</th>\r\n                        <th>Ngày tạo</th>\r\n                        <th className=\"w-52-px\"></th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    onEdit: PropTypes.func,\r\n    onDelete: PropTypes.func,\r\n    onPermission: PropTypes.func,\r\n    data: PropTypes.array\r\n}\r\n\r\nTable.defaultProps = {\r\n    onSave: () => { },\r\n    onDelete: () => { },\r\n    onPermission: () => { },\r\n    data: null\r\n}\r\n\r\nexport default Table","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { IconButton, Notification, AuthAdminView } from './../../../components'\r\nimport { ModalAdd, ModalEdit, ModalPermission, Table } from './components'\r\n\r\nfunction RolePage(props) {\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Vai trò'\r\n        loadRole()\r\n    }, [])\r\n\r\n    const [isShowModalRoleAdd, setIsShowModalRoleAdd] = useState(false)\r\n\r\n    const [infoModalRoleEdit, setInfoModalRoleEdit] = useState({\r\n        isShow: false,\r\n        info: {}\r\n    })\r\n\r\n    const [infoModalPer, setInfoModalPer] = useState({\r\n        isShow: false,\r\n        info: [],\r\n        roleId: 0\r\n    })\r\n\r\n    const [roleList, setRoleList] = useState(null)\r\n\r\n    const loadRole = () => {\r\n        const url = '/admin/role/get-all'\r\n        axios.get(url).then(res => {\r\n            let data = res.data\r\n            if (data.IsSuccess) {\r\n                setRoleList(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"row\">\r\n                        <div className=\"col-12\">\r\n                            <AuthAdminView right=\"role_add\">\r\n                                <IconButton\r\n                                    className=\"mb-2\"\r\n                                    text=\"Thêm mới\"\r\n                                    icon={<IoAddCircleOutline />}\r\n                                    onClick={() => {\r\n                                        setIsShowModalRoleAdd(true)\r\n                                    }}\r\n                                />\r\n                            </AuthAdminView>\r\n                        </div>\r\n                    </div>\r\n                    <Table\r\n                        onEdit={item => {\r\n                            const url = `/admin/role/get-by-id?id=${item.RoleId}`\r\n                            axios.get(url).then(res => {\r\n                                let data = res.data\r\n                                if (data.IsSuccess) {\r\n                                    setInfoModalRoleEdit({\r\n                                        isShow: true,\r\n                                        info: data.Result\r\n                                    })\r\n                                }\r\n                            })\r\n\r\n                        }}\r\n                        onPermission={item => {\r\n                            const url = `/admin/role/get-permission?id=${item.RoleId}`\r\n                            axios.get(url).then(res => {\r\n                                let data = res.data\r\n                                if (data.IsSuccess) {\r\n                                    setInfoModalPer({\r\n                                        isShow: true,\r\n                                        info: data.Result,\r\n                                        roleId: item.RoleId\r\n                                    })\r\n                                }\r\n                            })\r\n                        }}\r\n                        onDelete={item => {\r\n                            Notification.confirmHtml('Bạn có chắc muốn xóa vai trò', item.RoleName, () => {\r\n                                const url = `/admin/role/delete?id=${item.RoleId}`\r\n                                axios.post(url).then(res => {\r\n                                    const data = res.data\r\n                                    if (data.IsSuccess) {\r\n                                        loadRole()\r\n                                        Notification.success('Xóa vai trò thành công')\r\n                                    }\r\n                                })\r\n                            })\r\n                        }}\r\n                        data={roleList}\r\n                    />\r\n                </div>\r\n            </div>\r\n\r\n            <ModalAdd\r\n                onSave={(formData, setIsBusy) => {\r\n                    const url = '/admin/role/create'\r\n                    setIsBusy(true)\r\n                    axios.post(url, formData).then(res => {\r\n                        const data = res.data\r\n                        if (data.IsSuccess) {\r\n                            loadRole()\r\n                            setIsShowModalRoleAdd(false)\r\n                            Notification.success('Thêm mới vai trò thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalRoleAdd(false)\r\n                }}\r\n                isShow={isShowModalRoleAdd}\r\n            />\r\n\r\n            <ModalEdit\r\n                onSave={(formData, setIsBusy) => {\r\n                    const url = '/admin/role/update'\r\n                    setIsBusy(true)\r\n                    axios.post(url, formData).then(res => {\r\n                        let data = res.data\r\n                        if (data.IsSuccess) {\r\n                            loadRole()\r\n                            setInfoModalRoleEdit({\r\n                                isShow: false,\r\n                                info: {}\r\n                            })\r\n                            Notification.success('Chỉnh sửa vai trò thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setInfoModalRoleEdit({\r\n                        isShow: false,\r\n                        info: {}\r\n                    })\r\n                }}\r\n                isShow={infoModalRoleEdit.isShow}\r\n                info={infoModalRoleEdit.info}\r\n            />\r\n\r\n            <ModalPermission\r\n                onSave={(rightList, roleId, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/role/update-permission'\r\n                    const reqInfo = {\r\n                        RoleId: roleId,\r\n                        Rights: rightList\r\n                    }\r\n                    axios.post(url, reqInfo).then(res => {\r\n                        let data = res.data\r\n                        if (data.IsSuccess) {\r\n                            setInfoModalPer({\r\n                                isShow: false,\r\n                                info: [],\r\n                                roleId: 0\r\n                            })\r\n                            Notification.success('Phân quyền vai trò thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setInfoModalPer({\r\n                        isShow: false,\r\n                        info: [],\r\n                        roleId: 0\r\n                    })\r\n                }}\r\n                isShow={infoModalPer.isShow}\r\n                info={infoModalPer.info}\r\n                roleId={infoModalPer.roleId}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default RolePage","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\n\r\nconst filters = {\r\n    keyword: ''\r\n}\r\n\r\nfunction Filter(props) {\r\n    const { onSearch } = props\r\n\r\n    const [keyword, setKeyword] = useState('')\r\n\r\n    const handleSearch = () => {\r\n        onSearch(filters)\r\n    }\r\n\r\n    const handleClear = () => {\r\n        setKeyword('')\r\n        filters.keyword = ''\r\n        onSearch(filters)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-4 col-md-4 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <input value={keyword}\r\n                            autoFocus\r\n                            onChange={e => {\r\n                                const value = e.target.value\r\n                                setKeyword(value)\r\n                                filters.keyword = value\r\n                            }}\r\n                            onKeyDown={e => {\r\n                                if (e.key === 'Enter') {\r\n                                    handleSearch()\r\n                                }\r\n                            }}\r\n                            type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Tiêu đề\" />\r\n                    </div>\r\n                    <div className=\"col-sm-8 col-md-8 col-lg-9 col-xl-9 col-xxl-8\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={handleSearch} />\r\n                            <ClearButton onClick={handleClear} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoEllipseSharp, IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, FormatNumber, LoadingRow } from '../../../../../components'\r\n\r\nfunction Table(props) {\r\n\r\n    function renderTable() {\r\n        let data = props.data\r\n        if (data === null) return <LoadingRow colSpan={6} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n        else return data.map((item, index) => <tr key={item.PopupId}>\r\n            <td className=\"text-center\">\r\n                <FormatNumber>\r\n                    {(props.pageItem * (props.pageIndex - 1)) + index + 1}\r\n                </FormatNumber>\r\n            </td>\r\n            <td>{item.Title}</td>\r\n            <td>{renderType(item.TypeId)}</td>\r\n            <td className='text-end text-primary'>\r\n                <FormatNumber>\r\n                    {item.CountPartner}\r\n                </FormatNumber>\r\n            </td>\r\n            <td>\r\n                {item.CreatedDate}\r\n                <small className=\"text-muted\">{item.CreatedTime}</small>\r\n            </td>\r\n            <td>\r\n                <ActionRow>\r\n                    <ActionItem right=\"popup_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sửa' />\r\n                    <ActionItem right=\"popup_delete\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className='text-danger' />\r\n                </ActionRow>\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    function renderType(typeId) {\r\n        if (typeId === 1) return <><IoEllipseSharp className=\"text-info mt--3-px\" /> Cộng tác viên</>\r\n        else if (typeId === 2) return <><IoEllipseSharp className=\"text-primary mt--3-px\" /> Cộng tác viên chưa kích hoạt</>\r\n        else return <><IoEllipseSharp className=\"text-warning mt--3-px\" /> Nhóm cộng tác viên</>\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Tiêu đề</th>\r\n                        <th>Loại</th>\r\n                        <th className='text-end'>CTV nhận</th>\r\n                        <th>Ngày tạo</th>\r\n                        <th className=\"w-52-px\"></th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    onEdit: PropTypes.func,\r\n    onDelete: PropTypes.func,\r\n    data: PropTypes.array,\r\n    pageItem: PropTypes.number,\r\n    pageIndex: PropTypes.number,\r\n}\r\n\r\nTable.defaultProps = {\r\n    onEdit: () => { },\r\n    onDelete: () => { },\r\n    data: null,\r\n    pageItem: 0,\r\n    pageIndex: 0,\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport axios from 'axios'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport Select from 'react-select'\r\nimport AsyncSelect from 'react-select/async'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport { debounce } from 'lodash'\r\n\r\nconst schema = yup.object().shape({\r\n    Title: yup.string().required('Vui lòng nhập tiêu đề').max(200, 'Tiêu đề quá dài'),\r\n    PopupTypeId: yup.mixed().oneOf([1, 2, 3], 'Vui lòng chọn loại popup'),\r\n    PartnerId: yup.number().when('PopupTypeId', {\r\n        is: 1,\r\n        then: yup.number().required('Vui lòng chọn cộng tác viên')\r\n    }),\r\n    GroupId: yup.number().when('PopupTypeId', {\r\n        is: 3,\r\n        then: yup.number().required('Vui lòng chọn nhóm cộng tác viên')\r\n    }),\r\n    Content: yup.string().required('Vui lòng nhập nội dung').max(4_000, 'Nội dung quá dài')\r\n})\r\n\r\nconst poupTypes = [\r\n    { value: 0, label: 'Loại popup' },\r\n    { value: 1, label: 'Cộng tác viên' },\r\n    { value: 2, label: 'Cộng tác viên chưa kích hoạt' },\r\n    { value: 3, label: 'Nhóm cộng tác viên' }\r\n]\r\n\r\nconst loadOptions = (inputValue, callback) => {\r\n    const url = `/admin/partner/dropdown-filter?keyword=${inputValue}&pageItem=5&pageIndex=1`\r\n    axios.get(url).then(({ data }) => {\r\n        if (data.IsSuccess) {\r\n            let partnerLst = data.Result.Data.map(item => {\r\n                return {\r\n                    value: item.PartnerId,\r\n                    label: item.FullName + ` (${item.Email})`\r\n                }\r\n            })\r\n            callback(partnerLst)\r\n        }\r\n    })\r\n}\r\n\r\nconst ModalAdd = props => {\r\n    const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [popupType, setPopupType] = useState(0)\r\n\r\n    const [isShowCTV, setIsShowCTV] = useState(false)\r\n\r\n    const [isShowGroup, setIsShowGroup] = useState(false)\r\n\r\n    useEffect(() => {\r\n        if (popupType !== 0) {\r\n            switch (popupType) {\r\n                case 1:\r\n                    setIsShowCTV(true)\r\n                    setIsShowGroup(false)\r\n                    break\r\n                case 2:\r\n                    setIsShowCTV(false)\r\n                    setIsShowGroup(false)\r\n                    break\r\n                default: // 3\r\n                    setIsShowCTV(false)\r\n                    setIsShowGroup(true)\r\n                    break\r\n            }\r\n        }\r\n        else {\r\n            setIsShowCTV(false)\r\n            setIsShowGroup(false)\r\n        }\r\n    }, [popupType])\r\n\r\n    const renderPartner = () => {\r\n        if (isShowCTV) {\r\n            return <div className=\"relative-position mb-2\">\r\n                <label className=\"form-label\">Cộng tác viên <span className=\"text-danger\">*</span></label>\r\n                <AsyncSelect\r\n                    className=\"react-select-container\"\r\n                    classNamePrefix=\"custom-select\"\r\n                    placeholder='Cộng tác viên'\r\n                    cacheOptions\r\n                    defaultOptions\r\n                    loadOptions={debounce(loadOptions, 250)}\r\n                    onChange={item => setValue('PartnerId', item.value)}\r\n                    loadingMessage={() => \"Đang tìm kiếm\"}\r\n                    noOptionsMessage={() => \"Không tìm thấy dữ liệu\"}\r\n                />\r\n                {errors.PartnerId && <div className=\"validation-message\">{errors.PartnerId.message}</div>}\r\n            </div>\r\n        }\r\n    }\r\n\r\n    const renderGroup = () => {\r\n        if (isShowGroup) {\r\n            const partnerGroup = props.partnerGroup.map(item => {\r\n                return {\r\n                    value: item.GroupId,\r\n                    label: item.GroupName\r\n                }\r\n            })\r\n            return <div className=\"relative-position mb-2\">\r\n                <label className=\"form-label\">Nhóm cộng tác viên <span className=\"text-danger\">*</span></label>\r\n                <Select\r\n                    className=\"react-select-container\"\r\n                    classNamePrefix=\"custom-select\"\r\n                    defaultValue={partnerGroup[0]}\r\n                    isSearchable={false}\r\n                    options={partnerGroup}\r\n                    onChange={item => {\r\n                        setValue('GroupId', item.value)\r\n                    }}\r\n                />\r\n            </div>\r\n        }\r\n    }\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true}\r\n            onExited={() => {\r\n                reset()\r\n                setIsShowCTV(false)\r\n                setIsShowGroup(false)\r\n            }}\r\n            onShow={() => {\r\n                setValue(\"PopupTypeId\", 0)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới popup</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tiêu đề <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('Title')} type=\"text\" className=\"form-control\" placeholder=\"Tiêu đề\" />\r\n                        {errors.Title && <div className=\"validation-message\">{errors.Title.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Loại popup <span className=\"text-danger\">*</span></label>\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            defaultValue={poupTypes[0]}\r\n                            isSearchable={false}\r\n                            options={poupTypes}\r\n                            onChange={item => {\r\n                                setPopupType(item.value)\r\n                                setValue(\"PopupTypeId\", item.value)\r\n                            }}\r\n                        />\r\n                        {errors.PopupTypeId && <div className=\"validation-message\">{errors.PopupTypeId.message}</div>}\r\n                    </div>\r\n                    {renderPartner()}\r\n                    {renderGroup()}\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Nội dung <span className=\"text-danger\">*</span></label>\r\n                        <textarea {...register('Content')} rows=\"3\" className=\"form-control\" placeholder=\"Nội dung\"></textarea>\r\n                        {errors.Content && <div className=\"validation-message\">{errors.Content.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    partnerGroup: PropTypes.array\r\n}\r\n\r\nModalAdd.defaultPropts = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    partnerGroup: []\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    Title: yup.string().required('Vui lòng nhập tiêu đề').max(200, 'Tiêu đề quá dài'),\r\n    Content: yup.string().required('Vui lòng nhập nội dung').max(4_000, 'Nội dung quá dài')\r\n})\r\n\r\nconst ModalEdit = props => {\r\n    const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true}\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                let info = props.info\r\n                setValue('PopupId', info.PopupId)\r\n                setValue('Title', info.Title)\r\n                setValue('Content', info.Content)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa popup</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tiêu đề <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('Title')} type=\"text\" className=\"form-control\" placeholder=\"Tiêu đề\" />\r\n                        {errors.Title && <div className=\"validation-message\">{errors.Title.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Nội dung <span className=\"text-danger\">*</span></label>\r\n                        <textarea {...register('Content')} rows=\"3\" className=\"form-control\" placeholder=\"Nội dung\"></textarea>\r\n                        {errors.Content && <div className=\"validation-message\">{errors.Content.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    info: PropTypes.object\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    info: {}\r\n}\r\n\r\nexport default ModalEdit\r\n\r\n","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { IconButton, Notification, Pagination, AuthAdminView } from './../../../components'\r\nimport { Filter, Table, ModalAdd, ModalEdit } from './components'\r\n\r\nfunction PopupPage(props) {\r\n    const [popupList, setPopupList] = useState(null)\r\n\r\n    const [isShowModalPopupAdd, setIsShowModalPopupAdd] = useState(false)\r\n\r\n    const [partnerGoupList, setPartnerGroupList] = useState([])\r\n\r\n    const [popupEditInfo, setPopupEditInfo] = useState({\r\n        isShow: false,\r\n        info: {}\r\n    })\r\n\r\n    const [filters, setFilters] = useState({\r\n        keyword: '',\r\n        pageItem: 10,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [pagination, setPagination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1\r\n    })\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Popup'\r\n        loadPartnerGroup()\r\n    }, [])\r\n\r\n    useEffect(() => {\r\n        const url = `/admin/popup/filter?keyword=${filters.keyword}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n        axios.get(url).then(res => {\r\n            let data = res.data\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex\r\n                }\r\n                setPagination(newPagination)\r\n                setPopupList(data.Result.Data)\r\n            }\r\n        })\r\n    }, [filters])\r\n\r\n    const loadPartnerGroup = () => {\r\n        const url = '/admin/partner-group/get-all'\r\n        axios.get(url).then(res => {\r\n            const data = res.data\r\n            if (data.IsSuccess) {\r\n                setPartnerGroupList(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const reloadPopup = () => {\r\n        setFilters({\r\n            ...filters,\r\n            pageIndex: 1\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <Filter\r\n                onSearch={params => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params,\r\n                        pageIndex: 1\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n            />\r\n\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"row\">\r\n                        <div className=\"col-12\">\r\n                            <AuthAdminView right=\"popup_add\">\r\n                                <IconButton\r\n                                    className=\"mb-2\"\r\n                                    text=\"Thêm mới\"\r\n                                    icon={<IoAddCircleOutline />}\r\n                                    onClick={() => {\r\n                                        setIsShowModalPopupAdd(true)\r\n                                    }} />\r\n                            </AuthAdminView>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <Table\r\n                        pageItem={filters.pageItem}\r\n                        pageIndex={filters.pageIndex}\r\n                        onEdit={item => {\r\n                            const url = `/admin/popup/get-by-id?popupId=${item.PopupId}`\r\n                            axios.get(url).then(res => {\r\n                                const data = res.data\r\n                                if (data.IsSuccess) {\r\n                                    setPopupEditInfo({\r\n                                        isShow: true,\r\n                                        info: data.Result\r\n                                    })\r\n                                }\r\n                            })\r\n                        }}\r\n                        onDelete={item => {\r\n                            Notification.confirmHtml('Bạn có chắc muốn xóa popup', item.Title, () => {\r\n                                const url = `/admin/popup/delete?popupId=${item.PopupId}`\r\n                                axios.post(url).then(res => {\r\n                                    const data = res.data\r\n                                    if (data.IsSuccess) {\r\n                                        reloadPopup()\r\n                                        Notification.success('Xóa popup thành công')\r\n                                    }\r\n                                })\r\n                            })\r\n                        }}\r\n                        data={popupList}\r\n                    />\r\n                    <Pagination\r\n                        totalPage={pagination.totalPage}\r\n                        currentPage={pagination.pageIndex}\r\n                        onPageChange={(pIndex) => {\r\n                            const newPagination = { ...pagination, pageIndex: pIndex }\r\n                            setPagination(newPagination)\r\n                            const newFilters = {\r\n                                ...filters,\r\n                                pageIndex: pIndex\r\n                            }\r\n                            setFilters(newFilters)\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n\r\n            <ModalAdd\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/popup/create'\r\n                    axios.post(url, formData).then(res => {\r\n                        let data = res.data\r\n                        if (data.IsSuccess) {\r\n                            reloadPopup()\r\n                            setIsShowModalPopupAdd(false)\r\n                            Notification.success('Thêm mới popup thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalPopupAdd(false)\r\n                }}\r\n                isShow={isShowModalPopupAdd}\r\n                partnerGroup={partnerGoupList}\r\n            />\r\n\r\n            <ModalEdit\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/admin/popup/update'\r\n                    axios.post(url, formData).then(res => {\r\n                        const data = res.data\r\n                        if (data.IsSuccess) {\r\n                            reloadPopup()\r\n                            setPopupEditInfo({\r\n                                isShow: false,\r\n                                info: {}\r\n                            })\r\n                            Notification.success('Chỉnh sửa popup thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setPopupEditInfo({\r\n                        isShow: false,\r\n                        info: {}\r\n                    })\r\n                }}\r\n                isShow={popupEditInfo.isShow}\r\n                info={popupEditInfo.info}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default PopupPage","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    FullName: yup.string().required('Vui lòng nhập họ tên').max(100, 'Họ tên quá dài'),\r\n    Email: yup.string().required('Vui lòng nhập email').max(70, 'Email quá dài').email('Email không đúng'),\r\n    Phone: yup.string().required('Vui lòng nhập số điện thoại').max(20, 'Số điện thoại quá dài')\r\n})\r\n\r\nconst Profile = props => {\r\n    const { register, handleSubmit, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    useEffect(() => {\r\n        const data = props.data\r\n        const fields = ['FullName', 'Email', 'Phone']\r\n        fields.forEach(item => {\r\n            setValue(item, data[item])\r\n        })\r\n        // eslint-disable-next-line\r\n    }, [props.data])\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <div className=\"card-body\">\r\n                    <h5 className=\"card-title mb-2\">Chỉnh sửa thông tin</h5>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Họ tên <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Họ tên\" />\r\n                        {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Email <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('Email')} type=\"text\" className=\"form-control\" placeholder=\"Email\" />\r\n                        {errors.Email && <div className=\"validation-message\">{errors.Email.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Điện thoại <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Điện thoại\" />\r\n                        {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n                    </div>\r\n                </div>\r\n                <div className=\"card-footer\">\r\n                    <SaveButton isBusy={isBusy} />\r\n                </div>\r\n            </form>\r\n        </div>\r\n    )\r\n}\r\n\r\nProfile.propTypes = {\r\n    onSave: PropTypes.func,\r\n    data: PropTypes.object\r\n}\r\n\r\nProfile.defaultProps = {\r\n    onSave: () => { },\r\n    data: {}\r\n}\r\n\r\nexport default Profile","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    CurrentPassword: yup.string().required('Vui lòng nhập mật khẩu hiện tại').max(70, 'Mật khẩu hiện tại quá dài'),\r\n    NewPassword: yup.string().required('Vui lòng nhập mật khẩu mới').max(70, 'Mật khẩu mới quá dài'),\r\n    NewPasswordConfirm: yup.string().required('Vui lòng nhập lại mật khẩu mới').max(70, 'Nhập lại mật khẩu mới quá dài')\r\n        .oneOf([yup.ref('NewPassword')], 'Nhập lại mật khẩu không chính xác')\r\n})\r\n\r\nconst Password = props => {\r\n    const { register, reset, handleSubmit, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, () => {\r\n                    reset()\r\n                }, setIsBusy)\r\n            })}>\r\n                <div className=\"card-body\">\r\n                    <h5 className=\"card-title mb-2\">Đổi mật khẩu</h5>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Mật khẩu hiện tại <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('CurrentPassword')} type=\"password\" className=\"form-control\" placeholder=\"Mật khẩu hiện tại\" />\r\n                        {errors.CurrentPassword && <div className=\"validation-message\">{errors.CurrentPassword.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Mật khẩu mới <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('NewPassword')} type=\"password\" className=\"form-control\" placeholder=\"Mật khẩu mới\" />\r\n                        {errors.NewPassword && <div className=\"validation-message\">{errors.NewPassword.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Nhập lại mật khẩu mới <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('NewPasswordConfirm')} type=\"password\" className=\"form-control\" placeholder=\"Nhập lại mật khẩu mới\" />\r\n                        {errors.NewPasswordConfirm && <div className=\"validation-message\">{errors.NewPasswordConfirm.message}</div>}\r\n                    </div>\r\n                </div>\r\n                <div className=\"card-footer\">\r\n                    <SaveButton isBusy={isBusy} title=\"Đổi mật khẩu\" />\r\n                </div>\r\n            </form>\r\n        </div>\r\n    )\r\n}\r\n\r\nPassword.propTypes = {\r\n    onSave: PropTypes.func\r\n}\r\n\r\nPassword.defaultProps = {\r\n    onSave: () => { }\r\n}\r\n\r\nexport default Password","import axios from 'axios'\r\nimport React, { useEffect, useState, useContext } from 'react'\r\nimport { Notification, AuthAdminView, AppContext } from '../../../components'\r\nimport { Password, Profile } from './components'\r\n\r\nconst UserInfoPage = props => {\r\n    const appSettings = useContext(AppContext)\r\n\r\n    const [userInfo, setUserInfo] = useState({})\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Thông tin cá nhân'\r\n        loadUserInfo()\r\n    }, [])\r\n\r\n    const loadUserInfo = () => {\r\n        const url = '/admin/user/profile-detail'\r\n        axios.get(url).then(res => {\r\n            const data = res.data\r\n            if (data.IsSuccess) {\r\n                setUserInfo(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    return (\r\n        <div className=\"row\">\r\n            <AuthAdminView right=\"account_edit_profile\">\r\n                <div className=\"col-md-6\">\r\n                    <Profile\r\n                        onSave={(formData, setIsBusy) => {\r\n                            setIsBusy(true)\r\n                            const url = '/admin/user/update-profile'\r\n                            axios.post(url, formData).then(res => {\r\n                                let data = res.data\r\n                                if (data.IsSuccess) {\r\n                                    appSettings.setAdminFullName(formData.FullName)\r\n                                    localStorage.setItem('a-fullName', formData.FullName)\r\n                                    appSettings.setAdminAvatarUrl(formData.AvatarUrl)\r\n                                    localStorage.setItem('a-avatarUrl', formData.AvatarUrl)\r\n                                    Notification.success('Thay đổi thông tin thành công')\r\n                                }\r\n                                setIsBusy(false)\r\n                            })\r\n                        }}\r\n                        data={userInfo}\r\n                    />\r\n                </div>\r\n            </AuthAdminView>\r\n            <AuthAdminView right=\"account_change_password\">\r\n                <div className=\"col-md-6\">\r\n                    <Password\r\n                        onSave={(formData, callBack, setIsBusy) => {\r\n                            setIsBusy(true)\r\n                            const url = '/admin/user/change-password'\r\n                            axios.post(url, formData).then(res => {\r\n                                let data = res.data\r\n                                if (data.IsSuccess) {\r\n                                    Notification.success('Thay đổi mật khẩu thành công')\r\n                                    callBack()\r\n                                }\r\n                                setIsBusy(false)\r\n                            })\r\n                        }}\r\n                    />\r\n                </div>\r\n            </AuthAdminView>\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default UserInfoPage","import { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport axios from \"axios\";\r\nimport React, { useState } from \"react\";\r\nimport { Controller, useForm } from \"react-hook-form\";\r\nimport NumberFormat from \"react-number-format\";\r\nimport * as yup from \"yup\";\r\nimport { SaveButton, Notification } from \"../../../../../components\";\r\nimport { useEffect } from \"react\";\r\n\r\nconst invalidValue = \"Giá trị không hợp lệ\";\r\n\r\nconst schema = yup.object().shape({\r\n  AffAmount: yup\r\n    .number()\r\n    .required(\"Vui lòng nhập giá bán\")\r\n    .min(0, invalidValue)\r\n    .max(2_000_000_000, invalidValue),\r\n});\r\n\r\nexport default function SettingAffiliate(props) {\r\n  const {\r\n    control,\r\n    handleSubmit,\r\n    setValue,\r\n    formState: { errors },\r\n  } = useForm({\r\n    resolver: yupResolver(schema),\r\n    defaultValues: {\r\n      AffAmount: 0,\r\n    },\r\n  });\r\n\r\n  const { setting } = props;\r\n\r\n  const [isBusy, setIsBusy] = useState(false);\r\n\r\n  useEffect(() => {\r\n    if (setting !== null) {\r\n      setValue('AffAmount', setting.AffAmount);\r\n    }\r\n    // eslint-disable-next-line\r\n  }, [setting]);\r\n\r\n  return (\r\n    <div className=\"card\">\r\n      {/* Begin form */}\r\n      <form\r\n        onSubmit={handleSubmit((formData) => {\r\n          setIsBusy(true);\r\n          const url = \"/admin/setting/update-aff\";\r\n          axios\r\n            .post(url, formData)\r\n            .then(({ data }) => {\r\n              if (data.IsSuccess) {\r\n                Notification.success(\"Chỉnh sửa cấu hình affiliate thành công\");\r\n                // reset();\r\n              }\r\n            })\r\n            .finally(() => setIsBusy(false));\r\n        })}\r\n      >\r\n        <div className=\"card-body\">\r\n          <h5 className=\"card-title\">Cấu affiliate</h5>\r\n          <div className=\"row\">\r\n            <div className=\"col-12 col-sm-6 col-md-6 col-lg-6 col-xl-4 position-relative\">\r\n              <label className=\"form-label\">\r\n                Tiền thưởng <span className=\"text-danger\">*</span>\r\n              </label>\r\n              <div className=\"input-group\">\r\n                <Controller\r\n                  name=\"AffAmount\"\r\n                  control={control}\r\n                  render={({ field }) => {\r\n                    return (\r\n                      <NumberFormat\r\n                        {...field}\r\n                        className=\"form-control\"\r\n                        // thousandSeparator={\".\"}\r\n                        // decimalSeparator={\",\"}\r\n                        allowNegative={false}\r\n                        defaultValue={0}\r\n                        onValueChange={(c) => {\r\n                          field.onChange(c.value);\r\n                        }}\r\n                        decimalScale={0}\r\n                      />\r\n                    );\r\n                  }}\r\n                />\r\n                <span className=\"input-group-text\">VNĐ</span>\r\n              </div>\r\n              {errors.AffAmount && (\r\n                <div className=\"validation-message\">\r\n                  {errors.AffAmount.message}\r\n                </div>\r\n              )}\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div className=\"card-footer\">\r\n          <div className=\"button-list\">\r\n            <SaveButton type=\"submit\" isBusy={isBusy} />\r\n          </div>\r\n        </div>\r\n      </form>\r\n      {/* End form */}\r\n    </div>\r\n  );\r\n}\r\n","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport { IoClose } from 'react-icons/io5'\r\nimport ReactQuill from 'react-quill'\r\nimport 'react-quill/dist/quill.snow.css'\r\nimport * as yup from \"yup\"\r\nimport { Config, IconButton, InputSelect, Notification, SaveButton } from '../../../components'\r\nimport { SettingAffiliate } from './components'\r\n\r\nconst statusOptions = [\r\n    {\r\n        value: 1,\r\n        label: 'Hoạt động'\r\n    },\r\n    {\r\n        value: 2,\r\n        label: 'Tạm khóa'\r\n    }\r\n]\r\n\r\nconst emailStatusOptions = [\r\n    { value: 1, label: 'Gửi email' },\r\n    { value: 2, label: 'Không gửi' }\r\n]\r\n\r\nconst schema = yup.object().shape({\r\n    EmailToAddress: yup.string().max(100, 'Địa chỉ email quá dài').email('Email không đúng định dạng'),\r\n    SendingEmailStatusId: yup.number(),\r\n    EmailSubject: yup.string().max(100, 'Chủ đề email quá dài')\r\n})\r\n\r\nfunction SettingPage(props) {\r\n    const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [content, setContent] = useState('')\r\n\r\n    const [status, setStatus] = useState(0)\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [isBusyEmail, setIsBusyEmail] = useState(false)\r\n\r\n    const [setting, setSetting] = useState(null)\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Cấu hình'\r\n        loadSetting()\r\n\r\n        // eslint-disable-next-line\r\n    }, [])\r\n\r\n    const loadSetting = () => {\r\n        const url = '/admin/setting/get-all'\r\n        axios.get(url).then(res => {\r\n            const data = res.data\r\n            if (data.IsSuccess) {\r\n                setContent(data.Result.Message)\r\n                const resStatus = statusOptions.filter(x => x.value === data.Result.StatusId)[0]?.value ?? 2\r\n                setStatus(resStatus)\r\n\r\n                setSetting(data.Result)\r\n\r\n                setValue('EmailSubject', data.Result.EmailSubject)\r\n                setValue('EmailToAddress', data.Result.EmailToAddress)\r\n                setValue('SendingEmailStatusId', data.Result.SendingEmailStatusId)\r\n            }\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <h5 className=\"card-title\">Cấu hình Thông báo</h5>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Nội dung thông báo</label>\r\n                        <ReactQuill\r\n                            value={content}\r\n                            modules={Config.editorCfg}\r\n                            onChange={setContent}\r\n                        />\r\n                    </div>\r\n                    <div className=\"row\">\r\n                        <div className=\"col-sm-12 col-md-12 col-lg-6 col-xl-5 col-xxl-4\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Trạng thái</label>\r\n                                <InputSelect\r\n                                    name=\"msg-status\"\r\n                                    variant='success'\r\n                                    options={statusOptions}\r\n                                    value={status}\r\n                                    onChange={val => {\r\n                                        setStatus(val)\r\n                                    }}\r\n                                />\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div className=\"card-footer\">\r\n                    <div className=\"button-list\">\r\n                        <SaveButton\r\n                            isBusy={isBusy}\r\n                            onClick={() => {\r\n                                setIsBusy(true)\r\n                                const url = '/admin/setting/update'\r\n                                axios.post(url, {\r\n                                    Message: content,\r\n                                    StatusId: status\r\n                                }).then(res => {\r\n                                    const data = res.data\r\n                                    if (data.IsSuccess) {\r\n                                        Notification.success('Chỉnh sửa cấu hình thông báo thành công')\r\n                                    }\r\n                                    setIsBusy(false)\r\n                                })\r\n                            }} />\r\n                        <IconButton onClick={() => {\r\n                            setStatus(statusOptions[1])\r\n                            setContent('')\r\n                        }} text=\"Xóa hết\" variant=\"warning\" icon={<IoClose />} />\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <div className=\"card\">\r\n                <form onSubmit={handleSubmit(formData => {\r\n                    setIsBusyEmail(true)\r\n                    const url = '/admin/setting/update-email'\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            Notification.success('Chỉnh sửa cấu hình email thành công')\r\n                            reset();\r\n                        }\r\n                        setIsBusyEmail(false)\r\n                    })\r\n                })}>\r\n                    <div className=\"card-body\">\r\n                        <h5 className=\"card-title\">Cấu hình email</h5>\r\n                        <div className=\"row gy-2\">\r\n                            <div className=\"col-12 col-sm-6 col-md-6 col-lg-6 col-xl-4 position-relative\">\r\n                                <label className=\"form-label\">Email nhận</label>\r\n                                <input {...register('EmailToAddress')} type=\"text\" className=\"form-control\" placeholder=\"Email nhận\" />\r\n                                {errors.EmailToAddress && <div className=\"validation-message\">{errors.EmailToAddress.message}</div>}\r\n                            </div>\r\n                            <div className=\"col-12 col-sm-6 col-md-6 col-lg-6 col-xl-4 position-relative\">\r\n                                <label className=\"form-label\">Chủ đề email</label>\r\n                                <input {...register('EmailSubject')} type=\"text\" className=\"form-control\" placeholder=\"Chủ đề email\" />\r\n                                {errors.EmailSubject && <div className=\"validation-message\">{errors.EmailSubject.message}</div>}\r\n                            </div>\r\n                            <div className=\"col-12 col-sm-12 col-md-12 col-lg-12 col-xl-4 position-relative\">\r\n                                <label className=\"form-label\">Trạng thái</label>\r\n                                <Controller\r\n                                    control={control}\r\n                                    name=\"SendingEmailStatusId\"\r\n                                    render={({\r\n                                        field: { onChange, value }\r\n                                    }) => (\r\n                                        <InputSelect\r\n                                            name=\"email-status\"\r\n                                            variant='success'\r\n                                            options={emailStatusOptions}\r\n                                            value={value}\r\n                                            onChange={val => {\r\n                                                onChange(val)\r\n                                            }}\r\n                                        />\r\n                                    )}\r\n                                />\r\n\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"card-footer\">\r\n                        <div className=\"button-list\">\r\n                            <SaveButton\r\n                                type=\"submit\"\r\n                                isBusy={isBusyEmail}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                </form>\r\n            </div>\r\n\r\n            <SettingAffiliate setting={setting} />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default SettingPage","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoCloudDownloadOutline, IoSaveOutline } from 'react-icons/io5'\r\nimport { useHistory } from 'react-router-dom'\r\nimport {\r\n    CloseButton, EmptyRow, FormatNumber, IconButton, LoadingRow, Notification, ProductStatus, ReadExcelButton, UploadProductImg\r\n} from './../../../components'\r\n\r\nconst downloadFile = (data) => {\r\n    const downloadUrl = window.URL.createObjectURL(new Blob([data]))\r\n    const link = document.createElement('a')\r\n    link.href = downloadUrl\r\n    link.setAttribute('download', 'ProductExport.xlsx')\r\n    document.body.appendChild(link)\r\n    link.click()\r\n    link.remove()\r\n}\r\n\r\nfunction renderGroupPrice(groups) {\r\n    return groups.map((item, index) => {\r\n        const mbClass = groups.length - 1 === index ? 'mb-0' : 'mb-1'\r\n        return (\r\n            <p key={item.GroupId} className={mbClass}>{item.GroupName} <span className=\"text-primary float-end\"><FormatNumber>{item.UnitPrice}</FormatNumber></span></p>\r\n        )\r\n    })\r\n}\r\n\r\nfunction ProductFromExcel(props) {\r\n    const history = useHistory()\r\n\r\n    const [products, setProducts] = useState([])\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Thêm mới sản phẩm từ file excel'\r\n    }, [])\r\n\r\n    function onUploadComplete(product, imgInfo) {\r\n        if (imgInfo.IsSuccess) {\r\n            const imgUrl = imgInfo.Result.ImageUrl\r\n            if (product.IsParent) {\r\n                const newProducts = [...products]\r\n                const parentIndex = newProducts.findIndex(n => n.Id === product.Id)\r\n                newProducts[parentIndex].AvatarUrl = imgUrl\r\n\r\n                const children = newProducts.filter(n => n.ParentId === product.Id)\r\n                children.forEach(child => {\r\n                    const childIndex = newProducts.findIndex(n => n.Id === child.Id)\r\n                    newProducts[childIndex].AvatarUrl = imgUrl\r\n                })\r\n                setProducts(newProducts)\r\n            }\r\n            else {\r\n                const newProducts = [...products]\r\n                const index = newProducts.findIndex(n => n.Id === product.Id)\r\n                newProducts[index].AvatarUrl = imgUrl\r\n                setProducts(newProducts)\r\n            }\r\n        }\r\n    }\r\n\r\n    function renderTable() {\r\n        if (products === null) return <LoadingRow colSpan={6} />\r\n        else if (products.length === 0) return <EmptyRow colSpan={6} />\r\n        else return products.map((item, index) => <tr key={index}>\r\n            <td className=\"text-center\">{index + 1}</td>\r\n            <td>{item.ProductCode}</td>\r\n            <td>{item.SupplierProductCode}</td>\r\n            <td>\r\n                <div className=\"d-flex flex-row align-items-center\">\r\n                    <UploadProductImg\r\n                        imgUrl={item.AvatarUrl}\r\n                        onCompleted={(data) => onUploadComplete(item, data)}\r\n                    />\r\n                    <div className=\"d-flex flex-column flex-fill\">\r\n                        <p className={item.IsParent ? 'mb-1 text-primary' : 'mb-1'}>{item.ProductName}</p>\r\n                        <p className=\"mb-0 d-block\">\r\n                            Bán lẻ: <span className=\"text-primary\"><FormatNumber>{item.OutputPrice}</FormatNumber></span>\r\n                            <span className=\"float-end\">Danh mục: <span className=\"text-success\">{item.CategoryName}</span></span>\r\n                        </p>\r\n                    </div>\r\n\r\n                </div>\r\n            </td>\r\n            <td>\r\n                {renderGroupPrice(item.PartnerGroupPrices)}\r\n            </td>\r\n            <td>\r\n                <ProductStatus\r\n                    statusId={item.StatusId}\r\n                />\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"button-list\">\r\n                        <IconButton\r\n                            icon={<IoCloudDownloadOutline />}\r\n                            variant=\"info\"\r\n                            text=\"Tải file mẫu\"\r\n                            onClick={(setIsBusy) => {\r\n                                setIsBusy(true)\r\n                                const url = '/admin/product/import-template'\r\n                                axios.get(url, { responseType: 'blob' }).then(({ data }) => {\r\n                                    downloadFile(data)\r\n                                    setIsBusy(false)\r\n                                })\r\n                            }}\r\n                        />\r\n                        <ReadExcelButton\r\n                            variant=\"success\"\r\n                            onCompleted={(data) => {\r\n                                if (data.IsSuccess) {\r\n                                    const url = '/admin/product/generate-import'\r\n                                    axios.post(url, {\r\n                                        Json: JSON.stringify(data.Result)\r\n                                    }).then(res => {\r\n                                        if (res.data.IsSuccess) {\r\n                                            setProducts(res.data.Result)\r\n                                        }\r\n                                    })\r\n                                }\r\n                            }}\r\n                        />\r\n                        <IconButton\r\n                            icon={<IoSaveOutline />}\r\n                            text=\"Lưu\"\r\n                            onClick={(setIsBusy) => {\r\n                                if (products.length === 0) {\r\n                                    Notification.warning('Vui lòng chọn file excel (.xlsx) có chứa dữ liệu theo mẫu')\r\n                                    return\r\n                                }\r\n                                Notification.confirm('Bạn có chắc chắn muốn thêm sản phẩm không?', () => {\r\n                                    setIsBusy(true)\r\n                                    const formData = products.filter(n => n.IsParent).map(item => {\r\n                                        return {\r\n                                            ProductName: item.ProductName,\r\n                                            ProductCode: item.ProductCode,\r\n                                            SupplierProductCode: item.SupplierProductCode,\r\n                                            CategoryId: item.CategoryId,\r\n                                            InputPrice: 0,\r\n                                            OutputPrice: item.OutputPrice,\r\n                                            StatusId: item.StatusId,\r\n                                            Detail: item.Detail,\r\n                                            AvatarUrl: item.AvatarUrl,\r\n                                            ProductPrices: item.PartnerGroupPrices.map(group => {\r\n                                                return {\r\n                                                    GroupId: group.GroupId,\r\n                                                    UnitPrice: group.UnitPrice\r\n                                                }\r\n                                            }),\r\n                                            SubProducts: products.filter(n => !n.IsParent).map(n => {\r\n                                                return {\r\n                                                    ChildrentAttributes: n.AttributeList,\r\n                                                    ExtensionName: n.ExtensionName,\r\n                                                    Quantity: 0\r\n                                                }\r\n                                            }),\r\n                                            ProductChildrentAttribute: item.AttributeList\r\n                                        }\r\n                                    })\r\n                                    const url = '/admin/product/import-create'\r\n                                    axios.post(url, {\r\n                                        ProductList: formData\r\n                                    }).then(({ data }) => {\r\n                                        if (data.IsSuccess) {\r\n                                            Notification.success('Thêm mới sản phẩm từ file excel thành công')\r\n                                            history.replace('/admin/product')\r\n                                        }\r\n                                        setIsBusy(false)\r\n                                    })\r\n                                })\r\n                            }}\r\n                        />\r\n                        <CloseButton\r\n                            onClick={() => {\r\n                                history.replace('/admin/product')\r\n                            }}\r\n                        />\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"table-responsive\">\r\n                        <table className=\"table table-centered table-avatar mb-0\">\r\n                            <thead>\r\n                                <tr>\r\n                                    <th className=\"w-52-px\">#</th>\r\n                                    <th>Mã SP</th>\r\n                                    <th>Mã SP NCC</th>\r\n                                    <th>Tên sản phẩm</th>\r\n                                    <th>Giá theo nhóm CTV</th>\r\n                                    <th>Trạng thái</th>\r\n                                </tr>\r\n                            </thead>\r\n                            <tbody>\r\n                                {renderTable()}\r\n                            </tbody>\r\n                        </table>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nProductFromExcel.propTypes = {\r\n\r\n}\r\n\r\nProductFromExcel.defaultProps = {\r\n\r\n}\r\n\r\nexport default ProductFromExcel","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport axios from 'axios'\r\nimport React, { useEffect, useState, useContext } from 'react'\r\nimport { useForm } from 'react-hook-form'\r\nimport { IoKeyOutline } from 'react-icons/io5'\r\nimport { useHistory, useLocation } from 'react-router-dom'\r\nimport * as yup from \"yup\"\r\nimport { SaveButton, AppContext, Config } from './../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    UserName: yup.string().required('Vui lòng nhập tài khoản').max(70, 'Địa chỉ email quá dài'),\r\n    Password: yup.string().required('Vui lòng nhập mật khẩu').max(70, 'Mật khẩu quá dài')\r\n})\r\n\r\nfunction LoginPage(props) {\r\n    const { register, handleSubmit, setFocus, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [message, setMessage] = useState('')\r\n\r\n    const history = useHistory()\r\n\r\n    const [isBusy, setIsBusy] = useState(() => {\r\n        const a_token = localStorage.getItem('a-token')\r\n        if (a_token === null || a_token === '') return false\r\n        else return true\r\n    })\r\n\r\n    let location = useLocation();\r\n\r\n    let { from } = location.state || { from: { pathname: \"/admin/dashboard\" } };\r\n\r\n    const appSettings = useContext(AppContext)\r\n\r\n    const setInfo = (data) => {\r\n        localStorage.setItem('a-right', data.Result.Rights)\r\n        localStorage.setItem('a-roleName', data.Result.RoleName)\r\n        localStorage.setItem('a-fullName', data.Result.FullName)\r\n        localStorage.setItem('a-token', data.Result.Token)\r\n        localStorage.setItem('a-avatarUrl', data.Result.AvatarUrl)\r\n        axios.defaults.headers.common['A-Token'] = data.Result.Token\r\n\r\n        const rights = data.Result.Rights.split(';')\r\n        appSettings.setRights(rights)\r\n\r\n        appSettings.setAdminFullName(data.Result.FullName)\r\n        appSettings.setAdminAvatarUrl(data.Result.AvatarUrl)\r\n        appSettings.setAdminRole(data.Result.RoleName)\r\n    }\r\n\r\n    useEffect(() => {\r\n        setFocus('UserName')\r\n    }, [setFocus])\r\n\r\n    useEffect(() => {\r\n        const a_token = localStorage.getItem('a-token')\r\n        if (a_token !== null && a_token !== '') {\r\n            const url = '/admin/user/login-token'\r\n            axios.post(url).then(({ data }) => {\r\n                if (data.IsSuccess) {\r\n                    setInfo(data)\r\n                    history.replace(from);\r\n                }\r\n                else {\r\n                    setIsBusy(false)\r\n                }\r\n            })\r\n        }\r\n        else {\r\n            setIsBusy(false)\r\n        }\r\n\r\n        // eslint-disable-next-line\r\n    }, [])\r\n\r\n    const onLogin = (formData) => {\r\n        setIsBusy(true)\r\n        const url = '/admin/user/login'\r\n        axios.post(url, formData).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setInfo(data)\r\n                history.replace(from)\r\n            }\r\n            else {\r\n                if (data.Message !== '' || data.Message !== null) {\r\n                    setMessage(data.Message)\r\n                    setTimeout(() => {\r\n                        setMessage('')\r\n                    }, 3_000)\r\n                }\r\n            }\r\n            setIsBusy(false)\r\n        })\r\n    }\r\n\r\n    return (\r\n        <div className=\"authentication-bg\">\r\n\r\n            <div className=\"account-pages mb-5\" style={{ marginTop: '7.5rem' }}>\r\n                <div className=\"container\">\r\n                    <div className=\"row justify-content-center\">\r\n                        <div className=\"col-xxl-4 col-lg-5\">\r\n                            <div className=\"card\">\r\n\r\n                                <div className=\"card-header pt-3 pb-3 text-center bg-light\">\r\n                                    <span>\r\n                                        <span><img src=\"/assets/images/logo-dark.png\" alt=\"Logo\" height={Config.adminLoginLogoHeight} /></span>\r\n                                    </span>\r\n                                </div>\r\n\r\n                                <div className=\"card-body p-4\">\r\n\r\n                                    <div className=\"text-center w-75 m-auto\">\r\n                                        <h4 className=\"text-dark-50 text-center mt-0 font-weight-bold\">Đăng nhập</h4>\r\n                                    </div>\r\n\r\n                                    <form onSubmit={handleSubmit(formData => onLogin(formData))}>\r\n\r\n                                        <div className=\"position-relative mb-2\">\r\n                                            <label className=\"form-label\">Tài khoản</label>\r\n                                            <input {...register('UserName')} className=\"form-control\" placeholder=\"Tài khoản\" autoComplete=\"off\"\r\n                                                disabled={isBusy} />\r\n                                            {errors.UserName && <div className=\"validation-message\">{errors.UserName.message}</div>}\r\n                                        </div>\r\n\r\n                                        <div className=\"position-relative mb-2\">\r\n                                            <label className=\"form-label\">Mật khẩu</label>\r\n                                            <input {...register('Password')} type=\"password\" className=\"form-control\" placeholder=\"Mật khẩu\" autoComplete=\"off\"\r\n                                                disabled={isBusy} />\r\n                                            {errors.Password && <div className=\"validation-message\">{errors.Password.message}</div>}\r\n                                        </div>\r\n\r\n                                        {\r\n                                            message !== '' ? <div>\r\n                                                <div className=\"alert alert-danger alert-dismissible fade show\">\r\n                                                    <button type=\"button\" className=\"btn-close\"\r\n                                                        onClick={() => {\r\n                                                            setMessage('')\r\n                                                        }}\r\n                                                    ></button>\r\n                                                    {message}\r\n                                                </div>\r\n                                            </div> : ''\r\n                                        }\r\n\r\n                                        <div className=\"form-group mb-0 text-center\">\r\n                                            <SaveButton\r\n                                                title=\"Đăng nhập\"\r\n                                                isBusy={isBusy}\r\n                                                icon={<IoKeyOutline className=\"mt--3-px me-1 font-17\" />}\r\n                                            />\r\n                                        </div>\r\n                                    </form>\r\n\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div >\r\n            </div >\r\n\r\n            <footer className=\"footer footer-alt\">\r\n                Copyright &copy; {new Date().getFullYear()} Rado Vietnam\r\n            </footer>\r\n        </div >\r\n    )\r\n}\r\n\r\nexport default LoginPage","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\n\r\nconst filters = {\r\n    keyword: ''\r\n}\r\n\r\nfunction Filter(props) {\r\n\r\n    const { onSearch } = props\r\n\r\n    const [keyword, setKeyword] = useState('')\r\n\r\n    const handleSearch = () => {\r\n        onSearch(filters)\r\n    }\r\n\r\n    const handleClear = () => {\r\n        setKeyword('')\r\n        filters.keyword = ''\r\n        onSearch(filters)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-4 col-md-4 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <input value={keyword}\r\n                            autoFocus\r\n                            onChange={e => {\r\n                                const value = e.target.value\r\n                                setKeyword(value)\r\n                                filters.keyword = value\r\n                            }}\r\n                            onKeyDown={e => {\r\n                                if (e.key === 'Enter') {\r\n                                    handleSearch()\r\n                                }\r\n                            }}\r\n                            type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Tiêu đề\" />\r\n                    </div>\r\n                    <div className=\"col-sm-8 col-md-8 col-lg-9 col-xl-9 col-xxl-8\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={handleSearch} />\r\n                            <ClearButton onClick={handleClear} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: () => { }\r\n}\r\n\r\nexport default Filter\r\n","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport axios from 'axios'\r\nimport { debounce } from 'lodash'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport Select from 'react-select'\r\nimport AsyncSelect from 'react-select/async'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, InputSelect, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    Title: yup.string().required('Vui lòng nhập tiêu đề').max(100, 'Tiêu đề quá dài'),\r\n    TypeId: yup.mixed().oneOf([1, 2], 'Vui lòng chọn loại'),\r\n    PartnerId: yup.number().when('TypeId', {\r\n        is: 1,\r\n        then: yup.number().required('Vui lòng chọn cộng tác viên')\r\n    }),\r\n    GroupId: yup.number().when('TypeId', {\r\n        is: 2,\r\n        then: yup.number().required('Vui lòng chọn nhóm cộng tác viên')\r\n    }),\r\n    Note: yup.string().max(200, 'Ghi chú quá dài'),\r\n    Qty: yup.number().required('Vui lòng nhập số lượng').min(1, 'Số lượng tối thiều 1').max(10_000, 'Số lượng tối đa 10.000')\r\n})\r\n\r\nconst types = [\r\n    { value: 1, label: 'Cộng tác viên' },\r\n    { value: 2, label: 'Nhóm cộng tác viên' }\r\n]\r\n\r\nconst loadPartner = (inputValue, callback) => {\r\n    const url = `/admin/partner/dropdown-filter?keyword=${inputValue}&pageItem=5&pageIndex=1`\r\n    axios.get(url).then(({ data }) => {\r\n        if (data.IsSuccess) {\r\n            let partnerLst = data.Result.Data.map(item => {\r\n                return {\r\n                    value: item.PartnerId,\r\n                    label: item.FullName + ` (${item.Email})`\r\n                }\r\n            })\r\n            callback(partnerLst)\r\n        }\r\n    })\r\n}\r\n\r\nfunction ModalAdd(props) {\r\n\r\n    const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema),\r\n        defaultValues: {\r\n            TypeId: 1\r\n        }\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [freeShipType, setFreeShipType] = useState(1)\r\n\r\n    const renderPartner = () => {\r\n        if (freeShipType === 1) {\r\n            return <div className=\"relative-position mb-2\">\r\n                <label className=\"form-label\">Cộng tác viên <span className=\"text-danger\">*</span></label>\r\n                <AsyncSelect\r\n                    className=\"react-select-container\"\r\n                    classNamePrefix=\"custom-select\"\r\n                    placeholder='Cộng tác viên'\r\n                    cacheOptions\r\n                    defaultOptions\r\n                    loadOptions={debounce(loadPartner, 250)}\r\n                    onChange={item => setValue('PartnerId', item.value)}\r\n                    loadingMessage={() => \"Đang tìm kiếm\"}\r\n                    noOptionsMessage={() => \"Không tìm thấy dữ liệu\"}\r\n                />\r\n                {errors.PartnerId && <div className=\"validation-message\">{errors.PartnerId.message}</div>}\r\n            </div>\r\n        }\r\n    }\r\n\r\n    const renderGroup = () => {\r\n        if (freeShipType === 2) {\r\n            return <div className=\"relative-position mb-2\">\r\n                <label className=\"form-label\">Nhóm cộng tác viên <span className=\"text-danger\">*</span></label>\r\n                <Select\r\n                    className=\"react-select-container\"\r\n                    classNamePrefix=\"custom-select\"\r\n                    // defaultValue={props.partnerGroups[0]}\r\n                    placeholder=\"Nhóm cộng tác viên\"\r\n                    isSearchable={false}\r\n                    options={props.partnerGroups}\r\n                    onChange={item => {\r\n                        setValue('GroupId', item.value)\r\n                    }}\r\n                />\r\n                {errors.GroupId && <div className=\"validation-message\">{errors.GroupId.message}</div>}\r\n            </div>\r\n        }\r\n    }\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true}\r\n            onExited={() => {\r\n                reset()\r\n                setFreeShipType(1)\r\n            }}\r\n            onShow={() => {\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới miễn phí đóng gói</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tiêu đề <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('Title')} type=\"text\" className=\"form-control\" placeholder=\"Tiêu đề\" />\r\n                        {errors.Title && <div className=\"validation-message\">{errors.Title.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Loại <span className=\"text-danger\">*</span></label>\r\n                        <Controller\r\n                            name=\"TypeId\"\r\n                            control={control}\r\n                            render={({ field: { onChange, value } }) => {\r\n                                return (\r\n                                    <InputSelect\r\n                                        options={types}\r\n                                        value={value}\r\n                                        defaultValue={1}\r\n                                        name='freeship-type'\r\n                                        variant='success'\r\n                                        onChange={(val) => {\r\n                                            onChange(val)\r\n                                            setFreeShipType(val)\r\n                                        }}\r\n                                    />\r\n                                )\r\n                            }}\r\n                        />\r\n                        {errors.TypeId && <div className=\"validation-message\">{errors.TypeId.message}</div>}\r\n                    </div>\r\n                    {renderPartner()}\r\n                    {renderGroup()}\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Số lượng</label>\r\n                        <Controller\r\n                            name=\"Qty\"\r\n                            control={control}\r\n                            render={({ field: { onChange, value } }) => {\r\n                                return (\r\n                                    <NumberFormat\r\n                                        placeholder='Số lượng'\r\n                                        className=\"form-control\"\r\n                                        // thousandSeparator={\".\"}\r\n                                        // decimalSeparator={\",\"}\r\n                                        allowNegative={false}\r\n                                        defaultValue={0}\r\n                                        decimalScale={0}\r\n                                        value={value}\r\n                                        onValueChange={val => onChange(val.value)}\r\n                                    />\r\n                                )\r\n                            }}\r\n                        />\r\n                        {errors.Qty && <div className=\"validation-message\">{errors.Qty.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Ghi chú</label>\r\n                        <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                        {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    partnerGroups: PropTypes.array\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    partnerGroups: []\r\n}\r\n\r\nexport default ModalAdd","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { IoEllipseSharp } from 'react-icons/io5'\r\nimport { EmptyRow, FormatNumber, LoadingRow } from '../../../../../components'\r\n\r\nfunction renderType(typeId) {\r\n    if (typeId === 1) return <><IoEllipseSharp className=\"text-info mt--3-px\" /> Cộng tác viên</>\r\n    else if (typeId === 2) return <><IoEllipseSharp className=\"text-primary mt--3-px\" /> Nhóm cộng tác viên</>\r\n}\r\n\r\nfunction Table(props) {\r\n\r\n    const { data, pageItem, pageIndex } = props\r\n\r\n    const renderTable = () => {\r\n        if (data === null) return <LoadingRow colSpan={8} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={8} />\r\n        else return data.map((item, index) => <tr key={item.FreeShipId}>\r\n            <td className=\"text-center\">\r\n                <FormatNumber>\r\n                    {(pageItem * (pageIndex - 1)) + index + 1}\r\n                </FormatNumber>\r\n            </td>\r\n            <td>{item.Title}</td>\r\n            <td className='text-end text-primary'>\r\n                <FormatNumber>\r\n                    {item.Qty}\r\n                </FormatNumber>\r\n            </td>\r\n            <td>\r\n                {renderType(item.TypeId)}\r\n            </td>\r\n            <td>\r\n                {item.GroupName}\r\n            </td>\r\n            <td>\r\n                {item.PartnerFullName}\r\n            </td>\r\n            <td className='text-end text-primary'>\r\n                <FormatNumber>\r\n                    {item.TotalPartner}\r\n                </FormatNumber>\r\n            </td>\r\n            <td>\r\n                {item.CreatedDate}\r\n                <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n            </td>\r\n            {/* <td>\r\n                <ActionRow>\r\n                    <ActionItem right=\"popup_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sửa' />\r\n                    <ActionItem right=\"popup_delete\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className='text-danger' />\r\n                </ActionRow>\r\n            </td> */}\r\n        </tr>)\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Tiêu đề</th>\r\n                        <th className='text-end'>Số lượng</th>\r\n                        <th>Loại</th>\r\n                        <th>Nhóm</th>\r\n                        <th>CTV</th>\r\n                        <th className='text-end'>Số CTV</th>\r\n                        <th>Ngày tạo</th>\r\n                        {/* <th className=\"w-52-px\"></th> */}\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    data: PropTypes.array,\r\n    pageItem: PropTypes.number,\r\n    pageIndex: PropTypes.number,\r\n}\r\n\r\nTable.defaultProps = {\r\n    data: null,\r\n    pageItem: 0,\r\n    pageIndex: 0,\r\n}\r\n\r\nexport default Table\r\n","import React, { Fragment, useEffect, useState } from 'react'\r\nimport axios from 'axios'\r\nimport { Filter, ModalAdd, Table } from './components'\r\nimport { AuthAdminView, IconButton, Notification, Pagination } from './../../../components'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\n\r\nfunction FreeShipPage(props) {\r\n\r\n    const [isShowModalAdd, setIsShowModalAdd] = useState(false)\r\n\r\n    const [filters, setFilters] = useState({\r\n        keyword: '',\r\n        pageItem: 10,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [pagination, setPagination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [partnerGroups, setPartnerGroups] = useState()\r\n\r\n    const [freeShips, setFreeShips] = useState(null)\r\n\r\n    const loadPartnerGroup = () => {\r\n        const url = '/admin/partner-group/get-all'\r\n        axios.get(url).then(res => {\r\n            const data = res.data\r\n            if (data.IsSuccess) {\r\n                const groups = data.Result.map(item => {\r\n                    return {\r\n                        value: item.GroupId,\r\n                        label: item.GroupName\r\n                    }\r\n                })\r\n                setPartnerGroups(groups)\r\n            }\r\n        })\r\n    }\r\n\r\n    useEffect(() => {\r\n        const url = `/admin/free-ship/filter?keyword=${filters.keyword}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n        axios.get(url).then(res => {\r\n            let data = res.data\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex\r\n                }\r\n                setPagination(newPagination)\r\n                setFreeShips(data.Result.Data)\r\n            }\r\n        })\r\n    }, [filters])\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Miễn phí đóng gói'\r\n        loadPartnerGroup()\r\n    }, [])\r\n\r\n    return (\r\n        <Fragment>\r\n            <Filter\r\n                onSearch={params => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params,\r\n                        pageIndex: 1\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n            />\r\n\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"row\">\r\n                        <div className=\"col-12\">\r\n                            <AuthAdminView right=\"freeship_add\">\r\n                                <IconButton\r\n                                    className=\"mb-2\"\r\n                                    text=\"Thêm mới\"\r\n                                    icon={<IoAddCircleOutline />}\r\n                                    onClick={() => {\r\n                                        setIsShowModalAdd(true)\r\n                                    }} />\r\n                            </AuthAdminView>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <Table\r\n                        pageItem={filters.pageItem}\r\n                        pageIndex={filters.pageIndex}\r\n                        data={freeShips}\r\n                    />\r\n                    <Pagination\r\n                        totalPage={pagination.totalPage}\r\n                        currentPage={pagination.pageIndex}\r\n                        onPageChange={(pIndex) => {\r\n                            const newPagination = { ...pagination, pageIndex: pIndex }\r\n                            setPagination(newPagination)\r\n                            const newFilters = {\r\n                                ...filters,\r\n                                pageIndex: pIndex\r\n                            }\r\n                            setFilters(newFilters)\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n\r\n            <ModalAdd\r\n                isShow={isShowModalAdd}\r\n                onSave={(formData, setIsBusy) => {\r\n                    // console.log(formData)\r\n                    setIsBusy(true)\r\n                    const url = '/admin/free-ship/create'\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            Notification.success('Thêm mới miễn phí đóng gói thành công')\r\n                            setIsShowModalAdd(false)\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalAdd(false)\r\n                }}\r\n                partnerGroups={partnerGroups}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default FreeShipPage","import \"animate.css\"\r\nimport axios from 'axios'\r\nimport React, { useContext } from 'react'\r\nimport { MdMenu } from 'react-icons/md'\r\nimport 'react-notifications-component/dist/theme.css'\r\nimport {\r\n    BrowserRouter as Router, Redirect, Route, Switch, useHistory\r\n} from \"react-router-dom\"\r\nimport SimpleBar from 'simplebar-react'\r\nimport './App.css'\r\nimport { AdminLeftMenu, AppContext, AuthAdminView, Config, Notification } from './components'\r\nimport {\r\n    AttributePage, CategoryPage, DashboardPage, OrderPage, PartnerGroupPage, PartnerPage, PopupPage, ProductFromExcel, ProductPage,\r\n    RolePage, SettingPage, ShippingUnitPage, StatisticPartnerOrder, UserInfoPage, UserPage,\r\n    FreeShipPage\r\n} from './pages/admin'\r\n\r\nvar collapsed = false\r\n\r\n// Phóng to, thu nhỏ left menu\r\nconst handleCollapse = () => {\r\n    if (!collapsed) {\r\n        document.body.classList.add('sidebar-enable')\r\n        document.body.setAttribute('data-leftbar-compact-mode', 'condensed')\r\n    }\r\n    else {\r\n        document.body.classList.remove('sidebar-enable')\r\n        document.body.setAttribute('data-leftbar-compact-mode', '')\r\n    }\r\n    collapsed = !collapsed\r\n}\r\n\r\nfunction App() {\r\n    const appSettings = useContext(AppContext)\r\n\r\n    const history = useHistory()\r\n\r\n    const token = localStorage.getItem('a-token')\r\n\r\n    if (token === null || token === '') return <Redirect to='/admin/login' />\r\n    else {\r\n        const pathName = window.location.pathname\r\n        if (pathName === '/admin' || pathName === '/admin/') {\r\n            history.replace('/admin/dashboard')\r\n        }\r\n    }\r\n\r\n    return (\r\n        <div className=\"wrapper\">\r\n\r\n            <Router>\r\n\r\n                <div className=\"leftside-menu\">\r\n\r\n                    <span className=\"logo text-center logo-dark\">\r\n                        <span className=\"logo-lg\">\r\n                            <img src=\"/assets/images/logo-dark.png\" alt=\"logo\" height={Config.logoHeight} />\r\n                        </span>\r\n                        <span className=\"logo-sm\">\r\n                            <img src=\"/assets/images/logo_sm_dark.png\" alt=\"logo\" height={Config.logoHeight} />\r\n                        </span>\r\n                    </span>\r\n\r\n                    <SimpleBar className=\"h-100\" id=\"leftside-menu-container\">\r\n                        <AdminLeftMenu\r\n                            onLogout={() => {\r\n                                Notification.confirm('Bạn có chắc chắn muốn đăng xuất không?', () => {\r\n                                    const url = '/admin/user/logout'\r\n                                    axios.post(url).then(({ data }) => {\r\n                                        localStorage.removeItem('a-right')\r\n                                        localStorage.removeItem('a-roleName')\r\n                                        localStorage.removeItem('a-fullName')\r\n                                        localStorage.removeItem('a-token')\r\n                                        localStorage.removeItem('a-avatarUrl')\r\n                                        axios.defaults.headers.common['A-Token'] = ''\r\n                                        appSettings.setRights([])\r\n                                        history.replace('/admin/login')\r\n                                    })\r\n                                })\r\n                            }}\r\n                        />\r\n\r\n                        <div className=\"clearfix\"></div>\r\n                    </SimpleBar>\r\n\r\n                </div>\r\n\r\n                <div className=\"content-page\">\r\n                    <div className=\"content\">\r\n\r\n                        <div className=\"navbar-custom\">\r\n                            <ul className=\"list-unstyled topbar-menu float-end mb-0\">\r\n                                <li className=\"dropdown notification-list d-lg-none\">\r\n                                    <a className=\"nav-link dropdown-toggle arrow-none\" data-bs-toggle=\"dropdown\" href=\"/\" role=\"button\" aria-haspopup=\"false\" aria-expanded=\"false\">\r\n                                        <i className=\"dripicons-search noti-icon\"></i>\r\n                                    </a>\r\n                                </li>\r\n                                <li className=\"dropdown notification-list\">\r\n                                    <span className=\"nav-link dropdown-toggle nav-user arrow-none me-0\">\r\n                                        <span className=\"account-user-avatar\">\r\n                                            <img src=\"/assets/images/users/avatar-2.jpg\" alt=\"user-avatar\" className=\"rounded-circle\" />\r\n                                        </span>\r\n                                        <span>\r\n                                            <span className=\"account-user-name\">{appSettings.adminFullName}</span>\r\n                                            <span className=\"account-position\">Quản trị viên</span>\r\n                                        </span>\r\n                                    </span>\r\n                                </li>\r\n                            </ul>\r\n                            <button className=\"button-menu-mobile open-left\" onClick={handleCollapse}>\r\n                                <MdMenu style={{ marginTop: '-10px' }} />\r\n                            </button>\r\n                            <span className=\"page-title\" id=\"page-header\"></span>\r\n                        </div>\r\n\r\n                        <div className=\"container-fluid\">\r\n\r\n                            <div className=\"row\">\r\n                                <div className=\"col-12\" style={{ paddingTop: '24px' }}>\r\n                                    <Switch>\r\n                                        <Route path=\"/admin/dashboard\">\r\n                                            <DashboardPage />\r\n                                        </Route>\r\n                                        <Route path=\"/admin/partner-group\">\r\n                                            <AuthAdminView right=\"partner_group_view\">\r\n                                                <PartnerGroupPage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/partner\">\r\n                                            <AuthAdminView right=\"partner_view\">\r\n                                                <PartnerPage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/category\">\r\n                                            <AuthAdminView right=\"category_view\">\r\n                                                <CategoryPage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/product/create-from-excel\">\r\n                                            <AuthAdminView right=\"product_add\">\r\n                                                <ProductFromExcel />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/product\">\r\n                                            <AuthAdminView right=\"product_view\">\r\n                                                <ProductPage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/attribute\">\r\n                                            <AuthAdminView right=\"attribute_view\">\r\n                                                <AttributePage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/shipping-unit\">\r\n                                            <AuthAdminView right=\"shipping_unit_view\">\r\n                                                <ShippingUnitPage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/order\">\r\n                                            <AuthAdminView right=\"order_view\">\r\n                                                <OrderPage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/statistic-partner-order\">\r\n                                            <AuthAdminView right=\"statistic_partner_order\">\r\n                                                <StatisticPartnerOrder />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/popup\">\r\n                                            <AuthAdminView right=\"popup_view\">\r\n                                                <PopupPage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/freeship\">\r\n                                            <AuthAdminView right=\"popup_view\">\r\n                                                <FreeShipPage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/user-info\">\r\n                                            <AuthAdminView right=\"account_view\">\r\n                                                <UserInfoPage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/user\">\r\n                                            <AuthAdminView right=\"user_view\">\r\n                                                <UserPage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/role\">\r\n                                            <AuthAdminView right=\"role_view\">\r\n                                                <RolePage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                        <Route path=\"/admin/setting\">\r\n                                            <AuthAdminView right=\"setting_view\">\r\n                                                <SettingPage />\r\n                                            </AuthAdminView>\r\n                                        </Route>\r\n                                    </Switch>\r\n                                </div>\r\n                            </div>\r\n\r\n                        </div>\r\n\r\n                    </div>\r\n\r\n                    <footer className=\"footer\">\r\n                        <div className=\"container-fluid\">\r\n                            <div className=\"row\">\r\n                                <div className=\"col-md-6\">\r\n                                    Copyright &copy; {new Date().getFullYear()} Drop Viet\r\n                                </div>\r\n                                <div className=\"col-md-6\">\r\n                                    <div className=\"text-md-end footer-links d-none d-md-block\">\r\n                                        <span>Version: {Config.version}</span>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </footer>\r\n\r\n                </div>\r\n\r\n            </Router>\r\n\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default App","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { SearchButton, ClearButton } from './../../../../../components'\r\n\r\nconst filters = {\r\n    keyword: ''\r\n}\r\n\r\nfunction Filter(props) {\r\n    const { onSearch } = props\r\n\r\n    const [keyword, setKeyword] = useState('')\r\n\r\n    const handleSearch = () => {\r\n        onSearch(filters)\r\n    }\r\n\r\n    const handleClear = () => {\r\n        setKeyword('')\r\n        filters.keyword = ''\r\n        onSearch(filters)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-12 col-md-12 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <input\r\n                            autoFocus\r\n                            onChange={e => {\r\n                                const value = e.target.value\r\n                                setKeyword(value)\r\n                                filters.keyword = value\r\n                            }}\r\n                            onKeyDown={e => {\r\n                                if (e.key === 'Enter') {\r\n                                    handleSearch()\r\n                                }\r\n                            }}\r\n                            value={keyword} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Họ tên, điện thoại\" />\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-12 col-lg-9 col-xl-9 col-xxl-10\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={handleSearch} />\r\n                            <ClearButton onClick={handleClear} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func\r\n}\r\n\r\nFilter.defaultProps = {\r\n    onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoEllipsisVertical, IoTrashOutline } from 'react-icons/io5'\r\nimport { EmptyRow, LoadingRow, FormatNumber } from '../../../../../components'\r\n\r\nconst Table = props => {\r\n    const renderTable = () => {\r\n        const data = props.data\r\n        if (data === null) return <LoadingRow colSpan={6} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n        else return data.map((item, index) => <tr key={item.CustomerId}>\r\n            <td className=\"text-center\">\r\n                <FormatNumber>\r\n                    {(props.pageItem * (props.pageIndex - 1)) + index + 1}\r\n                </FormatNumber>\r\n            </td>\r\n            <td>{item.FullName}</td>\r\n            <td>{item.Phone}</td>\r\n            <td>{item.Address}</td>\r\n            <td>\r\n                {item.CreatedDate}\r\n                <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n            </td>\r\n            <td>\r\n                <div className=\"dropdown float-end\">\r\n                    <button className=\"dropdown-toggle arrow-none card-drop btn-drop\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n                        <IoEllipsisVertical className=\"fs-4 text-primary\" />\r\n                    </button>\r\n                    <div className=\"dropdown-menu dropdown-menu-end\">\r\n                        <button onClick={() => props.onEdit(item)} className=\"dropdown-item\"><FiEdit className=\"mn-btn-icon\" />Chỉnh sửa</button>\r\n                        <button onClick={() => props.onDelete(item)} className=\"dropdown-item text-danger\"><IoTrashOutline className=\"mn-btn-icon\" />Xóa</button>\r\n                    </div>\r\n                </div>\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Họ tên</th>\r\n                        <th>Điện thoại</th>\r\n                        <th>Địa chỉ</th>\r\n                        <th>Ngày tạo</th>\r\n                        <th className=\"w-52-px\"></th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    pageItem: PropTypes.number,\r\n    pageIndex: PropTypes.number,\r\n    data: PropTypes.array,\r\n    onEdit: PropTypes.func,\r\n    onDelete: PropTypes.func\r\n}\r\n\r\nTable.defaultProps = {\r\n    pageItem: 0,\r\n    pageIndex: 0,\r\n    data: null,\r\n    onEdit: () => { },\r\n    onDelete: () => { }\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport Select from 'react-select'\r\n\r\nconst schema = yup.object().shape({\r\n    FullName: yup.string().required('Vui lòng nhập họ tên').max(100, 'Họ tên quá dài'),\r\n    Phone: yup.string().required('Vui lòng nhập số điện thoại').max(20, 'Số điện thoại quá dài'),\r\n    WardObj: yup.object().nullable(),\r\n    WardId: yup.number().nullable(),\r\n    Address: yup.string().max(200, 'Địa chỉ quá dài'),\r\n    Note: yup.string().max(200, 'Ghi chú quá dài')\r\n})\r\n\r\nfunction ModalAdd(props) {\r\n    const { setValue, getValues, control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [provinceList, setProvinceList] = useState([])\r\n\r\n    const [province, setProvince] = useState()\r\n\r\n    const [districtList, setDistrictList] = useState([])\r\n\r\n    const [district, setDistrict] = useState()\r\n\r\n    const [wardList, setWardList] = useState([])\r\n\r\n    useEffect(() => {\r\n        const provinces = props.provinceList.map(item => {\r\n            return {\r\n                value: item.ProvinceId,\r\n                label: `${item.Prefix} ${item.ProvinceName}`\r\n            }\r\n        })\r\n        setProvinceList(provinces)\r\n    }, [props.provinceList])\r\n\r\n    useEffect(() => {\r\n        const districts = props.districtList.map(item => {\r\n            return {\r\n                value: item.DistrictId,\r\n                label: `${item.Prefix} ${item.DistrictName}`\r\n            }\r\n        })\r\n        setDistrictList(districts)\r\n    }, [props.districtList])\r\n\r\n    useEffect(() => {\r\n        const wards = props.wardList.map(item => {\r\n            return {\r\n                value: item.WardId,\r\n                label: `${item.Prefix} ${item.WardName}`\r\n            }\r\n        })\r\n        setWardList(wards)\r\n    }, [props.wardList])\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"lg\"\r\n            onExited={() => {\r\n                reset()\r\n                setProvince(null)\r\n                setDistrict(null)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới khách hàng</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                const wardObj = getValues('WardObj')\r\n                formData.WardId = (wardObj !== undefined ? wardObj.value : 0)\r\n                delete formData['WardObj']\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"row gy-2\">\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Họ tên <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Họ tên\" />\r\n                                {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Điện thoại <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Điện thoại\" />\r\n                                {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Tỉnh/Tp</label>\r\n                                <Select\r\n                                    className=\"react-select-container\"\r\n                                    classNamePrefix=\"custom-select\"\r\n                                    isSearchable={true}\r\n                                    isClearable={true}\r\n                                    options={provinceList}\r\n                                    value={province}\r\n                                    onChange={item => {\r\n                                        setProvince(item)\r\n                                        setDistrict(null)\r\n                                        setValue('WardId', null)\r\n                                        setValue('WardObj', null)\r\n                                        props.onProvinceChange(item !== null ? item.value : 0)\r\n                                    }}\r\n                                    placeholder='Tỉnh/Tp'\r\n                                />\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Quận/Huyện</label>\r\n                                <Select\r\n                                    className=\"react-select-container\"\r\n                                    classNamePrefix=\"custom-select\"\r\n                                    isSearchable={true}\r\n                                    isClearable={false}\r\n                                    options={districtList}\r\n                                    value={district}\r\n                                    onChange={item => {\r\n                                        setDistrict(item)\r\n                                        setValue('WardId', null)\r\n                                        setValue('WardObj', null)\r\n                                        props.onDistrictChange(item.value)\r\n                                    }}\r\n                                    placeholder='Quận/Huyện'\r\n                                    noOptionsMessage={() => 'Quận/Huyện'}\r\n                                />\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Phường/Xã</label>\r\n                                <Controller\r\n                                    control={control}\r\n                                    name=\"WardObj\"\r\n                                    render={({\r\n                                        field: { onChange, value }\r\n                                    }) => (\r\n                                        <Select\r\n                                            className=\"react-select-container\"\r\n                                            classNamePrefix=\"custom-select\"\r\n                                            isSearchable={true}\r\n                                            isClearable={false}\r\n                                            options={wardList}\r\n                                            value={value}\r\n                                            onChange={item => {\r\n                                                onChange(item)\r\n                                            }}\r\n                                            placeholder='Phường/Xã'\r\n                                            noOptionsMessage={() => 'Phường/Xã'}\r\n                                        />\r\n                                    )}\r\n                                />\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Địa chỉ</label>\r\n                                <input {...register('Address')} type=\"text\" className=\"form-control\" placeholder=\"Địa chỉ\" />\r\n                                {errors.Address && <div className=\"validation-message\">{errors.Address.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-12\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Ghi chú</label>\r\n                                <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                                {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    provinceList: PropTypes.array,\r\n    onProvinceChange: PropTypes.func,\r\n    districtList: PropTypes.array,\r\n    onDistrictChange: PropTypes.func,\r\n    wardList: PropTypes.array\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    provinceList: [],\r\n    onProvinceChange: () => { },\r\n    districtList: [],\r\n    onDistrictChange: () => { },\r\n    wardList: []\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport Select from 'react-select'\r\n\r\nconst schema = yup.object().shape({\r\n    CustomerId: yup.number(),\r\n    FullName: yup.string().required('Vui lòng nhập họ tên').max(100, 'Họ tên quá dài'),\r\n    Phone: yup.string().required('Vui lòng nhập số điện thoại').max(20, 'Số điện thoại quá dài'),\r\n    WardObj: yup.object().nullable(),\r\n    WardId: yup.number().nullable(),\r\n    Address: yup.string().max(200, 'Địa chỉ quá dài'),\r\n    Note: yup.string().max(200, 'Ghi chú quá dài')\r\n})\r\n\r\nfunction ModalEdit(props) {\r\n    const { setValue, getValues, control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [provinceList, setProvinceList] = useState([])\r\n\r\n    const [province, setProvince] = useState()\r\n\r\n    const [districtList, setDistrictList] = useState([])\r\n\r\n    const [district, setDistrict] = useState()\r\n\r\n    const [wardList, setWardList] = useState([])\r\n\r\n    useEffect(() => {\r\n        const provinces = props.provinceList.map(item => {\r\n            return {\r\n                value: item.ProvinceId,\r\n                label: `${item.Prefix} ${item.ProvinceName}`\r\n            }\r\n        })\r\n        setProvinceList(provinces)\r\n    }, [props.provinceList])\r\n\r\n    useEffect(() => {\r\n        const districts = props.districtList.map(item => {\r\n            return {\r\n                value: item.DistrictId,\r\n                label: `${item.Prefix} ${item.DistrictName}`\r\n            }\r\n        })\r\n        setDistrictList(districts)\r\n    }, [props.districtList])\r\n\r\n    useEffect(() => {\r\n        const wards = props.wardList.map(item => {\r\n            return {\r\n                value: item.WardId,\r\n                label: `${item.Prefix} ${item.WardName}`\r\n            }\r\n        })\r\n        setWardList(wards)\r\n    }, [props.wardList])\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"lg\"\r\n            onExited={() => {\r\n                reset()\r\n                setProvince(null)\r\n                setDistrict(null)\r\n            }}\r\n            onShow={() => {\r\n                const info = props.info\r\n                setValue('CustomerId', info.CustomerId)\r\n                setValue('FullName', info.FullName)\r\n                setValue('Phone', info.Phone)\r\n                setValue('Address', info.Address)\r\n                setValue('Note', info.Note)\r\n                setValue('WardId', info.WardId)\r\n                if (info.WardId !== 0) {\r\n                    const selectedWard = props.wardList.filter(n => n.WardId === info.WardId)[0]\r\n                    setValue('WardObj', {\r\n                        value: info.WardId,\r\n                        label: `${selectedWard.Prefix} ${selectedWard.WardName}`\r\n                    })\r\n                    const selectedProvince = props.provinceList.filter(n => n.ProvinceId === info.ProvinceId)[0]\r\n                    setProvince({\r\n                        value: info.ProvinceId,\r\n                        label: `${selectedProvince.Prefix} ${selectedProvince.ProvinceName}`\r\n                    })\r\n                    const selectedDistrict = props.districtList.filter(n => n.DistrictId === info.DistrictId)[0]\r\n                    setDistrict({\r\n                        value: info.DistrictId,\r\n                        label: `${selectedDistrict.Prefix} ${selectedDistrict.DistrictName}`\r\n                    })\r\n                }\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa khách hàng</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                const wardObj = getValues('WardObj')\r\n                if (wardObj !== undefined) {\r\n                    formData.WardId = (wardObj !== null ? wardObj.value : 0)\r\n                    delete formData['WardObj']\r\n                }\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"row gy-2\">\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Họ tên <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Họ tên\" />\r\n                                {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Điện thoại <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Điện thoại\" />\r\n                                {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Tỉnh/Tp</label>\r\n                                <Select\r\n                                    className=\"react-select-container\"\r\n                                    classNamePrefix=\"custom-select\"\r\n                                    isSearchable={true}\r\n                                    isClearable={true}\r\n                                    options={provinceList}\r\n                                    value={province}\r\n                                    onChange={item => {\r\n                                        setProvince(item)\r\n                                        setDistrict(null)\r\n                                        props.onProvinceChange(item !== null ? item.value : 0)\r\n                                        setValue('WardId', null)\r\n                                        setValue('WardObj', null)\r\n                                    }}\r\n                                    placeholder='Tỉnh/Tp'\r\n                                />\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Quận/Huyện</label>\r\n                                <Select\r\n                                    className=\"react-select-container\"\r\n                                    classNamePrefix=\"custom-select\"\r\n                                    isSearchable={true}\r\n                                    isClearable={false}\r\n                                    options={districtList}\r\n                                    value={district}\r\n                                    onChange={item => {\r\n                                        setDistrict(item)\r\n                                        props.onDistrictChange(item.value)\r\n                                        setValue('WardId', null)\r\n                                        setValue('WardObj', null)\r\n                                    }}\r\n                                    placeholder='Quận/Huyện'\r\n                                    noOptionsMessage={() => 'Quận/Huyện'}\r\n                                />\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Phường/Xã</label>\r\n                                <Controller\r\n                                    control={control}\r\n                                    name=\"WardObj\"\r\n                                    render={({\r\n                                        field: { onChange, value }\r\n                                    }) => (\r\n                                        <Select\r\n                                            className=\"react-select-container\"\r\n                                            classNamePrefix=\"custom-select\"\r\n                                            isSearchable={true}\r\n                                            isClearable={false}\r\n                                            options={wardList}\r\n                                            value={value}\r\n                                            onChange={item => {\r\n                                                onChange(item)\r\n                                            }}\r\n                                            placeholder='Phường/Xã'\r\n                                            noOptionsMessage={() => 'Phường/Xã'}\r\n                                        />\r\n                                    )}\r\n                                />\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-sm-6\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Địa chỉ</label>\r\n                                <input {...register('Address')} type=\"text\" className=\"form-control\" placeholder=\"Địa chỉ\" />\r\n                                {errors.Address && <div className=\"validation-message\">{errors.Address.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"col-12\">\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Ghi chú</label>\r\n                                <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n                                {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    info: PropTypes.object,\r\n    provinceList: PropTypes.array,\r\n    onProvinceChange: PropTypes.func,\r\n    districtList: PropTypes.array,\r\n    onDistrictChange: PropTypes.func,\r\n    wardList: PropTypes.array\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    info: {},\r\n    provinceList: [],\r\n    onProvinceChange: () => { },\r\n    districtList: [],\r\n    onDistrictChange: () => { },\r\n    wardList: []\r\n}\r\n\r\nexport default ModalEdit","import React, { Fragment, useEffect, useState } from 'react'\r\nimport { IconButton } from './../../../components'\r\nimport { Filter, Table, ModalAdd, ModalEdit } from './components'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport axios from 'axios'\r\nimport { Notification, Pagination } from './../../../components'\r\n\r\nfunction CustomerPage(props) {\r\n    const [customerList, setCustomerList] = useState(null)\r\n\r\n    const [isShowModalAdd, setIsShowModalAdd] = useState(false)\r\n\r\n    const [modalEditInfo, setModalEditInfo] = useState({\r\n        isShow: false,\r\n        info: {}\r\n    })\r\n\r\n    const [provinceList, setProvinceList] = useState([])\r\n\r\n    const [districtList, setDistrictList] = useState([])\r\n\r\n    const [wardList, setWardList] = useState([])\r\n\r\n    const [filters, setFilters] = useState({\r\n        keyword: '',\r\n        pageItem: 10,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [pagination, setPagination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1\r\n    })\r\n\r\n    useEffect(() => {\r\n        const url = `/partner/customer/filter?keyword=${filters.keyword}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex\r\n                }\r\n                setPagination(newPagination)\r\n                setCustomerList(data.Result.Data)\r\n            }\r\n        })\r\n    }, [filters])\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Khách hàng'\r\n        loadProvince()\r\n    }, [])\r\n\r\n    const loadProvince = () => {\r\n        const url = '/partner/province/get-all'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setProvinceList(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadDistrict = (provinceId) => {\r\n        const url = `/partner/province/${provinceId}/districts`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setDistrictList(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadWard = (wardId) => {\r\n        const url = `/partner/district/${wardId}/wards`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setWardList(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const reloadCustomer = () => {\r\n        setFilters({\r\n            ...filters,\r\n            pageIndex: 1\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <Filter\r\n                onSearch={params => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params,\r\n                        pageIndex: 1\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n            />\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"row mb-2\">\r\n                        <div className=\"col-12\">\r\n                            <IconButton text=\"Thêm mới\" icon={<IoAddCircleOutline />} onClick={() => {\r\n                                setIsShowModalAdd(true)\r\n                            }} />\r\n                        </div>\r\n                    </div>\r\n                    <Table\r\n                        pageItem={filters.pageItem}\r\n                        pageIndex={filters.pageIndex}\r\n                        data={customerList}\r\n                        onEdit={customer => {\r\n                            const url = `/partner/customer/get-by-id?id=${customer.CustomerId}`\r\n                            axios.get(url).then(({ data }) => {\r\n                                if (data.IsSuccess) {\r\n                                    if (data.Result.Districts.length !== 0) {\r\n                                        setDistrictList(data.Result.Districts)\r\n                                    }\r\n                                    if (data.Result.Wards.length !== 0) {\r\n                                        setWardList(data.Result.Wards)\r\n                                    }\r\n                                    setModalEditInfo({\r\n                                        isShow: true,\r\n                                        info: data.Result.CustomerInfo\r\n                                    })\r\n                                }\r\n                            })\r\n                        }}\r\n                        onDelete={customer => {\r\n                            Notification.confirmHtml('Bạn có chắc muốn xóa khách hàng', customer.FullName, () => {\r\n                                const url = `/partner/customer/delete?id=${customer.CustomerId}`\r\n                                axios.post(url).then(({ data }) => {\r\n                                    if (data.IsSuccess) {\r\n                                        reloadCustomer()\r\n                                        Notification.success('Xóa khách hàng thành công')\r\n                                    }\r\n                                })\r\n                            })\r\n                        }}\r\n                    />\r\n                    <Pagination\r\n                        totalPage={pagination.totalPage}\r\n                        currentPage={pagination.pageIndex}\r\n                        onPageChange={(pIndex) => {\r\n                            const newPagination = { ...pagination, pageIndex: pIndex }\r\n                            setPagination(newPagination)\r\n                            const newFilters = {\r\n                                ...filters,\r\n                                pageIndex: pIndex\r\n                            }\r\n                            setFilters(newFilters)\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n            <ModalAdd\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = `/partner/customer/create`\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            reloadCustomer()\r\n                            setIsShowModalAdd(false)\r\n                            Notification.success('Thêm mới khách hàng thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalAdd(false)\r\n                }}\r\n                isShow={isShowModalAdd}\r\n                provinceList={provinceList}\r\n                onProvinceChange={(provinceId) => {\r\n                    loadDistrict(provinceId)\r\n                    setWardList([])\r\n                }}\r\n                districtList={districtList}\r\n                onDistrictChange={(districtId) => {\r\n                    loadWard(districtId)\r\n                }}\r\n                wardList={wardList}\r\n            />\r\n            <ModalEdit\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = `/partner/customer/update`\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            reloadCustomer()\r\n                            setModalEditInfo({\r\n                                isShow: false,\r\n                                info: {}\r\n                            })\r\n                            Notification.success('Chỉnh sửa khách hàng thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setModalEditInfo({\r\n                        isShow: false\r\n                    })\r\n                }}\r\n                isShow={modalEditInfo.isShow}\r\n                info={modalEditInfo.info}\r\n                provinceList={provinceList}\r\n                onProvinceChange={(provinceId) => {\r\n                    loadDistrict(provinceId)\r\n                    setWardList([])\r\n                }}\r\n                districtList={districtList}\r\n                onDistrictChange={(districtId) => {\r\n                    loadWard(districtId)\r\n                }}\r\n                wardList={wardList}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default CustomerPage","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { IoExtensionPuzzleOutline, IoArrowUpOutline, IoArrowDownOutline } from 'react-icons/io5'\r\nimport { FormatNumber } from './../../../../../components'\r\n\r\nfunction OrderBlock(props) {\r\n    const { icon, header, val, percent } = props\r\n\r\n    function renderUpDown() {\r\n        if (val < 0) return <IoArrowDownOutline className=\"mt--2-px\" />\r\n        else return <IoArrowUpOutline className=\"mt--2-px\" />\r\n    }\r\n\r\n    return (\r\n        <div className=\"card widget-flat\">\r\n            <div className=\"card-body\">\r\n                <div className=\"float-end\">\r\n                    <span className=\"widget-icon\">\r\n                        {icon}\r\n                    </span>\r\n                </div>\r\n                <h5 className=\"text-muted fw-normal mt-0\">{header}</h5>\r\n                <h3 className=\"mt-3 mb-3\">\r\n                    <FormatNumber maxDigit={2}>\r\n                        {val}\r\n                    </FormatNumber>\r\n                </h3>\r\n                <p className=\"mb-0 text-muted\">\r\n                    <span className={val < 0 ? 'text-danger me-2' : 'text-success me-2'}>\r\n                        {renderUpDown()}\r\n                        <FormatNumber maxDigit={2}>{percent}</FormatNumber>\r\n                        %\r\n                    </span>\r\n                    <span className=\"text-nowrap\">So với hôm trước</span>\r\n                </p>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nOrderBlock.propTypes = {\r\n    icon: PropTypes.element,\r\n    header: PropTypes.string,\r\n    val: PropTypes.number,\r\n    percent: PropTypes.number,\r\n}\r\n\r\nOrderBlock.defaultProps = {\r\n    icon: <IoExtensionPuzzleOutline />,\r\n    header: 'Title',\r\n    val: 0,\r\n    percent: 0\r\n}\r\n\r\nexport default OrderBlock","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { IoBagHandleOutline, IoPeopleOutline, IoPersonOutline, IoWalletOutline } from 'react-icons/io5'\r\nimport { FormatNumber } from '../../../../../components'\r\n\r\nfunction PartnerInfo(props) {\r\n    const { info } = props\r\n\r\n    return (\r\n        <div className=\"card widget-inline\">\r\n            <div className=\"card-body p-0\">\r\n                <div className=\"row g-0\">\r\n                    <div className=\"col-sm-6 col-xl-3\">\r\n                        <div className=\"card shadow-none m-0\">\r\n                            <div className=\"card-body text-center\">\r\n                                <IoWalletOutline className=\"fs-2 text-primary\" />\r\n                                <h3>\r\n                                    <span>\r\n                                        <FormatNumber>\r\n                                            {info.balance}\r\n                                        </FormatNumber>\r\n                                    </span>\r\n                                </h3>\r\n                                <p className=\"text-success font-15 mb-0\">Số dư tài khoản</p>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div className=\"col-sm-6 col-xl-3\">\r\n                        <div className=\"card shadow-none m-0 border-start no-border-radius\">\r\n                            <div className=\"card-body text-center\">\r\n                                <IoBagHandleOutline className=\"fs-2 text-primary\" />\r\n                                <h3>\r\n                                    <span>\r\n                                        <FormatNumber>\r\n                                            {info.freeShipQty}\r\n                                        </FormatNumber>\r\n                                    </span>\r\n                                </h3>\r\n                                <p className=\"text-success font-15 mb-0\">Miễn phí đóng gói</p>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div className=\"col-sm-6 col-xl-3\">\r\n                        <div className=\"card shadow-none m-0 border-start no-border-radius\">\r\n                            <div className=\"card-body text-center\">\r\n                                <IoPersonOutline className=\"fs-2 text-primary\" />\r\n                                <h3>\r\n                                    <span>\r\n                                        {info.groupName}\r\n                                    </span>\r\n                                </h3>\r\n                                <p className=\"text-success font-15 mb-0\">Nhóm cộng tác viên</p>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div className=\"col-sm-6 col-xl-3\">\r\n                        <div className=\"card shadow-none m-0 border-start no-border-radius\">\r\n                            <div className=\"card-body text-center\">\r\n                                <IoPeopleOutline className=\"fs-2 text-primary\" />\r\n                                <h3>\r\n                                    <span>\r\n                                        <FormatNumber>\r\n                                            {info.countCustomer}\r\n                                        </FormatNumber>\r\n                                    </span>\r\n                                </h3>\r\n                                <p className=\"text-success font-15 mb-0\">Số lượng khách hàng</p>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nPartnerInfo.propTypes = {\r\n    info: PropTypes.objectOf(PropTypes.any)\r\n}\r\n\r\nPartnerInfo.defaultProps = {\r\n    info: {\r\n        balance: 0,\r\n        countCustomer: 0,\r\n        orderToday: 0,\r\n        groupName: ''\r\n    }\r\n}\r\n\r\nexport default PartnerInfo","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nfunction Message(props) {\r\n    const { message } = props\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <h4 className=\"header-title mb-3 text-primary\">Thông báo từ hệ thống</h4>\r\n                <div dangerouslySetInnerHTML={{ __html: message }} />\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nMessage.propTypes = {\r\n    message: PropTypes.string\r\n}\r\n\r\nMessage.defaultProps = {\r\n    message: ''\r\n}\r\n\r\nexport default Message","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport ReactApexChart from 'react-apexcharts'\r\n\r\nfunction Revenue(props) {\r\n    const { data } = props\r\n\r\n    const [series, setSeries] = useState([{\r\n        name: 'Doanh thu',\r\n        data: []\r\n    }, {\r\n        name: 'Lợi nhuận',\r\n        data: []\r\n    }])\r\n\r\n    const [options, setOptions] = useState({\r\n        chart: {\r\n            type: 'bar',\r\n            height: 279,\r\n            toolbar: {\r\n                show: false\r\n            }\r\n        },\r\n        plotOptions: {\r\n            bar: {\r\n                horizontal: false,\r\n                columnWidth: '60%',\r\n                endingShape: 'flat'\r\n            },\r\n        },\r\n        dataLabels: {\r\n            enabled: false\r\n        },\r\n        stroke: {\r\n            show: true,\r\n            width: 2,\r\n            colors: ['transparent']\r\n        },\r\n        xaxis: {\r\n            categories: [],\r\n        },\r\n        yaxis: {\r\n            title: {\r\n                text: 'Nghìn đồng'\r\n            }\r\n        },\r\n        fill: {\r\n            opacity: 1\r\n        },\r\n        tooltip: {\r\n            y: {\r\n                formatter: function (val) {\r\n                    return val + \" nghìn đồng\"\r\n                }\r\n            }\r\n        }\r\n    })\r\n\r\n    useEffect(() => {\r\n        if (data.length !== 0) {\r\n            const income = {\r\n                name: 'Doanh thu',\r\n                data: []\r\n            }\r\n            income.data = data.map(item => item.Income)\r\n            const revenue = {\r\n                name: 'Lợi nhuận',\r\n                data: []\r\n            }\r\n            revenue.data = data.map(item => item.Revenue)\r\n            setSeries([\r\n                income,\r\n                revenue\r\n            ])\r\n            const cats = data.map(item => item.Date)\r\n            const newOptions = {\r\n                ...options,\r\n                xaxis: {\r\n                    categories: cats,\r\n                }\r\n            }\r\n            setOptions(newOptions)\r\n        }\r\n        // eslint-disable-next-line\r\n    }, [data])\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <ReactApexChart options={options} series={series} type=\"bar\" height={279} />\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nRevenue.propTypes = {\r\n    data: PropTypes.array,\r\n}\r\n\r\nRevenue.defaultProps = {\r\n    data: []\r\n}\r\n\r\nexport default Revenue","import axios from 'axios'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard'\r\nimport { BiRun } from 'react-icons/bi'\r\nimport { IoCopyOutline, IoCubeOutline, IoFileTrayOutline, IoReloadOutline } from 'react-icons/io5'\r\nimport { Notification } from '../../../components'\r\nimport { Message, OrderBlock, PartnerInfo, Revenue } from './components'\r\n\r\nfunction DashboardPage(props) {\r\n\r\n    const [refLink, setRefLink] = useState('')\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Tổng quan'\r\n        loadNewOrder()\r\n        loadInProcessOrder()\r\n        loadShippingOrder()\r\n        loadProductCount()\r\n        loadRevenue()\r\n        loadPartnerInfo()\r\n        loadMessage()\r\n    }, [])\r\n\r\n    const [newOrder, setNewOrder] = useState({\r\n        value: 0,\r\n        percent: 0\r\n    })\r\n\r\n    const [inProcessOrder, setInProcessOrder] = useState({\r\n        value: 0,\r\n        percent: 0\r\n    })\r\n\r\n    const [shippingOrder, setShippingOrder] = useState({\r\n        value: 0,\r\n        percent: 0\r\n    })\r\n\r\n    const [countProduct, setCountProduct] = useState({\r\n        value: 0,\r\n        percent: 0\r\n    })\r\n\r\n    const [revenue, setRevenue] = useState([])\r\n\r\n    const [partnerInfo, setPartnerInfo] = useState({\r\n        balance: 0,\r\n        countCustomer: 0,\r\n        orderToday: 0,\r\n        groupName: '',\r\n        freeShipQty: 0\r\n    })\r\n\r\n    const [message, setMessage] = useState({\r\n        isShow: false,\r\n        message: ''\r\n    })\r\n\r\n    function loadNewOrder() {\r\n        const url = '/partner/dashboard/new-order'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setNewOrder({\r\n                    value: data.Result.Value,\r\n                    percent: data.Result.Percent\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    function loadInProcessOrder() {\r\n        const url = '/partner/dashboard/in-process-order'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setInProcessOrder({\r\n                    value: data.Result.Value,\r\n                    percent: data.Result.Percent\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    function loadShippingOrder() {\r\n        const url = '/partner/dashboard/shipping-order'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setShippingOrder({\r\n                    value: data.Result.Value,\r\n                    percent: data.Result.Percent\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    function loadProductCount() {\r\n        const url = '/partner/dashboard/count-product'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setCountProduct({\r\n                    value: data.Result.Value,\r\n                    percent: data.Result.Percent\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    function loadRevenue() {\r\n        const url = '/partner/dashboard/revenue-income'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setRevenue(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    function loadPartnerInfo() {\r\n        const url = '/partner/dashboard/info'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setPartnerInfo({\r\n                    balance: data.Result.Balance,\r\n                    countCustomer: data.Result.CountCustomer,\r\n                    orderToday: data.Result.OrderToday,\r\n                    groupName: data.Result.PartnerGroupName,\r\n                    freeShipQty: data.Result.FreeShipQty\r\n                })\r\n\r\n                const link = `${window.location.origin}/partner/register?refcode=${data.Result.PartnerCode.toLowerCase()}`\r\n                setRefLink(link)\r\n            }\r\n        })\r\n    }\r\n\r\n    function loadMessage() {\r\n        const url = '/partner/dashboard/message'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setMessage({\r\n                    isShow: data.Result.IsShow,\r\n                    message: data.Result.Message\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    function renderMessage() {\r\n        if (message.isShow === false) return ''\r\n        else return <Message message={message.message} />\r\n    }\r\n\r\n    return (\r\n        <div className=\"row\">\r\n            <div className=\"col-xl-5 col-lg-6\">\r\n                <div className=\"row\">\r\n                    <div className=\"col-lg-6\">\r\n                        <OrderBlock\r\n                            icon={<IoFileTrayOutline />}\r\n                            header=\"Đơn tạo mới\"\r\n                            val={newOrder.value}\r\n                            percent={newOrder.percent}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-lg-6\">\r\n                        <OrderBlock\r\n                            icon={<IoReloadOutline />}\r\n                            header=\"Đang xử lý\"\r\n                            val={inProcessOrder.value}\r\n                            percent={inProcessOrder.percent}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-lg-6\">\r\n                        <OrderBlock\r\n                            icon={<BiRun />}\r\n                            header=\"Đã gửi vận chuyển\"\r\n                            val={shippingOrder.value}\r\n                            percent={shippingOrder.percent}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-lg-6\">\r\n                        <OrderBlock\r\n                            icon={<IoCubeOutline />}\r\n                            header=\"Số lượng sản phẩm\"\r\n                            val={countProduct.value}\r\n                            percent={countProduct.percent}\r\n                        />\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <div className=\"col-xl-7 col-lg-6\">\r\n                <Revenue\r\n                    data={revenue}\r\n                />\r\n            </div>\r\n            <div className=\"col-12\">\r\n                <PartnerInfo\r\n                    info={partnerInfo}\r\n                />\r\n            </div>\r\n            <div className=\"col-12\">\r\n                {renderMessage()}\r\n            </div>\r\n            <div className='col-12'>\r\n                <div className=\"card\">\r\n                    <div className=\"card-body\">\r\n                        <div className=\"input-group flex-nowrap\">\r\n                            <span className=\"input-group-text\">Link giới thiệu</span>\r\n                            <input readOnly defaultValue={refLink} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Link giới thiệu\" />\r\n                            <CopyToClipboard text={refLink} onCopy={() => {\r\n                                Notification.success('Đã sao chép link giới thiệu')\r\n                            }}>\r\n                                <span className=\"input-group-text text-primary\" style={{ cursor: 'pointer' }}><IoCopyOutline className='me-1' />Sao chép</span>\r\n                            </CopyToClipboard>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default DashboardPage","import PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport { IoCartOutline } from 'react-icons/io5'\r\nimport { CategoryDropdownTree, ClearButton, FormatNumber, IconButton, SearchButton } from './../../../../../components'\r\n\r\nconst filters = {\r\n    keyword: '',\r\n    catId: 0\r\n}\r\n\r\nfunction Filter(props) {\r\n    const { onSearch, categories } = props\r\n\r\n    const [keyword, setKeyword] = useState('')\r\n\r\n    const [catId, setCatId] = useState(0)\r\n\r\n    const handleSearch = () => {\r\n        onSearch(filters)\r\n    }\r\n\r\n    const handleClear = () => {\r\n        setKeyword('')\r\n        filters.keyword = ''\r\n        setCatId(0)\r\n        filters.catId = 0\r\n        onSearch(filters)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n                        <input\r\n                            autoFocus\r\n                            onChange={e => {\r\n                                const value = e.target.value\r\n                                setKeyword(value)\r\n                                filters.keyword = value\r\n                            }}\r\n                            onKeyDown={e => {\r\n                                if (e.key === 'Enter') {\r\n                                    handleSearch()\r\n                                }\r\n                            }}\r\n                            value={keyword} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Mã, tên sản phẩm\" />\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-3\">\r\n                        <CategoryDropdownTree\r\n                            options={categories}\r\n                            value={catId}\r\n                            onChange={(value) => {\r\n                                setCatId(value)\r\n                                filters.catId = value\r\n                            }}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-12 col-xxl-7\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={handleSearch} />\r\n                            <ClearButton onClick={handleClear} />\r\n                            <IconButton\r\n                                icon={<IoCartOutline />}\r\n                                className=\"float-end mb-0\"\r\n                                onClick={(setIsBusyOrder) => props.onOrder(setIsBusyOrder)}\r\n                            >\r\n                                Đặt hàng <span className=\"badge bg-light text-dark\"><FormatNumber>{props.countCart}</FormatNumber></span>\r\n                            </IconButton>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func,\r\n    onOrder: PropTypes.func,\r\n    categories: PropTypes.array,\r\n    countCart: PropTypes.number\r\n}\r\n\r\nFilter.defaultProps = {\r\n    onSearch: () => { },\r\n    onOrder: () => { },\r\n    categories: [],\r\n    countCart: 0\r\n}\r\n\r\nexport default Filter","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { IoCartOutline } from 'react-icons/io5'\r\nimport { FormatNumber, IconButton } from './../../../../../components'\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nconst apiUrl = window.apiUrl\r\n\r\nconst List = (props) => {\r\n    const onShowDetail = (productId) => {\r\n        props.onShowDetail(productId)\r\n    }\r\n\r\n    const renderList = () => {\r\n        if (props.products === null) return <div className=\"col-12 text-center\">\r\n            <div className=\"spinner-border text-primary me-1\" role=\"status\"></div>\r\n        </div>\r\n        else if (props.products.length === 0) return <div className=\"col-12\">\r\n            <p className=\"mb-0 text-center\">Không tìm thấy dữ liệu</p>\r\n        </div>\r\n        else return props.products.map(item => {\r\n            const avatarUrl = (item.AvatarUrl === '' || item.AvatarUrl === null ? noImgUrl : `${apiUrl}/admin/storage/thumbnail?url=${item.AvatarUrl}&size=300`)\r\n            return <div className=\"col\" key={item.ProductId}>\r\n                <p className=\"bg-img cursor-point\" style={{ background: `url('${avatarUrl}')` }} onClick={() => onShowDetail(item.ProductId)}></p>\r\n                <p className=\"text-primary cursor-point mb-1 trunk\" onClick={() => onShowDetail(item.ProductId)}>{item.ProductName}</p>\r\n                <p className=\"mb-1\">{item.ProductCode}</p>\r\n                <p className=\"mb-1\">Giá CTV <span className=\"float-end\"><FormatNumber>{item.UnitPriceByPartnerGroup}</FormatNumber></span></p>\r\n                <p className=\"text-danger mb-1\">Bán lẻ đề xuất <span className=\"float-end\"><FormatNumber>{item.OutputPrice}</FormatNumber></span></p>\r\n                <p className=\"mb-1\">Kho hàng <span className=\"float-end\"><FormatNumber>{item.Quantity}</FormatNumber></span></p>\r\n                <IconButton\r\n                    icon={<IoCartOutline />}\r\n                    text=\"Thêm vào giỏ hàng\"\r\n                    variant=\"success\"\r\n                    className=\"w-100\"\r\n                    onClick={(setIsBusy) => props.onAddToCart(item.ProductId, setIsBusy)}\r\n                />\r\n            </div>\r\n        })\r\n    }\r\n\r\n    return (\r\n        <div className=\"row gy-3 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 row-cols-xl-4 row-cols-xxl-6\">\r\n            {renderList()}\r\n        </div>\r\n    )\r\n}\r\n\r\nList.propTypes = {\r\n    products: PropTypes.array,\r\n    onAddToCart: PropTypes.func,\r\n    onShowDetail: PropTypes.func\r\n}\r\n\r\nList.defaultProps = {\r\n    products: [],\r\n    onAddToCart: () => { },\r\n    onShowDetail: () => { }\r\n}\r\n\r\nexport default List","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, FormatNumber, Notification, NumberUpDown, SaveButton, AvatarRow } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    Products: yup.array().nullable()\r\n})\r\n\r\nconst ModalAddToCart = (props) => {\r\n    const { setValue, control, handleSubmit, reset } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const renderTable = () => {\r\n        return props.products.map((item, index) => <tr key={item.ProductId}>\r\n            <td className=\"text-center\">{index + 1}</td>\r\n            <td>\r\n                <AvatarRow\r\n                    url={item.AvatarUrl}\r\n                />\r\n                {item.ProductName}\r\n            </td>\r\n            <td className=\"text-end text-primary\">\r\n                <FormatNumber>\r\n                    {renderQty(item)}\r\n                </FormatNumber>\r\n            </td>\r\n            <td className=\"w-220-px\">\r\n                {renderNumberInput(item, index)}\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    const renderQty = (item) => {\r\n        if (item.ProductStatusId !== 1) return 0\r\n        else return item.Quantity\r\n    }\r\n\r\n    const renderNumberInput = (item, index) => {\r\n        if (item.Quantity > 0 && item.ProductStatusId === 1) {\r\n            return <Controller\r\n                control={control}\r\n                name={`Products.${index}.Quantity`}\r\n                render={({\r\n                    field: { onChange, onBlur, value, name, ref }\r\n                }) => (\r\n                    <NumberUpDown\r\n                        onChange={onChange}\r\n                    />\r\n                )}\r\n            />\r\n        }\r\n    }\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                const products = props.products.map(item => {\r\n                    return {\r\n                        ProductId: item.ProductId,\r\n                        Quantity: 0\r\n                    }\r\n                })\r\n                setValue('Products', products)\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm vào giỏ hàng</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                const products = formData.Products.filter(n => n.Quantity !== undefined && n.Quantity !== 0)\r\n                formData.Products = products\r\n                if (formData.Products.length === 0) {\r\n                    Notification.warning('Vui lòng nhập số lượng sản phẩm trước khi thêm vào giở hàng')\r\n                    return\r\n                }\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"table-responsive\">\r\n                        <table className=\"table table-centered table-input mb-0\">\r\n                            <thead>\r\n                                <tr>\r\n                                    <th className=\"w-52-px\">#</th>\r\n                                    <th>Tên sản phẩm</th>\r\n                                    <th className='text-end'>Kho hàng</th>\r\n                                    <th>Số lượng</th>\r\n                                </tr>\r\n                            </thead>\r\n                            <tbody>\r\n                                {renderTable()}\r\n                            </tbody>\r\n                        </table>\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAddToCart.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    products: PropTypes.array\r\n}\r\n\r\nModalAddToCart.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    products: []\r\n}\r\n\r\nexport default ModalAddToCart","import React, { useEffect, useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { Modal } from 'react-bootstrap'\r\nimport { CloseButton, FormatNumber, NumberUpDown, IconButton, Notification } from './../../../../../components'\r\nimport { IoCartOutline } from 'react-icons/io5'\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nconst apiUrl = window.apiUrl\r\n\r\nconst ModalDetail = (props) => {\r\n    const [qty, setQty] = useState(0)\r\n\r\n    const [productId, setProductId] = useState(0)\r\n\r\n    const [parentInfo, setParentInfo] = useState({\r\n        detail: '',\r\n        avatarUrl: '',\r\n        customerPrice: 0,\r\n        partnerPrice: 0,\r\n        productName: ''\r\n    })\r\n\r\n    const [children, setChildren] = useState([])\r\n\r\n    useEffect(() => {\r\n        if (props.data.Parent !== undefined) {\r\n            const parent = props.data.Parent\r\n            const avatarUrl = (parent.AvatarUrl === '' || parent.AvatarUrl === null ? noImgUrl : `${apiUrl}/admin/storage/thumbnail?url=${parent.AvatarUrl}&size=300`)\r\n            setParentInfo({\r\n                detail: parent.Detail,\r\n                avatarUrl: avatarUrl,\r\n                customerPrice: parent.CustomerPrice,\r\n                partnerPrice: parent.PartnerPrice,\r\n                productName: parent.ProductName\r\n            })\r\n        }\r\n        if (props.data.Children !== undefined) {\r\n            const childrenArray = props.data.Children.map(item => {\r\n                return {\r\n                    ProductId: item.ProductId,\r\n                    ExtensionName: item.ExtensionName,\r\n                    IsSelected: false,\r\n                    Quantity: item.Quantity,\r\n                    StatusId: item.ProductStatusId\r\n                }\r\n            })\r\n            setChildren(childrenArray)\r\n        }\r\n    }, [props.data])\r\n\r\n    const renderChildren = () => {\r\n        return children.map(item => {\r\n            let extName = item.ExtensionName.trim()\r\n            if (extName !== '' || extName != null) {\r\n                if (extName.startsWith('-')) {\r\n                    extName = extName.substring(1).trim()\r\n                }\r\n            }\r\n            const isDisabled = (item.Quantity < 1 || item.StatusId !== 1)\r\n            return <button key={item.ProductId}\r\n                disabled={isDisabled}\r\n                type=\"button\" className={item.IsSelected ? 'btn btn-sm btn-danger' : 'btn btn-sm btn-success'}\r\n                onClick={() => {\r\n                    const childrenArray = [...children]\r\n                    for (let i = 0; i < childrenArray.length; i++) {\r\n                        childrenArray[i].IsSelected = false\r\n                    }\r\n                    const index = childrenArray.findIndex(n => n.ProductId === item.ProductId)\r\n                    childrenArray[index].IsSelected = true\r\n                    setChildren(childrenArray)\r\n                    setProductId(item.ProductId)\r\n                }}\r\n            >{extName} - <FormatNumber>{item.Quantity}</FormatNumber></button>\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n            onExited={() => {\r\n                setQty(0)\r\n                setProductId(0)\r\n            }}\r\n            onShow={() => {\r\n\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chi tiết sản phẩm</Modal.Title>\r\n            </Modal.Header>\r\n            <Modal.Body>\r\n                <div className=\"row\">\r\n                    <div className=\"col-md-3\">\r\n                        <p className=\"bg-img\" style={{ background: `url('${parentInfo.avatarUrl}')` }}></p>\r\n                    </div>\r\n                    <div className=\"col-md-9\">\r\n                        <h3 className=\"mt-0\">{parentInfo.productName}</h3>\r\n                        <div className=\"row\">\r\n                            <div className=\"col-6\">\r\n                                <div className=\"mt-2\">\r\n                                    <h6 className=\"font-14\">Giá đề xuất</h6>\r\n                                    <h3>\r\n                                        <FormatNumber>\r\n                                            {parentInfo.customerPrice}\r\n                                        </FormatNumber>\r\n                                    </h3>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"col-6\">\r\n                                <div className=\"mt-2\">\r\n                                    <h6 className=\"font-14\">Giá cộng tác viên</h6>\r\n                                    <h3>\r\n                                        <FormatNumber>\r\n                                            {parentInfo.partnerPrice}\r\n                                        </FormatNumber>\r\n                                    </h3>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                        <div className=\"mt-3 button-list\">\r\n                            {renderChildren()}\r\n                        </div>\r\n                        <div className=\"mt-3\">\r\n                            <h6 className=\"font-14\">Số lượng</h6>\r\n                            <div className=\"d-flex\">\r\n                                <NumberUpDown\r\n                                    className=\"w-150-px me-2\"\r\n                                    value={qty}\r\n                                    onChange={setQty}\r\n                                />\r\n                                <IconButton\r\n                                    text=\"Thêm vào giỏ hàng\"\r\n                                    variant=\"primary\"\r\n                                    icon={<IoCartOutline />}\r\n                                    onClick={(setIsBusyBtn) => {\r\n                                        if (productId === 0) {\r\n                                            Notification.warning('Vui lòng chọn sản phẩm trước khi thêm vào giỏ hàng')\r\n                                            return\r\n                                        }\r\n                                        if (qty < 1) {\r\n                                            Notification.warning('Vui lòng chọn số lượng sản phẩm trước khi thêm vào giỏ hàng')\r\n                                            return\r\n                                        }\r\n                                        props.onSave({\r\n                                            Products: [\r\n                                                {\r\n                                                    ProductId: productId,\r\n                                                    Quantity: qty\r\n                                                }\r\n                                            ]\r\n                                        }, setIsBusyBtn)\r\n                                    }}\r\n                                />\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div className=\"mt-3\" dangerouslySetInnerHTML={{ __html: parentInfo.detail }} />\r\n            </Modal.Body>\r\n            <Modal.Footer>\r\n                <CloseButton onClick={props.onClose} />\r\n            </Modal.Footer>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalDetail.propTypes = {\r\n    isShow: PropTypes.bool,\r\n    data: PropTypes.object,\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func\r\n}\r\n\r\nModalDetail.defaultProps = {\r\n    isShow: false,\r\n    data: {},\r\n    onSave: () => { },\r\n    onClose: () => { }\r\n}\r\n\r\nexport default ModalDetail","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport { IoTrashOutline } from 'react-icons/io5'\r\nimport NumberFormat from 'react-number-format'\r\nimport Select from 'react-select'\r\nimport * as yup from \"yup\"\r\nimport {\r\n    AvatarRow, CloseButton, EmptyRow, FormatNumber,\r\n    InputSelect, LoadingRow, Notification, SaveButton, Config,\r\n    CheckBox, UploadFileButton\r\n} from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    CustomerName: yup.string().max(100, 'Tên người nhận quá dài'),\r\n    CustomerPhone: yup.string().max(20, 'Số điện thoại quá dài'),\r\n    CustomerAddress: yup.string().max(200, 'Địa chỉ quá dài'),\r\n    CustomerWardObj: yup.object().nullable(),\r\n    CustomerWardId: yup.number().nullable(),\r\n    WarehouseNote: yup.string().max(1_000, 'Ghi chú gửi kho quá dài'),\r\n    ShippingUnitObj: yup.object().required('Vui lòng chọn đơn vị giao hàng'),\r\n    ShippingUnitId: yup.number().nullable(),\r\n    WaybillCode: yup.string().required('Vui lòng nhập mã đơn hàng').max(50, 'Mã đơn hàng quá dài'),\r\n    ShippingWeight: yup.number().max(2_000_000_000, 'Trọng lượng quá lớn'),\r\n    ShippingMethodObj: yup.object().required('Vui lòng chọn phương thức vận chuyển'),\r\n    ShippingMethodId: yup.number().nullable(),\r\n    ShippingFeeTypeId: yup.number().required('Vui lòng chọn phí vận chuyển'),\r\n    ShippingFeeAmount: yup.number().max(2_000_000_000, 'Phí vận chuyển quá lớn'),\r\n    ShippingNote: yup.string().max(1_000, 'Ghi chú vận chuyển quá dài'),\r\n    OrderTypeId: yup.number().required('Vui lòng chọn loại đơn hàng'),\r\n    Products: yup.array(),\r\n    IsUseFreeShip: yup.bool()\r\n})\r\n\r\nconst orderTypes = Config.orderTypes\r\n\r\nconst shippingTypes = Config.shippingTypes\r\n\r\nconst ModalOrder = (props) => {\r\n    const { setValue, getValues, control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema),\r\n        defaultValues: {\r\n            ShippingNote: Config.shippingNote,\r\n            OrderTypeId: 1,\r\n            ShippingFeeTypeId: 1,\r\n            ShippingFeeAmount: 0,\r\n            ShippingWeight: 0\r\n        }\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [provinces, setProvinces] = useState([])\r\n\r\n    const [province, setProvince] = useState()\r\n\r\n    const [districts, setDistricts] = useState([])\r\n\r\n    const [district, setDistrict] = useState()\r\n\r\n    const [wards, setWards] = useState([])\r\n\r\n    const [shippingUnits, setShippingUnits] = useState([])\r\n\r\n    const [shippingMethods, setShippingMethods] = useState([])\r\n\r\n    const [tienHang, setTienHang] = useState(0)\r\n\r\n    const [fileName, setFileName] = useState('')\r\n\r\n    useEffect(() => {\r\n        const provinceArray = props.provinces.map(item => {\r\n            return {\r\n                value: item.ProvinceId,\r\n                label: `${item.Prefix} ${item.ProvinceName}`\r\n            }\r\n        })\r\n        setProvinces(provinceArray)\r\n    }, [props.provinces])\r\n\r\n    useEffect(() => {\r\n        const districtArray = props.districts.map(item => {\r\n            return {\r\n                value: item.DistrictId,\r\n                label: `${item.Prefix} ${item.DistrictName}`\r\n            }\r\n        })\r\n        setDistricts(districtArray)\r\n    }, [props.districts])\r\n\r\n    useEffect(() => {\r\n        const wardArray = props.wards.map(item => {\r\n            return {\r\n                value: item.WardId,\r\n                label: `${item.Prefix} ${item.WardName}`\r\n            }\r\n        })\r\n        setWards(wardArray)\r\n    }, [props.wards])\r\n\r\n    useEffect(() => {\r\n        const shippingUnitArray = props.shippingUnits.map(item => {\r\n            return {\r\n                value: item.ShippingUnitId,\r\n                label: item.ShippingUnitName\r\n            }\r\n        })\r\n        setShippingUnits(shippingUnitArray)\r\n    }, [props.shippingUnits])\r\n\r\n    useEffect(() => {\r\n        const shippingMethodArray = props.shippingMethods.map(item => {\r\n            return {\r\n                value: item.ShippingMethodId,\r\n                label: item.ShippingMethodName\r\n            }\r\n        })\r\n        setShippingMethods(shippingMethodArray)\r\n    }, [props.shippingMethods])\r\n\r\n    useEffect(() => {\r\n\r\n        const tongTienHang = props.products.reduce((prev, current) => {\r\n            return prev + current.TotalAmount\r\n        }, 0)\r\n        setTienHang(tongTienHang)\r\n\r\n        const productArray = props.products.map(item => {\r\n            return {\r\n                ProductId: item.ProductId,\r\n                Quantity: item.Quantity\r\n            }\r\n        })\r\n        setValue('Products', productArray)\r\n        // eslint-disable-next-line\r\n    }, [props.products])\r\n\r\n    const renderProduct = () => {\r\n        const products = props.products\r\n        if (products === null) return <LoadingRow colSpan={6} />\r\n        else if (products.length === 0) return <EmptyRow colSpan={6} />\r\n        else return products.map((item, index) => <tr key={item.CartId}>\r\n            <td className=\"text-center\">{index + 1}</td>\r\n            <td>\r\n                <AvatarRow\r\n                    url={item.AvatarUrl}\r\n                />\r\n                {item.ProductName}\r\n            </td>\r\n            <td className=\"text-end text-primary\">{item.Quantity}</td>\r\n            <td className=\"text-end text-primary\">\r\n                <FormatNumber>\r\n                    {item.UnitPrice}\r\n                </FormatNumber>\r\n            </td>\r\n            <td className=\"text-end text-primary\">\r\n                <FormatNumber>\r\n                    {item.TotalAmount}\r\n                </FormatNumber>\r\n            </td>\r\n            <td className=\"text-end text-danger\">\r\n                <IoTrashOutline className=\"cursor-point\" onClick={() => props.onRemoveCart(item.CartId)} />\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n            onExited={() => {\r\n                reset()\r\n                setFileName('')\r\n            }}\r\n            onShow={() => {\r\n\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Đặt hàng</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n\r\n                if (props.products.length === 0) {\r\n                    Notification.warning('Vui lòng chọn sản phẩm trước khi đặt hàng')\r\n                    return\r\n                }\r\n\r\n                const customerWardObj = getValues('CustomerWardObj')\r\n                formData.CustomerWardId = (customerWardObj !== undefined ? customerWardObj.value : 0)\r\n                delete formData['CustomerWardObj']\r\n\r\n                const shippingUnitObj = getValues('ShippingUnitObj')\r\n                formData.ShippingUnitId = (shippingUnitObj !== undefined ? shippingUnitObj.value : 0)\r\n                delete formData['ShippingUnitObj']\r\n\r\n                const shippingMethodObj = getValues('ShippingMethodObj')\r\n                formData.ShippingMethodId = (shippingMethodObj !== undefined ? shippingMethodObj.value : 0)\r\n                delete formData['ShippingMethodObj']\r\n\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"card border-primary border\">\r\n                        <div className=\"card-body\">\r\n                            <h5 className=\"card-title text-primary\">Thông tin khách hàng</h5>\r\n                            <div className=\"row gy-2\">\r\n                                <div className=\"col-md-3\">\r\n                                    <div className=\"relative-position\">\r\n                                        <label className=\"form-label\">Người nhận</label>\r\n                                        <input {...register('CustomerName')} type=\"text\" className=\"form-control\" placeholder=\"Người nhận\" />\r\n                                        {errors.CustomerName && <div className=\"validation-message\">{errors.CustomerName.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-3\">\r\n                                    <div className=\"relative-position\">\r\n                                        <label className=\"form-label\">Điện thoại</label>\r\n                                        <input {...register('CustomerPhone')} type=\"text\" className=\"form-control\" placeholder=\"Điện thoại\" />\r\n                                        {errors.CustomerPhone && <div className=\"validation-message\">{errors.CustomerPhone.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-6\">\r\n                                    <div className=\"relative-position\">\r\n                                        <label className=\"form-label\">Địa chỉ</label>\r\n                                        <input {...register('CustomerAddress')} type=\"text\" className=\"form-control\" placeholder=\"Địa chỉ\" />\r\n                                        {errors.CustomerAddress && <div className=\"validation-message\">{errors.CustomerAddress.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-4\">\r\n                                    <div className=\"relative-position\">\r\n                                        <label className=\"form-label\">Tỉnh/Tp</label>\r\n                                        <Select\r\n                                            className=\"react-select-container\"\r\n                                            classNamePrefix=\"custom-select\"\r\n                                            isSearchable={true}\r\n                                            isClearable={true}\r\n                                            options={provinces}\r\n                                            value={province}\r\n                                            onChange={item => {\r\n                                                setProvince(item)\r\n                                                setDistrict(null)\r\n                                                setValue('CustomerWardId', null)\r\n                                                setValue('CustomerWardObj', null)\r\n                                                props.onProvinceChange(item !== null ? item.value : 0)\r\n                                            }}\r\n                                            placeholder='Tỉnh/Tp'\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-4\">\r\n                                    <div className=\"relative-position\">\r\n                                        <label className=\"form-label\">Quận/Huyện</label>\r\n                                        <Select\r\n                                            className=\"react-select-container\"\r\n                                            classNamePrefix=\"custom-select\"\r\n                                            isSearchable={true}\r\n                                            isClearable={false}\r\n                                            options={districts}\r\n                                            value={district}\r\n                                            onChange={item => {\r\n                                                setDistrict(item)\r\n                                                setValue('CustomerWardId', null)\r\n                                                setValue('CustomerWardObj', null)\r\n                                                props.onDistrictChange(item.value)\r\n                                            }}\r\n                                            placeholder='Quận/Huyện'\r\n                                            noOptionsMessage={() => 'Quận/Huyện'}\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-4\">\r\n                                    <div className=\"relative-position\">\r\n                                        <label className=\"form-label\">Phường/Xã</label>\r\n                                        <Controller\r\n                                            control={control}\r\n                                            name=\"CustomerWardObj\"\r\n                                            render={({\r\n                                                field: { onChange, value }\r\n                                            }) => (\r\n                                                <Select\r\n                                                    className=\"react-select-container\"\r\n                                                    classNamePrefix=\"custom-select\"\r\n                                                    isSearchable={true}\r\n                                                    isClearable={false}\r\n                                                    options={wards}\r\n                                                    value={value}\r\n                                                    onChange={item => {\r\n                                                        onChange(item)\r\n                                                    }}\r\n                                                    placeholder='Phường/Xã'\r\n                                                    noOptionsMessage={() => 'Phường/Xã'}\r\n                                                />\r\n                                            )}\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"card border-primary border\">\r\n                        <div className=\"card-body\">\r\n                            <h5 className=\"card-title text-primary\">Danh sách sản phẩm</h5>\r\n                            <div className=\"relative-position\">\r\n                                <div className=\"table-responsive\">\r\n                                    <table className=\"table table-centered table-avatar mb-2\">\r\n                                        <thead>\r\n                                            <tr>\r\n                                                <th className=\"w-52-px\">#</th>\r\n                                                <th>Tên sản phẩm</th>\r\n                                                <th>Số lượng</th>\r\n                                                <th>Giá CTV</th>\r\n                                                <th>Thành tiền</th>\r\n                                                <th className=\"w-52-px\"></th>\r\n                                            </tr>\r\n                                        </thead>\r\n                                        <tbody>\r\n                                            {renderProduct()}\r\n                                            <tr>\r\n                                                <td colSpan={4} className=\"text-end fw-bold\">Tổng thành tiền</td>\r\n                                                <td className=\"text-end text-primary\">\r\n                                                    <FormatNumber>\r\n                                                        {tienHang}\r\n                                                    </FormatNumber>\r\n                                                </td>\r\n                                                <td></td>\r\n                                            </tr>\r\n                                        </tbody>\r\n                                    </table>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Cộng tác viên thanh toán với kho</label>\r\n                                <div className=\"table-responsive\">\r\n                                    <table className=\"table table-centered\">\r\n                                        <tbody>\r\n                                            <tr>\r\n                                                <td className=\"text-end w-50-pc\">Tiền hàng</td>\r\n                                                <td className=\"text-primary\">\r\n                                                    <FormatNumber>\r\n                                                        {tienHang}\r\n                                                    </FormatNumber>\r\n                                                </td>\r\n                                            </tr>\r\n                                            <tr>\r\n                                                <td className=\"text-end\">Phí dropship</td>\r\n                                                <td className=\"text-primary\">\r\n                                                    <FormatNumber>\r\n                                                        {props.dropShipFee}\r\n                                                    </FormatNumber>\r\n                                                </td>\r\n                                            </tr>\r\n                                            <tr>\r\n                                                <td className=\"text-end fw-bold\">Cộng tác viên thanh toán</td>\r\n                                                <td className=\"text-primary\">\r\n                                                    <FormatNumber>\r\n                                                        {props.dropShipFee + tienHang}\r\n                                                    </FormatNumber>\r\n                                                </td>\r\n                                            </tr>\r\n                                        </tbody>\r\n                                    </table>\r\n                                </div>\r\n                            </div>\r\n                            <div className='row gy-2'>\r\n                                <div className='col-md-4'>\r\n                                    <div className=\"relative-position\">\r\n                                        <label className=\"form-label\">Miễn phí đóng gói (đang có {props.freeShipQty} lần)</label>\r\n                                        <Controller\r\n                                            control={control}\r\n                                            name=\"IsUseFreeShip\"\r\n                                            render={({\r\n                                                field: { onChange, value }\r\n                                            }) => (\r\n                                                <CheckBox\r\n                                                    className=''\r\n                                                    title='Sử dụng'\r\n                                                    onChange={isCheck => {\r\n                                                        onChange(isCheck)\r\n                                                        props.onFreeShipChange(isCheck)\r\n                                                    }}\r\n                                                    checked={value}\r\n                                                />\r\n                                            )}\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                                <div className='col-md-8'>\r\n                                    <div className=\"relative-position\">\r\n                                        <label className=\"form-label\">Ghi chú gửi kho</label>\r\n                                        {/* <textarea {...register('WarehouseNote')} rows=\"2\" className=\"form-control\" placeholder=\"Ghi chú gửi kho\"></textarea> */}\r\n                                        <input {...register('WarehouseNote')} className=\"form-control\" placeholder=\"Ghi chú gửi kho\" type='text' />\r\n                                        {errors.WarehouseNote && <div className=\"validation-message\">{errors.WarehouseNote.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"card border-primary border mb-0\">\r\n                        <div className=\"card-body\">\r\n                            <h5 className=\"card-title text-primary mb-2\">Vận chuyển</h5>\r\n                            <div className=\"row\">\r\n                                <div className=\"col-md-6\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Đơn vị giao hàng <span className=\"text-danger\">*</span></label>\r\n                                        <Controller\r\n                                            control={control}\r\n                                            name=\"ShippingUnitObj\"\r\n                                            render={({\r\n                                                field: { onChange, value }\r\n                                            }) => (\r\n                                                <Select\r\n                                                    className=\"react-select-container\"\r\n                                                    classNamePrefix=\"custom-select\"\r\n                                                    isSearchable={false}\r\n                                                    isClearable={false}\r\n                                                    options={shippingUnits}\r\n                                                    value={value}\r\n                                                    onChange={item => {\r\n                                                        onChange(item)\r\n                                                    }}\r\n                                                    placeholder='Đơn vị giao hàng'\r\n                                                    noOptionsMessage={() => 'Đơn vị giao hàng'}\r\n                                                />\r\n                                            )}\r\n                                        />\r\n                                        {errors.ShippingUnitObj && <div className=\"validation-message\">{errors.ShippingUnitObj.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-3\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Mã vận đơn <span className=\"text-danger\">*</span></label>\r\n                                        <input {...register('WaybillCode')} type=\"text\" className=\"form-control\" placeholder=\"Mã vận đơn\" />\r\n                                        {errors.WaybillCode && <div className=\"validation-message\">{errors.WaybillCode.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-3\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Trọng lượng</label>\r\n                                        <div className=\"input-group\">\r\n                                            <Controller\r\n                                                control={control}\r\n                                                name=\"ShippingWeight\"\r\n                                                render={({\r\n                                                    field: { onChange, value }\r\n                                                }) => (\r\n                                                    <NumberFormat\r\n                                                        placeholder='Trọng lượng'\r\n                                                        className=\"form-control\"\r\n                                                        // thousandSeparator={\".\"}\r\n                                                        // decimalSeparator={\",\"}\r\n                                                        allowNegative={false}\r\n                                                        defaultValue={0}\r\n                                                        decimalScale={0}\r\n                                                        value={value}\r\n                                                        onValueChange={val => onChange(val.value)}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                            <span className=\"input-group-text\">Gram</span>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-5\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Loại đơn <span className=\"text-danger\">*</span></label>\r\n                                        <Controller\r\n                                            control={control}\r\n                                            name=\"OrderTypeId\"\r\n                                            render={({\r\n                                                field: { onChange, value }\r\n                                            }) => (\r\n                                                <InputSelect\r\n                                                    options={orderTypes}\r\n                                                    value={value}\r\n                                                    defaultValue={1}\r\n                                                    name='order-type'\r\n                                                    variant='success'\r\n                                                    onChange={onChange}\r\n                                                />\r\n                                            )}\r\n                                        />\r\n                                        {errors.OrderTypeId && <div className=\"validation-message\">{errors.OrderTypeId.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-7\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Phương thức vận chuyển <span className=\"text-danger\">*</span></label>\r\n                                        <Controller\r\n                                            control={control}\r\n                                            name=\"ShippingMethodObj\"\r\n                                            render={({\r\n                                                field: { onChange, value }\r\n                                            }) => (\r\n                                                <Select\r\n                                                    className=\"react-select-container\"\r\n                                                    classNamePrefix=\"custom-select\"\r\n                                                    isSearchable={false}\r\n                                                    isClearable={false}\r\n                                                    options={shippingMethods}\r\n                                                    value={value}\r\n                                                    onChange={item => {\r\n                                                        onChange(item)\r\n                                                    }}\r\n                                                    placeholder='Phương thức vận chuyển'\r\n                                                    noOptionsMessage={() => 'Phương thức vận chuyển'}\r\n                                                />\r\n                                            )}\r\n                                        />\r\n                                        {errors.ShippingMethodObj && <div className=\"validation-message\">{errors.ShippingMethodObj.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-8\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Loại phí vận chuyển <span className=\"text-danger\">*</span></label>\r\n                                        <Controller\r\n                                            control={control}\r\n                                            name=\"ShippingFeeTypeId\"\r\n                                            render={({\r\n                                                field: { onChange, value }\r\n                                            }) => (\r\n                                                <InputSelect\r\n                                                    options={shippingTypes}\r\n                                                    value={value}\r\n                                                    defaultValue={1}\r\n                                                    name='shipping-fee-type'\r\n                                                    variant='success'\r\n                                                    onChange={onChange}\r\n                                                />\r\n                                            )}\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                                <div className=\"col-md-4\">\r\n                                    <div className=\"relative-position mb-2\">\r\n                                        <label className=\"form-label\">Phí vận chuyển thỏa thuận</label>\r\n                                        <div className=\"input-group\">\r\n                                            <Controller\r\n                                                control={control}\r\n                                                name=\"ShippingFeeAmount\"\r\n                                                render={({\r\n                                                    field: { onChange, value }\r\n                                                }) => (\r\n                                                    <NumberFormat\r\n                                                        placeholder='Phí vận chuyển thỏa thuận'\r\n                                                        className=\"form-control\"\r\n                                                        // thousandSeparator={\".\"}\r\n                                                        // decimalSeparator={\",\"}\r\n                                                        allowNegative={false}\r\n                                                        defaultValue={0}\r\n                                                        decimalScale={0}\r\n                                                        value={value}\r\n                                                        onValueChange={val => onChange(val.value)}\r\n                                                    />\r\n                                                )}\r\n                                            />\r\n                                            <span className=\"input-group-text\">VNĐ</span>\r\n                                        </div>\r\n                                        {errors.ShippingFeeAmount && <div className=\"validation-message\">{errors.ShippingFeeAmount.message}</div>}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <div className=\"relative-position\">\r\n                                <label className=\"form-label\">Ghi chú vận chuyển</label>\r\n                                <textarea {...register('ShippingNote')} rows=\"2\" className=\"form-control\" placeholder=\"Ghi chú vận chuyển\"></textarea>\r\n                                {errors.ShippingNote && <div className=\"validation-message\">{errors.ShippingNote.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <span>{fileName}</span>\r\n                    <UploadFileButton onCompleted={data => {\r\n                        if (data.IsSuccess) {\r\n                            setValue('FileUrl', data.Result.FileUrl)\r\n                            setFileName(data.Result.FileName)\r\n                        }\r\n                    }} />\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalOrder.propTypes = {\r\n    isShow: PropTypes.bool,\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    provinces: PropTypes.array,\r\n    onProvinceChange: PropTypes.func,\r\n    districts: PropTypes.array,\r\n    onDistrictChange: PropTypes.func,\r\n    wards: PropTypes.array,\r\n    products: PropTypes.array,\r\n    shippingUnits: PropTypes.array,\r\n    shippingMethods: PropTypes.array,\r\n    onRemoveCart: PropTypes.func,\r\n    dropShipFee: PropTypes.number,\r\n    freeShipQty: PropTypes.number,\r\n    onFreeShipChange: PropTypes.func\r\n}\r\n\r\nModalOrder.defaultProps = {\r\n    isShow: false,\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    provinces: [],\r\n    onProvinceChange: () => { },\r\n    districts: [],\r\n    onDistrictChange: () => { },\r\n    wards: [],\r\n    products: [],\r\n    shippingUnits: [],\r\n    shippingMethods: [],\r\n    onRemoveCart: () => { },\r\n    dropShipFee: 0,\r\n    freeShipQty: 0,\r\n    onFreeShipChange: () => { }\r\n}\r\n\r\nexport default ModalOrder","import React, { useEffect, Fragment, useState } from 'react'\r\nimport { Filter, List, ModalAddToCart, ModalDetail, ModalOrder } from './components'\r\nimport axios from 'axios'\r\nimport { Pagination, Notification } from './../../../components'\r\n\r\nconst ProductPage = (props) => {\r\n    const [products, setProducts] = useState(null)\r\n\r\n    const [categories, setCategories] = useState([])\r\n\r\n    const [countCart, setCountCart] = useState(0)\r\n\r\n    const [modalAddToCartInfo, setModalAddToCartInfo] = useState({\r\n        isShow: false,\r\n        products: []\r\n    })\r\n\r\n    const [modalDetailInfo, setModalDetailInfo] = useState({\r\n        isShow: false,\r\n        data: {}\r\n    })\r\n\r\n    const [modalOrderInfo, setModalOrderInfo] = useState({\r\n        isShow: false,\r\n        products: [],\r\n        dropShipFee: 0,\r\n        dropShipFeeBase: 0,\r\n        freeShipQty: 0\r\n    })\r\n\r\n    const [filters, setFilters] = useState({\r\n        keyword: '',\r\n        catId: 0,\r\n        pageItem: 24,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [pagination, setPagination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [provinceList, setProvinceList] = useState([])\r\n\r\n    const [districtList, setDistrictList] = useState([])\r\n\r\n    const [wardList, setWardList] = useState([])\r\n\r\n    const [shippingUnits, setShippingUnits] = useState([])\r\n\r\n    const [shippingMethods, setShippingMethods] = useState([])\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Danh sách sản phẩm'\r\n        loadCategory()\r\n        loadCountCart()\r\n        loadShippingUnit()\r\n        loadProvince()\r\n        loadShippingMethod()\r\n    }, [])\r\n\r\n    useEffect(() => {\r\n        const url = `/partner/product/get-active?keyword=${filters.keyword}&catId=${filters.catId}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex\r\n                }\r\n                setPagination(newPagination)\r\n                setProducts(data.Result.Data)\r\n            }\r\n        })\r\n    }, [filters])\r\n\r\n    const loadCountCart = () => {\r\n        const url = `/partner/cart/count`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setCountCart(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadCategory = () => {\r\n        const url = '/partner/category/get-active-dropdown'\r\n        axios.get(url).then(res => {\r\n            const data = res.data\r\n            if (data.IsSuccess) {\r\n                setCategories(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadProvince = () => {\r\n        const url = '/partner/province/get-all'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setProvinceList(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadDistrict = (provinceId) => {\r\n        const url = `/partner/province/${provinceId}/districts`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setDistrictList(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadWard = (wardId) => {\r\n        const url = `/partner/district/${wardId}/wards`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setWardList(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadShippingUnit = () => {\r\n        const url = '/partner/shipping-unit/get-dropdown'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setShippingUnits(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadShippingMethod = () => {\r\n        const url = '/partner/shipping-method/get-dropdown'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setShippingMethods(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const reloadProduct = () => {\r\n        setFilters({\r\n            ...filters,\r\n            pageIndex: 1\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <Filter\r\n                onSearch={params => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params,\r\n                        pageIndex: 1\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n                onOrder={(setIsBusy) => {\r\n                    if (countCart < 1) {\r\n                        Notification.warning('Vui lòng chọn sản phẩm trước khi đặt hàng')\r\n                        return\r\n                    }\r\n                    setIsBusy(true)\r\n                    const url = `/partner/cart/product`\r\n                    axios.get(url).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            setModalOrderInfo({\r\n                                isShow: true,\r\n                                products: data.Result.Products,\r\n                                dropShipFee: data.Result.DropShipFee,\r\n                                dropShipFeeBase: data.Result.DropShipFee,\r\n                                freeShipQty: data.Result.FreeShipQty\r\n                            })\r\n                            setIsBusy(false)\r\n                        }\r\n                    })\r\n                }}\r\n                categories={categories}\r\n                countCart={countCart}\r\n            />\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <List\r\n                        products={products}\r\n                        onAddToCart={(productId, setIsBusy) => {\r\n                            setIsBusy(true)\r\n                            const url = `/partner/product/get-children?parentId=${productId}`\r\n                            axios.get(url).then(({ data }) => {\r\n                                if (data.IsSuccess) {\r\n                                    setModalAddToCartInfo({\r\n                                        isShow: true,\r\n                                        products: data.Result\r\n                                    })\r\n                                }\r\n                                setIsBusy(false)\r\n                            })\r\n                        }}\r\n                        onShowDetail={(productId) => {\r\n                            const url = `/partner/product/parent-detail?id=${productId}`\r\n                            axios.get(url).then(({ data }) => {\r\n                                if (data.IsSuccess) {\r\n                                    setModalDetailInfo({\r\n                                        isShow: true,\r\n                                        data: data.Result\r\n                                    })\r\n                                }\r\n                            })\r\n                        }}\r\n                    />\r\n                    <Pagination\r\n                        totalPage={pagination.totalPage}\r\n                        currentPage={pagination.pageIndex}\r\n                        onPageChange={(pIndex) => {\r\n                            const newPagination = { ...pagination, pageIndex: pIndex }\r\n                            setPagination(newPagination)\r\n                            const newFilters = {\r\n                                ...filters,\r\n                                pageIndex: pIndex\r\n                            }\r\n                            setFilters(newFilters)\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n            <ModalAddToCart\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = `/partner/cart/create`\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            setModalAddToCartInfo({\r\n                                isShow: false,\r\n                                products: []\r\n                            })\r\n                            loadCountCart()\r\n                            Notification.success('Thêm sản phẩm vào giỏ hàng thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setModalAddToCartInfo({\r\n                        isShow: false,\r\n                        products: []\r\n                    })\r\n                }}\r\n                isShow={modalAddToCartInfo.isShow}\r\n                products={modalAddToCartInfo.products}\r\n            />\r\n            <ModalDetail\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = `/partner/cart/create`\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            loadCountCart()\r\n                            setModalDetailInfo({\r\n                                isShow: false,\r\n                                data: {}\r\n                            })\r\n                            Notification.success('Thêm sản phẩm vào giỏ hàng thành công')\r\n                        }\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setModalDetailInfo({\r\n                        isShow: false,\r\n                        data: {}\r\n                    })\r\n                }}\r\n                isShow={modalDetailInfo.isShow}\r\n                data={modalDetailInfo.data}\r\n            />\r\n            <ModalOrder\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/partner/order/create'\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            setCountCart(0)\r\n                            reloadProduct()\r\n                            setModalOrderInfo({\r\n                                isShow: false,\r\n                                products: [],\r\n                                dropShipFee: 0\r\n                            })\r\n                            Notification.success('Đặt hàng thành công')\r\n                        }\r\n                    }).finally(() => {\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setModalOrderInfo({\r\n                        isShow: false,\r\n                        products: []\r\n                    })\r\n                }}\r\n                isShow={modalOrderInfo.isShow}\r\n                provinces={provinceList}\r\n                onProvinceChange={(provinceId) => {\r\n                    loadDistrict(provinceId)\r\n                }}\r\n                districts={districtList}\r\n                onDistrictChange={(districtId) => {\r\n                    loadWard(districtId)\r\n                }}\r\n                wards={wardList}\r\n                products={modalOrderInfo.products}\r\n                shippingUnits={shippingUnits}\r\n                shippingMethods={shippingMethods}\r\n                onRemoveCart={(cartId) => {\r\n                    const url = `/partner/cart/remove?cartId=${cartId}`\r\n                    axios.post(url).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            loadCountCart()\r\n                            const temp = modalOrderInfo.products.filter(n => n.CartId !== cartId)\r\n                            setModalOrderInfo({\r\n                                isShow: true,\r\n                                products: temp,\r\n                                dropShipFee: 0\r\n                            })\r\n                        }\r\n                    })\r\n                }}\r\n                dropShipFee={modalOrderInfo.dropShipFee}\r\n                freeShipQty={modalOrderInfo.freeShipQty}\r\n                onFreeShipChange={(isCheck) => {\r\n                    if (isCheck) {\r\n                        setModalOrderInfo({\r\n                            ...modalOrderInfo,\r\n                            dropShipFee: 0\r\n                        })\r\n                    }\r\n                    else {\r\n                        setModalOrderInfo({\r\n                            ...modalOrderInfo,\r\n                            dropShipFee: modalOrderInfo.dropShipFeeBase\r\n                        })\r\n                    }\r\n                }}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default ProductPage","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { SearchButton, ClearButton } from './../../../../../components'\r\n\r\nconst filters = {\r\n    keyword: ''\r\n}\r\n\r\nfunction Filter(props) {\r\n    const { onSearch } = props\r\n\r\n    const [keyword, setKeyword] = useState('')\r\n\r\n    const handleSearch = () => {\r\n        onSearch(filters)\r\n    }\r\n\r\n    const handleClear = () => {\r\n        setKeyword('')\r\n        filters.keyword = ''\r\n        onSearch(filters)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-4 col-md-4 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <input\r\n                            autoFocus\r\n                            onChange={e => {\r\n                                const value = e.target.value\r\n                                setKeyword(value)\r\n                                filters.keyword = value\r\n                            }}\r\n                            onKeyDown={e => {\r\n                                if (e.key === 'Enter') {\r\n                                    handleSearch()\r\n                                }\r\n                            }}\r\n                            value={keyword} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"ID, tên sản phẩm\" />\r\n                    </div>\r\n                    <div className=\"col-sm-8 col-md-8 col-lg-9 col-xl-9 col-xxl-10\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={() => handleSearch()} />\r\n                            <ClearButton onClick={() => handleClear()} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func\r\n}\r\n\r\nFilter.defaultProps = {\r\n    onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { LoadingRow, EmptyRow, FormatNumber, AvatarRow } from './../../../../../components'\r\n\r\nfunction Table(props) {\r\n    const { onAvatarClick } = props\r\n\r\n    const renderTable = () => {\r\n        const data = props.data\r\n        if (data === null) return <LoadingRow colSpan={4} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={4} />\r\n        else return data.map((item, index) => {\r\n            const rowSpan = item.Children.length\r\n            return <Fragment key={item.ProductId}>\r\n                <tr>\r\n                    <td className=\"text-center\" rowSpan={rowSpan}>\r\n                        <FormatNumber>\r\n                            {(props.pageItem * (props.pageIndex - 1)) + index + 1}\r\n                        </FormatNumber>\r\n                    </td>\r\n                    <td rowSpan={rowSpan}>\r\n                        <AvatarRow\r\n                            url={item.AvatarUrl}\r\n                            onClick={(urlObj) => {\r\n                                onAvatarClick(urlObj)\r\n                            }}\r\n                            className=\"cursor-zoom\"\r\n                        />\r\n                        {item.ProductName}\r\n                    </td>\r\n                    {renderFirstChild(item.Children)}\r\n                </tr>\r\n                {renderChildren(item.Children)}\r\n            </Fragment>\r\n        })\r\n    }\r\n\r\n    const renderFirstChild = (children) => {\r\n        if (children.length !== 0) {\r\n            const child = children[0]\r\n            return <Fragment>\r\n                <td>\r\n                    <AvatarRow\r\n                        url={child.AvatarUrl}\r\n                        onClick={(urlObj) => {\r\n                            onAvatarClick(urlObj)\r\n                        }}\r\n                        className=\"cursor-zoom\"\r\n                    />\r\n                    {child.ProductName}\r\n                </td>\r\n                <td>{child.ProductId}</td>\r\n            </Fragment>\r\n        }\r\n        else return <Fragment></Fragment>\r\n    }\r\n\r\n    const renderChildren = (children) => {\r\n        const content = []\r\n        for (let index = 0; index < children.length; index++) {\r\n            const child = children[index];\r\n            if (index === 0) {\r\n                continue\r\n            }\r\n            content.push(<tr key={child.ProductId}>\r\n                <td>\r\n                    <AvatarRow\r\n                        url={child.AvatarUrl}\r\n                        onClick={(urlObj) => {\r\n                            onAvatarClick(urlObj)\r\n                        }}\r\n                        className=\"cursor-zoom\"\r\n                    />\r\n                    {child.ProductName}\r\n                </td>\r\n                <td>{child.ProductId}</td>\r\n            </tr>)\r\n        }\r\n        return content\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered mb-0 table-avatar\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Sản phẩm</th>\r\n                        <th>Sản phẩm thuộc tính</th>\r\n                        <th>ID</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    pageItem: PropTypes.number,\r\n    pageIndex: PropTypes.number,\r\n    data: PropTypes.array,\r\n    onAvatarClick: PropTypes.func,\r\n}\r\n\r\nTable.defaultPropts = {\r\n    pageItem: 0,\r\n    pageIndex: 0,\r\n    data: null,\r\n    onAvatarClick: () => { }\r\n}\r\n\r\nexport default Table","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { Filter, Table } from './components'\r\nimport { Pagination } from './../../../components'\r\nimport ImageViewer from 'react-simple-image-viewer'\r\n\r\nfunction ProductCheckingPage(props) {\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Kiểm tra ID sản phẩm'\r\n    }, [])\r\n\r\n    const [products, setProducts] = useState(null)\r\n\r\n    const [filters, setFilters] = useState({\r\n        keyword: '',\r\n        pageItem: 10,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [pagination, setPagination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [isShowViewer, setIsShowViewer] = useState(false)\r\n\r\n    const [viewerList, setViewerList] = useState([])\r\n\r\n    useEffect(() => {\r\n        const url = `/partner/product/get-checking?keyword=${filters.keyword}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex\r\n                }\r\n                setPagination(newPagination)\r\n                setProducts(data.Result.Data)\r\n            }\r\n        })\r\n    }, [filters])\r\n\r\n    return (\r\n        <Fragment>\r\n            <Filter\r\n                onSearch={params => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params,\r\n                        pageIndex: 1\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n            />\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <Table\r\n                        pageItem={filters.pageItem}\r\n                        pageIndex={filters.pageIndex}\r\n                        data={products}\r\n                        onAvatarClick={(urlObj) => {\r\n                            setIsShowViewer(true)\r\n                            setViewerList([urlObj.fullUrl])\r\n                        }}\r\n                    />\r\n                    <Pagination\r\n                        totalPage={pagination.totalPage}\r\n                        currentPage={pagination.pageIndex}\r\n                        onPageChange={(pIndex) => {\r\n                            const newPagination = { ...pagination, pageIndex: pIndex }\r\n                            setPagination(newPagination)\r\n                            const newFilters = {\r\n                                ...filters,\r\n                                pageIndex: pIndex\r\n                            }\r\n                            setFilters(newFilters)\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n            {isShowViewer && (\r\n                <ImageViewer\r\n                    src={viewerList}\r\n                    currentIndex={0}\r\n                    disableScroll={false}\r\n                    closeOnClickOutside={true}\r\n                    onClose={() => {\r\n                        setIsShowViewer(false)\r\n                    }}\r\n                />\r\n            )}\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default ProductCheckingPage","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { SearchButton, ClearButton } from './../../../../../components'\r\nimport DatePicker from 'react-datepicker'\r\nimport Select from 'react-select'\r\n\r\nconst filters = {\r\n    keyword: '',\r\n    fromDate: '',\r\n    toDate: '',\r\n    statusId: 0,\r\n    orderFromId: 0\r\n}\r\n\r\nconst Filter = (props) => {\r\n    const { onSearch } = props\r\n\r\n    const [keyword, setKeyword] = useState('')\r\n\r\n    const [fromDate, setFromDate] = useState()\r\n\r\n    const [toDate, setToDate] = useState()\r\n\r\n    const [statuses, setStatuses] = useState([])\r\n\r\n    const [status, setStatus] = useState()\r\n\r\n    const [orderFroms, setOrderFroms] = useState([])\r\n\r\n    const [orderFrom, setOrderFrom] = useState()\r\n\r\n    useEffect(() => {\r\n        const orderStatuses = props.orderStatuses.map(item => {\r\n            return {\r\n                value: item.OrderStatusId,\r\n                label: item.OrderStatusName\r\n            }\r\n        })\r\n        setStatuses(orderStatuses)\r\n    }, [props.orderStatuses])\r\n\r\n    useEffect(() => {\r\n        const froms = props.orderFroms.map(item => {\r\n            return {\r\n                value: item.OrderFromId,\r\n                label: item.OrderFromName\r\n            }\r\n        })\r\n        setOrderFroms(froms)\r\n    }, [props.orderFroms])\r\n\r\n    const handleSearch = () => {\r\n        onSearch(filters)\r\n    }\r\n\r\n    const handleClear = () => {\r\n        setKeyword('')\r\n        filters.keyword = ''\r\n        setFromDate(null)\r\n        filters.fromDate = ''\r\n        setToDate(null)\r\n        filters.toDate = ''\r\n        setStatus(null)\r\n        filters.statusId = 0\r\n        setOrderFrom(null)\r\n        filters.orderFromId = 0\r\n        onSearch(filters)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-12 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <input\r\n                            autoFocus\r\n                            onChange={e => {\r\n                                const value = e.target.value\r\n                                setKeyword(value)\r\n                                filters.keyword = value\r\n                            }}\r\n                            onKeyDown={e => {\r\n                                if (e.key === 'Enter') {\r\n                                    handleSearch()\r\n                                }\r\n                            }}\r\n                            value={keyword} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"ID đơn hàng\" />\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <div className=\"input-group flex-nowrap\">\r\n                            <span className=\"input-group-text\">Từ ngày</span>\r\n                            <DatePicker\r\n                                className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n                                placeholderText=\"dd/mm/yyyy\"\r\n                                dateFormat=\"dd/MM/yyyy\"\r\n                                selected={fromDate}\r\n                                onChange={date => {\r\n                                    if (date !== null) {\r\n                                        const day = date.getDate()\r\n                                        const month = date.getMonth() + 1\r\n                                        const year = date.getFullYear()\r\n                                        const strDate = `${day}/${month}/${year}`\r\n                                        filters.fromDate = strDate\r\n                                    }\r\n                                    setFromDate(date)\r\n                                }}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <div className=\"input-group flex-nowrap\">\r\n                            <span className=\"input-group-text\">Đến ngày</span>\r\n                            <DatePicker\r\n                                className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n                                placeholderText=\"dd/mm/yyyy\"\r\n                                dateFormat=\"dd/MM/yyyy\"\r\n                                selected={toDate}\r\n                                onChange={date => {\r\n                                    if (date !== null) {\r\n                                        const day = date.getDate()\r\n                                        const month = date.getMonth() + 1\r\n                                        const year = date.getFullYear()\r\n                                        const strDate = `${day}/${month}/${year}`\r\n                                        filters.toDate = strDate\r\n                                    }\r\n                                    setToDate(date)\r\n                                }}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={false}\r\n                            isClearable={true}\r\n                            options={statuses}\r\n                            value={status}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    setStatus(item)\r\n                                    filters.statusId = item.value\r\n                                }\r\n                                else {\r\n                                    setStatus(null)\r\n                                    filters.statusId = 0\r\n                                }\r\n                            }}\r\n                            placeholder='Trạng thái'\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={false}\r\n                            isClearable={true}\r\n                            options={orderFroms}\r\n                            value={orderFrom}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    setOrderFrom(item)\r\n                                    filters.orderFromId = item.value\r\n                                }\r\n                                else {\r\n                                    setOrderFrom(null)\r\n                                    filters.orderFromId = 0\r\n                                }\r\n                            }}\r\n                            placeholder='Đơn nguồn'\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-12 col-lg-9 col-xl-9 col-xxl-10\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={handleSearch} />\r\n                            <ClearButton onClick={handleClear} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func,\r\n    orderStatuses: PropTypes.array,\r\n    orderFroms: PropTypes.array\r\n}\r\n\r\nFilter.defaultProps = {\r\n    onSearch: () => { },\r\n    orderStatuses: [],\r\n    orderFroms: []\r\n}\r\n\r\nexport default Filter","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { LoadingRow, EmptyRow, FormatNumber, AvatarRow } from '../../../../../components'\r\nimport { IoEllipsisHorizontalSharp, IoEllipsisVertical, IoTrashOutline } from 'react-icons/io5'\r\n\r\nconst Table = (props) => {\r\n    const renderTable = () => {\r\n        const data = props.data\r\n        if (data === null) return <LoadingRow colSpan={10} />\r\n        else if (data.length === 0) return <EmptyRow colSpan={10} />\r\n        else return data.map((item, index) => {\r\n            const rowSpan = item.Products.length\r\n            const firstProduct = item.Products[0]\r\n            return (\r\n                <Fragment key={item.OrderId}>\r\n                    <tr>\r\n                        <td rowSpan={rowSpan} className=\"text-center\">\r\n                            <FormatNumber>\r\n                                {(props.pageItem * (props.pageIndex - 1)) + index + 1}\r\n                            </FormatNumber>\r\n                        </td>\r\n                        <td rowSpan={rowSpan}>\r\n                            <span className=\"fw-bold text-success\">{item.OrderId}</span>\r\n                            <br />\r\n                            <span>{item.CreatedDate}</span>\r\n                            <br />\r\n                            <small className=\"text-muted\">{item.CreatedTime}</small>\r\n                        </td>\r\n                        <td rowSpan={rowSpan}>\r\n                            <p className=\"mb-1\">{item.Phone}</p>\r\n                            {renderAddress(item.Address, item.WardName, item.DistrictName, item.ProvinceNam, item.WardPrefix, item.DistrictPrefix, item.ProvincePrefix)}\r\n                        </td>\r\n                        <td>\r\n                            <p className=\"mb-1\">\r\n                                <AvatarRow\r\n                                    url={firstProduct.AvatarUrl}\r\n                                />\r\n                                {firstProduct.ProductName}\r\n                            </p>\r\n                            <p className=\"mb-0\">\r\n                                <span>Giá: <span className=\"fw-bold text-primary\">\r\n                                    <FormatNumber>\r\n                                        {firstProduct.CustomerUnitPrice}\r\n                                    </FormatNumber>\r\n                                </span></span>\r\n                                <span className=\"float-end\">Số lượng: <span className=\"fw-bold text-primary\">\r\n                                    <FormatNumber>\r\n                                        {firstProduct.Quantity}\r\n                                    </FormatNumber>\r\n                                </span></span>\r\n                            </p>\r\n                        </td>\r\n                        <td rowSpan={rowSpan} className=\"text-end text-primary\">\r\n                            <FormatNumber>\r\n                                {item.SumOutputPrice}\r\n                            </FormatNumber>\r\n                        </td>\r\n                        <td rowSpan={rowSpan}>\r\n                            <p className=\"mb-1\">{item.WaybillCode}</p>\r\n                            <p className=\"mb-1\">{item.ShippingUnitName}</p>\r\n                        </td>\r\n                        <td rowSpan={rowSpan} className=\"text-end\">\r\n                            <p className=\"mb-1 text-primary fw-bold\">\r\n                                <FormatNumber>\r\n                                    {item.SumPartnerPrice}\r\n                                </FormatNumber>\r\n                            </p>\r\n                            <p className=\"mb-0 text-success\">\r\n                                +\r\n                                <FormatNumber>\r\n                                    {item.PartnerDropShipFee}\r\n                                </FormatNumber>\r\n                            </p>\r\n                        </td>\r\n                        <td rowSpan={rowSpan} className=\"text-center text-primary\">\r\n                            <IoEllipsisHorizontalSharp className=\"cursor-point fs-4\" onClick={() => props.onEditWarehouseNote(item)} />\r\n                        </td>\r\n                        <td rowSpan={rowSpan}>\r\n                            {renderStatus(item.OrderStatusId, item.OrderStatusName)}\r\n                        </td>\r\n                        <td rowSpan={rowSpan}>\r\n                            <div className=\"dropdown float-end\">\r\n                                <button className=\"dropdown-toggle arrow-none card-drop btn-drop\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n                                    <IoEllipsisVertical className=\"fs-4 text-primary\" />\r\n                                </button>\r\n                                <div className=\"dropdown-menu dropdown-menu-end\">\r\n                                    <button onClick={() => props.onDelete(item)} className=\"dropdown-item text-danger\"><IoTrashOutline className=\"mn-btn-icon\" />Hủy đơn</button>\r\n                                </div>\r\n                            </div>\r\n                        </td>\r\n                    </tr>\r\n                    {renderProduct(item.Products)}\r\n                </Fragment>\r\n            )\r\n        })\r\n    }\r\n\r\n    const renderAddress = (address, wardName, districtName, provinceName, wardPrefix, districtPrefix, provincePrefix) => {\r\n        if (address !== '' && wardName !== null)\r\n            return <p>{address !== '' ? `${address}, ` : ''}{wardPrefix} {wardName}, {districtPrefix} {districtName}, {provincePrefix} {provinceName}</p>\r\n    }\r\n\r\n    const renderStatus = (statusId, statusName) => {\r\n        if (statusId === 1) return <span className=\"badge bg-success min-w-50-px\">{statusName}</span>\r\n        else return <span className=\"badge bg-warning min-w-50-px\">{statusName}</span>\r\n    }\r\n\r\n    const renderProduct = (products) => {\r\n        if (products.length === 1) return []\r\n        const html = []\r\n        const countProduct = products.length\r\n        for (let i = 1; i < countProduct; i++) {\r\n            const item = products[i]\r\n            html.push(<tr key={item.ProductId}>\r\n                <td>\r\n                    <p className=\"mb-1\">\r\n                        <AvatarRow\r\n                            url={item.AvatarUrl}\r\n                        />\r\n                        {item.ProductName}\r\n                    </p>\r\n                    <p className=\"mb-0\">\r\n                        <span>Giá: <span className=\"fw-bold text-primary\">\r\n                            <FormatNumber>\r\n                                {item.CustomerUnitPrice}\r\n                            </FormatNumber>\r\n                        </span></span>\r\n                        <span className=\"float-end\">Số lượng: <span className=\"fw-bold text-primary\">\r\n                            <FormatNumber>\r\n                                {item.Quantity}\r\n                            </FormatNumber>\r\n                        </span></span>\r\n                    </p>\r\n                </td>\r\n            </tr>)\r\n        }\r\n        return html\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered table-avatar mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>ID</th>\r\n                        <th>Khách hàng</th>\r\n                        <th>Tên sản phẩm</th>\r\n                        <th className='text-end'>Tổng</th>\r\n                        <th>Vận chuyển</th>\r\n                        <th className='text-end'>Trả NCC</th>\r\n                        <th>Ghi chú</th>\r\n                        <th>Trạng thái</th>\r\n                        <th className=\"w-52-px\"></th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    data: PropTypes.array,\r\n    pageItem: PropTypes.number,\r\n    pageIndex: PropTypes.number,\r\n    onDelete: PropTypes.func,\r\n    onEditWarehouseNote: PropTypes.func\r\n}\r\n\r\nTable.defaultProps = {\r\n    data: [],\r\n    pageItem: 0,\r\n    pageIndex: 0,\r\n    onDelete: () => { },\r\n    onEditWarehouseNote: () => { }\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    OrderId: yup.number(),\r\n    WarehouseNote: yup.string().max(1_000, 'Ghi chú gửi kho quá dài')\r\n})\r\n\r\nfunction ModalEditWarehouseNote(props) {\r\n    const { setValue, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [isEnableEdit, setIsEnableEdit] = useState(true)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                const data = props.data\r\n                if (data !== null) {\r\n                    setValue('OrderId', data.OrderId)\r\n                    setValue('WarehouseNote', data.WarehouseNote)\r\n                    setIsEnableEdit(data.OrderStatusId === 1) // Chỉ cho phép sửa ghi chú gửi kho đơn hàng mới\r\n                }\r\n            }\r\n            }>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa ghi chú gửi kho</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Ghi chú gửi kho</label>\r\n                        <textarea {...register('WarehouseNote')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú gửi kho\" disabled={!isEnableEdit}></textarea>\r\n                        {errors.WarehouseNote && <div className=\"validation-message\">{errors.WarehouseNote.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    {isEnableEdit ? <SaveButton isBusy={isBusy} /> : ''}\r\n                    <CloseButton onClick={props.onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEditWarehouseNote.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool\r\n}\r\n\r\nModalEditWarehouseNote.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false\r\n}\r\n\r\nexport default ModalEditWarehouseNote","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { Notification, Pagination } from './../../../components'\r\nimport { Filter, ModalEditWarehouseNote, Table } from './components'\r\n\r\nconst OrderPage = (props) => {\r\n    const [orderStatuses, setOrderStatuses] = useState([])\r\n\r\n    const [orderFroms, setOrderFroms] = useState([])\r\n\r\n    const [orders, setOrders] = useState(null)\r\n\r\n    const [modalEditWarehouseNoteInfo, setModalEditWarehouseNoteInfo] = useState({\r\n        isShow: false,\r\n        data: null\r\n    })\r\n\r\n    const [filters, setFilters] = useState({\r\n        keyword: '',\r\n        fromDate: '',\r\n        toDate: '',\r\n        statusId: 0,\r\n        orderFromId: 0,\r\n        pageItem: 10,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [pagination, setPagination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1\r\n    })\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Đơn hàng'\r\n\r\n        const loadOrderStatus = () => {\r\n            const url = '/partner/order-status/get-dropdown'\r\n            axios.get(url).then(({ data }) => {\r\n                if (data.IsSuccess) {\r\n                    setOrderStatuses(data.Result)\r\n                }\r\n            })\r\n        }\r\n\r\n        const loadOrderFrom = () => {\r\n            const url = '/partner/order-from/get-dropdown'\r\n            axios.get(url).then(({ data }) => {\r\n                if (data.IsSuccess) {\r\n                    setOrderFroms(data.Result)\r\n                }\r\n            })\r\n        }\r\n\r\n        loadOrderStatus()\r\n        loadOrderFrom()\r\n    }, [])\r\n\r\n    useEffect(() => {\r\n        let param = `keyword=${filters.keyword}&fromDate=${filters.fromDate}&toDate=${filters.toDate}`\r\n        param += `&orderStatusId=${filters.statusId}&paymentStatusId=0&orderFromId=${filters.orderFromId}`\r\n        const url = `/partner/order/filter?${param}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex\r\n                }\r\n                setPagination(newPagination)\r\n                setOrders(data.Result.Data)\r\n            }\r\n        })\r\n    }, [filters])\r\n\r\n    return (\r\n        <Fragment>\r\n            <Filter\r\n                onSearch={(params) => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params,\r\n                        pageIndex: 1\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n                orderStatuses={orderStatuses}\r\n                orderFroms={orderFroms}\r\n            />\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <Table\r\n                        pageItem={filters.pageItem}\r\n                        pageIndex={filters.pageIndex}\r\n                        data={orders}\r\n                        onDelete={(item) => {\r\n                            Notification.confirmHtml('Bạn có chắc muốn hủy đơn hàng', item.OrderId, () => {\r\n                                const url = `/partner/order/cancel?orderId=${item.OrderId}`\r\n                                axios.post(url).then(({ data }) => {\r\n                                    if (data.IsSuccess) {\r\n                                        const temp = [...orders]\r\n                                        const index = temp.findIndex(n => n.OrderId === item.OrderId)\r\n                                        temp[index].OrderStatusId = 5 // Trạng thái hủy\r\n                                        setOrders(temp)\r\n                                        Notification.success('Hủy đơn hàng thành công')\r\n                                    }\r\n                                })\r\n                            })\r\n                        }}\r\n                        onEditWarehouseNote={(item) => {\r\n                            const url = `/partner/order/get-warehouse-note?id=${item.OrderId}`\r\n                            axios.get(url).then(({ data }) => {\r\n                                if (data.IsSuccess) {\r\n                                    setModalEditWarehouseNoteInfo({\r\n                                        isShow: true,\r\n                                        data: data.Result\r\n                                    })\r\n                                }\r\n                            })\r\n                        }}\r\n                    />\r\n                    <Pagination\r\n                        totalPage={pagination.totalPage}\r\n                        currentPage={pagination.pageIndex}\r\n                        onPageChange={(pIndex) => {\r\n                            const newPagination = { ...pagination, pageIndex: pIndex }\r\n                            setPagination(newPagination)\r\n                            const newFilters = {\r\n                                ...filters,\r\n                                pageIndex: pIndex\r\n                            }\r\n                            setFilters(newFilters)\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n            <ModalEditWarehouseNote\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/partner/order/update-warehouse-note'\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            setModalEditWarehouseNoteInfo({\r\n                                isShow: false,\r\n                                data: null\r\n                            })\r\n                            Notification.success('Chỉnh sửa ghi chú gửi kho thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setModalEditWarehouseNoteInfo({\r\n                        isShow: false,\r\n                        data: null\r\n                    })\r\n                }}\r\n                isShow={modalEditWarehouseNoteInfo.isShow}\r\n                data={modalEditWarehouseNoteInfo.data}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default OrderPage","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport Select from 'react-select'\r\nimport * as yup from \"yup\"\r\nimport { SaveButton, UploadImg } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    FullName: yup.string().required('Vui lòng nhập họ tên').max(100, 'Họ tên quá dài'),\r\n    ShopName: yup.string().max(100, 'Tên shop quá dài'),\r\n    Phone: yup.string().required('Vui lòng nhập số điện thoại').max(20, 'Số điện thoại quá dài'),\r\n    Address: yup.string().max(200, 'Địa chỉ quá dài'),\r\n    WardObj: yup.object().nullable(),\r\n    WardId: yup.number().nullable(),\r\n    AvatarUrl: yup.string().max(500, 'Đường dẫn ảnh quá dài')\r\n})\r\n\r\nfunction Profile(props) {\r\n    const { provinces, districts, wards, partnerInfo, onSave, onProvinceChange, onDistrictChange } = props\r\n\r\n    const { control, register, handleSubmit, setValue, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    const [provinceOptions, setProvinceOptions] = useState([])\r\n\r\n    const [province, setProvince] = useState()\r\n\r\n    const [districtOptions, setDistrictOptions] = useState([])\r\n\r\n    const [district, setDistrict] = useState()\r\n\r\n    const [wardOptions, setWardOptions] = useState([])\r\n\r\n    useEffect(() => {\r\n        const provinceArray = provinces.map(item => {\r\n            return {\r\n                value: item.ProvinceId,\r\n                label: `${item.Prefix} ${item.ProvinceName}`\r\n            }\r\n        })\r\n        setProvinceOptions(provinceArray)\r\n    }, [provinces])\r\n\r\n    useEffect(() => {\r\n        const districtArray = districts.map(item => {\r\n            return {\r\n                value: item.DistrictId,\r\n                label: `${item.Prefix} ${item.DistrictName}`\r\n            }\r\n        })\r\n        setDistrictOptions(districtArray)\r\n    }, [districts])\r\n\r\n    useEffect(() => {\r\n        const wardArray = wards.map(item => {\r\n            return {\r\n                value: item.WardId,\r\n                label: `${item.Prefix} ${item.WardName}`\r\n            }\r\n        })\r\n        setWardOptions(wardArray)\r\n    }, [wards])\r\n\r\n    useEffect(() => {\r\n        if (partnerInfo != null) {\r\n            setValue('FullName', partnerInfo.FullName)\r\n            setValue('ShopName', partnerInfo.ShopName)\r\n            setValue('Phone', partnerInfo.Phone)\r\n            setValue('Address', partnerInfo.Address)\r\n            setValue('AvatarUrl', partnerInfo.AvatarUrl)\r\n            const wardArray = wards.map(item => {\r\n                return {\r\n                    value: item.WardId,\r\n                    label: `${item.Prefix} ${item.WardName}`\r\n                }\r\n            })\r\n            setWardOptions(wardArray)\r\n            if (partnerInfo.WardId !== 0) {\r\n                const partnerWard = wards.filter(n => n.WardId === partnerInfo.WardId).map(item => {\r\n                    return {\r\n                        value: item.WardId,\r\n                        label: `${item.Prefix} ${item.WardName}`\r\n                    }\r\n                })[0]\r\n                setValue('WardObj', partnerWard)\r\n                setValue('WardId', partnerInfo.WardId)\r\n\r\n                const partnerDistrict = districts.filter(n => n.DistrictId === partnerInfo.DistrictId).map(item => {\r\n                    return {\r\n                        value: partnerInfo.DistrictId,\r\n                        label: `${item.Prefix} ${item.DistrictName}`\r\n                    }\r\n                })[0]\r\n                setDistrict(partnerDistrict)\r\n\r\n                const partnerProvince = provinces.filter(n => n.ProvinceId === partnerInfo.ProvinceId).map(item => {\r\n                    return {\r\n                        value: item.ProvinceId,\r\n                        label: `${item.Prefix} ${item.ProvinceName}`\r\n                    }\r\n                })[0]\r\n                setProvince(partnerProvince)\r\n            }\r\n        }\r\n        // eslint-disable-next-line\r\n    }, [partnerInfo])\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <form onSubmit={handleSubmit(formData => {\r\n                delete formData['WardObj']\r\n                onSave(formData, setIsBusy)\r\n            })}>\r\n                <div className=\"card-body\">\r\n                    <h5 className=\"card-title mb-2\">Chỉnh sửa thông tin</h5>\r\n                    <div className=\"row\">\r\n                        <div className=\"col-sm-12 col-md-12 col-lg-4 col-xl-4 col-xxl-3\">\r\n                            <Controller\r\n                                control={control}\r\n                                name=\"AvatarUrl\"\r\n                                render={({\r\n                                    field: { onChange, value }\r\n                                }) => (\r\n                                    <UploadImg\r\n                                        imgUrl={value}\r\n                                        onCompleted={data => {\r\n                                            onChange(data.Result.ImageUrl)\r\n                                        }}\r\n                                        isPartner={true}\r\n                                    />\r\n                                )}\r\n                            />\r\n                            {errors.AvatarUrl && <div className=\"validation-message\">{errors.AvatarUrl.message}</div>}\r\n                        </div>\r\n                        <div className=\"col-sm-12 col-md-12 col-lg-8 col-xl-8 col-xxl-9\">\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Họ tên <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Họ tên\" />\r\n                                {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n                            </div>\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Tên shop</label>\r\n                                <input {...register('ShopName')} type=\"text\" className=\"form-control\" placeholder=\"Tên shop\" />\r\n                                {errors.ShopName && <div className=\"validation-message\">{errors.ShopName.message}</div>}\r\n                            </div>\r\n                            <div className=\"relative-position mb-2\">\r\n                                <label className=\"form-label\">Số điện thoại <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Số điện thoại\" />\r\n                                {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tỉnh/Tp</label>\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={true}\r\n                            isClearable={true}\r\n                            options={provinceOptions}\r\n                            value={province}\r\n                            onChange={item => {\r\n                                setProvince(item)\r\n                                setDistrict(null)\r\n                                setValue('WardId', null)\r\n                                setValue('WardObj', null)\r\n                                onProvinceChange(item !== null ? item.value : 0)\r\n                            }}\r\n                            placeholder='Tỉnh/Tp'\r\n                        />\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Quận/Huyện</label>\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={true}\r\n                            isClearable={false}\r\n                            options={districtOptions}\r\n                            value={district}\r\n                            onChange={item => {\r\n                                setDistrict(item)\r\n                                setValue('WardId', null)\r\n                                setValue('WardObj', null)\r\n                                onDistrictChange(item.value)\r\n                            }}\r\n                            placeholder='Quận/Huyện'\r\n                            noOptionsMessage={() => 'Quận/Huyện'}\r\n                        />\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Phường/Xã</label>\r\n                        <Controller\r\n                            control={control}\r\n                            name=\"WardObj\"\r\n                            render={({\r\n                                field: { onChange, value }\r\n                            }) => (\r\n                                <Select\r\n                                    className=\"react-select-container\"\r\n                                    classNamePrefix=\"custom-select\"\r\n                                    isSearchable={true}\r\n                                    isClearable={false}\r\n                                    options={wardOptions}\r\n                                    value={value}\r\n                                    onChange={item => {\r\n                                        if (item !== null) {\r\n                                            setValue('WardId', item.value)\r\n                                        }\r\n                                        onChange(item)\r\n                                    }}\r\n                                    placeholder='Phường/Xã'\r\n                                    noOptionsMessage={() => 'Phường/Xã'}\r\n                                />\r\n                            )}\r\n                        />\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Địa chỉ</label>\r\n                        <input {...register('Address')} type=\"text\" className=\"form-control\" placeholder=\"Địa chỉ\" />\r\n                        {errors.Address && <div className=\"validation-message\">{errors.Address.message}</div>}\r\n                    </div>\r\n                </div>\r\n                <div className=\"card-footer\">\r\n                    <SaveButton isBusy={isBusy} />\r\n                </div>\r\n            </form>\r\n        </div>\r\n    )\r\n}\r\n\r\nProfile.propTypes = {\r\n    partnerInfo: PropTypes.object,\r\n    onSave: PropTypes.func,\r\n    provinces: PropTypes.array,\r\n    onProvinceChange: PropTypes.func,\r\n    districts: PropTypes.array,\r\n    onDistrictChange: PropTypes.func,\r\n    wards: PropTypes.array\r\n}\r\n\r\nProfile.defaultProps = {\r\n    partnerInfo: {},\r\n    onSave: () => { },\r\n    provinces: [],\r\n    onProvinceChange: () => { },\r\n    districts: [],\r\n    onDistrictChange: () => { },\r\n    wards: []\r\n}\r\n\r\nexport default Profile","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    CurrentPassword: yup.string().required('Vui lòng nhập mật khẩu hiện tại').max(70, 'Mật khẩu hiện tại quá dài'),\r\n    NewPassword: yup.string().required('Vui lòng nhập mật khẩu mới').max(70, 'Mật khẩu mới quá dài'),\r\n    NewPasswordConfirm: yup.string().required('Vui lòng nhập lại mật khẩu mới').max(70, 'Nhập lại mật khẩu mới quá dài')\r\n        .oneOf([yup.ref('NewPassword')], 'Nhập lại mật khẩu không chính xác')\r\n})\r\n\r\nfunction Password(props) {\r\n    const { register, reset, handleSubmit, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <form onSubmit={handleSubmit(formData => {\r\n                props.onSave(formData, setIsBusy, reset)\r\n            })}>\r\n                <div className=\"card-body\">\r\n                    <h5 className=\"card-title mb-2\">Đổi mật khẩu</h5>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Mật khẩu hiện tại <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('CurrentPassword')} type=\"password\" className=\"form-control\" placeholder=\"Mật khẩu hiện tại\" />\r\n                        {errors.CurrentPassword && <div className=\"validation-message\">{errors.CurrentPassword.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Mật khẩu mới <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('NewPassword')} type=\"password\" className=\"form-control\" placeholder=\"Mật khẩu mới\" />\r\n                        {errors.NewPassword && <div className=\"validation-message\">{errors.NewPassword.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Nhập lại mật khẩu mới <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('NewPasswordConfirm')} type=\"password\" className=\"form-control\" placeholder=\"Nhập lại mật khẩu mới\" />\r\n                        {errors.NewPasswordConfirm && <div className=\"validation-message\">{errors.NewPasswordConfirm.message}</div>}\r\n                    </div>\r\n                </div>\r\n                <div className=\"card-footer\">\r\n                    <SaveButton isBusy={isBusy} title=\"Đổi mật khẩu\" />\r\n                </div>\r\n            </form>\r\n        </div>\r\n    )\r\n}\r\n\r\nPassword.propTypes = {\r\n    onSave: PropTypes.func\r\n}\r\n\r\nPassword.defaultProps = {\r\n    onSave: () => { }\r\n}\r\n\r\nexport default Password","import axios from 'axios'\r\nimport React, { useEffect, useState, useContext } from 'react'\r\nimport { Notification, AppContext } from '../../../components'\r\nimport { Profile, Password } from './components'\r\n\r\nfunction ProfilePage(props) {\r\n    const appSettings = useContext(AppContext)\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Lịch sử giao dịch'\r\n        loadProvince()\r\n        loadProfile()\r\n    }, [])\r\n\r\n    const [provinces, setProvinces] = useState([])\r\n\r\n    const [districts, setDistricts] = useState([])\r\n\r\n    const [wards, setWards] = useState([])\r\n\r\n    const [profileInfo, setProfileInfo] = useState(null)\r\n\r\n    const loadProvince = () => {\r\n        const url = '/partner/province/get-all'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setProvinces(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadDistrict = (provinceId) => {\r\n        const url = `/partner/province/${provinceId}/districts`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setDistricts(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadWard = (wardId) => {\r\n        const url = `/partner/district/${wardId}/wards`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setWards(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    const loadProfile = () => {\r\n        const url = '/partner/partner/get-profile'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setWards(data.Result.Wards)\r\n                setDistricts(data.Result.Districts)\r\n                setProfileInfo(data.Result.Info)\r\n            }\r\n        })\r\n    }\r\n\r\n    return (\r\n        <div className=\"row\">\r\n            <div className=\"col-md-12 col-lg-12 col-xl-6\">\r\n                <Profile\r\n                    partnerInfo={profileInfo}\r\n                    onSave={(formData, setIsBusy) => {\r\n                        setIsBusy(true)\r\n                        const url = '/partner/partner/update-profile'\r\n                        axios.post(url, formData).then(({ data }) => {\r\n                            if (data.IsSuccess) {\r\n                                appSettings.setPartnerFullName(formData.FullName)\r\n                                localStorage.setItem('p-fullName', formData.FullName)\r\n                                appSettings.setPartnerAvatarUrl(formData.AvatarUrl)\r\n                                localStorage.setItem('p-avatarUrl', formData.AvatarUrl)\r\n                                Notification.success('Chỉnh sửa thông tin thành công')\r\n                            }\r\n                            setIsBusy(false)\r\n                        })\r\n                    }}\r\n                    provinces={provinces}\r\n                    onProvinceChange={(provinceId) => {\r\n                        loadDistrict(provinceId)\r\n                        setWards([])\r\n                    }}\r\n                    districts={districts}\r\n                    onDistrictChange={(districtId) => {\r\n                        loadWard(districtId)\r\n                    }}\r\n                    wards={wards}\r\n                />\r\n            </div>\r\n            <div className=\"col-md-12 col-lg-12 col-xl-6\">\r\n                <Password\r\n                    onSave={(formData, setIsBusy, resetForm) => {\r\n                        setIsBusy(true)\r\n                        const url = '/partner/partner/change-password'\r\n                        axios.post(url, formData).then(({ data }) => {\r\n                            if (data.IsSuccess) {\r\n                                resetForm()\r\n                                Notification.success('Thay đổi mật khẩu thành công')\r\n                            }\r\n                            setIsBusy(false)\r\n                        })\r\n                    }}\r\n                />\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default ProfilePage","import PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport DatePicker from 'react-datepicker'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\n\r\nconst filters = {\r\n    fromDate: '',\r\n    toDate: ''\r\n}\r\n\r\nconst Filter = (props) => {\r\n    const { onSearch } = props\r\n\r\n    const [fromDate, setFromDate] = useState()\r\n\r\n    const [toDate, setToDate] = useState()\r\n\r\n    const handleSearch = () => {\r\n        onSearch(filters)\r\n    }\r\n\r\n    const handleClear = () => {\r\n        setFromDate(null)\r\n        filters.fromDate = ''\r\n        setToDate(null)\r\n        filters.toDate = ''\r\n        onSearch(filters)\r\n    }\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n                        <div className=\"input-group flex-nowrap\">\r\n                            <span className=\"input-group-text\">Từ ngày</span>\r\n                            <DatePicker\r\n                                className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n                                placeholderText=\"dd/mm/yyyy\"\r\n                                dateFormat=\"dd/MM/yyyy\"\r\n                                selected={fromDate}\r\n                                onChange={date => {\r\n                                    if (date !== null) {\r\n                                        const day = date.getDate()\r\n                                        const month = date.getMonth() + 1\r\n                                        const year = date.getFullYear()\r\n                                        const strDate = `${day}/${month}/${year}`\r\n                                        filters.fromDate = strDate\r\n                                    }\r\n                                    setFromDate(date)\r\n                                }}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n                        <div className=\"input-group flex-nowrap\">\r\n                            <span className=\"input-group-text\">Đến ngày</span>\r\n                            <DatePicker\r\n                                className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n                                placeholderText=\"dd/mm/yyyy\"\r\n                                dateFormat=\"dd/MM/yyyy\"\r\n                                selected={toDate}\r\n                                onChange={date => {\r\n                                    if (date !== null) {\r\n                                        const day = date.getDate()\r\n                                        const month = date.getMonth() + 1\r\n                                        const year = date.getFullYear()\r\n                                        const strDate = `${day}/${month}/${year}`\r\n                                        filters.toDate = strDate\r\n                                    }\r\n                                    setToDate(date)\r\n                                }}\r\n                            />\r\n                        </div>\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-12 col-xxl-8\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={handleSearch} />\r\n                            <ClearButton onClick={handleClear} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func\r\n}\r\n\r\nFilter.defaultProps = {\r\n    onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { EmptyRow, LoadingRow, FormatNumber } from '../../../../../components'\r\n\r\nconst renderTable = (data, pageItem, pageIndex) => {\r\n    if (data === null) return <LoadingRow colSpan={6} />\r\n    else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n    else return data.map((item, index) => <tr key={item.PartnerBalanceHistoryId}>\r\n        <td className=\"text-center\">\r\n            <FormatNumber>\r\n                {(pageItem * (pageIndex - 1)) + index + 1}\r\n            </FormatNumber>\r\n        </td>\r\n        <td>{item.Detail}</td>\r\n        <td>{item.Note}</td>\r\n        <td className=\"text-end text-primary\">\r\n            <FormatNumber>\r\n                {item.Amount}\r\n            </FormatNumber>\r\n        </td>\r\n        <td>{renderType(item.Amount)}</td>\r\n        <td>\r\n            {item.CreatedDate}\r\n            <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n        </td>\r\n    </tr>)\r\n}\r\n\r\nconst renderType = amount => {\r\n    if (amount > 0) return <span className=\"badge bg-success\">Cộng</span>\r\n    else return <span className=\"badge bg-danger\">Trừ</span>\r\n}\r\n\r\nconst Table = (props) => {\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Giao dịch</th>\r\n                        <th>Ghi chú</th>\r\n                        <th className='text-end'>Số tiền</th>\r\n                        <th>Loại</th>\r\n                        <th>Ngày giao dịch</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable(props.data, props.pageItem, props.pageIndex)}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    data: PropTypes.array,\r\n    pageItem: PropTypes.number,\r\n    pageIndex: PropTypes.number\r\n}\r\n\r\nTable.defaultProps = {\r\n    data: null,\r\n    pageItem: 0,\r\n    pageIndex: 0\r\n}\r\n\r\nexport default Table","import React, { Fragment, useEffect, useState } from 'react'\r\nimport { Filter, Table } from './components'\r\nimport axios from 'axios'\r\nimport { Pagination } from './../../../components'\r\n\r\nfunction BalanceHistoryPage(props) {\r\n    const [histories, setHistories] = useState(null)\r\n\r\n    const [filters, setFilters] = useState({\r\n        fromDate: '',\r\n        toDate: '',\r\n        pageItem: 10,\r\n        pageIndex: 1\r\n    })\r\n\r\n    const [pagination, setPagination] = useState({\r\n        totalRow: 0,\r\n        totalPage: 0,\r\n        pageIndex: 1\r\n    })\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Lịch sử giao dịch'\r\n    }, [])\r\n\r\n    useEffect(() => {\r\n        const url = `/partner/balance-history/filter?fromDate=${filters.fromDate}&toDate=${filters.toDate}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                const newPagination = {\r\n                    totalRow: data.Result.TotalRow,\r\n                    totalPage: data.Result.TotalPage,\r\n                    pageIndex: data.Result.PageIndex\r\n                }\r\n                setPagination(newPagination)\r\n                setHistories(data.Result.Data)\r\n            }\r\n        })\r\n    }, [filters])\r\n\r\n    return (\r\n        <Fragment>\r\n            <Filter\r\n                onSearch={params => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params,\r\n                        pageIndex: 1\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n            />\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <Table\r\n                        pageItem={filters.pageItem}\r\n                        pageIndex={filters.pageIndex}\r\n                        data={histories}\r\n                    />\r\n                    <Pagination\r\n                        totalPage={pagination.totalPage}\r\n                        currentPage={pagination.pageIndex}\r\n                        onPageChange={(pIndex) => {\r\n                            const newPagination = { ...pagination, pageIndex: pIndex }\r\n                            setPagination(newPagination)\r\n                            const newFilters = {\r\n                                ...filters,\r\n                                pageIndex: pIndex\r\n                            }\r\n                            setFilters(newFilters)\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default BalanceHistoryPage","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    UserName: yup.string().required('Vui lòng nhập tài khoản').max(70, 'Tài khoản quá dài'),\r\n    Password: yup.string().required('Vui lòng nhập mật khẩu').max(70, 'Mật khẩu quá dài')\r\n})\r\n\r\nfunction ModalEdit(props) {\r\n    const { onSave, onClose } = props\r\n\r\n    const { register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}>\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Thêm mới tài khoản shopee</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tài khoản <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('UserName')} type=\"text\" className=\"form-control\" placeholder=\"Tài khoản\" />\r\n                        {errors.UserName && <div className=\"validation-message\">{errors.UserName.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Mật khẩu <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('Password')} type=\"password\" className=\"form-control\" placeholder=\"Mật khẩu\" />\r\n                        {errors.Password && <div className=\"validation-message\">{errors.Password.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false\r\n}\r\n\r\nexport default ModalEdit","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    PartnerShopId: yup.number(),\r\n    UserName: yup.string().required('Vui lòng nhập tài khoản').max(70, 'Tài khoản quá dài'),\r\n    Password: yup.string().required('Vui lòng nhập mật khẩu').max(70, 'Mật khẩu quá dài')\r\n})\r\n\r\nfunction ModalAdd(props) {\r\n    const { onSave, onClose, data } = props\r\n\r\n    const { setValue, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [isBusy, setIsBusy] = useState(false)\r\n\r\n    return (\r\n        <Modal show={props.isShow} onHide={onClose} backdrop=\"static\"\r\n            onExited={() => {\r\n                reset()\r\n            }}\r\n            onShow={() => {\r\n                setValue('PartnerShopId', data.PartnerShopId)\r\n                setValue('UserName', data.UserName)\r\n                setValue('Password', data.Password)\r\n            }}\r\n        >\r\n            <Modal.Header closeButton>\r\n                <Modal.Title>Chỉnh sửa tài khoản shopee</Modal.Title>\r\n            </Modal.Header>\r\n            <form onSubmit={handleSubmit(formData => {\r\n                onSave(formData, setIsBusy)\r\n            })}>\r\n                <Modal.Body>\r\n                    <div className=\"relative-position mb-2\">\r\n                        <label className=\"form-label\">Tài khoản <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('UserName')} type=\"text\" className=\"form-control\" placeholder=\"Tài khoản\" />\r\n                        {errors.UserName && <div className=\"validation-message\">{errors.UserName.message}</div>}\r\n                    </div>\r\n                    <div className=\"relative-position\">\r\n                        <label className=\"form-label\">Mật khẩu <span className=\"text-danger\">*</span></label>\r\n                        <input {...register('Password')} type=\"password\" className=\"form-control\" placeholder=\"Mật khẩu\" />\r\n                        {errors.Password && <div className=\"validation-message\">{errors.Password.message}</div>}\r\n                    </div>\r\n                </Modal.Body>\r\n                <Modal.Footer>\r\n                    <SaveButton isBusy={isBusy} />\r\n                    <CloseButton onClick={onClose} />\r\n                </Modal.Footer>\r\n            </form>\r\n        </Modal>\r\n    )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n    onSave: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    isShow: PropTypes.bool,\r\n    data: PropTypes.object,\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n    onSave: () => { },\r\n    onClose: () => { },\r\n    isShow: false,\r\n    data: {}\r\n}\r\n\r\nexport default ModalAdd","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoEllipsisVertical } from 'react-icons/io5'\r\nimport { EmptyRow, LoadingRow, ShopeeProductAvatar } from './../../../../../components'\r\n\r\nfunction Table(props) {\r\n    const { shops, onEdit } = props\r\n\r\n    function renderTable() {\r\n        if (shops === null) return <LoadingRow colSpan={6} />\r\n        else if (shops.length === 0) return <EmptyRow colSpan={6} />\r\n        else return shops.map((item, index) => <tr key={item.PartnerShopId}>\r\n            <td className=\"text-center\">{index + 1}</td>\r\n            <td>{item.UserName}</td>\r\n            <td>\r\n                <ShopeeProductAvatar\r\n                    url={item.Portrait}\r\n                />\r\n                {item.ShopName}\r\n            </td>\r\n            <td>{item.ShopId}</td>\r\n            <td>\r\n                {item.CreatedDate}\r\n                <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n            </td>\r\n            <td>\r\n                <div className=\"dropdown float-end\">\r\n                    <button className=\"dropdown-toggle arrow-none card-drop btn-drop\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n                        <IoEllipsisVertical className=\"fs-4 text-primary\" />\r\n                    </button>\r\n                    <div className=\"dropdown-menu dropdown-menu-end\">\r\n                        <button onClick={() => onEdit(item)} className=\"dropdown-item\"><FiEdit className=\"mn-btn-icon\" />Chỉnh sửa</button>\r\n                    </div>\r\n                </div>\r\n            </td>\r\n        </tr>)\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered table-avatar mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Tài khoản</th>\r\n                        <th>Tên shop</th>\r\n                        <th>ID shop</th>\r\n                        <th>Ngày tạo</th>\r\n                        <th className=\"w-52-px\"></th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    shops: PropTypes.array,\r\n    onEdit: PropTypes.func,\r\n}\r\n\r\nTable.defaultProps = {\r\n    shops: [],\r\n    onEdit: () => { }\r\n}\r\n\r\nexport default Table","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { IconButton, Notification } from './../../../components'\r\nimport { ModalAdd, ModalEdit, Table } from './components'\r\n\r\nfunction PartnerShopPage(props) {\r\n    const [shops, setShops] = useState(null)\r\n\r\n    const [isShowModalAdd, setIsShowModalAdd] = useState(false)\r\n\r\n    const [modalEditInfo, setModalEditInfo] = useState({\r\n        isShow: false,\r\n        data: {}\r\n    })\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Tài khoản shopee'\r\n        loadShop()\r\n    }, [])\r\n\r\n    function loadShop() {\r\n        const url = '/partner/partner-shop/get-all'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setShops(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <div className=\"row mb-2\">\r\n                        <div className=\"col-12\">\r\n                            <IconButton text=\"Thêm mới\" icon={<IoAddCircleOutline />} onClick={() => {\r\n                                setIsShowModalAdd(true)\r\n                            }} />\r\n                        </div>\r\n                    </div>\r\n                    <Table\r\n                        shops={shops}\r\n                        onEdit={shop => {\r\n                            const url = `/partner/partner-shop/get-by-id?id=${shop.PartnerShopId}`\r\n                            axios.get(url).then(({ data }) => {\r\n                                if (data.IsSuccess) {\r\n                                    setModalEditInfo({\r\n                                        isShow: true,\r\n                                        data: data.Result\r\n                                    })\r\n                                }\r\n                            })\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n            <ModalAdd\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/partner/partner-shop/create'\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            loadShop()\r\n                            setIsShowModalAdd(false)\r\n                            Notification.success('Thêm mới tài khoản shop thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setIsShowModalAdd(false)\r\n                }}\r\n                isShow={isShowModalAdd}\r\n            />\r\n            <ModalEdit\r\n                onSave={(formData, setIsBusy) => {\r\n                    setIsBusy(true)\r\n                    const url = '/partner/partner-shop/update'\r\n                    axios.post(url, formData).then(({ data }) => {\r\n                        if (data.IsSuccess) {\r\n                            loadShop()\r\n                            setModalEditInfo({\r\n                                isShow: false,\r\n                                data: {}\r\n                            })\r\n                            Notification.success('Chỉnh sửa tài khoản shop thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }}\r\n                onClose={() => {\r\n                    setModalEditInfo({\r\n                        isShow: false,\r\n                        data: {}\r\n                    })\r\n                }}\r\n                data={modalEditInfo.data}\r\n                isShow={modalEditInfo.isShow}\r\n            />\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nPartnerShopPage.propTypes = {\r\n\r\n}\r\n\r\nPartnerShopPage.defaultProps = {\r\n\r\n}\r\n\r\nexport default PartnerShopPage","import PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Select from 'react-select'\r\nimport { SearchButton, Notification } from './../../../../../components'\r\n\r\nconst statusOptions = [\r\n    { value: 'unpaid', label: 'Chờ xác nhận' },\r\n    { value: 'toship', label: 'Chờ lấy hàng' },\r\n    { value: 'shipping', label: 'Đang giao' },\r\n    { value: 'completed', label: 'Đã giao' }\r\n]\r\n\r\n// sort_by\r\nconst sortOptions = [\r\n    { value: 'confirmed_date_asc', label: 'Ngày xác nhận đặt đơn: Xa - Gần' },\r\n    { value: 'confirmed_date_desc', label: 'Ngày xác nhận đặt đơn: Gần - Xa' },\r\n    { value: 'ship_by_date_asc', label: 'Hạn giao hàng: Xa - Gần nhất' },\r\n    { value: 'ship_by_date_desc', label: 'Hạn giao hàng: Gần - Xa nhất' },\r\n    { value: 'create_date_asc', label: 'Ngày đặt: Xa - Gần nhất' },\r\n    { value: 'create_date_desc', label: 'Ngày đặt: Gần - Xa nhất' }\r\n]\r\n\r\nconst filters = {\r\n    partnerShopId: 0,\r\n    status: 'unpaid',\r\n    sortBy: 'confirmed_date_desc'\r\n}\r\n\r\nfunction Filter(props) {\r\n    const { onSearch, shopeeShops } = props\r\n\r\n    const [shopeeShopOptions, setShopeeShopOptions] = useState([])\r\n\r\n    const [shopeeShop, setShopeeShop] = useState(null)\r\n\r\n    const [status, setStatus] = useState(statusOptions[0])\r\n\r\n    const [sort, setSort] = useState(() => {\r\n        return sortOptions[1]\r\n    })\r\n\r\n    const handleSearch = () => {\r\n        if (shopeeShop === null) {\r\n            Notification.warning('Vui lòng chọn shop trước khi tìm kiếm đơn hàng')\r\n            return;\r\n        }\r\n        onSearch(filters)\r\n    }\r\n\r\n    useEffect(() => {\r\n        const shopeeShopList = shopeeShops.map(item => {\r\n            return {\r\n                value: item.PartnerShopId,\r\n                label: item.ShopName\r\n            }\r\n        })\r\n        setShopeeShopOptions(shopeeShopList)\r\n    }, [shopeeShops])\r\n\r\n    return (\r\n        <div className=\"card\">\r\n            <div className=\"card-body\">\r\n                <div className=\"row g-2\">\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-7 col-xl-4 col-xxl-3\">\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={false}\r\n                            isClearable={false}\r\n                            options={shopeeShopOptions}\r\n                            value={shopeeShop}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    setShopeeShop(item)\r\n                                    filters.partnerShopId = item.value\r\n                                }\r\n                                else {\r\n                                    setShopeeShop(null)\r\n                                    filters.partnerShopId = 0\r\n                                }\r\n                            }}\r\n                            placeholder='Chọn shop'\r\n                            noOptionsMessage={() => 'Chưa thêm tài khoản shop'}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-5 col-xl-3 col-xxl-2\">\r\n                        <Select\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={false}\r\n                            isClearable={false}\r\n                            options={statusOptions}\r\n                            value={status}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    setStatus(item)\r\n                                    filters.status = item.value\r\n                                }\r\n                                else {\r\n                                    setStatus(item)\r\n                                    filters.status = 'unpaid'\r\n                                }\r\n                            }}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-12 col-md-12 col-lg-8 col-xl-5 col-xxl-3\">\r\n                        <Select\r\n                            isDisabled={status.value !== 'toship'}\r\n                            className=\"react-select-container\"\r\n                            classNamePrefix=\"custom-select\"\r\n                            isSearchable={false}\r\n                            isClearable={false}\r\n                            options={sortOptions}\r\n                            value={sort}\r\n                            onChange={item => {\r\n                                if (item !== null) {\r\n                                    setSort(item)\r\n                                    filters.sortBy = item.value\r\n                                }\r\n                                else {\r\n                                    setSort(item)\r\n                                    filters.sortBy = 'confirmed_date_desc'\r\n                                }\r\n                            }}\r\n                        />\r\n                    </div>\r\n                    <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-2 col-xxl-4\">\r\n                        <div className=\"button-list\">\r\n                            <SearchButton onClick={handleSearch} />\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nFilter.propTypes = {\r\n    onSearch: PropTypes.func,\r\n    shopeeShops: PropTypes.array,\r\n}\r\n\r\nFilter.defaultProps = {\r\n    onSearch: () => { },\r\n    shopeeShops: []\r\n}\r\n\r\nexport default Filter","import PropTypes from 'prop-types'\r\nimport React, { Fragment } from 'react'\r\nimport { IoCartOutline } from 'react-icons/io5'\r\nimport { EmptyRow, FormatNumber, IconButton, LoadingRow, ShopeeProductAvatar, Notification } from '../../../../../components'\r\n\r\nfunction Table(props) {\r\n    const { orders, onOrder, status, partnerShopId } = props\r\n\r\n    function handleOrder(order, setIsBusy) {\r\n        const productNoSku = order.Order_Items.filter(n => n.Item_Model.Sku === '')\r\n        if (productNoSku.length !== 0) {\r\n            Notification.warning('Không thể đặt hàng sản phẩm không có mã Sku')\r\n            return\r\n        }\r\n        onOrder(order, setIsBusy, partnerShopId)\r\n    }\r\n\r\n    function renderTable() {\r\n        if (orders === null) return <LoadingRow colSpan={6} />\r\n        else if (orders.length === 0) return <EmptyRow colSpan={6} />\r\n        else return orders.map((item, index) => {\r\n            const totalProductPrice = item.Order_Items.reduce((prev, current) => {\r\n                return prev + (current.Product.Price * current.Amount)\r\n            }, 0)\r\n            return (\r\n                <Fragment key={item.Order_Id}>\r\n                    <tr>\r\n                        <td className=\"text-center\">{index + 1}</td>\r\n                        <td>{item.Order_Sn}</td>\r\n                        <td>{item.Buyer_Address_Name}</td>\r\n                        <td>{item.Buyer_Address_Phone}</td>\r\n                        <td className=\"text-end text-primary\">\r\n                            <FormatNumber>\r\n                                {totalProductPrice}\r\n                            </FormatNumber>\r\n                        </td>\r\n                        <td className=\"text-end text-primary\">\r\n                            <FormatNumber>\r\n                                {item.Shipping_Fee}\r\n                            </FormatNumber>\r\n                        </td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td colSpan={6} className=\"p-0\">\r\n                            <div className=\"card mb-0\">\r\n                                <div className=\"card-body\">\r\n                                    <div className=\"table-responsive\">\r\n                                        <table className=\"table table-centered table-avatar mb-0\">\r\n                                            <thead>\r\n                                                <tr>\r\n                                                    <th className=\"w-52-px\">#</th>\r\n                                                    <th>Sản phẩm</th>\r\n                                                    <th>Sku</th>\r\n                                                    <th>Đơn giá</th>\r\n                                                    <th>Số lượng</th>\r\n                                                    <th>Thành tiền</th>\r\n                                                </tr>\r\n                                            </thead>\r\n                                            <tbody>\r\n                                                {renderProduct(item.Order_Items)}\r\n                                            </tbody>\r\n                                        </table>\r\n                                    </div>\r\n                                </div>\r\n                                {renderFooter(item)}\r\n                            </div>\r\n                        </td>\r\n                    </tr>\r\n                </Fragment>\r\n            )\r\n        })\r\n    }\r\n\r\n    function renderFooter(item) {\r\n        if (status === 'toship') return <div className=\"card-footer\">\r\n            <IconButton\r\n                icon={<IoCartOutline />}\r\n                variant=\"success\"\r\n                text=\"Đặt hàng\"\r\n                onClick={(setIsBusy) => {\r\n                    handleOrder(item, setIsBusy)\r\n                }}\r\n            />\r\n        </div>\r\n        else return ''\r\n    }\r\n\r\n    function renderProduct(orderItems) {\r\n        return orderItems.map((item, index) => {\r\n            let imgUrl = ''\r\n            const imgs = item.Product.Images\r\n            if (imgs.length !== 0) {\r\n                imgUrl = imgs[0]\r\n            }\r\n            return (\r\n                <tr key={index}>\r\n                    <td className=\"text-center\">{index + 1}</td>\r\n                    <td>\r\n                        <ShopeeProductAvatar\r\n                            url={imgUrl}\r\n                        />\r\n                        {item.Product.Name}\r\n                    </td>\r\n                    <td>{item.Item_Model.Sku}</td>\r\n                    <td className=\"text-end text-primary\">\r\n                        <FormatNumber>\r\n                            {item.Product.Price}\r\n                        </FormatNumber>\r\n                    </td>\r\n                    <td className=\"text-end text-primary\">\r\n                        <FormatNumber>\r\n                            {item.Amount}\r\n                        </FormatNumber>\r\n                    </td>\r\n                    <td className=\"text-end text-primary\">\r\n                        <FormatNumber>\r\n                            {item.Product.Price * item.Amount}\r\n                        </FormatNumber>\r\n                    </td>\r\n                </tr>\r\n            )\r\n        })\r\n    }\r\n\r\n    return (\r\n        <div className=\"table-responsive\">\r\n            <table className=\"table table-centered mb-0\">\r\n                <thead>\r\n                    <tr>\r\n                        <th className=\"w-52-px\">#</th>\r\n                        <th>Mã đơn hàng</th>\r\n                        <th>Khách hàng</th>\r\n                        <th>Điện thoại</th>\r\n                        <th>Tiền hàng</th>\r\n                        <th>Phí ship</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    {renderTable()}\r\n                </tbody>\r\n            </table>\r\n        </div>\r\n    )\r\n}\r\n\r\nTable.propTypes = {\r\n    orders: PropTypes.array,\r\n    onOrder: PropTypes.func,\r\n    status: PropTypes.string,\r\n    partnerShopId: PropTypes.number,\r\n}\r\n\r\nTable.defaultProps = {\r\n    orders: [],\r\n    onOrder: () => { },\r\n    status: '',\r\n    partnerShopId: 0\r\n}\r\n\r\nexport default Table","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { Notification } from '../../../components'\r\nimport { Filter, Table } from './components'\r\nimport Swal from 'sweetalert2'\r\n\r\nfunction OrderFromShopee(props) {\r\n    const [shopeeShops, setShopeeShops] = useState([])\r\n\r\n    const [orders, setOrders] = useState({\r\n        orders: [],\r\n        status: '',\r\n        partnerShopId: 0\r\n    })\r\n\r\n    const [filters, setFilters] = useState({\r\n        partnerShopId: 0,\r\n        status: 'unpaid',\r\n        sortBy: 'confirmed_date_desc',\r\n        pageItem: 10,\r\n        pageIndex: 1\r\n    })\r\n\r\n    useEffect(() => {\r\n        document.getElementById('page-header').innerText = 'Đơn hàng từ shopee'\r\n        loadShop()\r\n    }, [])\r\n\r\n    useEffect(() => {\r\n        if (filters.partnerShopId !== 0) {\r\n            setOrders({\r\n                ...orders,\r\n                orders: null\r\n            })\r\n            let url = `/partner/partner-shop/order-list-with-detail`\r\n            url += `?partnerShopId=${filters.partnerShopId}&source=${filters.status}&sortBy=${filters.sortBy}&pageSize=10&pageNumber=1`\r\n            axios.get(url).then(({ data }) => {\r\n                if (data.IsSuccess) {\r\n                    if (data.Result === null) {\r\n                        setOrders([])\r\n                        return\r\n                    }\r\n                    if (data.Result.length === 0) {\r\n                        setOrders([])\r\n                        return\r\n                    }\r\n                    const orderList = data.Result.Orders.Data.Orders\r\n                    const status = data.Result.Status\r\n                    setOrders({\r\n                        orders: orderList,\r\n                        status: status,\r\n                        partnerShopId: filters.partnerShopId\r\n                    })\r\n                }\r\n                else {\r\n                    setOrders({\r\n                        ...orders,\r\n                        orders: []\r\n                    })\r\n                }\r\n            })\r\n        }\r\n\r\n        // eslint-disable-next-line\r\n    }, [filters])\r\n\r\n    function loadShop() {\r\n        const url = '/partner/partner-shop/get-all'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setShopeeShops(data.Result)\r\n            }\r\n        })\r\n    }\r\n\r\n    function processOrder(orderUrl, order, partnerShopId, setIsBusy, isUseFreeShip) {\r\n        axios.get(orderUrl).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                const isExist = data.Result\r\n                const orderUrl = '/partner/order/create-from-shopee'\r\n                if (isExist) {\r\n                    Notification.confirmHtml('Đơn hàng đã được đặt với kho, bạn có muốn tiếp tục đặt đơn hàng', order.Order_Sn, () => {\r\n                        axios.post(orderUrl, {\r\n                            OrderId: order.Order_Id,\r\n                            ShopId: order.Shop_Id,\r\n                            RegionId: 'VN',\r\n                            PartnerShopId: partnerShopId,\r\n                            IsUseFreeShip: isUseFreeShip\r\n                        }).then(orderResponse => {\r\n                            if (orderResponse.data.IsSuccess) {\r\n                                Notification.success('Đặt hàng từ shopee thành công')\r\n                            }\r\n                            setIsBusy(false)\r\n                        })\r\n                    })\r\n                }\r\n                else {\r\n                    axios.post(orderUrl, {\r\n                        OrderId: order.Order_Id,\r\n                        ShopId: order.Shop_Id,\r\n                        RegionId: 'VN',\r\n                        PartnerShopId: partnerShopId,\r\n                        IsUseFreeShip: isUseFreeShip\r\n                    }).then(orderResponse => {\r\n                        if (orderResponse.data.IsSuccess) {\r\n                            Notification.success('Đặt hàng từ shopee thành công')\r\n                        }\r\n                        setIsBusy(false)\r\n                    })\r\n                }\r\n            }\r\n            setIsBusy(false)\r\n        })\r\n    }\r\n\r\n    return (\r\n        <Fragment>\r\n            <Filter\r\n                onSearch={(params) => {\r\n                    const newFilters = {\r\n                        ...filters,\r\n                        ...params,\r\n                        pageIndex: 1\r\n                    }\r\n                    setFilters(newFilters)\r\n                }}\r\n                shopeeShops={shopeeShops}\r\n            />\r\n            <div className=\"card\">\r\n                <div className=\"card-body\">\r\n                    <Table\r\n                        orders={orders.orders}\r\n                        status={orders.status}\r\n                        partnerShopId={orders.partnerShopId}\r\n                        onOrder={(order, setIsBusy, partnerShopId) => {\r\n                            Notification.confirmHtml('Bạn có chắc muốn đặt đơn hàng', order.Order_Sn, () => {\r\n                                setIsBusy(true)\r\n                                Swal.fire({\r\n                                    text: 'Bạn có muốn sử dụng miễn phí đóng gói không?',\r\n                                    icon: 'question',\r\n                                    showDenyButton: true,\r\n                                    showCancelButton: true,\r\n                                    confirmButtonText: 'Đồng ý',\r\n                                    denyButtonText: `Không`,\r\n                                    cancelButtonText: 'Bỏ qua'\r\n                                }).then((result) => {\r\n                                    const orderUrl = `/partner/order/is-exist-order-sn?orderSn=${order.Order_Sn}`\r\n                                    if (result.isConfirmed) {\r\n                                        processOrder(orderUrl, order, partnerShopId, setIsBusy, true)\r\n                                    } else if (result.isDenied) {\r\n                                        processOrder(orderUrl, order, partnerShopId, setIsBusy, false)\r\n                                    }\r\n                                    else {\r\n                                        setIsBusy(false)\r\n                                    }\r\n                                })\r\n                            })\r\n                        }}\r\n                    />\r\n                </div>\r\n            </div>\r\n        </Fragment>\r\n    )\r\n}\r\n\r\nexport default OrderFromShopee","import { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { IoPersonAddOutline } from \"react-icons/io5\";\r\nimport { useHistory, useLocation } from \"react-router-dom\";\r\nimport * as yup from \"yup\";\r\nimport { Config, SaveButton } from \"./../../../components\";\r\n\r\nconst schema = yup.object().shape({\r\n  FullName: yup\r\n    .string()\r\n    .required(\"Vui lòng nhập họ tên\")\r\n    .max(100, \"Họ tên quá dài\"),\r\n  Phone: yup\r\n    .string()\r\n    .required(\"Vui lòng nhập số điện thoại\")\r\n    .max(20, \"Số điện thoại quá dài\"),\r\n  Email: yup\r\n    .string()\r\n    .required(\"Vui lòng nhập email\")\r\n    .email(\"Địa chỉ email không đúng\")\r\n    .max(70, \"Địa chỉ email quá dài\"),\r\n  Password: yup\r\n    .string()\r\n    .required(\"Vui lòng nhập mật khẩu\")\r\n    .max(70, \"Mật khẩu quá dài\"),\r\n});\r\n\r\nfunction useQuery() {\r\n  const { search } = useLocation();\r\n  return React.useMemo(() => new URLSearchParams(search), [search]);\r\n}\r\n\r\nfunction RegisterPage(props) {\r\n  const {\r\n    register,\r\n    handleSubmit,\r\n    formState: { errors },\r\n  } = useForm({\r\n    resolver: yupResolver(schema),\r\n  });\r\n\r\n  const query = useQuery();\r\n\r\n  const refCode = query.get(\"refcode\");\r\n\r\n  const [message, setMessage] = useState(\"\");\r\n\r\n  const history = useHistory();\r\n\r\n  const [isBusy, setIsBusy] = useState(false);\r\n\r\n  const [refPartnerName, setRefPartnerName] = useState(\"\");\r\n\r\n  useEffect(() => {\r\n    if (refCode !== null && refCode !== \"\") {\r\n      const url = `/partner/partner/get-ref?refCode=${refCode}`;\r\n      axios.get(url).then(({ data }) => {\r\n        if (data.IsSuccess) {\r\n          setRefPartnerName(data.Result);\r\n        }\r\n      });\r\n    }\r\n    // eslint-disable-next-line\r\n  }, [refCode]);\r\n\r\n  return (\r\n    <div className=\"auth-fluid\">\r\n      <div className=\"auth-fluid-form-box\">\r\n        <div className=\"align-items-center d-flex h-100\">\r\n          <div className=\"card-body\">\r\n            <div className=\"auth-brand left-0 right-0 text-center\">\r\n              <span className=\"logo-dark\">\r\n                <span>\r\n                  <img\r\n                    src=\"/assets/images/partner-logo.png\"\r\n                    alt=\"Logo\"\r\n                    height={Config.partnerLoginLogoHeight}\r\n                  />\r\n                </span>\r\n              </span>\r\n              <span className=\"logo-light\">\r\n                <span>\r\n                  <img\r\n                    src=\"/assets/images/partner-logo.png\"\r\n                    alt=\"Logo\"\r\n                    height={Config.partnerLoginLogoHeight}\r\n                  />\r\n                </span>\r\n              </span>\r\n            </div>\r\n\r\n            <h4 className=\"mt-0\">Đăng ký cộng tác viên</h4>\r\n\r\n            <form\r\n              onSubmit={handleSubmit((formData) => {\r\n                if (message !== \"\") setMessage(\"\");\r\n                setIsBusy(true);\r\n                let newFormData = null;\r\n                if (refCode !== \"\") {\r\n                  newFormData = {\r\n                    ...formData,\r\n                    AffCode: refCode,\r\n                  };\r\n                } else {\r\n                  newFormData = {\r\n                    ...formData,\r\n                  };\r\n                }\r\n                const url = \"/partner/partner/register\";\r\n                axios.post(url, newFormData).then(({ data }) => {\r\n                  if (data.IsSuccess) {\r\n                    history.replace(\"/\");\r\n                  } else {\r\n                    setMessage(data.Message);\r\n                  }\r\n                  setIsBusy(false);\r\n                });\r\n              })}\r\n            >\r\n              <div className=\"mb-2 position-relative\">\r\n                <label className=\"form-label\">\r\n                  Họ tên <span className=\"text-danger\">*</span>\r\n                </label>\r\n                <input\r\n                  {...register(\"FullName\")}\r\n                  className=\"form-control\"\r\n                  type=\"text\"\r\n                  placeholder=\"Họ tên\"\r\n                />\r\n                {errors.FullName && (\r\n                  <div className=\"validation-message\">\r\n                    {errors.FullName.message}\r\n                  </div>\r\n                )}\r\n              </div>\r\n\r\n              <div className=\"mb-2 position-relative\">\r\n                <label className=\"form-label\">\r\n                  Điện thoại <span className=\"text-danger\">*</span>\r\n                </label>\r\n                <input\r\n                  {...register(\"Phone\")}\r\n                  className=\"form-control\"\r\n                  type=\"text\"\r\n                  placeholder=\"Điện thoại\"\r\n                />\r\n                {errors.Phone && (\r\n                  <div className=\"validation-message\">\r\n                    {errors.Phone.message}\r\n                  </div>\r\n                )}\r\n              </div>\r\n\r\n              <div className=\"mb-2 position-relative\">\r\n                <label className=\"form-label\">\r\n                  Email <span className=\"text-danger\">*</span>\r\n                </label>\r\n                <input\r\n                  {...register(\"Email\")}\r\n                  className=\"form-control\"\r\n                  type=\"text\"\r\n                  placeholder=\"Email\"\r\n                />\r\n                {errors.Email && (\r\n                  <div className=\"validation-message\">\r\n                    {errors.Email.message}\r\n                  </div>\r\n                )}\r\n              </div>\r\n\r\n              <div className=\"mb-2 position-relative\">\r\n                <label className=\"form-label\">\r\n                  Mật khẩu <span className=\"text-danger\">*</span>\r\n                </label>\r\n                <input\r\n                  {...register(\"Password\")}\r\n                  className=\"form-control\"\r\n                  type=\"password\"\r\n                  placeholder=\"Mật khẩu\"\r\n                />\r\n                {errors.Password && (\r\n                  <div className=\"validation-message\">\r\n                    {errors.Password.message}\r\n                  </div>\r\n                )}\r\n              </div>\r\n\r\n              {refCode !== null ? (\r\n                <div className=\"mb-2 position-relative\">\r\n                  <label className=\"form-label\">Người giới thiệu</label>\r\n                  <input\r\n                    defaultValue={refPartnerName}\r\n                    className=\"form-control\"\r\n                    type=\"text\"\r\n                    placeholder=\"Người giới thiệu\"\r\n                    readOnly\r\n                  />\r\n                </div>\r\n              ) : null}\r\n\r\n              {message !== \"\" ? (\r\n                <div className=\"mb-2\">\r\n                  <div className=\"alert alert-danger\" role=\"alert\">\r\n                    {message}\r\n                  </div>\r\n                </div>\r\n              ) : (\r\n                \"\"\r\n              )}\r\n\r\n              <div className=\"text-center\">\r\n                <SaveButton\r\n                  className=\"w-100\"\r\n                  title=\"Đăng ký\"\r\n                  isBusy={isBusy}\r\n                  icon={\r\n                    <IoPersonAddOutline className=\"mt--3-px me-1 font-17\" />\r\n                  }\r\n                />\r\n              </div>\r\n\r\n              <footer className=\"footer footer-alt\">\r\n                <p className=\"text-muted\">\r\n                  Bạn đã có tài khoản? Nhấn{\" \"}\r\n                  <span\r\n                    onClick={() => {\r\n                      history.push(\"/\");\r\n                    }}\r\n                    className=\"text-danger cursor-point\"\r\n                  >\r\n                    <b>vào đây</b>\r\n                  </span>{\" \"}\r\n                  để đăng nhập\r\n                </p>\r\n              </footer>\r\n            </form>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default RegisterPage;\r\n","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport axios from 'axios'\r\nimport React, { useEffect, useState, useContext } from 'react'\r\nimport { useForm } from 'react-hook-form'\r\nimport { IoPersonAddOutline } from 'react-icons/io5'\r\nimport { useHistory, useLocation } from 'react-router-dom'\r\nimport * as yup from \"yup\"\r\nimport { SaveButton, Config, AppContext } from './../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n    Email: yup.string().required('Vui lòng nhập email').email('Địa chỉ email không đúng').max(70, 'Địa chỉ email quá dài'),\r\n    Password: yup.string().required('Vui lòng nhập mật khẩu').max(70, 'Mật khẩu quá dài')\r\n})\r\n\r\nfunction LoginPage(props) {\r\n    const { register, handleSubmit, setFocus, formState: { errors } } = useForm({\r\n        resolver: yupResolver(schema)\r\n    })\r\n\r\n    const [message, setMessage] = useState('')\r\n\r\n    const history = useHistory()\r\n\r\n    const [isBusy, setIsBusy] = useState(() => {\r\n        const a_token = localStorage.getItem('p-token')\r\n        if (a_token === null || a_token === '') return false\r\n        else return true\r\n    })\r\n\r\n    let location = useLocation();\r\n\r\n    let { from } = location.state || { from: { pathname: \"/partner/dashboard\" } };\r\n\r\n    const appSettings = useContext(AppContext)\r\n\r\n    const setInfo = (data) => {\r\n        localStorage.setItem('p-email', data.Result.Email)\r\n        localStorage.setItem('p-fullName', data.Result.FullName)\r\n        localStorage.setItem('p-token', data.Result.Token)\r\n        localStorage.setItem('p-avatarUrl', data.Result.AvatarUrl)\r\n        axios.defaults.headers.common['P-Token'] = data.Result.Token\r\n\r\n        appSettings.setPartnerFullName(data.Result.FullName)\r\n        appSettings.setPartnerAvatarUrl(data.Result.AvatarUrl)\r\n    }\r\n\r\n    useEffect(() => {\r\n        setFocus('Email')\r\n    }, [setFocus])\r\n\r\n    useEffect(() => {\r\n        const p_token = localStorage.getItem('p-token')\r\n        if (p_token !== null && p_token !== '') {\r\n            const url = '/partner/partner/login-token'\r\n            axios.post(url).then(({ data }) => {\r\n                if (data.IsSuccess) {\r\n                    setInfo(data)\r\n                    history.replace(from);\r\n                }\r\n                else {\r\n                    setIsBusy(false)\r\n                }\r\n            })\r\n        }\r\n        else {\r\n            setIsBusy(false)\r\n        }\r\n\r\n        // eslint-disable-next-line\r\n    }, [])\r\n\r\n    const onLogin = (formData) => {\r\n        formData.LoginTypeId = 1\r\n        if (message !== '') setMessage('')\r\n        setIsBusy(true)\r\n        const url = '/partner/partner/login'\r\n        axios.post(url, formData).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                setInfo(data)\r\n                history.replace(from)\r\n            }\r\n            else {\r\n                if (data.Message !== '' || data.Message !== null) {\r\n                    setMessage(data.Message)\r\n                    setTimeout(() => {\r\n                        setMessage('')\r\n                    }, 3_000)\r\n                }\r\n            }\r\n            setIsBusy(false)\r\n        })\r\n    }\r\n\r\n    return (\r\n        <div className=\"auth-fluid\">\r\n            <div className=\"auth-fluid-form-box\">\r\n                <div className=\"align-items-center d-flex h-100\">\r\n                    <div className=\"card-body\">\r\n\r\n                        <div className=\"auth-brand left-0 right-0 text-center\">\r\n                            <span className=\"logo-dark\">\r\n                                <span><img src=\"/assets/images/partner-logo.png\" alt=\"Logo\" height={Config.partnerLoginLogoHeight} /></span>\r\n                            </span>\r\n                            <span className=\"logo-light\">\r\n                                <span><img src=\"/assets/images/partner-logo.png\" alt=\"Logo\" height={Config.partnerLoginLogoHeight} /></span>\r\n                            </span>\r\n                        </div>\r\n\r\n                        <h4 className=\"mt-0\">Đăng nhập</h4>\r\n\r\n                        <p className=\"text-muted mb-4\">Đăng nhập để bắt đầu phiên làm việc</p>\r\n\r\n                        <form onSubmit={handleSubmit(formData => onLogin(formData))}>\r\n\r\n                            <div className=\"mb-2 position-relative\">\r\n                                <label className=\"form-label\">Email <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('Email')} className=\"form-control\" type=\"text\" placeholder=\"Email\"\r\n                                    disabled={isBusy}\r\n                                    autoComplete=\"off\" />\r\n                                {errors.Email && <div className=\"validation-message\">{errors.Email.message}</div>}\r\n                            </div>\r\n\r\n                            <div className=\"mb-2 position-relative\">\r\n                                <label className=\"form-label\">Mật khẩu <span className=\"text-danger\">*</span></label>\r\n                                <input {...register('Password')} className=\"form-control\" type=\"password\" placeholder=\"Mật khẩu\"\r\n                                    disabled={isBusy}\r\n                                    autoComplete=\"off\" />\r\n                                {errors.Password && <div className=\"validation-message\">{errors.Password.message}</div>}\r\n                            </div>\r\n\r\n                            {message !== '' ? <div className=\"mb-2\">\r\n                                <div className=\"alert alert-danger alert-dismissible fade show\" role=\"alert\">\r\n                                    <button type=\"button\" className=\"btn-close\"\r\n                                        onClick={() => {\r\n                                            setMessage('')\r\n                                        }}\r\n                                    ></button>\r\n                                    {message}\r\n                                </div>\r\n                            </div> : ''}\r\n\r\n                            <div className=\"text-center\">\r\n                                <SaveButton\r\n                                    className=\"w-100\"\r\n                                    title=\"Đăng nhập\"\r\n                                    isBusy={isBusy}\r\n                                    icon={<IoPersonAddOutline className=\"mt--3-px me-1 font-17\" />}\r\n                                />\r\n                            </div>\r\n\r\n                            <footer className=\"footer footer-alt\">\r\n                                <p className=\"text-muted\">Bạn chưa có tài khoản? Nhấn <span onClick={() => {\r\n                                    history.push('/partner/register')\r\n                                }} className=\"text-danger cursor-point\"><b>vào đây</b></span> để đăng ký tài khoản cộng tác viên</p>\r\n                            </footer>\r\n\r\n                        </form>\r\n\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div >\r\n    )\r\n}\r\n\r\nexport default LoginPage","import React from \"react\";\r\nimport { useEffect, useState } from \"react\";\r\nimport axios from \"axios\";\r\nimport { EmptyRow, LoadingRow } from \"../../../components\";\r\n\r\nexport default function ChildrenPage() {\r\n  const [partners, setPartners] = useState(null);\r\n\r\n  useEffect(() => {\r\n    document.getElementById('page-header').innerText = 'Đã giới thiệu'\r\n\r\n    const url = \"/partner/partner/get-children\";\r\n    axios.get(url).then(({ data }) => {\r\n      if (data.IsSuccess) {\r\n        setPartners(data.Result);\r\n      }\r\n    });\r\n  }, []);\r\n\r\n  function renderTable() {\r\n    if (partners === null) return <LoadingRow colSpan={5} />;\r\n    else if (partners.length === 0) return <EmptyRow colSpan={5} />;\r\n    else\r\n      return partners.map((item, index) => (\r\n        <tr key={index}>\r\n          <td className=\"text-center\">{index + 1}</td>\r\n          <td>{item.FullName}</td>\r\n          <td>{item.Email}</td>\r\n          <td>{item.Phone}</td>\r\n          <td>{item.GroupName}</td>\r\n        </tr>\r\n      ));\r\n  }\r\n\r\n  return (\r\n    <div className=\"card\">\r\n      <div className=\"card-body\">\r\n        <div className=\"table-responsive\">\r\n          <table className=\"table table-centered mb-0\">\r\n            <thead>\r\n              <tr>\r\n                <th className=\"w-52-px\">#</th>\r\n                <th>Họ tên</th>\r\n                <th>Điện thoại</th>\r\n                <th>Email</th>\r\n                <th>Nhóm</th>\r\n              </tr>\r\n            </thead>\r\n            <tbody>{renderTable()}</tbody>\r\n          </table>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n","import \"animate.css\"\r\nimport axios from 'axios'\r\nimport React, { useContext, useEffect, useState } from 'react'\r\nimport { MdMenu } from 'react-icons/md'\r\nimport 'react-notifications-component/dist/theme.css'\r\nimport {\r\n    BrowserRouter as Router, Redirect, Route, Switch, useHistory\r\n} from \"react-router-dom\"\r\nimport SimpleBar from 'simplebar-react'\r\nimport './App.css'\r\nimport { AppContext, Config, ModalPopup, Notification, PartnerLeftMenu } from './components'\r\nimport {\r\n    BalanceHistoryPage, CustomerPage, DashboardPage, OrderPage,\r\n    ProductCheckingPage, ProductPage, ProfilePage,\r\n    ChildrenPage,\r\n    // OrderFromShopee,\r\n    // PartnerShopPage,\r\n} from './pages/partner'\r\n\r\nvar collapsed = false\r\n\r\n// Phóng to, thu nhỏ left menu\r\nconst handleCollapse = () => {\r\n    if (!collapsed) {\r\n        document.body.classList.add('sidebar-enable')\r\n        document.body.setAttribute('data-leftbar-compact-mode', 'condensed')\r\n    }\r\n    else {\r\n        document.body.classList.remove('sidebar-enable')\r\n        document.body.setAttribute('data-leftbar-compact-mode', '')\r\n    }\r\n    collapsed = !collapsed\r\n}\r\n\r\nvar globalPopups = []\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nconst apiUrl = window.apiUrl\r\n\r\nconst renderAvatar = (avatarUrl) => {\r\n    let url = ''\r\n    if (avatarUrl === null || avatarUrl === '') url = `url(${noImgUrl})`\r\n    else url = `url(${apiUrl}/admin/storage/thumbnail?url=${avatarUrl})`\r\n    return <span\r\n        className=\"bg-avatar me-0 rounded-circle\"\r\n        style={{ backgroundImage: url, width: '32px', height: '32px' }}\r\n    />\r\n}\r\n\r\nfunction PartnerLayout() {\r\n    const appSettings = useContext(AppContext)\r\n\r\n    const history = useHistory()\r\n\r\n    const [popupInfo, setPopupInfo] = useState({\r\n        isShow: false,\r\n        partnerPopupId: 0,\r\n        title: '',\r\n        content: ''\r\n    })\r\n\r\n    useEffect(() => {\r\n        loadPopup()\r\n    }, [])\r\n\r\n    function loadPopup() {\r\n        const url = '/partner/popup/get-partner-popup'\r\n        axios.get(url).then(({ data }) => {\r\n            if (data.IsSuccess) {\r\n                const popups = data.Result\r\n                globalPopups = popups\r\n                if (popups.length !== 0) {\r\n                    const popup = popups[0]\r\n                    setPopupInfo({\r\n                        isShow: true,\r\n                        partnerPopupId: popup.PartnerPopupId,\r\n                        title: popup.Title,\r\n                        content: popup.Content\r\n                    })\r\n                }\r\n            }\r\n        })\r\n    }\r\n\r\n    const token = localStorage.getItem('p-token')\r\n\r\n    if (token === null || token === '') return <Redirect to='/' />\r\n    else <Redirect to='/partner/dashboard' />\r\n\r\n    return (\r\n        <div className=\"wrapper\">\r\n\r\n            <Router>\r\n\r\n                <div className=\"leftside-menu\">\r\n\r\n                    <span className=\"logo text-center logo-dark\">\r\n                        <span className=\"logo-lg\">\r\n                            <img src=\"/assets/images/logo-dark.png\" alt=\"logo\" height={Config.logoHeight} />\r\n                        </span>\r\n                        <span className=\"logo-sm\">\r\n                            <img src=\"/assets/images/logo_sm_dark.png\" alt=\"logo\" height={Config.logoHeight} />\r\n                        </span>\r\n                    </span>\r\n\r\n                    <SimpleBar className=\"h-100\" id=\"leftside-menu-container\">\r\n                        <PartnerLeftMenu\r\n                            onLogout={() => {\r\n                                Notification.confirm('Bạn có chắc chắn muốn đăng xuất không?', () => {\r\n                                    const url = '/partner/partner/logout'\r\n                                    axios.post(url).then(({ data }) => {\r\n                                        localStorage.removeItem('p-email')\r\n                                        localStorage.removeItem('p-fullName')\r\n                                        localStorage.removeItem('p-token')\r\n                                        localStorage.removeItem('p-avatarUrl')\r\n                                        axios.defaults.headers.common['P-Token'] = ''\r\n                                        history.replace('/')\r\n                                    })\r\n                                })\r\n                            }}\r\n                        />\r\n\r\n                        <div className=\"clearfix\"></div>\r\n                    </SimpleBar>\r\n\r\n                </div>\r\n\r\n                <div className=\"content-page\">\r\n                    <div className=\"content\">\r\n\r\n                        <div className=\"navbar-custom\">\r\n                            <ul className=\"list-unstyled topbar-menu float-end mb-0\">\r\n                                <li className=\"dropdown notification-list d-lg-none\">\r\n                                    <a className=\"nav-link dropdown-toggle arrow-none\" data-bs-toggle=\"dropdown\" href=\"/\" role=\"button\" aria-haspopup=\"false\" aria-expanded=\"false\">\r\n                                        <i className=\"dripicons-search noti-icon\"></i>\r\n                                    </a>\r\n                                </li>\r\n                                <li className=\"dropdown notification-list\">\r\n                                    <span className=\"nav-link dropdown-toggle nav-user arrow-none me-0\">\r\n                                        <span className=\"account-user-avatar\">\r\n                                            {renderAvatar(appSettings.partnerAvatarUrl)}\r\n                                        </span>\r\n                                        <span>\r\n                                            <span className=\"account-user-name\">{appSettings.partnerFullName}</span>\r\n                                            <span className=\"account-position\">Cộng tác viên</span>\r\n                                        </span>\r\n                                    </span>\r\n                                </li>\r\n                            </ul>\r\n                            <button className=\"button-menu-mobile open-left\" onClick={handleCollapse}>\r\n                                <MdMenu style={{ marginTop: '-10px' }} />\r\n                            </button>\r\n                            <span className=\"page-title\" id=\"page-header\"></span>\r\n                        </div>\r\n\r\n                        <div className=\"container-fluid\">\r\n\r\n                            <div className=\"row\">\r\n                                <div className=\"col-12\" style={{ paddingTop: '24px' }}>\r\n                                    <Switch>\r\n                                        <Route path=\"/partner/dashboard\">\r\n                                            <DashboardPage />\r\n                                        </Route>\r\n                                        <Route path=\"/partner/product\">\r\n                                            <ProductPage />\r\n                                        </Route>\r\n                                        <Route path=\"/partner/product-checking\">\r\n                                            <ProductCheckingPage />\r\n                                        </Route>\r\n                                        <Route path=\"/partner/customer\">\r\n                                            <CustomerPage />\r\n                                        </Route>\r\n                                        <Route path=\"/partner/order\">\r\n                                            <OrderPage />\r\n                                        </Route>\r\n                                        {/* <Route path=\"/partner/shop\">\r\n                                            <PartnerShopPage />\r\n                                        </Route>\r\n                                        <Route path=\"/partner/order-from-shopee\">\r\n                                            <OrderFromShopee />\r\n                                        </Route> */}\r\n                                        <Route path=\"/partner/children\">\r\n                                            <ChildrenPage />\r\n                                        </Route>\r\n                                        <Route path=\"/partner/profile\">\r\n                                            <ProfilePage />\r\n                                        </Route>\r\n                                        <Route path=\"/partner/balance-history\">\r\n                                            <BalanceHistoryPage />\r\n                                        </Route>\r\n                                    </Switch>\r\n                                </div>\r\n                            </div>\r\n\r\n                        </div>\r\n\r\n                    </div>\r\n\r\n                    <footer className=\"footer\">\r\n                        <div className=\"container-fluid\">\r\n                            <div className=\"row\">\r\n                                <div className=\"col-md-6\">\r\n                                    Copyright &copy; {new Date().getFullYear()} Drop Viet\r\n                                </div>\r\n                                <div className=\"col-md-6\">\r\n                                    <div className=\"text-md-end footer-links d-none d-md-block\">\r\n                                        <span>Version: {Config.version}</span>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </footer>\r\n\r\n                </div>\r\n\r\n            </Router>\r\n\r\n            <ModalPopup\r\n                onSave={(isChecked, partnerPopupId) => {\r\n                    if (isChecked) {\r\n                        const url = `/partner/popup/never-show-again?id=${partnerPopupId}`\r\n                        axios.post(url).then(({ data }) => {\r\n                            if (data.IsSuccess) {\r\n\r\n                            }\r\n                        })\r\n                    }\r\n                }}\r\n                onClose={(partnerPopupId) => {\r\n                    setPopupInfo({\r\n                        isShow: false,\r\n                        partnerPopupId: 0,\r\n                        title: '',\r\n                        content: ''\r\n                    })\r\n                    setTimeout(() => {\r\n                        const nextPopups = globalPopups.filter(n => n.PartnerPopupId > partnerPopupId)\r\n                        if (nextPopups.length !== 0) {\r\n                            const nextPopup = nextPopups[0]\r\n                            setPopupInfo({\r\n                                isShow: true,\r\n                                partnerPopupId: nextPopup.PopupId,\r\n                                title: nextPopup.Title,\r\n                                content: nextPopup.Content\r\n                            })\r\n                        }\r\n                    }, 500)\r\n                }}\r\n                isShow={popupInfo.isShow}\r\n                partnerPopupId={popupInfo.partnerPopupId}\r\n                title={popupInfo.title}\r\n                content={popupInfo.content}\r\n            />\r\n\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default PartnerLayout","import \"animate.css\"\r\nimport axios from 'axios'\r\nimport vi from 'date-fns/locale/vi'\r\nimport React, { useState } from 'react'\r\nimport { registerLocale, setDefaultLocale } from \"react-datepicker\"\r\nimport \"react-datepicker/dist/react-datepicker.css\"\r\nimport ReactNotification from 'react-notifications-component'\r\nimport 'react-notifications-component/dist/theme.css'\r\nimport {\r\n    BrowserRouter as Router, Route, Switch\r\n} from \"react-router-dom\"\r\nimport AdminLayout from './AdminLayout'\r\nimport './App.css'\r\nimport { AppContext, Notification } from './components'\r\nimport { LoginPage, RegisterPage } from './pages/partner'\r\nimport { LoginPage as AdminLoginPage } from './pages/admin'\r\nimport PartnerLayout from './PartnerLayout'\r\nimport { loadProgressBar } from 'axios-progress-bar'\r\nimport 'axios-progress-bar/dist/nprogress.css'\r\n\r\nloadProgressBar()\r\n\r\nregisterLocale('vi', vi)\r\nsetDefaultLocale('vi')\r\n\r\naxios.defaults.baseURL = window.apiUrl\r\n// axios.defaults.baseURL = 'https://api.drop.radovietnam.com'\r\n// axios.defaults.baseURL = 'http://192.168.0.15:8002'\r\n\r\naxios.defaults.timeout = 10_000\r\naxios.defaults.headers.common['A-Token'] = localStorage.getItem('a-token')\r\naxios.defaults.headers.common['P-Token'] = localStorage.getItem('p-token')\r\naxios.interceptors.response.use(function (response) {\r\n    try {\r\n        const responseType = response.config.responseType\r\n        if (responseType !== 'blob') {\r\n            if (!response.data.IsSuccess) {\r\n                if (response.data.Message !== '') {\r\n                    Notification.warning(response.data.Message)\r\n\r\n                    if (response.data.Code === 401) {\r\n                        const url = response.config.url\r\n                        const urlArr = url.split('/')\r\n                        if (urlArr.length > 2) {\r\n                            const adminOrPartner = urlArr[1]\r\n                            if (adminOrPartner === 'admin') {\r\n\r\n                                axios.defaults.headers.common['A-Token'] = ''\r\n\r\n                                localStorage.removeItem('a-right')\r\n                                localStorage.removeItem('a-roleName')\r\n                                localStorage.removeItem('a-fullName')\r\n                                localStorage.removeItem('a-token')\r\n                                localStorage.removeItem('a-avatarUrl')\r\n\r\n                                window.location.reload()\r\n                            }\r\n                            else if (adminOrPartner === 'partner') {\r\n\r\n                                axios.defaults.headers.common['P-Token'] = ''\r\n\r\n                                localStorage.removeItem('p-email')\r\n                                localStorage.removeItem('p-fullName')\r\n                                localStorage.removeItem('p-token')\r\n                                localStorage.removeItem('p-avatarUrl')\r\n\r\n                                window.location.reload()\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    catch { }\r\n    return response\r\n}, function (error) {\r\n    Notification.danger('Có lỗi xảy ra, vui lòng liên hệ quản trị viên')\r\n    return Promise.reject(error)\r\n})\r\n\r\nfunction App(props) {\r\n    const [rights, setRights] = useState(() => {\r\n        const strRight = localStorage.getItem('a-right')\r\n        if (strRight !== null && strRight !== '') return strRight.split(';')\r\n        return []\r\n    })\r\n\r\n    const [adminFullName, setAdminFullName] = useState(() => {\r\n        const fullName = localStorage.getItem('a-fullName')\r\n        if (fullName === null || fullName === '') return 'Chưa cập nhật'\r\n        else return fullName\r\n    })\r\n\r\n    const [adminAvatarUrl, setAdminAvatarUrl] = useState(() => {\r\n        const avatarUrl = localStorage.getItem('a-avatarUrl')\r\n        if (avatarUrl === null || avatarUrl === '') return ''\r\n        else return avatarUrl\r\n    })\r\n\r\n    const [adminRole, setAdminRole] = useState(() => {\r\n        const roleName = localStorage.getItem('a-roleName')\r\n        if (roleName === null || roleName === '') return 'Chưa cập nhật'\r\n        else return roleName\r\n    })\r\n\r\n    const [partnerFullName, setPartnerFullName] = useState(() => {\r\n        const fullName = localStorage.getItem('p-fullName')\r\n        if (fullName === null || fullName === '') return 'Chưa cập nhật'\r\n        else return fullName\r\n    })\r\n\r\n    const [partnerAvatarUrl, setPartnerAvatarUrl] = useState(() => {\r\n        const avatarUrl = localStorage.getItem('p-avatarUrl')\r\n        if (avatarUrl === null || avatarUrl === '') return ''\r\n        else return avatarUrl\r\n    })\r\n\r\n    const appSettings = {\r\n        rights,\r\n        setRights,\r\n        adminFullName,\r\n        setAdminFullName,\r\n        adminAvatarUrl,\r\n        setAdminAvatarUrl,\r\n        adminRole,\r\n        setAdminRole,\r\n        partnerFullName,\r\n        setPartnerFullName,\r\n        partnerAvatarUrl,\r\n        setPartnerAvatarUrl\r\n    }\r\n\r\n    return (\r\n        <AppContext.Provider value={appSettings}>\r\n            <ReactNotification />\r\n            <Router>\r\n                <Switch>\r\n                    <Route path=\"/admin/login\">\r\n                        <AdminLoginPage />\r\n                    </Route>\r\n                    <Route path=\"/admin\">\r\n                        <AdminLayout />\r\n                    </Route>\r\n                    <Route path=\"/partner/register\">\r\n                        <RegisterPage />\r\n                    </Route>\r\n                    <Route path=\"/partner\">\r\n                        <PartnerLayout />\r\n                    </Route>\r\n                    <Route path=\"/\">\r\n                        <LoginPage />\r\n                    </Route>\r\n                </Switch>\r\n            </Router>\r\n        </AppContext.Provider>\r\n    )\r\n}\r\n\r\nexport default App","const reportWebVitals = onPerfEntry => {\r\n  if (onPerfEntry && onPerfEntry instanceof Function) {\r\n    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n      getCLS(onPerfEntry);\r\n      getFID(onPerfEntry);\r\n      getFCP(onPerfEntry);\r\n      getLCP(onPerfEntry);\r\n      getTTFB(onPerfEntry);\r\n    });\r\n  }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import React from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport './index.css'\r\nimport App from './App'\r\nimport reportWebVitals from './reportWebVitals'\r\n\r\nReactDOM.render(\r\n  <React.StrictMode>\r\n    <App />\r\n  </React.StrictMode>,\r\n  document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals()\r\n"],"sourceRoot":""}