@sarafapp/iron_core 1.0.62 → 1.0.64

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 (321) hide show
  1. package/dist/IronCore.js +18 -8
  2. package/dist/IronCore.umd.cjs +1 -1
  3. package/dist/core/index.d.ts +31 -0
  4. package/dist/{src → core/src}/BaseModel.d.ts +4 -4
  5. package/dist/core/src/baseForm/UseForm.d.ts +18 -0
  6. package/dist/{src → core/src}/baseTable/BaseTable.d.ts +3 -2
  7. package/dist/{src → core/src}/baseTable/Constants.d.ts +4 -3
  8. package/dist/{src → core/src}/baseTable/SelectableTable.d.ts +2 -2
  9. package/dist/{src → core/src}/baseTable/generator/SelectableTableGenerator.d.ts +3 -3
  10. package/dist/{src → core/src}/baseTable/moduleConnection/Table.d.ts +1 -1
  11. package/dist/{src → core/src}/baseTable/moduleConnection/generator/GColumn.d.ts +1 -1
  12. package/dist/{src → core/src}/composables/UseCrud.d.ts +4 -4
  13. package/dist/{src → core/src}/composables/UseData.d.ts +4 -3
  14. package/dist/core/src/composables/UseLoadingStatus.d.ts +15 -0
  15. package/dist/{src → core/src}/composables/UseParams.d.ts +3 -1
  16. package/dist/core/src/composables/UseRepository.d.ts +67 -0
  17. package/dist/core/src/composables/UseStaticTableService.d.ts +5 -0
  18. package/dist/{src → core/src}/crudService/CrudService.d.ts +8 -8
  19. package/dist/{src → core/src}/dateHandling/Converter.d.ts +1 -1
  20. package/dist/{src → core/src}/httpClient/ErrorHandlerRegistry.d.ts +1 -1
  21. package/dist/{src → core/src}/json/JsonMapper.d.ts +1 -1
  22. package/dist/core/src/layout/DialogService.d.ts +406 -0
  23. package/dist/core/src/layout/DrawerService.d.ts +14 -0
  24. package/dist/{src → core/src}/lib/Formatter.d.ts +1 -1
  25. package/dist/{src → core/src}/lib/Util.d.ts +2 -1
  26. package/dist/core/vite.config.d.ts +2 -0
  27. package/dist/example-vue/src/AntTableConfig.d.ts +6 -0
  28. package/dist/example-vue/src/TableService.d.ts +12 -0
  29. package/dist/example-vue/src/TextCell.vue.d.ts +5 -0
  30. package/dist/example-vue/src/app/App.vue.d.ts +2 -0
  31. package/dist/example-vue/src/app/router/index.d.ts +1 -0
  32. package/dist/example-vue/src/app/screens/Index.vue.d.ts +2 -0
  33. package/dist/example-vue/src/main.d.ts +0 -0
  34. package/dist/example-vue/vite.config.d.ts +2 -0
  35. package/dist/index.d.ts +2 -31
  36. package/index.ts +37 -0
  37. package/package.json +2 -5
  38. package/src/BaseModel.ts +127 -0
  39. package/src/Utils.ts +16 -0
  40. package/src/accessHandling/AccessControl.ts +33 -0
  41. package/src/accessHandling/AccessLevel.ts +52 -0
  42. package/src/accessHandling/Accessible.ts +3 -0
  43. package/src/accessHandling/EveryDirectiveAccess.ts +7 -0
  44. package/src/accessHandling/SSO/AuthorizationDirective.ts +65 -0
  45. package/src/accessHandling/SSO/AuthorizationService.ts +74 -0
  46. package/src/accessHandling/SSO/EveryLevelAuthorizationDirective.ts +7 -0
  47. package/src/accessHandling/SSO/SomeLevelsAuthorizationDirective.ts +7 -0
  48. package/src/accessHandling/SomeDirectiveAccess.ts +7 -0
  49. package/src/accessHandling/index.ts +9 -0
  50. package/src/baseDirective/BeforeMountDirective.ts +3 -0
  51. package/src/baseDirective/BeforeUnMountDirective.ts +3 -0
  52. package/src/baseDirective/BeforeUpdateDirective.ts +3 -0
  53. package/src/baseDirective/CreatedDirective.ts +3 -0
  54. package/src/baseDirective/MountedDirective.ts +3 -0
  55. package/src/baseDirective/UnMountedDirective.ts +3 -0
  56. package/src/baseDirective/UpdateDirective.ts +3 -0
  57. package/src/baseDirective/index.ts +7 -0
  58. package/src/baseForm/BaseRequestBodyFilter.ts +7 -0
  59. package/src/baseForm/FormManager.ts +95 -0
  60. package/src/baseForm/InputControl.ts +182 -0
  61. package/src/baseForm/InputControlBuilder.ts +59 -0
  62. package/src/baseForm/InputControlData.ts +16 -0
  63. package/src/baseForm/RequestBodyFilter.ts +3 -0
  64. package/src/baseForm/TouchSensitiveForm.ts +47 -0
  65. package/src/baseForm/UseForm.ts +32 -0
  66. package/src/baseForm/index.ts +8 -0
  67. package/src/baseSchedule/Schedule.ts +3 -0
  68. package/src/baseSchedule/Scheduler.ts +29 -0
  69. package/src/baseSchedule/index.ts +2 -0
  70. package/src/baseTable/BaseTable.ts +162 -0
  71. package/src/baseTable/Constants.ts +26 -0
  72. package/src/baseTable/OnDestory.ts +3 -0
  73. package/src/baseTable/RowActionSource.ts +5 -0
  74. package/src/baseTable/RowClick.ts +3 -0
  75. package/src/baseTable/RowDoubleClick.ts +3 -0
  76. package/src/baseTable/RowMetaClick.ts +3 -0
  77. package/src/baseTable/SelectableTable.ts +86 -0
  78. package/src/baseTable/TableAction.ts +10 -0
  79. package/src/baseTable/TableHeaderSchema.ts +44 -0
  80. package/src/baseTable/TableLoader.ts +3 -0
  81. package/src/baseTable/TablePaginate.ts +3 -0
  82. package/src/baseTable/TableService.ts +10 -0
  83. package/src/baseTable/TableSort.ts +5 -0
  84. package/src/baseTable/TableSummarySchema.ts +11 -0
  85. package/src/baseTable/generator/SelectableTableGenerator.ts +65 -0
  86. package/src/baseTable/generator/TableCellComponentRegistry.ts +15 -0
  87. package/src/baseTable/generator/TableConfig.ts +18 -0
  88. package/src/baseTable/generator/TableGenerator.ts +147 -0
  89. package/src/baseTable/generator/TableSource.ts +34 -0
  90. package/src/baseTable/index.ts +43 -0
  91. package/src/baseTable/moduleConnection/Action.ts +12 -0
  92. package/src/baseTable/moduleConnection/Column.ts +11 -0
  93. package/src/baseTable/moduleConnection/Table.ts +49 -0
  94. package/src/baseTable/moduleConnection/TableDestroy.ts +7 -0
  95. package/src/baseTable/moduleConnection/TableRowClick.ts +7 -0
  96. package/src/baseTable/moduleConnection/generator/GColumn.ts +10 -0
  97. package/src/baseTable/moduleConnection/generator/GTable.ts +11 -0
  98. package/src/composables/UseCrud.ts +53 -0
  99. package/src/composables/UseData.ts +70 -0
  100. package/src/composables/UseLoadingStatus.ts +65 -0
  101. package/src/composables/UseParams.ts +93 -0
  102. package/src/composables/UseRepository.ts +207 -0
  103. package/src/composables/UseState.ts +30 -0
  104. package/src/composables/UseStaticTableService.ts +45 -0
  105. package/src/composables/index.ts +7 -0
  106. package/src/constants/Constants.ts +126 -0
  107. package/src/constants/index.ts +19 -0
  108. package/src/crudService/CrudService.ts +121 -0
  109. package/src/crudService/index.ts +1 -0
  110. package/src/dateHandling/Constants.ts +5 -0
  111. package/src/dateHandling/Converter.ts +15 -0
  112. package/src/dateHandling/JalaliDateSetup.ts +42 -0
  113. package/src/dateHandling/Model.ts +27 -0
  114. package/src/dateHandling/Utils.ts +49 -0
  115. package/src/dateHandling/index.ts +5 -0
  116. package/src/debounce/DebounceAction.ts +4 -0
  117. package/src/debounce/DebounceService.ts +27 -0
  118. package/src/debounce/index.ts +2 -0
  119. package/src/deviceManagement/Constants.ts +4 -0
  120. package/src/deviceManagement/Visibility.ts +4 -0
  121. package/src/deviceManagement/VisibilityManager.ts +18 -0
  122. package/src/deviceManagement/index.ts +3 -0
  123. package/src/errorHandling/ErrorHandler.ts +3 -0
  124. package/src/errorHandling/HandleError.ts +20 -0
  125. package/src/errorHandling/index.ts +2 -0
  126. package/src/eventSystem/CustomEventDispatcher.ts +13 -0
  127. package/src/eventSystem/Model.ts +29 -0
  128. package/src/eventSystem/OnEvent.ts +25 -0
  129. package/src/eventSystem/index.ts +3 -0
  130. package/src/feedbackHandling/FailureFeedback.ts +3 -0
  131. package/src/feedbackHandling/Feedback.ts +34 -0
  132. package/src/feedbackHandling/HandleFeedback.ts +28 -0
  133. package/src/feedbackHandling/InfoFeedback.ts +3 -0
  134. package/src/feedbackHandling/SuccessFeedback.ts +3 -0
  135. package/src/feedbackHandling/WarningFeedback.ts +3 -0
  136. package/src/feedbackHandling/index.ts +6 -0
  137. package/src/httpClient/ApiBuilder.ts +57 -0
  138. package/src/httpClient/ErrorHandlerRegistry.ts +29 -0
  139. package/src/httpClient/HttpClient.ts +77 -0
  140. package/src/httpClient/Interceptor.ts +5 -0
  141. package/src/httpClient/index.ts +4 -0
  142. package/src/initializer/ApplicationInitializer.ts +15 -0
  143. package/src/initializer/Initializer.ts +3 -0
  144. package/src/initializer/index.ts +2 -0
  145. package/src/json/JsonMapper.ts +48 -0
  146. package/src/json/index.ts +1 -0
  147. package/src/layout/Constants.ts +11 -0
  148. package/src/layout/DialogService.ts +75 -0
  149. package/src/layout/DrawerService.ts +25 -0
  150. package/src/layout/Toast.ts +14 -0
  151. package/src/layout/index.ts +4 -0
  152. package/src/lib/Constants.ts +433 -0
  153. package/src/lib/Formatter.ts +68 -0
  154. package/src/lib/Util.ts +113 -0
  155. package/src/lib/index.ts +3 -0
  156. package/src/observables/AbstractSubject.ts +21 -0
  157. package/src/observables/BehaviorSubject.ts +58 -0
  158. package/src/observables/Observer.ts +3 -0
  159. package/src/observables/Subject.ts +9 -0
  160. package/src/observables/index.ts +4 -0
  161. package/src/process/Proccess.ts +21 -0
  162. package/src/process/ProcessManager.ts +31 -0
  163. package/src/process/index.ts +2 -0
  164. package/src/repository/Params.ts +10 -0
  165. package/src/repository/Repository.ts +44 -0
  166. package/src/repository/SyncDetail.ts +8 -0
  167. package/src/repository/index.ts +4 -0
  168. package/src/repository/model.ts +9 -0
  169. package/src/routeGuard/RouteGuard.ts +38 -0
  170. package/src/routeGuard/index.ts +1 -0
  171. package/src/search/client/ClientArraySearch.ts +25 -0
  172. package/src/search/client/ClientSearch.ts +3 -0
  173. package/src/search/index.ts +2 -0
  174. package/src/sort/SortDetail.ts +11 -0
  175. package/src/sort/client/Sorter.ts +28 -0
  176. package/src/sort/index.ts +4 -0
  177. package/src/sort/strategies/SimpleSort.ts +35 -0
  178. package/src/sort/strategies/SortStrategy.ts +4 -0
  179. package/src/types/Global.ts +1 -0
  180. package/src/types/index.ts +1 -0
  181. package/src/validators/Validator.ts +5 -0
  182. package/src/validators/index.ts +1 -0
  183. package/src/webSocket/Constants.ts +6 -0
  184. package/src/webSocket/Model.ts +16 -0
  185. package/src/webSocket/WebSocketService.ts +153 -0
  186. package/src/webSocket/index.ts +3 -0
  187. package/vite.config.ts +55 -0
  188. package/dist/src/baseForm/UseForm.d.ts +0 -5
  189. package/dist/src/composables/UseLoadingStatus.d.ts +0 -15
  190. package/dist/src/composables/UseRepository.d.ts +0 -63
  191. package/dist/src/composables/UseStaticTableService.d.ts +0 -4
  192. package/dist/src/layout/DialogService.d.ts +0 -1
  193. package/dist/src/layout/DrawerService.d.ts +0 -1
  194. package/dist/vite.config.d.ts +0 -2
  195. /package/dist/{src → core/src}/Utils.d.ts +0 -0
  196. /package/dist/{src → core/src}/accessHandling/AccessControl.d.ts +0 -0
  197. /package/dist/{src → core/src}/accessHandling/AccessLevel.d.ts +0 -0
  198. /package/dist/{src → core/src}/accessHandling/Accessible.d.ts +0 -0
  199. /package/dist/{src → core/src}/accessHandling/EveryDirectiveAccess.d.ts +0 -0
  200. /package/dist/{src → core/src}/accessHandling/SSO/AuthorizationDirective.d.ts +0 -0
  201. /package/dist/{src → core/src}/accessHandling/SSO/AuthorizationService.d.ts +0 -0
  202. /package/dist/{src → core/src}/accessHandling/SSO/EveryLevelAuthorizationDirective.d.ts +0 -0
  203. /package/dist/{src → core/src}/accessHandling/SSO/SomeLevelsAuthorizationDirective.d.ts +0 -0
  204. /package/dist/{src → core/src}/accessHandling/SomeDirectiveAccess.d.ts +0 -0
  205. /package/dist/{src → core/src}/accessHandling/index.d.ts +0 -0
  206. /package/dist/{src → core/src}/baseDirective/BeforeMountDirective.d.ts +0 -0
  207. /package/dist/{src → core/src}/baseDirective/BeforeUnMountDirective.d.ts +0 -0
  208. /package/dist/{src → core/src}/baseDirective/BeforeUpdateDirective.d.ts +0 -0
  209. /package/dist/{src → core/src}/baseDirective/CreatedDirective.d.ts +0 -0
  210. /package/dist/{src → core/src}/baseDirective/MountedDirective.d.ts +0 -0
  211. /package/dist/{src → core/src}/baseDirective/UnMountedDirective.d.ts +0 -0
  212. /package/dist/{src → core/src}/baseDirective/UpdateDirective.d.ts +0 -0
  213. /package/dist/{src → core/src}/baseDirective/index.d.ts +0 -0
  214. /package/dist/{src → core/src}/baseForm/BaseRequestBodyFilter.d.ts +0 -0
  215. /package/dist/{src → core/src}/baseForm/FormManager.d.ts +0 -0
  216. /package/dist/{src → core/src}/baseForm/InputControl.d.ts +0 -0
  217. /package/dist/{src → core/src}/baseForm/InputControlBuilder.d.ts +0 -0
  218. /package/dist/{src → core/src}/baseForm/InputControlData.d.ts +0 -0
  219. /package/dist/{src → core/src}/baseForm/RequestBodyFilter.d.ts +0 -0
  220. /package/dist/{src → core/src}/baseForm/TouchSensitiveForm.d.ts +0 -0
  221. /package/dist/{src → core/src}/baseForm/index.d.ts +0 -0
  222. /package/dist/{src → core/src}/baseSchedule/Schedule.d.ts +0 -0
  223. /package/dist/{src → core/src}/baseSchedule/Scheduler.d.ts +0 -0
  224. /package/dist/{src → core/src}/baseSchedule/index.d.ts +0 -0
  225. /package/dist/{src → core/src}/baseTable/OnDestory.d.ts +0 -0
  226. /package/dist/{src → core/src}/baseTable/RowActionSource.d.ts +0 -0
  227. /package/dist/{src → core/src}/baseTable/RowClick.d.ts +0 -0
  228. /package/dist/{src → core/src}/baseTable/RowDoubleClick.d.ts +0 -0
  229. /package/dist/{src → core/src}/baseTable/RowMetaClick.d.ts +0 -0
  230. /package/dist/{src → core/src}/baseTable/TableAction.d.ts +0 -0
  231. /package/dist/{src → core/src}/baseTable/TableHeaderSchema.d.ts +0 -0
  232. /package/dist/{src → core/src}/baseTable/TableLoader.d.ts +0 -0
  233. /package/dist/{src → core/src}/baseTable/TablePaginate.d.ts +0 -0
  234. /package/dist/{src → core/src}/baseTable/TableService.d.ts +0 -0
  235. /package/dist/{src → core/src}/baseTable/TableSort.d.ts +0 -0
  236. /package/dist/{src → core/src}/baseTable/TableSummarySchema.d.ts +0 -0
  237. /package/dist/{src → core/src}/baseTable/generator/TableCellComponentRegistry.d.ts +0 -0
  238. /package/dist/{src → core/src}/baseTable/generator/TableConfig.d.ts +0 -0
  239. /package/dist/{src → core/src}/baseTable/generator/TableGenerator.d.ts +0 -0
  240. /package/dist/{src → core/src}/baseTable/generator/TableSource.d.ts +0 -0
  241. /package/dist/{src → core/src}/baseTable/index.d.ts +0 -0
  242. /package/dist/{src → core/src}/baseTable/moduleConnection/Action.d.ts +0 -0
  243. /package/dist/{src → core/src}/baseTable/moduleConnection/Column.d.ts +0 -0
  244. /package/dist/{src → core/src}/baseTable/moduleConnection/TableDestroy.d.ts +0 -0
  245. /package/dist/{src → core/src}/baseTable/moduleConnection/TableRowClick.d.ts +0 -0
  246. /package/dist/{src → core/src}/baseTable/moduleConnection/generator/GTable.d.ts +0 -0
  247. /package/dist/{src → core/src}/composables/UseState.d.ts +0 -0
  248. /package/dist/{src → core/src}/composables/index.d.ts +0 -0
  249. /package/dist/{src → core/src}/constants/Constants.d.ts +0 -0
  250. /package/dist/{src → core/src}/constants/index.d.ts +0 -0
  251. /package/dist/{src → core/src}/crudService/index.d.ts +0 -0
  252. /package/dist/{src → core/src}/dateHandling/Constants.d.ts +0 -0
  253. /package/dist/{src → core/src}/dateHandling/JalaliDateSetup.d.ts +0 -0
  254. /package/dist/{src → core/src}/dateHandling/Model.d.ts +0 -0
  255. /package/dist/{src → core/src}/dateHandling/Utils.d.ts +0 -0
  256. /package/dist/{src → core/src}/dateHandling/index.d.ts +0 -0
  257. /package/dist/{src → core/src}/debounce/DebounceAction.d.ts +0 -0
  258. /package/dist/{src → core/src}/debounce/DebounceService.d.ts +0 -0
  259. /package/dist/{src → core/src}/debounce/index.d.ts +0 -0
  260. /package/dist/{src → core/src}/deviceManagement/Constants.d.ts +0 -0
  261. /package/dist/{src → core/src}/deviceManagement/Visibility.d.ts +0 -0
  262. /package/dist/{src → core/src}/deviceManagement/VisibilityManager.d.ts +0 -0
  263. /package/dist/{src → core/src}/deviceManagement/index.d.ts +0 -0
  264. /package/dist/{src → core/src}/errorHandling/ErrorHandler.d.ts +0 -0
  265. /package/dist/{src → core/src}/errorHandling/HandleError.d.ts +0 -0
  266. /package/dist/{src → core/src}/errorHandling/index.d.ts +0 -0
  267. /package/dist/{src → core/src}/eventSystem/CustomEventDispatcher.d.ts +0 -0
  268. /package/dist/{src → core/src}/eventSystem/Model.d.ts +0 -0
  269. /package/dist/{src → core/src}/eventSystem/OnEvent.d.ts +0 -0
  270. /package/dist/{src → core/src}/eventSystem/index.d.ts +0 -0
  271. /package/dist/{src → core/src}/feedbackHandling/FailureFeedback.d.ts +0 -0
  272. /package/dist/{src → core/src}/feedbackHandling/Feedback.d.ts +0 -0
  273. /package/dist/{src → core/src}/feedbackHandling/HandleFeedback.d.ts +0 -0
  274. /package/dist/{src → core/src}/feedbackHandling/InfoFeedback.d.ts +0 -0
  275. /package/dist/{src → core/src}/feedbackHandling/SuccessFeedback.d.ts +0 -0
  276. /package/dist/{src → core/src}/feedbackHandling/WarningFeedback.d.ts +0 -0
  277. /package/dist/{src → core/src}/feedbackHandling/index.d.ts +0 -0
  278. /package/dist/{src → core/src}/httpClient/ApiBuilder.d.ts +0 -0
  279. /package/dist/{src → core/src}/httpClient/HttpClient.d.ts +0 -0
  280. /package/dist/{src → core/src}/httpClient/Interceptor.d.ts +0 -0
  281. /package/dist/{src → core/src}/httpClient/index.d.ts +0 -0
  282. /package/dist/{src → core/src}/initializer/ApplicationInitializer.d.ts +0 -0
  283. /package/dist/{src → core/src}/initializer/Initializer.d.ts +0 -0
  284. /package/dist/{src → core/src}/initializer/index.d.ts +0 -0
  285. /package/dist/{src → core/src}/json/index.d.ts +0 -0
  286. /package/dist/{src → core/src}/layout/Constants.d.ts +0 -0
  287. /package/dist/{src → core/src}/layout/Toast.d.ts +0 -0
  288. /package/dist/{src → core/src}/layout/index.d.ts +0 -0
  289. /package/dist/{src → core/src}/lib/Constants.d.ts +0 -0
  290. /package/dist/{src → core/src}/lib/index.d.ts +0 -0
  291. /package/dist/{src → core/src}/observables/AbstractSubject.d.ts +0 -0
  292. /package/dist/{src → core/src}/observables/BehaviorSubject.d.ts +0 -0
  293. /package/dist/{src → core/src}/observables/Observer.d.ts +0 -0
  294. /package/dist/{src → core/src}/observables/Subject.d.ts +0 -0
  295. /package/dist/{src → core/src}/observables/index.d.ts +0 -0
  296. /package/dist/{src → core/src}/process/Proccess.d.ts +0 -0
  297. /package/dist/{src → core/src}/process/ProcessManager.d.ts +0 -0
  298. /package/dist/{src → core/src}/process/index.d.ts +0 -0
  299. /package/dist/{src → core/src}/repository/Params.d.ts +0 -0
  300. /package/dist/{src → core/src}/repository/Repository.d.ts +0 -0
  301. /package/dist/{src → core/src}/repository/SyncDetail.d.ts +0 -0
  302. /package/dist/{src → core/src}/repository/index.d.ts +0 -0
  303. /package/dist/{src → core/src}/repository/model.d.ts +0 -0
  304. /package/dist/{src → core/src}/routeGuard/RouteGuard.d.ts +0 -0
  305. /package/dist/{src → core/src}/routeGuard/index.d.ts +0 -0
  306. /package/dist/{src → core/src}/search/client/ClientArraySearch.d.ts +0 -0
  307. /package/dist/{src → core/src}/search/client/ClientSearch.d.ts +0 -0
  308. /package/dist/{src → core/src}/search/index.d.ts +0 -0
  309. /package/dist/{src → core/src}/sort/SortDetail.d.ts +0 -0
  310. /package/dist/{src → core/src}/sort/client/Sorter.d.ts +0 -0
  311. /package/dist/{src → core/src}/sort/index.d.ts +0 -0
  312. /package/dist/{src → core/src}/sort/strategies/SimpleSort.d.ts +0 -0
  313. /package/dist/{src → core/src}/sort/strategies/SortStrategy.d.ts +0 -0
  314. /package/dist/{src → core/src}/types/Global.d.ts +0 -0
  315. /package/dist/{src → core/src}/types/index.d.ts +0 -0
  316. /package/dist/{src → core/src}/validators/Validator.d.ts +0 -0
  317. /package/dist/{src → core/src}/validators/index.d.ts +0 -0
  318. /package/dist/{src → core/src}/webSocket/Constants.d.ts +0 -0
  319. /package/dist/{src → core/src}/webSocket/Model.d.ts +0 -0
  320. /package/dist/{src → core/src}/webSocket/WebSocketService.d.ts +0 -0
  321. /package/dist/{src → core/src}/webSocket/index.d.ts +0 -0
@@ -0,0 +1,10 @@
1
+ import type { Accessible } from "../accessHandling";
2
+
3
+ export interface TableAction<Model> extends Accessible {
4
+ readonly actionName: string;
5
+ handler(row: Model): Promise<void>;
6
+ }
7
+
8
+ export interface ActionDecorator<Model> extends TableAction<Model> {
9
+ isAvailable(model: Model): boolean
10
+ }
@@ -0,0 +1,44 @@
1
+ import {
2
+ CellType,
3
+ HeaderType,
4
+ LoadingStatus,
5
+ SortOrder,
6
+ TableHeaderAlign,
7
+ } from "../constants";
8
+ import { TABLE_COLUMN_DEFAULT_VALUES } from "./Constants";
9
+ import type { Accessible } from "../accessHandling";
10
+
11
+ export interface TableHeaderSchema<Model> extends Accessible {
12
+ path?: keyof Model;
13
+ title: string;
14
+ getProps?: (row: Model) => Record<string, unknown>;
15
+ key: keyof Model;
16
+ cellType?: CellType | string;
17
+ align?: TableHeaderAlign;
18
+ headerType?: HeaderType;
19
+ colspan?: number;
20
+ width?: string | number;
21
+ ellipsis?: boolean;
22
+ maxWidth?: number;
23
+ minWidth?: number;
24
+ resizable?: boolean;
25
+ sortOrder?: SortOrder;
26
+ sorter?: boolean;
27
+ }
28
+
29
+ export interface TableRenderingData<Model> {
30
+ totalItems: number;
31
+ currentPage: number;
32
+ rows: Model[];
33
+ loadingStatus: Set<LoadingStatus>;
34
+ currentPageItems: Model[];
35
+ }
36
+
37
+ export function generateHeader<Model>(
38
+ header: TableHeaderSchema<Model>,
39
+ ): TableHeaderSchema<Model> {
40
+ return {
41
+ ...TABLE_COLUMN_DEFAULT_VALUES,
42
+ ...header,
43
+ };
44
+ }
@@ -0,0 +1,3 @@
1
+ export interface TableLoader<Model> {
2
+ loadRows(): Promise<Model>;
3
+ }
@@ -0,0 +1,3 @@
1
+ export interface TablePaginate {
2
+ handlePagination(nextPage: number, pageSize: number): Promise<void>;
3
+ }
@@ -0,0 +1,10 @@
1
+ import { SortDetail } from "../sort";
2
+ import { FetchListResponse } from '../repository/model'
3
+ import type { TableRenderingData } from "./TableHeaderSchema";
4
+
5
+ export interface TableService<Model> {
6
+ fetchRows(): Promise<FetchListResponse<Model>>;
7
+ paginate(nextPage: number, pageSize: number): Promise<FetchListResponse<Model>>;
8
+ sort(sortDetail: SortDetail<Model>): Promise<FetchListResponse<Model>>;
9
+ getData(): TableRenderingData<Model>;
10
+ }
@@ -0,0 +1,5 @@
1
+ import { SortDetail } from "../sort";
2
+
3
+ export interface TableSort<Model> {
4
+ handleSort(sortDetail: SortDetail<Model>): Promise<void>;
5
+ }
@@ -0,0 +1,11 @@
1
+ import { type TableHeaderAlign } from "../constants";
2
+
3
+ export interface TableSummaryItem {
4
+ data: string | number;
5
+ align: TableHeaderAlign;
6
+ }
7
+
8
+ export interface TableSummarySchema {
9
+ summaryTitle: string;
10
+ summaryItems: TableSummaryItem[];
11
+ }
@@ -0,0 +1,65 @@
1
+ import { TableGenerator } from "./TableGenerator";
2
+ import { type TableSource } from "./TableSource";
3
+ import { BehaviorSubject } from "../../observables";
4
+
5
+ export class SelectableTableGenerator<T> extends TableGenerator<T> {
6
+ public selectedRows: BehaviorSubject<Map<number, T>> = new BehaviorSubject(
7
+ new Map(),
8
+ );
9
+
10
+ constructor(tableSource: TableSource<T>) {
11
+ super(tableSource);
12
+ this.selectRow = this.selectRow.bind(this);
13
+ this.selectAll = this.selectAll.bind(this);
14
+ this.isEveryRowSelected = this.isEveryRowSelected.bind(this);
15
+ this.clearAllSelectedItems = this.clearAllSelectedItems.bind(this);
16
+ this.getSelectedRowsAsArray = this.getSelectedRowsAsArray.bind(this);
17
+ this.getSelectedRowIds = this.getSelectedRowIds.bind(this);
18
+ }
19
+
20
+ public selectRow(row: T) {
21
+ const selectedRows = this.getSelectedRows();
22
+ if (selectedRows.has(row["id"])) {
23
+ selectedRows.delete(row["id"]);
24
+ this.selectedRows.next(this.selectedRows.getValue());
25
+ } else {
26
+ selectedRows.set(row["id"], row);
27
+ this.selectedRows.next(this.selectedRows.getValue());
28
+ }
29
+ }
30
+
31
+ public selectAll() {
32
+ if (this.isEveryRowSelected()) {
33
+ this.clearAllSelectedItems();
34
+ } else {
35
+ for (const row of this.rows.getValue()) {
36
+ this.selectedRows.getValue().set(row["id"], row);
37
+ this.selectedRows.next(this.selectedRows.getValue());
38
+ }
39
+ }
40
+ }
41
+
42
+ private isEveryRowSelected() {
43
+ return (
44
+ this.getSelectedRows().size === this.currentPageSize.getValue() ||
45
+ this.rows.getValue().length === this.getSelectedRows().size
46
+ );
47
+ }
48
+
49
+ public clearAllSelectedItems() {
50
+ this.getSelectedRows().clear();
51
+ this.selectedRows.next(this.selectedRows.getValue);
52
+ }
53
+
54
+ public getSelectedRows() {
55
+ return this.selectedRows.getValue();
56
+ }
57
+
58
+ public getSelectedRowsAsArray() {
59
+ return Array.from(this.selectedRows.getValue().values());
60
+ }
61
+
62
+ public getSelectedRowIds() {
63
+ return Array.from(this.selectedRows.getValue().keys());
64
+ }
65
+ }
@@ -0,0 +1,15 @@
1
+ import { type Initializer } from "../../initializer";
2
+
3
+ export abstract class TableCellComponentRegistry implements Initializer {
4
+ private registeredComponents: Map<string, unknown> = new Map();
5
+
6
+ public initialize(): void {
7
+ this.registerComponents();
8
+ }
9
+
10
+ protected abstract registerComponents(): void;
11
+
12
+ public getRegisteredComponents() {
13
+ return this.registeredComponents;
14
+ }
15
+ }
@@ -0,0 +1,18 @@
1
+ import { TableCellComponentRegistry } from "./TableCellComponentRegistry";
2
+
3
+ export class TableConfig {
4
+ private cellComponentRegistry: TableCellComponentRegistry;
5
+
6
+ constructor() {
7
+ this.setCellComponentRegistry = this.setCellComponentRegistry.bind(this);
8
+ this.getCellComponentRegistry = this.getCellComponentRegistry.bind(this);
9
+ }
10
+
11
+ public setCellComponentRegistry(registry: TableCellComponentRegistry) {
12
+ this.cellComponentRegistry = registry;
13
+ }
14
+
15
+ public getCellComponentRegistry() {
16
+ return this.cellComponentRegistry;
17
+ }
18
+ }
@@ -0,0 +1,147 @@
1
+ import { BehaviorSubject } from "../../observables";
2
+ import { SortDetail } from "../../sort";
3
+ import { SortOrder } from "../../constants";
4
+ import { type TableHeaderSchema } from "../TableHeaderSchema";
5
+ import { type Nullable } from "../../types";
6
+ import { type TableSummarySchema } from "../TableSummarySchema";
7
+ import { type TableSource } from "./TableSource";
8
+ import { type Accessible, AccessLevel } from "../../accessHandling";
9
+ import { type TableAction } from "../TableAction";
10
+
11
+ export class TableGenerator<T> {
12
+ public rows: BehaviorSubject<T[]> = new BehaviorSubject<T[]>([]);
13
+ public headerSchema: BehaviorSubject<TableHeaderSchema<T>[]> =
14
+ new BehaviorSubject([]);
15
+
16
+ public currentPage: BehaviorSubject<number> = new BehaviorSubject<number>(1);
17
+ public currentPageSize: BehaviorSubject<number> = new BehaviorSubject(20);
18
+ public totalItems: BehaviorSubject<number> = new BehaviorSubject<number>(0);
19
+ protected currentSortDetail: BehaviorSubject<SortDetail<T>> =
20
+ new BehaviorSubject<SortDetail<T>>(new SortDetail("id", SortOrder.DESC));
21
+
22
+ public scrollDetail: BehaviorSubject<
23
+ Nullable<boolean | { x?: number; y?: number }>
24
+ > = new BehaviorSubject(null);
25
+
26
+ public isExpandable: BehaviorSubject<boolean> = new BehaviorSubject(false);
27
+
28
+ protected tableSource: TableSource<T>;
29
+ protected accessService: AccessLevel;
30
+
31
+ constructor(tableSource: TableSource<T>) {
32
+ this.tableSource = tableSource;
33
+ this.accessService = AccessLevel.GetInstance();
34
+ this.load = this.load.bind(this);
35
+ this.paginate = this.paginate.bind(this);
36
+ this.shouldSendSortRequest = this.shouldSendSortRequest.bind(this);
37
+ this.sort = this.sort.bind(this);
38
+ this.handleClick = this.handleClick.bind(this);
39
+ this.handleMetaClick = this.handleMetaClick.bind(this);
40
+ this.handleDoubleClick = this.handleDoubleClick.bind(this);
41
+ this.hasAnyAction = this.hasAnyAction.bind(this);
42
+ this.loadSummarySchema = this.loadSummarySchema.bind(this);
43
+ this.filterItemsBaseOnAccessLevel =
44
+ this.filterItemsBaseOnAccessLevel.bind(this);
45
+ this.paginate = this.paginate.bind(this);
46
+ this.shouldSendPaginationRequest =
47
+ this.shouldSendPaginationRequest.bind(this);
48
+ this.getRowActions = this.getRowActions.bind(this);
49
+ this.onDestroy = this.onDestroy.bind(this);
50
+ }
51
+
52
+ public async load(): Promise<void> {
53
+ this.rows.next(await this.tableSource.loadRows());
54
+
55
+ this.headerSchema.next(
56
+ this.filterItemsBaseOnAccessLevel(
57
+ await this.tableSource.loadHeaderSchema(),
58
+ ),
59
+ );
60
+ }
61
+
62
+ public async paginate(nextPage: number, pageSize: number): Promise<void> {
63
+ if (!this.shouldSendPaginationRequest(nextPage, pageSize)) return;
64
+
65
+ this.currentPage.next(nextPage);
66
+ this.currentPageSize.next(pageSize);
67
+
68
+ this.rows.next(await this.tableSource.paginate(nextPage, pageSize));
69
+ }
70
+
71
+ private shouldSendPaginationRequest(
72
+ nextPage: number,
73
+ pageSize: number,
74
+ ): boolean {
75
+ return (
76
+ this.currentPage.getValue() !== nextPage ||
77
+ this.currentPageSize.getValue() !== pageSize
78
+ );
79
+ }
80
+
81
+ public async sort(sortDetail: SortDetail<T>) {
82
+ if (!this.shouldSendSortRequest(sortDetail)) return;
83
+ this.currentSortDetail.next(sortDetail);
84
+ this.rows.next(await this.tableSource.sort(sortDetail));
85
+ }
86
+
87
+ private shouldSendSortRequest(sortDetail: SortDetail<T>): boolean {
88
+ return (
89
+ sortDetail.key !== this.currentSortDetail.getValue().key ||
90
+ sortDetail.order !== this.currentSortDetail.getValue().order
91
+ );
92
+ }
93
+
94
+ public async handleClick(row: T): Promise<void> {
95
+ if (this.tableSource["onRowClick"]) {
96
+ await this.tableSource["onRowClick"](row);
97
+ }
98
+ }
99
+
100
+ public async handleMetaClick(row: T): Promise<void> {
101
+ if (this.tableSource["onRowMetaClick"]) {
102
+ await this.tableSource["onRowMetaClick"](row);
103
+ }
104
+ }
105
+
106
+ public async handleDoubleClick(row: T): Promise<void> {
107
+ if (this.tableSource["onRowDoubleClick"]) {
108
+ await this.tableSource["onRowDoubleClick"](row);
109
+ }
110
+ }
111
+
112
+ public hasAnyAction() {
113
+ for (const row of this.rows.getValue()) {
114
+ if (this.getRowActions(row).length) return true;
115
+ }
116
+ return false;
117
+ }
118
+
119
+ public getRowActions(row: T): TableAction<T>[] {
120
+ return this.filterItemsBaseOnAccessLevel(
121
+ this.tableSource.loadRowActions(row),
122
+ );
123
+ }
124
+
125
+ public loadSummarySchema(): TableSummarySchema {
126
+ if (this.tableSource["loadSummarySchema"]) {
127
+ return this.tableSource["loadSummarySchema"]();
128
+ }
129
+ return {
130
+ summaryTitle: "",
131
+ summaryItems: [],
132
+ };
133
+ }
134
+
135
+ private filterItemsBaseOnAccessLevel<T>(items: Accessible[]): T[] {
136
+ return items.filter((item) => {
137
+ if (item.hasAccess) {
138
+ return item.hasAccess();
139
+ }
140
+ return true;
141
+ }) as T[];
142
+ }
143
+
144
+ public async onDestroy(): Promise<void> {
145
+ this.tableSource.onTableDestroy();
146
+ }
147
+ }
@@ -0,0 +1,34 @@
1
+ import { TableHeaderSchema } from "../TableHeaderSchema";
2
+ import { SortDetail } from "../../sort";
3
+ import { TableSummarySchema } from "../TableSummarySchema";
4
+ import { TableAction } from "../TableAction";
5
+
6
+ export interface TableSource<T> {
7
+ loadRows(): Promise<T[]>;
8
+
9
+ loadHeaderSchema(): Promise<TableHeaderSchema<T>[]>;
10
+
11
+ loadRowActions(row: T): TableAction<T>[];
12
+
13
+ paginate(nextPage: number, pageSize: number): Promise<T[]>;
14
+
15
+ sort(sortDetail: SortDetail<T>): Promise<T[]>;
16
+
17
+ onTableDestroy(): void;
18
+ }
19
+
20
+ export interface RowClick<T> extends TableSource<T> {
21
+ onRowClick(row: T): Promise<void>;
22
+ }
23
+
24
+ export interface RowMetaClick<T> extends TableSource<T> {
25
+ onRowMetaClick(row: T): Promise<void>;
26
+ }
27
+
28
+ export interface handleDoubleClick<T> extends TableSource<T> {
29
+ onRowDoubleClick(row: T): Promise<void>;
30
+ }
31
+
32
+ export interface TableSummary<T> extends TableSource<T> {
33
+ loadSummarySchema(): Promise<TableSummarySchema>;
34
+ }
@@ -0,0 +1,43 @@
1
+ export type { TableAction } from "./TableAction";
2
+ export type { TableService } from "./TableService";
3
+ export type { Destroy } from "./OnDestory";
4
+ export type { RowActionSource } from "./RowActionSource";
5
+ export type { TableLoader } from "./TableLoader";
6
+ export type { TablePaginate } from "./TablePaginate";
7
+ export {
8
+ TABLE_ACTION_COLUMN,
9
+ TABLE_COLUMN_DEFAULT_VALUES,
10
+ TABLE_COLUMN_DEFAULT_COLSPAN,
11
+ TABLE_COLUMN_DEFAULT_WIDTH,
12
+ } from "./Constants";
13
+ export { BaseTable } from "./BaseTable";
14
+ export { SelectableTable } from "./SelectableTable";
15
+ export {
16
+ type TableHeaderSchema,
17
+ type TableRenderingData,
18
+ generateHeader,
19
+ } from "./TableHeaderSchema";
20
+ export {
21
+ type TableSummaryItem,
22
+ type TableSummarySchema,
23
+ } from "./TableSummarySchema";
24
+ export { Column } from "./moduleConnection/Column";
25
+ export { Table } from "./moduleConnection/Table";
26
+ export { Action } from "./moduleConnection/Action";
27
+ export { TableDestroy } from "./moduleConnection/TableDestroy";
28
+ export { TableRowClick } from "./moduleConnection/TableRowClick";
29
+
30
+ // Table Generator
31
+ export {
32
+ type TableSource,
33
+ type TableSummary,
34
+ type RowClick,
35
+ type RowMetaClick,
36
+ type handleDoubleClick,
37
+ } from "./generator/TableSource";
38
+ export { SelectableTableGenerator } from "./generator/SelectableTableGenerator";
39
+ export { TableGenerator } from "./generator/TableGenerator";
40
+ export { TableConfig } from "./generator/TableConfig";
41
+ export { TableCellComponentRegistry } from "./generator/TableCellComponentRegistry";
42
+ export { GColumn } from "./moduleConnection/generator/GColumn";
43
+ export { GTable } from "./moduleConnection/generator/GTable";
@@ -0,0 +1,12 @@
1
+ import { type ActionDecorator } from '../TableAction'
2
+ import type { BaseModel } from '../../BaseModel'
3
+
4
+ export function Action<Model extends BaseModel>(actionDetail: Omit<ActionDecorator<Model>, 'handler'>) {
5
+ return function ActionDecorator(target: BaseModel, _propertyKey: string, propertyDescriptor: PropertyDescriptor) {
6
+ if (!target.constructor.prototype.actions) {
7
+ target.constructor.prototype.actions = []
8
+ }
9
+ (actionDetail as ActionDecorator<Model>).handler = propertyDescriptor.value
10
+ target.constructor.prototype.actions.push(actionDetail)
11
+ }
12
+ }
@@ -0,0 +1,11 @@
1
+ import type { TableHeaderSchema } from '../TableHeaderSchema'
2
+ import type { BaseModel } from '../../BaseModel'
3
+
4
+ export function Column<Model extends BaseModel>(header: TableHeaderSchema<Model>) {
5
+ return function ColumnDecorator(target: BaseModel, propertyKey: string) {
6
+ if (!target.constructor.prototype.headers) {
7
+ target.constructor.prototype.headers = []
8
+ }
9
+ target.constructor.prototype.headers.push({path: propertyKey, ...header });
10
+ }
11
+ }
@@ -0,0 +1,49 @@
1
+ import { BaseTable, type TableHeaderSchema } from "../index";
2
+ import { type ActionDecorator, type TableAction } from "../TableAction";
3
+ import type { BaseModel } from "../../BaseModel";
4
+ import type { SelectableTable } from "../SelectableTable";
5
+
6
+ export function Table<Model extends BaseModel>(
7
+ table: typeof BaseTable<Model> | typeof SelectableTable<Model>,
8
+ ) {
9
+ return function TableDecorator(constructor: Function) {
10
+ async function loadHeader(): Promise<TableHeaderSchema<Model>[]> {
11
+ constructor.prototype._table = this as BaseTable<Model>;
12
+ return constructor.prototype.headers;
13
+ }
14
+
15
+ function getActions(row: Model): TableAction<Model>[] {
16
+ const tableActions: TableAction<Model>[] = [];
17
+ const modelActions = (constructor.prototype.actions ||
18
+ []) as ActionDecorator<Model>[];
19
+
20
+ for (const action of modelActions) {
21
+ if (!action.isAvailable(row)) continue;
22
+ const actionToPush: TableAction<Model> = {
23
+ handler: action.handler.bind(row),
24
+ accessLevel: action.accessLevel,
25
+ actionName: action.actionName,
26
+ };
27
+ tableActions.push(actionToPush);
28
+ }
29
+ return tableActions;
30
+ }
31
+
32
+ async function rowClick(row: Model) {
33
+ if (constructor.prototype.rowClick) {
34
+ await constructor.prototype.rowClick.call(row);
35
+ }
36
+ }
37
+
38
+ async function onDestroy() {
39
+ if (constructor.prototype.tableDestroy) {
40
+ await constructor.prototype.tableDestroy();
41
+ }
42
+ }
43
+
44
+ table.prototype.loadHeader = loadHeader;
45
+ table.prototype.getActions = getActions;
46
+ table.prototype.handleClick = rowClick;
47
+ table.prototype.onDestroy = onDestroy;
48
+ };
49
+ }
@@ -0,0 +1,7 @@
1
+ import type { BaseModel } from '../../BaseModel'
2
+
3
+ export function TableDestroy() {
4
+ return function TableDestroyDecorator(target: BaseModel, _propertyKey: string, descriptor: PropertyDescriptor) {
5
+ target.constructor.prototype.tableDestroy = descriptor.value;
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ import type { BaseModel } from '../../BaseModel'
2
+
3
+ export function TableRowClick() {
4
+ return function TableRowClickDecorator(target: BaseModel, _propertyKey: string, descriptor: PropertyDescriptor) {
5
+ target.constructor.prototype.rowClick = descriptor.value;
6
+ }
7
+ }
@@ -0,0 +1,10 @@
1
+ import { type TableHeaderSchema } from "../../index";
2
+
3
+ export function GColumn<T>(header: TableHeaderSchema<T>) {
4
+ return function GColumnDecorator(target: T, propertyKey: string) {
5
+ if (!target.constructor.prototype.headers) {
6
+ target.constructor.prototype.headers = [];
7
+ }
8
+ target.constructor.prototype.headers.push({ path: propertyKey, ...header });
9
+ };
10
+ }
@@ -0,0 +1,11 @@
1
+ import { TableSource } from "../../generator/TableSource";
2
+
3
+ export function GTable<T>(table: new (...args: any[]) => TableSource<T>) {
4
+ return function GTableDecorator(constructor: Function) {
5
+ async function loadHeaderSchema() {
6
+ return constructor.prototype.headers || [];
7
+ }
8
+
9
+ (table as any).prototype.loadHeaderSchema = loadHeaderSchema;
10
+ };
11
+ }
@@ -0,0 +1,53 @@
1
+ import { computed, type Ref, ref } from 'vue'
2
+ import type { BaseModel } from '../BaseModel'
3
+
4
+ export function useCrud<Entity extends BaseModel>() {
5
+ const entityItems: Ref<Map<string, Entity>> = ref(new Map<string, Entity>()) as Ref<Map<string, Entity>>
6
+ const totalCount = ref<number>(0);
7
+
8
+ const getTotalCount = computed<number>(() => {
9
+ return totalCount.value;
10
+ })
11
+
12
+ const entityItemsAsArray = computed<Entity[]>(() => {
13
+ return Array.from(entityItems.value.values()) as Entity[]
14
+ })
15
+
16
+ function setTotalCount(count: number) {
17
+ totalCount.value = count;
18
+ }
19
+
20
+ function addOrReplaceItems(items: Entity[]) {
21
+ for (const item of items) {
22
+ addOrReplaceItem(item)
23
+ }
24
+ }
25
+
26
+ function addOrReplaceItem(item: Entity) {
27
+ entityItems.value.set(String(item.id), item as Entity)
28
+ }
29
+
30
+ function removeById(id: string | number) {
31
+ const itemToRemove = getItemById(id)
32
+ entityItems.value.delete(String(id))
33
+ return itemToRemove
34
+ }
35
+
36
+ function getItemById(id: number | string) {
37
+ return entityItems.value.get(String(id)) || null
38
+ }
39
+
40
+ function clearItems() {
41
+ entityItems.value.clear()
42
+ }
43
+
44
+ return {
45
+ entityItemsAsArray,
46
+ addOrReplaceItems,
47
+ removeById,
48
+ getItemById,
49
+ clearItems,
50
+ setTotalCount,
51
+ getTotalCount
52
+ }
53
+ }
@@ -0,0 +1,70 @@
1
+ import { computed, type Ref, ref } from "vue";
2
+ import { BaseModel } from "../BaseModel";
3
+ import type { Nullable } from "../types";
4
+
5
+ export function useData<Model extends BaseModel>() {
6
+ const items: Ref<Map<number, Model>> = ref<Map<number, Model>>(
7
+ new Map<number, Model>(),
8
+ ) as Ref<Map<number, Model>>;
9
+
10
+ const totalCount = ref<number>(0);
11
+ const currentItem = ref<Nullable<Model>>(null);
12
+
13
+ const itemsAsArray = computed<Model[]>(() => {
14
+ return Array.from(items.value.values()) as Model[];
15
+ });
16
+
17
+ function setTotalCount(totalItems: number) {
18
+ totalCount.value = totalItems;
19
+ }
20
+
21
+ function addOrReplaceItems(itemsToAdd: Model[]) {
22
+ for (const item of itemsToAdd) {
23
+ addOrReplaceItem(item);
24
+ }
25
+ }
26
+
27
+ function addOrReplaceItem(item: Model) {
28
+ items.value.set(item.id, item);
29
+ }
30
+
31
+ function getById(id: number): Nullable<Model> {
32
+ currentItem.value = items.value.get(id) || null;
33
+ return currentItem.value;
34
+ }
35
+
36
+ function removeById(id: number): boolean {
37
+ const removedItem = getById(id);
38
+
39
+ if (removedItem) {
40
+ items.value.delete(id);
41
+ }
42
+
43
+ return Boolean(removedItem);
44
+ }
45
+
46
+ function clearItems() {
47
+ items.value.clear();
48
+ }
49
+
50
+ function setCurrentItem(item: Nullable<Model>) {
51
+ currentItem.value = item;
52
+ }
53
+
54
+ function clearCurrentItem() {
55
+ currentItem.value = null;
56
+ }
57
+
58
+ return {
59
+ itemsAsArray,
60
+ totalCount,
61
+ currentItem,
62
+ setTotalCount,
63
+ addOrReplaceItems,
64
+ getById,
65
+ removeById,
66
+ clearItems,
67
+ setCurrentItem,
68
+ clearCurrentItem,
69
+ };
70
+ }