ui-soxo-bootstrap-core 2.4.25-dev.41 → 2.4.25-dev.44

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 (394) hide show
  1. package/.babelrc +8 -8
  2. package/.github/workflows/npm-publish.yml +52 -55
  3. package/.husky/pre-commit +11 -11
  4. package/.prettierrc.json +10 -10
  5. package/babel.config.js +2 -2
  6. package/core/components/component-loader/component-loader.js +125 -125
  7. package/core/components/component-wrapper/component-wrapper.js +121 -121
  8. package/core/components/external-window/external-window.js +236 -236
  9. package/core/components/external-window/external-window.test.js +80 -80
  10. package/core/components/extra-info/extra-info-details.js +155 -155
  11. package/core/components/extra-info/extra-info-details.scss +26 -26
  12. package/core/components/extra-info/extra-info.js +134 -134
  13. package/core/components/index.js +20 -20
  14. package/core/components/landing-api/landing-api.js +492 -492
  15. package/core/components/landing-api/landing-api.scss +19 -19
  16. package/core/components/menu-template-api/menu-template-api.js +321 -321
  17. package/core/components/root-application-api/root-application-api.js +174 -174
  18. package/core/index.js +13 -13
  19. package/core/lib/Store.js +365 -365
  20. package/core/lib/components/application-bootstrap/application-bootstrap.js +115 -115
  21. package/core/lib/components/approval-form/approval-form.js +280 -280
  22. package/core/lib/components/approval-form/approval-form.scss +183 -183
  23. package/core/lib/components/approval-list/approval-list.js +143 -143
  24. package/core/lib/components/approval-list/approval-list.scss +2 -2
  25. package/core/lib/components/approval-list/components/request-card/request-card.js +42 -42
  26. package/core/lib/components/approval-list/components/request-card/request-card.scss +30 -30
  27. package/core/lib/components/camera/camera.js +230 -230
  28. package/core/lib/components/camera/camera.scss +86 -86
  29. package/core/lib/components/comment-block/comment-block.js +138 -138
  30. package/core/lib/components/comment-block/comment-block.scss +3 -3
  31. package/core/lib/components/confirm-modal/confirm-modal.js +82 -82
  32. package/core/lib/components/confirm-modal/confirm-modal.scss +2 -2
  33. package/core/lib/components/consent/consent.js +67 -67
  34. package/core/lib/components/consent/pdf-signature.js +299 -299
  35. package/core/lib/components/consent/signature-pad.js +90 -90
  36. package/core/lib/components/consent/signature-pad.scss +14 -14
  37. package/core/lib/components/file-upload/file-upload.js +133 -133
  38. package/core/lib/components/finger-print-reader/finger-print-reader.js +295 -295
  39. package/core/lib/components/finger-print-reader/finger-print-reader.scss +47 -47
  40. package/core/lib/components/finger-print-search/finger-print-search.js +200 -200
  41. package/core/lib/components/finger-print-search/finger-print-search.scss +47 -47
  42. package/core/lib/components/global-header/animations.js +18 -18
  43. package/core/lib/components/global-header/global-header.js +412 -412
  44. package/core/lib/components/global-header/global-header.scss +369 -369
  45. package/core/lib/components/header/generic-header.js +76 -76
  46. package/core/lib/components/header/generic-header.scss +99 -99
  47. package/core/lib/components/image-preview/image-preview.js +33 -33
  48. package/core/lib/components/image-wrapper/image-wrapper.js +108 -108
  49. package/core/lib/components/image-wrapper/image-wrapper.scss +12 -12
  50. package/core/lib/components/index.js +206 -206
  51. package/core/lib/components/landing/landing.js +403 -403
  52. package/core/lib/components/language-switcher/language-switcher.js +49 -49
  53. package/core/lib/components/menu-context/menu-context.js +69 -69
  54. package/core/lib/components/menu-template/menu-template.js +249 -249
  55. package/core/lib/components/menu-template/menu-template.scss +9 -9
  56. package/core/lib/components/modal-search/modal-search.js +153 -153
  57. package/core/lib/components/modal-search/modal-search.scss +78 -78
  58. package/core/lib/components/modal-wrapper/modal-manager.js +15 -15
  59. package/core/lib/components/modal-wrapper/modal-wrapper.js +108 -108
  60. package/core/lib/components/modal-wrapper/modal-wrapper.scss +13 -13
  61. package/core/lib/components/notice-board/notice-board.js +132 -132
  62. package/core/lib/components/notice-board/notice-board.scss +65 -65
  63. package/core/lib/components/page-container/page-container.js +55 -55
  64. package/core/lib/components/page-container/page-container.scss +8 -8
  65. package/core/lib/components/page-header/page-header.js +23 -23
  66. package/core/lib/components/page-header/page-header.scss +17 -17
  67. package/core/lib/components/pdf-viewer/pdf-viewer.js +56 -56
  68. package/core/lib/components/portlet-table/components/table-actions/table-actions.js +58 -58
  69. package/core/lib/components/portlet-table/components/table-actions/table-actions.scss +1 -1
  70. package/core/lib/components/portlet-table/components/table-data/table-data.js +106 -106
  71. package/core/lib/components/portlet-table/portlet-table.js +63 -63
  72. package/core/lib/components/portlet-table/portlet-table.scss +90 -90
  73. package/core/lib/components/progress-bar/progress-bar.js +58 -58
  74. package/core/lib/components/progress-bar/progress-bar.scss +15 -15
  75. package/core/lib/components/request-form/request-form.js +110 -110
  76. package/core/lib/components/root-application/root-application.js +70 -70
  77. package/core/lib/components/rupee/rupee.js +14 -14
  78. package/core/lib/components/script-input/script-input.js +169 -169
  79. package/core/lib/components/script-input/script-input.scss +8 -8
  80. package/core/lib/components/sidemenu/animations.js +51 -51
  81. package/core/lib/components/sidemenu/sidemenu.js +572 -572
  82. package/core/lib/components/sidemenu/sidemenu.scss +277 -277
  83. package/core/lib/components/spotlight-search/spotlight-search.component.js +635 -635
  84. package/core/lib/components/spotlight-search/spotlight-search.component.scss +78 -78
  85. package/core/lib/components/table-wrapper/table-wrapper.js +135 -135
  86. package/core/lib/components/table-wrapper/table-wrapper.scss +72 -72
  87. package/core/lib/components/ui_elements/Loader.js +12 -12
  88. package/core/lib/components/ui_elements/Notify.js +12 -12
  89. package/core/lib/components/ui_elements/PlaceHolder.js +33 -33
  90. package/core/lib/components/web-camera/web-camera.js +161 -161
  91. package/core/lib/components/web-camera/web-camera.scss +28 -28
  92. package/core/lib/core.md +9 -9
  93. package/core/lib/elements/Elements.md +2 -2
  94. package/core/lib/elements/basic/LoggedUserRedirect.js +21 -21
  95. package/core/lib/elements/basic/PrivateRoute.js +16 -16
  96. package/core/lib/elements/basic/button/Button.md +43 -43
  97. package/core/lib/elements/basic/button/button.js +170 -170
  98. package/core/lib/elements/basic/card/Card.md +15 -15
  99. package/core/lib/elements/basic/card/card.js +40 -40
  100. package/core/lib/elements/basic/card/card.scss +13 -13
  101. package/core/lib/elements/basic/checkbox/checkbox.js +23 -23
  102. package/core/lib/elements/basic/col/col.js +15 -15
  103. package/core/lib/elements/basic/copy-to-clipboard/Readme.md +40 -40
  104. package/core/lib/elements/basic/copy-to-clipboard/copy-to-clipboard.js +61 -61
  105. package/core/lib/elements/basic/country-phone-input/Readme.md +98 -98
  106. package/core/lib/elements/basic/country-phone-input/country-phone-input.js +106 -106
  107. package/core/lib/elements/basic/country-phone-input/phone-input.scss +61 -61
  108. package/core/lib/elements/basic/datepicker/datepicker.js +33 -33
  109. package/core/lib/elements/basic/dragabble-wrapper/draggable-wrapper.js +136 -136
  110. package/core/lib/elements/basic/empty/empty.js +14 -14
  111. package/core/lib/elements/basic/fingerprint-protrected/fingerprint-protected.js +118 -118
  112. package/core/lib/elements/basic/fingerprint-protrected/fingerprint-protected.scss +10 -10
  113. package/core/lib/elements/basic/form/form.js +70 -70
  114. package/core/lib/elements/basic/form/form.scss +3 -3
  115. package/core/lib/elements/basic/image/image.js +45 -45
  116. package/core/lib/elements/basic/image/image.scss +17 -17
  117. package/core/lib/elements/basic/image/readme.md +26 -26
  118. package/core/lib/elements/basic/image-viewer/image-viewer.js +108 -108
  119. package/core/lib/elements/basic/image-viewer/image-viewer.scss +7 -7
  120. package/core/lib/elements/basic/input/input.js +81 -81
  121. package/core/lib/elements/basic/input/readme.md +77 -77
  122. package/core/lib/elements/basic/json-input/json-input.js +51 -51
  123. package/core/lib/elements/basic/menu-dashboard/menu-dashboard.js +216 -216
  124. package/core/lib/elements/basic/menu-dashboard/menu-dashboard.scss +28 -28
  125. package/core/lib/elements/basic/menu-tree/menu-tree.js +114 -114
  126. package/core/lib/elements/basic/modal/modal.js +64 -64
  127. package/core/lib/elements/basic/modal/readme.md +62 -62
  128. package/core/lib/elements/basic/popconfirm/popconfirm.js +17 -17
  129. package/core/lib/elements/basic/popover/popover.js +12 -12
  130. package/core/lib/elements/basic/radio/radio.js +18 -18
  131. package/core/lib/elements/basic/rangepicker/rangepicker.js +141 -141
  132. package/core/lib/elements/basic/rangepicker/rangepicker.scss +24 -24
  133. package/core/lib/elements/basic/rangepicker/readme.md +81 -81
  134. package/core/lib/elements/basic/reference-select/readme.md +18 -18
  135. package/core/lib/elements/basic/reference-select/reference-select.js +337 -337
  136. package/core/lib/elements/basic/row/row.js +15 -15
  137. package/core/lib/elements/basic/select/select.js +46 -46
  138. package/core/lib/elements/basic/select-box/readme.md +52 -52
  139. package/core/lib/elements/basic/select-box/select-box.js +63 -63
  140. package/core/lib/elements/basic/skeleton/readme.md +35 -35
  141. package/core/lib/elements/basic/skeleton/skeleton.js +35 -35
  142. package/core/lib/elements/basic/skeleton/skeleton.scss +53 -53
  143. package/core/lib/elements/basic/space/space.js +12 -12
  144. package/core/lib/elements/basic/switch/readme.md +29 -29
  145. package/core/lib/elements/basic/switch/switch.js +67 -67
  146. package/core/lib/elements/basic/tab/tab.js +14 -14
  147. package/core/lib/elements/basic/table/readme.md +8 -8
  148. package/core/lib/elements/basic/table/table.js +100 -100
  149. package/core/lib/elements/basic/tag/tag.js +63 -63
  150. package/core/lib/elements/basic/tag/tag.scss +2 -2
  151. package/core/lib/elements/basic/timeline/timeline.js +13 -13
  152. package/core/lib/elements/basic/title/readme.md +20 -20
  153. package/core/lib/elements/basic/title/title.js +37 -37
  154. package/core/lib/elements/basic/user-search/user-search.js +192 -192
  155. package/core/lib/elements/complex/barcode/barcode.js +27 -27
  156. package/core/lib/elements/complex/bargraph/bar-graph.js +262 -262
  157. package/core/lib/elements/complex/basic-table/basic-table.js +110 -110
  158. package/core/lib/elements/complex/basic-table/basic-table.scss +4 -4
  159. package/core/lib/elements/complex/date-display/date-display.js +37 -37
  160. package/core/lib/elements/complex/error-boundary/error-boundary.js +29 -29
  161. package/core/lib/elements/complex/google-location-input/map-container-library-load.js +92 -92
  162. package/core/lib/elements/complex/google-map/google-map.js +230 -230
  163. package/core/lib/elements/complex/google-map/google-map.scss +13 -13
  164. package/core/lib/elements/complex/line-graph/line-graph.js +108 -108
  165. package/core/lib/elements/complex/location-search-input/location-search-input.js +100 -100
  166. package/core/lib/elements/complex/pie-chart/pie-chart.js +202 -202
  167. package/core/lib/elements/complex/qr-code/qr-code.js +27 -27
  168. package/core/lib/elements/complex/qrscanner/qrscanner.js +57 -57
  169. package/core/lib/elements/complex/search-debounce/search-debounce.js +37 -37
  170. package/core/lib/elements/complex/statistic-card/dashboard-statistic-card.js +75 -75
  171. package/core/lib/elements/complex/statistic-card/statistic-card.js +28 -28
  172. package/core/lib/elements/index.js +226 -226
  173. package/core/lib/hooks/device-detect.js +25 -25
  174. package/core/lib/hooks/index.js +9 -9
  175. package/core/lib/hooks/use-location.js +33 -33
  176. package/core/lib/hooks/use-otp-timer.js +80 -80
  177. package/core/lib/hooks/use-window-size.js +34 -34
  178. package/core/lib/i18n.js +69 -69
  179. package/core/lib/index.js +106 -106
  180. package/core/lib/introduction.md +73 -73
  181. package/core/lib/js-styleguide.md +4112 -4112
  182. package/core/lib/models/actions/actions.js +127 -127
  183. package/core/lib/models/actions/components/action-detail/action-detail.js +190 -190
  184. package/core/lib/models/actions/components/custom-actions/custom-actions.js +185 -185
  185. package/core/lib/models/attachments/attachments.js +231 -231
  186. package/core/lib/models/base-loader.js +99 -99
  187. package/core/lib/models/base.js +716 -716
  188. package/core/lib/models/branches/branches.js +125 -125
  189. package/core/lib/models/checklists/checklists.js +114 -114
  190. package/core/lib/models/columns/columns.js +169 -169
  191. package/core/lib/models/columns/components/columns-add/columns-add.js +171 -171
  192. package/core/lib/models/comments/comments.js +213 -213
  193. package/core/lib/models/departments/departments.js +107 -107
  194. package/core/lib/models/financial-years/financial_years.js +127 -127
  195. package/core/lib/models/forms/components/form-creator/form-creator.js +590 -590
  196. package/core/lib/models/forms/components/form-creator/form-creator.scss +29 -29
  197. package/core/lib/models/forms/components/form-detail/form-detail.js +224 -224
  198. package/core/lib/models/forms/forms.js +121 -121
  199. package/core/lib/models/index.js +203 -203
  200. package/core/lib/models/invoice-numbers/invoice_numbers.js +204 -204
  201. package/core/lib/models/lookup-types/components/lookup-detail/lookup-detail.js +145 -145
  202. package/core/lib/models/lookup-types/lookup-types.js +113 -113
  203. package/core/lib/models/lookup-values/components/lookup-values-add/lookup-values-add.js +126 -126
  204. package/core/lib/models/lookup-values/lookup-values.js +107 -107
  205. package/core/lib/models/menu-roles/menu-roles.js +127 -127
  206. package/core/lib/models/menus/components/menu-add/menu-add.js +228 -228
  207. package/core/lib/models/menus/components/menu-detail/menu-detail.js +170 -170
  208. package/core/lib/models/menus/components/menu-list/menu-list.js +593 -593
  209. package/core/lib/models/menus/components/menu-list/menu-list.scss +5 -5
  210. package/core/lib/models/menus/components/menu-roles-add/menu-roles-add.js +183 -183
  211. package/core/lib/models/menus/menus.js +499 -499
  212. package/core/lib/models/models/components/model-detail/model-detail.js +137 -137
  213. package/core/lib/models/models/components/models.js +128 -128
  214. package/core/lib/models/modules/modules.js +204 -204
  215. package/core/lib/models/outbox/outbox.js +73 -73
  216. package/core/lib/models/pages/pages.js +107 -107
  217. package/core/lib/models/permissions/permissions.js +71 -71
  218. package/core/lib/models/process/components/process-add/process-add.js +181 -181
  219. package/core/lib/models/process/components/process-dashboard/process-dashboard.js +601 -601
  220. package/core/lib/models/process/components/process-dashboard/process-dashboard.scss +62 -62
  221. package/core/lib/models/process/components/process-detail/process-detail.js +140 -140
  222. package/core/lib/models/process/components/process-timeline/process-timeline.js +139 -139
  223. package/core/lib/models/process/components/task-detail/task-detail.js +240 -240
  224. package/core/lib/models/process/components/task-detail/task-detail.scss +27 -27
  225. package/core/lib/models/process/components/task-form/task-form.js +528 -528
  226. package/core/lib/models/process/components/task-form/task-form.scss +7 -7
  227. package/core/lib/models/process/components/task-list/task-list.js +221 -221
  228. package/core/lib/models/process/components/task-list/task-list.scss +14 -14
  229. package/core/lib/models/process/components/task-overview/task-overview.js +299 -299
  230. package/core/lib/models/process/components/task-overview-legacy/task-overview-legacy.js +192 -192
  231. package/core/lib/models/process/components/task-routes/task-routes.js +45 -45
  232. package/core/lib/models/process/components/task-status/task-status.js +175 -175
  233. package/core/lib/models/process/components/task-status/task-status.scss +11 -11
  234. package/core/lib/models/process/process.js +780 -780
  235. package/core/lib/models/process-transactions/process-transactions.js +123 -123
  236. package/core/lib/models/roles/roles.js +106 -106
  237. package/core/lib/models/scripts/scripts.js +111 -111
  238. package/core/lib/models/step-transactions/step-transcations.js +147 -147
  239. package/core/lib/models/steps/components/step-add/step-add.js +261 -261
  240. package/core/lib/models/steps/components/step-detail/step-detail.js +157 -157
  241. package/core/lib/models/steps/steps.js +356 -356
  242. package/core/lib/models/user-preferences/user-preferences.js +83 -83
  243. package/core/lib/models/users/components/user-add/user-add.js +226 -226
  244. package/core/lib/models/users/users.js +119 -119
  245. package/core/lib/modules/business/launch-page/launch-page.js +29 -29
  246. package/core/lib/modules/business/launch-page/launch-page.scss +5 -5
  247. package/core/lib/modules/business/slots/slots.js +231 -231
  248. package/core/lib/modules/business/slots/slots.scss +108 -108
  249. package/core/lib/modules/forms/components/field-customizer/field-customizer.js +138 -138
  250. package/core/lib/modules/forms/components/field-selector/field-selector.js +157 -157
  251. package/core/lib/modules/forms/components/field-selector/field-selector.scss +25 -25
  252. package/core/lib/modules/forms/components/form-display/form-display.js +203 -203
  253. package/core/lib/modules/forms/components/form-display/form-display.scss +9 -9
  254. package/core/lib/modules/forms/components/tab-customizer/tab-customizer.js +124 -124
  255. package/core/lib/modules/generic/generic-add/generic-add.js +213 -213
  256. package/core/lib/modules/generic/generic-detail/generic-detail.js +199 -199
  257. package/core/lib/modules/generic/generic-edit/generic-edit.js +120 -120
  258. package/core/lib/modules/generic/generic-list/ExportReactCSV.js +62 -62
  259. package/core/lib/modules/generic/generic-list/generic-list.js +705 -705
  260. package/core/lib/modules/generic/generic-list/generic-list.scss +34 -34
  261. package/core/lib/modules/generic/generic-upload/generic-upload.js +483 -483
  262. package/core/lib/modules/generic/table-settings/table-settings.js +226 -226
  263. package/core/lib/modules/generic/table-settings/table-settings.scss +37 -37
  264. package/core/lib/modules/index.js +52 -52
  265. package/core/lib/modules/modules-routes/module-routes.js +35 -35
  266. package/core/lib/pages/change-password/change-password.js +211 -211
  267. package/core/lib/pages/change-password/change-password.scss +76 -76
  268. package/core/lib/pages/homepage/homepage.js +53 -53
  269. package/core/lib/pages/index.js +19 -19
  270. package/core/lib/pages/login/login.js +735 -735
  271. package/core/lib/pages/login/login.scss +458 -458
  272. package/core/lib/pages/manage-users/manage-users.js +429 -429
  273. package/core/lib/pages/manage-users/manage-users.scss +25 -25
  274. package/core/lib/pages/profile/profile.js +247 -247
  275. package/core/lib/pages/profile/profile.scss +107 -107
  276. package/core/lib/pages/profile/theme-config.js +18 -18
  277. package/core/lib/pages/profile/themes-backup.json +310 -310
  278. package/core/lib/pages/profile/themes.json +254 -254
  279. package/core/lib/pages/register/register.js +176 -176
  280. package/core/lib/pages/register/register.scss +128 -128
  281. package/core/lib/react-styleguide.md +756 -756
  282. package/core/lib/utils/api/api.utils.js +188 -188
  283. package/core/lib/utils/api/readme.md +426 -426
  284. package/core/lib/utils/async.js +35 -35
  285. package/core/lib/utils/common/common.utils.js +123 -123
  286. package/core/lib/utils/common/readme.md +30 -30
  287. package/core/lib/utils/date/date.utils.js +295 -295
  288. package/core/lib/utils/date/readme.md +2 -2
  289. package/core/lib/utils/firebase.support.utils.js +98 -98
  290. package/core/lib/utils/firebase.utils.js +808 -808
  291. package/core/lib/utils/form/form.utils.js +255 -255
  292. package/core/lib/utils/generic/generic.utils.js +69 -69
  293. package/core/lib/utils/http/auth.helper.js +95 -95
  294. package/core/lib/utils/http/http.utils.js +157 -157
  295. package/core/lib/utils/http/readme.md +14 -14
  296. package/core/lib/utils/index.js +45 -45
  297. package/core/lib/utils/location/location.utils.js +137 -137
  298. package/core/lib/utils/location/readme.md +18 -18
  299. package/core/lib/utils/modal.utils.js +15 -15
  300. package/core/lib/utils/notification.utils.js +34 -34
  301. package/core/lib/utils/pwa/pwa.utils.js +88 -88
  302. package/core/lib/utils/script.utils.js +235 -235
  303. package/core/lib/utils/setting.utils.js +68 -68
  304. package/core/lib/utils/upload.utils.js +29 -29
  305. package/core/models/Preference/Preferences.js +46 -46
  306. package/core/models/base/base.js +399 -399
  307. package/core/models/base-clone-loader.js +107 -107
  308. package/core/models/base-clone.js +187 -187
  309. package/core/models/base-loader.js +97 -97
  310. package/core/models/core-scripts/core-scripts.js +150 -150
  311. package/core/models/dashboard/dashboard.js +201 -201
  312. package/core/models/detail-loader.js +88 -88
  313. package/core/models/doctor/components/doctor-add/doctor-add.js +422 -422
  314. package/core/models/doctor/components/doctor-add/doctor-add.scss +32 -32
  315. package/core/models/groups.js +82 -82
  316. package/core/models/index.js +100 -100
  317. package/core/models/lookup-types/components/lookup-detail/lookup-detail.js +129 -129
  318. package/core/models/lookup-types/lookup-types.js +96 -96
  319. package/core/models/lookup-values/components/lookup-values-modal/lookup-values-modal.js +95 -95
  320. package/core/models/lookup-values/lookup-values.js +92 -92
  321. package/core/models/menu-roles/components/menu-roles-add/menu-roles-add.js +153 -153
  322. package/core/models/menu-roles/menu-roles.js +158 -158
  323. package/core/models/menus/components/menu-add/menu-add.js +288 -288
  324. package/core/models/menus/components/menu-add/menu-add.scss +31 -31
  325. package/core/models/menus/components/menu-detail/menu-detail.js +263 -263
  326. package/core/models/menus/components/menu-list/menu-list.js +392 -392
  327. package/core/models/menus/components/menu-lists/menu-lists.js +585 -585
  328. package/core/models/menus/components/menu-lists/menu-lists.scss +46 -46
  329. package/core/models/menus/menus.js +291 -291
  330. package/core/models/model-columns.js +121 -121
  331. package/core/models/models/components/model-detail/model-add.js +120 -120
  332. package/core/models/models/components/model-detail/model-detail.js +133 -133
  333. package/core/models/models/models.js +154 -154
  334. package/core/models/pages/components/page-add/page-add.js +163 -163
  335. package/core/models/pages/components/page-add/page-add.scss +30 -30
  336. package/core/models/pages/components/page-details/page-details.js +209 -209
  337. package/core/models/pages/components/page-list/page-list.js +248 -248
  338. package/core/models/pages/pages.js +142 -142
  339. package/core/models/pages.js +142 -142
  340. package/core/models/roles/components/role-add/role-add.js +312 -312
  341. package/core/models/roles/components/role-add/role-add.scss +4 -4
  342. package/core/models/roles/components/role-list/role-list.js +386 -386
  343. package/core/models/roles/roles.js +205 -205
  344. package/core/models/staff/components/staff-add/staff-add.js +468 -464
  345. package/core/models/user-roles/components/user-roles-add/user-roles-add.js +149 -149
  346. package/core/models/user-roles/user-roles.js +99 -99
  347. package/core/models/users/components/assign-role/assign-role.js +300 -298
  348. package/core/models/users/components/assign-role/assign-role.scss +117 -117
  349. package/core/models/users/components/user-add/user-add.js +853 -853
  350. package/core/models/users/components/user-add/user-edit.js +89 -89
  351. package/core/models/users/components/user-detail/user-detail.js +236 -236
  352. package/core/models/users/components/user-list/user-list.js +397 -397
  353. package/core/models/users/users.js +353 -353
  354. package/core/modules/Informations/change-info/change-info.js +618 -618
  355. package/core/modules/Informations/change-info/change-info.scss +134 -134
  356. package/core/modules/dashboard/components/dashboard-card/animations.js +64 -64
  357. package/core/modules/dashboard/components/dashboard-card/dashboard-card.js +197 -197
  358. package/core/modules/dashboard/components/dashboard-card/menu-dashboard-card.js +430 -430
  359. package/core/modules/dashboard/components/dashboard-card/menu-dashboard-card.scss +59 -59
  360. package/core/modules/dashboard/components/pop-query-dashboard/pop-query-dashboard.js +66 -66
  361. package/core/modules/generic/components/generic-add/generic-add.js +121 -121
  362. package/core/modules/generic/components/generic-add/generic-add.scss +13 -13
  363. package/core/modules/generic/components/generic-add-modal/generic-add-modal.js +125 -125
  364. package/core/modules/generic/components/generic-add-modal/generic-add-modal.scss +13 -13
  365. package/core/modules/generic/components/generic-detail/generic-detail.js +184 -184
  366. package/core/modules/generic/components/generic-detail/generic-detail.scss +25 -25
  367. package/core/modules/generic/components/generic-edit/generic-edit.js +123 -123
  368. package/core/modules/generic/components/generic-list/generic-list.js +335 -335
  369. package/core/modules/generic/components/generic-list/generic-list.scss +35 -35
  370. package/core/modules/index.js +42 -42
  371. package/core/modules/module-routes/module-routes.js +37 -37
  372. package/core/modules/reporting/components/index.js +6 -6
  373. package/core/modules/reporting/components/reporting-dashboard/reporting-dashboard.js +1223 -1223
  374. package/core/modules/reporting/components/reporting-dashboard/reporting-dashboard.scss +171 -171
  375. package/core/modules/steps/action-buttons.js +76 -76
  376. package/core/modules/steps/action-buttons.scss +15 -15
  377. package/core/modules/steps/steps.js +379 -379
  378. package/core/modules/steps/steps.scss +159 -159
  379. package/core/modules/steps/timeline.js +54 -54
  380. package/core/pages/homepage-api/homepage-api.js +106 -106
  381. package/core/pages/homepage-api/homepage-api.scss +233 -233
  382. package/core/pages/homepage-api/menu-dashboard.js +169 -169
  383. package/core/pages/homepage-api/menu-dashboard.scss +11 -11
  384. package/core/translation.json +53 -53
  385. package/core/translations.json +19 -19
  386. package/core/utils/script.utils.js +129 -129
  387. package/core/utils/settings.utils.js +25 -25
  388. package/eslint.config.mjs +79 -79
  389. package/index.js +35 -35
  390. package/jest.config.js +7 -7
  391. package/jest.setup.js +1 -1
  392. package/package.json +123 -123
  393. package/tsconfig.json +26 -26
  394. package/webpack.config.js +173 -173
@@ -1,636 +1,636 @@
1
- import React, { Component, useState, useEffect } from 'react';
2
-
3
- import ReactDOM from 'react-dom';
4
-
5
-
6
- import './spotlight-search.component.scss';
7
-
8
- import { message, Modal, Skeleton } from 'antd';
9
-
10
- import { GlobalHotKeys } from 'react-hotkeys';
11
-
12
- import { Location, SettingsUtil } from './../../utils/';
13
-
14
- // import {
15
- // MenusAPI,
16
- // }
17
- // from '../../../core/models';
18
-
19
- let subMenu;
20
-
21
-
22
-
23
- const SpotlightReference = React.forwardRef((props, ref) => {
24
- return <Spotlight {...props} ref={ref} />
25
- })
26
-
27
- export default SpotlightReference;
28
-
29
-
30
- class Spotlight extends Component {
31
-
32
- constructor(props) {
33
- super(props);
34
-
35
- this.searchInput = React.createRef();
36
-
37
- this.menuItem = React.createRef();
38
-
39
- this.state = {
40
- isOpen: false,
41
- menus: [],
42
- searchText: '',
43
- activeMenu: {},
44
- searchList: [],
45
- querySearchList: [],
46
- user: props.user,
47
- config: props.config || [],
48
-
49
- matching: []
50
- }
51
-
52
- // this.openSpotlightModal();
53
- }
54
-
55
- openModal = () => {
56
-
57
- let menus = SettingsUtil.getMenus();
58
-
59
- let config = SettingsUtil.getConfig();
60
-
61
- this.setState({ isOpen: true, menus, config });
62
-
63
- }
64
-
65
- currentIndex = 0;
66
-
67
-
68
- keyboardControlMap = {
69
- moveUp: 'up',
70
- moveDown: 'down',
71
- enter: 'enter'
72
- }
73
-
74
- keyboardHandlers = {
75
- 'moveUp': (event) => { this.traverse(0) },
76
- 'moveDown': (event) => { this.traverse(1) },
77
- 'enter': (event) => { this.onSelect(event) },
78
- 'escape': (event) => { this.setState({ isOpen: false }) },
79
-
80
- }
81
-
82
- componentDidMount = async () => {
83
- // this.openSpotlightModal()
84
- }
85
-
86
-
87
- openSpotlightModal = async () => {
88
- const { user } = this.state;
89
-
90
- this.currentIndex = 0;
91
-
92
- if (!this.state.isOpen) {
93
- setTimeout(() => { this.searchInput.current.focus() }, 300);
94
- }
95
-
96
- // const result = await MenusAPI.getMenus(user);
97
-
98
- let menus = SettingsUtil.getMenus();
99
-
100
-
101
-
102
- this.setState({ isOpen: true, menus });
103
- }
104
-
105
- searchMenus = (event) => {
106
- let searchText = event.target.value
107
- this.setState({ searchText: searchText });
108
-
109
-
110
- // Start the search if condition matches
111
- // this.searchQuery(searchText);
112
- }
113
-
114
- /**
115
- *
116
- * @param {*} query
117
- */
118
- searchQuery = async (query) => {
119
-
120
- // Variable to record matching data
121
- let { matching = [], config } = this.state;
122
-
123
- config.forEach(async (condition) => {
124
-
125
- if (query.length >= 3) {
126
-
127
- const results = await condition.search(query)
128
-
129
- matching = [].concat(matching, results);
130
-
131
- this.setState({ matching })
132
- }
133
- })
134
-
135
- //
136
- }
137
-
138
- advancedSearch = (searchText) => {
139
- {
140
-
141
- let obj = {};
142
- if (searchText.length == 10 && searchText.slice(0, 3) != "INV") {
143
- if (parseInt(searchText).toString().length == 10) {
144
- obj = 2;
145
- }
146
- else if (/[^a-zA-Z0-9]/.test(searchText) && searchText.indexOf("-") === -1) {
147
- obj = 2;
148
- }
149
- else {
150
- obj = 1;
151
- }
152
- }
153
- else if (searchText.slice(0, 3) == "TKT") { // if the first 3 characters are tkt , its gonna be a ticket
154
- obj = 6;
155
- } else if (searchText.slice(0, 3) == "INV") {
156
- obj = 8;
157
- } else if ((parseInt(searchText).toString().length == 4 || parseInt(searchText).toString().length == 3) && parseInt(searchText).toString() != "NaN") {
158
- obj = 4;
159
- } else if (searchText.length == 11 && searchText.indexOf("-") === -1) {
160
- if (/\s/g.test((searchText).charAt(4))) { // check if the 4th characted is space
161
- obj = 4;
162
- } else {
163
- obj = 2;
164
- }
165
- } else if (!isNaN(searchText)) { // checking if it is a number , to check for booking id
166
- obj = 8;
167
- } else if (searchText.length == 16) {
168
- obj = 3;
169
- } else if (searchText.indexOf("-") != -1) {
170
- obj = 5;
171
- }
172
- // else {
173
- // obj = 2; //@ToDp : Carefully write execution for this case
174
- // }
175
-
176
- this.searchVal(obj, searchText);
177
- }
178
- }
179
-
180
- searchVal = async (obj, searchText) => {
181
- let result;
182
- let querySearchList = []
183
- let url
184
- let body
185
- switch (obj) {
186
-
187
- // To search PNR
188
- case 1:
189
- url = "bookingToken/" + searchText;
190
- result = await Get({ url: url });
191
- if (result.success && Object.keys(result.response).length) {
192
- result.response.name = searchText;
193
- result.response.url = 'booking/' + result.response.id;
194
- querySearchList.push(result.response)
195
- this.setState({ querySearchList });
196
-
197
-
198
- Location.navigate({ url: '/booking/' + result.response.id });
199
- }
200
- break;
201
-
202
- // To search User
203
- case 2: //@TODO MAKE A LIST PAGE WHERE WE SHOULD REDIRECT
204
- // getSetValue.setValue(searchText);
205
-
206
- url = '/searchUsers?searchText=' + searchText;
207
- // url = '/searchUsers';
208
- const queryParam = { searchText };
209
- Location.navigate({ url: url });
210
- // Location.navigate({ url, queryParam });
211
- break;
212
-
213
- // To search Payment
214
- case 3: //@TODO MAKE A LIST PAGE WHERE WE SHOULD REDIRECT
215
- // getSetValue.setValue(searchText);
216
-
217
- break;
218
-
219
- // To search vehicle
220
- case 4: //@TODO MAKE A LIST PAGE WHERE WE SHOULD REDIRECT
221
-
222
- url = '/searchVehicles?searchText=' + searchText;
223
- // url = '/searchVehicles';
224
- //const queryParam = { searchText };
225
- Location.navigate({ url: url });
226
-
227
- break;
228
-
229
- // To search coupon
230
- case 5:
231
-
232
- body = 'coupon_code="' + searchText + '"';
233
- result = await Get({ url: "coupon?query=" + body });
234
- if (result.success && result.response.length) {
235
- url = '/campaign/' + result.response[0].campaign_id;
236
- Location.navigate({ url: url })
237
- }
238
- break;
239
-
240
- // To search Ticket
241
- case 6:
242
-
243
- // url = "/ticket/" + searchText + "\"";
244
- // result = await Get({ url: url });
245
-
246
- body = 'ticket_number="' + searchText + '"';
247
- result = await Get({ url: "task?query=" + body });
248
- if (result.success && result.response.length) {
249
- url = '/ticket/' + result.response[0].id;
250
- Location.navigate({ url: url })
251
- }
252
- break;
253
-
254
- // To search Vendor
255
- case 7: //@TODO MAKE A LIST PAGE WHERE WE SHOULD REDIRECT
256
-
257
- break;
258
-
259
- // To search Invoice
260
- case 8:
261
-
262
- body = 'invoice="' + searchText + '"';
263
- result = await Get({ url: "expenseVoucher?query=" + body });
264
- if (result.response.length) {
265
- url = '/expenseVoucher/' + result.response[0].id;
266
- Location.navigate({ url: url })
267
- }
268
- break;
269
-
270
- case 9: //@TODO MAKE A LIST PAGE WHERE WE SHOULD REDIRECT
271
-
272
- break;
273
-
274
- default:
275
- this.setState({ querySearchList: [] })
276
- break;
277
- }
278
- }
279
-
280
-
281
- keyboardPress = (event) => {
282
- const { searchText } = this.state;
283
-
284
- var menus = document.getElementsByClassName('spotlight-menu-list')[0];
285
-
286
- if (event.target.value) {
287
-
288
- // On Clicking Down
289
- if (event.which == 40) {
290
-
291
- this.searchInput.current.blur();
292
-
293
- if (menus && menus.children.length) {
294
-
295
- var menus = document.getElementsByClassName('spotlight-menu-list')[0];
296
-
297
- if (menus) {
298
-
299
- subMenu = menus.querySelectorAll('.list-group-item')[0]
300
-
301
- setTimeout(() => {
302
-
303
- subMenu.focus();
304
-
305
- }, 10);
306
- subMenu.classList.add('hovered');
307
- }
308
- }
309
-
310
- } else if (event.which == 38) {
311
-
312
- // On Clicking Top
313
-
314
- this.searchInput.current.blur();
315
- }
316
- else if (event.which == 13) {
317
-
318
- // On Clicking Enter
319
-
320
- this.redirectTo(this.state.querySearchList[this.state.querySearchList.length - 1]);
321
- this.advancedSearch(searchText);
322
-
323
- } else {
324
-
325
-
326
- }
327
- }
328
- }
329
-
330
- onSelect = (event) => {
331
- const { searchList = [], querySearchList = [] } = this.state;
332
- const searchLength = searchList.length - 1;
333
- if (event.which == 40) {
334
- this.searchInput.current.blur();
335
- var menus = document.getElementsByClassName('spotlight-menu-list')[0];
336
- if (menus) {
337
- subMenu = menus.querySelectorAll('.list-group-item')[0]
338
- // subMenu.focus();
339
- subMenu.classList.add('hovered');
340
- }
341
- } else if (event.which == 38) {
342
- this.searchInput.current.blur();
343
- }
344
- else if (event.which == 13) {
345
- if (searchList.length)
346
- this.redirectTo(searchList[searchList.length - 1][this.currentIndex]);
347
- else if (querySearchList.length)
348
- this.redirectTo(searchList[searchList.length - 1][this.currentIndex]);
349
- }
350
- this.currentIndex = 0;
351
- }
352
-
353
- traverse = (direction) => {
354
- subMenu.classList.remove('hovered');
355
- if (direction) {
356
- if (subMenu.nextSibling) {
357
-
358
- this.currentIndex++;
359
-
360
- subMenu = subMenu.nextSibling;
361
-
362
- subMenu.classList.add('hovered');
363
-
364
- // subMenu.focus();
365
- } else {
366
- this.searchInput.current.focus()
367
- }
368
- } else {
369
- if (subMenu.previousSibling) {
370
- this.currentIndex--;
371
- subMenu = subMenu.previousSibling;
372
- subMenu.classList.add('hovered');
373
-
374
- // subMenu.focus();
375
- } else {
376
-
377
- this.searchInput.current.focus()
378
- }
379
- }
380
- }
381
-
382
- redirectTo = (state) => {
383
-
384
- this.setState({ isOpen: !this.state.isOpen });
385
-
386
- if (state) {
387
- Location.navigate({ url: state.path });
388
- }
389
- }
390
-
391
- render() {
392
-
393
- const { menus, searchText, isOpen, matching = [], config } = this.state;
394
-
395
- if (isOpen) {
396
- // document.getElementById('spotlight-input').focus();
397
- }
398
-
399
- let matches = [];
400
-
401
- if (searchText) {
402
-
403
- //
404
- const { searchList = [] } = this.state
405
-
406
- menus.forEach((module) => {
407
- if (module.is_visible && module.caption && module.path && module.caption.toLowerCase().indexOf(searchText.toLowerCase()) != -1) {
408
- matches.push(module)
409
- }
410
- });
411
-
412
- searchList.push(matches);
413
- }
414
-
415
- const autofocus = (el) => {
416
- const found = ReactDOM.findDOMNode(el);
417
-
418
-
419
- if (found && document.activeElement && document.activeElement.id !== "spotlight-input") {
420
- found.focus();
421
- }
422
- };
423
-
424
-
425
- return (
426
- <Modal destroyOnClose={true} className="spotlight-modal" visible={isOpen} header={null} footer={null} onCancel={() => {
427
-
428
- this.setState({ isOpen: false })
429
- }
430
- }>
431
-
432
- <GlobalHotKeys root={false} attach={window} focused={true} keyMap={this.keyboardControlMap} handlers={this.keyboardHandlers}>
433
-
434
-
435
- <div className="spotlight-modal">
436
-
437
- <div className="input-group">
438
-
439
- <div className="input-group-prepend">
440
- <span className="input-group-text" id="basic-addon1">
441
- <i className="fa fa-search"></i></span>
442
- </div>
443
-
444
- <input autoComplete="Off" ref={this.searchInput} id="spotlight-input" type="text" className="form-control" onKeyDown={this.keyboardPress.bind(this)} onChange={(event) => { this.currentIndex = 0; this.searchMenus(event) }} placeholder="Search accross all available menus" aria-label="Username" aria-describedby="basic-addon1" />
445
- </div>
446
-
447
- {/* Menus matching Text */}
448
- {
449
- searchText
450
- // &&
451
- // matches.length != 0
452
- &&
453
- <div className="card spotlight-menu-list">
454
-
455
- <div className="list-group list-group-flush">
456
- {
457
- matches.slice(0, 10).map((match, key) => (
458
- <li
459
- // tabIndex={key}
460
- ref={this.menuItem}
461
- onKeyDown={this.onSelect}
462
- onClick={() => this.redirectTo(match)}
463
- key={key + 1}
464
- className="list-group-item">
465
- {match.caption}
466
- </li>
467
- ))
468
-
469
- }
470
-
471
- {/* Config */}
472
- {config.map((condition) => <QuerySearcher callback={() => {
473
-
474
- this.setState({ isOpen: false })
475
-
476
- }} query={searchText} config={condition} />)}
477
- {/* Config Ends */}
478
-
479
-
480
- </div>
481
-
482
- </div>
483
- }
484
- {/* Menus Ends */}
485
-
486
-
487
-
488
-
489
- {/* Matching List */}
490
- {/* {
491
- searchText
492
- &&
493
- matching.length != 0 &&
494
- <div className="card spotlight-menu-list">
495
-
496
- <div className="list-group list-group-flush">
497
- {
498
- matching.slice(0, 10).map((match, key) => (
499
- <li
500
- // tabIndex={key}
501
- ref={this.menuItem}
502
- onKeyDown={this.onSelect}
503
- onClick={() => this.redirectTo(match)}
504
- key={key + 1}
505
- className="list-group-item">
506
- {match.label}
507
- </li>
508
- ))
509
-
510
- }
511
- </div>
512
- </div>
513
- } */}
514
-
515
- {/* Matching List ends */}
516
-
517
-
518
- </div>
519
-
520
-
521
- </GlobalHotKeys>
522
- </Modal >
523
-
524
- )
525
- }
526
- }
527
-
528
-
529
- /**
530
- * Component would accept the config and search
531
- */
532
- function QuerySearcher({ config, query, callback }) {
533
-
534
- const [loading, setLoading] = useState(false);
535
-
536
- const [results, setResults] = useState([]);
537
-
538
- useEffect(() => {
539
-
540
- // Load the data
541
- loadData(config);
542
-
543
- }, [query])
544
-
545
- /**
546
- * Load the data
547
- */
548
- async function loadData(condition) {
549
-
550
- setLoading(true);
551
-
552
- const results = await condition.search(query)
553
-
554
- setResults(results);
555
-
556
- setLoading(false);
557
- }
558
-
559
- /**
560
- * Redirect to the element
561
- */
562
- function redirectTo(record) {
563
-
564
- if (record.path) {
565
-
566
- Location.navigate({ url: record.path });
567
-
568
- } else {
569
-
570
- message.warning('Path Missing')
571
- }
572
-
573
- callback();
574
- }
575
-
576
-
577
- function onSelect(event, record, index) {
578
-
579
-
580
- if (event.which == 40) {
581
-
582
- // this.searchInput.current.blur();
583
-
584
- // var menus = document.getElementsByClassName('spotlight-menu-list')[0];
585
-
586
- // if (menus) {
587
- // subMenu = menus.querySelectorAll('.list-group-item')[0]
588
- // // subMenu.focus();
589
- // subMenu.classList.add('hovered');
590
- // }
591
- } else if (event.which == 38) {
592
- // this.searchInput.current.blur();
593
- }
594
- else if (event.which == 13) {
595
-
596
- redirectTo(record);
597
-
598
- // if (searchList.length)
599
- // this.redirectTo(searchList[searchList.length - 1][this.currentIndex]);
600
- // else if (querySearchList.length)
601
- // this.redirectTo(searchList[searchList.length - 1][this.currentIndex]);
602
- }
603
- }
604
-
605
- return (<>
606
-
607
- {
608
- loading
609
- ?
610
- <div className='skeleton-effect'><Skeleton /></div>
611
- :
612
- <>
613
- {
614
- results.map((record, index) => {
615
-
616
- return (<li
617
- // tabIndex={key}
618
- // ref={this.menuItem}
619
- onKeyDown={(event) => {
620
-
621
- onSelect(event, record, index)
622
-
623
- }}
624
- onClick={() => redirectTo(record)}
625
- key={index + 1}
626
- className="list-group-item">
627
- {record.label}
628
- </li>)
629
- })
630
- }
631
- </>
632
- }
633
-
634
- </>)
635
-
1
+ import React, { Component, useState, useEffect } from 'react';
2
+
3
+ import ReactDOM from 'react-dom';
4
+
5
+
6
+ import './spotlight-search.component.scss';
7
+
8
+ import { message, Modal, Skeleton } from 'antd';
9
+
10
+ import { GlobalHotKeys } from 'react-hotkeys';
11
+
12
+ import { Location, SettingsUtil } from './../../utils/';
13
+
14
+ // import {
15
+ // MenusAPI,
16
+ // }
17
+ // from '../../../core/models';
18
+
19
+ let subMenu;
20
+
21
+
22
+
23
+ const SpotlightReference = React.forwardRef((props, ref) => {
24
+ return <Spotlight {...props} ref={ref} />
25
+ })
26
+
27
+ export default SpotlightReference;
28
+
29
+
30
+ class Spotlight extends Component {
31
+
32
+ constructor(props) {
33
+ super(props);
34
+
35
+ this.searchInput = React.createRef();
36
+
37
+ this.menuItem = React.createRef();
38
+
39
+ this.state = {
40
+ isOpen: false,
41
+ menus: [],
42
+ searchText: '',
43
+ activeMenu: {},
44
+ searchList: [],
45
+ querySearchList: [],
46
+ user: props.user,
47
+ config: props.config || [],
48
+
49
+ matching: []
50
+ }
51
+
52
+ // this.openSpotlightModal();
53
+ }
54
+
55
+ openModal = () => {
56
+
57
+ let menus = SettingsUtil.getMenus();
58
+
59
+ let config = SettingsUtil.getConfig();
60
+
61
+ this.setState({ isOpen: true, menus, config });
62
+
63
+ }
64
+
65
+ currentIndex = 0;
66
+
67
+
68
+ keyboardControlMap = {
69
+ moveUp: 'up',
70
+ moveDown: 'down',
71
+ enter: 'enter'
72
+ }
73
+
74
+ keyboardHandlers = {
75
+ 'moveUp': (event) => { this.traverse(0) },
76
+ 'moveDown': (event) => { this.traverse(1) },
77
+ 'enter': (event) => { this.onSelect(event) },
78
+ 'escape': (event) => { this.setState({ isOpen: false }) },
79
+
80
+ }
81
+
82
+ componentDidMount = async () => {
83
+ // this.openSpotlightModal()
84
+ }
85
+
86
+
87
+ openSpotlightModal = async () => {
88
+ const { user } = this.state;
89
+
90
+ this.currentIndex = 0;
91
+
92
+ if (!this.state.isOpen) {
93
+ setTimeout(() => { this.searchInput.current.focus() }, 300);
94
+ }
95
+
96
+ // const result = await MenusAPI.getMenus(user);
97
+
98
+ let menus = SettingsUtil.getMenus();
99
+
100
+
101
+
102
+ this.setState({ isOpen: true, menus });
103
+ }
104
+
105
+ searchMenus = (event) => {
106
+ let searchText = event.target.value
107
+ this.setState({ searchText: searchText });
108
+
109
+
110
+ // Start the search if condition matches
111
+ // this.searchQuery(searchText);
112
+ }
113
+
114
+ /**
115
+ *
116
+ * @param {*} query
117
+ */
118
+ searchQuery = async (query) => {
119
+
120
+ // Variable to record matching data
121
+ let { matching = [], config } = this.state;
122
+
123
+ config.forEach(async (condition) => {
124
+
125
+ if (query.length >= 3) {
126
+
127
+ const results = await condition.search(query)
128
+
129
+ matching = [].concat(matching, results);
130
+
131
+ this.setState({ matching })
132
+ }
133
+ })
134
+
135
+ //
136
+ }
137
+
138
+ advancedSearch = (searchText) => {
139
+ {
140
+
141
+ let obj = {};
142
+ if (searchText.length == 10 && searchText.slice(0, 3) != "INV") {
143
+ if (parseInt(searchText).toString().length == 10) {
144
+ obj = 2;
145
+ }
146
+ else if (/[^a-zA-Z0-9]/.test(searchText) && searchText.indexOf("-") === -1) {
147
+ obj = 2;
148
+ }
149
+ else {
150
+ obj = 1;
151
+ }
152
+ }
153
+ else if (searchText.slice(0, 3) == "TKT") { // if the first 3 characters are tkt , its gonna be a ticket
154
+ obj = 6;
155
+ } else if (searchText.slice(0, 3) == "INV") {
156
+ obj = 8;
157
+ } else if ((parseInt(searchText).toString().length == 4 || parseInt(searchText).toString().length == 3) && parseInt(searchText).toString() != "NaN") {
158
+ obj = 4;
159
+ } else if (searchText.length == 11 && searchText.indexOf("-") === -1) {
160
+ if (/\s/g.test((searchText).charAt(4))) { // check if the 4th characted is space
161
+ obj = 4;
162
+ } else {
163
+ obj = 2;
164
+ }
165
+ } else if (!isNaN(searchText)) { // checking if it is a number , to check for booking id
166
+ obj = 8;
167
+ } else if (searchText.length == 16) {
168
+ obj = 3;
169
+ } else if (searchText.indexOf("-") != -1) {
170
+ obj = 5;
171
+ }
172
+ // else {
173
+ // obj = 2; //@ToDp : Carefully write execution for this case
174
+ // }
175
+
176
+ this.searchVal(obj, searchText);
177
+ }
178
+ }
179
+
180
+ searchVal = async (obj, searchText) => {
181
+ let result;
182
+ let querySearchList = []
183
+ let url
184
+ let body
185
+ switch (obj) {
186
+
187
+ // To search PNR
188
+ case 1:
189
+ url = "bookingToken/" + searchText;
190
+ result = await Get({ url: url });
191
+ if (result.success && Object.keys(result.response).length) {
192
+ result.response.name = searchText;
193
+ result.response.url = 'booking/' + result.response.id;
194
+ querySearchList.push(result.response)
195
+ this.setState({ querySearchList });
196
+
197
+
198
+ Location.navigate({ url: '/booking/' + result.response.id });
199
+ }
200
+ break;
201
+
202
+ // To search User
203
+ case 2: //@TODO MAKE A LIST PAGE WHERE WE SHOULD REDIRECT
204
+ // getSetValue.setValue(searchText);
205
+
206
+ url = '/searchUsers?searchText=' + searchText;
207
+ // url = '/searchUsers';
208
+ const queryParam = { searchText };
209
+ Location.navigate({ url: url });
210
+ // Location.navigate({ url, queryParam });
211
+ break;
212
+
213
+ // To search Payment
214
+ case 3: //@TODO MAKE A LIST PAGE WHERE WE SHOULD REDIRECT
215
+ // getSetValue.setValue(searchText);
216
+
217
+ break;
218
+
219
+ // To search vehicle
220
+ case 4: //@TODO MAKE A LIST PAGE WHERE WE SHOULD REDIRECT
221
+
222
+ url = '/searchVehicles?searchText=' + searchText;
223
+ // url = '/searchVehicles';
224
+ //const queryParam = { searchText };
225
+ Location.navigate({ url: url });
226
+
227
+ break;
228
+
229
+ // To search coupon
230
+ case 5:
231
+
232
+ body = 'coupon_code="' + searchText + '"';
233
+ result = await Get({ url: "coupon?query=" + body });
234
+ if (result.success && result.response.length) {
235
+ url = '/campaign/' + result.response[0].campaign_id;
236
+ Location.navigate({ url: url })
237
+ }
238
+ break;
239
+
240
+ // To search Ticket
241
+ case 6:
242
+
243
+ // url = "/ticket/" + searchText + "\"";
244
+ // result = await Get({ url: url });
245
+
246
+ body = 'ticket_number="' + searchText + '"';
247
+ result = await Get({ url: "task?query=" + body });
248
+ if (result.success && result.response.length) {
249
+ url = '/ticket/' + result.response[0].id;
250
+ Location.navigate({ url: url })
251
+ }
252
+ break;
253
+
254
+ // To search Vendor
255
+ case 7: //@TODO MAKE A LIST PAGE WHERE WE SHOULD REDIRECT
256
+
257
+ break;
258
+
259
+ // To search Invoice
260
+ case 8:
261
+
262
+ body = 'invoice="' + searchText + '"';
263
+ result = await Get({ url: "expenseVoucher?query=" + body });
264
+ if (result.response.length) {
265
+ url = '/expenseVoucher/' + result.response[0].id;
266
+ Location.navigate({ url: url })
267
+ }
268
+ break;
269
+
270
+ case 9: //@TODO MAKE A LIST PAGE WHERE WE SHOULD REDIRECT
271
+
272
+ break;
273
+
274
+ default:
275
+ this.setState({ querySearchList: [] })
276
+ break;
277
+ }
278
+ }
279
+
280
+
281
+ keyboardPress = (event) => {
282
+ const { searchText } = this.state;
283
+
284
+ var menus = document.getElementsByClassName('spotlight-menu-list')[0];
285
+
286
+ if (event.target.value) {
287
+
288
+ // On Clicking Down
289
+ if (event.which == 40) {
290
+
291
+ this.searchInput.current.blur();
292
+
293
+ if (menus && menus.children.length) {
294
+
295
+ var menus = document.getElementsByClassName('spotlight-menu-list')[0];
296
+
297
+ if (menus) {
298
+
299
+ subMenu = menus.querySelectorAll('.list-group-item')[0]
300
+
301
+ setTimeout(() => {
302
+
303
+ subMenu.focus();
304
+
305
+ }, 10);
306
+ subMenu.classList.add('hovered');
307
+ }
308
+ }
309
+
310
+ } else if (event.which == 38) {
311
+
312
+ // On Clicking Top
313
+
314
+ this.searchInput.current.blur();
315
+ }
316
+ else if (event.which == 13) {
317
+
318
+ // On Clicking Enter
319
+
320
+ this.redirectTo(this.state.querySearchList[this.state.querySearchList.length - 1]);
321
+ this.advancedSearch(searchText);
322
+
323
+ } else {
324
+
325
+
326
+ }
327
+ }
328
+ }
329
+
330
+ onSelect = (event) => {
331
+ const { searchList = [], querySearchList = [] } = this.state;
332
+ const searchLength = searchList.length - 1;
333
+ if (event.which == 40) {
334
+ this.searchInput.current.blur();
335
+ var menus = document.getElementsByClassName('spotlight-menu-list')[0];
336
+ if (menus) {
337
+ subMenu = menus.querySelectorAll('.list-group-item')[0]
338
+ // subMenu.focus();
339
+ subMenu.classList.add('hovered');
340
+ }
341
+ } else if (event.which == 38) {
342
+ this.searchInput.current.blur();
343
+ }
344
+ else if (event.which == 13) {
345
+ if (searchList.length)
346
+ this.redirectTo(searchList[searchList.length - 1][this.currentIndex]);
347
+ else if (querySearchList.length)
348
+ this.redirectTo(searchList[searchList.length - 1][this.currentIndex]);
349
+ }
350
+ this.currentIndex = 0;
351
+ }
352
+
353
+ traverse = (direction) => {
354
+ subMenu.classList.remove('hovered');
355
+ if (direction) {
356
+ if (subMenu.nextSibling) {
357
+
358
+ this.currentIndex++;
359
+
360
+ subMenu = subMenu.nextSibling;
361
+
362
+ subMenu.classList.add('hovered');
363
+
364
+ // subMenu.focus();
365
+ } else {
366
+ this.searchInput.current.focus()
367
+ }
368
+ } else {
369
+ if (subMenu.previousSibling) {
370
+ this.currentIndex--;
371
+ subMenu = subMenu.previousSibling;
372
+ subMenu.classList.add('hovered');
373
+
374
+ // subMenu.focus();
375
+ } else {
376
+
377
+ this.searchInput.current.focus()
378
+ }
379
+ }
380
+ }
381
+
382
+ redirectTo = (state) => {
383
+
384
+ this.setState({ isOpen: !this.state.isOpen });
385
+
386
+ if (state) {
387
+ Location.navigate({ url: state.path });
388
+ }
389
+ }
390
+
391
+ render() {
392
+
393
+ const { menus, searchText, isOpen, matching = [], config } = this.state;
394
+
395
+ if (isOpen) {
396
+ // document.getElementById('spotlight-input').focus();
397
+ }
398
+
399
+ let matches = [];
400
+
401
+ if (searchText) {
402
+
403
+ //
404
+ const { searchList = [] } = this.state
405
+
406
+ menus.forEach((module) => {
407
+ if (module.is_visible && module.caption && module.path && module.caption.toLowerCase().indexOf(searchText.toLowerCase()) != -1) {
408
+ matches.push(module)
409
+ }
410
+ });
411
+
412
+ searchList.push(matches);
413
+ }
414
+
415
+ const autofocus = (el) => {
416
+ const found = ReactDOM.findDOMNode(el);
417
+
418
+
419
+ if (found && document.activeElement && document.activeElement.id !== "spotlight-input") {
420
+ found.focus();
421
+ }
422
+ };
423
+
424
+
425
+ return (
426
+ <Modal destroyOnClose={true} className="spotlight-modal" visible={isOpen} header={null} footer={null} onCancel={() => {
427
+
428
+ this.setState({ isOpen: false })
429
+ }
430
+ }>
431
+
432
+ <GlobalHotKeys root={false} attach={window} focused={true} keyMap={this.keyboardControlMap} handlers={this.keyboardHandlers}>
433
+
434
+
435
+ <div className="spotlight-modal">
436
+
437
+ <div className="input-group">
438
+
439
+ <div className="input-group-prepend">
440
+ <span className="input-group-text" id="basic-addon1">
441
+ <i className="fa fa-search"></i></span>
442
+ </div>
443
+
444
+ <input autoComplete="Off" ref={this.searchInput} id="spotlight-input" type="text" className="form-control" onKeyDown={this.keyboardPress.bind(this)} onChange={(event) => { this.currentIndex = 0; this.searchMenus(event) }} placeholder="Search accross all available menus" aria-label="Username" aria-describedby="basic-addon1" />
445
+ </div>
446
+
447
+ {/* Menus matching Text */}
448
+ {
449
+ searchText
450
+ // &&
451
+ // matches.length != 0
452
+ &&
453
+ <div className="card spotlight-menu-list">
454
+
455
+ <div className="list-group list-group-flush">
456
+ {
457
+ matches.slice(0, 10).map((match, key) => (
458
+ <li
459
+ // tabIndex={key}
460
+ ref={this.menuItem}
461
+ onKeyDown={this.onSelect}
462
+ onClick={() => this.redirectTo(match)}
463
+ key={key + 1}
464
+ className="list-group-item">
465
+ {match.caption}
466
+ </li>
467
+ ))
468
+
469
+ }
470
+
471
+ {/* Config */}
472
+ {config.map((condition) => <QuerySearcher callback={() => {
473
+
474
+ this.setState({ isOpen: false })
475
+
476
+ }} query={searchText} config={condition} />)}
477
+ {/* Config Ends */}
478
+
479
+
480
+ </div>
481
+
482
+ </div>
483
+ }
484
+ {/* Menus Ends */}
485
+
486
+
487
+
488
+
489
+ {/* Matching List */}
490
+ {/* {
491
+ searchText
492
+ &&
493
+ matching.length != 0 &&
494
+ <div className="card spotlight-menu-list">
495
+
496
+ <div className="list-group list-group-flush">
497
+ {
498
+ matching.slice(0, 10).map((match, key) => (
499
+ <li
500
+ // tabIndex={key}
501
+ ref={this.menuItem}
502
+ onKeyDown={this.onSelect}
503
+ onClick={() => this.redirectTo(match)}
504
+ key={key + 1}
505
+ className="list-group-item">
506
+ {match.label}
507
+ </li>
508
+ ))
509
+
510
+ }
511
+ </div>
512
+ </div>
513
+ } */}
514
+
515
+ {/* Matching List ends */}
516
+
517
+
518
+ </div>
519
+
520
+
521
+ </GlobalHotKeys>
522
+ </Modal >
523
+
524
+ )
525
+ }
526
+ }
527
+
528
+
529
+ /**
530
+ * Component would accept the config and search
531
+ */
532
+ function QuerySearcher({ config, query, callback }) {
533
+
534
+ const [loading, setLoading] = useState(false);
535
+
536
+ const [results, setResults] = useState([]);
537
+
538
+ useEffect(() => {
539
+
540
+ // Load the data
541
+ loadData(config);
542
+
543
+ }, [query])
544
+
545
+ /**
546
+ * Load the data
547
+ */
548
+ async function loadData(condition) {
549
+
550
+ setLoading(true);
551
+
552
+ const results = await condition.search(query)
553
+
554
+ setResults(results);
555
+
556
+ setLoading(false);
557
+ }
558
+
559
+ /**
560
+ * Redirect to the element
561
+ */
562
+ function redirectTo(record) {
563
+
564
+ if (record.path) {
565
+
566
+ Location.navigate({ url: record.path });
567
+
568
+ } else {
569
+
570
+ message.warning('Path Missing')
571
+ }
572
+
573
+ callback();
574
+ }
575
+
576
+
577
+ function onSelect(event, record, index) {
578
+
579
+
580
+ if (event.which == 40) {
581
+
582
+ // this.searchInput.current.blur();
583
+
584
+ // var menus = document.getElementsByClassName('spotlight-menu-list')[0];
585
+
586
+ // if (menus) {
587
+ // subMenu = menus.querySelectorAll('.list-group-item')[0]
588
+ // // subMenu.focus();
589
+ // subMenu.classList.add('hovered');
590
+ // }
591
+ } else if (event.which == 38) {
592
+ // this.searchInput.current.blur();
593
+ }
594
+ else if (event.which == 13) {
595
+
596
+ redirectTo(record);
597
+
598
+ // if (searchList.length)
599
+ // this.redirectTo(searchList[searchList.length - 1][this.currentIndex]);
600
+ // else if (querySearchList.length)
601
+ // this.redirectTo(searchList[searchList.length - 1][this.currentIndex]);
602
+ }
603
+ }
604
+
605
+ return (<>
606
+
607
+ {
608
+ loading
609
+ ?
610
+ <div className='skeleton-effect'><Skeleton /></div>
611
+ :
612
+ <>
613
+ {
614
+ results.map((record, index) => {
615
+
616
+ return (<li
617
+ // tabIndex={key}
618
+ // ref={this.menuItem}
619
+ onKeyDown={(event) => {
620
+
621
+ onSelect(event, record, index)
622
+
623
+ }}
624
+ onClick={() => redirectTo(record)}
625
+ key={index + 1}
626
+ className="list-group-item">
627
+ {record.label}
628
+ </li>)
629
+ })
630
+ }
631
+ </>
632
+ }
633
+
634
+ </>)
635
+
636
636
  }