ngx-techlify-core 11.2.4
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/README.md +24 -0
- package/bundles/ngx-techlify-core.umd.js +6602 -0
- package/bundles/ngx-techlify-core.umd.js.map +1 -0
- package/bundles/ngx-techlify-core.umd.min.js +17 -0
- package/bundles/ngx-techlify-core.umd.min.js.map +1 -0
- package/esm2015/lib/action-popup/action-popup.component.js +32 -0
- package/esm2015/lib/action-popup/action-popup.model.js +3 -0
- package/esm2015/lib/action-popup/action-popup.module.js +26 -0
- package/esm2015/lib/action-popup/index.js +3 -0
- package/esm2015/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.js +12 -0
- package/esm2015/lib/audit-log/audit-log-for-model/audit-log-for-model.component.js +49 -0
- package/esm2015/lib/audit-log/audit-log-for-model/audit-log-for-model.module.js +25 -0
- package/esm2015/lib/audit-log/audit-log-list/audit-log-list-routing.module.js +12 -0
- package/esm2015/lib/audit-log/audit-log-list/audit-log-list.component.js +132 -0
- package/esm2015/lib/audit-log/audit-log-list/audit-log-list.module.js +29 -0
- package/esm2015/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.js +12 -0
- package/esm2015/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.js +67 -0
- package/esm2015/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.js +25 -0
- package/esm2015/lib/audit-log/audit-log-routing.module.js +19 -0
- package/esm2015/lib/audit-log/audit-log-view/audit-log-view-routing.module.js +12 -0
- package/esm2015/lib/audit-log/audit-log-view/audit-log-view.component.js +62 -0
- package/esm2015/lib/audit-log/audit-log-view/audit-log-view.module.js +21 -0
- package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.js +12 -0
- package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model.component.js +59 -0
- package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model.module.js +21 -0
- package/esm2015/lib/audit-log/audit-log.module.js +20 -0
- package/esm2015/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.js +12 -0
- package/esm2015/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.js +35 -0
- package/esm2015/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.js +21 -0
- package/esm2015/lib/core/alert.service.js +40 -0
- package/esm2015/lib/core/api-prefix.interceptor.js +28 -0
- package/esm2015/lib/core/authentication.guard.js +39 -0
- package/esm2015/lib/core/authentication.service.js +59 -0
- package/esm2015/lib/core/cache.interceptor.js +60 -0
- package/esm2015/lib/core/config.service.js +47 -0
- package/esm2015/lib/core/core.module.js +42 -0
- package/esm2015/lib/core/credentials.service.js +84 -0
- package/esm2015/lib/core/dataManager.service.js +121 -0
- package/esm2015/lib/core/error-handler.interceptor.js +53 -0
- package/esm2015/lib/core/error-handler.service.js +49 -0
- package/esm2015/lib/core/form-validator.service.js +23 -0
- package/esm2015/lib/core/header.interceptor.js +22 -0
- package/esm2015/lib/core/http-cache.service.js +110 -0
- package/esm2015/lib/core/http.service.js +82 -0
- package/esm2015/lib/core/index.js +21 -0
- package/esm2015/lib/core/logger.service.js +100 -0
- package/esm2015/lib/core/route-reusable-strategy.js +35 -0
- package/esm2015/lib/core/snack/snack.component.js +33 -0
- package/esm2015/lib/core/snack/snack.module.js +25 -0
- package/esm2015/lib/core/storage.service.js +37 -0
- package/esm2015/lib/core/techlify-config.model.js +26 -0
- package/esm2015/lib/core/token.interceptor.js +30 -0
- package/esm2015/lib/data-table/data-table.component.js +190 -0
- package/esm2015/lib/data-table/data-table.model.js +11 -0
- package/esm2015/lib/data-table/data-table.module.js +25 -0
- package/esm2015/lib/data-table/index.js +3 -0
- package/esm2015/lib/date-validator.js +10 -0
- package/esm2015/lib/document-viewer/document-viewer.component.js +58 -0
- package/esm2015/lib/document-viewer/document-viewer.module.js +25 -0
- package/esm2015/lib/document-viewer/index.js +3 -0
- package/esm2015/lib/document-viewer/viewer-config.model.js +3 -0
- package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.js +26 -0
- package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.js +72 -0
- package/esm2015/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.js +23 -0
- package/esm2015/lib/email-subscription/email-subscription-for-user/index.js +2 -0
- package/esm2015/lib/email-subscription/email-subscription-routing.module.js +12 -0
- package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.js +12 -0
- package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.js +102 -0
- package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.js +28 -0
- package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-form/index.js +2 -0
- package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.js +28 -0
- package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.js +153 -0
- package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.js +27 -0
- package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/index.js +2 -0
- package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.js +12 -0
- package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type.module.js +15 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.js +12 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.js +99 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.js +27 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-form/index.js +2 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.js +28 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.js +155 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.js +29 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list/index.js +2 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.js +12 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.js +50 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.js +25 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/index.js +2 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.js +12 -0
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user.module.js +15 -0
- package/esm2015/lib/email-subscription/email-subscription.module.js +15 -0
- package/esm2015/lib/entity-files/entity-file-form/entity-file-form.component.js +141 -0
- package/esm2015/lib/entity-files/entity-file.service.js +38 -0
- package/esm2015/lib/entity-files/entity-files-view-all.component.js +161 -0
- package/esm2015/lib/entity-files/entity-files-view-all.module.js +34 -0
- package/esm2015/lib/entity-files/index.js +3 -0
- package/esm2015/lib/export-excel/export-excel-button/export-excel-button.component.js +32 -0
- package/esm2015/lib/export-excel/export-excel.module.js +17 -0
- package/esm2015/lib/file-dropper/file-dropper.component.js +122 -0
- package/esm2015/lib/file-dropper/file-dropper.model.js +3 -0
- package/esm2015/lib/file-dropper/file-dropper.module.js +21 -0
- package/esm2015/lib/file-dropper/index.js +3 -0
- package/esm2015/lib/import-csv/failed-items/failed-items-routing.module.js +12 -0
- package/esm2015/lib/import-csv/failed-items/failed-items.component.js +23 -0
- package/esm2015/lib/import-csv/failed-items/failed-items.module.js +21 -0
- package/esm2015/lib/import-csv/import-config.js +3 -0
- package/esm2015/lib/import-csv/import-csv-routing.module.js +12 -0
- package/esm2015/lib/import-csv/import-csv.component.js +111 -0
- package/esm2015/lib/import-csv/import-csv.module.js +27 -0
- package/esm2015/lib/import-csv/import-items/import-items-routing.module.js +12 -0
- package/esm2015/lib/import-csv/import-items/import-items.component.js +139 -0
- package/esm2015/lib/import-csv/import-items/import-items.module.js +23 -0
- package/esm2015/lib/loader/index.js +2 -0
- package/esm2015/lib/loader/loader.component.js +22 -0
- package/esm2015/lib/loader/loader.module.js +21 -0
- package/esm2015/lib/login-history-for-user/login-history-for-user-routing.module.js +20 -0
- package/esm2015/lib/login-history-for-user/login-history-for-user.component.js +79 -0
- package/esm2015/lib/login-history-for-user/login-history-for-user.module.js +27 -0
- package/esm2015/lib/material.module.js +58 -0
- package/esm2015/lib/note/index.js +3 -0
- package/esm2015/lib/note/note-form/note-form.component.js +80 -0
- package/esm2015/lib/note/note-list/note-list.component.js +120 -0
- package/esm2015/lib/note/note.module.js +32 -0
- package/esm2015/lib/note/note.service.js +31 -0
- package/esm2015/lib/searchable-selector/index.js +3 -0
- package/esm2015/lib/searchable-selector/mat-select-infinite-scroll.directive.js +81 -0
- package/esm2015/lib/searchable-selector/searchable-selector.component.js +267 -0
- package/esm2015/lib/searchable-selector/searchable-selector.module.js +28 -0
- package/esm2015/lib/techlify-update/read-more/read-more.component.js +43 -0
- package/esm2015/lib/techlify-update/read-more/read-more.module.js +21 -0
- package/esm2015/lib/techlify-update/techlify-update-form/techlify-update-form.component.js +114 -0
- package/esm2015/lib/techlify-update/techlify-update-form/techlify-update-form.module.js +28 -0
- package/esm2015/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.js +22 -0
- package/esm2015/lib/techlify-update/techlify-update-history/techlify-update-history.component.js +143 -0
- package/esm2015/lib/techlify-update/techlify-update-history/techlify-update-history.module.js +28 -0
- package/esm2015/lib/techlify-update/techlify-update-routing.module.js +22 -0
- package/esm2015/lib/techlify-update/techlify-update.module.js +30 -0
- package/esm2015/lib/techlify-update/techlify-update.service.js +43 -0
- package/esm2015/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.js +161 -0
- package/esm2015/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.js +82 -0
- package/esm2015/lib/techlify-update/update-notifier/update-notifier.component.js +62 -0
- package/esm2015/lib/techlify-update/update-notifier/update-notifier.module.js +29 -0
- package/esm2015/lib/techlify-update/update-view/update-view.component.js +36 -0
- package/esm2015/lib/techlify-update/update-view/update-view.module.js +24 -0
- package/esm2015/lib/timeline-filter/calculate-timeline.js +90 -0
- package/esm2015/lib/timeline-filter/index.js +4 -0
- package/esm2015/lib/timeline-filter/timeline-filter-routing.module.js +12 -0
- package/esm2015/lib/timeline-filter/timeline-filter.component.js +57 -0
- package/esm2015/lib/timeline-filter/timeline-filter.module.js +23 -0
- package/esm2015/lib/timeline-filter/timeline.model.js +15 -0
- package/esm2015/lib/utility/date-utils.service.js +48 -0
- package/esm2015/lib/utility/index.js +4 -0
- package/esm2015/lib/utility/num-items-selector.component.js +30 -0
- package/esm2015/lib/utility/number-selector.component.js +38 -0
- package/esm2015/lib/utility/utility.module.js +21 -0
- package/esm2015/ngx-techlify-core.js +52 -0
- package/esm2015/public-api.js +91 -0
- package/fesm2015/ngx-techlify-core.js +5575 -0
- package/fesm2015/ngx-techlify-core.js.map +1 -0
- package/lib/action-popup/action-popup.component.d.ts +14 -0
- package/lib/action-popup/action-popup.model.d.ts +5 -0
- package/lib/action-popup/action-popup.module.d.ts +2 -0
- package/lib/action-popup/index.d.ts +2 -0
- package/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.d.ts +2 -0
- package/lib/audit-log/audit-log-for-model/audit-log-for-model.component.d.ts +12 -0
- package/lib/audit-log/audit-log-for-model/audit-log-for-model.module.d.ts +2 -0
- package/lib/audit-log/audit-log-list/audit-log-list-routing.module.d.ts +2 -0
- package/lib/audit-log/audit-log-list/audit-log-list.component.d.ts +32 -0
- package/lib/audit-log/audit-log-list/audit-log-list.module.d.ts +2 -0
- package/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.d.ts +2 -0
- package/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.d.ts +19 -0
- package/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.d.ts +2 -0
- package/lib/audit-log/audit-log-routing.module.d.ts +2 -0
- package/lib/audit-log/audit-log-view/audit-log-view-routing.module.d.ts +2 -0
- package/lib/audit-log/audit-log-view/audit-log-view.component.d.ts +17 -0
- package/lib/audit-log/audit-log-view/audit-log-view.module.d.ts +2 -0
- package/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.d.ts +2 -0
- package/lib/audit-log/audit-log-view-model/audit-log-view-model.component.d.ts +15 -0
- package/lib/audit-log/audit-log-view-model/audit-log-view-model.module.d.ts +2 -0
- package/lib/audit-log/audit-log.module.d.ts +2 -0
- package/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.d.ts +2 -0
- package/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.d.ts +11 -0
- package/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.d.ts +2 -0
- package/lib/core/alert.service.d.ts +12 -0
- package/lib/core/api-prefix.interceptor.d.ts +11 -0
- package/lib/core/authentication.guard.d.ts +10 -0
- package/lib/core/authentication.service.d.ts +23 -0
- package/lib/core/cache.interceptor.d.ts +21 -0
- package/lib/core/config.service.d.ts +19 -0
- package/lib/core/core.module.d.ts +3 -0
- package/lib/core/credentials.service.d.ts +36 -0
- package/lib/core/dataManager.service.d.ts +70 -0
- package/lib/core/error-handler.interceptor.d.ts +14 -0
- package/lib/core/error-handler.service.d.ts +12 -0
- package/lib/core/form-validator.service.d.ts +8 -0
- package/lib/core/header.interceptor.d.ts +8 -0
- package/lib/core/http-cache.service.d.ts +54 -0
- package/lib/core/http.service.d.ts +56 -0
- package/lib/core/index.d.ts +20 -0
- package/lib/core/logger.service.d.ts +85 -0
- package/lib/core/route-reusable-strategy.d.ts +13 -0
- package/lib/core/snack/snack.component.d.ts +8 -0
- package/lib/core/snack/snack.module.d.ts +2 -0
- package/lib/core/storage.service.d.ts +15 -0
- package/lib/core/techlify-config.model.d.ts +17 -0
- package/lib/core/token.interceptor.d.ts +11 -0
- package/lib/data-table/data-table.component.d.ts +60 -0
- package/lib/data-table/data-table.model.d.ts +46 -0
- package/lib/data-table/data-table.module.d.ts +2 -0
- package/lib/data-table/index.d.ts +2 -0
- package/lib/date-validator.d.ts +1 -0
- package/lib/document-viewer/document-viewer.component.d.ts +16 -0
- package/lib/document-viewer/document-viewer.module.d.ts +2 -0
- package/lib/document-viewer/index.d.ts +2 -0
- package/lib/document-viewer/viewer-config.model.d.ts +5 -0
- package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.d.ts +7 -0
- package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.d.ts +17 -0
- package/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-for-user/index.d.ts +1 -0
- package/lib/email-subscription/email-subscription-routing.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.d.ts +32 -0
- package/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-type/email-subscription-type-form/index.d.ts +1 -0
- package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.d.ts +9 -0
- package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.d.ts +30 -0
- package/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-type/email-subscription-type-list/index.d.ts +1 -0
- package/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-type/email-subscription-type.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.d.ts +32 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-form/index.d.ts +1 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.d.ts +9 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.d.ts +32 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-list/index.d.ts +1 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.d.ts +13 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/index.d.ts +1 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription-user/email-subscription-user.module.d.ts +2 -0
- package/lib/email-subscription/email-subscription.module.d.ts +2 -0
- package/lib/entity-files/entity-file-form/entity-file-form.component.d.ts +34 -0
- package/lib/entity-files/entity-file.service.d.ts +10 -0
- package/lib/entity-files/entity-files-view-all.component.d.ts +38 -0
- package/lib/entity-files/entity-files-view-all.module.d.ts +2 -0
- package/lib/entity-files/index.d.ts +2 -0
- package/lib/export-excel/export-excel-button/export-excel-button.component.d.ts +8 -0
- package/lib/export-excel/export-excel.module.d.ts +2 -0
- package/lib/file-dropper/file-dropper.component.d.ts +33 -0
- package/lib/file-dropper/file-dropper.model.d.ts +10 -0
- package/lib/file-dropper/file-dropper.module.d.ts +2 -0
- package/lib/file-dropper/index.d.ts +2 -0
- package/lib/import-csv/failed-items/failed-items-routing.module.d.ts +2 -0
- package/lib/import-csv/failed-items/failed-items.component.d.ts +8 -0
- package/lib/import-csv/failed-items/failed-items.module.d.ts +2 -0
- package/lib/import-csv/import-config.d.ts +5 -0
- package/lib/import-csv/import-csv-routing.module.d.ts +2 -0
- package/lib/import-csv/import-csv.component.d.ts +26 -0
- package/lib/import-csv/import-csv.module.d.ts +2 -0
- package/lib/import-csv/import-items/import-items-routing.module.d.ts +2 -0
- package/lib/import-csv/import-items/import-items.component.d.ts +30 -0
- package/lib/import-csv/import-items/import-items.module.d.ts +2 -0
- package/lib/loader/index.d.ts +1 -0
- package/lib/loader/loader.component.d.ts +8 -0
- package/lib/loader/loader.module.d.ts +2 -0
- package/lib/login-history-for-user/login-history-for-user-routing.module.d.ts +2 -0
- package/lib/login-history-for-user/login-history-for-user.component.d.ts +21 -0
- package/lib/login-history-for-user/login-history-for-user.module.d.ts +2 -0
- package/lib/material.module.d.ts +2 -0
- package/lib/note/index.d.ts +2 -0
- package/lib/note/note-form/note-form.component.d.ts +27 -0
- package/lib/note/note-list/note-list.component.d.ts +25 -0
- package/lib/note/note.module.d.ts +2 -0
- package/lib/note/note.service.d.ts +9 -0
- package/lib/searchable-selector/index.d.ts +2 -0
- package/lib/searchable-selector/mat-select-infinite-scroll.directive.d.ts +23 -0
- package/lib/searchable-selector/searchable-selector.component.d.ts +75 -0
- package/lib/searchable-selector/searchable-selector.module.d.ts +2 -0
- package/lib/techlify-update/read-more/read-more.component.d.ts +12 -0
- package/lib/techlify-update/read-more/read-more.module.d.ts +2 -0
- package/lib/techlify-update/techlify-update-form/techlify-update-form.component.d.ts +30 -0
- package/lib/techlify-update/techlify-update-form/techlify-update-form.module.d.ts +2 -0
- package/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.d.ts +2 -0
- package/lib/techlify-update/techlify-update-history/techlify-update-history.component.d.ts +31 -0
- package/lib/techlify-update/techlify-update-history/techlify-update-history.module.d.ts +2 -0
- package/lib/techlify-update/techlify-update-routing.module.d.ts +2 -0
- package/lib/techlify-update/techlify-update.module.d.ts +2 -0
- package/lib/techlify-update/techlify-update.service.d.ts +13 -0
- package/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.d.ts +31 -0
- package/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.d.ts +25 -0
- package/lib/techlify-update/update-notifier/update-notifier.component.d.ts +16 -0
- package/lib/techlify-update/update-notifier/update-notifier.module.d.ts +2 -0
- package/lib/techlify-update/update-view/update-view.component.d.ts +14 -0
- package/lib/techlify-update/update-view/update-view.module.d.ts +2 -0
- package/lib/timeline-filter/calculate-timeline.d.ts +1 -0
- package/lib/timeline-filter/index.d.ts +3 -0
- package/lib/timeline-filter/timeline-filter-routing.module.d.ts +2 -0
- package/lib/timeline-filter/timeline-filter.component.d.ts +14 -0
- package/lib/timeline-filter/timeline-filter.module.d.ts +2 -0
- package/lib/timeline-filter/timeline.model.d.ts +14 -0
- package/lib/utility/date-utils.service.d.ts +21 -0
- package/lib/utility/index.d.ts +3 -0
- package/lib/utility/num-items-selector.component.d.ts +16 -0
- package/lib/utility/number-selector.component.d.ts +20 -0
- package/lib/utility/utility.module.d.ts +2 -0
- package/ngx-techlify-core.d.ts +51 -0
- package/ngx-techlify-core.metadata.json +1 -0
- package/package.json +36 -0
- package/public-api.d.ts +87 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import * as XLSX from 'xlsx';
|
|
4
|
+
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
|
|
5
|
+
import { Location } from '@angular/common';
|
|
6
|
+
import { AlertService } from '../core/alert.service';
|
|
7
|
+
import { HttpService } from '../core/http.service';
|
|
8
|
+
let ImportCsvComponent = class ImportCsvComponent {
|
|
9
|
+
constructor(alertService, http, location) {
|
|
10
|
+
this.alertService = alertService;
|
|
11
|
+
this.http = http;
|
|
12
|
+
this.location = location;
|
|
13
|
+
this.filesList = [];
|
|
14
|
+
this.fileData = [];
|
|
15
|
+
this.failedItems = [];
|
|
16
|
+
this.selectedFields = [];
|
|
17
|
+
this.filesConfig = {
|
|
18
|
+
fileId: "file",
|
|
19
|
+
containerId: "fileContainer",
|
|
20
|
+
styles: {
|
|
21
|
+
height: "600px"
|
|
22
|
+
},
|
|
23
|
+
acceptFile: '.csv',
|
|
24
|
+
multiple: false,
|
|
25
|
+
maxSize: 100,
|
|
26
|
+
acceptFileText: ".csv"
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
ngOnInit() {
|
|
30
|
+
}
|
|
31
|
+
reset() {
|
|
32
|
+
this.filesList = [];
|
|
33
|
+
this.failedItems = [];
|
|
34
|
+
this.selectedFields = [];
|
|
35
|
+
this.fileData = [];
|
|
36
|
+
}
|
|
37
|
+
fileChanged(event) {
|
|
38
|
+
this.filesList = event;
|
|
39
|
+
let jsonData = null;
|
|
40
|
+
const reader = new FileReader();
|
|
41
|
+
const file = this.filesList[0];
|
|
42
|
+
reader.onload = (event) => {
|
|
43
|
+
const data = reader.result;
|
|
44
|
+
const selectedFile = XLSX.read(data, { type: 'binary', cellDates: true });
|
|
45
|
+
jsonData = selectedFile.SheetNames.reduce((initial, name) => {
|
|
46
|
+
const sheet = selectedFile.Sheets[name];
|
|
47
|
+
initial = XLSX.utils.sheet_to_json(sheet);
|
|
48
|
+
return initial;
|
|
49
|
+
}, []);
|
|
50
|
+
this.fileData = jsonData;
|
|
51
|
+
};
|
|
52
|
+
reader.readAsBinaryString(file);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
mappingProcessed(event) {
|
|
56
|
+
this.selectedFields = event.fields;
|
|
57
|
+
const tempFileData = JSON.parse(JSON.stringify(this.fileData));
|
|
58
|
+
tempFileData.forEach((data) => {
|
|
59
|
+
for (var key in data) {
|
|
60
|
+
var field = event.fields.find((field) => field.label == key);
|
|
61
|
+
if (field) {
|
|
62
|
+
if ((field.propertyType == 'date' || field.propertyType == 'dateTime') && this.isValidDate(new Date(data[field.label]))) {
|
|
63
|
+
data[field.property] = new Date(data[field.label]).toISOString();
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
data[field.property] = data[field.label];
|
|
67
|
+
}
|
|
68
|
+
delete data[key];
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
delete data[key];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
this.save(tempFileData);
|
|
76
|
+
}
|
|
77
|
+
save(tempFileData) {
|
|
78
|
+
var _a;
|
|
79
|
+
this.http.post((_a = this.importConfig) === null || _a === void 0 ? void 0 : _a.postUrl, { data: tempFileData })
|
|
80
|
+
.pipe(untilDestroyed(this)).subscribe((result) => {
|
|
81
|
+
this.failedItems = (result === null || result === void 0 ? void 0 : result.failed_items) || [];
|
|
82
|
+
if (this.failedItems.length === 0) {
|
|
83
|
+
this.alertService.addAlert("File Import Success", "success");
|
|
84
|
+
this.location.back();
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
isValidDate(d) {
|
|
89
|
+
return d instanceof Date && !isNaN(d.getTime());
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
ImportCsvComponent.decorators = [
|
|
93
|
+
{ type: Component, args: [{
|
|
94
|
+
selector: 'app-import-csv',
|
|
95
|
+
template: "<div fxLayout=\"column\" fx class=\"m-4\">\n <h2 class=\"text-center\">\n {{importConfig?.importType}} Import\n <span>\n <button type=\"button\" *ngIf=\"failedItems.length > 0\" mat-raised-button color=\"warn\"\n (click)=\"reset()\">Reset</button>\n </span>\n </h2>\n\n <ng-container *ngIf=\"failedItems.length === 0\">\n <app-file-dropper *ngIf=\"fileData.length === 0\" [config]=\"filesConfig\" [fileArray]=\"filesList\"\n (fileChanged)=\"fileChanged($event)\">\n </app-file-dropper>\n\n <app-import-items class=\"w-100\" *ngIf=\"fileData.length > 0\" [data]=\"fileData\" [importConfig]=\"importConfig\"\n (onSave)=\"mappingProcessed($event)\"></app-import-items>\n </ng-container>\n\n <app-failed-items class=\"w-100\" *ngIf=\"failedItems.length > 0\" [failedItems]=\"failedItems\"\n [selectedFields]=\"selectedFields\"></app-failed-items>\n\n</div>",
|
|
96
|
+
styles: [""]
|
|
97
|
+
},] }
|
|
98
|
+
];
|
|
99
|
+
ImportCsvComponent.ctorParameters = () => [
|
|
100
|
+
{ type: AlertService },
|
|
101
|
+
{ type: HttpService },
|
|
102
|
+
{ type: Location }
|
|
103
|
+
];
|
|
104
|
+
ImportCsvComponent.propDecorators = {
|
|
105
|
+
importConfig: [{ type: Input }]
|
|
106
|
+
};
|
|
107
|
+
ImportCsvComponent = __decorate([
|
|
108
|
+
UntilDestroy()
|
|
109
|
+
], ImportCsvComponent);
|
|
110
|
+
export { ImportCsvComponent };
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWNzdi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2ltcG9ydC1jc3YvaW1wb3J0LWNzdi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7SUFRdEMsa0JBQWtCLFNBQWxCLGtCQUFrQjtJQVc3QixZQUNVLFlBQTBCLEVBQzFCLElBQWlCLEVBQ2pCLFFBQWtCO1FBRmxCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVQ1QixjQUFTLEdBQVUsRUFBRSxDQUFDO1FBRXRCLGFBQVEsR0FBVSxFQUFFLENBQUM7UUFDckIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIsbUJBQWMsR0FBVSxFQUFFLENBQUM7UUFPekIsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNqQixNQUFNLEVBQUUsTUFBTTtZQUNkLFdBQVcsRUFBRSxlQUFlO1lBQzVCLE1BQU0sRUFBRTtnQkFDTixNQUFNLEVBQUUsT0FBTzthQUNoQjtZQUNELFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTyxFQUFFLEdBQUc7WUFDWixjQUFjLEVBQUUsTUFBTTtTQUN2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O1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxDQUFDLFlBQWlCOztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksT0FBQyxJQUFJLENBQUMsWUFBWSwwQ0FBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7YUFDL0QsSUFBSSxDQUNILGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FDckIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFlBQVksS0FBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVyxDQUFDLENBQU07UUFDaEIsT0FBTyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FFRixDQUFBOztZQXpHQSxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsZzlCQUEwQzs7YUFFM0M7OztZQVJRLFlBQVk7WUFDWixXQUFXO1lBSlgsUUFBUTs7OzJCQWNkLEtBQUs7O0FBRkssa0JBQWtCO0lBTjlCLFlBQVksRUFBRTtHQU1GLGtCQUFrQixDQW9HOUI7U0FwR1ksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBJbXBvcnRDb25maWcgfSBmcm9tICcuL2ltcG9ydC1jb25maWcnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRmlsZURyb3BwZXJDb25maWcgfSBmcm9tICcuLi9maWxlLWRyb3BwZXIvZmlsZS1kcm9wcGVyLm1vZGVsJztcbmltcG9ydCB7IFZpZXdlckNvbmZpZyB9IGZyb20gJy4uL2RvY3VtZW50LXZpZXdlci92aWV3ZXItY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2NvcmUvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uL2NvcmUvaHR0cC5zZXJ2aWNlJztcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtaW1wb3J0LWNzdicsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBvcnQtY3N2LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW1wb3J0LWNzdi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEltcG9ydENzdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgaW1wb3J0Q29uZmlnOiBJbXBvcnRDb25maWc7XG5cbiAgZmlsZXNDb25maWc6IEZpbGVEcm9wcGVyQ29uZmlnO1xuICBmaWxlc0xpc3Q6IGFueVtdID0gW107XG4gIHZpZXdlckNvbmZpZzogVmlld2VyQ29uZmlnO1xuICBmaWxlRGF0YTogYW55W10gPSBbXTtcbiAgZmFpbGVkSXRlbXM6IGFueVtdID0gW107XG4gIHNlbGVjdGVkRmllbGRzOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvblxuICApIHtcbiAgICB0aGlzLmZpbGVzQ29uZmlnID0ge1xuICAgICAgZmlsZUlkOiBcImZpbGVcIixcbiAgICAgIGNvbnRhaW5lcklkOiBcImZpbGVDb250YWluZXJcIixcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBoZWlnaHQ6IFwiNjAwcHhcIlxuICAgICAgfSxcbiAgICAgIGFjY2VwdEZpbGU6ICcuY3N2JyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIG1heFNpemU6IDEwMCxcbiAgICAgIGFjY2VwdEZpbGVUZXh0OiBcIi5jc3ZcIlxuICAgIH07XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5maWxlc0xpc3QgPSBbXTtcbiAgICB0aGlzLmZhaWxlZEl0ZW1zID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEZpZWxkcyA9IFtdO1xuICAgIHRoaXMuZmlsZURhdGEgPSBbXTtcbiAgfVxuXG4gIGZpbGVDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbGVzTGlzdCA9IGV2ZW50O1xuXG4gICAgbGV0IGpzb25EYXRhID0gbnVsbDtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIGNvbnN0IGZpbGUgPSB0aGlzLmZpbGVzTGlzdFswXTtcbiAgICByZWFkZXIub25sb2FkID0gKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRmlsZSA9IFhMU1gucmVhZChkYXRhLCB7IHR5cGU6ICdiaW5hcnknLCBjZWxsRGF0ZXM6IHRydWUgfSk7XG4gICAgICBqc29uRGF0YSA9IHNlbGVjdGVkRmlsZS5TaGVldE5hbWVzLnJlZHVjZSgoaW5pdGlhbCwgbmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBzaGVldCA9IHNlbGVjdGVkRmlsZS5TaGVldHNbbmFtZV07XG4gICAgICAgIGluaXRpYWwgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24oc2hlZXQpO1xuICAgICAgICByZXR1cm4gaW5pdGlhbDtcbiAgICAgIH0sIFtdKTtcbiAgICAgIHRoaXMuZmlsZURhdGEgPSBqc29uRGF0YTtcbiAgICB9XG4gICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyhmaWxlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBtYXBwaW5nUHJvY2Vzc2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkRmllbGRzID0gZXZlbnQuZmllbGRzO1xuICAgIGNvbnN0IHRlbXBGaWxlRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWxlRGF0YSkpO1xuICAgIHRlbXBGaWxlRGF0YS5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgIHZhciBmaWVsZCA9IGV2ZW50LmZpZWxkcy5maW5kKChmaWVsZDogYW55KSA9PiBmaWVsZC5sYWJlbCA9PSBrZXkpO1xuICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICBpZiAoKGZpZWxkLnByb3BlcnR5VHlwZSA9PSAnZGF0ZScgfHwgZmllbGQucHJvcGVydHlUeXBlID09ICdkYXRlVGltZScpICYmIHRoaXMuaXNWYWxpZERhdGUobmV3IERhdGUoZGF0YVtmaWVsZC5sYWJlbF0pKSkge1xuICAgICAgICAgICAgZGF0YVtmaWVsZC5wcm9wZXJ0eV0gPSAobmV3IERhdGUoZGF0YVtmaWVsZC5sYWJlbF0pIGFzIERhdGUpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YVtmaWVsZC5wcm9wZXJ0eV0gPSBkYXRhW2ZpZWxkLmxhYmVsXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIGRhdGFba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZGF0YVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zYXZlKHRlbXBGaWxlRGF0YSk7XG4gIH1cblxuICBzYXZlKHRlbXBGaWxlRGF0YTogYW55KSB7XG4gICAgdGhpcy5odHRwLnBvc3QodGhpcy5pbXBvcnRDb25maWc/LnBvc3RVcmwsIHsgZGF0YTogdGVtcEZpbGVEYXRhIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZhaWxlZEl0ZW1zID0gcmVzdWx0Py5mYWlsZWRfaXRlbXMgfHwgW107XG4gICAgICAgIGlmICh0aGlzLmZhaWxlZEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KFwiRmlsZSBJbXBvcnQgU3VjY2Vzc1wiLCBcInN1Y2Nlc3NcIik7XG4gICAgICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgaXNWYWxpZERhdGUoZDogYW55KSB7XG4gICAgcmV0dXJuIGQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkLmdldFRpbWUoKSk7XG4gIH1cblxufVxuIl19
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ImportCsvRoutingModule } from './import-csv-routing.module';
|
|
4
|
+
import { ImportCsvComponent } from './import-csv.component';
|
|
5
|
+
import { ImportItemsModule } from './import-items/import-items.module';
|
|
6
|
+
import { FailedItemsModule } from './failed-items/failed-items.module';
|
|
7
|
+
import { MaterialModule } from '../material.module';
|
|
8
|
+
import { FlexLayoutModule } from '@angular/flex-layout';
|
|
9
|
+
import { FileDropperModule } from '../file-dropper/file-dropper.module';
|
|
10
|
+
export class ImportCsvModule {
|
|
11
|
+
}
|
|
12
|
+
ImportCsvModule.decorators = [
|
|
13
|
+
{ type: NgModule, args: [{
|
|
14
|
+
declarations: [ImportCsvComponent],
|
|
15
|
+
imports: [
|
|
16
|
+
CommonModule,
|
|
17
|
+
MaterialModule,
|
|
18
|
+
FlexLayoutModule,
|
|
19
|
+
FileDropperModule,
|
|
20
|
+
ImportCsvRoutingModule,
|
|
21
|
+
ImportItemsModule,
|
|
22
|
+
FailedItemsModule
|
|
23
|
+
],
|
|
24
|
+
exports: [ImportCsvComponent]
|
|
25
|
+
},] }
|
|
26
|
+
];
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWNzdi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2ltcG9ydC1jc3YvaW1wb3J0LWNzdi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBZ0J4RSxNQUFNLE9BQU8sZUFBZTs7O1lBYjNCLFFBQVEsU0FBQztnQkFDUixZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDbEMsT0FBTyxFQUFFO29CQUNQLFlBQVk7b0JBQ1osY0FBYztvQkFDZCxnQkFBZ0I7b0JBQ2hCLGlCQUFpQjtvQkFDakIsc0JBQXNCO29CQUN0QixpQkFBaUI7b0JBQ2pCLGlCQUFpQjtpQkFDbEI7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUM7YUFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgSW1wb3J0Q3N2Um91dGluZ01vZHVsZSB9IGZyb20gJy4vaW1wb3J0LWNzdi1yb3V0aW5nLm1vZHVsZSc7XG5pbXBvcnQgeyBJbXBvcnRDc3ZDb21wb25lbnQgfSBmcm9tICcuL2ltcG9ydC1jc3YuY29tcG9uZW50JztcbmltcG9ydCB7IEltcG9ydEl0ZW1zTW9kdWxlIH0gZnJvbSAnLi9pbXBvcnQtaXRlbXMvaW1wb3J0LWl0ZW1zLm1vZHVsZSc7XG5pbXBvcnQgeyBGYWlsZWRJdGVtc01vZHVsZSB9IGZyb20gJy4vZmFpbGVkLWl0ZW1zL2ZhaWxlZC1pdGVtcy5tb2R1bGUnO1xuaW1wb3J0IHsgTWF0ZXJpYWxNb2R1bGUgfSBmcm9tICcuLi9tYXRlcmlhbC5tb2R1bGUnO1xuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0JztcbmltcG9ydCB7IEZpbGVEcm9wcGVyTW9kdWxlIH0gZnJvbSAnLi4vZmlsZS1kcm9wcGVyL2ZpbGUtZHJvcHBlci5tb2R1bGUnO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0ltcG9ydENzdkNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTWF0ZXJpYWxNb2R1bGUsXG4gICAgRmxleExheW91dE1vZHVsZSxcbiAgICBGaWxlRHJvcHBlck1vZHVsZSxcbiAgICBJbXBvcnRDc3ZSb3V0aW5nTW9kdWxlLFxuICAgIEltcG9ydEl0ZW1zTW9kdWxlLFxuICAgIEZhaWxlZEl0ZW1zTW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtJbXBvcnRDc3ZDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEltcG9ydENzdk1vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { RouterModule } from '@angular/router';
|
|
3
|
+
const routes = [];
|
|
4
|
+
export class ImportItemsRoutingModule {
|
|
5
|
+
}
|
|
6
|
+
ImportItemsRoutingModule.decorators = [
|
|
7
|
+
{ type: NgModule, args: [{
|
|
8
|
+
imports: [RouterModule.forChild(routes)],
|
|
9
|
+
exports: [RouterModule]
|
|
10
|
+
},] }
|
|
11
|
+
];
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWl0ZW1zLXJvdXRpbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi9pbXBvcnQtY3N2L2ltcG9ydC1pdGVtcy9pbXBvcnQtaXRlbXMtcm91dGluZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQVUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkQsTUFBTSxNQUFNLEdBQVcsRUFBRSxDQUFDO0FBTTFCLE1BQU0sT0FBTyx3QkFBd0I7OztZQUpwQyxRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEMsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2FBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlcywgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1JvdXRlck1vZHVsZS5mb3JDaGlsZChyb3V0ZXMpXSxcbiAgZXhwb3J0czogW1JvdXRlck1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSW1wb3J0SXRlbXNSb3V0aW5nTW9kdWxlIHsgfVxuIl19
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { FormBuilder, FormControl, Validators } from '@angular/forms';
|
|
3
|
+
import { FormValidatorService } from '../../core/form-validator.service';
|
|
4
|
+
const errorMessages = {
|
|
5
|
+
property: {
|
|
6
|
+
required: "Property is required",
|
|
7
|
+
unavailable: "Duplicate entry"
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
export class ImportItemsComponent {
|
|
11
|
+
constructor(fb, formValidatorService, changeDetectorRef) {
|
|
12
|
+
this.fb = fb;
|
|
13
|
+
this.formValidatorService = formValidatorService;
|
|
14
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
15
|
+
this.firstDataArray = [];
|
|
16
|
+
this.properties = [];
|
|
17
|
+
this.onSave = new EventEmitter();
|
|
18
|
+
this.createImportMappingForm();
|
|
19
|
+
}
|
|
20
|
+
ngOnInit() {
|
|
21
|
+
this.properties = this.importConfig.properties;
|
|
22
|
+
this.mapOutDataColumns(this.data[0]);
|
|
23
|
+
}
|
|
24
|
+
createImportMappingForm() {
|
|
25
|
+
this.importMappingForm = this.fb.group({
|
|
26
|
+
fields: this.fb.array([]),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
get fieldsArray() {
|
|
30
|
+
return this.importMappingForm.get('fields');
|
|
31
|
+
}
|
|
32
|
+
createField(field) {
|
|
33
|
+
var fieldForm = this.fb.group({
|
|
34
|
+
id: new FormControl(field.id),
|
|
35
|
+
label: new FormControl(field.label),
|
|
36
|
+
value: new FormControl(field.value),
|
|
37
|
+
property: new FormControl(field.property, Validators.compose([
|
|
38
|
+
Validators.required
|
|
39
|
+
])),
|
|
40
|
+
propertyType: new FormControl(field.propertyType)
|
|
41
|
+
});
|
|
42
|
+
return fieldForm;
|
|
43
|
+
}
|
|
44
|
+
mapOutDataColumns(data) {
|
|
45
|
+
for (var key in data) {
|
|
46
|
+
if (data.hasOwnProperty(key)) {
|
|
47
|
+
var dataValue = {
|
|
48
|
+
id: '',
|
|
49
|
+
label: key,
|
|
50
|
+
value: data[key],
|
|
51
|
+
property: '',
|
|
52
|
+
propertyType: ''
|
|
53
|
+
};
|
|
54
|
+
this.firstDataArray.push(dataValue);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
this.firstDataArray.forEach((element, mainIndex) => {
|
|
58
|
+
element.id = mainIndex;
|
|
59
|
+
this.properties.find((property) => {
|
|
60
|
+
if (property.label.toLowerCase().includes(element.label.toLowerCase())) {
|
|
61
|
+
element.property = property.value;
|
|
62
|
+
element.propertyType = property.type;
|
|
63
|
+
return element;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
submit() {
|
|
69
|
+
this.importMappingForm.markAllAsTouched();
|
|
70
|
+
if (!this.importMappingForm.valid) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
this.onSave.emit(this.importMappingForm.value);
|
|
74
|
+
}
|
|
75
|
+
/** Method to evaluate form fields*/
|
|
76
|
+
isFieldValid(field, form) {
|
|
77
|
+
return this.formValidatorService.isFieldValid(field, form);
|
|
78
|
+
}
|
|
79
|
+
/** Method to find error in form fields*/
|
|
80
|
+
getErrorMessage(field, form) {
|
|
81
|
+
return this.formValidatorService.getErrorMessage(field, form, errorMessages);
|
|
82
|
+
}
|
|
83
|
+
ngAfterViewInit() {
|
|
84
|
+
//Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.
|
|
85
|
+
//Add 'implements AfterViewInit' to the class.
|
|
86
|
+
setTimeout((_) => {
|
|
87
|
+
this.firstDataArray.forEach((element) => {
|
|
88
|
+
this.fieldsArray.push(this.createField(element));
|
|
89
|
+
});
|
|
90
|
+
this.changeDetectorRef.detectChanges();
|
|
91
|
+
}, 500);
|
|
92
|
+
}
|
|
93
|
+
updatePropertyType(event, index) {
|
|
94
|
+
var field = this.properties.find((field) => field.value == event.value);
|
|
95
|
+
if (field) {
|
|
96
|
+
this.fieldsArray.controls[index].get('propertyType').setValue(field.type);
|
|
97
|
+
this.uniqueValidator();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
uniqueValidator() {
|
|
101
|
+
this.fieldsArray.value.forEach((field, index) => {
|
|
102
|
+
var control = this.fieldsArray.controls[index].get('property');
|
|
103
|
+
const isNameUnique = this.fieldsArray.value.find((propertyData) => propertyData.property === control.value
|
|
104
|
+
&& propertyData.id != this.fieldsArray.controls[index].get('id').value)
|
|
105
|
+
? false
|
|
106
|
+
: true;
|
|
107
|
+
if (!isNameUnique) {
|
|
108
|
+
control.setErrors({ unavailable: true });
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
control.setErrors(null);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
removeField(index) {
|
|
116
|
+
if (index == -1) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this.fieldsArray.removeAt(index);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
ImportItemsComponent.decorators = [
|
|
123
|
+
{ type: Component, args: [{
|
|
124
|
+
selector: 'app-import-items',
|
|
125
|
+
template: "<div fxLayout=\"column\" class=\"mt-2\">\n <p class=\"text-center secondary-color\">Map your column headers in your file to our properties</p>\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"submit()\" fxLayout=\"column\">\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i=index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1\" fxFlex=\"100%\" fxLayoutAlign=\"end\">\n <button mat-stroked-button color=\"primary\" class=\"mt-2\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>",
|
|
126
|
+
styles: ["table{width:100%}td,th{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}"]
|
|
127
|
+
},] }
|
|
128
|
+
];
|
|
129
|
+
ImportItemsComponent.ctorParameters = () => [
|
|
130
|
+
{ type: FormBuilder },
|
|
131
|
+
{ type: FormValidatorService },
|
|
132
|
+
{ type: ChangeDetectorRef }
|
|
133
|
+
];
|
|
134
|
+
ImportItemsComponent.propDecorators = {
|
|
135
|
+
data: [{ type: Input }],
|
|
136
|
+
importConfig: [{ type: Input }],
|
|
137
|
+
onSave: [{ type: Output }]
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWl0ZW1zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvaW1wb3J0LWNzdi9pbXBvcnQtaXRlbXMvaW1wb3J0LWl0ZW1zLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBYSxXQUFXLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR3pFLE1BQU0sYUFBYSxHQUFRO0lBQ3pCLFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRSxzQkFBc0I7UUFDaEMsV0FBVyxFQUFFLGlCQUFpQjtLQUMvQjtDQUNGLENBQUM7QUFPRixNQUFNLE9BQU8sb0JBQW9CO0lBUS9CLFlBQ1UsRUFBZSxFQUNmLG9CQUEwQyxFQUMxQyxpQkFBb0M7UUFGcEMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQVA5QyxtQkFBYyxHQUFVLEVBQUUsQ0FBQztRQUMzQixlQUFVLEdBQVUsRUFBRSxDQUFDO1FBQ2IsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFPcEMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBQy9DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxD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QUFDO1lBQy9ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRSxDQUNyRSxZQUFZLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxLQUFLO21CQUNwQyxZQUFZLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQ3ZFO2dCQUNDLENBQUMsQ0FBQyxLQUFLO2dCQUNQLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNqQixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDMUM7aUJBQ0k7Z0JBQ0gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ2YsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7O1lBMUlGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixxNkVBQTRDOzthQUU3Qzs7O1lBZm1CLFdBQVc7WUFDdEIsb0JBQW9CO1lBRnBCLGlCQUFpQjs7O21CQW1CdkIsS0FBSzsyQkFDTCxLQUFLO3FCQUdMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1WYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9mb3JtLXZhbGlkYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEltcG9ydENvbmZpZyB9IGZyb20gJy4uL2ltcG9ydC1jb25maWcnO1xuXG5jb25zdCBlcnJvck1lc3NhZ2VzOiBhbnkgPSB7XG4gIHByb3BlcnR5OiB7XG4gICAgcmVxdWlyZWQ6IFwiUHJvcGVydHkgaXMgcmVxdWlyZWRcIixcbiAgICB1bmF2YWlsYWJsZTogXCJEdXBsaWNhdGUgZW50cnlcIlxuICB9LFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWltcG9ydC1pdGVtcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBvcnQtaXRlbXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbXBvcnQtaXRlbXMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJbXBvcnRJdGVtc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGltcG9ydE1hcHBpbmdGb3JtOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdO1xuICBASW5wdXQoKSBpbXBvcnRDb25maWc6IEltcG9ydENvbmZpZztcbiAgZmlyc3REYXRhQXJyYXk6IGFueVtdID0gW107XG4gIHByb3BlcnRpZXM6IGFueVtdID0gW107XG4gIEBPdXRwdXQoKSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBmb3JtVmFsaWRhdG9yU2VydmljZTogRm9ybVZhbGlkYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5jcmVhdGVJbXBvcnRNYXBwaW5nRm9ybSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gdGhpcy5pbXBvcnRDb25maWcucHJvcGVydGllcztcbiAgICB0aGlzLm1hcE91dERhdGFDb2x1bW5zKHRoaXMuZGF0YVswXSk7XG4gIH1cblxuICBjcmVhdGVJbXBvcnRNYXBwaW5nRm9ybSgpIHtcbiAgICB0aGlzLmltcG9ydE1hcHBpbmdGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBmaWVsZHM6IHRoaXMuZmIuYXJyYXkoW10pLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpZWxkc0FycmF5KCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuaW1wb3J0TWFwcGluZ0Zvcm0uZ2V0KCdmaWVsZHMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBjcmVhdGVGaWVsZChmaWVsZDogYW55KTogRm9ybUdyb3VwIHtcbiAgICB2YXIgZmllbGRGb3JtOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGlkOiBuZXcgRm9ybUNvbnRyb2woZmllbGQuaWQpLFxuICAgICAgbGFiZWw6IG5ldyBGb3JtQ29udHJvbChmaWVsZC5sYWJlbCksXG4gICAgICB2YWx1ZTogbmV3IEZvcm1Db250cm9sKGZpZWxkLnZhbHVlKSxcbiAgICAgIHByb3BlcnR5OiBuZXcgRm9ybUNvbnRyb2woZmllbGQucHJvcGVydHksXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShcbiAgICAgICAgICBbXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgcHJvcGVydHlUeXBlOiBuZXcgRm9ybUNvbnRyb2woZmllbGQucHJvcGVydHlUeXBlKVxuICAgIH0pO1xuICAgIHJldHVybiBmaWVsZEZvcm07XG4gIH1cblxuICBtYXBPdXREYXRhQ29sdW1ucyhkYXRhOiBhbnlbXSkge1xuICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHZhciBkYXRhVmFsdWUgPSB7XG4gICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgIGxhYmVsOiBrZXksXG4gICAgICAgICAgdmFsdWU6IGRhdGFba2V5XSxcbiAgICAgICAgICBwcm9wZXJ0eTogJycsXG4gICAgICAgICAgcHJvcGVydHlUeXBlOiAnJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZpcnN0RGF0YUFycmF5LnB1c2goZGF0YVZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5maXJzdERhdGFBcnJheS5mb3JFYWNoKChlbGVtZW50OiBhbnksIG1haW5JbmRleDogYW55KSA9PiB7XG4gICAgICBlbGVtZW50LmlkID0gbWFpbkluZGV4O1xuICAgICAgdGhpcy5wcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHByb3BlcnR5LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZWxlbWVudC5sYWJlbC50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIGVsZW1lbnQucHJvcGVydHkgPSBwcm9wZXJ0eS52YWx1ZTtcbiAgICAgICAgICBlbGVtZW50LnByb3BlcnR5VHlwZSA9IHByb3BlcnR5LnR5cGU7XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMuaW1wb3J0TWFwcGluZ0Zvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIGlmICghdGhpcy5pbXBvcnRNYXBwaW5nRm9ybS52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9uU2F2ZS5lbWl0KHRoaXMuaW1wb3J0TWFwcGluZ0Zvcm0udmFsdWUpO1xuICB9XG5cbiAgLyoqIE1ldGhvZCB0byBldmFsdWF0ZSBmb3JtIGZpZWxkcyovXG4gIGlzRmllbGRWYWxpZChmaWVsZDogc3RyaW5nLCBmb3JtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtVmFsaWRhdG9yU2VydmljZS5pc0ZpZWxkVmFsaWQoZmllbGQsIGZvcm0pO1xuICB9XG5cbiAgLyoqIE1ldGhvZCB0byBmaW5kIGVycm9yIGluIGZvcm0gZmllbGRzKi9cbiAgZ2V0RXJyb3JNZXNzYWdlKGZpZWxkOiBzdHJpbmcsIGZvcm06IGFueSkge1xuICAgIHJldHVybiB0aGlzLmZvcm1WYWxpZGF0b3JTZXJ2aWNlLmdldEVycm9yTWVzc2FnZShmaWVsZCwgZm9ybSwgZXJyb3JNZXNzYWdlcyk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy9DYWxsZWQgYWZ0ZXIgbmdBZnRlckNvbnRlbnRJbml0IHdoZW4gdGhlIGNvbXBvbmVudCdzIHZpZXcgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIEFwcGxpZXMgdG8gY29tcG9uZW50cyBvbmx5LlxuICAgIC8vQWRkICdpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQnIHRvIHRoZSBjbGFzcy5cbiAgICBzZXRUaW1lb3V0KChfOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZmlyc3REYXRhQXJyYXkuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZmllbGRzQXJyYXkucHVzaCh0aGlzLmNyZWF0ZUZpZWxkKGVsZW1lbnQpKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHVwZGF0ZVByb3BlcnR5VHlwZShldmVudDogYW55LCBpbmRleDogYW55KTogdm9pZCB7XG4gICAgdmFyIGZpZWxkID0gdGhpcy5wcm9wZXJ0aWVzLmZpbmQoKGZpZWxkOiBhbnkpID0+IGZpZWxkLnZhbHVlID09IGV2ZW50LnZhbHVlKTtcbiAgICBpZiAoZmllbGQpIHtcbiAgICAgIHRoaXMuZmllbGRzQXJyYXkuY29udHJvbHNbaW5kZXhdLmdldCgncHJvcGVydHlUeXBlJykuc2V0VmFsdWUoZmllbGQudHlwZSk7XG4gICAgICB0aGlzLnVuaXF1ZVZhbGlkYXRvcigpO1xuICAgIH1cbiAgfVxuXG4gIHVuaXF1ZVZhbGlkYXRvcigpIHtcbiAgICB0aGlzLmZpZWxkc0FycmF5LnZhbHVlLmZvckVhY2goKGZpZWxkOiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgIHZhciBjb250cm9sID0gdGhpcy5maWVsZHNBcnJheS5jb250cm9sc1tpbmRleF0uZ2V0KCdwcm9wZXJ0eScpO1xuICAgICAgY29uc3QgaXNOYW1lVW5pcXVlID0gdGhpcy5maWVsZHNBcnJheS52YWx1ZS5maW5kKChwcm9wZXJ0eURhdGE6IGFueSkgPT5cbiAgICAgICAgcHJvcGVydHlEYXRhLnByb3BlcnR5ID09PSBjb250cm9sLnZhbHVlXG4gICAgICAgICYmIHByb3BlcnR5RGF0YS5pZCAhPSB0aGlzLmZpZWxkc0FycmF5LmNvbnRyb2xzW2luZGV4XS5nZXQoJ2lkJykudmFsdWVcbiAgICAgIClcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHRydWU7XG4gICAgICBpZiAoIWlzTmFtZVVuaXF1ZSkge1xuICAgICAgICBjb250cm9sLnNldEVycm9ycyh7IHVuYXZhaWxhYmxlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlRmllbGQoaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZpZWxkc0FycmF5LnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ImportItemsRoutingModule } from './import-items-routing.module';
|
|
4
|
+
import { ImportItemsComponent } from './import-items.component';
|
|
5
|
+
import { FlexLayoutModule } from '@angular/flex-layout';
|
|
6
|
+
import { MaterialModule } from '../../material.module';
|
|
7
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
8
|
+
export class ImportItemsModule {
|
|
9
|
+
}
|
|
10
|
+
ImportItemsModule.decorators = [
|
|
11
|
+
{ type: NgModule, args: [{
|
|
12
|
+
declarations: [ImportItemsComponent],
|
|
13
|
+
imports: [
|
|
14
|
+
CommonModule,
|
|
15
|
+
FlexLayoutModule,
|
|
16
|
+
MaterialModule,
|
|
17
|
+
ReactiveFormsModule,
|
|
18
|
+
ImportItemsRoutingModule
|
|
19
|
+
],
|
|
20
|
+
exports: [ImportItemsComponent]
|
|
21
|
+
},] }
|
|
22
|
+
];
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWl0ZW1zLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvaW1wb3J0LWNzdi9pbXBvcnQtaXRlbXMvaW1wb3J0LWl0ZW1zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFjckQsTUFBTSxPQUFPLGlCQUFpQjs7O1lBWDdCLFFBQVEsU0FBQztnQkFDUixZQUFZLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDcEMsT0FBTyxFQUFFO29CQUNQLFlBQVk7b0JBQ1osZ0JBQWdCO29CQUNoQixjQUFjO29CQUNkLG1CQUFtQjtvQkFDbkIsd0JBQXdCO2lCQUN6QjtnQkFDRCxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzthQUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBJbXBvcnRJdGVtc1JvdXRpbmdNb2R1bGUgfSBmcm9tICcuL2ltcG9ydC1pdGVtcy1yb3V0aW5nLm1vZHVsZSc7XG5pbXBvcnQgeyBJbXBvcnRJdGVtc0NvbXBvbmVudCB9IGZyb20gJy4vaW1wb3J0LWl0ZW1zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGbGV4TGF5b3V0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQnO1xuaW1wb3J0IHsgTWF0ZXJpYWxNb2R1bGUgfSBmcm9tICcuLi8uLi9tYXRlcmlhbC5tb2R1bGUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtJbXBvcnRJdGVtc0NvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRmxleExheW91dE1vZHVsZSxcbiAgICBNYXRlcmlhbE1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEltcG9ydEl0ZW1zUm91dGluZ01vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbSW1wb3J0SXRlbXNDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEltcG9ydEl0ZW1zTW9kdWxlIHsgfVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './loader.component';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2xvYWRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9sb2FkZXIuY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
export class LoaderComponent {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.isLoading = false;
|
|
5
|
+
this.size = 0.6;
|
|
6
|
+
}
|
|
7
|
+
ngOnInit() { }
|
|
8
|
+
}
|
|
9
|
+
LoaderComponent.decorators = [
|
|
10
|
+
{ type: Component, args: [{
|
|
11
|
+
selector: 'app-loader',
|
|
12
|
+
template: "<div [hidden]=\"!isLoading\">\n <mat-progress-spinner mode=\"indeterminate\" [strokeWidth]=\"2\" [diameter]=\"32 * size\"></mat-progress-spinner>\n <span class=\"message\">{{message}}</span>\n</div>\n",
|
|
13
|
+
styles: [".mat-progress-spinner{display:inline-block;vertical-align:middle}.message{margin-left:.5em}"]
|
|
14
|
+
},] }
|
|
15
|
+
];
|
|
16
|
+
LoaderComponent.ctorParameters = () => [];
|
|
17
|
+
LoaderComponent.propDecorators = {
|
|
18
|
+
isLoading: [{ type: Input }],
|
|
19
|
+
size: [{ type: Input }],
|
|
20
|
+
message: [{ type: Input }]
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvbG9hZGVyL2xvYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPekQsTUFBTSxPQUFPLGVBQWU7SUFNMUI7UUFKUyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFNBQUksR0FBRyxHQUFHLENBQUM7SUFHSixDQUFDO0lBRWpCLFFBQVEsS0FBSyxDQUFDOzs7WUFiZixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLHNOQUFzQzs7YUFFdkM7Ozs7d0JBR0UsS0FBSzttQkFDTCxLQUFLO3NCQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWxvYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sb2FkZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBMb2FkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGlzTG9hZGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBzaXplID0gMC42O1xuICBASW5wdXQoKSBtZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpIHsgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { LoaderComponent } from './loader.component';
|
|
4
|
+
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
5
|
+
export class LoaderModule {
|
|
6
|
+
}
|
|
7
|
+
LoaderModule.decorators = [
|
|
8
|
+
{ type: NgModule, args: [{
|
|
9
|
+
declarations: [
|
|
10
|
+
LoaderComponent
|
|
11
|
+
],
|
|
12
|
+
imports: [
|
|
13
|
+
CommonModule,
|
|
14
|
+
MatProgressSpinnerModule
|
|
15
|
+
],
|
|
16
|
+
exports: [
|
|
17
|
+
LoaderComponent
|
|
18
|
+
]
|
|
19
|
+
},] }
|
|
20
|
+
];
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvbG9hZGVyL2xvYWRlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBYzlFLE1BQU0sT0FBTyxZQUFZOzs7WUFaeEIsUUFBUSxTQUFDO2dCQUNSLFlBQVksRUFBRTtvQkFDWixlQUFlO2lCQUNoQjtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsWUFBWTtvQkFDWix3QkFBd0I7aUJBQ3pCO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxlQUFlO2lCQUNoQjthQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIExvYWRlckNvbXBvbmVudFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgTG9hZGVyQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTG9hZGVyTW9kdWxlIHsgfVxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { RouterModule } from '@angular/router';
|
|
3
|
+
import { AuthenticationGuard } from '../core/authentication.guard';
|
|
4
|
+
import { LoginHistoryForUserComponent } from './login-history-for-user.component';
|
|
5
|
+
const routes = [
|
|
6
|
+
{
|
|
7
|
+
path: '',
|
|
8
|
+
component: LoginHistoryForUserComponent,
|
|
9
|
+
canActivate: [AuthenticationGuard]
|
|
10
|
+
},
|
|
11
|
+
];
|
|
12
|
+
export class LoginHistoryForUserRoutingModule {
|
|
13
|
+
}
|
|
14
|
+
LoginHistoryForUserRoutingModule.decorators = [
|
|
15
|
+
{ type: NgModule, args: [{
|
|
16
|
+
imports: [RouterModule.forChild(routes)],
|
|
17
|
+
exports: [RouterModule]
|
|
18
|
+
},] }
|
|
19
|
+
];
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4taGlzdG9yeS1mb3ItdXNlci1yb3V0aW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvbG9naW4taGlzdG9yeS1mb3ItdXNlci9sb2dpbi1oaXN0b3J5LWZvci11c2VyLXJvdXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFVLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWxGLE1BQU0sTUFBTSxHQUFXO0lBQ3JCO1FBQ0UsSUFBSSxFQUFFLEVBQUU7UUFDUixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLFdBQVcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO0tBQ25DO0NBQ0YsQ0FBQztBQU1GLE1BQU0sT0FBTyxnQ0FBZ0M7OztZQUo1QyxRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEMsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2FBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlcywgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uR3VhcmQgfSBmcm9tICcuLi9jb3JlL2F1dGhlbnRpY2F0aW9uLmd1YXJkJztcbmltcG9ydCB7IExvZ2luSGlzdG9yeUZvclVzZXJDb21wb25lbnQgfSBmcm9tICcuL2xvZ2luLWhpc3RvcnktZm9yLXVzZXIuY29tcG9uZW50JztcblxuY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gIHtcbiAgICBwYXRoOiAnJyxcbiAgICBjb21wb25lbnQ6IExvZ2luSGlzdG9yeUZvclVzZXJDb21wb25lbnQsXG4gICAgY2FuQWN0aXZhdGU6IFtBdXRoZW50aWNhdGlvbkd1YXJkXVxuICB9LFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1JvdXRlck1vZHVsZS5mb3JDaGlsZChyb3V0ZXMpXSxcbiAgZXhwb3J0czogW1JvdXRlck1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgTG9naW5IaXN0b3J5Rm9yVXNlclJvdXRpbmdNb2R1bGUgeyB9XG4iXX0=
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
|
|
4
|
+
import { FormBuilder } from '@angular/forms';
|
|
5
|
+
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
6
|
+
import { HttpService } from '../core/http.service';
|
|
7
|
+
let LoginHistoryForUserComponent = class LoginHistoryForUserComponent {
|
|
8
|
+
constructor(http, fb) {
|
|
9
|
+
this.http = http;
|
|
10
|
+
this.fb = fb;
|
|
11
|
+
this.loginHistoryList = [];
|
|
12
|
+
this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };
|
|
13
|
+
this.filters = {
|
|
14
|
+
sort_by: 'created_at|desc',
|
|
15
|
+
};
|
|
16
|
+
this.displayedColumns = ['index', 'created_at'];
|
|
17
|
+
this.historyFilterForm = this.fb.group({
|
|
18
|
+
'date_from': [''],
|
|
19
|
+
'date_to': ['']
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
ngOnInit() {
|
|
23
|
+
this.filters.user_id = this.userId;
|
|
24
|
+
this.historyFilterForm.valueChanges
|
|
25
|
+
.pipe(debounceTime(500), distinctUntilChanged(), untilDestroyed(this))
|
|
26
|
+
.subscribe((value) => {
|
|
27
|
+
value.date_from = value.date_from ? value.date_from.toISOString() : '';
|
|
28
|
+
value.date_to = value.date_to ? value.date_to.toISOString() : '';
|
|
29
|
+
this.filterChange(value);
|
|
30
|
+
});
|
|
31
|
+
this.initializeData();
|
|
32
|
+
}
|
|
33
|
+
initializeData() {
|
|
34
|
+
this.http.get(`api/user-login-history`, { params: Object.assign(Object.assign({}, this.filters), this.pageEvent) })
|
|
35
|
+
.pipe(untilDestroyed(this))
|
|
36
|
+
.subscribe((result) => {
|
|
37
|
+
this.loginHistoryList = this.loginHistoryList.concat(result.data);
|
|
38
|
+
this.pageEvent.page = result.current_page;
|
|
39
|
+
this.pageEvent.lastPage = result.last_page;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
filterChange(event) {
|
|
43
|
+
this.filters = Object.assign(Object.assign({}, this.filters), event);
|
|
44
|
+
this.reload();
|
|
45
|
+
}
|
|
46
|
+
onScroll() {
|
|
47
|
+
if (this.pageEvent.lastPage > this.pageEvent.page) {
|
|
48
|
+
this.pageEvent.page += 1;
|
|
49
|
+
this.initializeData();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
reload() {
|
|
53
|
+
this.loginHistoryList = [];
|
|
54
|
+
this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };
|
|
55
|
+
this.initializeData();
|
|
56
|
+
}
|
|
57
|
+
ngOnDestroy() {
|
|
58
|
+
//Until destroyed uses it
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
LoginHistoryForUserComponent.decorators = [
|
|
62
|
+
{ type: Component, args: [{
|
|
63
|
+
selector: 'app-login-history-for-user',
|
|
64
|
+
template: "<div class=\"mat-typography m-4\">\n <form fxLayoutAlign=\" start center\">\n <app-timeline-filter [form]=\"historyFilterForm\"></app-timeline-filter>\n </form>\n\n\n\n <section>\n <div class=\"scroll-container\" infiniteScroll [infiniteScrollDistance]=\"2\" [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\" [scrollWindow]=\"false\">\n <table mat-table [dataSource]=\"loginHistoryList\" matSort class=\"w-100 mt-1\" multiTemplateDataRows\n id=\"login-history-table\">\n\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let loginHistory; let i = dataIndex\"> {{ i+1 }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"created_at\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Last Login</th>\n <td mat-cell *matCellDef=\"let loginHistory;\">\n {{loginHistory?.created_at | date:'medium' }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n\n </section>\n</div>",
|
|
65
|
+
styles: [".scroll-container{max-height:800px;overflow-y:auto}"]
|
|
66
|
+
},] }
|
|
67
|
+
];
|
|
68
|
+
LoginHistoryForUserComponent.ctorParameters = () => [
|
|
69
|
+
{ type: HttpService },
|
|
70
|
+
{ type: FormBuilder }
|
|
71
|
+
];
|
|
72
|
+
LoginHistoryForUserComponent.propDecorators = {
|
|
73
|
+
userId: [{ type: Input }]
|
|
74
|
+
};
|
|
75
|
+
LoginHistoryForUserComponent = __decorate([
|
|
76
|
+
UntilDestroy()
|
|
77
|
+
], LoginHistoryForUserComponent);
|
|
78
|
+
export { LoginHistoryForUserComponent };
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4taGlzdG9yeS1mb3ItdXNlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2xvZ2luLWhpc3RvcnktZm9yLXVzZXIvbG9naW4taGlzdG9yeS1mb3ItdXNlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7SUFRdEMsNEJBQTRCLFNBQTVCLDRCQUE0QjtJQVd2QyxZQUNVLElBQWlCLEVBQ2pCLEVBQWU7UUFEZixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFYekIscUJBQWdCLEdBQVUsRUFBRSxDQUFDO1FBQzdCLGNBQVMsR0FBYyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDN0QsWUFBTyxHQUFRO1lBQ2IsT0FBTyxFQUFFLGlCQUFpQjtTQUMzQixDQUFDO1FBRUYscUJBQWdCLEdBQVUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFPaEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3JDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqQixTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZO2FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckUsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDeEIsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBRSxLQUFLLENBQUMsU0FBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pGLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUUsS0FBSyxDQUFDLE9BQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLGtDQUFPLElBQUksQ0FBQyxPQUFPLEdBQUssSUFBSSxDQUFDLFNBQVMsQ0FBRSxFQUFFLENBQUM7YUFDeEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQixTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLElBQUksQ0FBQyxPQUFPLG1DQUNQLElBQUksQ0FBQyxPQUFPLEdBQ1osS0FBSyxDQUNULENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBR0QsTUFBTTtRQUNKLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxXQUFXO1FBQ1QseUJBQXlCO0lBQzNCLENBQUM7Q0FFRixDQUFBOztZQTFFQSxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtnQkFDdEMsNjVDQUFzRDs7YUFFdkQ7OztZQVBRLFdBQVc7WUFIWCxXQUFXOzs7cUJBb0JqQixLQUFLOztBQVRLLDRCQUE0QjtJQU54QyxZQUFZLEVBQUU7R0FNRiw0QkFBNEIsQ0FxRXhDO1NBckVZLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4uL2NvcmUvaHR0cC5zZXJ2aWNlJztcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbG9naW4taGlzdG9yeS1mb3ItdXNlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2dpbi1oaXN0b3J5LWZvci11c2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbG9naW4taGlzdG9yeS1mb3ItdXNlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExvZ2luSGlzdG9yeUZvclVzZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGxvZ2luSGlzdG9yeUxpc3Q6IGFueVtdID0gW107XG4gIHBhZ2VFdmVudDogUGFnZUV2ZW50ID0geyBwYWdlOiAxLCBwZXJQYWdlOiAyNSwgbGFzdFBhZ2U6IDEgfTtcbiAgZmlsdGVyczogYW55ID0ge1xuICAgIHNvcnRfYnk6ICdjcmVhdGVkX2F0fGRlc2MnLFxuICB9O1xuICBoaXN0b3J5RmlsdGVyRm9ybTogRm9ybUdyb3VwO1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBhbnlbXSA9IFsnaW5kZXgnLCAnY3JlYXRlZF9hdCddO1xuICBASW5wdXQoKSB1c2VySWQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICApIHtcbiAgICB0aGlzLmhpc3RvcnlGaWx0ZXJGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAnZGF0ZV9mcm9tJzogWycnXSxcbiAgICAgICdkYXRlX3RvJzogWycnXVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5maWx0ZXJzLnVzZXJfaWQgPSB0aGlzLnVzZXJJZDtcbiAgICB0aGlzLmhpc3RvcnlGaWx0ZXJGb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHVudGlsRGVzdHJveWVkKHRoaXMpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB2YWx1ZS5kYXRlX2Zyb20gPSB2YWx1ZS5kYXRlX2Zyb20gPyAodmFsdWUuZGF0ZV9mcm9tIGFzIERhdGUpLnRvSVNPU3RyaW5nKCkgOiAnJztcbiAgICAgICAgdmFsdWUuZGF0ZV90byA9IHZhbHVlLmRhdGVfdG8gPyAodmFsdWUuZGF0ZV90byBhcyBEYXRlKS50b0lTT1N0cmluZygpIDogJyc7XG4gICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlKHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGEoKTtcbiAgfVxuXG4gIGluaXRpYWxpemVEYXRhKCkge1xuICAgIHRoaXMuaHR0cC5nZXQoYGFwaS91c2VyLWxvZ2luLWhpc3RvcnlgLCB7IHBhcmFtczogeyAuLi50aGlzLmZpbHRlcnMsIC4uLnRoaXMucGFnZUV2ZW50IH0gfSlcbiAgICAgIC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5sb2dpbkhpc3RvcnlMaXN0ID0gdGhpcy5sb2dpbkhpc3RvcnlMaXN0LmNvbmNhdChyZXN1bHQuZGF0YSk7XG4gICAgICAgIHRoaXMucGFnZUV2ZW50LnBhZ2UgPSByZXN1bHQuY3VycmVudF9wYWdlO1xuICAgICAgICB0aGlzLnBhZ2VFdmVudC5sYXN0UGFnZSA9IHJlc3VsdC5sYXN0X3BhZ2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIGZpbHRlckNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5maWx0ZXJzID0ge1xuICAgICAgLi4udGhpcy5maWx0ZXJzLFxuICAgICAgLi4uZXZlbnRcbiAgICB9O1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBvblNjcm9sbCgpIHtcbiAgICBpZiAodGhpcy5wYWdlRXZlbnQubGFzdFBhZ2UgPiB0aGlzLnBhZ2VFdmVudC5wYWdlKSB7XG4gICAgICB0aGlzLnBhZ2VFdmVudC5wYWdlICs9IDE7XG4gICAgICB0aGlzLmluaXRpYWxpemVEYXRhKCk7XG4gICAgfVxuICB9XG5cblxuICByZWxvYWQoKSB7XG4gICAgdGhpcy5sb2dpbkhpc3RvcnlMaXN0ID0gW107XG4gICAgdGhpcy5wYWdlRXZlbnQgPSB7IHBhZ2U6IDEsIHBlclBhZ2U6IDI1LCBsYXN0UGFnZTogMSB9O1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGEoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIC8vVW50aWwgZGVzdHJveWVkIHVzZXMgaXRcbiAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { LoginHistoryForUserRoutingModule } from './login-history-for-user-routing.module';
|
|
4
|
+
import { LoginHistoryForUserComponent } from './login-history-for-user.component';
|
|
5
|
+
import { InfiniteScrollModule } from 'ngx-infinite-scroll';
|
|
6
|
+
import { FlexLayoutModule } from '@angular/flex-layout';
|
|
7
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
8
|
+
import { MaterialModule } from '../material.module';
|
|
9
|
+
import { TimelineFilterModule } from '../timeline-filter/timeline-filter.module';
|
|
10
|
+
export class LoginHistoryForUserModule {
|
|
11
|
+
}
|
|
12
|
+
LoginHistoryForUserModule.decorators = [
|
|
13
|
+
{ type: NgModule, args: [{
|
|
14
|
+
declarations: [LoginHistoryForUserComponent],
|
|
15
|
+
imports: [
|
|
16
|
+
CommonModule,
|
|
17
|
+
LoginHistoryForUserRoutingModule,
|
|
18
|
+
InfiniteScrollModule,
|
|
19
|
+
MaterialModule,
|
|
20
|
+
FlexLayoutModule,
|
|
21
|
+
ReactiveFormsModule,
|
|
22
|
+
TimelineFilterModule
|
|
23
|
+
],
|
|
24
|
+
exports: [LoginHistoryForUserComponent]
|
|
25
|
+
},] }
|
|
26
|
+
];
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4taGlzdG9yeS1mb3ItdXNlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2xvZ2luLWhpc3RvcnktZm9yLXVzZXIvbG9naW4taGlzdG9yeS1mb3ItdXNlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBZ0JqRixNQUFNLE9BQU8seUJBQXlCOzs7WUFickMsUUFBUSxTQUFDO2dCQUNSLFlBQVksRUFBRSxDQUFDLDRCQUE0QixDQUFDO2dCQUM1QyxPQUFPLEVBQUU7b0JBQ1AsWUFBWTtvQkFDWixnQ0FBZ0M7b0JBQ2hDLG9CQUFvQjtvQkFDcEIsY0FBYztvQkFDZCxnQkFBZ0I7b0JBQ2hCLG1CQUFtQjtvQkFDbkIsb0JBQW9CO2lCQUNyQjtnQkFDRCxPQUFPLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQzthQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBMb2dpbkhpc3RvcnlGb3JVc2VyUm91dGluZ01vZHVsZSB9IGZyb20gJy4vbG9naW4taGlzdG9yeS1mb3ItdXNlci1yb3V0aW5nLm1vZHVsZSc7XG5pbXBvcnQgeyBMb2dpbkhpc3RvcnlGb3JVc2VyQ29tcG9uZW50IH0gZnJvbSAnLi9sb2dpbi1oaXN0b3J5LWZvci11c2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbmZpbml0ZVNjcm9sbE1vZHVsZSB9IGZyb20gJ25neC1pbmZpbml0ZS1zY3JvbGwnO1xuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0JztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRlcmlhbE1vZHVsZSB9IGZyb20gJy4uL21hdGVyaWFsLm1vZHVsZSc7XG5pbXBvcnQgeyBUaW1lbGluZUZpbHRlck1vZHVsZSB9IGZyb20gJy4uL3RpbWVsaW5lLWZpbHRlci90aW1lbGluZS1maWx0ZXIubW9kdWxlJztcblxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtMb2dpbkhpc3RvcnlGb3JVc2VyQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMb2dpbkhpc3RvcnlGb3JVc2VyUm91dGluZ01vZHVsZSxcbiAgICBJbmZpbml0ZVNjcm9sbE1vZHVsZSxcbiAgICBNYXRlcmlhbE1vZHVsZSxcbiAgICBGbGV4TGF5b3V0TW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVGltZWxpbmVGaWx0ZXJNb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW0xvZ2luSGlzdG9yeUZvclVzZXJDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIExvZ2luSGlzdG9yeUZvclVzZXJNb2R1bGUgeyB9XG4iXX0=
|