aq-fe-framework 0.1.154 → 0.1.156

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.
Files changed (253) hide show
  1. package/dist/{IAQModule-Cn6xUy-6.d.mts → IAQModule-XZYlbivW.d.mts} +1 -1
  2. package/dist/api/apiFactory.ts +46 -0
  3. package/dist/api/baseAxios.ts +22 -0
  4. package/dist/app/admin/(core)/core12196/page.tsx +13 -0
  5. package/dist/app/admin/(core)/core16209/page.tsx +13 -0
  6. package/dist/app/admin/(core)/core18256/page.tsx +12 -0
  7. package/dist/app/admin/(core)/core26965/page.tsx +13 -0
  8. package/dist/app/admin/(core)/core27311/page.tsx +13 -0
  9. package/dist/app/admin/(core)/core38677/page.tsx +13 -0
  10. package/dist/app/admin/(core)/core40207/page.tsx +13 -0
  11. package/dist/app/admin/(core)/core60524/page.tsx +11 -0
  12. package/dist/app/admin/(core)/core64229/page.tsx +12 -0
  13. package/dist/app/admin/(core)/core71678/page.tsx +11 -0
  14. package/dist/app/admin/(core)/core76318/page.tsx +13 -0
  15. package/dist/app/admin/(core)/core83092/page.tsx +13 -0
  16. package/dist/app/admin/[...slug]/page.tsx +7 -0
  17. package/dist/app/admin/error.tsx +42 -0
  18. package/dist/app/admin/layout.tsx +21 -0
  19. package/dist/app/admin/test/page.tsx +44 -0
  20. package/dist/app/auth/login/page.tsx +14 -0
  21. package/dist/app/globals.css +59 -0
  22. package/dist/app/layout.tsx +39 -0
  23. package/dist/app/page.tsx +18 -0
  24. package/dist/chunk-5U2JSHSJ.mjs +22 -0
  25. package/dist/chunk-7ZCOFATU.mjs +42 -0
  26. package/dist/chunk-FWCSY2DS.mjs +37 -0
  27. package/dist/chunk-JLT4BL7I.mjs +7634 -0
  28. package/dist/chunk-KWCUUD5Z.mjs +235 -0
  29. package/dist/chunk-Y3YGC5IH.mjs +21 -0
  30. package/dist/chunk-Z6OQG54Q.mjs +39 -0
  31. package/dist/components/Aceternity/BoxesBackground/MyBoxes.tsx +66 -0
  32. package/dist/components/Aceternity/BoxesBackground/MyBoxesBackground.tsx +31 -0
  33. package/dist/components/ActionIcons/ActionIcon/MyActionIcon.tsx +47 -0
  34. package/dist/components/ActionIcons/ActionIconCRUD/MyActionIconDelete.tsx +81 -0
  35. package/dist/components/ActionIcons/ActionIconCRUD/MyActionIconUpdate.tsx +68 -0
  36. package/dist/components/ActionIcons/ActionIconCheck/MyActionIconCheck.tsx +50 -0
  37. package/dist/components/ActionIcons/ActionIconDownloadPDF/MyActionIconDownloadPDF.tsx +13 -0
  38. package/dist/components/ActionIcons/ActionIconModal/MyActionIconModal.tsx +113 -0
  39. package/dist/components/ActionIcons/ActionIconUpload/MyActionIconUpload.tsx +19 -0
  40. package/dist/components/ActionIcons/ActionIconViewPdf/MyActionIconViewPDF.tsx +63 -0
  41. package/dist/components/ActionIcons/SwitchTheme/MySwitchTheme.tsx +36 -0
  42. package/dist/components/AppSpotlight/MyAppSpotlight.tsx +112 -0
  43. package/dist/components/Buttons/Anchor/MyAnchorViewPDF.tsx +46 -0
  44. package/dist/components/Buttons/Button/MyButton.tsx +90 -0
  45. package/dist/components/Buttons/ButtonCRUD/AQButtonCreateByImportFile.tsx +81 -0
  46. package/dist/components/Buttons/ButtonCRUD/AQButtonExportData.tsx +75 -0
  47. package/dist/components/Buttons/ButtonCRUD/MyButtonCreate.tsx +68 -0
  48. package/dist/components/Buttons/ButtonImport/MyButtonImport.tsx +29 -0
  49. package/dist/components/Buttons/ButtonImport/SelectFieldModal.tsx +100 -0
  50. package/dist/components/Buttons/ButtonImport/SelectFileModal.tsx +81 -0
  51. package/dist/components/Buttons/ButtonImport/useS_ButtonImport.ts +196 -0
  52. package/dist/components/Buttons/ButtonModal/AQSelectTableByOpenModal.tsx +71 -0
  53. package/dist/components/Buttons/ButtonModal/MyButtonModal.tsx +117 -0
  54. package/dist/components/Buttons/ButtonPrintPDF/MyButtonPrintPDF.tsx +37 -0
  55. package/dist/components/Buttons/ButtonPrintPDFTable/MyButtonPrintTablePDF.tsx +174 -0
  56. package/dist/components/Buttons/ButtonRouterBack/MyButtonRouterBack.tsx +29 -0
  57. package/dist/components/Buttons/ButtonViewPDF/MyButtonViewPDF.tsx +121 -0
  58. package/dist/components/Calendar/MyCalendar.tsx +118 -0
  59. package/dist/components/CenterFull/MyCenterFull.tsx +10 -0
  60. package/dist/components/Checkbox/MyCheckbox.tsx +9 -0
  61. package/dist/components/Combobox/Select/MySelect.tsx +12 -0
  62. package/dist/components/DataDisplay/Card/AQCard.tsx +49 -0
  63. package/dist/components/DataDisplay/CardInformation/MyCardInformation.tsx +77 -0
  64. package/dist/components/DataDisplay/DataTable/MyDataTable.tsx +184 -0
  65. package/dist/components/DataDisplay/IconText/MyIconText.tsx +17 -0
  66. package/dist/components/DataDisplay/KeyLabel/MyKeyLabel.tsx +15 -0
  67. package/dist/components/DataDisplay/NumberFormatter/MyNumberFormatter.tsx +9 -0
  68. package/dist/components/DataDisplay/StatCard/AQStatCard1.tsx +68 -0
  69. package/dist/components/FaviconSetter/FaviconSetter.tsx +33 -0
  70. package/dist/components/Inputs/DateInput/MyDateInput.tsx +11 -0
  71. package/dist/components/Inputs/Fieldset/MyFieldset.tsx +32 -0
  72. package/dist/components/Inputs/FileInput/MyFileInput.tsx +12 -0
  73. package/dist/components/Inputs/NumberInput/MyNumberInput.tsx +12 -0
  74. package/dist/components/Inputs/TextArea/MyTextArea.tsx +11 -0
  75. package/dist/components/Inputs/TextEditor/MyTextEditor.tsx +191 -0
  76. package/dist/components/Inputs/TextInput/MyTextInput.tsx +30 -0
  77. package/dist/components/Layouts/BasicAppShell/BasicAppShell.tsx +357 -0
  78. package/dist/components/Layouts/BasicAppShell/css.module.css +62 -0
  79. package/dist/components/Layouts/BasicAppShell/useS_BasicAppShell.ts +64 -0
  80. package/dist/components/Layouts/Container/MyContainer.tsx +16 -0
  81. package/dist/components/Layouts/FlexColumn/MyFlexColumn.tsx +14 -0
  82. package/dist/components/Layouts/FlexEnd/MyFlexEnd.tsx +14 -0
  83. package/dist/components/Layouts/FlexRow/MyFlexRow.tsx +14 -0
  84. package/dist/components/Layouts/HeaderMegaMenu/HeaderMegaMenu.tsx +147 -0
  85. package/dist/components/Layouts/HeaderMegaMenu/HeaderMegaMenuStore.ts +19 -0
  86. package/dist/components/Layouts/HeaderMegaMenu/css.module.css +50 -0
  87. package/dist/components/Layouts/HtmlWrapper/MyHtmlWrapper.tsx +29 -0
  88. package/dist/components/Layouts/PageContent/MyPageContent.tsx +67 -0
  89. package/dist/components/Layouts/Tab/MyTab.tsx +33 -0
  90. package/dist/components/Loaders/MyCardioLoader.tsx +12 -0
  91. package/dist/components/RESTAPIComponents/DataTableSelect/MyDataTableSelect.tsx +61 -0
  92. package/dist/components/RESTAPIComponents/SelectAPIGet/MySelectAPIGet.tsx +37 -0
  93. package/dist/components/ScheduleX/MyScheduleX.tsx +58 -0
  94. package/dist/components/Skeletons/SkeletonTable/MySkeletonTable.tsx +9 -0
  95. package/dist/components/index.mjs +143 -62
  96. package/dist/components/index.ts +62 -0
  97. package/dist/constants/array/daysOfWeek.ts +9 -0
  98. package/dist/constants/enum/ENUM_EMAILCONFIG.ts +6 -0
  99. package/dist/constants/enum/global.ts +26 -0
  100. package/dist/constants/object/color.ts +5 -0
  101. package/dist/constants/object/documentTypes.ts +8 -0
  102. package/dist/css.module-4ICLUKPO.module.css +107 -0
  103. package/dist/css.module-P45UW6UZ.module.css +4 -0
  104. package/dist/data/menuData.ts +31 -0
  105. package/dist/hooks/custom-hooks/useC_MutationAction.tsx +36 -0
  106. package/dist/hooks/index.d.mts +1 -1
  107. package/dist/hooks/index.mjs +11 -2
  108. package/dist/hooks/index.ts +2 -0
  109. package/dist/hooks/query/AQ/useQ_AQ_GetAQModule.ts +14 -0
  110. package/dist/interfaces/EmailConfig.ts +10 -0
  111. package/dist/interfaces/IAQModule.ts +21 -0
  112. package/dist/interfaces/base.ts +9 -0
  113. package/dist/interfaces/global-interface/IAQSSO.ts +15 -0
  114. package/dist/interfaces/global-interface/IAQSyncData.ts +9 -0
  115. package/dist/interfaces/global-interface/IAcademicYear.ts +12 -0
  116. package/dist/interfaces/global-interface/IChangePassWord.ts +8 -0
  117. package/dist/interfaces/global-interface/IComplaintProccess.ts +9 -0
  118. package/dist/interfaces/global-interface/ICreateAccount.ts +24 -0
  119. package/dist/interfaces/global-interface/IDocument.ts +25 -0
  120. package/dist/interfaces/global-interface/IDocumentAttribute.ts +12 -0
  121. package/dist/interfaces/global-interface/IEvent.ts +30 -0
  122. package/dist/interfaces/global-interface/IEventComplaint.ts +20 -0
  123. package/dist/interfaces/global-interface/IEventFillter.ts +14 -0
  124. package/dist/interfaces/global-interface/IFile.ts +8 -0
  125. package/dist/interfaces/global-interface/IImportStudentPaticipation.ts +8 -0
  126. package/dist/interfaces/global-interface/IPagePermission.ts +12 -0
  127. package/dist/interfaces/global-interface/IRolePermission.ts +7 -0
  128. package/dist/interfaces/global-interface/ISRMUserinfo.ts +35 -0
  129. package/dist/interfaces/global-interface/IScientificProfileProjectUser.ts +15 -0
  130. package/dist/interfaces/global-interface/IScientificProfileResearchGroup.ts +15 -0
  131. package/dist/interfaces/global-interface/IScientificProfileResearchGroupUser.ts +14 -0
  132. package/dist/interfaces/global-interface/IScientificProfileResearchProject.ts +21 -0
  133. package/dist/interfaces/global-interface/ISignIn.ts +7 -0
  134. package/dist/interfaces/global-interface/ISystemCatalogAcademicYear.ts +15 -0
  135. package/dist/interfaces/global-interface/ISystemCatalogDomainCategory.ts +11 -0
  136. package/dist/interfaces/global-interface/ISystemCatalogProjectLevelCategory.ts +11 -0
  137. package/dist/interfaces/global-interface/ISystemCatalogProjectTypeCategory.ts +11 -0
  138. package/dist/interfaces/global-interface/ISystemCatalogRoleActivity.ts +11 -0
  139. package/dist/interfaces/global-interface/ISystemCatalogTaskCategory.ts +11 -0
  140. package/dist/interfaces/global-interface/ISystemManagementAcademicHistory.ts +31 -0
  141. package/dist/interfaces/global-interface/ISystemManagementProfessionalWorkHistory.ts +14 -0
  142. package/dist/interfaces/global-interface/ISystemManagementPublishedScientificWork.ts +14 -0
  143. package/dist/interfaces/global-interface/ISystemManagementRoleGroup.ts +12 -0
  144. package/dist/interfaces/global-interface/ISystemManagementRoleGroupMenuPermission.ts +18 -0
  145. package/dist/interfaces/global-interface/ISystemManagementScientificResearchProject.ts +16 -0
  146. package/dist/interfaces/global-interface/ISystemManagementUserMenuPermission.ts +18 -0
  147. package/dist/interfaces/global-interface/IUpdateAccount.ts +15 -0
  148. package/dist/interfaces/global-interface/IUser.ts +21 -0
  149. package/dist/interfaces/global-interface/IUserPermission.ts +7 -0
  150. package/dist/lib/utils.ts +6 -0
  151. package/dist/modules-features/admin/core/MainDashboard/BarChart_CourseStatus.tsx +87 -0
  152. package/dist/modules-features/admin/core/MainDashboard/BarChart_ExamStatus.tsx +65 -0
  153. package/dist/modules-features/admin/core/MainDashboard/BarChart_RevenueByAcademicYear.tsx +82 -0
  154. package/dist/modules-features/admin/core/MainDashboard/BarChart_StudentStatusIn30Days.tsx +67 -0
  155. package/dist/modules-features/admin/core/MainDashboard/HBarChart_CourseDropOutPercentage.tsx +77 -0
  156. package/dist/modules-features/admin/core/MainDashboard/HBarChart_CourseProgressPercentage.tsx +77 -0
  157. package/dist/modules-features/admin/core/MainDashboard/LineChart_RevenueIn12Months.tsx +78 -0
  158. package/dist/modules-features/admin/core/MainDashboard/LineChart_TotalRevenueByDiscountIn3Months.tsx +69 -0
  159. package/dist/modules-features/admin/core/MainDashboard/LineChart_TotalRevenueByVoucherIn3Months.tsx +69 -0
  160. package/dist/modules-features/admin/core/MainDashboard/LineChart_TotalStudentIn12Months.tsx +64 -0
  161. package/dist/modules-features/admin/core/MainDashboard/ViewDiscountStat.tsx +311 -0
  162. package/dist/modules-features/admin/core/MainDashboard/ViewVoucherStat.tsx +311 -0
  163. package/dist/modules-features/admin/core/core12196/F_core12196.tsx +20 -0
  164. package/dist/modules-features/admin/core/core12196/F_core12196_Create.tsx +101 -0
  165. package/dist/modules-features/admin/core/core12196/F_core12196_Delete.tsx +19 -0
  166. package/dist/modules-features/admin/core/core12196/F_core12196_Read.tsx +165 -0
  167. package/dist/modules-features/admin/core/core12196/F_core12196_Update.tsx +112 -0
  168. package/dist/modules-features/admin/core/core16209/F_core16209.tsx +108 -0
  169. package/dist/modules-features/admin/core/core16209/F_core16209_Create.tsx +112 -0
  170. package/dist/modules-features/admin/core/core16209/F_core16209_Delete.tsx +17 -0
  171. package/dist/modules-features/admin/core/core16209/F_core16209_Update.tsx +114 -0
  172. package/dist/modules-features/admin/core/core18256/F_core18256.tsx +29 -0
  173. package/dist/modules-features/admin/core/core18256/F_core18256_Create.tsx +34 -0
  174. package/dist/modules-features/admin/core/core18256/F_core18256_Delete.tsx +14 -0
  175. package/dist/modules-features/admin/core/core18256/F_core18256_Read.tsx +59 -0
  176. package/dist/modules-features/admin/core/core18256/F_core18256_Select.tsx +40 -0
  177. package/dist/modules-features/admin/core/core18256/F_core18256_Update.tsx +22 -0
  178. package/dist/modules-features/admin/core/core26965/F_core26965.tsx +17 -0
  179. package/dist/modules-features/admin/core/core26965/F_core26965_Create.tsx +106 -0
  180. package/dist/modules-features/admin/core/core26965/F_core26965_Delete.tsx +19 -0
  181. package/dist/modules-features/admin/core/core26965/F_core26965_Read.tsx +165 -0
  182. package/dist/modules-features/admin/core/core26965/F_core26965_Update.tsx +112 -0
  183. package/dist/modules-features/admin/core/core27311/F_core27311.tsx +21 -0
  184. package/dist/modules-features/admin/core/core27311/F_core27311_Create.tsx +109 -0
  185. package/dist/modules-features/admin/core/core27311/F_core27311_Delete.tsx +19 -0
  186. package/dist/modules-features/admin/core/core27311/F_core27311_Read.tsx +165 -0
  187. package/dist/modules-features/admin/core/core27311/F_core27311_Update.tsx +113 -0
  188. package/dist/modules-features/admin/core/core35923/F_core35923.tsx +46 -0
  189. package/dist/modules-features/admin/core/core38677/F_core38677.tsx +28 -0
  190. package/dist/modules-features/admin/core/core38677/F_core38677_ReadUser.tsx +79 -0
  191. package/dist/modules-features/admin/core/core38677/F_core38677_Save.tsx +52 -0
  192. package/dist/modules-features/admin/core/core38677/F_core38677_ViewMenuPermissions.tsx +264 -0
  193. package/dist/modules-features/admin/core/core40207/F_core40207.tsx +9 -0
  194. package/dist/modules-features/admin/core/core40207/F_core40207_Create.tsx +81 -0
  195. package/dist/modules-features/admin/core/core40207/F_core40207_Delete.tsx +17 -0
  196. package/dist/modules-features/admin/core/core40207/F_core40207_Read.tsx +98 -0
  197. package/dist/modules-features/admin/core/core40207/F_core40207_Update.tsx +83 -0
  198. package/dist/modules-features/admin/core/core47643/F_core47643.tsx +10 -0
  199. package/dist/modules-features/admin/core/core47643/F_core47643_Delete.tsx +13 -0
  200. package/dist/modules-features/admin/core/core47643/F_core47643_Form.tsx +34 -0
  201. package/dist/modules-features/admin/core/core47643/F_core47643_Read.tsx +57 -0
  202. package/dist/modules-features/admin/core/core60524/F_core60524.tsx +13 -0
  203. package/dist/modules-features/admin/core/core60524/F_core60524_Form.tsx +111 -0
  204. package/dist/modules-features/admin/core/core60524/F_core60524_Save.tsx +56 -0
  205. package/dist/modules-features/admin/core/core60524/useS_core60524.ts +16 -0
  206. package/dist/modules-features/admin/core/core64229/F_core64229.tsx +7 -0
  207. package/dist/modules-features/admin/core/core64229/F_core64229_Delete.tsx +21 -0
  208. package/dist/modules-features/admin/core/core64229/F_core64229_Form.tsx +95 -0
  209. package/dist/modules-features/admin/core/core64229/F_core64229_Read.tsx +67 -0
  210. package/dist/modules-features/admin/core/core71678/F_core71678.tsx +8 -0
  211. package/dist/modules-features/admin/core/core71678/F_core71678_ChangePermission.tsx +117 -0
  212. package/dist/modules-features/admin/core/core71678/F_core71678_Create.tsx +61 -0
  213. package/dist/modules-features/admin/core/core71678/F_core71678_Delete.tsx +16 -0
  214. package/dist/modules-features/admin/core/core71678/F_core71678_Read.tsx +92 -0
  215. package/dist/modules-features/admin/core/core71678/F_core71678_Update.tsx +49 -0
  216. package/dist/modules-features/admin/core/core76318/F_core76318.tsx +9 -0
  217. package/dist/modules-features/admin/core/core76318/F_core76318_Create.tsx +89 -0
  218. package/dist/modules-features/admin/core/core76318/F_core76318_Delete.tsx +17 -0
  219. package/dist/modules-features/admin/core/core76318/F_core76318_Read.tsx +104 -0
  220. package/dist/modules-features/admin/core/core76318/F_core76318_Update.tsx +89 -0
  221. package/dist/modules-features/admin/core/core83092/F_core83092.tsx +27 -0
  222. package/dist/modules-features/admin/core/core83092/F_core83092_ReadUser.tsx +85 -0
  223. package/dist/modules-features/admin/core/core83092/F_core83092_Save.tsx +52 -0
  224. package/dist/modules-features/admin/core/core83092/F_core83092_ViewMenuPermissions.tsx +263 -0
  225. package/dist/modules-features/admin/core/core83092/useS_core83092.tsx +70 -0
  226. package/dist/modules-features/authenticate/F_authenticate_Login/F_authenticate_Login.tsx +154 -0
  227. package/dist/modules-features/authenticate/F_authenticate_Login/css.module.css +4 -0
  228. package/dist/modules-features/authenticate/F_authenticate_Logout.tsx +22 -0
  229. package/dist/modules-features/authenticate/F_authenticate_SplashPage.tsx +21 -0
  230. package/dist/modules-features/authenticate/useS_authenticate.ts +23 -0
  231. package/dist/modules-features/index.d.mts +1 -1
  232. package/dist/modules-features/index.mjs +4053 -79
  233. package/dist/modules-features/index.ts +79 -0
  234. package/dist/providers/MyMantineProvider.tsx +140 -0
  235. package/dist/providers/MyReactQueryProvider.tsx +24 -0
  236. package/dist/providers/Provider.tsx +13 -0
  237. package/dist/providers/mantine.module.css +21 -0
  238. package/dist/stores/CreateGenericStore.ts +23 -0
  239. package/dist/stores/index.mjs +7 -1
  240. package/dist/stores/index.ts +1 -0
  241. package/dist/types/types.ts +16 -0
  242. package/dist/utils/index.mjs +45 -9
  243. package/dist/utils/index.ts +9 -0
  244. package/dist/utils/utils_converter.ts +39 -0
  245. package/dist/utils/utils_currency.ts +5 -0
  246. package/dist/utils/utils_date.ts +34 -0
  247. package/dist/utils/utils_excel.ts +128 -0
  248. package/dist/utils/utils_file.ts +61 -0
  249. package/dist/utils/utils_notification.ts +46 -0
  250. package/dist/utils/utils_pdf.ts +21 -0
  251. package/dist/utils/utils_time.ts +15 -0
  252. package/dist/utils/utils_validateForm.ts +9 -0
  253. package/package.json +1 -1
@@ -0,0 +1,79 @@
1
+ export * from './admin/core/core12196/F_core12196';
2
+ export * from './admin/core/core12196/F_core12196_Create';
3
+ export * from './admin/core/core12196/F_core12196_Delete';
4
+ export * from './admin/core/core12196/F_core12196_Read';
5
+ export * from './admin/core/core12196/F_core12196_Update';
6
+ export * from './admin/core/core16209/F_core16209';
7
+ export * from './admin/core/core16209/F_core16209_Create';
8
+ export * from './admin/core/core16209/F_core16209_Delete';
9
+ export * from './admin/core/core16209/F_core16209_Update';
10
+ export * from './admin/core/core18256/F_core18256';
11
+ export * from './admin/core/core18256/F_core18256_Create';
12
+ export * from './admin/core/core18256/F_core18256_Delete';
13
+ export * from './admin/core/core18256/F_core18256_Read';
14
+ export * from './admin/core/core18256/F_core18256_Select';
15
+ export * from './admin/core/core18256/F_core18256_Update';
16
+ export * from './admin/core/core26965/F_core26965';
17
+ export * from './admin/core/core26965/F_core26965_Create';
18
+ export * from './admin/core/core26965/F_core26965_Delete';
19
+ export * from './admin/core/core26965/F_core26965_Read';
20
+ export * from './admin/core/core26965/F_core26965_Update';
21
+ export * from './admin/core/core27311/F_core27311';
22
+ export * from './admin/core/core27311/F_core27311_Create';
23
+ export * from './admin/core/core27311/F_core27311_Delete';
24
+ export * from './admin/core/core27311/F_core27311_Read';
25
+ export * from './admin/core/core27311/F_core27311_Update';
26
+ export * from './admin/core/core35923/F_core35923';
27
+ export * from './admin/core/core38677/F_core38677';
28
+ export * from './admin/core/core38677/F_core38677_ReadUser';
29
+ export * from './admin/core/core38677/F_core38677_Save';
30
+ export * from './admin/core/core38677/F_core38677_ViewMenuPermissions';
31
+ export * from './admin/core/core40207/F_core40207';
32
+ export * from './admin/core/core40207/F_core40207_Create';
33
+ export * from './admin/core/core40207/F_core40207_Delete';
34
+ export * from './admin/core/core40207/F_core40207_Read';
35
+ export * from './admin/core/core40207/F_core40207_Update';
36
+ export * from './admin/core/core47643/F_core47643';
37
+ export * from './admin/core/core47643/F_core47643_Delete';
38
+ export * from './admin/core/core47643/F_core47643_Form';
39
+ export * from './admin/core/core47643/F_core47643_Read';
40
+ export * from './admin/core/core60524/F_core60524';
41
+ export * from './admin/core/core60524/F_core60524_Form';
42
+ export * from './admin/core/core60524/F_core60524_Save';
43
+ export * from './admin/core/core60524/useS_core60524';
44
+ export * from './admin/core/core64229/F_core64229';
45
+ export * from './admin/core/core64229/F_core64229_Delete';
46
+ export * from './admin/core/core64229/F_core64229_Form';
47
+ export * from './admin/core/core64229/F_core64229_Read';
48
+ export * from './admin/core/core71678/F_core71678';
49
+ export * from './admin/core/core71678/F_core71678_ChangePermission';
50
+ export * from './admin/core/core71678/F_core71678_Create';
51
+ export * from './admin/core/core71678/F_core71678_Delete';
52
+ export * from './admin/core/core71678/F_core71678_Read';
53
+ export * from './admin/core/core71678/F_core71678_Update';
54
+ export * from './admin/core/core76318/F_core76318';
55
+ export * from './admin/core/core76318/F_core76318_Create';
56
+ export * from './admin/core/core76318/F_core76318_Delete';
57
+ export * from './admin/core/core76318/F_core76318_Read';
58
+ export * from './admin/core/core76318/F_core76318_Update';
59
+ export * from './admin/core/core83092/F_core83092';
60
+ export * from './admin/core/core83092/F_core83092_ReadUser';
61
+ export * from './admin/core/core83092/F_core83092_Save';
62
+ export * from './admin/core/core83092/F_core83092_ViewMenuPermissions';
63
+ export * from './admin/core/core83092/useS_core83092';
64
+ export * from './admin/core/MainDashboard/BarChart_CourseStatus';
65
+ export * from './admin/core/MainDashboard/BarChart_ExamStatus';
66
+ export * from './admin/core/MainDashboard/BarChart_RevenueByAcademicYear';
67
+ export * from './admin/core/MainDashboard/BarChart_StudentStatusIn30Days';
68
+ export * from './admin/core/MainDashboard/HBarChart_CourseDropOutPercentage';
69
+ export * from './admin/core/MainDashboard/HBarChart_CourseProgressPercentage';
70
+ export * from './admin/core/MainDashboard/LineChart_RevenueIn12Months';
71
+ export * from './admin/core/MainDashboard/LineChart_TotalRevenueByDiscountIn3Months';
72
+ export * from './admin/core/MainDashboard/LineChart_TotalRevenueByVoucherIn3Months';
73
+ export * from './admin/core/MainDashboard/LineChart_TotalStudentIn12Months';
74
+ export * from './admin/core/MainDashboard/ViewDiscountStat';
75
+ export * from './admin/core/MainDashboard/ViewVoucherStat';
76
+ export * from './authenticate/F_authenticate_Logout';
77
+ export * from './authenticate/F_authenticate_SplashPage';
78
+ export * from './authenticate/useS_authenticate';
79
+ export * from './authenticate/F_authenticate_Login/F_authenticate_Login';
@@ -0,0 +1,140 @@
1
+ 'use client'
2
+ import { ActionIcon, Blockquote, Divider, FileInput, Indicator, MantineProvider, Modal, Paper, Select, SimpleGrid, Space, Switch, Table, TextInput, Textarea, Title, Tooltip, createTheme } from '@mantine/core';
3
+ import { DateInput, TimeInput } from '@mantine/dates';
4
+ import { ModalsProvider } from '@mantine/modals';
5
+ import { Notifications } from '@mantine/notifications';
6
+ import { IconFile, IconInfoCircle } from '@tabler/icons-react';
7
+ import dayjs from 'dayjs';
8
+ import 'dayjs/locale/vi';
9
+ import { ReactNode } from 'react';
10
+ import classes from './mantine.module.css';
11
+ dayjs.locale('vi');
12
+ export default function MyMantineProvider({ children }: { children?: ReactNode }) {
13
+ return (
14
+ <MantineProvider defaultColorScheme="light" theme={theme}>
15
+ <ModalsProvider labels={{
16
+ confirm: 'Thêm', cancel: 'Huỷ'
17
+ }}>
18
+ <Notifications />
19
+ {children}
20
+ </ModalsProvider>
21
+ </MantineProvider >
22
+ )
23
+ }
24
+
25
+ const theme = createTheme({
26
+ cursorType: 'pointer',
27
+ components: {
28
+ Switch: Switch.extend({
29
+ defaultProps: {
30
+ maw: "fit-content"
31
+ }
32
+ }),
33
+ Paper: Paper.extend({
34
+ defaultProps: {
35
+ withBorder: true,
36
+ shadow: "sm",
37
+ radius: "md",
38
+ }
39
+ }),
40
+ TextInput: TextInput.extend({
41
+ defaultProps: {
42
+ classNames: classes
43
+ }
44
+ }),
45
+ Textarea: Textarea.extend({
46
+ defaultProps: {
47
+ autosize: true,
48
+ minRows: 4,
49
+ w: '100%'
50
+ }
51
+ }),
52
+ Title: Title.extend({
53
+ defaultProps: {
54
+ order: 2
55
+ }
56
+ }),
57
+ Modal: Modal.extend({
58
+ defaultProps: {
59
+ centered: true,
60
+ overlayProps: {
61
+ backgroundOpacity: 0.55,
62
+ blur: 3,
63
+ },
64
+ }
65
+ }),
66
+ DateInput: DateInput.extend({
67
+ defaultProps: {
68
+ dateParser: (value) => {
69
+ const [day, month, year] = value.split("/");
70
+ return new Date(`${year}-${month}-${day}`);
71
+ },
72
+ valueFormat: "DD/MM/YYYY",
73
+ locale: "vi",
74
+ clearable: true,
75
+ highlightToday: true,
76
+ },
77
+ }),
78
+ TimeInput: TimeInput.extend({
79
+ defaultProps: {
80
+ }
81
+ }),
82
+ Divider: Divider.extend({
83
+ defaultProps: {
84
+ my: "md"
85
+ }
86
+ }),
87
+
88
+ Tooltip: Tooltip.extend({
89
+ defaultProps: {
90
+ withArrow: true,
91
+ transitionProps: { transition: 'skew-up', duration: 150 }
92
+ }
93
+ }),
94
+ SimpleGrid: SimpleGrid.extend({
95
+ defaultProps: {
96
+ cols: { base: 1, sm: 2, lg: 4 }
97
+ }
98
+ }),
99
+ Blockquote: Blockquote.extend({
100
+ defaultProps: {
101
+ iconSize: 30,
102
+ icon: <IconInfoCircle />
103
+ }
104
+ }),
105
+ ActionIcon: ActionIcon.extend({
106
+ defaultProps: {
107
+ variant: "light"
108
+ }
109
+ }),
110
+ Indicator: Indicator.extend({
111
+ defaultProps: {
112
+ size: 16,
113
+ inline: true,
114
+ }
115
+ }),
116
+ Table: Table.extend({
117
+ defaultProps: {
118
+ withTableBorder: true,
119
+ withColumnBorders: true,
120
+ highlightOnHover: true,
121
+ },
122
+ }),
123
+ Space: Space.extend({
124
+ defaultProps: {
125
+ my: "md",
126
+ mx: "md"
127
+ }
128
+ }),
129
+ FileInput: FileInput.extend({
130
+ defaultProps: {
131
+ leftSection: <IconFile></IconFile>
132
+ }
133
+ }),
134
+ Select: Select.extend({
135
+ defaultProps: {
136
+ allowDeselect: false
137
+ }
138
+ })
139
+ }
140
+ });
@@ -0,0 +1,24 @@
1
+ "use client"
2
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
3
+ import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
4
+ import { ReactNode } from "react";
5
+ const queryClient = new QueryClient({
6
+ defaultOptions: {
7
+ queries: {
8
+ refetchOnWindowFocus: false,
9
+ },
10
+ mutations: {
11
+ onSuccess: () => {
12
+ queryClient.invalidateQueries();
13
+ },
14
+ },
15
+ },
16
+ });
17
+ export default function MyReactQueryProvider({ children }: { children?: ReactNode }) {
18
+ return (
19
+ <QueryClientProvider client={queryClient}>
20
+ {children}
21
+ <ReactQueryDevtools buttonPosition={"bottom-left"} initialIsOpen={false} />
22
+ </QueryClientProvider>
23
+ )
24
+ }
@@ -0,0 +1,13 @@
1
+ import { ReactNode } from 'react';
2
+ import MyMantineProvider from './MyMantineProvider';
3
+ import MyReactQueryProvider from './MyReactQueryProvider';
4
+
5
+ export default function Provider({ children }: { children?: ReactNode }) {
6
+ return (
7
+ <MyReactQueryProvider>
8
+ <MyMantineProvider>
9
+ {children}
10
+ </MyMantineProvider>
11
+ </MyReactQueryProvider>
12
+ )
13
+ }
@@ -0,0 +1,21 @@
1
+ .input {
2
+ &[data-variant="underline"] {
3
+ border: 2px solid transparent;
4
+ border-radius: 5px;
5
+ padding-left: 8px;
6
+ padding-right: 8px;
7
+ background-color: white;
8
+
9
+ &:focus,
10
+ &:focus-visible {
11
+ border-color: var(--mantine-color-gray-5);
12
+ outline: none;
13
+ }
14
+
15
+ &:active {
16
+ border-color: var(--mantine-color-gray-5);
17
+ }
18
+
19
+ transition: border-color 0.2s ease-in-out;
20
+ }
21
+ }
@@ -0,0 +1,23 @@
1
+ import { create } from "zustand";
2
+ import { persist } from "zustand/middleware";
3
+
4
+ interface GenericStore<T> {
5
+ state: T;
6
+ setState: (newState: T) => void;
7
+ setProperty: <K extends keyof T>(key: K, value: T[K]) => void;
8
+ resetState: () => void;
9
+ }
10
+
11
+ export function createGenericStore<T>({ initialState, storageKey }: { initialState: T, storageKey?: string }) {
12
+ const storeCreator = (set: any) => ({
13
+ state: initialState,
14
+ setState: (newState: T) => set({ state: newState }),
15
+ setProperty: <K extends keyof T>(key: K, value: T[K]) =>
16
+ set((store: GenericStore<T>) => ({ state: { ...store.state, [key]: value } })),
17
+ resetState: () => set({ state: initialState }),
18
+ });
19
+
20
+ return storageKey
21
+ ? create(persist<GenericStore<T>>(storeCreator, { name: storageKey }))
22
+ : create<GenericStore<T>>(storeCreator);
23
+ }
@@ -1 +1,7 @@
1
- export * from "./CreateGenericStore";
1
+ import {
2
+ createGenericStore
3
+ } from "../chunk-Y3YGC5IH.mjs";
4
+ import "../chunk-FWCSY2DS.mjs";
5
+ export {
6
+ createGenericStore
7
+ };
@@ -0,0 +1 @@
1
+ export * from './CreateGenericStore';
@@ -0,0 +1,16 @@
1
+ import { MantineSize } from "@mantine/core";
2
+
3
+ export type TYPES_MANTINE_SIZE = number | MantineSize | (string & {}) | undefined;
4
+ export type TYPES_CRUD =
5
+ "default"
6
+ | "create"
7
+ | "update"
8
+ | "delete"
9
+ | "save"
10
+ | "createMultiple"
11
+ | "check"
12
+ | "import"
13
+ | "print"
14
+ | "cancel"
15
+ | "export"
16
+ | "select";
@@ -1,9 +1,45 @@
1
- export * from "./utils_converter";
2
- export * from "./utils_currency";
3
- export * from "./utils_date";
4
- export * from "./utils_excel";
5
- export * from "./utils_file";
6
- export * from "./utils_notification";
7
- export * from "./utils_pdf";
8
- export * from "./utils_time";
9
- export * from "./utils_validateForm";
1
+ import {
2
+ U0DateToDDMMYYYString,
3
+ U0MyValidateEmail,
4
+ U0MyValidateEmpty,
5
+ utils_converter_enumToSelectOptions,
6
+ utils_converter_getKeyByValue,
7
+ utils_converter_getLabelByValue,
8
+ utils_currency_formatWithSuffix,
9
+ utils_date_dateToDDMMYYYString,
10
+ utils_date_formatToDateTimeStartEnd,
11
+ utils_date_getHHmm,
12
+ utils_excel_download,
13
+ utils_excel_exportExcel,
14
+ utils_file_docxtemplaterDownload,
15
+ utils_file_fileToAQDocumentType,
16
+ utils_time_convertTimeStringToSeconds,
17
+ utils_time_getCurrentTimeString
18
+ } from "../chunk-KWCUUD5Z.mjs";
19
+ import {
20
+ utils_pdf_download
21
+ } from "../chunk-5U2JSHSJ.mjs";
22
+ import {
23
+ utils_notification_show
24
+ } from "../chunk-7ZCOFATU.mjs";
25
+ import "../chunk-FWCSY2DS.mjs";
26
+ export {
27
+ U0DateToDDMMYYYString,
28
+ U0MyValidateEmail,
29
+ U0MyValidateEmpty,
30
+ utils_converter_enumToSelectOptions,
31
+ utils_converter_getKeyByValue,
32
+ utils_converter_getLabelByValue,
33
+ utils_currency_formatWithSuffix,
34
+ utils_date_dateToDDMMYYYString,
35
+ utils_date_formatToDateTimeStartEnd,
36
+ utils_date_getHHmm,
37
+ utils_excel_download,
38
+ utils_excel_exportExcel,
39
+ utils_file_docxtemplaterDownload,
40
+ utils_file_fileToAQDocumentType,
41
+ utils_notification_show,
42
+ utils_pdf_download,
43
+ utils_time_convertTimeStringToSeconds,
44
+ utils_time_getCurrentTimeString
45
+ };
@@ -0,0 +1,9 @@
1
+ export * from './utils_converter';
2
+ export * from './utils_currency';
3
+ export * from './utils_date';
4
+ export * from './utils_excel';
5
+ export * from './utils_file';
6
+ export * from './utils_notification';
7
+ export * from './utils_pdf';
8
+ export * from './utils_time';
9
+ export * from './utils_validateForm';
@@ -0,0 +1,39 @@
1
+ // export const utils_converter_enumToOptions = (enumObj: object) => {
2
+ // return Object.entries(enumObj)
3
+ // .filter(([key]) => isNaN(Number(key))) // Loại bỏ các key là số
4
+ // .map(([label, value]) => ({ value: String(value), label }));
5
+ // };
6
+
7
+ export const utils_converter_getLabelByValue = (data: Record<number, string>, value?: number | string): string => {
8
+ const numericValue = Number(value); // Chuyển về number
9
+ return data[numericValue] || "Không xác định";
10
+ };
11
+
12
+ export const utils_converter_getKeyByValue = <K extends string | number, V>(obj: Record<K, V>, value: V): K | undefined => {
13
+ return (Object.entries(obj) as [K, V][]).find(([_, v]) => v === value)?.[0];
14
+ };
15
+
16
+ /**
17
+ * Chuyển đổi enum thành mảng các đối tượng {value, label}
18
+ * @param enumObject - Đối tượng enum cần chuyển đổi
19
+ * @returns Mảng các đối tượng có dạng {value: string, label: string}
20
+ */
21
+ export function utils_converter_enumToSelectOptions<T extends Record<string, string | number>>(enumObject: T): Array<{ value: string, label: string }> {
22
+ const result: Array<{ value: string, label: string }> = [];
23
+
24
+ // Lọc các key là string và value là number (các key enum thông thường)
25
+ const numericEnumKeys = Object.keys(enumObject).filter(key => isNaN(Number(key)));
26
+
27
+ for (const key of numericEnumKeys) {
28
+ const enumValue = enumObject[key];
29
+ if (typeof enumValue === 'number') {
30
+ // Thêm cặp value-label vào mảng kết quả
31
+ result.push({
32
+ value: String(enumValue),
33
+ label: key
34
+ });
35
+ }
36
+ }
37
+
38
+ return result;
39
+ }
@@ -0,0 +1,5 @@
1
+ export function utils_currency_formatWithSuffix(amount: number, suffix: string = ''): string {
2
+ const formatter = new Intl.NumberFormat('vi-VN');
3
+ const formattedAmount = formatter.format(amount);
4
+ return `${formattedAmount}${suffix}`
5
+ }
@@ -0,0 +1,34 @@
1
+ export function U0DateToDDMMYYYString(date: Date) {
2
+ if (!(date instanceof Date) || isNaN(date.getTime())) return "";
3
+ const day = String(date.getDate()).padStart(2, "0");
4
+ const month = String(date.getMonth() + 1).padStart(2, "0"); // Tháng bắt đầu từ 0 nên phải cộng thêm 1
5
+ const year = date.getFullYear();
6
+ return `${day}/${month}/${year}`;
7
+ }
8
+
9
+ export function utils_date_dateToDDMMYYYString(date: Date) {
10
+ const day = String(date.getDate()).padStart(2, "0");
11
+ const month = String(date.getMonth() + 1).padStart(2, "0"); // Tháng bắt đầu từ 0 nên phải cộng thêm 1
12
+ const year = date.getFullYear();
13
+ return `${day}/${month}/${year}`;
14
+ }
15
+
16
+ export function utils_date_formatToDateTimeStartEnd(startDate: Date, endDate: Date) {
17
+ const startday = String(startDate.getDate()).padStart(2, "0");
18
+ const startmonth = String(startDate.getMonth() + 1).padStart(2, "0"); // Tháng bắt đầu từ 0 nên phải cộng thêm 1
19
+ const startyear = startDate.getFullYear();
20
+ const starthour = String(startDate.getHours()).padStart(2, "0");
21
+ const startminute = String(startDate.getMinutes()).padStart(2, "0");
22
+
23
+ const endhour = String(endDate.getHours()).padStart(2, "0");
24
+ const endminuate = String(endDate.getMinutes()).padStart(2, "0");
25
+
26
+ return `${startday}/${startmonth}/${startyear} [${starthour}:${startminute} - ${endhour}:${endminuate}]`;
27
+ }
28
+
29
+ export function utils_date_getHHmm(date: Date) {
30
+ if (!(date instanceof Date) || isNaN(date.getTime())) return "";
31
+ const hour = String(date.getHours()).padStart(2, "0");
32
+ const minute = String(date.getMinutes()).padStart(2, "0");
33
+ return `${hour}:${minute}`;
34
+ }
@@ -0,0 +1,128 @@
1
+ import ExcelJS from "exceljs";
2
+ import saveAs from "file-saver";
3
+
4
+ export interface IUtils_Excel_ColumnConfig<T> {
5
+ fieldKey: keyof T | string; // string để hỗ trợ nested key như "user.code"
6
+ fieldName: string;
7
+ isRequired?: boolean;
8
+ }
9
+
10
+ function isObjectPath(path: string): boolean {
11
+ // true nếu không chứa số hoặc ký tự đặc biệt (ngoài chấm ngăn cách field)
12
+ return /^[a-zA-Z_$][a-zA-Z0-9_$]*(\.[a-zA-Z_$][a-zA-Z0-9_$]*)+$/.test(path);
13
+ }
14
+
15
+ function getValueByPath(obj: any, path: string): any {
16
+ if (isObjectPath(path)) {
17
+ return path.split(".").reduce((acc, key) => acc?.[key], obj);
18
+ }
19
+ return obj?.[path];
20
+ }
21
+
22
+ export async function utils_excel_exportExcel<T extends Record<string, any>>({
23
+ workbook,
24
+ sheetName,
25
+ data,
26
+ config,
27
+ }: {
28
+ workbook: ExcelJS.Workbook;
29
+ sheetName: string;
30
+ data: T[];
31
+ config: IUtils_Excel_ColumnConfig<T>[];
32
+ }) {
33
+ const sheet = workbook.addWorksheet(sheetName);
34
+
35
+ const fieldKeys: string[] = config.map((item) => String(item.fieldKey));
36
+ const headerMappings: Record<string, string> = {};
37
+ const markedColumns: string[] = [];
38
+
39
+ config.forEach((item) => {
40
+ const fieldKeyStr = String(item.fieldKey);
41
+ headerMappings[fieldKeyStr] = item.fieldName;
42
+ if (item.isRequired) markedColumns.push(fieldKeyStr);
43
+ });
44
+
45
+ sheet.columns = fieldKeys.map((fieldKey) => ({
46
+ key: fieldKey,
47
+ width: 20,
48
+ }));
49
+
50
+ const displayRow = sheet.addRow(
51
+ fieldKeys.map((fieldKey) =>
52
+ markedColumns.includes(fieldKey)
53
+ ? `${headerMappings[fieldKey]} *`
54
+ : headerMappings[fieldKey] || fieldKey
55
+ )
56
+ );
57
+
58
+ const keyRow = sheet.addRow(fieldKeys);
59
+
60
+ data.forEach((item) => {
61
+ const rowData: Record<string, any> = {};
62
+ fieldKeys.forEach((fieldKey) => {
63
+ rowData[fieldKey] = getValueByPath(item, fieldKey);
64
+ });
65
+ sheet.addRow(rowData);
66
+ });
67
+
68
+ // Style the first row (display names)
69
+ for (let i = 1; i <= fieldKeys.length; i++) {
70
+ const cell = displayRow.getCell(i);
71
+ cell.font = { bold: true };
72
+ cell.fill = {
73
+ type: "pattern",
74
+ pattern: "solid",
75
+ fgColor: { argb: "FFE0E0E0" },
76
+ };
77
+ }
78
+
79
+ // Style the second row (field keys)
80
+ for (let i = 1; i <= fieldKeys.length; i++) {
81
+ const cell = keyRow.getCell(i);
82
+ cell.font = { italic: true };
83
+ cell.fill = {
84
+ type: "pattern",
85
+ pattern: "solid",
86
+ fgColor: { argb: "FFF0F0F0" },
87
+ };
88
+ }
89
+
90
+ // Apply red color to asterisks in headers
91
+ if (markedColumns.length > 0) {
92
+ for (let i = 1; i <= fieldKeys.length; i++) {
93
+ const cell = displayRow.getCell(i);
94
+ const text = cell.value;
95
+
96
+ if (typeof text === "string" && text.endsWith(" *")) {
97
+ cell.value = {
98
+ richText: [
99
+ {
100
+ text: text.slice(0, -2),
101
+ font: { bold: true },
102
+ },
103
+ {
104
+ text: " *",
105
+ font: { bold: true, color: { argb: "FFFF0000" } },
106
+ },
107
+ ],
108
+ };
109
+ }
110
+ }
111
+ }
112
+
113
+ return workbook;
114
+ }
115
+
116
+ export async function utils_excel_download({
117
+ workbook,
118
+ name,
119
+ }: {
120
+ workbook: ExcelJS.Workbook;
121
+ name: string;
122
+ }) {
123
+ const buffer = await workbook.xlsx.writeBuffer();
124
+ const blob = new Blob([buffer], {
125
+ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
126
+ });
127
+ saveAs(blob, name);
128
+ }
@@ -0,0 +1,61 @@
1
+ import Docxtemplater from 'docxtemplater';
2
+ import { saveAs } from 'file-saver';
3
+ import PizZip from 'pizzip';
4
+
5
+ export interface IAQFileDetail {
6
+ fileName?: string,
7
+ fileExtension?: string,
8
+ fileBase64String?: string
9
+ }
10
+
11
+ export function utils_file_fileToAQDocumentType(file: File): Promise<IAQFileDetail> {
12
+ return new Promise((resolve, reject) => {
13
+ const fileReader = new FileReader();
14
+
15
+ // Đọc tệp dưới dạng Base64
16
+ fileReader.onloadend = () => {
17
+ const fileName = file.name; // Tên tệp
18
+ const fileExtension = file.name.split(".").pop(); // Phần mở rộng tệp
19
+ const fileBase64String = fileReader.result as string; // Base64 string của tệp
20
+
21
+ resolve({
22
+ fileName,
23
+ fileExtension,
24
+ fileBase64String: fileBase64String.split(",")[1], // Chỉ lấy phần base64 sau dấu phẩy
25
+ });
26
+ };
27
+
28
+ fileReader.onerror = reject;
29
+
30
+ // Đọc tệp dưới dạng Data URL (Base64)
31
+ fileReader.readAsDataURL(file);
32
+ });
33
+ }
34
+
35
+ export async function utils_file_docxtemplaterDownload({
36
+ data,
37
+ filePath,
38
+ fileName
39
+ }: {
40
+ data: any,
41
+ filePath: string,
42
+ fileName?: string
43
+ }) {
44
+ const response = await fetch(filePath);
45
+ const arrayBuffer = await response.arrayBuffer();
46
+
47
+ // Tạo PizZip từ nội dung mẫu
48
+ const zip = new PizZip(arrayBuffer);
49
+
50
+ // Tạo Docxtemplater từ PizZip
51
+ const doc = new Docxtemplater(zip);
52
+
53
+ // Dữ liệu để thay thế
54
+
55
+ doc.render(data);
56
+ // Xuất kết quả thành DOCX
57
+ const buffer = doc.getZip().generate({ type: 'blob' });
58
+
59
+ // Tải xuống tệp DOCX
60
+ saveAs(buffer, fileName || 'output.docx');
61
+ }