@flast-erp/core 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ import e from"@babel/runtime/helpers/defineProperty";import t from"lodash/mapKeys";const n={outsideFilter:"outsideFilter",filters:"filters",extraFilters:"extraFilters"},r=8,a="HASH_POPUP",o="HASH_POPUP_CLOSE",l={CREATE_DATA:0,DO_NOT_MANUFACTORY:1,IS_CONTACT:2,CONTACT_LATER:6,KO_LIEN_HE_DUOC:4,THANH_CO_HOI:7},c=e=>{switch(e){case l.CREATE_DATA:return" Chưa liên hệ";case l.DO_NOT_MANUFACTORY:return"Không triển khai";case l.IS_CONTACT:return" Đang tư vấn";case l.CONTACT_LATER:return"Liên hệ sau";case l.KO_LIEN_HE_DUOC:return"Không liên hệ được";case l.THANH_CO_HOI:return"Thành cơ hội";default:return"N/A"}},i=e=>{switch(e){case l.CREATE_DATA:return"#f50";case l.DO_NOT_MANUFACTORY:return"#2db7f5";case l.IS_CONTACT:return"#87d068";case l.CONTACT_LATER:return"#108ee9";case l.KO_LIEN_HE_DUOC:return"red";case l.THANH_CO_HOI:return"green";default:return"black"}},u=e=>{switch(e){case 1:return"Sale";case 2:return"Chăm sóc khách hàng";case 3:return"MarkeTing";case 4:return"Kho";default:return"N/A"}},h=200,s=[{id:1,name:"Nghỉ phép năm (Annual Leave)"},{id:2,name:"Nghỉ không lương (Unpaid Absence)"},{id:3,name:"Nghỉ theo chính sách phúc lợi của công ty (Leave According To Company Welfare Policy)"},{id:4,name:"Nghỉ ốm hưởng BHXH (Sick Leave With Social Insurance)"},{id:5,name:"Lý do khác (Other Reasons)"}],g=[{id:1,name:"Làm thêm giờ"},{id:2,name:"Làm thêm vào ngày nghỉ"}],d=0,m=1,p=1,O=2,T=0,A=1,v=2,_=3,C=[{id:0,name:"Chờ duyệt (Waiting For Approval)"},{id:1,name:"Không duyệt (Not Approved)"},{id:2,name:"Duyệt (Approved)"}],f=C,b=[{value:2,text:"Kích hoạt",color:"red",textColor:"#ff4d4f"},{value:1,text:"Ngưng",color:"green",textColor:"#52c41a"}],N=["png","jpg","jpeg","gif","tif","tiff"],E=[{id:11,name:"Web"},{id:1,name:"Facebook"},{id:2,name:"Zalo"},{id:3,name:"Hotline"},{id:4,name:"Trực tiếp"},{id:5,name:"Email"},{id:6,name:"MKT0D"},{id:7,name:"Giới thiệu"},{id:8,name:"Cskh"},{id:9,name:"Partner"},{id:10,name:"Shopee"}],D=t(E,"id"),y=[{id:1,name:"Chưa liên hệ"},{id:2,name:"Đã liên hệ"}],H=t(y,"id"),x=[{text:"Doanh số",value:"doanhso"},{text:"SQL",value:"sql"},{text:"Trafic",value:"trafic"}],S=t(x,"value"),P=[{label:"Tiền mặt",value:6},{label:"Chuyển khoản MBbank",value:1},{label:"Chuyển khoản TPbank",value:7},{label:"COD Viettel",value:2},{label:"Ví Momo",value:3},{label:"Ví Vnpay",value:4},{label:"Ncc thu hộ",value:5}],Y=[{text:"Cao",value:"cao",color:"red"},{text:"Trung bình",value:"trungbinh",color:"purple"},{text:"Thấp",value:"thap",color:"green"}],I=t(Y,"value"),L=[{value:0,text:"Ngưng",color:"red"},{value:1,text:"Kích hoạt",color:"green"}],j=[{value:0,text:"Ngưng",color:"red"},{value:1,text:"Kích hoạt",color:"green"}],k=[{value:1,name:"IT",color:"blue"},{value:2,name:"Marketing",color:"green"},{value:3,name:"Kinhdoanh",color:"purple"},{value:4,name:"Khác",color:"orange"}],M=1,K=t(k,"value"),R=["Not Started","In Progress","Completed","On Hold"],U=["To Do","In Progress","Done","Cancelled"],w=[{value:"QUANTITY",name:"Số lượng"},{value:"DIMENSION",name:"Kích thước"},{value:"WEIGHT",name:"Trọng lượng"}],F=2,G=[{value:1,text:"Công tác có phí",color:"green"},{value:2,text:"Công tác không phí",color:"red"}],W=1,V=2,B=[{value:1,text:"Công ty trả/company pay",color:"green"},{value:2,text:"Cá nhân tạm ứng/person pay",color:"red"}],Q=1,q=2,X=[{value:1,text:"Chiều đi / Departure",color:"green"},{value:2,text:"Chiều về / Arrival",color:"red"}];function Z(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function z(t){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?Z(Object(r),!0).forEach(function(n){e(t,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Z(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}const J=200,$="CHANGE_STORE",ee={SINGIN:"/auth/login"},te={ADD_USER:"add__user",REMOVE_USER:"remove__user",TOOGLE_COLLAPSE:"tg_cll",F5_LIST:"f5_list",SET_ROUTES:"set_routes"},ne="in_app_noti",re=".png, .jpeg, .jpg",ae="#modal",oe="#close-modal",le="inbox",ce="parent",ie="DD-MM-YYYY",ue="DD-MM-YYYY HH:mm",he="HH:mm",se=3,ge="YYYY-MM-DD",de="VND",me="//www.youtube.com/embed/",pe="#ffffff",Oe=71.5,Te={GATEWAY:""};function Ae(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=e.GATEWAY||Te.GATEWAY;Object.assign(Te,z(z({},e),{},{GATEWAY:t}))}const ve=()=>Te.GATEWAY,_e=()=>z({},Te);export{te as ACTIONS,b as ACTIVE_TYPES,ee as API,A as APP_FOLLOW_STATUS_CONFIRM,v as APP_FOLLOW_STATUS_DONE,_ as APP_FOLLOW_STATUS_REJECT,T as APP_FOLLOW_STATUS_WAITING,f as APP_STATUS_TEXT,F as CAR_NOT_WORK_TYPE,M as CAR_WORK_TYPE,$ as CHANGE_STORE,E as CHANNEL_SOURCE,D as CHANNEL_SOURCE_MAP_KEYS,y as CHANNEL_STATUS,H as CHANNEL_STATUS_MAP_KEYS,de as CURRENCY_UNIT,pe as DEFAULT_COLOR_VALUE,le as DEFAULT_INBOX_ID,ce as DEFAULT_PARENT_INBOX_ID,k as DEPARTMENT,K as DEPARTMENT_MAP_KEYS_VALUE,me as EMBED_YOUTUBE_LINK,re as EVENT_ACCEPT_IMAGE_TYPES,X as FLIGHT_WAY_TYPE,q as FLIGHT_WAY_TYPE_ARRIVAL,Q as FLIGHT_WAY_TYPE_DEPARTURE,ie as FORMAT_DATE_INPUT,ue as FORMAT_DATE_TIME_INPUT,he as FORMAT_TIME_INPUT,ae as HASH_MODAL,oe as HASH_MODAL_CLOSE,a as HASH_POPUP,o as HASH_POPUP_CLOSE,B as HOTEL_ROOM_PAY_TYPE,W as HOTEL_ROOM_PAY_TYPE_COMPANY,V as HOTEL_ROOM_PAY_TYPE_PERSIONAL,N as IMAGE_TYPES,ne as INAPP_NOTIFICATION_EMITTER,x as KPI_TYPE,S as KPI_TYPE_MAP_KEYS,w as MATERIAL_UNIT_TYPE,se as MAX_FILE_SIZE_MB,s as NGHI_PHEP_META,m as NGHI_PHEP_STATUS_CONFIRM,O as NGHI_PHEP_STATUS_DONE,p as NGHI_PHEP_STATUS_REJECT,C as NGHI_PHEP_STATUS_TEXT,d as NGHI_PHEP_STATUS_WAITING,g as OVERTIME_META,P as PAYMENT_TYPE_CONST,Y as PRIORITY_TYPE_TAGS,I as PRIORITY_TYPE_TAGS_MAP_KEYS,L as PRODUCT_STATUS,R as PROJECT_STATUS_LIST,U as PROJECT_TASK_STATUS_LIST,n as QUERY_PARAMS_PROPERTY,G as REGISTER_WORK_TYPE,ge as REPORT_DATE_FORMAT,l as STATUS_LEAD,h as SUCCESS_API_CODE,J as SUCCESS_CODE,j as USER_STATUS,r as VAT_PERCENT,i as getColorStatusLead,_e as getConfig,ve as getGateway,c as getStatusLead,u as getTypeGroup,Ae as initCoreConfig,Oe as outerRadius};
2
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../src/configs/constant.js","../../src/configs/localData.js","../../src/configs/index.js"],"sourcesContent":["/**************************************************************************/\n/* constant.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nexport const QUERY_PARAMS_PROPERTY = {\n outsideFilter: 'outsideFilter',\n filters: 'filters',\n extraFilters: 'extraFilters'\n}\n\nexport const MAX_FILE_SIZE_MB = 3;\nexport const VAT_PERCENT = 8;\nexport const HASH_MODAL = \"#modal\";\nexport const FORMAT_TIME_INPUT = 'HH:mm';\nexport const HASH_POPUP = \"HASH_POPUP\";\nexport const HASH_POPUP_CLOSE = \"HASH_POPUP_CLOSE\"\nexport const FORMAT_DATE_INPUT = 'DD-MM-YYYY';\nexport const CURRENCY_UNIT = 'VND';\n\nexport const STATUS_LEAD = {\n CREATE_DATA: 0,\n DO_NOT_MANUFACTORY: 1,\n IS_CONTACT: 2,\n CONTACT_LATER: 6,\n KO_LIEN_HE_DUOC: 4,\n THANH_CO_HOI: 7\n}\n\nexport const getStatusLead = (option) => {\n switch (option) {\n case STATUS_LEAD.CREATE_DATA:\n return ' Chưa liên hệ';\n case STATUS_LEAD.DO_NOT_MANUFACTORY:\n return 'Không triển khai';\n case STATUS_LEAD.IS_CONTACT:\n return ' Đang tư vấn';\n case STATUS_LEAD.CONTACT_LATER:\n return 'Liên hệ sau';\n case STATUS_LEAD.KO_LIEN_HE_DUOC:\n return 'Không liên hệ được';\n case STATUS_LEAD.THANH_CO_HOI:\n return 'Thành cơ hội';\n default:\n return 'N/A';\n }\n}\n\nexport const getColorStatusLead = (option) => {\n switch (option) {\n case STATUS_LEAD.CREATE_DATA:\n return '#f50';\n case STATUS_LEAD.DO_NOT_MANUFACTORY:\n return '#2db7f5';\n case STATUS_LEAD.IS_CONTACT:\n return '#87d068';\n case STATUS_LEAD.CONTACT_LATER:\n return '#108ee9';\n case STATUS_LEAD.KO_LIEN_HE_DUOC:\n return 'red';\n case STATUS_LEAD.THANH_CO_HOI:\n return 'green';\n default:\n return 'black';\n }\n}\n\nexport const getTypeGroup = (option) => {\n switch (option) {\n case 1:\n return 'Sale';\n case 2:\n return 'Chăm sóc khách hàng';\n case 3:\n return 'MarkeTing';\n case 4:\n return 'Kho';\n default:\n return 'N/A';\n }\n}\n\n/**************************************************************************/\n\nexport const SUCCESS_API_CODE = 200;\n\nexport const NGHI_PHEP_META = [\n { id: 1, name: 'Nghỉ phép năm (Annual Leave)' },\n { id: 2, name: 'Nghỉ không lương (Unpaid Absence)' },\n { id: 3, name: 'Nghỉ theo chính sách phúc lợi của công ty (Leave According To Company Welfare Policy)' },\n { id: 4, name: 'Nghỉ ốm hưởng BHXH (Sick Leave With Social Insurance)' },\n { id: 5, name: 'Lý do khác (Other Reasons)' },\n]\n\nexport const OVERTIME_META = [\n { id: 1, name: 'Làm thêm giờ' },\n { id: 2, name: 'Làm thêm vào ngày nghỉ' }\n]\n\nexport const NGHI_PHEP_STATUS_WAITING = 0;\nexport const NGHI_PHEP_STATUS_CONFIRM = 1;\nexport const NGHI_PHEP_STATUS_REJECT = 1;\nexport const NGHI_PHEP_STATUS_DONE = 2;\n\nexport const APP_FOLLOW_STATUS_WAITING = 0;\nexport const APP_FOLLOW_STATUS_CONFIRM = 1;\nexport const APP_FOLLOW_STATUS_DONE = 2;\nexport const APP_FOLLOW_STATUS_REJECT = 3;\n\nexport const NGHI_PHEP_STATUS_TEXT = [\n { id: NGHI_PHEP_STATUS_WAITING, name: 'Chờ duyệt (Waiting For Approval)' },\n { id: NGHI_PHEP_STATUS_REJECT, name: 'Không duyệt (Not Approved)' },\n { id: NGHI_PHEP_STATUS_DONE, name: 'Duyệt (Approved)' }\n]\n\nexport const APP_STATUS_TEXT = NGHI_PHEP_STATUS_TEXT;\n","/**************************************************************************/\n/* localData.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport mapKeys from 'lodash/mapKeys';\n\nexport const ACTIVE_TYPES = [\n {\n value: 2,\n text: 'Kích hoạt',\n color: 'red',\n textColor: \"#ff4d4f\"\n },\n {\n value: 1,\n text: 'Ngưng',\n color: 'green',\n textColor: \"#52c41a\"\n }\n];\n\nexport const IMAGE_TYPES = ['png', 'jpg', 'jpeg', 'gif', 'tif', 'tiff'];\n\nexport const CHANNEL_SOURCE = [\n { 'id': 11, 'name': 'Web' },\n { 'id': 1, 'name': 'Facebook' },\n { 'id': 2, 'name': 'Zalo' },\n { 'id': 3, 'name': 'Hotline' },\n { 'id': 4, 'name': 'Trực tiếp' },\n { 'id': 5, 'name': 'Email' },\n { 'id': 6, 'name': 'MKT0D' },\n { 'id': 7, 'name': 'Giới thiệu' },\n { 'id': 8, 'name': 'Cskh' },\n { 'id': 9, 'name': 'Partner' },\n { 'id': 10, 'name': 'Shopee' }\n];\nexport const CHANNEL_SOURCE_MAP_KEYS = mapKeys(CHANNEL_SOURCE, 'id');\n\nexport const CHANNEL_STATUS = [\n { 'id': 1, 'name': 'Chưa liên hệ' },\n { 'id': 2, 'name': 'Đã liên hệ' }\n];\nexport const CHANNEL_STATUS_MAP_KEYS = mapKeys(CHANNEL_STATUS, 'id');\n\nexport const KPI_TYPE = [\n { text: 'Doanh số', value: 'doanhso' },\n { text: 'SQL', value: 'sql' },\n { text: 'Trafic', value: 'trafic' }\n]\nexport const KPI_TYPE_MAP_KEYS = mapKeys(KPI_TYPE, 'value');\n\nexport const PAYMENT_TYPE_CONST = [\n { label: 'Tiền mặt', value: 6 },\n { label: 'Chuyển khoản MBbank', value: 1 },\n { label: 'Chuyển khoản TPbank', value: 7 },\n { label: 'COD Viettel', value: 2 },\n { label: 'Ví Momo', value: 3 },\n { label: 'Ví Vnpay', value: 4 },\n { label: 'Ncc thu hộ', value: 5 }\n];\n\nexport const PRIORITY_TYPE_TAGS = [\n { text: 'Cao', value: 'cao', color: 'red' },\n { text: 'Trung bình', value: 'trungbinh', color: 'purple' },\n { text: 'Thấp', value: 'thap', color: 'green' }\n];\nexport const PRIORITY_TYPE_TAGS_MAP_KEYS = mapKeys(\n PRIORITY_TYPE_TAGS,\n 'value',\n);\n\nexport const PRODUCT_STATUS = [\n { value: 0, text: 'Ngưng', color: 'red' },\n { value: 1, text: 'Kích hoạt', color: 'green' }\n];\n\nexport const USER_STATUS = [\n { value: 0, text: 'Ngưng', color: 'red' },\n { value: 1, text: 'Kích hoạt', color: 'green' }\n];\n\nexport const DEPARTMENT = [\n { value: 1, name: \"IT\", color: 'blue' },\n { value: 2, name: \"Marketing\", color: 'green' },\n { value: 3, name: \"Kinhdoanh\", color: 'purple' },\n { value: 4, name: \"Khác\", color: 'orange' }\n];\n\nexport const CAR_WORK_TYPE = 1;\nexport const DEPARTMENT_MAP_KEYS_VALUE = mapKeys(DEPARTMENT, 'value');\n\nexport const PROJECT_STATUS_LIST = ['Not Started', 'In Progress', 'Completed', 'On Hold'];\nexport const PROJECT_TASK_STATUS_LIST = ['To Do', 'In Progress', 'Done', 'Cancelled'];\n\nexport const MATERIAL_UNIT_TYPE = [\n { value: \"QUANTITY\", name: \"Số lượng\" },\n { value: \"DIMENSION\", name: \"Kích thước\" },\n { value: \"WEIGHT\", name: \"Trọng lượng\" }\n];\n\n\n\nexport const CAR_NOT_WORK_TYPE = 2;\nexport const REGISTER_WORK_TYPE = [\n { value: 1, text: 'Công tác có phí', color: 'green' },\n { value: 2, text: 'Công tác không phí', color: 'red' }\n];\n\nexport const HOTEL_ROOM_PAY_TYPE_COMPANY = 1;\nexport const HOTEL_ROOM_PAY_TYPE_PERSIONAL = 2;\nexport const HOTEL_ROOM_PAY_TYPE = [\n { value: HOTEL_ROOM_PAY_TYPE_COMPANY, text: 'Công ty trả/company pay', color: 'green' },\n { value: HOTEL_ROOM_PAY_TYPE_PERSIONAL, text: 'Cá nhân tạm ứng/person pay', color: 'red' }\n];\n\nexport const FLIGHT_WAY_TYPE_DEPARTURE = 1;\nexport const FLIGHT_WAY_TYPE_ARRIVAL = 2;\nexport const FLIGHT_WAY_TYPE = [\n { value: FLIGHT_WAY_TYPE_DEPARTURE, text: 'Chiều đi / Departure', color: 'green' },\n { value: FLIGHT_WAY_TYPE_ARRIVAL, text: 'Chiều về / Arrival', color: 'red' }\n];\n","\nexport * from \"./constant\"\nexport * from \"./localData\"\n\nexport const SUCCESS_CODE = 200\nexport const CHANGE_STORE = 'CHANGE_STORE'\nexport const API = { SINGIN: '/auth/login' }\n\nexport const ACTIONS = {\n ADD_USER: 'add__user',\n REMOVE_USER: 'remove__user',\n TOOGLE_COLLAPSE: 'tg_cll',\n F5_LIST: 'f5_list',\n SET_ROUTES: 'set_routes',\n}\n\nexport const INAPP_NOTIFICATION_EMITTER = 'in_app_noti'\nexport const EVENT_ACCEPT_IMAGE_TYPES = '.png, .jpeg, .jpg'\nexport const HASH_MODAL = '#modal'\nexport const HASH_MODAL_CLOSE = '#close-modal'\nexport const DEFAULT_INBOX_ID = 'inbox'\nexport const DEFAULT_PARENT_INBOX_ID = 'parent'\nexport const FORMAT_DATE_INPUT = 'DD-MM-YYYY'\nexport const FORMAT_DATE_TIME_INPUT = 'DD-MM-YYYY HH:mm'\nexport const FORMAT_TIME_INPUT = 'HH:mm'\nexport const MAX_FILE_SIZE_MB = 3\nexport const REPORT_DATE_FORMAT = 'YYYY-MM-DD'\nexport const CURRENCY_UNIT = 'VND'\nexport const EMBED_YOUTUBE_LINK = '//www.youtube.com/embed/'\nexport const DEFAULT_COLOR_VALUE = '#ffffff'\nexport const outerRadius = 143 / 2\n\n// ----------------------------------------------------------------\n// Runtime config\n// App phải gọi initCoreConfig() trước khi dùng bất kỳ API nào\n// ----------------------------------------------------------------\nconst _config = {\n GATEWAY: \"\"\n}\n\n/**\n * Khởi tạo config runtime — gọi 1 lần trong index.js của app\n * @example\n * import { initCoreConfig } from \"@flast-erp/core/configs\"\n * initCoreConfig({ GATEWAY: process.env.REACT_APP_GATEWAY })\n */\nexport function initCoreConfig(config = {}) {\n const gateway = config.GATEWAY || _config.GATEWAY\n Object.assign(_config, {\n ...config,\n GATEWAY: gateway\n })\n}\n\nexport const getGateway = () => _config.GATEWAY\nexport const getConfig = () => ({ ..._config })\n"],"names":["QUERY_PARAMS_PROPERTY","outsideFilter","filters","extraFilters","VAT_PERCENT","HASH_POPUP","HASH_POPUP_CLOSE","STATUS_LEAD","CREATE_DATA","DO_NOT_MANUFACTORY","IS_CONTACT","CONTACT_LATER","KO_LIEN_HE_DUOC","THANH_CO_HOI","getStatusLead","option","getColorStatusLead","getTypeGroup","SUCCESS_API_CODE","NGHI_PHEP_META","id","name","OVERTIME_META","NGHI_PHEP_STATUS_WAITING","NGHI_PHEP_STATUS_CONFIRM","NGHI_PHEP_STATUS_REJECT","NGHI_PHEP_STATUS_DONE","APP_FOLLOW_STATUS_WAITING","APP_FOLLOW_STATUS_CONFIRM","APP_FOLLOW_STATUS_DONE","APP_FOLLOW_STATUS_REJECT","NGHI_PHEP_STATUS_TEXT","APP_STATUS_TEXT","ACTIVE_TYPES","value","text","color","textColor","IMAGE_TYPES","CHANNEL_SOURCE","CHANNEL_SOURCE_MAP_KEYS","mapKeys","CHANNEL_STATUS","CHANNEL_STATUS_MAP_KEYS","KPI_TYPE","KPI_TYPE_MAP_KEYS","PAYMENT_TYPE_CONST","label","PRIORITY_TYPE_TAGS","PRIORITY_TYPE_TAGS_MAP_KEYS","PRODUCT_STATUS","USER_STATUS","DEPARTMENT","CAR_WORK_TYPE","DEPARTMENT_MAP_KEYS_VALUE","PROJECT_STATUS_LIST","PROJECT_TASK_STATUS_LIST","MATERIAL_UNIT_TYPE","CAR_NOT_WORK_TYPE","REGISTER_WORK_TYPE","HOTEL_ROOM_PAY_TYPE_COMPANY","HOTEL_ROOM_PAY_TYPE_PERSIONAL","HOTEL_ROOM_PAY_TYPE","FLIGHT_WAY_TYPE_DEPARTURE","FLIGHT_WAY_TYPE_ARRIVAL","FLIGHT_WAY_TYPE","SUCCESS_CODE","CHANGE_STORE","API","SINGIN","ACTIONS","ADD_USER","REMOVE_USER","TOOGLE_COLLAPSE","F5_LIST","SET_ROUTES","INAPP_NOTIFICATION_EMITTER","EVENT_ACCEPT_IMAGE_TYPES","HASH_MODAL","HASH_MODAL_CLOSE","DEFAULT_INBOX_ID","DEFAULT_PARENT_INBOX_ID","FORMAT_DATE_INPUT","FORMAT_DATE_TIME_INPUT","FORMAT_TIME_INPUT","MAX_FILE_SIZE_MB","REPORT_DATE_FORMAT","CURRENCY_UNIT","EMBED_YOUTUBE_LINK","DEFAULT_COLOR_VALUE","outerRadius","_config","GATEWAY","initCoreConfig","config","arguments","length","undefined","gateway","Object","assign","_objectSpread","getGateway","getConfig"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("@babel/runtime/helpers/defineProperty"),t=require("lodash/mapKeys");const r={CREATE_DATA:0,DO_NOT_MANUFACTORY:1,IS_CONTACT:2,CONTACT_LATER:6,KO_LIEN_HE_DUOC:4,THANH_CO_HOI:7},o=[{id:0,name:"Chờ duyệt (Waiting For Approval)"},{id:1,name:"Không duyệt (Not Approved)"},{id:2,name:"Duyệt (Approved)"}],_=o,T=[{id:11,name:"Web"},{id:1,name:"Facebook"},{id:2,name:"Zalo"},{id:3,name:"Hotline"},{id:4,name:"Trực tiếp"},{id:5,name:"Email"},{id:6,name:"MKT0D"},{id:7,name:"Giới thiệu"},{id:8,name:"Cskh"},{id:9,name:"Partner"},{id:10,name:"Shopee"}],n=t(T,"id"),a=[{id:1,name:"Chưa liên hệ"},{id:2,name:"Đã liên hệ"}],A=t(a,"id"),s=[{text:"Doanh số",value:"doanhso"},{text:"SQL",value:"sql"},{text:"Trafic",value:"trafic"}],E=t(s,"value"),l=[{text:"Cao",value:"cao",color:"red"},{text:"Trung bình",value:"trungbinh",color:"purple"},{text:"Thấp",value:"thap",color:"green"}],p=t(l,"value"),O=[{value:1,name:"IT",color:"blue"},{value:2,name:"Marketing",color:"green"},{value:3,name:"Kinhdoanh",color:"purple"},{value:4,name:"Khác",color:"orange"}],i=t(O,"value"),c=[{value:1,text:"Công ty trả/company pay",color:"green"},{value:2,text:"Cá nhân tạm ứng/person pay",color:"red"}],u=[{value:1,text:"Chiều đi / Departure",color:"green"},{value:2,text:"Chiều về / Arrival",color:"red"}];function P(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,o)}return r}function S(t){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?P(Object(o),!0).forEach(function(r){e(t,r,o[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):P(Object(o)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))})}return t}const x={GATEWAY:""};exports.ACTIONS={ADD_USER:"add__user",REMOVE_USER:"remove__user",TOOGLE_COLLAPSE:"tg_cll",F5_LIST:"f5_list",SET_ROUTES:"set_routes"},exports.ACTIVE_TYPES=[{value:2,text:"Kích hoạt",color:"red",textColor:"#ff4d4f"},{value:1,text:"Ngưng",color:"green",textColor:"#52c41a"}],exports.API={SINGIN:"/auth/login"},exports.APP_FOLLOW_STATUS_CONFIRM=1,exports.APP_FOLLOW_STATUS_DONE=2,exports.APP_FOLLOW_STATUS_REJECT=3,exports.APP_FOLLOW_STATUS_WAITING=0,exports.APP_STATUS_TEXT=_,exports.CAR_NOT_WORK_TYPE=2,exports.CAR_WORK_TYPE=1,exports.CHANGE_STORE="CHANGE_STORE",exports.CHANNEL_SOURCE=T,exports.CHANNEL_SOURCE_MAP_KEYS=n,exports.CHANNEL_STATUS=a,exports.CHANNEL_STATUS_MAP_KEYS=A,exports.CURRENCY_UNIT="VND",exports.DEFAULT_COLOR_VALUE="#ffffff",exports.DEFAULT_INBOX_ID="inbox",exports.DEFAULT_PARENT_INBOX_ID="parent",exports.DEPARTMENT=O,exports.DEPARTMENT_MAP_KEYS_VALUE=i,exports.EMBED_YOUTUBE_LINK="//www.youtube.com/embed/",exports.EVENT_ACCEPT_IMAGE_TYPES=".png, .jpeg, .jpg",exports.FLIGHT_WAY_TYPE=u,exports.FLIGHT_WAY_TYPE_ARRIVAL=2,exports.FLIGHT_WAY_TYPE_DEPARTURE=1,exports.FORMAT_DATE_INPUT="DD-MM-YYYY",exports.FORMAT_DATE_TIME_INPUT="DD-MM-YYYY HH:mm",exports.FORMAT_TIME_INPUT="HH:mm",exports.HASH_MODAL="#modal",exports.HASH_MODAL_CLOSE="#close-modal",exports.HASH_POPUP="HASH_POPUP",exports.HASH_POPUP_CLOSE="HASH_POPUP_CLOSE",exports.HOTEL_ROOM_PAY_TYPE=c,exports.HOTEL_ROOM_PAY_TYPE_COMPANY=1,exports.HOTEL_ROOM_PAY_TYPE_PERSIONAL=2,exports.IMAGE_TYPES=["png","jpg","jpeg","gif","tif","tiff"],exports.INAPP_NOTIFICATION_EMITTER="in_app_noti",exports.KPI_TYPE=s,exports.KPI_TYPE_MAP_KEYS=E,exports.MATERIAL_UNIT_TYPE=[{value:"QUANTITY",name:"Số lượng"},{value:"DIMENSION",name:"Kích thước"},{value:"WEIGHT",name:"Trọng lượng"}],exports.MAX_FILE_SIZE_MB=3,exports.NGHI_PHEP_META=[{id:1,name:"Nghỉ phép năm (Annual Leave)"},{id:2,name:"Nghỉ không lương (Unpaid Absence)"},{id:3,name:"Nghỉ theo chính sách phúc lợi của công ty (Leave According To Company Welfare Policy)"},{id:4,name:"Nghỉ ốm hưởng BHXH (Sick Leave With Social Insurance)"},{id:5,name:"Lý do khác (Other Reasons)"}],exports.NGHI_PHEP_STATUS_CONFIRM=1,exports.NGHI_PHEP_STATUS_DONE=2,exports.NGHI_PHEP_STATUS_REJECT=1,exports.NGHI_PHEP_STATUS_TEXT=o,exports.NGHI_PHEP_STATUS_WAITING=0,exports.OVERTIME_META=[{id:1,name:"Làm thêm giờ"},{id:2,name:"Làm thêm vào ngày nghỉ"}],exports.PAYMENT_TYPE_CONST=[{label:"Tiền mặt",value:6},{label:"Chuyển khoản MBbank",value:1},{label:"Chuyển khoản TPbank",value:7},{label:"COD Viettel",value:2},{label:"Ví Momo",value:3},{label:"Ví Vnpay",value:4},{label:"Ncc thu hộ",value:5}],exports.PRIORITY_TYPE_TAGS=l,exports.PRIORITY_TYPE_TAGS_MAP_KEYS=p,exports.PRODUCT_STATUS=[{value:0,text:"Ngưng",color:"red"},{value:1,text:"Kích hoạt",color:"green"}],exports.PROJECT_STATUS_LIST=["Not Started","In Progress","Completed","On Hold"],exports.PROJECT_TASK_STATUS_LIST=["To Do","In Progress","Done","Cancelled"],exports.QUERY_PARAMS_PROPERTY={outsideFilter:"outsideFilter",filters:"filters",extraFilters:"extraFilters"},exports.REGISTER_WORK_TYPE=[{value:1,text:"Công tác có phí",color:"green"},{value:2,text:"Công tác không phí",color:"red"}],exports.REPORT_DATE_FORMAT="YYYY-MM-DD",exports.STATUS_LEAD=r,exports.SUCCESS_API_CODE=200,exports.SUCCESS_CODE=200,exports.USER_STATUS=[{value:0,text:"Ngưng",color:"red"},{value:1,text:"Kích hoạt",color:"green"}],exports.VAT_PERCENT=8,exports.getColorStatusLead=e=>{switch(e){case r.CREATE_DATA:return"#f50";case r.DO_NOT_MANUFACTORY:return"#2db7f5";case r.IS_CONTACT:return"#87d068";case r.CONTACT_LATER:return"#108ee9";case r.KO_LIEN_HE_DUOC:return"red";case r.THANH_CO_HOI:return"green";default:return"black"}},exports.getConfig=()=>S({},x),exports.getGateway=()=>x.GATEWAY,exports.getStatusLead=e=>{switch(e){case r.CREATE_DATA:return" Chưa liên hệ";case r.DO_NOT_MANUFACTORY:return"Không triển khai";case r.IS_CONTACT:return" Đang tư vấn";case r.CONTACT_LATER:return"Liên hệ sau";case r.KO_LIEN_HE_DUOC:return"Không liên hệ được";case r.THANH_CO_HOI:return"Thành cơ hội";default:return"N/A"}},exports.getTypeGroup=e=>{switch(e){case 1:return"Sale";case 2:return"Chăm sóc khách hàng";case 3:return"MarkeTing";case 4:return"Kho";default:return"N/A"}},exports.initCoreConfig=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=e.GATEWAY||x.GATEWAY;Object.assign(x,S(S({},e),{},{GATEWAY:t}))},exports.outerRadius=71.5;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/configs/constant.js","../../src/configs/localData.js","../../src/configs/index.js"],"sourcesContent":["/**************************************************************************/\n/* constant.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nexport const QUERY_PARAMS_PROPERTY = {\n outsideFilter: 'outsideFilter',\n filters: 'filters',\n extraFilters: 'extraFilters'\n}\n\nexport const MAX_FILE_SIZE_MB = 3;\nexport const VAT_PERCENT = 8;\nexport const HASH_MODAL = \"#modal\";\nexport const FORMAT_TIME_INPUT = 'HH:mm';\nexport const HASH_POPUP = \"HASH_POPUP\";\nexport const HASH_POPUP_CLOSE = \"HASH_POPUP_CLOSE\"\nexport const FORMAT_DATE_INPUT = 'DD-MM-YYYY';\nexport const CURRENCY_UNIT = 'VND';\n\nexport const STATUS_LEAD = {\n CREATE_DATA: 0,\n DO_NOT_MANUFACTORY: 1,\n IS_CONTACT: 2,\n CONTACT_LATER: 6,\n KO_LIEN_HE_DUOC: 4,\n THANH_CO_HOI: 7\n}\n\nexport const getStatusLead = (option) => {\n switch (option) {\n case STATUS_LEAD.CREATE_DATA:\n return ' Chưa liên hệ';\n case STATUS_LEAD.DO_NOT_MANUFACTORY:\n return 'Không triển khai';\n case STATUS_LEAD.IS_CONTACT:\n return ' Đang tư vấn';\n case STATUS_LEAD.CONTACT_LATER:\n return 'Liên hệ sau';\n case STATUS_LEAD.KO_LIEN_HE_DUOC:\n return 'Không liên hệ được';\n case STATUS_LEAD.THANH_CO_HOI:\n return 'Thành cơ hội';\n default:\n return 'N/A';\n }\n}\n\nexport const getColorStatusLead = (option) => {\n switch (option) {\n case STATUS_LEAD.CREATE_DATA:\n return '#f50';\n case STATUS_LEAD.DO_NOT_MANUFACTORY:\n return '#2db7f5';\n case STATUS_LEAD.IS_CONTACT:\n return '#87d068';\n case STATUS_LEAD.CONTACT_LATER:\n return '#108ee9';\n case STATUS_LEAD.KO_LIEN_HE_DUOC:\n return 'red';\n case STATUS_LEAD.THANH_CO_HOI:\n return 'green';\n default:\n return 'black';\n }\n}\n\nexport const getTypeGroup = (option) => {\n switch (option) {\n case 1:\n return 'Sale';\n case 2:\n return 'Chăm sóc khách hàng';\n case 3:\n return 'MarkeTing';\n case 4:\n return 'Kho';\n default:\n return 'N/A';\n }\n}\n\n/**************************************************************************/\n\nexport const SUCCESS_API_CODE = 200;\n\nexport const NGHI_PHEP_META = [\n { id: 1, name: 'Nghỉ phép năm (Annual Leave)' },\n { id: 2, name: 'Nghỉ không lương (Unpaid Absence)' },\n { id: 3, name: 'Nghỉ theo chính sách phúc lợi của công ty (Leave According To Company Welfare Policy)' },\n { id: 4, name: 'Nghỉ ốm hưởng BHXH (Sick Leave With Social Insurance)' },\n { id: 5, name: 'Lý do khác (Other Reasons)' },\n]\n\nexport const OVERTIME_META = [\n { id: 1, name: 'Làm thêm giờ' },\n { id: 2, name: 'Làm thêm vào ngày nghỉ' }\n]\n\nexport const NGHI_PHEP_STATUS_WAITING = 0;\nexport const NGHI_PHEP_STATUS_CONFIRM = 1;\nexport const NGHI_PHEP_STATUS_REJECT = 1;\nexport const NGHI_PHEP_STATUS_DONE = 2;\n\nexport const APP_FOLLOW_STATUS_WAITING = 0;\nexport const APP_FOLLOW_STATUS_CONFIRM = 1;\nexport const APP_FOLLOW_STATUS_DONE = 2;\nexport const APP_FOLLOW_STATUS_REJECT = 3;\n\nexport const NGHI_PHEP_STATUS_TEXT = [\n { id: NGHI_PHEP_STATUS_WAITING, name: 'Chờ duyệt (Waiting For Approval)' },\n { id: NGHI_PHEP_STATUS_REJECT, name: 'Không duyệt (Not Approved)' },\n { id: NGHI_PHEP_STATUS_DONE, name: 'Duyệt (Approved)' }\n]\n\nexport const APP_STATUS_TEXT = NGHI_PHEP_STATUS_TEXT;\n","/**************************************************************************/\n/* localData.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport mapKeys from 'lodash/mapKeys';\n\nexport const ACTIVE_TYPES = [\n {\n value: 2,\n text: 'Kích hoạt',\n color: 'red',\n textColor: \"#ff4d4f\"\n },\n {\n value: 1,\n text: 'Ngưng',\n color: 'green',\n textColor: \"#52c41a\"\n }\n];\n\nexport const IMAGE_TYPES = ['png', 'jpg', 'jpeg', 'gif', 'tif', 'tiff'];\n\nexport const CHANNEL_SOURCE = [\n { 'id': 11, 'name': 'Web' },\n { 'id': 1, 'name': 'Facebook' },\n { 'id': 2, 'name': 'Zalo' },\n { 'id': 3, 'name': 'Hotline' },\n { 'id': 4, 'name': 'Trực tiếp' },\n { 'id': 5, 'name': 'Email' },\n { 'id': 6, 'name': 'MKT0D' },\n { 'id': 7, 'name': 'Giới thiệu' },\n { 'id': 8, 'name': 'Cskh' },\n { 'id': 9, 'name': 'Partner' },\n { 'id': 10, 'name': 'Shopee' }\n];\nexport const CHANNEL_SOURCE_MAP_KEYS = mapKeys(CHANNEL_SOURCE, 'id');\n\nexport const CHANNEL_STATUS = [\n { 'id': 1, 'name': 'Chưa liên hệ' },\n { 'id': 2, 'name': 'Đã liên hệ' }\n];\nexport const CHANNEL_STATUS_MAP_KEYS = mapKeys(CHANNEL_STATUS, 'id');\n\nexport const KPI_TYPE = [\n { text: 'Doanh số', value: 'doanhso' },\n { text: 'SQL', value: 'sql' },\n { text: 'Trafic', value: 'trafic' }\n]\nexport const KPI_TYPE_MAP_KEYS = mapKeys(KPI_TYPE, 'value');\n\nexport const PAYMENT_TYPE_CONST = [\n { label: 'Tiền mặt', value: 6 },\n { label: 'Chuyển khoản MBbank', value: 1 },\n { label: 'Chuyển khoản TPbank', value: 7 },\n { label: 'COD Viettel', value: 2 },\n { label: 'Ví Momo', value: 3 },\n { label: 'Ví Vnpay', value: 4 },\n { label: 'Ncc thu hộ', value: 5 }\n];\n\nexport const PRIORITY_TYPE_TAGS = [\n { text: 'Cao', value: 'cao', color: 'red' },\n { text: 'Trung bình', value: 'trungbinh', color: 'purple' },\n { text: 'Thấp', value: 'thap', color: 'green' }\n];\nexport const PRIORITY_TYPE_TAGS_MAP_KEYS = mapKeys(\n PRIORITY_TYPE_TAGS,\n 'value',\n);\n\nexport const PRODUCT_STATUS = [\n { value: 0, text: 'Ngưng', color: 'red' },\n { value: 1, text: 'Kích hoạt', color: 'green' }\n];\n\nexport const USER_STATUS = [\n { value: 0, text: 'Ngưng', color: 'red' },\n { value: 1, text: 'Kích hoạt', color: 'green' }\n];\n\nexport const DEPARTMENT = [\n { value: 1, name: \"IT\", color: 'blue' },\n { value: 2, name: \"Marketing\", color: 'green' },\n { value: 3, name: \"Kinhdoanh\", color: 'purple' },\n { value: 4, name: \"Khác\", color: 'orange' }\n];\n\nexport const CAR_WORK_TYPE = 1;\nexport const DEPARTMENT_MAP_KEYS_VALUE = mapKeys(DEPARTMENT, 'value');\n\nexport const PROJECT_STATUS_LIST = ['Not Started', 'In Progress', 'Completed', 'On Hold'];\nexport const PROJECT_TASK_STATUS_LIST = ['To Do', 'In Progress', 'Done', 'Cancelled'];\n\nexport const MATERIAL_UNIT_TYPE = [\n { value: \"QUANTITY\", name: \"Số lượng\" },\n { value: \"DIMENSION\", name: \"Kích thước\" },\n { value: \"WEIGHT\", name: \"Trọng lượng\" }\n];\n\n\n\nexport const CAR_NOT_WORK_TYPE = 2;\nexport const REGISTER_WORK_TYPE = [\n { value: 1, text: 'Công tác có phí', color: 'green' },\n { value: 2, text: 'Công tác không phí', color: 'red' }\n];\n\nexport const HOTEL_ROOM_PAY_TYPE_COMPANY = 1;\nexport const HOTEL_ROOM_PAY_TYPE_PERSIONAL = 2;\nexport const HOTEL_ROOM_PAY_TYPE = [\n { value: HOTEL_ROOM_PAY_TYPE_COMPANY, text: 'Công ty trả/company pay', color: 'green' },\n { value: HOTEL_ROOM_PAY_TYPE_PERSIONAL, text: 'Cá nhân tạm ứng/person pay', color: 'red' }\n];\n\nexport const FLIGHT_WAY_TYPE_DEPARTURE = 1;\nexport const FLIGHT_WAY_TYPE_ARRIVAL = 2;\nexport const FLIGHT_WAY_TYPE = [\n { value: FLIGHT_WAY_TYPE_DEPARTURE, text: 'Chiều đi / Departure', color: 'green' },\n { value: FLIGHT_WAY_TYPE_ARRIVAL, text: 'Chiều về / Arrival', color: 'red' }\n];\n","\nexport * from \"./constant\"\nexport * from \"./localData\"\n\nexport const SUCCESS_CODE = 200\nexport const CHANGE_STORE = 'CHANGE_STORE'\nexport const API = { SINGIN: '/auth/login' }\n\nexport const ACTIONS = {\n ADD_USER: 'add__user',\n REMOVE_USER: 'remove__user',\n TOOGLE_COLLAPSE: 'tg_cll',\n F5_LIST: 'f5_list',\n SET_ROUTES: 'set_routes',\n}\n\nexport const INAPP_NOTIFICATION_EMITTER = 'in_app_noti'\nexport const EVENT_ACCEPT_IMAGE_TYPES = '.png, .jpeg, .jpg'\nexport const HASH_MODAL = '#modal'\nexport const HASH_MODAL_CLOSE = '#close-modal'\nexport const DEFAULT_INBOX_ID = 'inbox'\nexport const DEFAULT_PARENT_INBOX_ID = 'parent'\nexport const FORMAT_DATE_INPUT = 'DD-MM-YYYY'\nexport const FORMAT_DATE_TIME_INPUT = 'DD-MM-YYYY HH:mm'\nexport const FORMAT_TIME_INPUT = 'HH:mm'\nexport const MAX_FILE_SIZE_MB = 3\nexport const REPORT_DATE_FORMAT = 'YYYY-MM-DD'\nexport const CURRENCY_UNIT = 'VND'\nexport const EMBED_YOUTUBE_LINK = '//www.youtube.com/embed/'\nexport const DEFAULT_COLOR_VALUE = '#ffffff'\nexport const outerRadius = 143 / 2\n\n// ----------------------------------------------------------------\n// Runtime config\n// App phải gọi initCoreConfig() trước khi dùng bất kỳ API nào\n// ----------------------------------------------------------------\nconst _config = {\n GATEWAY: \"\"\n}\n\n/**\n * Khởi tạo config runtime — gọi 1 lần trong index.js của app\n * @example\n * import { initCoreConfig } from \"@flast-erp/core/configs\"\n * initCoreConfig({ GATEWAY: process.env.REACT_APP_GATEWAY })\n */\nexport function initCoreConfig(config = {}) {\n const gateway = config.GATEWAY || _config.GATEWAY\n Object.assign(_config, {\n ...config,\n GATEWAY: gateway\n })\n}\n\nexport const getGateway = () => _config.GATEWAY\nexport const getConfig = () => ({ ..._config })\n"],"names":["STATUS_LEAD","CREATE_DATA","DO_NOT_MANUFACTORY","IS_CONTACT","CONTACT_LATER","KO_LIEN_HE_DUOC","THANH_CO_HOI","NGHI_PHEP_STATUS_TEXT","id","name","APP_STATUS_TEXT","CHANNEL_SOURCE","CHANNEL_SOURCE_MAP_KEYS","mapKeys","CHANNEL_STATUS","CHANNEL_STATUS_MAP_KEYS","KPI_TYPE","text","value","KPI_TYPE_MAP_KEYS","PRIORITY_TYPE_TAGS","color","PRIORITY_TYPE_TAGS_MAP_KEYS","DEPARTMENT","DEPARTMENT_MAP_KEYS_VALUE","HOTEL_ROOM_PAY_TYPE","FLIGHT_WAY_TYPE","_config","GATEWAY","ADD_USER","REMOVE_USER","TOOGLE_COLLAPSE","F5_LIST","SET_ROUTES","textColor","SINGIN","label","outsideFilter","filters","extraFilters","option","getConfig","_objectSpread","getGateway","config","arguments","length","undefined","gateway","Object","assign"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import e,{useCallback as t,useEffect as r,useState as n,useContext as o}from"react";import i from"@babel/runtime/helpers/slicedToArray";import a from"@babel/runtime/helpers/defineProperty";import s from"lodash/mapKeys";import c from"@babel/runtime/helpers/objectWithoutProperties";import"react/jsx-runtime";import{isArray as l,pickBy as u,identity as d}from"lodash";import h from"axios";import{useLocation as p,useNavigate as m}from"react-router";import f from"lodash/unionBy";import{useLocation as g}from"react-router-dom";s([{id:11,name:"Web"},{id:1,name:"Facebook"},{id:2,name:"Zalo"},{id:3,name:"Hotline"},{id:4,name:"Trực tiếp"},{id:5,name:"Email"},{id:6,name:"MKT0D"},{id:7,name:"Giới thiệu"},{id:8,name:"Cskh"},{id:9,name:"Partner"},{id:10,name:"Shopee"}],"id");s([{id:1,name:"Chưa liên hệ"},{id:2,name:"Đã liên hệ"}],"id");s([{text:"Doanh số",value:"doanhso"},{text:"SQL",value:"sql"},{text:"Trafic",value:"trafic"}],"value");s([{text:"Cao",value:"cao",color:"red"},{text:"Trung bình",value:"trungbinh",color:"purple"},{text:"Thấp",value:"thap",color:"green"}],"value");s([{value:1,name:"IT",color:"blue"},{value:2,name:"Marketing",color:"green"},{value:3,name:"Kinhdoanh",color:"purple"},{value:4,name:"Khác",color:"orange"}],"value");const v="CHANGE_STORE",y="add__user",b="tg_cll",O="in_app_noti",P="",j=()=>P,w=["title"];function S(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function D(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?S(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):S(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}class E{constructor(){this.events={}}_getEventListByName(e){return void 0===this.events[e]&&(this.events[e]=new Set),this.events[e]}on(e,t){this._getEventListByName(e).add(t)}once(e,t){const r=this,n=function(){r.removeListener(e,n);for(var o=arguments.length,i=new Array(o),a=0;a<o;a++)i[a]=arguments[a];t.apply(r,i)};this.on(e,n)}emit(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];this._getEventListByName(e).forEach(function(e){e.apply(this,r)}.bind(this))}addEventListener(e,t){this.on(e,t)}removeListener(e,t){this._getEventListByName(e).delete(t)}}class k{static hasPermission(e,t){return"*"===e||(""===(e||"")||(0===e.length||t))}static generateRoutesFromConfigs(e,t){let r=[];return e.forEach(e=>{r=[...r,...this.setRoutes(e,t)]}),r}static setRoutes(e,t){let r=[...e.routes];return(e.settings||e.auth)&&(r=r.map(r=>{let n=e.auth?[...e.auth]:t||null;return n=r.auth?[...n,...r.auth]:n,D(D({},r),{},{settings:D(D({},e.settings),r.settings),auth:n})})),[...r]}}a(k,"EventEmitter",E);const C=new class extends E{constructor(){super(...arguments),a(this,"openDrawer",(e,t)=>{let r=t.title,n=c(t,w);return this.emit("#modal",{hash:e,title:r,data:n})})}normalSuccess(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.emit(O,{type:"success",content:e,title:t})}normalInfo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.emit(O,{type:"info",content:e,title:t})}normalError(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.emit(O,{type:"error",content:e,title:t})}modal(e,t){this.emit(O,{type:t,content:e,cate:"modal"})}changeStore(e){this.emit(v,e)}},L=e.createContext();function A(){const r=function(){const t=e.useContext(L);if(void 0===t)throw new Error("useCount must be used within a StoreProvider");return t}(),n=r.isCollapse,o=r.dispatch,i=t(()=>{o({type:b,data:!n})},[n,o]);return{isCollapseSidebar:n,toggleCollapse:i}}class T{static encodeQueryData(e){if(!e)return"";const t=[];for(let r in e)e[r]&&t.push(encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t.length>0?"?"+t.join("&"):""}static generateUrlGetParams(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return String(e).concat(this.encodeQueryData(t))}static httpRequest(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"GET",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";const o=j()+t;let i;return i="GET"===r?h.get(o+this.encodeQueryData(e)):h.post(o+this.encodeQueryData(n),e),i.then(e=>e.data).catch(e=>e)}static Get(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.httpRequest(t,e,"GET")}static async GetAsList(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=await this.httpRequest(t,e,"GET"),n=r.data;return 200===r.errorCode?n:[]}static Post(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.httpRequest(t,e,"POST",r)}static getJsonFromUrl(e){if(!e)return{};var t=e.substr(1),r={};return t.split("&").forEach(function(e){var t=e.split("=");r[t[0]]=decodeURIComponent(t[1])}),r}}function G(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function _(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?G(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):G(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}a(T,"uploadSigFile",e=>{let t=e.onSuccess,r=e.onError,n=e.file,o=e.onProgress,i=void 0===o?e=>e:o,a=e.onSuccessUploadServer,s=void 0===a?e=>e:a,c=e.api;const l=new FormData,u={headers:{"content-type":"multipart/form-data"},onUploadProgress:e=>{i({percent:e.loaded/e.total*100},n)}};l.append("files",n),h.post(j()+"/"+c,l,u).then(e=>{let r=e.data;const o=r.data,i=r.errorCode;t(n),200===i&&""!==((null==o?void 0:o.fileName)||"")&&s(o.fileName)}).catch(e=>{const t=new Error(e.message);r({event:t})})});const R=e=>{r(()=>{e()},[])},q=t=>{const n=e.useRef(t);n.current=t,r(()=>()=>{n.current()},[])},x=t=>{const r=e.useState(t),n=i(r,2),o=n[0],a=n[1];return[o,e=>a(t=>{const r="function"==typeof e?e(t):e;return r?_(_({},t),r):t})]},I=function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const o=e.useRef(!1);r(()=>()=>{o.current=!1},[]),r(()=>{if(o.current)return t();o.current=!0},n)};function F(e){let t=arguments.length>2?arguments[2]:void 0;r(()=>{let r=!0;return(async()=>{await e(r)})(),()=>{"function"==typeof t&&t(),r=!1}},arguments.length>1&&void 0!==arguments[1]?arguments[1]:[])}function M(e){let a=e.queryParams,s=e.onCompleted,c=void 0===s?e=>e:s,u=e.api;const d=n(!1),h=i(d,2),p=h[0],m=h[1],f=n({}),g=i(f,2),v=g[0],y=g[1],b=o(L).f5List,O=t(async e=>{if(p)return Promise.resolve({eMsg:"loading"});m(!0);const t=await T.Get("/"+u,e),r=t.data,n=t.errorCode;if(m(!1),200!==n)return Promise.resolve({eMsg:u+" not fetch success .!"});let o=r;return l(o)&&(o={embedded:o,page:{}}),y(o),c(o),o},[c,u,p]);r(()=>{O(a)},[a]);const P=t(async e=>{let t=e.filterField,r=e.defaultValue;!function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";console.log("[hooks.useData] "+t,e)}({queryParams:a,filterField:t,defaultValue:r},"fetchMore");const n=await T.Get("/"+u,{[t]:r}),o=n.data;if(200!==n.errorCode)return{embedded:[],page:{}};let i=o;return l(i)&&(i={embedded:i,page:{}}),i},[a,u]);return I(()=>{O(a)},[b]),{loading:p,data:v,refetch:O,fetchMore:P}}const U=()=>{const e=n(!1),t=i(e,2),r=t[0],o=t[1];return[async e=>{let t=e.api,r=e.input,n=e.update;o(!0);const i=await T.Post("/".concat(t),{},r),a=i.success,s=i.message,c=i.data;a?(o(!1),n&&n(c),C.normalSuccess(s)):C.normalError("Lỗi xoá nội dung .!")},r]},N=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"edit";const r=p().hash.match("".concat("#modal","/").concat(e,"/(.*)/").concat(t));return r&&r[1]},V=["apiPath"],B="[hooks.useGetList]";function Q(e){let a=e.queryParams,s=e.onData;const l=o(L).f5List,u=n(!0),d=i(u,2),h=d[0],p=d[1],m=n({embedded:[],page:{}}),f=i(m,2),g=f[0],v=f[1],y=t(e=>{const t=e.apiPath,r=c(e,V);p(!0),T.Get("/"+t,r).then(async e=>{let t=e.data,r=e.errorCode,n=e.message;200===r?(Promise.resolve(s(t)).then(v),p(!1)):console.error(B,n)}).catch(e=>{console.error(B,e),p(!1)})},[s]);return r(()=>{y(a)},[a]),I(()=>{(null==l?void 0:l.apiPath)===a.apiPath&&y(a)},[l,a]),{data:g,loading:h}}function H(e){let o=e.filter,a=e.uri,s=e.onBeforeProcessData;const c=n(!1),l=i(c,2),u=l[0],d=l[1],h=n({}),p=i(h,2),m=p[0],f=p[1],g=t(()=>{if(u)return Promise.reject("===== fetch api on loading .!");d(!0),a&&T.Get("/".concat(a),o).then(e=>{let t=e.data;return e.success&&f(t)}),d(!1)},[o,a,u]);return r(()=>{g()},[]),{loading:u,record:s?s(m):m,refetch:()=>g(o)}}const K=["resource"];function W(e){let a=e.queryParams,s=e.onData,l=void 0===s?e=>e:s;const u=o(L).f5List,d=n(!1),h=i(d,2),p=h[0],m=h[1],f=n({}),g=i(f,2),v=g[0],y=g[1],b=t(async e=>{if(p)return Promise.reject("===== fetch api on loading .!");const t=e.resource,r=c(e,K);if(!t)return Promise.reject("Call api without apiPath .!");m(!0),T.Get("/".concat(t),r).then(async e=>{let t=e.data;e.success&&Promise.resolve(l(t)).then(y),m(!1)}).catch(e=>{console.log("[hooks.useGetApi] ",e),m(!1)})},[l,p]);return r(()=>{b(a)},[]),I(()=>{b(a)},[u,a]),{data:v,loading:p}}function z(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function J(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?z(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):z(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}const Z=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return console.log("[hooks.useInfinite] "+t,e)},X=e=>{var t,r;let o=e.initialFilter,a=void 0===o?{}:o,s=e.useGetAllQuery,c=e.searchKey,l=void 0===c?"q":c,u=e.handleSelectedDefault;const d=n(a),h=i(d,2),p=h[0],m=h[1],g=n(!u),v=i(g,2),y=v[0],b=v[1],O=n(1),P=i(O,2),j=P[0],w=P[1],S=n([]),D=i(S,2),E=D[0],k=D[1],C=s({queryParams:p,onCompleted:e=>{var t;(k(null==e?void 0:e.embedded),y)||(b(!0),null==u||u(null==e||null===(t=e.embedded)||void 0===t||null===(t=t[0])||void 0===t?void 0:t.id))}}),L=C.loading,A=C.data,T=C.refetch,G=C.fetchMore;return{onLoadMore:()=>{var e,t;return Z("onLoadMore .!!"),j!==(null==A||null===(e=A.page)||void 0===e?void 0:e.totalPages)||L?T(J(J({},p),{},{page:(null==A||null===(t=A.page)||void 0===t?void 0:t.currentPage)+1})).then(e=>{var t;w(null==e||null===(t=e.page)||void 0===t?void 0:t.currentPage);const r=f(E,null==e?void 0:e.embedded,"id");k(r)}):Promise.resolve()},onSearch:e=>{m(J(J({},p),{},"q"===l?{page:1,q:(null==e?void 0:e.trim())||void 0}:{[l]:e,page:1}))},fetchMoreDefaultValue:(e,t)=>{var r;Z({filterField:e,defaultValue:t},"fetchMoreDefaultValue .!!"),null===(r=G({filterField:e,defaultValue:t}))||void 0===r||r.then(e=>{const t=f(E,null==e?void 0:e.embedded,"id");k(t)})},onSubmitFilter:e=>{m(J(J({},p),{},{page:1},e))},onClearFilter:()=>{m({page:1,limit:10})},enableWaypoint:!L&&(null==A||null===(t=A.embedded)||void 0===t?void 0:t.length)<(null==A||null===(r=A.page)||void 0===r?void 0:r.pageSize),loading:L,resourceData:E,refetch:T}};const Y=new class extends k.EventEmitter{constructor(){super(...arguments),a(this,"handleAuthentication",()=>{let e=this.getAccessToken();e?this.isAuthTokenValid(e)?this.emit("onAutoLogin",!0):(this.setSession(null),this.emit("onAutoLogout","access_token expired")):this.emit("onNoAccessToken")}),a(this,"signInWithToken",async()=>{try{const e=await T.Post("/auth/sign-with-token",{token:this.getAccessToken()}),t=e.data,r=e.success;this.setSession(r?t:null)}catch(e){this.emit("onAutoLogout","sign-in-with-token "+e.message)}return"done"}),a(this,"setSession",e=>{if(e){const t=e.jwtToken,r=e.user;localStorage.setItem("jwt_access_token",t),h.defaults.headers.common.Authorization="Bearer "+t,C.emit(v,{type:y,data:r})}else localStorage.removeItem("jwt_access_token"),delete h.defaults.headers.common.Authorization}),a(this,"logout",()=>{this.setSession(null)}),a(this,"isAuthTokenValid",e=>""!==(e||"")),a(this,"getAccessToken",()=>window.localStorage.getItem("jwt_access_token"))}init(){this.handleAuthentication()}};function $(){const e=n(!1),t=i(e,2),r=t[0],o=t[1];return{login:e=>{o(!0),T.Post("/auth/sign-in",e).then(e=>{let t=e.data;e.success&&Y.setSession(t),o(!1)}).catch(e=>{o(!1)})},loading:r}}const ee=e=>{const t=u(e,d);return delete t.resource,new URLSearchParams(t).toString()},te=()=>{const e=m();return(t,r)=>{return e({pathname:(n=t,n.startsWith("/")?n:"/".concat(n)),search:"?".concat(ee(r))});var n}};function re(){const e=g().search;return{get:t=>new URLSearchParams(e).get(t),getAll:()=>{const t=new URLSearchParams(e),r={};for(const e of t.entries()){var n=i(e,2);const t=n[0],o=n[1];r[t]=o}return r}}}function ne(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function oe(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ne(Object(r),!0).forEach(function(t){a(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ne(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function ie(){const e=n(),r=i(e,2),o=r[0],a=r[1],s=t(e=>{a(t=>oe(oe({},t),e))},[]);return{queryParamsOnHeader:null==o?void 0:o.queryParamsOnHeader,setQueryParamsOnHeader:s}}const ae=()=>{const e=n(),r=i(e,2),o=r[0],a=r[1],s=t(e=>{a({serviceId:e})},[]);return{serviceId:null==o?void 0:o.serviceId,setServiceId:s}};export{A as useCollapseSidebar,M as useData,U as useDeleteMutation,F as useEffectAsync,N as useGetIdFromHash,Q as useGetList,H as useGetOneQuery,W as useGetRestApi,X as useInfinite,$ as useLogin,R as useMount,te as useNavigateSearch,re as useQueryParams,ie as useQueryParamsOnHeader,ae as useServiceId,x as useSetState,q as useUnmount,I as useUpdateEffect};
2
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../src/configs/localData.js","../../src/configs/index.js","../../src/utils/FuseUtils.js","../../src/DataContext.js","../../src/hooks/useCollapseSidebar.js","../../src/utils/RequestUtils.js","../../src/hooks/MyHooks.js","../../src/hooks/useData.js","../../src/hooks/useDeleteMutation.js","../../src/hooks/useGetIdFromHash.js","../../src/configs/constant.js","../../src/hooks/useGetList.js","../../src/hooks/useGetOneQuery.js","../../src/hooks/useGetRestApi.js","../../src/hooks/useInfinite.js","../../src/utils/jwtService.js","../../src/hooks/useLogin.js","../../src/utils/tools.js","../../src/hooks/useNavigateSearch.js","../../src/hooks/useQueryParams.js","../../src/hooks/useQueryParamsOnHeader.js","../../src/hooks/useServiceId.js"],"sourcesContent":["/**************************************************************************/\n/* localData.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport mapKeys from 'lodash/mapKeys';\n\nexport const ACTIVE_TYPES = [\n {\n value: 2,\n text: 'Kích hoạt',\n color: 'red',\n textColor: \"#ff4d4f\"\n },\n {\n value: 1,\n text: 'Ngưng',\n color: 'green',\n textColor: \"#52c41a\"\n }\n];\n\nexport const IMAGE_TYPES = ['png', 'jpg', 'jpeg', 'gif', 'tif', 'tiff'];\n\nexport const CHANNEL_SOURCE = [\n { 'id': 11, 'name': 'Web' },\n { 'id': 1, 'name': 'Facebook' },\n { 'id': 2, 'name': 'Zalo' },\n { 'id': 3, 'name': 'Hotline' },\n { 'id': 4, 'name': 'Trực tiếp' },\n { 'id': 5, 'name': 'Email' },\n { 'id': 6, 'name': 'MKT0D' },\n { 'id': 7, 'name': 'Giới thiệu' },\n { 'id': 8, 'name': 'Cskh' },\n { 'id': 9, 'name': 'Partner' },\n { 'id': 10, 'name': 'Shopee' }\n];\nexport const CHANNEL_SOURCE_MAP_KEYS = mapKeys(CHANNEL_SOURCE, 'id');\n\nexport const CHANNEL_STATUS = [\n { 'id': 1, 'name': 'Chưa liên hệ' },\n { 'id': 2, 'name': 'Đã liên hệ' }\n];\nexport const CHANNEL_STATUS_MAP_KEYS = mapKeys(CHANNEL_STATUS, 'id');\n\nexport const KPI_TYPE = [\n { text: 'Doanh số', value: 'doanhso' },\n { text: 'SQL', value: 'sql' },\n { text: 'Trafic', value: 'trafic' }\n]\nexport const KPI_TYPE_MAP_KEYS = mapKeys(KPI_TYPE, 'value');\n\nexport const PAYMENT_TYPE_CONST = [\n { label: 'Tiền mặt', value: 6 },\n { label: 'Chuyển khoản MBbank', value: 1 },\n { label: 'Chuyển khoản TPbank', value: 7 },\n { label: 'COD Viettel', value: 2 },\n { label: 'Ví Momo', value: 3 },\n { label: 'Ví Vnpay', value: 4 },\n { label: 'Ncc thu hộ', value: 5 }\n];\n\nexport const PRIORITY_TYPE_TAGS = [\n { text: 'Cao', value: 'cao', color: 'red' },\n { text: 'Trung bình', value: 'trungbinh', color: 'purple' },\n { text: 'Thấp', value: 'thap', color: 'green' }\n];\nexport const PRIORITY_TYPE_TAGS_MAP_KEYS = mapKeys(\n PRIORITY_TYPE_TAGS,\n 'value',\n);\n\nexport const PRODUCT_STATUS = [\n { value: 0, text: 'Ngưng', color: 'red' },\n { value: 1, text: 'Kích hoạt', color: 'green' }\n];\n\nexport const USER_STATUS = [\n { value: 0, text: 'Ngưng', color: 'red' },\n { value: 1, text: 'Kích hoạt', color: 'green' }\n];\n\nexport const DEPARTMENT = [\n { value: 1, name: \"IT\", color: 'blue' },\n { value: 2, name: \"Marketing\", color: 'green' },\n { value: 3, name: \"Kinhdoanh\", color: 'purple' },\n { value: 4, name: \"Khác\", color: 'orange' }\n];\n\nexport const CAR_WORK_TYPE = 1;\nexport const DEPARTMENT_MAP_KEYS_VALUE = mapKeys(DEPARTMENT, 'value');\n\nexport const PROJECT_STATUS_LIST = ['Not Started', 'In Progress', 'Completed', 'On Hold'];\nexport const PROJECT_TASK_STATUS_LIST = ['To Do', 'In Progress', 'Done', 'Cancelled'];\n\nexport const MATERIAL_UNIT_TYPE = [\n { value: \"QUANTITY\", name: \"Số lượng\" },\n { value: \"DIMENSION\", name: \"Kích thước\" },\n { value: \"WEIGHT\", name: \"Trọng lượng\" }\n];\n\n\n\nexport const CAR_NOT_WORK_TYPE = 2;\nexport const REGISTER_WORK_TYPE = [\n { value: 1, text: 'Công tác có phí', color: 'green' },\n { value: 2, text: 'Công tác không phí', color: 'red' }\n];\n\nexport const HOTEL_ROOM_PAY_TYPE_COMPANY = 1;\nexport const HOTEL_ROOM_PAY_TYPE_PERSIONAL = 2;\nexport const HOTEL_ROOM_PAY_TYPE = [\n { value: HOTEL_ROOM_PAY_TYPE_COMPANY, text: 'Công ty trả/company pay', color: 'green' },\n { value: HOTEL_ROOM_PAY_TYPE_PERSIONAL, text: 'Cá nhân tạm ứng/person pay', color: 'red' }\n];\n\nexport const FLIGHT_WAY_TYPE_DEPARTURE = 1;\nexport const FLIGHT_WAY_TYPE_ARRIVAL = 2;\nexport const FLIGHT_WAY_TYPE = [\n { value: FLIGHT_WAY_TYPE_DEPARTURE, text: 'Chiều đi / Departure', color: 'green' },\n { value: FLIGHT_WAY_TYPE_ARRIVAL, text: 'Chiều về / Arrival', color: 'red' }\n];\n","\nexport * from \"./constant\"\nexport * from \"./localData\"\n\nexport const SUCCESS_CODE = 200\nexport const CHANGE_STORE = 'CHANGE_STORE'\nexport const API = { SINGIN: '/auth/login' }\n\nexport const ACTIONS = {\n ADD_USER: 'add__user',\n REMOVE_USER: 'remove__user',\n TOOGLE_COLLAPSE: 'tg_cll',\n F5_LIST: 'f5_list',\n SET_ROUTES: 'set_routes',\n}\n\nexport const INAPP_NOTIFICATION_EMITTER = 'in_app_noti'\nexport const EVENT_ACCEPT_IMAGE_TYPES = '.png, .jpeg, .jpg'\nexport const HASH_MODAL = '#modal'\nexport const HASH_MODAL_CLOSE = '#close-modal'\nexport const DEFAULT_INBOX_ID = 'inbox'\nexport const DEFAULT_PARENT_INBOX_ID = 'parent'\nexport const FORMAT_DATE_INPUT = 'DD-MM-YYYY'\nexport const FORMAT_DATE_TIME_INPUT = 'DD-MM-YYYY HH:mm'\nexport const FORMAT_TIME_INPUT = 'HH:mm'\nexport const MAX_FILE_SIZE_MB = 3\nexport const REPORT_DATE_FORMAT = 'YYYY-MM-DD'\nexport const CURRENCY_UNIT = 'VND'\nexport const EMBED_YOUTUBE_LINK = '//www.youtube.com/embed/'\nexport const DEFAULT_COLOR_VALUE = '#ffffff'\nexport const outerRadius = 143 / 2\n\n// ----------------------------------------------------------------\n// Runtime config\n// App phải gọi initCoreConfig() trước khi dùng bất kỳ API nào\n// ----------------------------------------------------------------\nconst _config = {\n GATEWAY: \"\"\n}\n\n/**\n * Khởi tạo config runtime — gọi 1 lần trong index.js của app\n * @example\n * import { initCoreConfig } from \"@flast-erp/core/configs\"\n * initCoreConfig({ GATEWAY: process.env.REACT_APP_GATEWAY })\n */\nexport function initCoreConfig(config = {}) {\n const gateway = config.GATEWAY || _config.GATEWAY\n Object.assign(_config, {\n ...config,\n GATEWAY: gateway\n })\n}\n\nexport const getGateway = () => _config.GATEWAY\nexport const getConfig = () => ({ ..._config })\n","/**************************************************************************/\n/* FuseUtils.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { CHANGE_STORE, HASH_MODAL, INAPP_NOTIFICATION_EMITTER } from '@/configs';\n\nclass EventEmitter {\n\n constructor() {\n this.events = {};\n }\n\n _getEventListByName(eventName) {\n if (typeof this.events[eventName] === 'undefined') {\n this.events[eventName] = new Set();\n }\n return this.events[eventName]\n }\n\n on(eventName, fn) {\n this._getEventListByName(eventName).add(fn);\n }\n\n once(eventName, fn) {\n const self = this;\n const onceFn = function (...args) {\n self.removeListener(eventName, onceFn);\n fn.apply(self, args);\n };\n this.on(eventName, onceFn);\n }\n\n emit(eventName, ...args) {\n this._getEventListByName(eventName).forEach(function (fn) {\n fn.apply(this, args);\n }.bind(this));\n }\n\n addEventListener(eventName, fn) {\n this.on(eventName, fn)\n }\n\n removeListener(eventName, fn) {\n this._getEventListByName(eventName).delete(fn);\n }\n}\n\nclass FuseUtils {\n\n static EventEmitter = EventEmitter;\n static hasPermission(authArr, enabled) {\n if (authArr === '*') {\n return true;\n } else if ((authArr || '') === '') {\n return true;\n } else if (authArr.length === 0) {\n return true;\n }\n return enabled;\n }\n\n static generateRoutesFromConfigs(configs, defaultAuth) {\n let allRoutes = [];\n configs.forEach((config) => {\n allRoutes = [\n ...allRoutes,\n ...this.setRoutes(config, defaultAuth)\n ]\n });\n return allRoutes;\n }\n\n static setRoutes(config, defaultAuth) {\n let routes = [...config.routes];\n if (config.settings || config.auth) {\n routes = routes.map((route) => {\n let auth = config.auth ? [...config.auth] : defaultAuth || null;\n auth = route.auth ? [...auth, ...route.auth] : auth;\n return {\n ...route,\n settings: { ...config.settings, ...route.settings },\n auth\n };\n });\n }\n return [...routes];\n }\n}\n\nclass AppEvent extends EventEmitter {\n normalSuccess(content, title = null) {\n this.emit(INAPP_NOTIFICATION_EMITTER, { type: 'success', content, title });\n }\n normalInfo(content, title = null) {\n this.emit(INAPP_NOTIFICATION_EMITTER, { type: 'info', content, title });\n }\n normalError(content, title = null) {\n this.emit(INAPP_NOTIFICATION_EMITTER, { type: 'error', content, title });\n }\n modal(content, type) {\n this.emit(INAPP_NOTIFICATION_EMITTER, { type, content, cate: 'modal' });\n }\n changeStore(data) {\n this.emit(CHANGE_STORE, data);\n }\n openDrawer = (route, { title, ...rest }) => this.emit(HASH_MODAL, {\n hash: route,\n title,\n data: rest\n });\n}\n\nexport const DRAWER_ROUTE = {\n CONTRACT_FORM: 'CONTRACT_FORM'\n}\n\nexport const InAppEvent = new AppEvent();\nexport default FuseUtils;\n","\r\nimport React, { useReducer, useCallback, useEffect } from 'react'\r\nimport { ACTIONS, CHANGE_STORE } from '@/configs';\r\nimport { InAppEvent } from '@/utils/FuseUtils';\r\n\r\nconst DataContext = React.createContext();\r\n\r\nconst actions = {\r\n [ACTIONS.ADD_USER]: 'user',\r\n [ACTIONS.REMOVE_USER]: 'user',\r\n [ACTIONS.TOOGLE_COLLAPSE]: 'isCollapse',\r\n [ACTIONS.F5_LIST]: 'f5List'\r\n};\r\n\r\nfunction storeReducer(state, action) {\r\n const { data, type } = action;\r\n const varible = actions[type];\r\n return !varible ? state : {\r\n ...state,\r\n [varible]: data\r\n }\r\n};\r\n\r\nexport const DataProvider = ({ children, initialRoutes = [] }) => {\r\n\r\n const [state, dispatch] = useReducer(storeReducer, {\r\n routes: initialRoutes, isCollapse: false\r\n })\r\n\r\n const value = { ...state, dispatch };\r\n const handleEventChange = useCallback(({ type, data }) => {\r\n dispatch({ type, data });\r\n }, [dispatch]);\r\n\r\n useEffect(() => {\r\n /* InAppEvent.emit(CHANGE_STORE, { type: 'user', data: data }); */\r\n InAppEvent.addEventListener(CHANGE_STORE, handleEventChange);\r\n return () => {\r\n InAppEvent.removeListener(CHANGE_STORE, handleEventChange);\r\n };\r\n }, [handleEventChange]);\r\n\r\n return (\r\n <DataContext.Provider value={value}>\r\n {children}\r\n </DataContext.Provider>\r\n )\r\n};\r\n\r\nexport function useStore() {\r\n const context = React.useContext(DataContext)\r\n if (context === undefined) {\r\n throw new Error('useCount must be used within a StoreProvider')\r\n }\r\n return context\r\n};\r\n\r\nexport default DataContext;\r\n","/**************************************************************************/\n/* useCollapseSidebar.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { useCallback } from 'react';\nimport { useStore } from '@/DataContext';\nimport { ACTIONS } from '@/configs';\n\nfunction useCollapseSidebar() {\n const { isCollapse, dispatch } = useStore();\n const toggleCollapse = useCallback(() => {\n dispatch({ type: ACTIONS.TOOGLE_COLLAPSE, data: !isCollapse });\n }, [isCollapse, dispatch]);\n\n return {\n isCollapseSidebar: isCollapse,\n toggleCollapse,\n };\n}\n\nexport default useCollapseSidebar;\n","/**************************************************************************/\n/* RequestUtils.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { getGateway, SUCCESS_CODE } from '@/configs';\nimport axios from 'axios';\n\nclass RequestUtils {\n\n\tstatic encodeQueryData(data) {\n\t\tif (!data) {\n\t\t\treturn '';\n\t\t}\n\t\tconst ret = [];\n\t\tfor (let d in data) {\n\t\t\tif (!data[d]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tret.push(encodeURIComponent(d) + '=' + encodeURIComponent(data[d]));\n\t\t}\n\t\treturn ret.length > 0 ? ('?' + ret.join('&')) : '';\n\t}\n\n\tstatic generateUrlGetParams(enpoint, params = {}) {\n\t\treturn String(enpoint).concat(this.encodeQueryData(params));\n\t}\n\n\tstatic httpRequest(input, service, method = 'GET', params = '') {\n\t\tconst _uri = getGateway() + service;\n\t\tlet getOrPost;\n\t\tif (method === 'GET') {\n\t\t\tgetOrPost = axios.get(_uri + this.encodeQueryData(input));\n\t\t} else {\n\t\t\tgetOrPost = axios.post(_uri + this.encodeQueryData(params), input);\n\t\t}\n\t\treturn getOrPost.then(({ data }) => {\n\t\t\treturn data;\n\t\t}).catch((response) => {\n\t\t\treturn response;\n\t\t});\n\t}\n\n\tstatic Get(service, input = {}) {\n\t\treturn this.httpRequest(input, service, 'GET');\n\t}\n\n\tstatic async GetAsList(service, input = {}) {\n\t\tlet { data, errorCode } = await this.httpRequest(input, service, 'GET');\n\t\treturn errorCode === 200 ? data : [];\n\t}\n\n\tstatic Post(service, input = {}, params = {}) {\n\t\treturn this.httpRequest(input, service, 'POST', params);\n\t}\n\n\tstatic getJsonFromUrl(url) {\n\t\tif (!url) return {};\n\t\tvar query = url.substr(1);\n\t\tvar result = {};\n\t\tquery.split(\"&\").forEach(function (part) {\n\t\t\tvar item = part.split(\"=\");\n\t\t\tresult[item[0]] = decodeURIComponent(item[1]);\n\t\t});\n\t\treturn result;\n\t}\n\n\tstatic uploadSigFile = ({\n\t\tonSuccess,\n\t\tonError,\n\t\tfile,\n\t\tonProgress = (progress) => progress,\n\t\tonSuccessUploadServer = (values) => values,\n\t\tapi\n\t}) => {\n\t\tconst fmData = new FormData();\n\t\tconst config = {\n\t\t\theaders: { \"content-type\": \"multipart/form-data\" },\n\t\t\tonUploadProgress: event => {\n\t\t\t\tonProgress({ percent: (event.loaded / event.total) * 100 }, file);\n\t\t\t}\n\t\t};\n\t\tfmData.append(\"files\", file);\n\t\taxios.post(getGateway() + \"/\" + api, fmData, config).then(({ data: ret }) => {\n\t\t\tconst { data, errorCode } = ret;\n\t\t\tonSuccess(file);\n\t\t\tif (errorCode === SUCCESS_CODE && (data?.fileName || '') !== '') {\n\t\t\t\tonSuccessUploadServer(data.fileName);\n\t\t\t}\n\t\t}).catch(err => {\n\t\t\tconst error = new Error(err.message);\n\t\t\tonError({ event: error });\n\t\t});\n\t}\n}\n\nexport default RequestUtils;\n","/**************************************************************************/\n/* MyHooks.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport React, { useEffect } from \"react\"\n\nexport const useMount = (callback) => {\n useEffect(() => {\n callback();\n /* eslint-disable-next-line */\n }, []);\n};\n\n/* useUnmount(() => console.log(\"useUnmount\")) */\nexport const useUnmount = (callback) => {\n const callbackRef = React.useRef(callback)\n callbackRef.current = callback\n useEffect(() => {\n return () => {\n callbackRef.current()\n }\n }, []);\n};\n\n/* const [count, setCount] = useSetState(initState) \n* setCount({ name: 'medium' })\n*/\nexport const useSetState = (initState) => {\n const [state, setState] = React.useState(initState)\n const setMergeState = (value) => setState((prevValue) => {\n const newValue = typeof value === 'function' ? value(prevValue) : value\n return newValue ? { ...prevValue, ...newValue } : prevValue\n })\n return [state, setMergeState]\n};\n\n/*\nconst [ count, setCount ] = React.useState(0)\nuseUpdateEffect(() => {\n console.log('Count changed', count)\n}, [ count ])\n*/\nexport const useUpdateEffect = function (effectCallback, deps = []) {\n\n const isFirstMount = React.useRef(false)\n useEffect(() => {\n return () => {\n isFirstMount.current = false\n }\n }, []);\n\n useEffect(() => {\n /* Không thực thi code cho lần đầu tiên watch */\n if (!isFirstMount.current) {\n isFirstMount.current = true\n } else {\n return effectCallback()\n }\n /* eslint-disable-next-line */\n }, deps);\n};\n\n/*\nuseEffectAsync(async () => {\n const books = await fetchBooks();\n setBooks(books);\n});\n*/\nexport function useEffectAsync(effect, inputs = [], callback) {\n useEffect(() => {\n let isMounted = true;\n const run = async () => {\n await effect(isMounted);\n };\n run();\n return () => {\n if(typeof callback === 'function') {\n callback();\n }\n isMounted = false; \n };\n /* eslint-disable-next-line */\n }, inputs);\n};\n","/**************************************************************************/\n/* useData.js \t\t\t\t\t\t*/\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { isArray } from \"lodash\";\nimport { useContext, useCallback, useEffect, useState } from \"react\";\nimport RequestUtils from \"@/utils/RequestUtils\";\nimport MyContext from '@/DataContext';\nimport { useUpdateEffect } from \"@/hooks/MyHooks\";\nimport { SUCCESS_CODE } from \"@/configs\";\n\nconst log = (val, key = '') => console.log('[hooks.useData] ' + key, val);\nfunction useData({\n\tqueryParams,\n\tonCompleted = values => values,\n\tapi\n}) {\n\n\tconst [loading, setLoading] = useState(false);\n\tconst [data, setData] = useState({});\n\tconst { f5List } = useContext(MyContext)\n\n\t/* refetch dành cho fetch các page tăng dần */\n\tconst refetch = useCallback(async (values) => {\n\t\tif (loading) {\n\t\t\treturn Promise.resolve({ eMsg: \"loading\" });\n\t\t}\n\t\tsetLoading(true);\n\t\tconst { data, errorCode } = await RequestUtils.Get('/' + api, values);\n\t\tsetLoading(false);\n\t\tif (errorCode !== SUCCESS_CODE) {\n\t\t\treturn Promise.resolve({ eMsg: api + \" not fetch success .!\" });\n\t\t}\n\t\tlet myData = data;\n\t\tif (isArray(myData)) {\n\t\t\tmyData = { embedded: myData, page: {} }\n\t\t}\n\t\tsetData(myData);\n\t\tonCompleted(myData);\n\t\treturn myData;\n\t}, [onCompleted, api, loading]);\n\n\tuseEffect(() => {\n\t\trefetch(queryParams);\n\t\t/* eslint-disable-next-line */\n\t}, [queryParams]);\n\n\t/* fetchMore dành cho search kết quả đã có săn của Form để có dữ liệu hiển thị trong form select */\n\tconst fetchMore = useCallback(async ({ filterField, defaultValue }) => {\n\t\tlog({ queryParams, filterField, defaultValue }, 'fetchMore');\n\t\tconst { data, errorCode } = await RequestUtils.Get('/' + api, { [filterField]: defaultValue });\n\t\tif (errorCode !== SUCCESS_CODE) {\n\t\t\treturn { embedded: [], page: {} }\n\t\t}\n\t\tlet myData = data;\n\t\tif (isArray(myData)) {\n\t\t\tmyData = { embedded: myData, page: {} }\n\t\t}\n\t\treturn myData;\n\t}, [queryParams, api]);\n\n\tuseUpdateEffect(() => {\n\t\trefetch(queryParams);\n\t}, [f5List]);\n\n\treturn {\n\t\tloading, data, refetch, fetchMore\n\t};\n}\n\nexport const useGetAllCustomersSimpleQuery = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'customer/find' });\n\nexport const useGetAllBusinessUsersQuery = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'user/list' });\n\nexport const useGetAllProductQuery = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'product/fetch' });\n\nexport const useGetAllProviderQuery = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'provider/fetch' });\n\nexport const useGetAllProvinceQuery = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'province/find' });\n\nexport const useGetAllStockQuery = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'warehouse/fetch-stock' });\n\nexport const useGetAllCategoryQuery = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'category/product/fetch' });\n\nexport const useGetCategoryPost = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'category/page/fetch' });\n\nexport const useGetShipStatusQuery = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'shipping/fetch-status' });\n\nexport const useGetOrderCodeQuery = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'order/fetch' });\n\nexport const useGetServiceQuery = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'service/list' });\n\nexport const useGetMaterialQuery = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'material/fetch' });\n\nexport const useGetAllFaq = ({ queryParams, onCompleted }) =>\n\tuseData({ queryParams, onCompleted, api: 'faq/fetch' });\n\nexport default useData;\n","/**************************************************************************/\n/* useDeleteMutation.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { useState } from \"react\";\nimport { InAppEvent } from \"@/utils/FuseUtils\";\nimport RequestUtils from \"@/utils/RequestUtils\";\n\nconst useDeleteMutation = () => {\n\n const [loading, setLoading] = useState(false);\n const deleteRecord = async ({ api, input, update }) => {\n setLoading(true);\n const { success, message, data } = await RequestUtils.Post('/'.concat(api), {}, input);\n if (!success) {\n InAppEvent.normalError(\"Lỗi xoá nội dung .!\");\n return;\n }\n setLoading(false);\n update && update(data);\n InAppEvent.normalSuccess(message);\n }\n\n return [\n deleteRecord,\n loading\n ]\n}\n\nexport default useDeleteMutation;","/**************************************************************************/\n/* useGetIdFromHash.js \t*/\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { HASH_MODAL } from '@/configs/constant';\nimport { useLocation } from 'react-router';\n\nconst useGetIdFromHash = (resource, suffix = 'edit') => {\n const { hash } = useLocation();\n const idFromHash = hash.match(`${HASH_MODAL}/${resource}/(.*)/${suffix}`);\n return idFromHash && idFromHash[1];\n};\n\nexport default useGetIdFromHash;\n","/**************************************************************************/\n/* constant.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nexport const QUERY_PARAMS_PROPERTY = {\n outsideFilter: 'outsideFilter',\n filters: 'filters',\n extraFilters: 'extraFilters'\n}\n\nexport const MAX_FILE_SIZE_MB = 3;\nexport const VAT_PERCENT = 8;\nexport const HASH_MODAL = \"#modal\";\nexport const FORMAT_TIME_INPUT = 'HH:mm';\nexport const HASH_POPUP = \"HASH_POPUP\";\nexport const HASH_POPUP_CLOSE = \"HASH_POPUP_CLOSE\"\nexport const FORMAT_DATE_INPUT = 'DD-MM-YYYY';\nexport const CURRENCY_UNIT = 'VND';\n\nexport const STATUS_LEAD = {\n CREATE_DATA: 0,\n DO_NOT_MANUFACTORY: 1,\n IS_CONTACT: 2,\n CONTACT_LATER: 6,\n KO_LIEN_HE_DUOC: 4,\n THANH_CO_HOI: 7\n}\n\nexport const getStatusLead = (option) => {\n switch (option) {\n case STATUS_LEAD.CREATE_DATA:\n return ' Chưa liên hệ';\n case STATUS_LEAD.DO_NOT_MANUFACTORY:\n return 'Không triển khai';\n case STATUS_LEAD.IS_CONTACT:\n return ' Đang tư vấn';\n case STATUS_LEAD.CONTACT_LATER:\n return 'Liên hệ sau';\n case STATUS_LEAD.KO_LIEN_HE_DUOC:\n return 'Không liên hệ được';\n case STATUS_LEAD.THANH_CO_HOI:\n return 'Thành cơ hội';\n default:\n return 'N/A';\n }\n}\n\nexport const getColorStatusLead = (option) => {\n switch (option) {\n case STATUS_LEAD.CREATE_DATA:\n return '#f50';\n case STATUS_LEAD.DO_NOT_MANUFACTORY:\n return '#2db7f5';\n case STATUS_LEAD.IS_CONTACT:\n return '#87d068';\n case STATUS_LEAD.CONTACT_LATER:\n return '#108ee9';\n case STATUS_LEAD.KO_LIEN_HE_DUOC:\n return 'red';\n case STATUS_LEAD.THANH_CO_HOI:\n return 'green';\n default:\n return 'black';\n }\n}\n\nexport const getTypeGroup = (option) => {\n switch (option) {\n case 1:\n return 'Sale';\n case 2:\n return 'Chăm sóc khách hàng';\n case 3:\n return 'MarkeTing';\n case 4:\n return 'Kho';\n default:\n return 'N/A';\n }\n}\n\n/**************************************************************************/\n\nexport const SUCCESS_API_CODE = 200;\n\nexport const NGHI_PHEP_META = [\n { id: 1, name: 'Nghỉ phép năm (Annual Leave)' },\n { id: 2, name: 'Nghỉ không lương (Unpaid Absence)' },\n { id: 3, name: 'Nghỉ theo chính sách phúc lợi của công ty (Leave According To Company Welfare Policy)' },\n { id: 4, name: 'Nghỉ ốm hưởng BHXH (Sick Leave With Social Insurance)' },\n { id: 5, name: 'Lý do khác (Other Reasons)' },\n]\n\nexport const OVERTIME_META = [\n { id: 1, name: 'Làm thêm giờ' },\n { id: 2, name: 'Làm thêm vào ngày nghỉ' }\n]\n\nexport const NGHI_PHEP_STATUS_WAITING = 0;\nexport const NGHI_PHEP_STATUS_CONFIRM = 1;\nexport const NGHI_PHEP_STATUS_REJECT = 1;\nexport const NGHI_PHEP_STATUS_DONE = 2;\n\nexport const APP_FOLLOW_STATUS_WAITING = 0;\nexport const APP_FOLLOW_STATUS_CONFIRM = 1;\nexport const APP_FOLLOW_STATUS_DONE = 2;\nexport const APP_FOLLOW_STATUS_REJECT = 3;\n\nexport const NGHI_PHEP_STATUS_TEXT = [\n { id: NGHI_PHEP_STATUS_WAITING, name: 'Chờ duyệt (Waiting For Approval)' },\n { id: NGHI_PHEP_STATUS_REJECT, name: 'Không duyệt (Not Approved)' },\n { id: NGHI_PHEP_STATUS_DONE, name: 'Duyệt (Approved)' }\n]\n\nexport const APP_STATUS_TEXT = NGHI_PHEP_STATUS_TEXT;\n","/**************************************************************************/\n/* useGetList.js \t\t\t\t*/\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { useCallback, useEffect, useState, useContext } from \"react\";\nimport RequestUtils from \"@/utils/RequestUtils\";\nimport MyContext from '@/DataContext';\nimport { useUpdateEffect } from \"@/hooks/MyHooks\";\n\nconst LOGGER_TAG = '[hooks.useGetList]';\nfunction useGetList({\n\tqueryParams: filter,\n\tonData\n}) {\n\n\tconst { f5List } = useContext(MyContext)\n\tconst [ loading, setLoading ] = useState(true);\n\tconst [ data, setData ] = useState({ embedded: [], page: {} });\n\n\tconst fetchResource = useCallback((values) => {\n\t\t\n\t\tconst { apiPath, ...params } = values;\n\t\tsetLoading(true);\n\n\t\tRequestUtils.Get('/' + apiPath, params).then(async ({ data, errorCode, message }) => {\n\t\t\tif (errorCode !== 200) {\n\t\t\t\tconsole.error(LOGGER_TAG, message);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tPromise.resolve(onData(data)).then(setData);\n\t\t\tsetLoading(false);\n\t\t}).catch(e => {\n\t\t\tconsole.error(LOGGER_TAG, e);\n\t\t\tsetLoading(false);\n\t\t});\n\t}, [ onData ]);\n\n\tuseEffect(() => {\n\t\tfetchResource(filter);\n\t\t/* eslint-disable-next-line */\n\t}, [filter]);\n\n\tuseUpdateEffect(() => {\n\t\tif (f5List?.apiPath === filter.apiPath) {\n\t\t\tfetchResource(filter);\n\t\t}\n\t}, [f5List, filter]);\n\n\treturn {\n\t\tdata,\n\t\tloading\n\t}\n};\n\nexport default useGetList;\n","/**************************************************************************/\n/* useGetOneQuery.js \t */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport RequestUtils from \"@/utils/RequestUtils\";\n\nfunction useGetOneQuery({ filter, uri, onBeforeProcessData }) {\n\n const [loading, setLoading] = useState(false);\n const [data, setData] = useState({});\n\n const fetchResource = useCallback(() => {\n if (loading) {\n return Promise.reject(\"===== fetch api on loading .!\");\n }\n setLoading(true);\n if (uri) {\n RequestUtils.Get('/'.concat(uri), filter).then(({ data, success }) => success && setData(data));\n }\n setLoading(false);\n }, [filter, uri, loading]);\n\n useEffect(() => {\n fetchResource();\n /* eslint-disable-next-line */\n }, []);\n\n return {\n loading,\n record: onBeforeProcessData ? onBeforeProcessData(data) : data,\n refetch: () => fetchResource(filter)\n };\n}\n\nexport default useGetOneQuery;\n","/**************************************************************************/\n/* useGetRestApi.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { useCallback, useContext, useEffect, useState } from \"react\";\nimport RequestUtils from \"@/utils/RequestUtils\";\nimport MyContext from '@/DataContext';\nimport { useUpdateEffect } from \"@/hooks/MyHooks\";\n\nfunction useGetRestApi({\n queryParams: filter,\n onData = (values) => values\n}) {\n\n const { f5List } = useContext(MyContext)\n const [loading, setLoading] = useState(false);\n const [data, setData] = useState({});\n const fetchResource = useCallback(async (values) => {\n if (loading) {\n return Promise.reject(\"===== fetch api on loading .!\");\n }\n const { resource, ...params } = values;\n if (!resource) {\n return Promise.reject(\"Call api without apiPath .!\");\n }\n setLoading(true);\n RequestUtils.Get(`/${resource}`, params).then(async ({ data, success }) => {\n if (success) {\n Promise.resolve(onData(data)).then(setData);\n }\n setLoading(false);\n }).catch(e => {\n console.log('[hooks.useGetApi] ', e);\n setLoading(false);\n });\n }, [onData, loading]);\n\n useEffect(() => {\n fetchResource(filter);\n /* eslint-disable-next-line */\n }, []);\n\n useUpdateEffect(() => {\n fetchResource(filter);\n }, [f5List, filter]);\n\n return {\n data,\n loading\n };\n}\n\nexport default useGetRestApi;\n","/**************************************************************************/\n/* useInfinite.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport unionBy from 'lodash/unionBy';\nimport { useState } from 'react';\n\nconst log = (value, key = '') => console.log('[hooks.useInfinite] ' + key, value);\n\nconst useInfinite = ({\n initialFilter = {},\n useGetAllQuery,\n searchKey = 'q',\n handleSelectedDefault\n}) => {\n\n const [queryParams, setQueryParams] = useState(initialFilter);\n const [isSetDefaultValue, isSetSetDefaultValue] = useState(!handleSelectedDefault);\n const [currentPage, setCurrentPage] = useState(1);\n const [resourceData, setResourceData] = useState([]);\n\n const { loading, data, refetch, fetchMore } = useGetAllQuery({\n queryParams,\n onCompleted: res => {\n setResourceData(res?.embedded);\n if (!isSetDefaultValue) {\n isSetSetDefaultValue(true);\n handleSelectedDefault?.(res?.embedded?.[0]?.id);\n }\n }\n });\n\n const onLoadMore = () => {\n log('onLoadMore .!!')\n if (currentPage === data?.page?.totalPages && !loading) {\n return Promise.resolve();\n }\n return refetch({\n ...queryParams,\n page: data?.page?.currentPage + 1\n }).then(data => {\n setCurrentPage(data?.page?.currentPage);\n const mergedData = unionBy(resourceData, data?.embedded, 'id');\n setResourceData(mergedData);\n });\n };\n\n const enableWaypoint = !loading && data?.embedded?.length < data?.page?.pageSize;\n const onSearch = (value) => {\n if (searchKey === 'q') {\n setQueryParams({ ...queryParams, page: 1, q: value?.trim() || undefined });\n } else {\n setQueryParams({ ...queryParams, [searchKey]: value, page: 1 });\n }\n };\n\n const onSubmitFilter = (values) => {\n setQueryParams({ ...queryParams, page: 1, ...values });\n };\n\n const onClearFilter = () => {\n setQueryParams({ page: 1, limit: 10 });\n };\n\n const fetchMoreDefaultValue = (filterField, defaultValue) => {\n log({ filterField, defaultValue }, 'fetchMoreDefaultValue .!!')\n fetchMore({ filterField, defaultValue })?.then(data => {\n const mergedData = unionBy(resourceData, data?.embedded, 'id');\n setResourceData(mergedData);\n });\n };\n\n return {\n onLoadMore,\n onSearch,\n fetchMoreDefaultValue,\n onSubmitFilter,\n onClearFilter,\n enableWaypoint,\n loading,\n resourceData,\n refetch\n };\n};\n\nexport default useInfinite;\n","/**************************************************************************/\n/* jwtService.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport FuseUtils, { InAppEvent } from './FuseUtils';\nimport axios from 'axios';\nimport { CHANGE_STORE, ACTIONS } from \"@/configs\";\nimport RequestUtils from './RequestUtils';\n\nclass jwtService extends FuseUtils.EventEmitter {\n\n init() {\n this.handleAuthentication();\n }\n\n handleAuthentication = () => {\n let access_token = this.getAccessToken();\n if (!access_token) {\n this.emit('onNoAccessToken');\n return;\n }\n\n if (this.isAuthTokenValid(access_token)) {\n this.emit('onAutoLogin', true);\n } else {\n this.setSession(null);\n this.emit('onAutoLogout', 'access_token expired');\n }\n };\n\n signInWithToken = async () => {\n try {\n const { data, success } = await RequestUtils.Post('/auth/sign-with-token', {\n token: this.getAccessToken()\n });\n this.setSession(success ? data : null);\n } catch (e) {\n this.emit('onAutoLogout', 'sign-in-with-token ' + e.message);\n }\n return \"done\";\n };\n\n setSession = (data) => {\n if (data) {\n const { jwtToken: token, user } = data;\n localStorage.setItem('jwt_access_token', token);\n axios.defaults.headers.common['Authorization'] = 'Bearer ' + token;\n InAppEvent.emit(CHANGE_STORE, { type: ACTIONS.ADD_USER, data: user });\n } else {\n localStorage.removeItem('jwt_access_token');\n delete axios.defaults.headers.common['Authorization'];\n }\n };\n\n logout = () => {\n this.setSession(null);\n };\n\n isAuthTokenValid = access_token => {\n return (access_token || '') !== '';\n };\n\n getAccessToken = () => {\n return window.localStorage.getItem('jwt_access_token');\n };\n}\n\nconst instance = new jwtService();\nexport default instance;\n","/**************************************************************************/\n/* useLogin.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { useState } from 'react';\nimport RequestUtils from '@/utils/RequestUtils';\nimport jwtService from '@/utils/jwtService';\n\n/* const log = (key, val) => console.log('[hooks.useLogin] ' + key, val); */\nfunction useLogin() {\n\n const [loading, setLoading] = useState(false);\n const login = (payload) => {\n setLoading(true);\n RequestUtils.Post('/auth/sign-in', payload).then(({ data, success }) => {\n if (success) {\n jwtService.setSession(data);\n }\n setLoading(false);\n }).catch(e => {\n setLoading(false);\n })\n };\n\n return { login, loading };\n}\n\nexport default useLogin;\n","\nimport { pickBy, identity } from 'lodash'\n\nexport const getQueryParamsFromUrl = (url) => {\n if (!url) {\n return {};\n }\n var query = url.substr(1);\n var result = {};\n query.split(\"&\").forEach(function (part) {\n var item = part.split(\"=\");\n if (item[1]) {\n result[item[0]] = decodeURIComponent(item[1]);\n }\n });\n return result;\n};\n\nexport const convertObjToSearchStr = (params) => {\n /* removes undefined, \"\", 0, null, ... */\n const newParams = pickBy(params, identity);\n delete newParams.resource;\n return new URLSearchParams(newParams).toString();\n};\n\nexport const onSearch = (data, inputValue) =>\n !!inputValue && data?.toLowerCase()?.search(inputValue?.toLowerCase()) !== -1;\n\nexport const getStaticImageUrl = (image) => {\n if (!image) {\n return '/uploads/image-default.png';\n }\n if (image.startsWith('http')) {\n return image;\n }\n\n return image.startsWith('/uploads') ? image : \"/uploads/\".concat(image);\n};\n\nexport const formatterInputNumber = (value) =>\n `${value}`\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.')\n .replace(/\\.(?=\\d{0,2}$)/g, ',');\n\nexport const parserInputNumber = (value) => {\n return value ? value.replace(/\\$\\s?|(\\.*)/g, '').replace(/(,{1})/g, '.') : '';\n};\n\nexport const formatPhoneNumber = (phone) => {\n if (!phone) {\n return '';\n }\n const cleaned = phone.replace(/\\D/g, '');\n const match = cleaned.match(/^(\\d{4})(\\d{3})(\\d{3})$/);\n if (match) {\n return `(${match[1]}) ${match[2]}-${match[3]}`;\n }\n return phone;\n}\n\nexport const calPriceOff = ({ discountValue, discountUnit, total }) => {\n if (!discountValue || !discountUnit) {\n return 0;\n }\n if (discountUnit === \"money\") {\n return discountValue;\n }\n return (discountValue * total) / 100;\n};\n\nexport const isPositiveInteger = (value) => {\n return typeof value === 'number' \n && Number.isInteger(value) \n && value > 0;\n};\n","/**************************************************************************/\n/* useNavigateSearch.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { useNavigate } from 'react-router';\nimport { convertObjToSearchStr } from '@/utils/tools';\n\nconst getPath = (name) => name.startsWith('/') ? name : '/'.concat(name);\n\nexport const useNavigateSearch = () => {\n const navigate = useNavigate();\n return (pathname, params) => navigate({\n pathname: getPath(pathname),\n search: `?${convertObjToSearchStr(params)}`\n });\n};\n","/**************************************************************************/\n/* useQueryParams.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { useLocation } from \"react-router-dom\";\n\nexport function useQueryParams() {\n\n const { search } = useLocation();\n\n const get = (key) => {\n return new URLSearchParams(search).get(key);\n };\n\n const getAll = () => {\n const params = new URLSearchParams(search);\n const result = {};\n for (const [key, value] of params.entries()) {\n result[key] = value;\n }\n return result;\n };\n\n return { get, getAll };\n}\n","/**************************************************************************/\n/* useQueryParamsOnHeader.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { useState, useCallback } from \"react\";\n\nfunction useQueryParamsOnHeader() {\n\n const [data, setData] = useState();\n const setQueryParamsOnHeader = useCallback((params) => {\n setData(pre => ({ ...pre, ...params }))\n }, []);\n\n return {\n queryParamsOnHeader: data?.queryParamsOnHeader,\n setQueryParamsOnHeader,\n };\n}\n\nexport default useQueryParamsOnHeader;\n","/**************************************************************************/\n/* useServiceId.js */\n/**************************************************************************/\n/* Tệp này là một phần của: */\n/* Open CDP */\n/* https://flast.vn */\n/**************************************************************************/\n/* Bản quyền (c) 2025 - này thuộc về các cộng tác viên Flast Solution */\n/* (xem AUTHORS.md). */\n/* Bản quyền (c) 2024-2025 Long Huu, Quang Duc, Hung Bui */\n/* */\n/* Bạn được quyền sử dụng phần mềm này miễn phí cho bất kỳ mục đích nào, */\n/* bao gồm sao chép, sửa đổi, phân phối, bán lại… */\n/* */\n/* Chỉ cần giữ nguyên thông tin bản quyền và nội dung giấy phép này trong */\n/* các bản sao. */\n/* */\n/* Đội ngũ phát triển mong rằng phần mềm được sử dụng đúng mục đích và */\n/* có trách nghiệm */\n/**************************************************************************/\n\nimport { useState, useCallback } from 'react';\n\nconst useServiceId = () => {\n\n const [data, setData] = useState();\n const setServiceId = useCallback((id) => {\n setData({ serviceId: id });\n }, []);\n\n return {\n serviceId: data?.serviceId,\n setServiceId,\n };\n};\n\nexport default useServiceId;\n"],"names":["mapKeys","id","name","text","value","color","CHANGE_STORE","ACTIONS","INAPP_NOTIFICATION_EMITTER","_config","getGateway","EventEmitter","constructor","this","events","_getEventListByName","eventName","Set","on","fn","add","once","self","onceFn","removeListener","_len","arguments","length","args","Array","_key","apply","emit","_len2","_key2","forEach","bind","addEventListener","delete","FuseUtils","hasPermission","authArr","enabled","generateRoutesFromConfigs","configs","defaultAuth","allRoutes","config","setRoutes","routes","settings","auth","map","route","_objectSpread","_defineProperty","InAppEvent","super","_ref","title","rest","_objectWithoutProperties","_excluded","hash","data","normalSuccess","content","undefined","type","normalInfo","normalError","modal","cate","changeStore","DataContext","React","createContext","useCollapseSidebar","_useStore","context","useContext","Error","useStore","isCollapse","dispatch","toggleCollapse","useCallback","isCollapseSidebar","RequestUtils","encodeQueryData","ret","d","push","encodeURIComponent","join","generateUrlGetParams","enpoint","params","String","concat","httpRequest","input","service","method","_uri","getOrPost","axios","get","post","then","catch","response","Get","GetAsList","_await$this$httpReque","errorCode","Post","getJsonFromUrl","url","query","substr","result","split","part","item","decodeURIComponent","_ref2","onSuccess","onError","file","_ref2$onProgress","onProgress","progress","_ref2$onSuccessUpload","onSuccessUploadServer","values","api","fmData","FormData","headers","onUploadProgress","event","percent","loaded","total","append","_ref3","fileName","err","error","message","useMount","callback","useEffect","useUnmount","callbackRef","useRef","current","useSetState","initState","_React$useState","useState","_React$useState2","_slicedToArray","state","setState","prevValue","newValue","useUpdateEffect","effectCallback","deps","isFirstMount","useEffectAsync","effect","isMounted","async","run","useData","queryParams","_ref$onCompleted","onCompleted","_useState","_useState2","loading","setLoading","_useState3","_useState4","setData","f5List","MyContext","refetch","Promise","resolve","eMsg","_await$RequestUtils$G","myData","isArray","embedded","page","fetchMore","filterField","defaultValue","val","key","console","log","_await$RequestUtils$G2","useDeleteMutation","update","_await$RequestUtils$P","success","useGetIdFromHash","resource","suffix","idFromHash","useLocation","match","LOGGER_TAG","useGetList","filter","onData","fetchResource","apiPath","e","useGetOneQuery","uri","onBeforeProcessData","reject","record","useGetRestApi","_ref$onData","useInfinite","_data$embedded","_data$page4","_ref$initialFilter","initialFilter","useGetAllQuery","_ref$searchKey","searchKey","handleSelectedDefault","setQueryParams","isSetDefaultValue","isSetSetDefaultValue","_useState5","_useState6","currentPage","setCurrentPage","_useState7","_useState8","resourceData","setResourceData","_useGetAllQuery","res","_res$embedded","onLoadMore","_data$page","_data$page2","totalPages","_data$page3","mergedData","unionBy","onSearch","q","trim","fetchMoreDefaultValue","_fetchMore","onSubmitFilter","onClearFilter","limit","enableWaypoint","pageSize","instance","access_token","getAccessToken","isAuthTokenValid","setSession","token","jwtToken","user","localStorage","setItem","defaults","common","removeItem","window","getItem","init","handleAuthentication","useLogin","login","payload","jwtService","convertObjToSearchStr","newParams","pickBy","identity","URLSearchParams","toString","useNavigateSearch","navigate","useNavigate","pathname","startsWith","search","useQueryParams","getAll","entries","useQueryParamsOnHeader","setQueryParamsOnHeader","pre","queryParamsOnHeader","useServiceId","setServiceId","serviceId"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("react"),t=require("@babel/runtime/helpers/slicedToArray"),r=require("@babel/runtime/helpers/defineProperty"),n=require("lodash/mapKeys"),o=require("@babel/runtime/helpers/objectWithoutProperties");require("react/jsx-runtime");var s=require("lodash"),a=require("axios"),i=require("react-router"),c=require("lodash/unionBy"),u=require("react-router-dom");n([{id:11,name:"Web"},{id:1,name:"Facebook"},{id:2,name:"Zalo"},{id:3,name:"Hotline"},{id:4,name:"Trực tiếp"},{id:5,name:"Email"},{id:6,name:"MKT0D"},{id:7,name:"Giới thiệu"},{id:8,name:"Cskh"},{id:9,name:"Partner"},{id:10,name:"Shopee"}],"id");n([{id:1,name:"Chưa liên hệ"},{id:2,name:"Đã liên hệ"}],"id");n([{text:"Doanh số",value:"doanhso"},{text:"SQL",value:"sql"},{text:"Trafic",value:"trafic"}],"value");n([{text:"Cao",value:"cao",color:"red"},{text:"Trung bình",value:"trungbinh",color:"purple"},{text:"Thấp",value:"thap",color:"green"}],"value");n([{value:1,name:"IT",color:"blue"},{value:2,name:"Marketing",color:"green"},{value:3,name:"Kinhdoanh",color:"purple"},{value:4,name:"Khác",color:"orange"}],"value");const l="CHANGE_STORE",d="add__user",h="tg_cll",p="in_app_noti",f="",g=()=>f,m=["title"];function v(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?v(Object(n),!0).forEach(function(t){r(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}class b{constructor(){this.events={}}_getEventListByName(e){return void 0===this.events[e]&&(this.events[e]=new Set),this.events[e]}on(e,t){this._getEventListByName(e).add(t)}once(e,t){const r=this,n=function(){r.removeListener(e,n);for(var o=arguments.length,s=new Array(o),a=0;a<o;a++)s[a]=arguments[a];t.apply(r,s)};this.on(e,n)}emit(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];this._getEventListByName(e).forEach(function(e){e.apply(this,r)}.bind(this))}addEventListener(e,t){this.on(e,t)}removeListener(e,t){this._getEventListByName(e).delete(t)}}class O{static hasPermission(e,t){return"*"===e||(""===(e||"")||(0===e.length||t))}static generateRoutesFromConfigs(e,t){let r=[];return e.forEach(e=>{r=[...r,...this.setRoutes(e,t)]}),r}static setRoutes(e,t){let r=[...e.routes];return(e.settings||e.auth)&&(r=r.map(r=>{let n=e.auth?[...e.auth]:t||null;return n=r.auth?[...n,...r.auth]:n,y(y({},r),{},{settings:y(y({},e.settings),r.settings),auth:n})})),[...r]}}r(O,"EventEmitter",b);const P=new class extends b{constructor(){super(...arguments),r(this,"openDrawer",(e,t)=>{let r=t.title,n=o(t,m);return this.emit("#modal",{hash:e,title:r,data:n})})}normalSuccess(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.emit(p,{type:"success",content:e,title:t})}normalInfo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.emit(p,{type:"info",content:e,title:t})}normalError(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.emit(p,{type:"error",content:e,title:t})}modal(e,t){this.emit(p,{type:t,content:e,cate:"modal"})}changeStore(e){this.emit(l,e)}},S=e.createContext();class j{static encodeQueryData(e){if(!e)return"";const t=[];for(let r in e)e[r]&&t.push(encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t.length>0?"?"+t.join("&"):""}static generateUrlGetParams(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return String(e).concat(this.encodeQueryData(t))}static httpRequest(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"GET",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";const o=g()+t;let s;return s="GET"===r?a.get(o+this.encodeQueryData(e)):a.post(o+this.encodeQueryData(n),e),s.then(e=>e.data).catch(e=>e)}static Get(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.httpRequest(t,e,"GET")}static async GetAsList(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=await this.httpRequest(t,e,"GET"),n=r.data;return 200===r.errorCode?n:[]}static Post(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.httpRequest(t,e,"POST",r)}static getJsonFromUrl(e){if(!e)return{};var t=e.substr(1),r={};return t.split("&").forEach(function(e){var t=e.split("=");r[t[0]]=decodeURIComponent(t[1])}),r}}function w(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function E(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?w(Object(n),!0).forEach(function(t){r(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):w(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}r(j,"uploadSigFile",e=>{let t=e.onSuccess,r=e.onError,n=e.file,o=e.onProgress,s=void 0===o?e=>e:o,i=e.onSuccessUploadServer,c=void 0===i?e=>e:i,u=e.api;const l=new FormData,d={headers:{"content-type":"multipart/form-data"},onUploadProgress:e=>{s({percent:e.loaded/e.total*100},n)}};l.append("files",n),a.post(g()+"/"+u,l,d).then(e=>{let r=e.data;const o=r.data,s=r.errorCode;t(n),200===s&&""!==((null==o?void 0:o.fileName)||"")&&c(o.fileName)}).catch(e=>{const t=new Error(e.message);r({event:t})})});const k=function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const n=e.useRef(!1);e.useEffect(()=>()=>{n.current=!1},[]),e.useEffect(()=>{if(n.current)return t();n.current=!0},r)};const x=["apiPath"],C="[hooks.useGetList]";const D=["resource"];function q(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function L(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?q(Object(n),!0).forEach(function(t){r(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):q(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const A=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return console.log("[hooks.useInfinite] "+t,e)};const G=new class extends O.EventEmitter{constructor(){super(...arguments),r(this,"handleAuthentication",()=>{let e=this.getAccessToken();e?this.isAuthTokenValid(e)?this.emit("onAutoLogin",!0):(this.setSession(null),this.emit("onAutoLogout","access_token expired")):this.emit("onNoAccessToken")}),r(this,"signInWithToken",async()=>{try{const e=await j.Post("/auth/sign-with-token",{token:this.getAccessToken()}),t=e.data,r=e.success;this.setSession(r?t:null)}catch(e){this.emit("onAutoLogout","sign-in-with-token "+e.message)}return"done"}),r(this,"setSession",e=>{if(e){const t=e.jwtToken,r=e.user;localStorage.setItem("jwt_access_token",t),a.defaults.headers.common.Authorization="Bearer "+t,P.emit(l,{type:d,data:r})}else localStorage.removeItem("jwt_access_token"),delete a.defaults.headers.common.Authorization}),r(this,"logout",()=>{this.setSession(null)}),r(this,"isAuthTokenValid",e=>""!==(e||"")),r(this,"getAccessToken",()=>window.localStorage.getItem("jwt_access_token"))}init(){this.handleAuthentication()}};const T=e=>{const t=s.pickBy(e,s.identity);return delete t.resource,new URLSearchParams(t).toString()};function I(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function R(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?I(Object(n),!0).forEach(function(t){r(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):I(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}exports.useCollapseSidebar=function(){const t=function(){const t=e.useContext(S);if(void 0===t)throw new Error("useCount must be used within a StoreProvider");return t}(),r=t.isCollapse,n=t.dispatch,o=e.useCallback(()=>{n({type:h,data:!r})},[r,n]);return{isCollapseSidebar:r,toggleCollapse:o}},exports.useData=function(r){let n=r.queryParams,o=r.onCompleted,a=void 0===o?e=>e:o,i=r.api;const c=e.useState(!1),u=t(c,2),l=u[0],d=u[1],h=e.useState({}),p=t(h,2),f=p[0],g=p[1],m=e.useContext(S).f5List,v=e.useCallback(async e=>{if(l)return Promise.resolve({eMsg:"loading"});d(!0);const t=await j.Get("/"+i,e),r=t.data,n=t.errorCode;if(d(!1),200!==n)return Promise.resolve({eMsg:i+" not fetch success .!"});let o=r;return s.isArray(o)&&(o={embedded:o,page:{}}),g(o),a(o),o},[a,i,l]);e.useEffect(()=>{v(n)},[n]);const y=e.useCallback(async e=>{let t=e.filterField,r=e.defaultValue;!function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";console.log("[hooks.useData] "+t,e)}({queryParams:n,filterField:t,defaultValue:r},"fetchMore");const o=await j.Get("/"+i,{[t]:r}),a=o.data;if(200!==o.errorCode)return{embedded:[],page:{}};let c=a;return s.isArray(c)&&(c={embedded:c,page:{}}),c},[n,i]);return k(()=>{v(n)},[m]),{loading:l,data:f,refetch:v,fetchMore:y}},exports.useDeleteMutation=()=>{const r=e.useState(!1),n=t(r,2),o=n[0],s=n[1];return[async e=>{let t=e.api,r=e.input,n=e.update;s(!0);const o=await j.Post("/".concat(t),{},r),a=o.success,i=o.message,c=o.data;a?(s(!1),n&&n(c),P.normalSuccess(i)):P.normalError("Lỗi xoá nội dung .!")},o]},exports.useEffectAsync=function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0;e.useEffect(()=>{let e=!0;return(async()=>{await t(e)})(),()=>{"function"==typeof n&&n(),e=!1}},r)},exports.useGetIdFromHash=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"edit";const r=i.useLocation().hash.match("".concat("#modal","/").concat(e,"/(.*)/").concat(t));return r&&r[1]},exports.useGetList=function(r){let n=r.queryParams,s=r.onData;const a=e.useContext(S).f5List,i=e.useState(!0),c=t(i,2),u=c[0],l=c[1],d=e.useState({embedded:[],page:{}}),h=t(d,2),p=h[0],f=h[1],g=e.useCallback(e=>{const t=e.apiPath,r=o(e,x);l(!0),j.Get("/"+t,r).then(async e=>{let t=e.data,r=e.errorCode,n=e.message;200===r?(Promise.resolve(s(t)).then(f),l(!1)):console.error(C,n)}).catch(e=>{console.error(C,e),l(!1)})},[s]);return e.useEffect(()=>{g(n)},[n]),k(()=>{(null==a?void 0:a.apiPath)===n.apiPath&&g(n)},[a,n]),{data:p,loading:u}},exports.useGetOneQuery=function(r){let n=r.filter,o=r.uri,s=r.onBeforeProcessData;const a=e.useState(!1),i=t(a,2),c=i[0],u=i[1],l=e.useState({}),d=t(l,2),h=d[0],p=d[1],f=e.useCallback(()=>{if(c)return Promise.reject("===== fetch api on loading .!");u(!0),o&&j.Get("/".concat(o),n).then(e=>{let t=e.data;return e.success&&p(t)}),u(!1)},[n,o,c]);return e.useEffect(()=>{f()},[]),{loading:c,record:s?s(h):h,refetch:()=>f(n)}},exports.useGetRestApi=function(r){let n=r.queryParams,s=r.onData,a=void 0===s?e=>e:s;const i=e.useContext(S).f5List,c=e.useState(!1),u=t(c,2),l=u[0],d=u[1],h=e.useState({}),p=t(h,2),f=p[0],g=p[1],m=e.useCallback(async e=>{if(l)return Promise.reject("===== fetch api on loading .!");const t=e.resource,r=o(e,D);if(!t)return Promise.reject("Call api without apiPath .!");d(!0),j.Get("/".concat(t),r).then(async e=>{let t=e.data;e.success&&Promise.resolve(a(t)).then(g),d(!1)}).catch(e=>{console.log("[hooks.useGetApi] ",e),d(!1)})},[a,l]);return e.useEffect(()=>{m(n)},[]),k(()=>{m(n)},[i,n]),{data:f,loading:l}},exports.useInfinite=r=>{var n,o;let s=r.initialFilter,a=void 0===s?{}:s,i=r.useGetAllQuery,u=r.searchKey,l=void 0===u?"q":u,d=r.handleSelectedDefault;const h=e.useState(a),p=t(h,2),f=p[0],g=p[1],m=e.useState(!d),v=t(m,2),y=v[0],b=v[1],O=e.useState(1),P=t(O,2),S=P[0],j=P[1],w=e.useState([]),E=t(w,2),k=E[0],x=E[1],C=i({queryParams:f,onCompleted:e=>{var t;(x(null==e?void 0:e.embedded),y)||(b(!0),null==d||d(null==e||null===(t=e.embedded)||void 0===t||null===(t=t[0])||void 0===t?void 0:t.id))}}),D=C.loading,q=C.data,G=C.refetch,T=C.fetchMore;return{onLoadMore:()=>{var e,t;return A("onLoadMore .!!"),S!==(null==q||null===(e=q.page)||void 0===e?void 0:e.totalPages)||D?G(L(L({},f),{},{page:(null==q||null===(t=q.page)||void 0===t?void 0:t.currentPage)+1})).then(e=>{var t;j(null==e||null===(t=e.page)||void 0===t?void 0:t.currentPage);const r=c(k,null==e?void 0:e.embedded,"id");x(r)}):Promise.resolve()},onSearch:e=>{g(L(L({},f),{},"q"===l?{page:1,q:(null==e?void 0:e.trim())||void 0}:{[l]:e,page:1}))},fetchMoreDefaultValue:(e,t)=>{var r;A({filterField:e,defaultValue:t},"fetchMoreDefaultValue .!!"),null===(r=T({filterField:e,defaultValue:t}))||void 0===r||r.then(e=>{const t=c(k,null==e?void 0:e.embedded,"id");x(t)})},onSubmitFilter:e=>{g(L(L({},f),{},{page:1},e))},onClearFilter:()=>{g({page:1,limit:10})},enableWaypoint:!D&&(null==q||null===(n=q.embedded)||void 0===n?void 0:n.length)<(null==q||null===(o=q.page)||void 0===o?void 0:o.pageSize),loading:D,resourceData:k,refetch:G}},exports.useLogin=function(){const r=e.useState(!1),n=t(r,2),o=n[0],s=n[1];return{login:e=>{s(!0),j.Post("/auth/sign-in",e).then(e=>{let t=e.data;e.success&&G.setSession(t),s(!1)}).catch(e=>{s(!1)})},loading:o}},exports.useMount=t=>{e.useEffect(()=>{t()},[])},exports.useNavigateSearch=()=>{const e=i.useNavigate();return(t,r)=>{return e({pathname:(n=t,n.startsWith("/")?n:"/".concat(n)),search:"?".concat(T(r))});var n}},exports.useQueryParams=function(){const e=u.useLocation().search;return{get:t=>new URLSearchParams(e).get(t),getAll:()=>{const r=new URLSearchParams(e),n={};for(const e of r.entries()){var o=t(e,2);const r=o[0],s=o[1];n[r]=s}return n}}},exports.useQueryParamsOnHeader=function(){const r=e.useState(),n=t(r,2),o=n[0],s=n[1],a=e.useCallback(e=>{s(t=>R(R({},t),e))},[]);return{queryParamsOnHeader:null==o?void 0:o.queryParamsOnHeader,setQueryParamsOnHeader:a}},exports.useServiceId=()=>{const r=e.useState(),n=t(r,2),o=n[0],s=n[1],a=e.useCallback(e=>{s({serviceId:e})},[]);return{serviceId:null==o?void 0:o.serviceId,setServiceId:a}},exports.useSetState=r=>{const n=e.useState(r),o=t(n,2),s=o[0],a=o[1];return[s,e=>a(t=>{const r="function"==typeof e?e(t):e;return r?E(E({},t),r):t})]},exports.useUnmount=t=>{const r=e.useRef(t);r.current=t,e.useEffect(()=>()=>{r.current()},[])},exports.useUpdateEffect=k;
2
+ //# sourceMappingURL=index.js.map