ui-soxo-bootstrap-core 2.6.6 → 2.6.7
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.
- package/.babelrc +8 -8
- package/.github/workflows/npm-publish.yml +33 -33
- package/.husky/pre-commit +11 -11
- package/.prettierrc.json +10 -10
- package/babel.config.js +2 -2
- package/core/components/component-loader/component-loader.js +125 -125
- package/core/components/component-wrapper/component-wrapper.js +121 -121
- package/core/components/external-window/DEVELOPER_GUIDE.md +705 -705
- package/core/components/external-window/external-window.js +236 -236
- package/core/components/external-window/external-window.test.js +80 -80
- package/core/components/extra-info/extra-info-details.js +155 -155
- package/core/components/extra-info/extra-info-details.scss +26 -26
- package/core/components/extra-info/extra-info.js +134 -134
- package/core/components/index.js +20 -20
- package/core/components/landing-api/landing-api.js +492 -492
- package/core/components/landing-api/landing-api.scss +19 -19
- package/core/components/menu-template-api/menu-template-api.js +321 -321
- package/core/components/root-application-api/root-application-api.js +174 -174
- package/core/index.js +13 -13
- package/core/lib/Store.js +365 -365
- package/core/lib/components/application-bootstrap/application-bootstrap.js +115 -115
- package/core/lib/components/approval-form/approval-form.js +280 -280
- package/core/lib/components/approval-form/approval-form.scss +183 -183
- package/core/lib/components/approval-list/approval-list.js +143 -143
- package/core/lib/components/approval-list/approval-list.scss +2 -2
- package/core/lib/components/approval-list/components/request-card/request-card.js +42 -42
- package/core/lib/components/approval-list/components/request-card/request-card.scss +30 -30
- package/core/lib/components/camera/camera.js +230 -230
- package/core/lib/components/camera/camera.scss +86 -86
- package/core/lib/components/comment-block/comment-block.js +138 -138
- package/core/lib/components/comment-block/comment-block.scss +3 -3
- package/core/lib/components/confirm-modal/confirm-modal.js +82 -82
- package/core/lib/components/confirm-modal/confirm-modal.scss +2 -2
- package/core/lib/components/consent/consent.js +67 -67
- package/core/lib/components/consent/pdf-signature.js +299 -299
- package/core/lib/components/consent/signature-pad.js +90 -90
- package/core/lib/components/consent/signature-pad.scss +14 -14
- package/core/lib/components/file-upload/file-upload.js +133 -133
- package/core/lib/components/finger-print-reader/finger-print-reader.js +295 -295
- package/core/lib/components/finger-print-reader/finger-print-reader.scss +47 -47
- package/core/lib/components/finger-print-search/finger-print-search.js +200 -200
- package/core/lib/components/finger-print-search/finger-print-search.scss +47 -47
- package/core/lib/components/global-header/animations.js +18 -18
- package/core/lib/components/global-header/global-header.js +413 -413
- package/core/lib/components/global-header/global-header.scss +369 -369
- package/core/lib/components/header/generic-header.js +76 -76
- package/core/lib/components/header/generic-header.scss +99 -99
- package/core/lib/components/image-preview/image-preview.js +33 -33
- package/core/lib/components/image-wrapper/image-wrapper.js +108 -108
- package/core/lib/components/image-wrapper/image-wrapper.scss +12 -12
- package/core/lib/components/index.js +206 -206
- package/core/lib/components/landing/landing.js +403 -403
- package/core/lib/components/language-switcher/language-switcher.js +49 -49
- package/core/lib/components/menu-context/menu-context.js +69 -69
- package/core/lib/components/menu-template/menu-template.js +249 -249
- package/core/lib/components/menu-template/menu-template.scss +9 -9
- package/core/lib/components/modal-search/modal-search.js +153 -153
- package/core/lib/components/modal-search/modal-search.scss +78 -78
- package/core/lib/components/modal-wrapper/modal-manager.js +15 -15
- package/core/lib/components/modal-wrapper/modal-wrapper.js +108 -108
- package/core/lib/components/modal-wrapper/modal-wrapper.scss +13 -13
- package/core/lib/components/notice-board/notice-board.js +132 -132
- package/core/lib/components/notice-board/notice-board.scss +65 -65
- package/core/lib/components/page-container/page-container.js +55 -55
- package/core/lib/components/page-container/page-container.scss +8 -8
- package/core/lib/components/page-header/page-header.js +23 -23
- package/core/lib/components/page-header/page-header.scss +17 -17
- package/core/lib/components/pdf-viewer/pdf-viewer.js +56 -56
- package/core/lib/components/portlet-table/components/table-actions/table-actions.js +58 -58
- package/core/lib/components/portlet-table/components/table-actions/table-actions.scss +1 -1
- package/core/lib/components/portlet-table/components/table-data/table-data.js +106 -106
- package/core/lib/components/portlet-table/portlet-table.js +63 -63
- package/core/lib/components/portlet-table/portlet-table.scss +90 -90
- package/core/lib/components/progress-bar/progress-bar.js +58 -58
- package/core/lib/components/progress-bar/progress-bar.scss +15 -15
- package/core/lib/components/request-form/request-form.js +110 -110
- package/core/lib/components/root-application/root-application.js +70 -70
- package/core/lib/components/rupee/rupee.js +14 -14
- package/core/lib/components/script-input/script-input.js +169 -169
- package/core/lib/components/script-input/script-input.scss +8 -8
- package/core/lib/components/sidemenu/animations.js +51 -51
- package/core/lib/components/sidemenu/sidemenu.js +578 -578
- package/core/lib/components/sidemenu/sidemenu.scss +277 -277
- package/core/lib/components/spotlight-search/spotlight-search.component.js +635 -635
- package/core/lib/components/spotlight-search/spotlight-search.component.scss +78 -78
- package/core/lib/components/table-wrapper/table-wrapper.js +135 -135
- package/core/lib/components/table-wrapper/table-wrapper.scss +72 -72
- package/core/lib/components/ui_elements/Loader.js +12 -12
- package/core/lib/components/ui_elements/Notify.js +12 -12
- package/core/lib/components/ui_elements/PlaceHolder.js +33 -33
- package/core/lib/components/web-camera/web-camera.js +161 -161
- package/core/lib/components/web-camera/web-camera.scss +28 -28
- package/core/lib/core.md +9 -9
- package/core/lib/elements/Elements.md +2 -2
- package/core/lib/elements/basic/LoggedUserRedirect.js +21 -21
- package/core/lib/elements/basic/PrivateRoute.js +16 -16
- package/core/lib/elements/basic/button/Button.md +43 -43
- package/core/lib/elements/basic/button/button.js +170 -170
- package/core/lib/elements/basic/card/Card.md +15 -15
- package/core/lib/elements/basic/card/card.js +40 -40
- package/core/lib/elements/basic/card/card.scss +13 -13
- package/core/lib/elements/basic/checkbox/checkbox.js +23 -23
- package/core/lib/elements/basic/col/col.js +15 -15
- package/core/lib/elements/basic/copy-to-clipboard/Readme.md +40 -40
- package/core/lib/elements/basic/copy-to-clipboard/copy-to-clipboard.js +61 -61
- package/core/lib/elements/basic/country-phone-input/Readme.md +98 -98
- package/core/lib/elements/basic/country-phone-input/country-phone-input.js +106 -106
- package/core/lib/elements/basic/country-phone-input/phone-input.scss +61 -61
- package/core/lib/elements/basic/datepicker/datepicker.js +33 -33
- package/core/lib/elements/basic/dragabble-wrapper/draggable-wrapper.js +136 -136
- package/core/lib/elements/basic/empty/empty.js +14 -14
- package/core/lib/elements/basic/fingerprint-protrected/fingerprint-protected.js +118 -118
- package/core/lib/elements/basic/fingerprint-protrected/fingerprint-protected.scss +10 -10
- package/core/lib/elements/basic/form/form.js +70 -70
- package/core/lib/elements/basic/form/form.scss +3 -3
- package/core/lib/elements/basic/image/image.js +45 -45
- package/core/lib/elements/basic/image/image.scss +17 -17
- package/core/lib/elements/basic/image/readme.md +26 -26
- package/core/lib/elements/basic/image-viewer/image-viewer.js +108 -108
- package/core/lib/elements/basic/image-viewer/image-viewer.scss +7 -7
- package/core/lib/elements/basic/input/input.js +81 -81
- package/core/lib/elements/basic/input/readme.md +77 -77
- package/core/lib/elements/basic/json-input/json-input.js +51 -51
- package/core/lib/elements/basic/menu-dashboard/menu-dashboard.js +216 -216
- package/core/lib/elements/basic/menu-dashboard/menu-dashboard.scss +28 -28
- package/core/lib/elements/basic/menu-tree/menu-tree.js +127 -114
- package/core/lib/elements/basic/modal/modal.js +64 -64
- package/core/lib/elements/basic/modal/readme.md +62 -62
- package/core/lib/elements/basic/popconfirm/popconfirm.js +17 -17
- package/core/lib/elements/basic/popover/popover.js +12 -12
- package/core/lib/elements/basic/radio/radio.js +18 -18
- package/core/lib/elements/basic/rangepicker/rangepicker.js +141 -141
- package/core/lib/elements/basic/rangepicker/rangepicker.scss +24 -24
- package/core/lib/elements/basic/rangepicker/readme.md +81 -81
- package/core/lib/elements/basic/reference-select/readme.md +18 -18
- package/core/lib/elements/basic/reference-select/reference-select.js +337 -337
- package/core/lib/elements/basic/row/row.js +15 -15
- package/core/lib/elements/basic/select/select.js +46 -46
- package/core/lib/elements/basic/select-box/readme.md +52 -52
- package/core/lib/elements/basic/select-box/select-box.js +63 -63
- package/core/lib/elements/basic/skeleton/readme.md +35 -35
- package/core/lib/elements/basic/skeleton/skeleton.js +35 -35
- package/core/lib/elements/basic/skeleton/skeleton.scss +53 -53
- package/core/lib/elements/basic/space/space.js +12 -12
- package/core/lib/elements/basic/switch/readme.md +29 -29
- package/core/lib/elements/basic/switch/switch.js +67 -67
- package/core/lib/elements/basic/tab/tab.js +14 -14
- package/core/lib/elements/basic/table/readme.md +8 -8
- package/core/lib/elements/basic/table/table.js +100 -100
- package/core/lib/elements/basic/tag/tag.js +63 -63
- package/core/lib/elements/basic/tag/tag.scss +2 -2
- package/core/lib/elements/basic/timeline/timeline.js +13 -13
- package/core/lib/elements/basic/title/readme.md +20 -20
- package/core/lib/elements/basic/title/title.js +37 -37
- package/core/lib/elements/basic/user-search/user-search.js +192 -192
- package/core/lib/elements/complex/barcode/barcode.js +27 -27
- package/core/lib/elements/complex/bargraph/bar-graph.js +262 -262
- package/core/lib/elements/complex/basic-table/basic-table.js +110 -110
- package/core/lib/elements/complex/basic-table/basic-table.scss +4 -4
- package/core/lib/elements/complex/date-display/date-display.js +37 -37
- package/core/lib/elements/complex/error-boundary/error-boundary.js +29 -29
- package/core/lib/elements/complex/google-location-input/map-container-library-load.js +92 -92
- package/core/lib/elements/complex/google-map/google-map.js +230 -230
- package/core/lib/elements/complex/google-map/google-map.scss +13 -13
- package/core/lib/elements/complex/line-graph/line-graph.js +108 -108
- package/core/lib/elements/complex/location-search-input/location-search-input.js +100 -100
- package/core/lib/elements/complex/pie-chart/pie-chart.js +202 -202
- package/core/lib/elements/complex/qr-code/qr-code.js +27 -27
- package/core/lib/elements/complex/qrscanner/qrscanner.js +57 -57
- package/core/lib/elements/complex/search-debounce/search-debounce.js +37 -37
- package/core/lib/elements/complex/statistic-card/dashboard-statistic-card.js +75 -75
- package/core/lib/elements/complex/statistic-card/statistic-card.js +28 -28
- package/core/lib/elements/index.js +226 -226
- package/core/lib/hooks/device-detect.js +25 -25
- package/core/lib/hooks/index.js +9 -9
- package/core/lib/hooks/use-location.js +33 -33
- package/core/lib/hooks/use-otp-timer.js +80 -80
- package/core/lib/hooks/use-window-size.js +34 -34
- package/core/lib/i18n.js +69 -69
- package/core/lib/index.js +106 -106
- package/core/lib/introduction.md +73 -73
- package/core/lib/js-styleguide.md +4112 -4112
- package/core/lib/models/actions/actions.js +127 -127
- package/core/lib/models/actions/components/action-detail/action-detail.js +190 -190
- package/core/lib/models/actions/components/custom-actions/custom-actions.js +185 -185
- package/core/lib/models/attachments/attachments.js +231 -231
- package/core/lib/models/base-loader.js +99 -99
- package/core/lib/models/base.js +716 -716
- package/core/lib/models/branches/branches.js +125 -125
- package/core/lib/models/checklists/checklists.js +114 -114
- package/core/lib/models/columns/columns.js +169 -169
- package/core/lib/models/columns/components/columns-add/columns-add.js +171 -171
- package/core/lib/models/comments/comments.js +213 -213
- package/core/lib/models/departments/departments.js +107 -107
- package/core/lib/models/financial-years/financial_years.js +127 -127
- package/core/lib/models/forms/components/form-creator/form-creator.js +624 -624
- package/core/lib/models/forms/components/form-creator/form-creator.scss +30 -30
- package/core/lib/models/forms/components/form-detail/form-detail.js +224 -224
- package/core/lib/models/forms/forms.js +121 -121
- package/core/lib/models/index.js +203 -203
- package/core/lib/models/invoice-numbers/invoice_numbers.js +204 -204
- package/core/lib/models/lookup-types/components/lookup-detail/lookup-detail.js +145 -145
- package/core/lib/models/lookup-types/lookup-types.js +113 -113
- package/core/lib/models/lookup-values/components/lookup-values-add/lookup-values-add.js +126 -126
- package/core/lib/models/lookup-values/lookup-values.js +107 -107
- package/core/lib/models/menu-roles/menu-roles.js +127 -127
- package/core/lib/models/menus/components/menu-add/menu-add.js +228 -228
- package/core/lib/models/menus/components/menu-detail/menu-detail.js +170 -170
- package/core/lib/models/menus/components/menu-list/menu-list.js +550 -593
- package/core/lib/models/menus/components/menu-list/menu-list.scss +5 -5
- package/core/lib/models/menus/components/menu-roles-add/menu-roles-add.js +183 -183
- package/core/lib/models/menus/menus.js +499 -499
- package/core/lib/models/models/components/model-detail/model-detail.js +137 -137
- package/core/lib/models/models/components/models.js +128 -128
- package/core/lib/models/modules/modules.js +204 -204
- package/core/lib/models/outbox/outbox.js +73 -73
- package/core/lib/models/pages/pages.js +107 -107
- package/core/lib/models/permissions/permissions.js +71 -71
- package/core/lib/models/process/components/process-add/process-add.js +181 -181
- package/core/lib/models/process/components/process-dashboard/process-dashboard.js +601 -601
- package/core/lib/models/process/components/process-dashboard/process-dashboard.scss +62 -62
- package/core/lib/models/process/components/process-detail/process-detail.js +140 -140
- package/core/lib/models/process/components/process-timeline/process-timeline.js +139 -139
- package/core/lib/models/process/components/task-detail/task-detail.js +240 -240
- package/core/lib/models/process/components/task-detail/task-detail.scss +27 -27
- package/core/lib/models/process/components/task-form/task-form.js +528 -528
- package/core/lib/models/process/components/task-form/task-form.scss +7 -7
- package/core/lib/models/process/components/task-list/task-list.js +221 -221
- package/core/lib/models/process/components/task-list/task-list.scss +14 -14
- package/core/lib/models/process/components/task-overview/task-overview.js +299 -299
- package/core/lib/models/process/components/task-overview-legacy/task-overview-legacy.js +192 -192
- package/core/lib/models/process/components/task-routes/task-routes.js +45 -45
- package/core/lib/models/process/components/task-status/task-status.js +175 -175
- package/core/lib/models/process/components/task-status/task-status.scss +11 -11
- package/core/lib/models/process/process.js +780 -780
- package/core/lib/models/process-transactions/process-transactions.js +123 -123
- package/core/lib/models/roles/roles.js +106 -106
- package/core/lib/models/scripts/scripts.js +111 -111
- package/core/lib/models/step-transactions/step-transcations.js +147 -147
- package/core/lib/models/steps/components/step-add/step-add.js +261 -261
- package/core/lib/models/steps/components/step-detail/step-detail.js +157 -157
- package/core/lib/models/steps/steps.js +356 -356
- package/core/lib/models/user-preferences/user-preferences.js +83 -83
- package/core/lib/models/users/components/user-add/user-add.js +226 -226
- package/core/lib/models/users/users.js +119 -119
- package/core/lib/modules/business/launch-page/launch-page.js +29 -29
- package/core/lib/modules/business/launch-page/launch-page.scss +5 -5
- package/core/lib/modules/business/slots/slots.js +231 -231
- package/core/lib/modules/business/slots/slots.scss +108 -108
- package/core/lib/modules/forms/components/field-customizer/field-customizer.js +138 -138
- package/core/lib/modules/forms/components/field-selector/field-selector.js +157 -157
- package/core/lib/modules/forms/components/field-selector/field-selector.scss +25 -25
- package/core/lib/modules/forms/components/form-display/form-display.js +203 -203
- package/core/lib/modules/forms/components/form-display/form-display.scss +9 -9
- package/core/lib/modules/forms/components/tab-customizer/tab-customizer.js +124 -124
- package/core/lib/modules/generic/generic-add/generic-add.js +213 -213
- package/core/lib/modules/generic/generic-detail/generic-detail.js +199 -199
- package/core/lib/modules/generic/generic-edit/generic-edit.js +120 -120
- package/core/lib/modules/generic/generic-list/ExportReactCSV.js +62 -62
- package/core/lib/modules/generic/generic-list/generic-list.js +705 -705
- package/core/lib/modules/generic/generic-list/generic-list.scss +34 -34
- package/core/lib/modules/generic/generic-upload/generic-upload.js +483 -483
- package/core/lib/modules/generic/table-settings/table-settings.js +226 -226
- package/core/lib/modules/generic/table-settings/table-settings.scss +37 -37
- package/core/lib/modules/index.js +52 -52
- package/core/lib/modules/modules-routes/module-routes.js +35 -35
- package/core/lib/pages/change-password/change-password.js +201 -201
- package/core/lib/pages/change-password/change-password.scss +73 -73
- package/core/lib/pages/homepage/homepage.js +53 -53
- package/core/lib/pages/index.js +19 -19
- package/core/lib/pages/login/commnication-mode-selection.js +46 -46
- package/core/lib/pages/login/communication-mode-selection.scss +60 -60
- package/core/lib/pages/login/login.js +864 -864
- package/core/lib/pages/login/login.scss +353 -344
- package/core/lib/pages/login/reset-password.js +124 -125
- package/core/lib/pages/login/reset-password.scss +31 -22
- package/core/lib/pages/manage-users/manage-users.js +429 -429
- package/core/lib/pages/manage-users/manage-users.scss +25 -25
- package/core/lib/pages/profile/profile.js +247 -247
- package/core/lib/pages/profile/profile.scss +107 -107
- package/core/lib/pages/profile/theme-config.js +18 -18
- package/core/lib/pages/profile/themes-backup.json +310 -310
- package/core/lib/pages/profile/themes.json +254 -254
- package/core/lib/pages/register/register.js +176 -176
- package/core/lib/pages/register/register.scss +128 -128
- package/core/lib/react-styleguide.md +756 -756
- package/core/lib/utils/api/api.utils.js +211 -211
- package/core/lib/utils/api/readme.md +426 -426
- package/core/lib/utils/async.js +35 -35
- package/core/lib/utils/common/common.utils.js +223 -223
- package/core/lib/utils/common/readme.md +30 -30
- package/core/lib/utils/date/date.utils.js +295 -295
- package/core/lib/utils/date/readme.md +2 -2
- package/core/lib/utils/firebase.support.utils.js +98 -98
- package/core/lib/utils/firebase.utils.js +808 -808
- package/core/lib/utils/form/form.utils.js +255 -255
- package/core/lib/utils/generic/generic.utils.js +69 -69
- package/core/lib/utils/http/auth.helper.js +95 -95
- package/core/lib/utils/http/http.utils.js +158 -158
- package/core/lib/utils/http/readme.md +14 -14
- package/core/lib/utils/index.js +40 -40
- package/core/lib/utils/location/location.utils.js +137 -137
- package/core/lib/utils/location/readme.md +18 -18
- package/core/lib/utils/modal.utils.js +15 -15
- package/core/lib/utils/notification.utils.js +34 -34
- package/core/lib/utils/pwa/pwa.utils.js +88 -88
- package/core/lib/utils/script.utils.js +235 -235
- package/core/lib/utils/setting.utils.js +68 -68
- package/core/lib/utils/upload.utils.js +29 -29
- package/core/models/Preference/Preferences.js +46 -46
- package/core/models/base/base.js +403 -403
- package/core/models/base-clone-loader.js +107 -107
- package/core/models/base-clone.js +187 -187
- package/core/models/base-loader.js +97 -97
- package/core/models/core-scripts/core-scripts.js +150 -150
- package/core/models/dashboard/dashboard.js +201 -201
- package/core/models/detail-loader.js +88 -88
- package/core/models/doctor/components/doctor-add/doctor-add.js +427 -427
- package/core/models/doctor/components/doctor-add/doctor-add.scss +32 -32
- package/core/models/groups.js +82 -82
- package/core/models/index.js +100 -100
- package/core/models/lookup-types/components/lookup-detail/lookup-detail.js +129 -129
- package/core/models/lookup-types/lookup-types.js +96 -96
- package/core/models/lookup-values/components/lookup-values-modal/lookup-values-modal.js +95 -95
- package/core/models/lookup-values/lookup-values.js +92 -92
- package/core/models/menu-roles/components/menu-roles-add/menu-roles-add.js +153 -153
- package/core/models/menu-roles/menu-roles.js +158 -158
- package/core/models/menus/components/menu-add/menu-add.js +288 -288
- package/core/models/menus/components/menu-add/menu-add.scss +31 -31
- package/core/models/menus/components/menu-detail/menu-detail.js +263 -263
- package/core/models/menus/components/menu-list/menu-list.js +392 -392
- package/core/models/menus/components/menu-lists/menu-lists.js +581 -585
- package/core/models/menus/components/menu-lists/menu-lists.scss +46 -46
- package/core/models/menus/menus.js +310 -310
- package/core/models/model-columns.js +121 -121
- package/core/models/models/components/model-detail/model-add.js +120 -120
- package/core/models/models/components/model-detail/model-detail.js +133 -133
- package/core/models/models/models.js +154 -154
- package/core/models/pages/components/page-add/page-add.js +163 -163
- package/core/models/pages/components/page-add/page-add.scss +30 -30
- package/core/models/pages/components/page-details/page-details.js +209 -209
- package/core/models/pages/components/page-list/page-list.js +248 -248
- package/core/models/pages/pages.js +142 -142
- package/core/models/pages.js +142 -142
- package/core/models/roles/components/role-add/role-add.js +345 -312
- package/core/models/roles/components/role-add/role-add.scss +4 -4
- package/core/models/roles/components/role-list/role-list.js +386 -386
- package/core/models/roles/roles.js +196 -196
- package/core/models/staff/components/staff-add/staff-add.js +467 -467
- package/core/models/user-roles/components/user-roles-add/user-roles-add.js +149 -149
- package/core/models/user-roles/user-roles.js +113 -113
- package/core/models/users/components/assign-role/assign-role.js +413 -406
- package/core/models/users/components/assign-role/assign-role.scss +281 -281
- package/core/models/users/components/assign-role/avatar-props.js +45 -45
- package/core/models/users/components/user-add/user-add.js +848 -856
- package/core/models/users/components/user-add/user-edit.js +107 -106
- package/core/models/users/components/user-detail/user-detail.js +236 -236
- package/core/models/users/components/user-list/user-list.js +397 -397
- package/core/models/users/users.js +379 -379
- package/core/modules/Informations/change-info/change-info.js +618 -618
- package/core/modules/Informations/change-info/change-info.scss +134 -134
- package/core/modules/dashboard/components/dashboard-card/animations.js +64 -64
- package/core/modules/dashboard/components/dashboard-card/dashboard-card.js +197 -197
- package/core/modules/dashboard/components/dashboard-card/menu-dashboard-card.js +430 -430
- package/core/modules/dashboard/components/dashboard-card/menu-dashboard-card.scss +59 -59
- package/core/modules/dashboard/components/pop-query-dashboard/pop-query-dashboard.js +66 -66
- package/core/modules/generic/components/generic-add/generic-add.js +121 -121
- package/core/modules/generic/components/generic-add/generic-add.scss +13 -13
- package/core/modules/generic/components/generic-add-modal/generic-add-modal.js +125 -125
- package/core/modules/generic/components/generic-add-modal/generic-add-modal.scss +13 -13
- package/core/modules/generic/components/generic-detail/generic-detail.js +184 -184
- package/core/modules/generic/components/generic-detail/generic-detail.scss +25 -25
- package/core/modules/generic/components/generic-edit/generic-edit.js +123 -123
- package/core/modules/generic/components/generic-list/generic-list.js +335 -335
- package/core/modules/generic/components/generic-list/generic-list.scss +35 -35
- package/core/modules/index.js +42 -42
- package/core/modules/module-routes/module-routes.js +37 -37
- package/core/modules/reporting/components/index.js +6 -6
- package/core/modules/reporting/components/reporting-dashboard/README.md +316 -316
- package/core/modules/reporting/components/reporting-dashboard/display-columns/build-display-columns.js +74 -74
- package/core/modules/reporting/components/reporting-dashboard/display-columns/build-display-columns.test.js +74 -74
- package/core/modules/reporting/components/reporting-dashboard/display-columns/display-cell-renderer.js +252 -252
- package/core/modules/reporting/components/reporting-dashboard/display-columns/display-cell-renderer.test.js +126 -126
- package/core/modules/reporting/components/reporting-dashboard/reporting-dashboard.js +880 -880
- package/core/modules/reporting/components/reporting-dashboard/reporting-dashboard.scss +171 -171
- package/core/modules/steps/action-buttons.js +74 -74
- package/core/modules/steps/action-buttons.scss +44 -44
- package/core/modules/steps/steps.js +348 -348
- package/core/modules/steps/steps.scss +357 -357
- package/core/modules/steps/timeline.js +56 -56
- package/core/pages/homepage-api/homepage-api.js +106 -106
- package/core/pages/homepage-api/homepage-api.scss +233 -233
- package/core/pages/homepage-api/menu-dashboard.js +169 -169
- package/core/pages/homepage-api/menu-dashboard.scss +11 -11
- package/core/translation.json +53 -53
- package/core/translations.json +19 -19
- package/core/utils/script.utils.js +129 -129
- package/core/utils/settings.utils.js +25 -25
- package/eslint.config.mjs +79 -79
- package/index.js +35 -35
- package/jest.config.js +7 -7
- package/jest.setup.js +1 -1
- package/package.json +123 -123
- package/tsconfig.json +26 -26
- package/webpack.config.js +173 -173
package/core/lib/utils/async.js
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import React, { Component } from 'react';
|
|
2
|
-
|
|
3
|
-
export default function asyncComponent(importComponent) {
|
|
4
|
-
|
|
5
|
-
class AsyncComponent extends Component {
|
|
6
|
-
|
|
7
|
-
constructor(props) {
|
|
8
|
-
super(props);
|
|
9
|
-
|
|
10
|
-
this.state = {
|
|
11
|
-
component: null,
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
async componentDidMount() {
|
|
16
|
-
// const { default: component } = await import(`./../Scenes/Generic-Listing/genericListing.scene`);
|
|
17
|
-
// const { default: component } = await import(`./../Scenes/${importComponent}.js`);
|
|
18
|
-
const { default: component } = await importComponent();
|
|
19
|
-
|
|
20
|
-
this.setState({
|
|
21
|
-
component: component
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
render() {
|
|
26
|
-
const C = this.state.component;
|
|
27
|
-
|
|
28
|
-
return C
|
|
29
|
-
? <C {...this.props} />
|
|
30
|
-
: null;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return AsyncComponent;
|
|
1
|
+
import React, { Component } from 'react';
|
|
2
|
+
|
|
3
|
+
export default function asyncComponent(importComponent) {
|
|
4
|
+
|
|
5
|
+
class AsyncComponent extends Component {
|
|
6
|
+
|
|
7
|
+
constructor(props) {
|
|
8
|
+
super(props);
|
|
9
|
+
|
|
10
|
+
this.state = {
|
|
11
|
+
component: null,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async componentDidMount() {
|
|
16
|
+
// const { default: component } = await import(`./../Scenes/Generic-Listing/genericListing.scene`);
|
|
17
|
+
// const { default: component } = await import(`./../Scenes/${importComponent}.js`);
|
|
18
|
+
const { default: component } = await importComponent();
|
|
19
|
+
|
|
20
|
+
this.setState({
|
|
21
|
+
component: component
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
render() {
|
|
26
|
+
const C = this.state.component;
|
|
27
|
+
|
|
28
|
+
return C
|
|
29
|
+
? <C {...this.props} />
|
|
30
|
+
: null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return AsyncComponent;
|
|
36
36
|
}
|
|
@@ -1,223 +1,223 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Implements utility functions to be used across project
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/*eslint no-useless-escape:"off",eqeqeq: "off"*/
|
|
6
|
-
import moment from 'moment';
|
|
7
|
-
|
|
8
|
-
export function IsObjectHaveKeys(obj) {
|
|
9
|
-
return obj && typeof obj == 'object' && Object.keys(obj).length;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function capitalizeSentence(sentence) {
|
|
13
|
-
const words = sentence.split(' ');
|
|
14
|
-
|
|
15
|
-
return words
|
|
16
|
-
.map((word) => {
|
|
17
|
-
return word[0].toUpperCase() + word.substring(1);
|
|
18
|
-
})
|
|
19
|
-
.join(' ');
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// export function capitalizeStrings(str) {
|
|
23
|
-
// // Split the string at all space ccaracters
|
|
24
|
-
// return str.trim().split(' ')
|
|
25
|
-
// // get rid of any extra spaces using trim
|
|
26
|
-
// .map(a => a.trim())
|
|
27
|
-
// // Convert first char to upper case for each word
|
|
28
|
-
// .map(a => a[0].toUpperCase() + a.substring(1).toLowerCase())
|
|
29
|
-
// // Join all the strings back together
|
|
30
|
-
// .join(" ")
|
|
31
|
-
// }
|
|
32
|
-
|
|
33
|
-
export function capitalizeStrings(str) {
|
|
34
|
-
return str;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export function getFormattedDateAndTime(val) {
|
|
38
|
-
var time = [];
|
|
39
|
-
var year = moment.duration(val).years();
|
|
40
|
-
var month = moment.duration(val).months();
|
|
41
|
-
var days = moment.duration(val).days();
|
|
42
|
-
var hour = moment.duration(val).hours();
|
|
43
|
-
var min = moment.duration(val).minutes();
|
|
44
|
-
if (year > 0) {
|
|
45
|
-
time.push(year + ' Years' + ' ');
|
|
46
|
-
}
|
|
47
|
-
if (month > 0) {
|
|
48
|
-
time.push(month + ' Months' + ' ');
|
|
49
|
-
}
|
|
50
|
-
if (days > 0) {
|
|
51
|
-
time.push(days + ' Days' + ' ');
|
|
52
|
-
}
|
|
53
|
-
if (hour > 0) {
|
|
54
|
-
time.push(hour + ' Hours' + ' ');
|
|
55
|
-
}
|
|
56
|
-
if (min > 0) {
|
|
57
|
-
time.push(min + ' Minutes' + ' ');
|
|
58
|
-
}
|
|
59
|
-
time = [].concat(...time);
|
|
60
|
-
return time;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Function converts bytes to array
|
|
65
|
-
*
|
|
66
|
-
* @param {*} bytes
|
|
67
|
-
* @returns
|
|
68
|
-
*/
|
|
69
|
-
export function ConvertBytesToArray(bytes) {
|
|
70
|
-
var bytearray = Object.keys(bytes);
|
|
71
|
-
|
|
72
|
-
var arrayelement = Object.values(bytes);
|
|
73
|
-
|
|
74
|
-
var uint8Array = new Uint8Array(bytearray.length);
|
|
75
|
-
|
|
76
|
-
for (var i = 0; i < uint8Array.length; i++) {
|
|
77
|
-
uint8Array[i] = arrayelement[i];
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
for (var i = 0; i < bytearray; i++) {
|
|
81
|
-
var ascii = arrayelement.charCodeAt(i);
|
|
82
|
-
uint8Array[i] = ascii;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return uint8Array;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Check license status and return validity + warnings.
|
|
90
|
-
*
|
|
91
|
-
* @param {string|Date} expiryDate - License expiration date.
|
|
92
|
-
* @returns {{ valid: boolean, daysLeft: number, message: string|null, level: "error"|"warning"|null }}
|
|
93
|
-
*/
|
|
94
|
-
|
|
95
|
-
export const checkLicenseStatus = (expiryDate) => {
|
|
96
|
-
const expiry = new Date(expiryDate);
|
|
97
|
-
|
|
98
|
-
if (isNaN(expiry)) {
|
|
99
|
-
return { valid: false, daysLeft: 0, message: 'Invalid license date', level: 'error' };
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Normalize both dates to midnight
|
|
103
|
-
expiry.setHours(0, 0, 0, 0);
|
|
104
|
-
const today = new Date();
|
|
105
|
-
today.setHours(0, 0, 0, 0);
|
|
106
|
-
|
|
107
|
-
const msDiff = expiry.getTime() - today.getTime();
|
|
108
|
-
const daysLeft = Math.ceil(msDiff / (1000 * 60 * 60 * 24));
|
|
109
|
-
|
|
110
|
-
if (daysLeft < 0) {
|
|
111
|
-
return { valid: false, daysLeft, message: 'Your license has expired. Please contact support.', level: 'error' };
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
if (daysLeft <= 7) {
|
|
115
|
-
return { valid: true, daysLeft, message: `Your license will expire in ${daysLeft} day(s)`, level: 'error' };
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
if (daysLeft <= 30) {
|
|
119
|
-
return { valid: true, daysLeft, message: `License will expire in ${daysLeft} day(s)`, level: 'warning' };
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return { valid: true, daysLeft, message: null, level: null };
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Checks password expiry status.
|
|
127
|
-
*
|
|
128
|
-
* @param {string|Date} expiryDate
|
|
129
|
-
* @param {number} warningDays
|
|
130
|
-
* @param {string} expiredMessage
|
|
131
|
-
* @param {(daysLeft: number) => string} warningMessage
|
|
132
|
-
*
|
|
133
|
-
* @returns {{ valid: boolean, daysLeft: number, message: string|null, level: "error"|"warning"|null }}
|
|
134
|
-
*/
|
|
135
|
-
|
|
136
|
-
export const checkExpiryStatus = ({ expiryDate, warningDays, expiredMessage, warningMessage }) => {
|
|
137
|
-
const expiry = new Date(expiryDate);
|
|
138
|
-
|
|
139
|
-
if (isNaN(expiry)) {
|
|
140
|
-
return { valid: false, daysLeft: 0, message: 'Invalid date', level: 'error' };
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
expiry.setHours(0, 0, 0, 0);
|
|
144
|
-
const today = new Date();
|
|
145
|
-
today.setHours(0, 0, 0, 0);
|
|
146
|
-
|
|
147
|
-
const msDiff = expiry.getTime() - today.getTime();
|
|
148
|
-
const daysLeft = Math.ceil(msDiff / (1000 * 60 * 60 * 24));
|
|
149
|
-
|
|
150
|
-
if (daysLeft < 0) {
|
|
151
|
-
return { valid: false, daysLeft, message: expiredMessage, level: 'error' };
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
if (daysLeft <= warningDays) {
|
|
155
|
-
return { valid: true, daysLeft, message: warningMessage(daysLeft), level: 'warning' };
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
return { valid: true, daysLeft, message: null, level: null };
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Masks a mobile number by hiding all but the last `visibleDigits`.
|
|
163
|
-
* Adds spacing only to the masked portion (groups of 3),
|
|
164
|
-
* while keeping the visible digits unspaced.
|
|
165
|
-
*
|
|
166
|
-
* Examples:
|
|
167
|
-
* - "9876541234" → "XXX XXX 1234"
|
|
168
|
-
* - "+1 415 555 2671" → "XXXXXXXX 2671"
|
|
169
|
-
* - "1234567" → "XXX 4567"
|
|
170
|
-
*
|
|
171
|
-
* @param {string} mobile Raw mobile number (may include country code, spaces, symbols)
|
|
172
|
-
* @param {number} visibleDigits Number of digits to keep visible from the end
|
|
173
|
-
* @returns {string} Masked mobile number suitable for OTP confirmation UI
|
|
174
|
-
*/
|
|
175
|
-
export const formatMobile = (mobile, visibleDigits = 4) => {
|
|
176
|
-
// Guard clause for null, undefined, or empty input
|
|
177
|
-
if (!mobile) return '';
|
|
178
|
-
|
|
179
|
-
// Normalize input by removing all non-numeric characters
|
|
180
|
-
const digits = mobile.replace(/\D/g, '');
|
|
181
|
-
|
|
182
|
-
// If the number is too short, masking is unnecessary
|
|
183
|
-
if (digits.length <= visibleDigits) return digits;
|
|
184
|
-
|
|
185
|
-
// Determine how many digits should be masked
|
|
186
|
-
const maskedLength = digits.length - visibleDigits;
|
|
187
|
-
|
|
188
|
-
// Generate masking characters for hidden digits
|
|
189
|
-
const masked = 'X'.repeat(maskedLength);
|
|
190
|
-
|
|
191
|
-
// Extract the digits that should remain visible
|
|
192
|
-
const visible = digits.slice(-visibleDigits);
|
|
193
|
-
|
|
194
|
-
// Insert spaces only within the masked section (groups of 3)
|
|
195
|
-
const maskedWithSpaces = masked.replace(/(.{3})/g, '$1 ').trim();
|
|
196
|
-
|
|
197
|
-
// Combine masked and visible parts without spacing the visible digits
|
|
198
|
-
return `${maskedWithSpaces} ${visible}`;
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* Safely parse a JSON value.
|
|
203
|
-
*
|
|
204
|
-
* - Accepts JSON strings or plain objects
|
|
205
|
-
* - Returns null on any invalid or missing data
|
|
206
|
-
*/
|
|
207
|
-
export function safeJSON(value) {
|
|
208
|
-
if (value == null) return null;
|
|
209
|
-
|
|
210
|
-
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
211
|
-
return value;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
if (typeof value !== 'string' || value.trim() === '') {
|
|
215
|
-
return null;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
try {
|
|
219
|
-
return JSON.parse(value);
|
|
220
|
-
} catch {
|
|
221
|
-
return null;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
Implements utility functions to be used across project
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/*eslint no-useless-escape:"off",eqeqeq: "off"*/
|
|
6
|
+
import moment from 'moment';
|
|
7
|
+
|
|
8
|
+
export function IsObjectHaveKeys(obj) {
|
|
9
|
+
return obj && typeof obj == 'object' && Object.keys(obj).length;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function capitalizeSentence(sentence) {
|
|
13
|
+
const words = sentence.split(' ');
|
|
14
|
+
|
|
15
|
+
return words
|
|
16
|
+
.map((word) => {
|
|
17
|
+
return word[0].toUpperCase() + word.substring(1);
|
|
18
|
+
})
|
|
19
|
+
.join(' ');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// export function capitalizeStrings(str) {
|
|
23
|
+
// // Split the string at all space ccaracters
|
|
24
|
+
// return str.trim().split(' ')
|
|
25
|
+
// // get rid of any extra spaces using trim
|
|
26
|
+
// .map(a => a.trim())
|
|
27
|
+
// // Convert first char to upper case for each word
|
|
28
|
+
// .map(a => a[0].toUpperCase() + a.substring(1).toLowerCase())
|
|
29
|
+
// // Join all the strings back together
|
|
30
|
+
// .join(" ")
|
|
31
|
+
// }
|
|
32
|
+
|
|
33
|
+
export function capitalizeStrings(str) {
|
|
34
|
+
return str;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function getFormattedDateAndTime(val) {
|
|
38
|
+
var time = [];
|
|
39
|
+
var year = moment.duration(val).years();
|
|
40
|
+
var month = moment.duration(val).months();
|
|
41
|
+
var days = moment.duration(val).days();
|
|
42
|
+
var hour = moment.duration(val).hours();
|
|
43
|
+
var min = moment.duration(val).minutes();
|
|
44
|
+
if (year > 0) {
|
|
45
|
+
time.push(year + ' Years' + ' ');
|
|
46
|
+
}
|
|
47
|
+
if (month > 0) {
|
|
48
|
+
time.push(month + ' Months' + ' ');
|
|
49
|
+
}
|
|
50
|
+
if (days > 0) {
|
|
51
|
+
time.push(days + ' Days' + ' ');
|
|
52
|
+
}
|
|
53
|
+
if (hour > 0) {
|
|
54
|
+
time.push(hour + ' Hours' + ' ');
|
|
55
|
+
}
|
|
56
|
+
if (min > 0) {
|
|
57
|
+
time.push(min + ' Minutes' + ' ');
|
|
58
|
+
}
|
|
59
|
+
time = [].concat(...time);
|
|
60
|
+
return time;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Function converts bytes to array
|
|
65
|
+
*
|
|
66
|
+
* @param {*} bytes
|
|
67
|
+
* @returns
|
|
68
|
+
*/
|
|
69
|
+
export function ConvertBytesToArray(bytes) {
|
|
70
|
+
var bytearray = Object.keys(bytes);
|
|
71
|
+
|
|
72
|
+
var arrayelement = Object.values(bytes);
|
|
73
|
+
|
|
74
|
+
var uint8Array = new Uint8Array(bytearray.length);
|
|
75
|
+
|
|
76
|
+
for (var i = 0; i < uint8Array.length; i++) {
|
|
77
|
+
uint8Array[i] = arrayelement[i];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
for (var i = 0; i < bytearray; i++) {
|
|
81
|
+
var ascii = arrayelement.charCodeAt(i);
|
|
82
|
+
uint8Array[i] = ascii;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return uint8Array;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Check license status and return validity + warnings.
|
|
90
|
+
*
|
|
91
|
+
* @param {string|Date} expiryDate - License expiration date.
|
|
92
|
+
* @returns {{ valid: boolean, daysLeft: number, message: string|null, level: "error"|"warning"|null }}
|
|
93
|
+
*/
|
|
94
|
+
|
|
95
|
+
export const checkLicenseStatus = (expiryDate) => {
|
|
96
|
+
const expiry = new Date(expiryDate);
|
|
97
|
+
|
|
98
|
+
if (isNaN(expiry)) {
|
|
99
|
+
return { valid: false, daysLeft: 0, message: 'Invalid license date', level: 'error' };
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Normalize both dates to midnight
|
|
103
|
+
expiry.setHours(0, 0, 0, 0);
|
|
104
|
+
const today = new Date();
|
|
105
|
+
today.setHours(0, 0, 0, 0);
|
|
106
|
+
|
|
107
|
+
const msDiff = expiry.getTime() - today.getTime();
|
|
108
|
+
const daysLeft = Math.ceil(msDiff / (1000 * 60 * 60 * 24));
|
|
109
|
+
|
|
110
|
+
if (daysLeft < 0) {
|
|
111
|
+
return { valid: false, daysLeft, message: 'Your license has expired. Please contact support.', level: 'error' };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (daysLeft <= 7) {
|
|
115
|
+
return { valid: true, daysLeft, message: `Your license will expire in ${daysLeft} day(s)`, level: 'error' };
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (daysLeft <= 30) {
|
|
119
|
+
return { valid: true, daysLeft, message: `License will expire in ${daysLeft} day(s)`, level: 'warning' };
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return { valid: true, daysLeft, message: null, level: null };
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Checks password expiry status.
|
|
127
|
+
*
|
|
128
|
+
* @param {string|Date} expiryDate
|
|
129
|
+
* @param {number} warningDays
|
|
130
|
+
* @param {string} expiredMessage
|
|
131
|
+
* @param {(daysLeft: number) => string} warningMessage
|
|
132
|
+
*
|
|
133
|
+
* @returns {{ valid: boolean, daysLeft: number, message: string|null, level: "error"|"warning"|null }}
|
|
134
|
+
*/
|
|
135
|
+
|
|
136
|
+
export const checkExpiryStatus = ({ expiryDate, warningDays, expiredMessage, warningMessage }) => {
|
|
137
|
+
const expiry = new Date(expiryDate);
|
|
138
|
+
|
|
139
|
+
if (isNaN(expiry)) {
|
|
140
|
+
return { valid: false, daysLeft: 0, message: 'Invalid date', level: 'error' };
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
expiry.setHours(0, 0, 0, 0);
|
|
144
|
+
const today = new Date();
|
|
145
|
+
today.setHours(0, 0, 0, 0);
|
|
146
|
+
|
|
147
|
+
const msDiff = expiry.getTime() - today.getTime();
|
|
148
|
+
const daysLeft = Math.ceil(msDiff / (1000 * 60 * 60 * 24));
|
|
149
|
+
|
|
150
|
+
if (daysLeft < 0) {
|
|
151
|
+
return { valid: false, daysLeft, message: expiredMessage, level: 'error' };
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (daysLeft <= warningDays) {
|
|
155
|
+
return { valid: true, daysLeft, message: warningMessage(daysLeft), level: 'warning' };
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return { valid: true, daysLeft, message: null, level: null };
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Masks a mobile number by hiding all but the last `visibleDigits`.
|
|
163
|
+
* Adds spacing only to the masked portion (groups of 3),
|
|
164
|
+
* while keeping the visible digits unspaced.
|
|
165
|
+
*
|
|
166
|
+
* Examples:
|
|
167
|
+
* - "9876541234" → "XXX XXX 1234"
|
|
168
|
+
* - "+1 415 555 2671" → "XXXXXXXX 2671"
|
|
169
|
+
* - "1234567" → "XXX 4567"
|
|
170
|
+
*
|
|
171
|
+
* @param {string} mobile Raw mobile number (may include country code, spaces, symbols)
|
|
172
|
+
* @param {number} visibleDigits Number of digits to keep visible from the end
|
|
173
|
+
* @returns {string} Masked mobile number suitable for OTP confirmation UI
|
|
174
|
+
*/
|
|
175
|
+
export const formatMobile = (mobile, visibleDigits = 4) => {
|
|
176
|
+
// Guard clause for null, undefined, or empty input
|
|
177
|
+
if (!mobile) return '';
|
|
178
|
+
|
|
179
|
+
// Normalize input by removing all non-numeric characters
|
|
180
|
+
const digits = mobile.replace(/\D/g, '');
|
|
181
|
+
|
|
182
|
+
// If the number is too short, masking is unnecessary
|
|
183
|
+
if (digits.length <= visibleDigits) return digits;
|
|
184
|
+
|
|
185
|
+
// Determine how many digits should be masked
|
|
186
|
+
const maskedLength = digits.length - visibleDigits;
|
|
187
|
+
|
|
188
|
+
// Generate masking characters for hidden digits
|
|
189
|
+
const masked = 'X'.repeat(maskedLength);
|
|
190
|
+
|
|
191
|
+
// Extract the digits that should remain visible
|
|
192
|
+
const visible = digits.slice(-visibleDigits);
|
|
193
|
+
|
|
194
|
+
// Insert spaces only within the masked section (groups of 3)
|
|
195
|
+
const maskedWithSpaces = masked.replace(/(.{3})/g, '$1 ').trim();
|
|
196
|
+
|
|
197
|
+
// Combine masked and visible parts without spacing the visible digits
|
|
198
|
+
return `${maskedWithSpaces} ${visible}`;
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Safely parse a JSON value.
|
|
203
|
+
*
|
|
204
|
+
* - Accepts JSON strings or plain objects
|
|
205
|
+
* - Returns null on any invalid or missing data
|
|
206
|
+
*/
|
|
207
|
+
export function safeJSON(value) {
|
|
208
|
+
if (value == null) return null;
|
|
209
|
+
|
|
210
|
+
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
211
|
+
return value;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if (typeof value !== 'string' || value.trim() === '') {
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
try {
|
|
219
|
+
return JSON.parse(value);
|
|
220
|
+
} catch {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
## Usage
|
|
2
|
-
|
|
3
|
-
To use Common Utils in your project, simply import the needed functions:
|
|
4
|
-
|
|
5
|
-
### capitalizeSentence
|
|
6
|
-
|
|
7
|
-
The capitalizeSentence function takes a string as input and capitalizes the first letter of each sentence in the string. For example:
|
|
8
|
-
|
|
9
|
-
```sh
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
### capitalizeStrings
|
|
15
|
-
|
|
16
|
-
The capitalizeStrings function takes an array of strings as input and capitalizes the first letter of each string in the array. For example:
|
|
17
|
-
|
|
18
|
-
```sh
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
### convertBytesToArray
|
|
24
|
-
|
|
25
|
-
The convertBytesToArray function takes a byte array as input and converts it into an array of integers. For example:
|
|
26
|
-
|
|
27
|
-
```sh
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
```
|
|
1
|
+
## Usage
|
|
2
|
+
|
|
3
|
+
To use Common Utils in your project, simply import the needed functions:
|
|
4
|
+
|
|
5
|
+
### capitalizeSentence
|
|
6
|
+
|
|
7
|
+
The capitalizeSentence function takes a string as input and capitalizes the first letter of each sentence in the string. For example:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### capitalizeStrings
|
|
15
|
+
|
|
16
|
+
The capitalizeStrings function takes an array of strings as input and capitalizes the first letter of each string in the array. For example:
|
|
17
|
+
|
|
18
|
+
```sh
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### convertBytesToArray
|
|
24
|
+
|
|
25
|
+
The convertBytesToArray function takes a byte array as input and converts it into an array of integers. For example:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
```
|