aq-fe-framework 0.1.156 → 0.1.157

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 (242) hide show
  1. package/dist/{chunk-JLT4BL7I.mjs → chunk-ZO7PLULO.mjs} +4 -4
  2. package/dist/{css.module-4ICLUKPO.module.css → components/index.css} +16 -29
  3. package/dist/components/index.mjs +2 -2
  4. package/dist/modules-features/index.css +100 -0
  5. package/dist/modules-features/index.mjs +5 -5
  6. package/package.json +1 -1
  7. package/dist/api/apiFactory.ts +0 -46
  8. package/dist/api/baseAxios.ts +0 -22
  9. package/dist/app/admin/(core)/core12196/page.tsx +0 -13
  10. package/dist/app/admin/(core)/core16209/page.tsx +0 -13
  11. package/dist/app/admin/(core)/core18256/page.tsx +0 -12
  12. package/dist/app/admin/(core)/core26965/page.tsx +0 -13
  13. package/dist/app/admin/(core)/core27311/page.tsx +0 -13
  14. package/dist/app/admin/(core)/core38677/page.tsx +0 -13
  15. package/dist/app/admin/(core)/core40207/page.tsx +0 -13
  16. package/dist/app/admin/(core)/core60524/page.tsx +0 -11
  17. package/dist/app/admin/(core)/core64229/page.tsx +0 -12
  18. package/dist/app/admin/(core)/core71678/page.tsx +0 -11
  19. package/dist/app/admin/(core)/core76318/page.tsx +0 -13
  20. package/dist/app/admin/(core)/core83092/page.tsx +0 -13
  21. package/dist/app/admin/[...slug]/page.tsx +0 -7
  22. package/dist/app/admin/error.tsx +0 -42
  23. package/dist/app/admin/layout.tsx +0 -21
  24. package/dist/app/admin/test/page.tsx +0 -44
  25. package/dist/app/auth/login/page.tsx +0 -14
  26. package/dist/app/globals.css +0 -59
  27. package/dist/app/layout.tsx +0 -39
  28. package/dist/app/page.tsx +0 -18
  29. package/dist/components/Aceternity/BoxesBackground/MyBoxes.tsx +0 -66
  30. package/dist/components/Aceternity/BoxesBackground/MyBoxesBackground.tsx +0 -31
  31. package/dist/components/ActionIcons/ActionIcon/MyActionIcon.tsx +0 -47
  32. package/dist/components/ActionIcons/ActionIconCRUD/MyActionIconDelete.tsx +0 -81
  33. package/dist/components/ActionIcons/ActionIconCRUD/MyActionIconUpdate.tsx +0 -68
  34. package/dist/components/ActionIcons/ActionIconCheck/MyActionIconCheck.tsx +0 -50
  35. package/dist/components/ActionIcons/ActionIconDownloadPDF/MyActionIconDownloadPDF.tsx +0 -13
  36. package/dist/components/ActionIcons/ActionIconModal/MyActionIconModal.tsx +0 -113
  37. package/dist/components/ActionIcons/ActionIconUpload/MyActionIconUpload.tsx +0 -19
  38. package/dist/components/ActionIcons/ActionIconViewPdf/MyActionIconViewPDF.tsx +0 -63
  39. package/dist/components/ActionIcons/SwitchTheme/MySwitchTheme.tsx +0 -36
  40. package/dist/components/AppSpotlight/MyAppSpotlight.tsx +0 -112
  41. package/dist/components/Buttons/Anchor/MyAnchorViewPDF.tsx +0 -46
  42. package/dist/components/Buttons/Button/MyButton.tsx +0 -90
  43. package/dist/components/Buttons/ButtonCRUD/AQButtonCreateByImportFile.tsx +0 -81
  44. package/dist/components/Buttons/ButtonCRUD/AQButtonExportData.tsx +0 -75
  45. package/dist/components/Buttons/ButtonCRUD/MyButtonCreate.tsx +0 -68
  46. package/dist/components/Buttons/ButtonImport/MyButtonImport.tsx +0 -29
  47. package/dist/components/Buttons/ButtonImport/SelectFieldModal.tsx +0 -100
  48. package/dist/components/Buttons/ButtonImport/SelectFileModal.tsx +0 -81
  49. package/dist/components/Buttons/ButtonImport/useS_ButtonImport.ts +0 -196
  50. package/dist/components/Buttons/ButtonModal/AQSelectTableByOpenModal.tsx +0 -71
  51. package/dist/components/Buttons/ButtonModal/MyButtonModal.tsx +0 -117
  52. package/dist/components/Buttons/ButtonPrintPDF/MyButtonPrintPDF.tsx +0 -37
  53. package/dist/components/Buttons/ButtonPrintPDFTable/MyButtonPrintTablePDF.tsx +0 -174
  54. package/dist/components/Buttons/ButtonRouterBack/MyButtonRouterBack.tsx +0 -29
  55. package/dist/components/Buttons/ButtonViewPDF/MyButtonViewPDF.tsx +0 -121
  56. package/dist/components/Calendar/MyCalendar.tsx +0 -118
  57. package/dist/components/CenterFull/MyCenterFull.tsx +0 -10
  58. package/dist/components/Checkbox/MyCheckbox.tsx +0 -9
  59. package/dist/components/Combobox/Select/MySelect.tsx +0 -12
  60. package/dist/components/DataDisplay/Card/AQCard.tsx +0 -49
  61. package/dist/components/DataDisplay/CardInformation/MyCardInformation.tsx +0 -77
  62. package/dist/components/DataDisplay/DataTable/MyDataTable.tsx +0 -184
  63. package/dist/components/DataDisplay/IconText/MyIconText.tsx +0 -17
  64. package/dist/components/DataDisplay/KeyLabel/MyKeyLabel.tsx +0 -15
  65. package/dist/components/DataDisplay/NumberFormatter/MyNumberFormatter.tsx +0 -9
  66. package/dist/components/DataDisplay/StatCard/AQStatCard1.tsx +0 -68
  67. package/dist/components/FaviconSetter/FaviconSetter.tsx +0 -33
  68. package/dist/components/Inputs/DateInput/MyDateInput.tsx +0 -11
  69. package/dist/components/Inputs/Fieldset/MyFieldset.tsx +0 -32
  70. package/dist/components/Inputs/FileInput/MyFileInput.tsx +0 -12
  71. package/dist/components/Inputs/NumberInput/MyNumberInput.tsx +0 -12
  72. package/dist/components/Inputs/TextArea/MyTextArea.tsx +0 -11
  73. package/dist/components/Inputs/TextEditor/MyTextEditor.tsx +0 -191
  74. package/dist/components/Inputs/TextInput/MyTextInput.tsx +0 -30
  75. package/dist/components/Layouts/BasicAppShell/BasicAppShell.tsx +0 -357
  76. package/dist/components/Layouts/BasicAppShell/css.module.css +0 -62
  77. package/dist/components/Layouts/BasicAppShell/useS_BasicAppShell.ts +0 -64
  78. package/dist/components/Layouts/Container/MyContainer.tsx +0 -16
  79. package/dist/components/Layouts/FlexColumn/MyFlexColumn.tsx +0 -14
  80. package/dist/components/Layouts/FlexEnd/MyFlexEnd.tsx +0 -14
  81. package/dist/components/Layouts/FlexRow/MyFlexRow.tsx +0 -14
  82. package/dist/components/Layouts/HeaderMegaMenu/HeaderMegaMenu.tsx +0 -147
  83. package/dist/components/Layouts/HeaderMegaMenu/HeaderMegaMenuStore.ts +0 -19
  84. package/dist/components/Layouts/HeaderMegaMenu/css.module.css +0 -50
  85. package/dist/components/Layouts/HtmlWrapper/MyHtmlWrapper.tsx +0 -29
  86. package/dist/components/Layouts/PageContent/MyPageContent.tsx +0 -67
  87. package/dist/components/Layouts/Tab/MyTab.tsx +0 -33
  88. package/dist/components/Loaders/MyCardioLoader.tsx +0 -12
  89. package/dist/components/RESTAPIComponents/DataTableSelect/MyDataTableSelect.tsx +0 -61
  90. package/dist/components/RESTAPIComponents/SelectAPIGet/MySelectAPIGet.tsx +0 -37
  91. package/dist/components/ScheduleX/MyScheduleX.tsx +0 -58
  92. package/dist/components/Skeletons/SkeletonTable/MySkeletonTable.tsx +0 -9
  93. package/dist/components/index.ts +0 -62
  94. package/dist/constants/array/daysOfWeek.ts +0 -9
  95. package/dist/constants/enum/ENUM_EMAILCONFIG.ts +0 -6
  96. package/dist/constants/enum/global.ts +0 -26
  97. package/dist/constants/object/color.ts +0 -5
  98. package/dist/constants/object/documentTypes.ts +0 -8
  99. package/dist/css.module-P45UW6UZ.module.css +0 -4
  100. package/dist/data/menuData.ts +0 -31
  101. package/dist/hooks/custom-hooks/useC_MutationAction.tsx +0 -36
  102. package/dist/hooks/index.ts +0 -2
  103. package/dist/hooks/query/AQ/useQ_AQ_GetAQModule.ts +0 -14
  104. package/dist/interfaces/EmailConfig.ts +0 -10
  105. package/dist/interfaces/IAQModule.ts +0 -21
  106. package/dist/interfaces/base.ts +0 -9
  107. package/dist/interfaces/global-interface/IAQSSO.ts +0 -15
  108. package/dist/interfaces/global-interface/IAQSyncData.ts +0 -9
  109. package/dist/interfaces/global-interface/IAcademicYear.ts +0 -12
  110. package/dist/interfaces/global-interface/IChangePassWord.ts +0 -8
  111. package/dist/interfaces/global-interface/IComplaintProccess.ts +0 -9
  112. package/dist/interfaces/global-interface/ICreateAccount.ts +0 -24
  113. package/dist/interfaces/global-interface/IDocument.ts +0 -25
  114. package/dist/interfaces/global-interface/IDocumentAttribute.ts +0 -12
  115. package/dist/interfaces/global-interface/IEvent.ts +0 -30
  116. package/dist/interfaces/global-interface/IEventComplaint.ts +0 -20
  117. package/dist/interfaces/global-interface/IEventFillter.ts +0 -14
  118. package/dist/interfaces/global-interface/IFile.ts +0 -8
  119. package/dist/interfaces/global-interface/IImportStudentPaticipation.ts +0 -8
  120. package/dist/interfaces/global-interface/IPagePermission.ts +0 -12
  121. package/dist/interfaces/global-interface/IRolePermission.ts +0 -7
  122. package/dist/interfaces/global-interface/ISRMUserinfo.ts +0 -35
  123. package/dist/interfaces/global-interface/IScientificProfileProjectUser.ts +0 -15
  124. package/dist/interfaces/global-interface/IScientificProfileResearchGroup.ts +0 -15
  125. package/dist/interfaces/global-interface/IScientificProfileResearchGroupUser.ts +0 -14
  126. package/dist/interfaces/global-interface/IScientificProfileResearchProject.ts +0 -21
  127. package/dist/interfaces/global-interface/ISignIn.ts +0 -7
  128. package/dist/interfaces/global-interface/ISystemCatalogAcademicYear.ts +0 -15
  129. package/dist/interfaces/global-interface/ISystemCatalogDomainCategory.ts +0 -11
  130. package/dist/interfaces/global-interface/ISystemCatalogProjectLevelCategory.ts +0 -11
  131. package/dist/interfaces/global-interface/ISystemCatalogProjectTypeCategory.ts +0 -11
  132. package/dist/interfaces/global-interface/ISystemCatalogRoleActivity.ts +0 -11
  133. package/dist/interfaces/global-interface/ISystemCatalogTaskCategory.ts +0 -11
  134. package/dist/interfaces/global-interface/ISystemManagementAcademicHistory.ts +0 -31
  135. package/dist/interfaces/global-interface/ISystemManagementProfessionalWorkHistory.ts +0 -14
  136. package/dist/interfaces/global-interface/ISystemManagementPublishedScientificWork.ts +0 -14
  137. package/dist/interfaces/global-interface/ISystemManagementRoleGroup.ts +0 -12
  138. package/dist/interfaces/global-interface/ISystemManagementRoleGroupMenuPermission.ts +0 -18
  139. package/dist/interfaces/global-interface/ISystemManagementScientificResearchProject.ts +0 -16
  140. package/dist/interfaces/global-interface/ISystemManagementUserMenuPermission.ts +0 -18
  141. package/dist/interfaces/global-interface/IUpdateAccount.ts +0 -15
  142. package/dist/interfaces/global-interface/IUser.ts +0 -21
  143. package/dist/interfaces/global-interface/IUserPermission.ts +0 -7
  144. package/dist/lib/utils.ts +0 -6
  145. package/dist/modules-features/admin/core/MainDashboard/BarChart_CourseStatus.tsx +0 -87
  146. package/dist/modules-features/admin/core/MainDashboard/BarChart_ExamStatus.tsx +0 -65
  147. package/dist/modules-features/admin/core/MainDashboard/BarChart_RevenueByAcademicYear.tsx +0 -82
  148. package/dist/modules-features/admin/core/MainDashboard/BarChart_StudentStatusIn30Days.tsx +0 -67
  149. package/dist/modules-features/admin/core/MainDashboard/HBarChart_CourseDropOutPercentage.tsx +0 -77
  150. package/dist/modules-features/admin/core/MainDashboard/HBarChart_CourseProgressPercentage.tsx +0 -77
  151. package/dist/modules-features/admin/core/MainDashboard/LineChart_RevenueIn12Months.tsx +0 -78
  152. package/dist/modules-features/admin/core/MainDashboard/LineChart_TotalRevenueByDiscountIn3Months.tsx +0 -69
  153. package/dist/modules-features/admin/core/MainDashboard/LineChart_TotalRevenueByVoucherIn3Months.tsx +0 -69
  154. package/dist/modules-features/admin/core/MainDashboard/LineChart_TotalStudentIn12Months.tsx +0 -64
  155. package/dist/modules-features/admin/core/MainDashboard/ViewDiscountStat.tsx +0 -311
  156. package/dist/modules-features/admin/core/MainDashboard/ViewVoucherStat.tsx +0 -311
  157. package/dist/modules-features/admin/core/core12196/F_core12196.tsx +0 -20
  158. package/dist/modules-features/admin/core/core12196/F_core12196_Create.tsx +0 -101
  159. package/dist/modules-features/admin/core/core12196/F_core12196_Delete.tsx +0 -19
  160. package/dist/modules-features/admin/core/core12196/F_core12196_Read.tsx +0 -165
  161. package/dist/modules-features/admin/core/core12196/F_core12196_Update.tsx +0 -112
  162. package/dist/modules-features/admin/core/core16209/F_core16209.tsx +0 -108
  163. package/dist/modules-features/admin/core/core16209/F_core16209_Create.tsx +0 -112
  164. package/dist/modules-features/admin/core/core16209/F_core16209_Delete.tsx +0 -17
  165. package/dist/modules-features/admin/core/core16209/F_core16209_Update.tsx +0 -114
  166. package/dist/modules-features/admin/core/core18256/F_core18256.tsx +0 -29
  167. package/dist/modules-features/admin/core/core18256/F_core18256_Create.tsx +0 -34
  168. package/dist/modules-features/admin/core/core18256/F_core18256_Delete.tsx +0 -14
  169. package/dist/modules-features/admin/core/core18256/F_core18256_Read.tsx +0 -59
  170. package/dist/modules-features/admin/core/core18256/F_core18256_Select.tsx +0 -40
  171. package/dist/modules-features/admin/core/core18256/F_core18256_Update.tsx +0 -22
  172. package/dist/modules-features/admin/core/core26965/F_core26965.tsx +0 -17
  173. package/dist/modules-features/admin/core/core26965/F_core26965_Create.tsx +0 -106
  174. package/dist/modules-features/admin/core/core26965/F_core26965_Delete.tsx +0 -19
  175. package/dist/modules-features/admin/core/core26965/F_core26965_Read.tsx +0 -165
  176. package/dist/modules-features/admin/core/core26965/F_core26965_Update.tsx +0 -112
  177. package/dist/modules-features/admin/core/core27311/F_core27311.tsx +0 -21
  178. package/dist/modules-features/admin/core/core27311/F_core27311_Create.tsx +0 -109
  179. package/dist/modules-features/admin/core/core27311/F_core27311_Delete.tsx +0 -19
  180. package/dist/modules-features/admin/core/core27311/F_core27311_Read.tsx +0 -165
  181. package/dist/modules-features/admin/core/core27311/F_core27311_Update.tsx +0 -113
  182. package/dist/modules-features/admin/core/core35923/F_core35923.tsx +0 -46
  183. package/dist/modules-features/admin/core/core38677/F_core38677.tsx +0 -28
  184. package/dist/modules-features/admin/core/core38677/F_core38677_ReadUser.tsx +0 -79
  185. package/dist/modules-features/admin/core/core38677/F_core38677_Save.tsx +0 -52
  186. package/dist/modules-features/admin/core/core38677/F_core38677_ViewMenuPermissions.tsx +0 -264
  187. package/dist/modules-features/admin/core/core40207/F_core40207.tsx +0 -9
  188. package/dist/modules-features/admin/core/core40207/F_core40207_Create.tsx +0 -81
  189. package/dist/modules-features/admin/core/core40207/F_core40207_Delete.tsx +0 -17
  190. package/dist/modules-features/admin/core/core40207/F_core40207_Read.tsx +0 -98
  191. package/dist/modules-features/admin/core/core40207/F_core40207_Update.tsx +0 -83
  192. package/dist/modules-features/admin/core/core47643/F_core47643.tsx +0 -10
  193. package/dist/modules-features/admin/core/core47643/F_core47643_Delete.tsx +0 -13
  194. package/dist/modules-features/admin/core/core47643/F_core47643_Form.tsx +0 -34
  195. package/dist/modules-features/admin/core/core47643/F_core47643_Read.tsx +0 -57
  196. package/dist/modules-features/admin/core/core60524/F_core60524.tsx +0 -13
  197. package/dist/modules-features/admin/core/core60524/F_core60524_Form.tsx +0 -111
  198. package/dist/modules-features/admin/core/core60524/F_core60524_Save.tsx +0 -56
  199. package/dist/modules-features/admin/core/core60524/useS_core60524.ts +0 -16
  200. package/dist/modules-features/admin/core/core64229/F_core64229.tsx +0 -7
  201. package/dist/modules-features/admin/core/core64229/F_core64229_Delete.tsx +0 -21
  202. package/dist/modules-features/admin/core/core64229/F_core64229_Form.tsx +0 -95
  203. package/dist/modules-features/admin/core/core64229/F_core64229_Read.tsx +0 -67
  204. package/dist/modules-features/admin/core/core71678/F_core71678.tsx +0 -8
  205. package/dist/modules-features/admin/core/core71678/F_core71678_ChangePermission.tsx +0 -117
  206. package/dist/modules-features/admin/core/core71678/F_core71678_Create.tsx +0 -61
  207. package/dist/modules-features/admin/core/core71678/F_core71678_Delete.tsx +0 -16
  208. package/dist/modules-features/admin/core/core71678/F_core71678_Read.tsx +0 -92
  209. package/dist/modules-features/admin/core/core71678/F_core71678_Update.tsx +0 -49
  210. package/dist/modules-features/admin/core/core76318/F_core76318.tsx +0 -9
  211. package/dist/modules-features/admin/core/core76318/F_core76318_Create.tsx +0 -89
  212. package/dist/modules-features/admin/core/core76318/F_core76318_Delete.tsx +0 -17
  213. package/dist/modules-features/admin/core/core76318/F_core76318_Read.tsx +0 -104
  214. package/dist/modules-features/admin/core/core76318/F_core76318_Update.tsx +0 -89
  215. package/dist/modules-features/admin/core/core83092/F_core83092.tsx +0 -27
  216. package/dist/modules-features/admin/core/core83092/F_core83092_ReadUser.tsx +0 -85
  217. package/dist/modules-features/admin/core/core83092/F_core83092_Save.tsx +0 -52
  218. package/dist/modules-features/admin/core/core83092/F_core83092_ViewMenuPermissions.tsx +0 -263
  219. package/dist/modules-features/admin/core/core83092/useS_core83092.tsx +0 -70
  220. package/dist/modules-features/authenticate/F_authenticate_Login/F_authenticate_Login.tsx +0 -154
  221. package/dist/modules-features/authenticate/F_authenticate_Login/css.module.css +0 -4
  222. package/dist/modules-features/authenticate/F_authenticate_Logout.tsx +0 -22
  223. package/dist/modules-features/authenticate/F_authenticate_SplashPage.tsx +0 -21
  224. package/dist/modules-features/authenticate/useS_authenticate.ts +0 -23
  225. package/dist/modules-features/index.ts +0 -79
  226. package/dist/providers/MyMantineProvider.tsx +0 -140
  227. package/dist/providers/MyReactQueryProvider.tsx +0 -24
  228. package/dist/providers/Provider.tsx +0 -13
  229. package/dist/providers/mantine.module.css +0 -21
  230. package/dist/stores/CreateGenericStore.ts +0 -23
  231. package/dist/stores/index.ts +0 -1
  232. package/dist/types/types.ts +0 -16
  233. package/dist/utils/index.ts +0 -9
  234. package/dist/utils/utils_converter.ts +0 -39
  235. package/dist/utils/utils_currency.ts +0 -5
  236. package/dist/utils/utils_date.ts +0 -34
  237. package/dist/utils/utils_excel.ts +0 -128
  238. package/dist/utils/utils_file.ts +0 -61
  239. package/dist/utils/utils_notification.ts +0 -46
  240. package/dist/utils/utils_pdf.ts +0 -21
  241. package/dist/utils/utils_time.ts +0 -15
  242. package/dist/utils/utils_validateForm.ts +0 -9
@@ -1,100 +0,0 @@
1
- import { MySelect } from "@/components/Combobox/Select/MySelect";
2
- import { MyFlexEnd } from "@/components/Layouts/FlexEnd/MyFlexEnd";
3
- import { Button, Divider, Fieldset, Group, Modal, SimpleGrid, Space, Table, useModalsStack } from "@mantine/core";
4
- import { IconArrowBackUp, IconArrowBigLeft, IconArrowBigRight, IconSquareRoundedX } from "@tabler/icons-react";
5
- import { useS_ButtonImport } from "./useS_ButtonImport";
6
-
7
- interface SelectFieldModalProps {
8
- stack: ReturnType<typeof useModalsStack<"select-file-page" | "select-field-page" | "implement-page">>
9
- onImport: () => void
10
- }
11
- export function SelectFieldModal({ stack, onImport }: SelectFieldModalProps) {
12
- const store = useS_ButtonImport()
13
-
14
- return (
15
- <Modal fullScreen {...stack.register('select-field-page')} title="Import">
16
- <SimpleGrid cols={{ base: 1, lg: 2 }}>
17
- <Fieldset legend="Danh sách trường thông tin">
18
- <Table stickyHeader stickyHeaderOffset={60}>
19
- <Table.Thead bg={'cyan'}>
20
- <Table.Tr>
21
- <Table.Th>Mã field</Table.Th>
22
- <Table.Th>Tên field</Table.Th>
23
- </Table.Tr>
24
- </Table.Thead>
25
- <Table.Tbody>
26
- {store.state.fieldConfig?.filter(item => item.isSelected == false || item.isSelected == undefined).map((item, idx) => (
27
- <Table.Tr
28
- key={idx}
29
- style={{ cursor: "pointer" }}
30
- >
31
- <Table.Td onClick={() => store.changeSelected(item.fieldKey.toString(), true)}>{item.fieldKey.toString()}</Table.Td>
32
- <Table.Td onClick={() => store.changeSelected(item.fieldKey.toString(), true)}>{item.fieldName}</Table.Td>
33
- </Table.Tr>
34
- ))}
35
-
36
- </Table.Tbody>
37
- </Table>
38
- <Space />
39
-
40
- <Group>
41
- <Button
42
- onClick={() => { store.changeAllSelected(true) }}
43
- leftSection={<IconArrowBigRight />}
44
- >Chuyển tất cả</Button>
45
- </Group>
46
- </Fieldset>
47
-
48
- <Fieldset legend="Danh sách trường thông tin được chọn">
49
- <Table stickyHeader stickyHeaderOffset={60}>
50
- <Table.Thead>
51
- <Table.Tr>
52
- <Table.Th>Mã field</Table.Th>
53
- <Table.Th>Tên field</Table.Th>
54
- <Table.Th>Cột map</Table.Th>
55
- </Table.Tr>
56
- </Table.Thead>
57
- <Table.Tbody>
58
- {store.state.fieldConfig?.filter(item => item.isSelected == true).map((item, idx) => (
59
- <Table.Tr
60
- key={idx}
61
- style={{ cursor: "pointer" }}
62
- >
63
- <Table.Td onClick={() => store.changeSelected(item.fieldKey.toString(), false)}>{item.fieldKey.toString()}</Table.Td>
64
- <Table.Td onClick={() => store.changeSelected(item.fieldKey.toString(), false)}>{item.fieldName}</Table.Td>
65
- <Table.Td><MySelect data={store.state.title!} value={item.fieldToMap} onChange={(e) => store.setFieldToMap(item.fieldKey.toString(), e!)} /></Table.Td>
66
- </Table.Tr>
67
- ))}
68
- </Table.Tbody>
69
- </Table>
70
- <Space />
71
- <Button
72
- onClick={() => { store.changeAllSelected(false) }}
73
- leftSection={<IconArrowBigLeft />}
74
- >Chuyển tất cả về</Button>
75
- </Fieldset>
76
- </SimpleGrid>
77
- <Divider></Divider>
78
- <MyFlexEnd>
79
- <Button
80
- leftSection={<IconArrowBackUp />}
81
- onClick={() => stack.close("select-field-page")}
82
- color="gray.7">
83
- Quay lại
84
- </Button>
85
- <Button
86
- color="blue.8"
87
- leftSection={<IconArrowBigRight />}
88
- onClick={onImport}>
89
- Tiếp tục / Import
90
- </Button>
91
- <Button
92
- leftSection={<IconSquareRoundedX />}
93
- onClick={() => stack.closeAll()}
94
- color="red.6">
95
- Đóng
96
- </Button>
97
- </MyFlexEnd>
98
- </Modal >
99
- )
100
- }
@@ -1,81 +0,0 @@
1
- import { MyDataTable } from "@/components/DataDisplay/DataTable/MyDataTable";
2
- import { MyFlexEnd } from "@/components/Layouts/FlexEnd/MyFlexEnd";
3
- import { Button, Fieldset, FileInput, Modal, NumberInput, Select, SimpleGrid, useModalsStack } from "@mantine/core";
4
- import { IconArrowBigRight, IconSquareRoundedX } from "@tabler/icons-react";
5
- import { useS_ButtonImport } from "./useS_ButtonImport";
6
-
7
- export interface SelectFileModalProps {
8
- onExportStructure?: () => void
9
- stack: ReturnType<typeof useModalsStack<"select-file-page" | "select-field-page" | "implement-page">>
10
- }
11
-
12
- export function SelectFileModal({ onExportStructure, stack }: SelectFileModalProps) {
13
- const store = useS_ButtonImport()
14
- return (
15
- <Modal
16
- title="Import"
17
- fullScreen
18
- {...stack.register('select-file-page')}
19
- >
20
- <FileInput
21
- value={store.state.file}
22
- onChange={e => store.setProperty("file", e)}
23
- label="File dữ liệu"
24
- placeholder="Chọn file dữ liệu"
25
- clearable
26
- />
27
- <SimpleGrid cols={{ base: 1, md: 2, lg: 2, xl: 4 }}>
28
- <NumberInput
29
- label="Dòng tiêu đề bắt đầu từ"
30
- value={(store.state.startTitleIndex)}
31
- onChange={e => store.setProperty("startTitleIndex", e)}
32
- />
33
- <NumberInput
34
- label="Dòng dữ liệu bắt đầu từ"
35
- value={(store.state.startDataIndex)}
36
- onChange={e => store.setProperty("startDataIndex", e)}
37
- />
38
- <Select
39
- readOnly
40
- label="Định dạng số"
41
- data={["100.000"]}
42
- defaultValue={"100.000"}
43
- />
44
- <Select
45
- readOnly
46
- label="Định dạng ngày"
47
- data={["dd/MM/yyyy"]}
48
- defaultValue={"dd/MM/yyyy"}
49
- />
50
- </SimpleGrid>
51
- <Fieldset legend="Danh sách trường thông tin trong file dữ liệu">
52
- {store.state.data &&
53
- <MyDataTable
54
- columns={store.columns}
55
- data={store.state.data as any}
56
- />
57
- }
58
- </Fieldset>
59
- <MyFlexEnd>
60
- <Button
61
- color="teal.8"
62
- onClick={onExportStructure}>
63
- Xuất file cấu trúc
64
- </Button>
65
- <Button
66
- disabled={store.state.data?.length == 0}
67
- color="blue.8"
68
- leftSection={<IconArrowBigRight />}
69
- onClick={() => stack.open('select-field-page')}>
70
- Tiếp tục
71
- </Button>
72
- <Button
73
- color="red.6"
74
- leftSection={<IconSquareRoundedX />}
75
- onClick={stack.closeAll}>
76
- Đóng
77
- </Button>
78
- </MyFlexEnd>
79
- </Modal>
80
- )
81
- }
@@ -1,196 +0,0 @@
1
- import { createGenericStore } from "@/stores/CreateGenericStore";
2
- import { IUtils_Excel_ColumnConfig } from "@/utils/utils_excel";
3
- import { MRT_ColumnDef } from "mantine-react-table";
4
- import { useEffect, useMemo } from "react";
5
- import * as XLSX from 'xlsx';
6
-
7
- interface IFieldConfig extends IUtils_Excel_ColumnConfig<any> {
8
- isSelected?: boolean
9
- fieldToMap?: string
10
- }
11
-
12
- interface I {
13
- file?: File | null
14
- title?: string[]
15
- data?: any[]
16
- startTitleIndex?: string | number
17
- startDataIndex?: string | number
18
- fieldConfig?: IFieldConfig[]
19
- }
20
- const useStore = createGenericStore<I>({
21
- initialState: {
22
- data: [],
23
- title: [],
24
- startTitleIndex: 2,
25
- startDataIndex: 3,
26
- },
27
- })
28
-
29
- export function useS_ButtonImport() {
30
- const store = useStore()
31
-
32
- function autoMap() {
33
- if (!store.state.data || !store.state.data.length || !store.state.fieldConfig) return;
34
-
35
- const sampleRow = store.state.data[0];
36
-
37
- const updatedFieldConfig = store.state.fieldConfig.map((config) => {
38
- const matchingKey = Object.keys(sampleRow).find((key) =>
39
- key.toLowerCase().trim() === config.fieldKey.toString().toLowerCase().trim()
40
- );
41
-
42
- if (matchingKey) {
43
- return {
44
- ...config,
45
- fieldToMap: matchingKey,
46
- isSelected: true,
47
- };
48
- }
49
-
50
- return config;
51
- });
52
-
53
- store.setProperty("fieldConfig", updatedFieldConfig);
54
- }
55
-
56
- function getDataFinal<T>(): T[] {
57
- const finalData: T[] = [];
58
-
59
- store.state.data!.forEach((row) => {
60
- const rowData: Record<string, any> = {};
61
-
62
- store.state.fieldConfig!.forEach((colConfig) => {
63
- if (colConfig.isSelected) {
64
- const key = colConfig.fieldKey;
65
- const sourceKey = colConfig.fieldToMap || key;
66
-
67
- rowData[key as string] = row[sourceKey as string];
68
- }
69
- });
70
-
71
- finalData.push(rowData as T);
72
- });
73
-
74
- return finalData;
75
- }
76
-
77
- function changeAllSelected(isSelected: boolean) {
78
- store.setProperty("fieldConfig", store.state.fieldConfig?.map(item => ({
79
- ...item,
80
- isSelected
81
- })))
82
- }
83
-
84
- function changeSelected(fieldKey: string, isSelected: boolean) {
85
- if (!store.state.fieldConfig) {
86
- store.setProperty("fieldConfig", []);
87
- }
88
-
89
- const existingFieldConfigIndex = store.state.fieldConfig!.findIndex(
90
- config => config.fieldKey === fieldKey
91
- );
92
-
93
- if (existingFieldConfigIndex !== -1) {
94
- // Update existing field config
95
- const updatedFieldConfig = [...store.state.fieldConfig!];
96
- updatedFieldConfig[existingFieldConfigIndex] = {
97
- ...updatedFieldConfig[existingFieldConfigIndex],
98
- isSelected
99
- };
100
- store.setProperty("fieldConfig", updatedFieldConfig);
101
- } else {
102
- // Field config doesn't exist yet, find the field name from titles
103
- const fieldName = store.state.title?.find(title => title === fieldKey) || fieldKey;
104
-
105
- // Create new field config
106
- const updatedFieldConfig = [
107
- ...store.state.fieldConfig!,
108
- {
109
- fieldKey: fieldKey as any,
110
- fieldName,
111
- isSelected
112
- }
113
- ];
114
- store.setProperty("fieldConfig", updatedFieldConfig);
115
- }
116
- }
117
- function setFieldToMap(fieldKey: string, fieldToMap: string) {
118
- if (!store.state.fieldConfig) {
119
- store.setProperty("fieldConfig", []);
120
- }
121
-
122
- const existingFieldConfigIndex = store.state.fieldConfig!.findIndex(
123
- config => config.fieldKey === fieldKey
124
- );
125
-
126
- if (existingFieldConfigIndex !== -1) {
127
- // Update existing field config
128
- const updatedFieldConfig = [...store.state.fieldConfig!];
129
- updatedFieldConfig[existingFieldConfigIndex] = {
130
- ...updatedFieldConfig[existingFieldConfigIndex],
131
- fieldToMap
132
- };
133
- store.setProperty("fieldConfig", updatedFieldConfig);
134
- } else {
135
- // Field config doesn't exist yet, find the field name from titles
136
- const fieldName = store.state.title?.find(title => title === fieldKey) || fieldKey;
137
-
138
- // Create new field config
139
- const updatedFieldConfig = [
140
- ...store.state.fieldConfig!,
141
- {
142
- fieldKey: fieldKey as any,
143
- fieldName,
144
- fieldToMap
145
- }
146
- ];
147
- store.setProperty("fieldConfig", updatedFieldConfig);
148
- }
149
- }
150
-
151
- const columns = useMemo<MRT_ColumnDef<any>[]>(() => [
152
- ...(store.state.title?.map(item => ({
153
- header: item!,
154
- accessorKey: item!
155
- }) as MRT_ColumnDef<any>) || [])
156
- ], [store.state.title])
157
- useEffect(() => {
158
- if (store.state.file == null) {
159
- store.resetState()
160
- }
161
- // Handle file change
162
- if (!store.state.file) return
163
-
164
- const reader = new FileReader();
165
- reader.onload = (event) => {
166
- const binaryStr = event.target?.result;
167
- if (!binaryStr) return
168
-
169
- const workbook = XLSX.read(binaryStr, { type: 'binary' });
170
- const sheetName = workbook.SheetNames[0]; // Lấy tên sheet đầu tiên
171
- const sheet = workbook.Sheets[sheetName]; // Lấy sheet đầu tiên
172
-
173
- const dataBook = XLSX.utils.sheet_to_json(sheet, { header: 1 }) as any[][]
174
- const data = XLSX.utils.sheet_to_json(sheet, { range: 1 }) as any// Đọc dữ liệu dạng mảng 2D\
175
-
176
- if (data.lenght == 0) return
177
- store.setProperty("title", dataBook[1])
178
- store.setProperty("data", data)
179
- };
180
- reader.readAsArrayBuffer(store.state.file!);
181
- }, [store.state.file])
182
-
183
- useEffect(() => {
184
- if (store.state.data?.length == 0) return
185
- autoMap()
186
- }, [store.state.data])
187
- return {
188
- ...store,
189
- columns,
190
- changeSelected,
191
- setFieldToMap,
192
- getDataFinal,
193
- changeAllSelected,
194
- autoMap
195
- }
196
- }
@@ -1,71 +0,0 @@
1
- import { MyDataTable } from "@/components/DataDisplay/DataTable/MyDataTable";
2
- import { MyFlexColumn } from "@/components/Layouts/FlexColumn/MyFlexColumn";
3
- import { TYPES_MANTINE_SIZE } from "@/types/types";
4
- import { Button, ButtonProps, Fieldset, Modal } from "@mantine/core";
5
- import { useDisclosure } from "@mantine/hooks";
6
- import { MRT_ColumnDef, MRT_RowData, MRT_TableOptions } from "mantine-react-table";
7
-
8
- interface IAQSelectTableByOpenModal<TData extends MRT_RowData> extends Omit<MRT_TableOptions<TData>, "data">, Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "color" | "style">, ButtonProps {
9
- label?: string;
10
- listLabel?: string;
11
- title?: string;
12
- modalSize?: TYPES_MANTINE_SIZE;
13
- objectName?: string
14
- fullScreen?: boolean;
15
- setSelectedData: (data: any) => void;
16
- data?: any;
17
- columns: MRT_ColumnDef<TData>[];
18
- API?: string;
19
- closeAfterSelect?: boolean;
20
- }
21
-
22
- export function AQSelectTableByOpenModal<TData extends MRT_RowData>({
23
- setSelectedData,
24
- data,
25
- columns,
26
- API,
27
- modalSize,
28
- title,
29
- label,
30
- listLabel,
31
- objectName,
32
- fullScreen = false,
33
- closeAfterSelect = true,
34
- ...rest
35
- }: IAQSelectTableByOpenModal<TData>) {
36
- const disclosure = useDisclosure(false)
37
- return (
38
- <>
39
- <Button
40
- onClick={disclosure[1].open}
41
- {...rest}
42
- >
43
- {label ? label : `Chọn từ danh sách`}
44
- </Button>
45
- <Modal
46
- fullScreen={fullScreen}
47
- size={modalSize}
48
- title={title}
49
- opened={disclosure?.[0]}
50
- onClose={disclosure[1].close}
51
- >
52
- <MyFlexColumn>
53
- <Fieldset legend={listLabel ? listLabel : "Danh sách"}>
54
- <MyDataTable
55
- renderTopToolbarCustomActions={({ table }) => {
56
- return <Button onClick={() => {
57
- setSelectedData(table.getSelectedRowModel().rows.map((row) => row.original))
58
- closeAfterSelect && disclosure[1].close()
59
- }}>Chọn</Button>
60
- }}
61
- enableRowSelection
62
- data={data!}
63
- columns={columns}
64
- {...rest}
65
- />
66
- </Fieldset>
67
- </MyFlexColumn>
68
- </Modal>
69
- </>
70
- )
71
- }
@@ -1,117 +0,0 @@
1
- import { MyFlexColumn } from "@/components/Layouts/FlexColumn/MyFlexColumn";
2
- import { TYPES_CRUD, TYPES_MANTINE_SIZE } from "@/types/types";
3
-
4
- import { Button, ButtonProps, Modal } from "@mantine/core";
5
- import { useDisclosure } from "@mantine/hooks";
6
- import { IconEdit, IconPlus, IconTrash } from "@tabler/icons-react";
7
- import { ReactNode } from "react";
8
-
9
- interface IMyButtonModal extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "color" | "style">, ButtonProps {
10
- label?: string;
11
- title?: string;
12
- children?: ReactNode;
13
- crudType?: TYPES_CRUD;
14
- modalSize?: TYPES_MANTINE_SIZE;
15
- objectName?: string
16
- disclosure: ReturnType<typeof useDisclosure>;
17
- fullScreen?: boolean;
18
- }
19
-
20
- export function MyButtonModal({
21
- fullScreen = false,
22
- crudType = "default",
23
- disclosure,
24
- modalSize,
25
- title,
26
- label,
27
- children,
28
- objectName = "",
29
- ...rest
30
- }: IMyButtonModal) {
31
- const objectNameLower = objectName?.toLowerCase()
32
- if (crudType == "default") {
33
- return (
34
- <>
35
- <Button onClick={disclosure?.[1].open} color="indigo" {...rest}>
36
- {label}
37
- </Button>
38
- <Modal
39
- fullScreen={fullScreen}
40
- size={modalSize}
41
- title={title}
42
- opened={disclosure?.[0]}
43
- onClose={disclosure[1].close}>
44
- <MyFlexColumn>{children}</MyFlexColumn>
45
- </Modal>
46
- </>
47
- );
48
- }
49
- if (crudType == "create") {
50
- return (
51
- <>
52
- <Button onClick={disclosure?.[1].open} leftSection={<IconPlus />} {...rest}>
53
- {label ? label : `Thêm`}
54
- </Button>
55
- <Modal
56
- fullScreen={fullScreen}
57
- size={modalSize}
58
- title={title ? title : `Tạo ${objectNameLower} mới`}
59
- opened={disclosure?.[0]}
60
- onClose={disclosure[1].close}>
61
- <MyFlexColumn>{children}</MyFlexColumn>
62
- </Modal>
63
- </>
64
- );
65
- }
66
- if (crudType == "createMultiple") {
67
- return (
68
- <>
69
- <Button onClick={disclosure?.[1].open} color="green" leftSection={<IconPlus />} {...rest}>
70
- {label ? label : `Import ${objectNameLower}`}
71
- </Button>
72
- <Modal
73
- fullScreen={fullScreen}
74
- size={modalSize}
75
- title={title ? title : `Thêm danh sách ${objectNameLower}`}
76
- opened={disclosure?.[0]}
77
- onClose={disclosure[1].close}>
78
- <MyFlexColumn>{children}</MyFlexColumn>
79
- </Modal>
80
- </>
81
- );
82
- }
83
- if (crudType == "update") {
84
- return (
85
- <>
86
- <Button onClick={disclosure?.[1].open} color="yellow" leftSection={<IconEdit />} {...rest}>
87
- {label ? label : `Chỉnh sửa ${objectNameLower}`}
88
- </Button>
89
- <Modal
90
- fullScreen={fullScreen}
91
- size={modalSize}
92
- title={title ? title : `Chỉnh sửa ${objectNameLower}`}
93
- opened={disclosure?.[0]}
94
- onClose={disclosure[1].close}>
95
- <MyFlexColumn>{children}</MyFlexColumn>
96
- </Modal>
97
- </>
98
- );
99
- }
100
- if (crudType == "delete") {
101
- return (
102
- <>
103
- <Button onClick={disclosure?.[1].open} color="red" leftSection={<IconTrash />} {...rest}>
104
- {label ? label : `Xóa ${objectNameLower}`}
105
- </Button>
106
- <Modal
107
- fullScreen={fullScreen}
108
- size={modalSize}
109
- title={title ? title : `Xóa ${objectNameLower}`}
110
- opened={disclosure?.[0]}
111
- onClose={disclosure[1].close}>
112
- <MyFlexColumn>{children}</MyFlexColumn>
113
- </Modal>
114
- </>
115
- );
116
- }
117
- }
@@ -1,37 +0,0 @@
1
- "use client";
2
- import { ReactNode, useRef } from "react";
3
- import { Button, ButtonProps } from "@mantine/core";
4
- import { IconPrinter } from "@tabler/icons-react";
5
- import { useReactToPrint } from "react-to-print";
6
-
7
- interface I extends ButtonProps {
8
- contentToPrint?: ReactNode; // nội dung HTML để in
9
- children?: ReactNode;
10
- }
11
-
12
- export function MyButtonPrintPDF({ contentToPrint, children, ...rest }: I) {
13
- const printRef = useRef<HTMLDivElement>(null);
14
-
15
- const handlePrint = useReactToPrint({
16
- // Sử dụng documentTitle thay vì content
17
- documentTitle: "In nội dung",
18
- // Sử dụng contentRef thay vì content
19
- contentRef: printRef,
20
- });
21
-
22
- function handleClick() {
23
- if (!contentToPrint) return;
24
- handlePrint();
25
- }
26
-
27
- return (
28
- <>
29
- <div style={{ display: "none" }}>
30
- <div ref={printRef}>{contentToPrint}</div>
31
- </div>
32
- <Button color="orange" onClick={handleClick} leftSection={<IconPrinter />} {...rest}>
33
- {children}
34
- </Button>
35
- </>
36
- );
37
- }