From eae09d963c31719f90d26ef5a0fc7d21b354e09c Mon Sep 17 00:00:00 2001 From: Zhiqiang Feng Date: Sat, 4 Jul 2026 03:24:03 -0700 Subject: [PATCH 1/9] update angular from v12 to v22 --- desktop/definitions/missing-defs.d.ts | 3 + desktop/package-lock.json | 939 ++++++++++-------- desktop/package.json | 32 +- .../compiler/dev-translations-loader.ts | 2 +- desktop/src/@batch-flask/core/dynamic-form.ts | 4 +- .../core/html-util/focus-helper.spec.ts | 1 + .../@batch-flask/core/list/selectable-list.ts | 2 +- .../core/testing/i18n-testing.module.ts | 1 - .../testing/mock-control-value-accessor.ts | 1 + .../@batch-flask/extensions/angular/forms.ts | 41 - desktop/src/@batch-flask/extensions/index.ts | 1 - .../ui/abstract-list/abstract-list-base.ts | 2 +- .../ui/abstract-list/abstract-list.module.ts | 1 - .../ui/abstract-list/list-base.component.ts | 2 +- .../partial-sort-warning.component.spec.ts | 1 + .../partial-sort-warning.component.ts | 1 + ...vity-monitor-footer-item.component.spec.ts | 1 + .../activity-monitor-footer-item.component.ts | 1 + .../activity-monitor-footer.component.ts | 1 + .../activity-monitor-item-action.component.ts | 1 + .../activity-monitor-item.component.spec.ts | 1 + .../activity-monitor-item.component.ts | 1 + ...tivity-monitor-tree-view.component.spec.ts | 1 + .../activity-monitor-tree-view.component.ts | 1 + .../activity-monitor.component.ts | 1 + .../advanced-filter.component.ts | 1 + .../advanced-filter/advanced-filter.module.ts | 2 - .../ui/advanced-filter/advanced-filter.ts | 8 +- .../ui/advanced-filter/control-base.ts | 4 +- .../list-filter-control.ts | 11 +- .../result-picker-control.ts | 9 +- .../state-picker-control.ts | 9 +- .../auto-focus/auto-focus.directive.spec.ts | 1 + .../ui/auto-focus/auto-focus.directive.ts | 1 + .../ui/auto-focus/auto-focus.module.ts | 1 - .../ui/banner/banner.component.spec.ts | 1 + .../ui/banner/banner.component.ts | 2 + desktop/src/@batch-flask/ui/batchui.module.ts | 3 - .../breadcrumb-group.component.ts | 1 + .../breadcrumbs/breadcrumb-link.directive.ts | 1 + .../breadcrumb/breadcrumb.component.ts | 1 + ...browse-layout-advanced-filter.directive.ts | 1 + .../browse-layout-list.directive.ts | 1 + .../browse-layout.component.spec.ts | 2 + .../browse-layout/browse-layout.component.ts | 5 +- .../toggle-filter-button.component.spec.ts | 1 + .../toggle-filter-button.component.ts | 1 + .../ui/buttons/button-group.component.ts | 1 + .../ui/buttons/button.component.spec.ts | 1 + .../ui/buttons/button.component.ts | 1 + .../ui/buttons/buttons.component.ts | 5 +- .../@batch-flask/ui/buttons/buttons.module.ts | 1 - .../clickable/clickable.component.spec.ts | 2 + .../buttons/clickable/clickable.component.ts | 3 +- .../ui/buttons/directory-picker.component.ts | 1 + .../refresh-btn/refresh-btn.component.ts | 1 + .../ui/callout/callout.component.ts | 1 + .../ui/callout/callout.directive.spec.ts | 1 + .../ui/callout/callout.directive.ts | 7 +- .../@batch-flask/ui/callout/callout.module.ts | 1 - .../@batch-flask/ui/card/card.component.ts | 1 + .../src/@batch-flask/ui/card/card.module.ts | 1 - .../@batch-flask/ui/charts/chart.directive.ts | 5 +- .../ui/copyable/copyable.directive.spec.ts | 1 + .../ui/copyable/copyable.directive.ts | 3 +- .../ui/date/date.component.spec.ts | 1 + .../@batch-flask/ui/date/date.component.ts | 1 + .../src/@batch-flask/ui/date/date.module.ts | 1 - .../datetime-picker.component.spec.ts | 7 +- .../datetime-picker.component.ts | 9 +- .../datetime-picker/datetime-picker.module.ts | 1 - .../dialogs/confirmation-dialog.component.ts | 1 + .../ui/dialogs/confirmation-dialog.ts | 2 +- .../@batch-flask/ui/dialogs/dialogs.module.ts | 4 - .../dialogs/prompt/prompt-dialog.component.ts | 9 +- .../ui/dropdown/dropdown.component.spec.ts | 4 +- .../ui/dropdown/dropdown.component.ts | 1 + .../duration-picker.component.spec.ts | 9 +- .../duration-picker.component.ts | 1 + .../duration-picker/duration-picker.module.ts | 1 - .../ui/editor/editor.component.ts | 3 +- .../entity-command-button.component.spec.ts | 1 + .../button/entity-command-button.component.ts | 1 + .../entity-commands-list.component.ts | 1 + .../entity-commands-list.module.ts | 1 - .../ui/entity-commands/entity-command.spec.ts | 2 +- .../download-folder-dialog.component.ts | 9 +- .../file-explorer-tabs.component.spec.ts | 1 + .../file-explorer-tabs.component.ts | 1 + .../file-explorer/file-explorer.component.ts | 1 + .../file-path-navigator.component.spec.ts | 4 +- .../file-path-navigator.component.ts | 5 +- .../file-table-view.component.ts | 1 + .../file-tree-view-row.component.ts | 1 + .../file-tree-view.component.spec.ts | 1 + .../file-tree-view.component.ts | 1 + .../file-dialog-viewer.component.ts | 1 + .../file-too-large.component.ts | 1 + .../file-viewer-container.component.spec.ts | 2 +- .../file-viewer-container.component.ts | 6 +- .../file-viewer-header.component.spec.ts | 1 + .../file-viewer-header.component.ts | 1 + .../ui/file/file-viewer/file-viewer.module.ts | 6 - .../file-viewer/file-viewer/file-viewer.ts | 2 +- .../image-file-viewer.component.spec.ts | 1 + .../image-file-viewer.component.ts | 1 + .../log-file-viewer.component.spec.ts | 1 + .../log-file-viewer.component.ts | 1 + .../text-file-viewer.component.spec.ts | 1 + .../text-file-viewer.component.ts | 1 + .../src/@batch-flask/ui/file/file.module.ts | 3 - .../focus-section/focus-section.component.ts | 1 + .../complex-form.component.spec.ts | 7 +- .../complex-form/complex-form.component.ts | 5 +- .../footer/form-footer.component.ts | 5 +- .../editable-table-column.component.ts | 1 + .../editable-table.component.spec.ts | 5 +- .../editable-table.component.ts | 21 +- .../editable-table/editable-table.module.ts | 1 - .../editable-table-select-cell.component.ts | 5 +- .../expanding-textarea.component.ts | 1 + desktop/src/@batch-flask/ui/form/form-base.ts | 6 +- .../form-error/form-error.component.spec.ts | 7 +- .../form/form-error/form-error.component.ts | 5 +- .../form-field/form-field.component.spec.ts | 5 +- .../form/form-field/form-field.component.ts | 1 + .../form/form-field/form-field.directive.ts | 2 + .../form-json-editor.component.ts | 5 +- .../ui/form/form-page/form-page.component.ts | 1 + .../form-multi-picker.component.ts | 8 +- .../form/form-picker/form-picker.component.ts | 7 +- .../form-section/form-section.component.ts | 1 + .../ui/form/hint/hint.component.spec.ts | 1 + .../ui/form/hint/hint.component.ts | 1 + .../ui/form/input/input.directive.spec.ts | 10 +- .../ui/form/input/input.directive.ts | 9 +- .../key-value-picker.component.ts | 9 +- .../simple-form/simple-form.component.spec.ts | 7 +- .../form/simple-form/simple-form.component.ts | 5 +- .../single-line-textarea.directive.ts | 1 + .../slide-toggle/slide-toggle.component.ts | 3 +- .../ui/graphs/gauge/gauge.component.spec.ts | 1 + .../ui/graphs/gauge/gauge.component.ts | 1 + .../@batch-flask/ui/i18n/i18n-ui.module.ts | 1 - .../ui/i18n/i18n.component.spec.ts | 2 + .../@batch-flask/ui/i18n/i18n.component.ts | 2 + .../@batch-flask/ui/i18n/i18n.pipe.spec.ts | 3 + desktop/src/@batch-flask/ui/i18n/i18n.pipe.ts | 1 + .../@batch-flask/ui/icon/icon.component.ts | 1 + .../ui/info-box/info-box.component.ts | 1 + .../ui/info-box/info-box.module.ts | 1 - .../keybinding-picker-dialog.component.ts | 5 +- .../keybindings-listener.directive.ts | 1 + .../keybindings/keybindings.component.spec.ts | 1 + .../ui/keybindings/keybindings.component.ts | 5 +- .../ui/keybindings/keybindings.module.ts | 1 - .../entity-details-list.component.ts | 5 +- .../ui/loading/loading.component.ts | 1 + .../ui/loading/simple-loading.component.ts | 1 + .../metrics-monitor-metric.component.ts | 1 + .../metrics-monitor.component.ts | 1 + ...sisted-notifications-dropdown.component.ts | 1 + .../toast/toast.component.spec.ts | 1 + .../ui/notifications/toast/toast.component.ts | 3 +- .../toasts-container.component.ts | 1 + .../toasts-container/toasts-container.spec.ts | 1 + .../bool-property/bool-property.component.ts | 1 + .../date-property.component.spec.ts | 3 +- .../date-property/date-property.component.ts | 1 + .../entity-configuration.component.ts | 1 + .../link-property/link-property.component.ts | 1 + .../property-content.component.ts | 1 + .../property-field.component.ts | 1 + .../property-group.component.spec.ts | 1 + .../property-group.component.ts | 1 + .../property-list/property-list.component.ts | 1 + .../ui/property-list/property-list.module.ts | 1 - .../table-property.component.spec.ts | 1 + .../table-property.component.ts | 7 +- .../text-property.component.spec.ts | 1 + .../text-property/text-property.component.ts | 1 + .../ui/quick-list/no-item.component.ts | 1 + .../quick-list-item-status.component.ts | 1 + .../quick-list-row-def/quick-list-row-def.ts | 4 + .../quick-list-row-render.component.ts | 1 + .../quick-list/quick-list.component.spec.ts | 1 + .../ui/quick-list/quick-list.component.ts | 1 + .../quota-display/quota-display.component.ts | 1 + .../ui/scrollable/scrollable.component.ts | 3 +- .../ui/select/option-template.directive.ts | 1 + .../ui/select/option/option.component.ts | 1 + .../select-dropdown.component.ts | 1 + .../ui/select/select.component.spec.ts | 9 +- .../ui/select/select.component.ts | 9 +- .../@batch-flask/ui/select/select.module.ts | 1 - .../server-error.component.spec.ts | 1 + .../ui/server-error/server-error.component.ts | 1 + .../ui/server-error/server-error.module.ts | 1 - .../sidebar-bookmarks.component.ts | 1 + .../sidebar-content.component.ts | 5 +- .../sidebar-content/sidebar-content.html | 2 +- .../@batch-flask/ui/sidebar/sidebar-page.ts | 9 +- .../ui/sidebar/sidebar-spec-helper.spec.ts | 3 +- .../@batch-flask/ui/sidebar/sidebar.module.ts | 3 - .../simple-dialog/simple-dialog.component.ts | 1 + .../split-pane/split-pane.component.spec.ts | 1 + .../ui/split-pane/split-pane.component.ts | 1 + .../split-separator.component.ts | 1 + .../ui/summary-card/summary-card.component.ts | 1 + .../table-cell-def.directive.ts | 1 + .../table-column/table-column.component.ts | 1 + .../table-head-cell-def.directive.ts | 1 + .../table-head-cell.component.ts | 1 + .../table/table-head/table-head.component.ts | 1 + .../table-row-render.component.ts | 1 + .../ui/table/table.component.spec.ts | 6 +- .../@batch-flask/ui/table/table.component.ts | 1 + .../ui/tabs/tab-group.component.ts | 1 + .../src/@batch-flask/ui/tabs/tab.component.ts | 2 + desktop/src/@batch-flask/ui/tabs/tabs.spec.ts | 1 + .../ui/tags/tag-list/tag-list.component.ts | 1 + .../ui/tags/tags.component.spec.ts | 1 + .../@batch-flask/ui/tags/tags.component.ts | 1 + .../testing/editor/editor.testing.module.ts | 1 + .../virtual-scroll.testing.module.ts | 2 + .../time-range-picker.component.spec.ts | 6 +- .../time-range-picker.component.ts | 9 +- .../time-range-picker.module.ts | 1 - .../ui/timespan/timespan.component.spec.ts | 1 + .../ui/timespan/timespan.component.ts | 1 + .../ui/toolbar/toolbar.component.ts | 1 + .../@batch-flask/ui/toolbar/toolbar.module.ts | 1 - .../validation/range-validator.directive.ts | 6 +- .../virtual-scroll-row.directive.ts | 1 + .../virtual-scroll-tail.component.ts | 1 + .../virtual-scroll.component.spec.ts | 1 + .../virtual-scroll.component.ts | 3 +- .../ui/vtabs/vtab-group.component.spec.ts | 1 + .../ui/vtabs/vtab-group.component.ts | 1 + .../@batch-flask/ui/vtabs/vtab.component.ts | 1 + .../ui/workspace/feature-visible.directive.ts | 1 + .../utils/form-utils/form-utils.spec.ts | 22 +- .../utils/form-utils/form-utils.ts | 6 +- .../@batch-flask/utils/logging/node-logger.ts | 2 +- .../src/@batch-flask/utils/validators/json.ts | 4 +- .../utils/validators/number/number.spec.ts | 40 +- desktop/src/app/app.component.ts | 1 + desktop/src/app/app.module.ts | 4 - .../app/components/account/account.module.ts | 7 - .../add/add-local-batch-account.component.ts | 7 +- .../add/edit-local-batch-account.component.ts | 7 +- .../batch-account-create.component.spec.ts | 4 +- .../create/batch-account-create.component.ts | 13 +- .../delete/delete-account-dialog.component.ts | 1 + .../edit-storage-account-form.component.ts | 5 +- ...o-storage-account-picker.component.spec.ts | 1 + .../auto-storage-account-picker.component.ts | 5 +- .../browse/account-dropdown.component.ts | 1 + .../account-list/account-list.component.ts | 1 + .../account-cost-card.component.spec.ts | 2 + .../account-cost-card.component.ts | 5 +- .../details/account-default.component.ts | 1 + .../details/account-details.component.ts | 1 + .../account-monitoring-section.component.ts | 11 +- .../account-quotas-card.component.ts | 1 + .../account-summary-card.component.spec.ts | 3 + .../account-summary-card.component.ts | 1 + .../getting-started-card.component.ts | 1 + .../aad-app-picker.component.ts | 1 + .../aad-app-secret-picker.component.ts | 7 +- .../aad-credentials-picker.component.ts | 1 + .../create-new-aad-app.component.ts | 7 +- .../generate-aad-app-secret.component.ts | 5 +- ...source-permission-button.component.spec.ts | 1 + .../resource-permission-button.component.ts | 1 + .../programmatic-usage.component.ts | 1 + .../programmatic-usage.module.ts | 3 - .../programming-sample.component.spec.ts | 1 + .../programming-sample.component.ts | 1 + .../storage-account-card.component.spec.ts | 1 + .../storage-account-card.component.ts | 1 + .../account/home/account-home.component.ts | 5 +- .../account-monitoring-home.component.ts | 11 +- .../monitoring/account-monitoring.module.ts | 3 - .../monitor-chart.component.spec.ts | 1 + .../monitor-chart/monitor-chart.component.ts | 1 + ...pplication-create-dialog.component.spec.ts | 4 +- .../application-create-dialog.component.ts | 7 +- .../application-edit-dialog.component.spec.ts | 4 +- .../edit/application-edit-dialog.component.ts | 7 +- .../application/application.module.ts | 4 - .../browse/application-list.component.ts | 1 + .../application-preview.component.spec.ts | 1 + .../preview/application-preview.component.ts | 1 + .../details/application-default.component.ts | 1 + .../application-details.component.spec.ts | 3 + .../details/application-details.component.ts | 1 + ...pplication-package-table.component.spec.ts | 1 + .../application-package-table.component.ts | 1 + .../application-packages.component.spec.ts | 2 + .../details/application-packages.component.ts | 1 + .../application-configuration.component.ts | 1 + ...pplication-error-display.component.spec.ts | 1 + .../application-error-display.component.ts | 1 + .../home/application-home.component.ts | 5 +- .../auth-overlay/auth-overlay.component.ts | 1 + .../external-browser-auth-toggle.component.ts | 1 + .../add/add-certificate-form.component.ts | 9 +- .../action/certificate-action.module.ts | 1 - ...reactivate-certificate-dialog.component.ts | 1 + .../browse/certificate-list.component.spec.ts | 1 + .../browse/certificate-list.component.ts | 5 +- .../certificate-advanced-filter.component.ts | 1 + .../certificate/certificate.module.ts | 2 - .../certificate-configuration.component.ts | 1 + .../details/certificate-default.component.ts | 1 + .../details/certificate-details.component.ts | 1 + .../home/certificate-home.component.ts | 7 +- .../blob-container-picker.component.ts | 7 +- .../blob-container-picker.module.ts | 1 - .../app/components/common/common.module.ts | 1 - .../edit-metadata-form.component.ts | 5 +- .../guards/hidden-navigation.directive.ts | 1 + .../select-account-dialog.component.ts | 1 + .../select-account-dialog.module.ts | 1 - .../inline-quota/inline-quota.component.ts | 1 + .../location-picker.component.spec.ts | 5 +- .../location-picker.component.ts | 5 +- .../location-picker/location-picker.module.ts | 1 - .../location/location.component.spec.ts | 1 + .../common/location/location.component.ts | 1 + .../common/location/location.module.ts | 1 - .../react-action-form.component.spec.ts | 1 + .../react-action-form.component.ts | 1 + .../react-container.component.ts | 1 + ...esource-files-properties.component.spec.ts | 1 + .../resource-files-properties.component.ts | 1 + .../resource-files-properties.module.ts | 1 - ...cefile-cloud-file-dialog.component.spec.ts | 3 + ...esourcefile-cloud-file-dialog.component.ts | 7 +- ...resourcefile-container-source.component.ts | 1 + .../resourcefile-picker-row.component.ts | 13 +- .../resourcefile-picker.component.spec.ts | 5 +- .../resourcefile-picker.component.ts | 15 +- .../resourcefile-picker.module.ts | 1 - .../storage-account-picker.component.spec.ts | 5 +- .../storage-account-picker.component.ts | 1 + .../storage-account-picker.module.ts | 1 - .../subscription-picker.component.spec.ts | 5 +- .../subscription-picker.component.ts | 7 +- .../add/file-group-create-form.component.ts | 7 +- .../action/add/file-group-create.module.ts | 1 - .../file-group-options-picker.component.ts | 15 +- .../delete-container-dialog.component.ts | 1 + .../browse/data-container-list.component.ts | 1 + .../src/app/components/data/data.module.ts | 3 - .../data-container-configuration.component.ts | 1 + .../details/data-container-files.component.ts | 1 + .../data/details/data-default.component.ts | 1 + .../data/details/data-details.component.ts | 1 + .../data/home/data-home.component.ts | 7 +- .../cloud-file-picker-dialog.component.ts | 1 + .../cloud-file-picker.component.ts | 7 +- .../data/shared/data.shared.module.ts | 1 - .../storage-error-display.component.spec.ts | 1 + .../errors/storage-error-display.component.ts | 1 + .../file-group-picker.component.spec.ts | 5 +- .../file-group-picker.component.ts | 7 +- .../file-group-sas.component.ts | 7 +- .../file-groups-picker.component.ts | 9 +- ...file-or-directory-picker.component.spec.ts | 5 +- .../file-or-directory-picker.component.ts | 13 +- .../file-or-directory-picker.module.ts | 1 - .../shared/job-id/job-id.component.spec.ts | 5 +- .../data/shared/job-id/job-id.component.ts | 13 +- .../blob-files-browser.component.ts | 1 + .../blob-files-browser.module.ts | 1 - .../file/browse/node-file-browse.component.ts | 1 + .../src/app/components/file/file.module.ts | 2 - ...-schedule-create-basic-dialog.component.ts | 7 +- ...ob-schedule-job-specification.component.ts | 15 +- .../add/patch-job-schedule-form.component.ts | 5 +- .../delete-job-schedule-dialog.component.ts | 1 + .../disable-job-schedule-dialog.component.ts | 1 + .../enable-job-schedule-dialog.component.ts | 1 + .../action/job-schedule-action.module.ts | 4 - ...terminate-job-schedule-dialog.component.ts | 1 + .../job-schedule-advanced-filter.component.ts | 1 + .../browse/job-schedule-list.component.ts | 5 +- .../job-schedule-autopool.component.spec.ts | 1 + .../job-schedule-autopool.component.ts | 1 + .../job-schedule-configuration.component.ts | 1 + .../details/job-schedule-default.component.ts | 1 + .../details/job-schedule-details.component.ts | 1 + ...hedule-job-specification.component.spec.ts | 1 + ...ob-schedule-job-specification.component.ts | 1 + .../home/job-schedule-home.component.ts | 7 +- .../job-schedule/job-schedule.module.ts | 2 - .../action/add/add-job-form.component.spec.ts | 4 +- .../job/action/add/add-job-form.component.ts | 7 +- .../add/job-manager-task-picker.component.ts | 5 +- .../job-preparation-task-picker.component.ts | 5 +- .../add/job-release-task-picker.component.ts | 5 +- .../job/action/add/job-task-base.component.ts | 16 +- .../action/add/patch-job-form.component.ts | 5 +- .../pool-picker/pool-picker.component.spec.ts | 8 +- .../add/pool-picker/pool-picker.component.ts | 9 +- .../disable/disable-job-button.component.ts | 1 + .../disable/disable-job-dialog.component.ts | 1 + .../enable/enable-job-button.component.ts | 1 + .../job/action/job-action.module.ts | 3 - .../components/job/base/job-base.module.ts | 1 - .../job-state/job-state.component.spec.ts | 1 + .../job/base/job-state/job-state.component.ts | 1 + .../filter/job-advanced-filter.component.ts | 1 + .../job/browse/job-list.component.ts | 5 +- .../job-error-display.component.spec.ts | 1 + .../job-error-display.component.ts | 1 + .../details/job-configuration.component.ts | 1 + .../job/details/job-default.component.ts | 1 + .../job/details/job-details.component.ts | 1 + .../job-progress-status.component.spec.ts | 1 + .../job-progress-status.component.ts | 1 + .../all-job-graphs-home.component.ts | 5 +- .../jobs-bar-chart.component.ts | 1 + .../jobs-cpu-wait-time-graph.component.ts | 1 + .../jobs-running-time-graph.component.ts | 1 + .../job-graphs-home.component.ts | 1 + .../job-progress-graph.component.ts | 1 + .../task-running-time-graph.component.spec.ts | 1 + .../tasks-running-time-graph.component.ts | 7 +- .../components/job/home/job-home.component.ts | 7 +- .../job-hook-task-browser.component.ts | 5 +- .../job-hook-task-details.component.ts | 1 + .../job/job-hook-task/job-hook-task.module.ts | 2 - desktop/src/app/components/job/job.module.ts | 2 - .../layout/footer/footer.component.ts | 1 + .../timezone-dropdown.component.spec.ts | 3 +- .../timezone-dropdown.component.ts | 1 + .../version-type.component.spec.ts | 1 + .../version-channel/version-type.component.ts | 1 + .../layout/header/header.component.spec.ts | 1 + .../layout/header/header.component.ts | 1 + .../main-navigation.component.ts | 1 + .../profile-button.component.spec.ts | 1 + .../profile-button.component.ts | 1 + .../online-status.component.spec.ts | 1 + .../online-status/online-status.component.ts | 1 + .../pinned-dropdown.component.spec.ts | 1 + .../pinned-dropdown.component.ts | 1 + .../src/app/components/misc/misc.module.ts | 4 - .../playground-route.component.ts | 1 + .../theme-colors/theme-colors.component.ts | 1 + .../node/action/node-action.module.ts | 3 - .../upload-node-logs-dialog.component.ts | 7 +- .../display/node-list-display.component.ts | 1 + .../filter/node-advanced-filter.component.ts | 1 + .../node/browse/node-list.component.ts | 1 + .../connect/node-connect.component.spec.ts | 1 + .../node/connect/node-connect.component.ts | 1 + .../node/connect/node-connect.module.ts | 4 - .../node-property-display.component.spec.ts | 5 +- .../node-property-display.component.ts | 1 + .../ssh-key-picker-dialog.component.ts | 5 +- .../ssh-key-picker.component.spec.ts | 5 +- .../ssh-key-picker.component.ts | 7 +- .../node-configuration.component.spec.ts | 1 + .../node-configuration.component.ts | 1 + .../error/node-error-display.component.ts | 1 + .../start-task-error-display.component.ts | 1 + .../node/details/node-default.component.ts | 1 + .../node/details/node-details.component.ts | 1 + .../node/home/node-home.component.ts | 1 + .../src/app/components/node/node.module.ts | 2 - ...ner-configuration-picker.component.spec.ts | 5 +- ...ontainer-configuration-picker.component.ts | 13 +- .../container-configuration-picker.module.ts | 1 - .../container-images-picker.component.ts | 9 +- .../container-registry-picker.component.ts | 9 +- .../data-disk-picker.component.spec.ts | 5 +- .../data-disk-picker.component.ts | 5 +- .../os-image-picker.component.spec.ts | 10 +- .../os-image-picker.component.ts | 5 +- .../os-offer-tile/os-offer-tile.component.ts | 1 + .../add/os-picker/pool-os-picker.component.ts | 9 +- .../add/os-picker/pool-os-picker.module.ts | 1 - .../sig-image-picker.component.spec.ts | 5 +- .../sig-image-picker.component.ts | 11 +- .../add/pool-create-basic-dialog.component.ts | 7 +- .../vm-size-picker-filter.component.spec.ts | 5 +- .../vm-size-picker-filter.component.ts | 7 +- .../vm-size-picker.component.spec.ts | 1 + .../vm-size-picker.component.ts | 7 +- .../delete/delete-pool-dialog.component.ts | 1 + .../edit-app-package-form.component.spec.ts | 1 + .../edit-app-package-form.component.ts | 5 +- ...tificate-references-form.component.spec.ts | 1 + ...t-certificate-references-form.component.ts | 5 +- .../edit-node-comms-form.component.ts | 1 + .../pool/action/edit/edit-pool.module.ts | 1 - .../pool-resize-dialog.component.spec.ts | 2 + .../resize/pool-resize-dialog.component.ts | 11 +- ...autoscale-formula-picker.component.spec.ts | 5 +- .../autoscale-formula-picker.component.ts | 5 +- .../autoscale-formula-picker.module.ts | 1 - ...aluate-autoscale-formula.component.spec.ts | 1 + .../evaluate-autoscale-formula.component.ts | 1 + ...allocation-option-picker.component.spec.ts | 5 +- .../deallocation-option-picker.component.ts | 9 +- .../pool-scale-picker.component.spec.ts | 6 +- .../pool-scale-picker.component.ts | 17 +- .../app-package-picker.component.spec.ts | 7 +- .../app-package-picker.component.ts | 9 +- .../certificate-picker.component.ts | 9 +- ...ficate-references-picker.component.spec.ts | 5 +- ...certificate-references-picker.component.ts | 10 +- .../base/pool-nodes-preview.component.spec.ts | 1 + .../pool/base/pool-nodes-preview.component.ts | 1 + .../pool-os-icon.component.spec.ts | 1 + .../pool-os-icon/pool-os-icon.component.ts | 1 + .../filter/pool-advanced-filter.component.ts | 1 + .../pool/browse/pool-list.component.ts | 1 + .../pool-configuration.component.spec.ts | 1 + .../pool-configuration.component.ts | 1 + .../pool-error-display.component.spec.ts | 3 +- .../pool-error-display.component.ts | 1 + .../pool-cost-card.component.spec.ts | 2 + .../pool-cost-card.component.ts | 5 +- .../pool/details/pool-default.component.ts | 1 + .../pool/details/pool-details.component.ts | 1 + .../legend/nodes-heatmap-legend.component.ts | 1 + .../heatmap/nodes-heatmap.component.spec.ts | 1 + .../graphs/heatmap/nodes-heatmap.component.ts | 3 +- .../history-graph/history-graph.component.ts | 1 + .../cpu-usage/cpu-usage-graph.component.ts | 1 + .../disk-io/disk-io-graph.component.ts | 1 + .../disk-usage/disk-usage-graph.component.ts | 1 + .../enable-app-insights-doc.component.ts | 1 + .../gpu-memory-usage-graph.component.ts | 1 + .../gpu-usage/gpu-usage-graph.component.ts | 1 + .../memory-usage-graph.component.ts | 1 + .../network-usage-graph.component.ts | 1 + .../performance-graph.component.ts | 1 + .../pool/graphs/pool-graphs.component.ts | 5 +- .../pool-state-graph.component.spec.ts | 1 + .../pool-state-graph.component.ts | 1 + .../pool-standalone-graphs.component.ts | 1 + .../pool/home/pool-home.component.ts | 1 + .../inbound-nat-pool-picker.component.ts | 9 +- .../network-configuration.module.ts | 1 - .../network-security-group-rules.component.ts | 9 +- .../pool-endpoint-helper.ts | 12 +- .../virtual-network-picker.component.spec.ts | 5 +- .../virtual-network-picker.component.ts | 7 +- .../src/app/components/pool/pool.module.ts | 5 - .../start-task-edit-form.component.ts | 7 +- .../start-task-picker.component.spec.ts | 10 +- .../start-task/start-task-picker.component.ts | 9 +- .../pool/start-task/start-task.module.ts | 1 - .../user-account-picker.component.ts | 9 +- .../user-accounts-picker.component.spec.ts | 5 +- .../user-accounts-picker.component.ts | 9 +- .../user-accounts-picker.module.ts | 1 - .../auth-settings/auth-settings.component.ts | 1 + .../settings/settings.component.spec.ts | 1 + .../components/settings/settings.component.ts | 7 +- .../action/add/add-task-form.component.ts | 9 +- ...ulti-instance-settings-picker.component.ts | 7 +- .../multi-instance-settings-picker.spec.ts | 6 +- .../action/add/rerun-task-form.component.ts | 5 +- ...ontainer-settings-picker.component.spec.ts | 5 +- .../container-settings-picker.component.ts | 9 +- .../registry-picker.component.ts | 9 +- .../task-state/task-state.component.spec.ts | 1 + .../base/task-state/task-state.component.ts | 1 + .../user-identity-picker.component.spec.ts | 5 +- .../user-identity-picker.component.ts | 7 +- .../filter/task-advanced-filter.component.ts | 1 + .../browse/preview/task-preview.component.ts | 1 + .../browse/preview/task-runtime.component.ts | 1 + .../task/browse/task-list.component.ts | 1 + .../task-configuration.component.ts | 1 + .../output/task-outputs.component.spec.ts | 1 + .../details/output/task-outputs.component.ts | 1 + .../sub-tasks/list/sub-task-list.component.ts | 1 + .../sub-task-properties.component.spec.ts | 1 + .../sub-task-properties.component.ts | 1 + .../sub-tasks/sub-tasks-browser.component.ts | 1 + .../task/details/task-default.component.ts | 1 + .../task-dependency-browser.component.spec.ts | 1 + .../task-dependency-browser.component.ts | 1 + .../task/details/task-details.component.ts | 1 + .../task-error-display.component.spec.ts | 1 + .../details/task-error-display.component.ts | 1 + .../task-node-info.component.spec.ts | 1 + .../task-node-info.component.ts | 1 + .../task-timeline-state.component.spec.ts | 1 + .../task-timeline-state.component.ts | 1 + .../task-timeline.component.spec.ts | 1 + .../task-timeline/task-timeline.component.ts | 1 + .../task/home/task-home.component.ts | 7 +- .../src/app/components/task/task.module.ts | 4 - .../tenant-picker/tenant-card.component.ts | 1 + .../tenant-picker.component.spec.ts | 1 + .../tenant-picker/tenant-picker.component.ts | 5 +- .../components/welcome/welcome.component.ts | 1 + .../workspace-dropdown.component.spec.ts | 1 + .../workspace-dropdown.component.ts | 1 + desktop/src/app/polyfills.browser.ts | 2 +- .../certificate/certificate.service.spec.ts | 2 +- .../azure-batch/file/file.service.spec.ts | 2 +- .../job-schedule/job-schedule.service.spec.ts | 2 +- .../azure-batch/job/job.service.spec.ts | 2 +- .../node-user/node-user.service.spec.ts | 2 +- .../azure-batch/node/node.service.spec.ts | 2 +- .../azure-batch/pool/pool.service.spec.ts | 2 +- .../azure-batch/task/task.service.spec.ts | 2 +- .../router-telemetry.service.spec.ts | 2 + desktop/src/app/services/themes/theme-core.ts | 2 +- .../src/app/styles/vendor/material-theme.scss | 17 +- desktop/src/client/api/file/file-utils.ts | 2 +- desktop/src/client/startup.ts | 4 +- .../utils/helpers/form-control-validators.ts | 8 +- desktop/src/test/utils/index.ts | 33 + .../mocks/components/banner.component.mock.ts | 1 + .../components/complex-form.component.mock.ts | 2 + .../entity-details-list.component.mock.ts | 1 + .../mocks/components/gauge.component.mock.ts | 1 + .../components/info-box.component.mock.ts | 1 + .../components/loading.component.mock.ts | 1 + .../components/no-item.component.mock.ts | 1 + .../components/server-error.component.mock.ts | 1 + .../components/simple-form.component.mock.ts | 1 + desktop/test/app/memory-leak/mem-leak.spec.ts | 10 +- desktop/test/app/spec-imports.ts | 9 +- desktop/test/setup.ts | 33 + desktop/tsconfig.browser.json | 7 +- desktop/tsconfig.json | 4 +- desktop/tsconfig.node.json | 1 + util/bux/package-lock.json | 16 +- util/common-config/package-lock.json | 14 - 641 files changed, 1817 insertions(+), 1228 deletions(-) delete mode 100644 desktop/src/@batch-flask/extensions/angular/forms.ts diff --git a/desktop/definitions/missing-defs.d.ts b/desktop/definitions/missing-defs.d.ts index d36efc8c03..8addd3aa7d 100644 --- a/desktop/definitions/missing-defs.d.ts +++ b/desktop/definitions/missing-defs.d.ts @@ -1,4 +1,7 @@ /* eslint-disable @typescript-eslint/prefer-namespace-keyword */ +declare module "*.scss"; +declare module "*.css"; + declare module "element-resize-detector" { module ElementResizeDetectorMaker { diff --git a/desktop/package-lock.json b/desktop/package-lock.json index 141225de16..94426f951a 100644 --- a/desktop/package-lock.json +++ b/desktop/package-lock.json @@ -9,17 +9,17 @@ "version": "2.24.0", "license": "MIT", "dependencies": { - "@angular/animations": "^12.0.0", - "@angular/cdk": "^12.0.0", - "@angular/common": "^12.0.0", - "@angular/compiler": "^12.0.0", - "@angular/core": "^12.0.0", - "@angular/forms": "^12.0.0", - "@angular/material": "^12.0.0", - "@angular/platform-browser": "^12.0.0", - "@angular/platform-browser-dynamic": "^12.0.0", - "@angular/platform-server": "^12.0.0", - "@angular/router": "^12.0.0", + "@angular/animations": "^22.0.0", + "@angular/cdk": "^22.0.0", + "@angular/common": "^22.0.0", + "@angular/compiler": "^22.0.0", + "@angular/core": "^22.0.0", + "@angular/forms": "^22.0.0", + "@angular/material": "^22.0.0", + "@angular/platform-browser": "^22.0.0", + "@angular/platform-browser-dynamic": "^22.0.0", + "@angular/platform-server": "^22.0.0", + "@angular/router": "^22.0.0", "@azure/core-util": "1.9.1", "@azure/msal-node": "^2.15.0", "@azure/storage-blob": "^12.25.0", @@ -60,15 +60,15 @@ "winston-daily-rotate-file": "^3.10.0", "write-file-webpack-plugin": "^4.5.1", "xml2js": "^0.5.0", - "zone.js": "^0.11.4" + "zone.js": "~0.15.0" }, "devDependencies": { "@angular-eslint/eslint-plugin": "^13.2.1", "@angular-eslint/eslint-plugin-template": "^13.2.1", "@angular-eslint/template-parser": "^13.2.1", - "@angular/compiler-cli": "^12.0.0", + "@angular/compiler-cli": "^22.0.0", "@jsdevtools/coverage-istanbul-loader": "^3.0.5", - "@ngtools/webpack": "^12.0.0", + "@ngtools/webpack": "^22.0.0", "@playwright/test": "^1.43.1", "@types/chart.js": "^2.9.24", "@types/d3": "^7.4.0", @@ -79,7 +79,7 @@ "@types/jasmine": "^3.5.12", "@types/js-yaml": "^3.12.5", "@types/luxon": "^1.27.1", - "@types/node": "18.11.9", + "@types/node": "^20.0.0", "@types/proxyquire": "^1.3.28", "@types/strip-json-comments": "^0.0.30", "@types/tinycolor2": "^1.4.2", @@ -130,7 +130,7 @@ "to-string-loader": "^1.2.0", "ts-loader": "^9.4.4", "ts-node": "^10.9.1", - "typescript": "~4.6.0", + "typescript": "~6.0.0", "webpack": "^5.88.2", "webpack-cli": "^5.1.4", "webpack-dev-server": "^4.15.1", @@ -151,19 +151,6 @@ "tslib": "^2.6.2" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@angular-eslint/bundled-angular-compiler": { "version": "13.5.0", "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-13.5.0.tgz", @@ -229,158 +216,340 @@ } }, "node_modules/@angular/animations": { - "version": "12.2.17", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.2.17.tgz", - "integrity": "sha512-WVUcvKvr6wr9Nf3I2ksu5bFJ5xHhby4UEBTvOAdLpDqic+dzqtzVwAktDRprBSdxKQk1OlTw6jD4MsVEDKnZTg==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-22.0.4.tgz", + "integrity": "sha512-drb9ndon6J+t6Do72zdIRZWbmkaCovExXtvwY5f/4dTlXcvLCTPtf//02wn0fn6zq9oUUWISu6MHU9gZ6Cqwwg==", + "deprecated": "@angular/animations is deprecated. Use `animate.enter` and `animate.leave` instead. For more information see: https://v22.angular.dev/guide/animations.", + "license": "MIT", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/core": "12.2.17" + "@angular/core": "22.0.4" } }, "node_modules/@angular/cdk": { - "version": "12.2.13", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-12.2.13.tgz", - "integrity": "sha512-zSKRhECyFqhingIeyRInIyTvYErt4gWo+x5DQr0b7YLUbU8DZSwWnG4w76Ke2s4U8T7ry1jpJBHoX/e8YBpGMg==", + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-22.0.2.tgz", + "integrity": "sha512-3AOyLNIpvXkxbiCeUc4R5ubwCBpY83ZPe2I6Q/cTUW53SnFapEBNYZ2spSY+jPVY4IVPnQN1Tvjlzq6R9K4M3w==", + "license": "MIT", "dependencies": { - "tslib": "^2.2.0" - }, - "optionalDependencies": { - "parse5": "^5.0.0" + "parse5": "^8.0.0", + "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/common": "^12.0.0 || ^13.0.0-0", - "@angular/core": "^12.0.0 || ^13.0.0-0", - "rxjs": "^6.5.3 || ^7.0.0" + "@angular/common": "^22.0.0 || ^23.0.0", + "@angular/core": "^22.0.0 || ^23.0.0", + "@angular/platform-browser": "^22.0.0 || ^23.0.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/common": { - "version": "12.2.17", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.17.tgz", - "integrity": "sha512-/Rc83mzlL6YZScYTzg+Ng2hiCSf3jUVHAfQ8cyLOIMj/y8863Q+DMLVWW+ttvHwCjEFY44pC8IPyBl5FmSJYHg==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-22.0.4.tgz", + "integrity": "sha512-ibHINcvajoXfKfb4aGdLx8aOFkUOadAYF9/Yy4j2C1gQdLS6uXOCPFD9+W9zWf8OeMhL0H+i+5KeNlh6XbGaZw==", + "license": "MIT", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/core": "12.2.17", - "rxjs": "^6.5.3 || ^7.0.0" + "@angular/core": "22.0.4", + "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "12.2.17", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.17.tgz", - "integrity": "sha512-dxM1CxzvEJPk6ShJngkW5j5BejBloxQNi+fJi+F8P/GN/Rj7vJUf0JxL+TUt1+Iv575V4NidJDKKikk6K485CA==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-22.0.4.tgz", + "integrity": "sha512-PvbsPr3d0OHm90vgq1v+0oPP/oHNuCcZQAhhD3fhHlx3DTxf6nkjUqBulzdJ6d5QwDsy378pwf8+dpGquFzbGQ==", + "license": "MIT", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" } }, "node_modules/@angular/compiler-cli": { - "version": "12.2.17", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.2.17.tgz", - "integrity": "sha512-gJJlnDr8Fhs6z0hH0Y/5GC1YAgHY+sRh2BUrbDu+nIUubyyOVYSyQdL1jwEfCSIZl1GSg+4b4thU7pp7HtmX8g==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-22.0.4.tgz", + "integrity": "sha512-UmZRpw3pStRmH3ZOLg3BfyGaTxu/aqL00U1eoE3yfsUea25zJLU+gC4vx3NYtHzYKQu84wX3gTZXhLuuYYTa8w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.8.6", - "@babel/types": "^7.8.6", - "canonical-path": "1.0.0", - "chokidar": "^3.0.0", + "@babel/core": "7.29.7", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^5.0.0", "convert-source-map": "^1.5.1", - "dependency-graph": "^0.11.0", - "magic-string": "^0.25.0", - "minimist": "^1.2.0", - "reflect-metadata": "^0.1.2", + "reflect-metadata": "^0.2.0", "semver": "^7.0.0", - "source-map": "^0.6.1", - "sourcemap-codec": "^1.4.8", - "tslib": "^2.2.0", - "yargs": "^17.0.0" + "tslib": "^2.3.0", + "yargs": "^18.0.0" }, "bin": { - "ivy-ngcc": "ngcc/main-ivy-ngcc.js", - "ng-xi18n": "src/extract_i18n.js", - "ngc": "src/main.js", - "ngcc": "ngcc/main-ngcc.js" + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/compiler": "12.2.17", - "typescript": ">=4.2.3 <4.4" + "@angular/compiler": "22.0.4", + "typescript": ">=6.0 <6.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@angular/compiler-cli/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@angular/compiler-cli/node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular/compiler-cli/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@angular/compiler-cli/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular/compiler-cli/node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular/compiler-cli/node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@angular/compiler-cli/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/compiler-cli/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@angular/compiler-cli/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@angular/compiler-cli/node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/@angular/compiler-cli/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/@angular/core": { - "version": "12.2.17", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.17.tgz", - "integrity": "sha512-XUvTgU0D8XqNH5Y7UlTMk/XjUQaEGC0kZxhw/QSSQr65WrXtXmcD4d8Cg84TJ52uGXmf7IAruKvtbvu1Mbmvug==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-22.0.4.tgz", + "integrity": "sha512-QTGwZcnc6dBhGPMID8DvwRQdHMvpqV0vXDX8jSdmVDiWDsFUjbe9AUFTHEizDm+wnmxOrCQ0DHkgmHICuh0GpA==", + "license": "MIT", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "rxjs": "^6.5.3 || ^7.0.0", - "zone.js": "~0.11.4" + "@angular/compiler": "22.0.4", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0 || ~0.16.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } } }, "node_modules/@angular/forms": { - "version": "12.2.17", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.17.tgz", - "integrity": "sha512-iOIAz5OR6yLWuNTSOSDqAffQ0FU71yw1QsOmltU/hBsO6H6smsIKVe8VlFa4SnBSAyVZXf/OhDRJ8gOqQT09mw==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-22.0.4.tgz", + "integrity": "sha512-MId7Dcxl2/i/ztvf3sJggFBNOqR+btHfolEMRruqdD+o9b+eq/U3Yu0+4FQls1yJ84Lk75C5H6sN1Pc7kzNVgw==", + "license": "MIT", "dependencies": { - "tslib": "^2.2.0" + "@standard-schema/spec": "^1.0.0", + "tslib": "^2.3.0", + "zod": "^4.0.10" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/common": "12.2.17", - "@angular/core": "12.2.17", - "@angular/platform-browser": "12.2.17", - "rxjs": "^6.5.3 || ^7.0.0" + "@angular/common": "22.0.4", + "@angular/core": "22.0.4", + "@angular/platform-browser": "22.0.4", + "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/material": { - "version": "12.2.13", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-12.2.13.tgz", - "integrity": "sha512-6g2GyN4qp2D+DqY2AwrQuPB3cd9gybvQVXvNRbTPXEulHr+LgGei00ySdFHFp6RvdGSMZ4i3LM1Fq3VkFxhCfQ==", + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-22.0.2.tgz", + "integrity": "sha512-a2sp9ipozR4THqu5A3ff3VXBpbQHpfTmH+Oqb0+RD47fJ+/kvyBUZQ5JK2Yh6eUXVceAOW4s+sL0ev8tS1EfuQ==", + "license": "MIT", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/animations": "^12.0.0 || ^13.0.0-0", - "@angular/cdk": "12.2.13", - "@angular/common": "^12.0.0 || ^13.0.0-0", - "@angular/core": "^12.0.0 || ^13.0.0-0", - "@angular/forms": "^12.0.0 || ^13.0.0-0", - "rxjs": "^6.5.3 || ^7.0.0" + "@angular/cdk": "22.0.2", + "@angular/common": "^22.0.0 || ^23.0.0", + "@angular/core": "^22.0.0 || ^23.0.0", + "@angular/forms": "^22.0.0 || ^23.0.0", + "@angular/platform-browser": "^22.0.0 || ^23.0.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/platform-browser": { - "version": "12.2.17", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.17.tgz", - "integrity": "sha512-fxs0FDEnS9mzd36u0bHd6TbCvRC9pqK0YCWNnoLCf5ALQtyIL8CpgGNjOMnO8mCEl5l9QTFCDvKOn4V3p7E/dg==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-22.0.4.tgz", + "integrity": "sha512-lkl8ZIydRsMKb5PMIpVizKmOWzk7fQRmjQMjvLIW733M2OgpEpfYMohzsBVop6oaRImG6Row5uBBSu1j4adGzg==", + "license": "MIT", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/animations": "12.2.17", - "@angular/common": "12.2.17", - "@angular/core": "12.2.17" + "@angular/animations": "22.0.4", + "@angular/common": "22.0.4", + "@angular/core": "22.0.4" }, "peerDependenciesMeta": { "@angular/animations": { @@ -389,58 +558,60 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "12.2.17", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.17.tgz", - "integrity": "sha512-2v7R5l+4ULSNLviKVTHCqn6iNFgY1M/+HtM1ZcM72V4cVVsXqXUAh7WV4sk4l4ECsExKxQoc6JlVtPUub8cCKA==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-22.0.4.tgz", + "integrity": "sha512-AzXItNWzxLwKw/xST4TsB/HlPPe1i7OXvs+dGud3SYBlEMRiJFoz0BBQHNLM4aHmDgrTJFwSpzboG/Nub/ckFg==", + "deprecated": "@angular/platform-browser-dynamic is deprecated. Use `@angular/platform-browser` instead.", + "license": "MIT", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/common": "12.2.17", - "@angular/compiler": "12.2.17", - "@angular/core": "12.2.17", - "@angular/platform-browser": "12.2.17" + "@angular/common": "22.0.4", + "@angular/compiler": "22.0.4", + "@angular/core": "22.0.4", + "@angular/platform-browser": "22.0.4" } }, "node_modules/@angular/platform-server": { - "version": "12.2.17", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-12.2.17.tgz", - "integrity": "sha512-RUhI2luajbriMAavh39tVhAdqKtjd1phzjyxTxjJbohly/OqVGrChbI50IBT81J1MMdPgX8Y/cBrAV9xRGtVjw==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-22.0.4.tgz", + "integrity": "sha512-bvAfVHRSZsHV/DGl9CN6PTaf6K0RB7hIw+XnUKBtI+zLtdYSpkTq6NK99MbNNIHioQe4iczYdZSXyDsc2Q9sNw==", + "license": "MIT", "dependencies": { - "domino": "^2.1.2", - "tslib": "^2.2.0", + "tslib": "^2.3.0", "xhr2": "^0.2.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/animations": "12.2.17", - "@angular/common": "12.2.17", - "@angular/compiler": "12.2.17", - "@angular/core": "12.2.17", - "@angular/platform-browser": "12.2.17", - "@angular/platform-browser-dynamic": "12.2.17" + "@angular/common": "22.0.4", + "@angular/compiler": "22.0.4", + "@angular/core": "22.0.4", + "@angular/platform-browser": "22.0.4", + "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/router": { - "version": "12.2.17", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.17.tgz", - "integrity": "sha512-GKvEMUpLe157izpHLiS4bCZllqOj+MWhfWbhvR0DHFpE9FtkcDjBseTsWqQmyA1gqtRblO1Zn/1E33l9uaGMqw==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-22.0.4.tgz", + "integrity": "sha512-Kh236EphzUPNVt9w5Gv5hKJoQAMlo4fvAJ5E4E7vogFD36WM0ebt1COfYN3uATZel+4RehQg2VR45uepPI9HNA==", + "license": "MIT", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.3.0" }, "engines": { - "node": "^12.14.1 || >=14.0.0" + "node": "^22.22.3 || ^24.15.0 || >=26.0.0" }, "peerDependencies": { - "@angular/common": "12.2.17", - "@angular/core": "12.2.17", - "@angular/platform-browser": "12.2.17", - "rxjs": "^6.5.3 || ^7.0.0" + "@angular/common": "22.0.4", + "@angular/core": "22.0.4", + "@angular/platform-browser": "22.0.4", + "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@azure/abort-controller": { @@ -645,12 +816,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -659,30 +831,32 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", - "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", - "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.9", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-module-transforms": "^7.24.9", - "@babel/helpers": "^7.24.8", - "@babel/parser": "^7.24.8", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.9", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -713,29 +887,32 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", - "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.9", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", - "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -748,71 +925,45 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", - "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -821,66 +972,45 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -902,12 +1032,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -938,48 +1069,48 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", - "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.8", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.8", - "@babel/types": "^7.24.8", - "debug": "^4.3.1", - "globals": "^11.1.0" + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1688,17 +1819,25 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -1710,15 +1849,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", @@ -1736,10 +1866,11 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1912,19 +2043,21 @@ } }, "node_modules/@ngtools/webpack": { - "version": "12.2.18", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.2.18.tgz", - "integrity": "sha512-6h/QSG6oZDs2BGfrozdOKqtM5daoCu05q+0gyb3owHz1u9FtMeXXKQ3sQfyFC/GNT3dTMlH6YFxsJPvMPwuy9A==", + "version": "22.0.4", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-22.0.4.tgz", + "integrity": "sha512-9Z/b5rx7Uwih0r57a+jsdnDtOs1VHp1lXCxCxXxR0jcuP3aPYMQgeuudTv9l+4ZsXaG8VAVT8ixuDEV3Cv9UIA==", + "deprecated": "Angular's Webpack support is deprecated. Use the esbuild and Vite-based \"@angular/build\" package instead.", "dev": true, + "license": "MIT", "engines": { - "node": "^12.14.1 || >=14.0.0", + "node": "^22.22.3 || ^24.15.0 || >=26.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^12.0.0", - "typescript": "~4.2.3 || ~4.3.2", - "webpack": "^5.30.0" + "@angular/compiler-cli": "^22.0.0", + "typescript": ">=6.0 <6.1", + "webpack": "^5.54.0" } }, "node_modules/@nodelib/fs.scandir": { @@ -2005,6 +2138,12 @@ "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", "dev": true }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -2564,10 +2703,14 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true + "version": "20.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.43.tgz", + "integrity": "sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } }, "node_modules/@types/node-forge": { "version": "1.3.11", @@ -4351,12 +4494,6 @@ } ] }, - "node_modules/canonical-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", - "dev": true - }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -5060,10 +5197,11 @@ } }, "node_modules/config-file-ts/node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6067,15 +6205,6 @@ "node": ">= 0.8" } }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -6357,11 +6486,6 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/domino": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz", - "integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==" - }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -6788,15 +6912,6 @@ "node": ">= 10.0.0" } }, - "node_modules/electron/node_modules/@types/node": { - "version": "20.14.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", - "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, "node_modules/electron/node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -8505,6 +8620,19 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -8704,15 +8832,6 @@ "which": "bin/which" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", @@ -10287,15 +10406,16 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -11074,6 +11194,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -11086,15 +11207,6 @@ "node": "*" } }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -12337,10 +12449,28 @@ } }, "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "optional": true + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, "node_modules/parseurl": { "version": "1.3.3", @@ -14420,13 +14550,6 @@ "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "dev": true }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, "node_modules/spawn-command": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", @@ -15757,16 +15880,17 @@ } }, "node_modules/typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/ua-parser-js": { @@ -15808,10 +15932,11 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" }, "node_modules/universalify": { "version": "0.1.2", @@ -16718,7 +16843,8 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { "version": "17.7.2", @@ -16792,13 +16918,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zone.js": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", - "integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", - "dependencies": { - "tslib": "^2.3.0" + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } + }, + "node_modules/zone.js": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", + "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", + "license": "MIT" } } } diff --git a/desktop/package.json b/desktop/package.json index e4f93ef2ae..5193cef338 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -102,10 +102,10 @@ "@angular-eslint/eslint-plugin": "^13.2.1", "@angular-eslint/eslint-plugin-template": "^13.2.1", "@angular-eslint/template-parser": "^13.2.1", - "@angular/compiler-cli": "^12.0.0", + "@angular/compiler-cli": "^22.0.0", "@batch/common-config": "^1.0.0", "@jsdevtools/coverage-istanbul-loader": "^3.0.5", - "@ngtools/webpack": "^12.0.0", + "@ngtools/webpack": "^22.0.0", "@playwright/test": "^1.43.1", "@types/chart.js": "^2.9.24", "@types/d3": "^7.4.0", @@ -116,7 +116,7 @@ "@types/jasmine": "^3.5.12", "@types/js-yaml": "^3.12.5", "@types/luxon": "^1.27.1", - "@types/node": "18.11.9", + "@types/node": "^20.0.0", "@types/proxyquire": "^1.3.28", "@types/strip-json-comments": "^0.0.30", "@types/tinycolor2": "^1.4.2", @@ -167,7 +167,7 @@ "to-string-loader": "^1.2.0", "ts-loader": "^9.4.4", "ts-node": "^10.9.1", - "typescript": "~4.6.0", + "typescript": "~6.0.0", "webpack": "^5.88.2", "webpack-cli": "^5.1.4", "webpack-dev-server": "^4.15.1", @@ -176,17 +176,17 @@ "yesno": "^0.4.0" }, "dependencies": { - "@angular/animations": "^12.0.0", - "@angular/cdk": "^12.0.0", - "@angular/common": "^12.0.0", - "@angular/compiler": "^12.0.0", - "@angular/core": "^12.0.0", - "@angular/forms": "^12.0.0", - "@angular/material": "^12.0.0", - "@angular/platform-browser": "^12.0.0", - "@angular/platform-browser-dynamic": "^12.0.0", - "@angular/platform-server": "^12.0.0", - "@angular/router": "^12.0.0", + "@angular/animations": "^22.0.0", + "@angular/cdk": "^22.0.0", + "@angular/common": "^22.0.0", + "@angular/compiler": "^22.0.0", + "@angular/core": "^22.0.0", + "@angular/forms": "^22.0.0", + "@angular/material": "^22.0.0", + "@angular/platform-browser": "^22.0.0", + "@angular/platform-browser-dynamic": "^22.0.0", + "@angular/platform-server": "^22.0.0", + "@angular/router": "^22.0.0", "@azure/bonito-core": "^1.0.0", "@azure/bonito-ui": "^1.0.0", "@azure/core-util": "1.9.1", @@ -232,7 +232,7 @@ "winston-daily-rotate-file": "^3.10.0", "write-file-webpack-plugin": "^4.5.1", "xml2js": "^0.5.0", - "zone.js": "^0.11.4" + "zone.js": "~0.15.0" }, "overrides": { "json5": "^2.2.3", diff --git a/desktop/src/@batch-flask/compiler/dev-translations-loader.ts b/desktop/src/@batch-flask/compiler/dev-translations-loader.ts index fc3fc5a914..44465958ad 100644 --- a/desktop/src/@batch-flask/compiler/dev-translations-loader.ts +++ b/desktop/src/@batch-flask/compiler/dev-translations-loader.ts @@ -3,7 +3,7 @@ import * as globF from "glob"; import * as jsyaml from "js-yaml"; import * as util from "util"; -const glob = util.promisify(globF); +const glob = util.promisify(globF as any) as (pattern: string, options?: any) => Promise; const readFile = util.promisify(fs.readFile); type DuplicateCallback = (key: string, source: string) => void; diff --git a/desktop/src/@batch-flask/core/dynamic-form.ts b/desktop/src/@batch-flask/core/dynamic-form.ts index 11183a6f05..fdea873946 100644 --- a/desktop/src/@batch-flask/core/dynamic-form.ts +++ b/desktop/src/@batch-flask/core/dynamic-form.ts @@ -1,5 +1,5 @@ import { Type } from "@angular/core"; -import { FormGroup } from "@angular/forms"; +import { UntypedFormGroup } from "@angular/forms"; import { Dto } from "@batch-flask/core/dto"; import { FormUtils } from "@batch-flask/utils"; import { BehaviorSubject, Observable } from "rxjs"; @@ -12,7 +12,7 @@ export interface AsyncTask { export abstract class DynamicForm> { public originalData: TDto; - public form: FormGroup; + public form: UntypedFormGroup; public readonly asyncTasks: Observable; public readonly hasAsyncTask: Observable; diff --git a/desktop/src/@batch-flask/core/html-util/focus-helper.spec.ts b/desktop/src/@batch-flask/core/html-util/focus-helper.spec.ts index 2aa9cf413b..e45ea904fe 100644 --- a/desktop/src/@batch-flask/core/html-util/focus-helper.spec.ts +++ b/desktop/src/@batch-flask/core/html-util/focus-helper.spec.ts @@ -4,6 +4,7 @@ import { By } from "@angular/platform-browser"; import { focusWithin } from "./focus-helper"; @Component({ + standalone: false, template: `
diff --git a/desktop/src/@batch-flask/core/list/selectable-list.ts b/desktop/src/@batch-flask/core/list/selectable-list.ts index a305850a45..54b3150563 100644 --- a/desktop/src/@batch-flask/core/list/selectable-list.ts +++ b/desktop/src/@batch-flask/core/list/selectable-list.ts @@ -1,7 +1,7 @@ import { ChangeDetectorRef, Directive, EventEmitter, Input, Output } from "@angular/core"; import { ListSelection } from "./list-selection"; -@Directive() +@Directive({ standalone: false }) // eslint-disable-next-line @angular-eslint/directive-class-suffix export class SelectableList { @Input() public set activeItem(activeItem: string | null) { diff --git a/desktop/src/@batch-flask/core/testing/i18n-testing.module.ts b/desktop/src/@batch-flask/core/testing/i18n-testing.module.ts index 74309a28fc..e4c6b70773 100644 --- a/desktop/src/@batch-flask/core/testing/i18n-testing.module.ts +++ b/desktop/src/@batch-flask/core/testing/i18n-testing.module.ts @@ -14,7 +14,6 @@ export class TestTranslatationsLoaderService extends TranslationsLoaderService { imports: [CommonModule, I18nUIModule], declarations: [...publicComponents, ...privateComponents], exports: [...publicComponents, I18nUIModule], - entryComponents: [], providers: [ { provide: TranslationsLoaderService, useClass: TestTranslatationsLoaderService }, ], diff --git a/desktop/src/@batch-flask/core/testing/mock-control-value-accessor.ts b/desktop/src/@batch-flask/core/testing/mock-control-value-accessor.ts index 6ad0d04cb7..4d7d4d6230 100644 --- a/desktop/src/@batch-flask/core/testing/mock-control-value-accessor.ts +++ b/desktop/src/@batch-flask/core/testing/mock-control-value-accessor.ts @@ -2,6 +2,7 @@ import { Component, Type, forwardRef } from "@angular/core"; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; @Component({ + standalone: false, selector: "bl-mock-control-value-accessor", template: "", }) diff --git a/desktop/src/@batch-flask/extensions/angular/forms.ts b/desktop/src/@batch-flask/extensions/angular/forms.ts deleted file mode 100644 index 25441defa6..0000000000 --- a/desktop/src/@batch-flask/extensions/angular/forms.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Observable } from "rxjs"; - -/** - * Add some typing to the angular forms - */ -declare module "@angular/forms/forms" { - - interface FormControl { - readonly valueChanges: Observable; - readonly value: T; - - new(formState?: T, - validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null, - asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null); - - setValue(value: T, options?: { - onlySelf?: boolean; - emitEvent?: boolean; - emitModelToViewChange?: boolean; - emitViewToModelChange?: boolean; - }): void; - } - - interface FormGroup { - readonly valueChanges: Observable; - readonly value: T; - - new(formState?: T, - validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null, - asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null); - - setValue(value: T, options?: { - onlySelf?: boolean; - emitEvent?: boolean; - }): void; - patchValue(value: Partial, options?: { - onlySelf?: boolean; - emitEvent?: boolean; - }): void; - } -} diff --git a/desktop/src/@batch-flask/extensions/index.ts b/desktop/src/@batch-flask/extensions/index.ts index 419b2060ce..ece9a79350 100644 --- a/desktop/src/@batch-flask/extensions/index.ts +++ b/desktop/src/@batch-flask/extensions/index.ts @@ -1,4 +1,3 @@ -import "./angular/forms"; import "./array"; import "./security"; import "./string"; diff --git a/desktop/src/@batch-flask/ui/abstract-list/abstract-list-base.ts b/desktop/src/@batch-flask/ui/abstract-list/abstract-list-base.ts index dddcdabd49..5d25c4c700 100644 --- a/desktop/src/@batch-flask/ui/abstract-list/abstract-list-base.ts +++ b/desktop/src/@batch-flask/ui/abstract-list/abstract-list-base.ts @@ -85,7 +85,7 @@ const lastSorting: StringMap = {}; * 1. Extend class * 2. Refefine items with @ContentChildren and the class that inherit fSelectableListItemBase */ -@Directive() +@Directive({ standalone: false }) // eslint-disable-next-line @angular-eslint/directive-class-suffix export class AbstractListBase extends SelectableList implements OnDestroy, OnInit { diff --git a/desktop/src/@batch-flask/ui/abstract-list/abstract-list.module.ts b/desktop/src/@batch-flask/ui/abstract-list/abstract-list.module.ts index dc73b7209a..3527b9ccd8 100644 --- a/desktop/src/@batch-flask/ui/abstract-list/abstract-list.module.ts +++ b/desktop/src/@batch-flask/ui/abstract-list/abstract-list.module.ts @@ -11,7 +11,6 @@ const privateComponents = []; imports: [CommonModule, I18nUIModule, ButtonsModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class AbstractListModule { } diff --git a/desktop/src/@batch-flask/ui/abstract-list/list-base.component.ts b/desktop/src/@batch-flask/ui/abstract-list/list-base.component.ts index 4bd47c0be0..df7e9e6073 100644 --- a/desktop/src/@batch-flask/ui/abstract-list/list-base.component.ts +++ b/desktop/src/@batch-flask/ui/abstract-list/list-base.component.ts @@ -17,7 +17,7 @@ export interface ListBaseComponent { onScrollToBottom?(); } -@Directive() +@Directive({ standalone: false }) // eslint-disable-next-line @angular-eslint/directive-class-suffix export abstract class ListBaseComponent extends SelectableList implements OnDestroy { @Input() public set quicklist(quicklist: boolean) { diff --git a/desktop/src/@batch-flask/ui/abstract-list/partial-sort-warning/partial-sort-warning.component.spec.ts b/desktop/src/@batch-flask/ui/abstract-list/partial-sort-warning/partial-sort-warning.component.spec.ts index d45de28cf7..2b40247d52 100644 --- a/desktop/src/@batch-flask/ui/abstract-list/partial-sort-warning/partial-sort-warning.component.spec.ts +++ b/desktop/src/@batch-flask/ui/abstract-list/partial-sort-warning/partial-sort-warning.component.spec.ts @@ -11,6 +11,7 @@ import { runAxe } from "test/utils/helpers/axe-helpers"; import { PartialSortWarningComponent } from "./partial-sort-warning.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/abstract-list/partial-sort-warning/partial-sort-warning.component.ts b/desktop/src/@batch-flask/ui/abstract-list/partial-sort-warning/partial-sort-warning.component.ts index 4eca20584e..80c1b458e9 100644 --- a/desktop/src/@batch-flask/ui/abstract-list/partial-sort-warning/partial-sort-warning.component.ts +++ b/desktop/src/@batch-flask/ui/abstract-list/partial-sort-warning/partial-sort-warning.component.ts @@ -9,6 +9,7 @@ import { SortingStatus } from "../list-data-sorter"; import "./partial-sort-warning.scss"; @Component({ + standalone: false, selector: "bl-partial-sort-warning", templateUrl: "partial-sort-warning.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/activity/activity-monitor-footer-item/activity-monitor-footer-item.component.spec.ts b/desktop/src/@batch-flask/ui/activity/activity-monitor-footer-item/activity-monitor-footer-item.component.spec.ts index 13ac877a3b..3aa96a3822 100644 --- a/desktop/src/@batch-flask/ui/activity/activity-monitor-footer-item/activity-monitor-footer-item.component.spec.ts +++ b/desktop/src/@batch-flask/ui/activity/activity-monitor-footer-item/activity-monitor-footer-item.component.spec.ts @@ -6,6 +6,7 @@ import { ActivityMonitorFooterItemComponent } from "@batch-flask/ui/activity"; import { BehaviorSubject } from "rxjs"; @Component({ + standalone: false, template: ` diff --git a/desktop/src/@batch-flask/ui/activity/activity-monitor-footer-item/activity-monitor-footer-item.component.ts b/desktop/src/@batch-flask/ui/activity/activity-monitor-footer-item/activity-monitor-footer-item.component.ts index a497c4b1bd..2ee548e3e3 100644 --- a/desktop/src/@batch-flask/ui/activity/activity-monitor-footer-item/activity-monitor-footer-item.component.ts +++ b/desktop/src/@batch-flask/ui/activity/activity-monitor-footer-item/activity-monitor-footer-item.component.ts @@ -12,6 +12,7 @@ import { Subscription } from "rxjs"; import "./activity-monitor-footer-item.scss"; @Component({ + standalone: false, selector: "bl-activity-monitor-footer-item", templateUrl: "activity-monitor-footer-item.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/activity/activity-monitor-footer/activity-monitor-footer.component.ts b/desktop/src/@batch-flask/ui/activity/activity-monitor-footer/activity-monitor-footer.component.ts index 3ef11052ba..68c1ca696b 100644 --- a/desktop/src/@batch-flask/ui/activity/activity-monitor-footer/activity-monitor-footer.component.ts +++ b/desktop/src/@batch-flask/ui/activity/activity-monitor-footer/activity-monitor-footer.component.ts @@ -7,6 +7,7 @@ import { Subscription } from "rxjs"; import "./activity-monitor-footer.scss"; @Component({ + standalone: false, selector: "bl-activity-monitor-footer", templateUrl: "activity-monitor-footer.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/activity/activity-monitor/activity-monitor-item/activity-monitor-item-action/activity-monitor-item-action.component.ts b/desktop/src/@batch-flask/ui/activity/activity-monitor/activity-monitor-item/activity-monitor-item-action/activity-monitor-item-action.component.ts index 2e7d649c7e..aded9beb68 100644 --- a/desktop/src/@batch-flask/ui/activity/activity-monitor/activity-monitor-item/activity-monitor-item-action/activity-monitor-item-action.component.ts +++ b/desktop/src/@batch-flask/ui/activity/activity-monitor/activity-monitor-item/activity-monitor-item-action/activity-monitor-item-action.component.ts @@ -12,6 +12,7 @@ export interface ActivityAction { } @Component({ + standalone: false, selector: "bl-activity-monitor-item-action", templateUrl: "activity-monitor-item-action.html", }) diff --git a/desktop/src/@batch-flask/ui/activity/activity-monitor/activity-monitor-item/activity-monitor-item.component.spec.ts b/desktop/src/@batch-flask/ui/activity/activity-monitor/activity-monitor-item/activity-monitor-item.component.spec.ts index 7c6f6c2a8e..c38fec4ff0 100644 --- a/desktop/src/@batch-flask/ui/activity/activity-monitor/activity-monitor-item/activity-monitor-item.component.spec.ts +++ b/desktop/src/@batch-flask/ui/activity/activity-monitor/activity-monitor-item/activity-monitor-item.component.spec.ts @@ -8,6 +8,7 @@ import { ActivityMonitorItemActionComponent } from "./activity-monitor-item-acti import { ActivityMonitorItemComponent } from "./activity-monitor-item.component"; @Component({ + standalone: false, template: ` diff --git a/desktop/src/@batch-flask/ui/advanced-filter/advanced-filter.module.ts b/desktop/src/@batch-flask/ui/advanced-filter/advanced-filter.module.ts index 61cbf02a70..2087a4add9 100644 --- a/desktop/src/@batch-flask/ui/advanced-filter/advanced-filter.module.ts +++ b/desktop/src/@batch-flask/ui/advanced-filter/advanced-filter.module.ts @@ -17,8 +17,6 @@ const components = [ @NgModule({ declarations: components, - entryComponents: [ - ], exports: components, imports: [ CommonModule, diff --git a/desktop/src/@batch-flask/ui/advanced-filter/advanced-filter.ts b/desktop/src/@batch-flask/ui/advanced-filter/advanced-filter.ts index d7cd94e121..67fd868481 100644 --- a/desktop/src/@batch-flask/ui/advanced-filter/advanced-filter.ts +++ b/desktop/src/@batch-flask/ui/advanced-filter/advanced-filter.ts @@ -1,4 +1,4 @@ -import { FormGroup } from "@angular/forms"; +import { UntypedFormGroup } from "@angular/forms"; import * as FilterBuilder from "@batch-flask/core/filter-builder"; import { log } from "@batch-flask/utils"; import { Map } from "immutable"; @@ -7,7 +7,7 @@ import { debounceTime, distinctUntilChanged } from "rxjs/operators"; import { AdvancedFilterControlBase } from "./control-base"; export class AdvancedFilter { - public group: FormGroup; + public group: UntypedFormGroup; public filterChange: Observable; private _filterChange = new BehaviorSubject(FilterBuilder.none()); @@ -28,11 +28,11 @@ export class AdvancedFilter { }); } - private _buildFormGroup(): FormGroup { + private _buildFormGroup(): UntypedFormGroup { const controls = Map(this.controls).map((value) => { return value.formGroup(); }).toObject(); - return new FormGroup(controls); + return new UntypedFormGroup(controls); } private _handleFormChange(data: any) { diff --git a/desktop/src/@batch-flask/ui/advanced-filter/control-base.ts b/desktop/src/@batch-flask/ui/advanced-filter/control-base.ts index 47a0a0e8a9..ba06803844 100644 --- a/desktop/src/@batch-flask/ui/advanced-filter/control-base.ts +++ b/desktop/src/@batch-flask/ui/advanced-filter/control-base.ts @@ -1,4 +1,4 @@ -import { FormGroup } from "@angular/forms"; +import { UntypedFormGroup } from "@angular/forms"; import { Filter } from "@batch-flask/core"; import { AdvancedFilter } from "./advanced-filter"; @@ -8,6 +8,6 @@ export abstract class AdvancedFilterControlBase { constructor(public label: string) { } - public abstract formGroup(): FormGroup; + public abstract formGroup(): UntypedFormGroup; public abstract buildFilter(data: any): Filter; } diff --git a/desktop/src/@batch-flask/ui/advanced-filter/list-filter-control/list-filter-control.ts b/desktop/src/@batch-flask/ui/advanced-filter/list-filter-control/list-filter-control.ts index b02258b1e0..60e3d79ec7 100644 --- a/desktop/src/@batch-flask/ui/advanced-filter/list-filter-control/list-filter-control.ts +++ b/desktop/src/@batch-flask/ui/advanced-filter/list-filter-control/list-filter-control.ts @@ -1,5 +1,5 @@ import { Component, Input } from "@angular/core"; -import { FormControl, FormGroup } from "@angular/forms"; +import { UntypedFormControl, UntypedFormGroup } from "@angular/forms"; import { Filter, and, none, or, prop } from "@batch-flask/core"; import { AdvancedFilter } from "../advanced-filter"; import { AdvancedFilterControlBase } from "../control-base"; @@ -35,7 +35,7 @@ export interface ListFilterParsedValue { } export class ListFilterControl extends AdvancedFilterControlBase { - private _valueControl = new FormControl(""); + private _valueControl = new UntypedFormControl(""); constructor(label: string, private _config: ListFilterControlConfig = {}) { super(label); @@ -44,9 +44,9 @@ export class ListFilterControl extends AdvancedFilterControlBase { } } - public formGroup(): FormGroup { - return new FormGroup({ - type: new FormControl(ListFilterType.Include), + public formGroup(): UntypedFormGroup { + return new UntypedFormGroup({ + type: new UntypedFormControl(ListFilterType.Include), value: this._valueControl, }); } @@ -142,6 +142,7 @@ export class ListFilterControl extends AdvancedFilterControlBase { } @Component({ + standalone: false, selector: "bl-adv-filter-list", templateUrl: "list-filter-control.html", }) diff --git a/desktop/src/@batch-flask/ui/advanced-filter/result-picker-control/result-picker-control.ts b/desktop/src/@batch-flask/ui/advanced-filter/result-picker-control/result-picker-control.ts index 2b0c5f133c..47d1c193f9 100644 --- a/desktop/src/@batch-flask/ui/advanced-filter/result-picker-control/result-picker-control.ts +++ b/desktop/src/@batch-flask/ui/advanced-filter/result-picker-control/result-picker-control.ts @@ -1,5 +1,5 @@ import { Component, HostBinding, Input } from "@angular/core"; -import { FormControl, FormGroup } from "@angular/forms"; +import { UntypedFormControl, UntypedFormGroup } from "@angular/forms"; import * as FilterBuilder from "@batch-flask/core/filter-builder"; import { AdvancedFilter } from "../advanced-filter"; import { AdvancedFilterControlBase } from "../control-base"; @@ -11,12 +11,12 @@ export class ResultPickerControl extends AdvancedFilterControlBase { super(label); } - public formGroup(): FormGroup { + public formGroup(): UntypedFormGroup { const controls = this.results.reduce((map, result) => { - map[result] = new FormControl(false); + map[result] = new UntypedFormControl(false); return map; }, {}); - return new FormGroup(controls); + return new UntypedFormGroup(controls); } public buildFilter(data: { [key: string]: boolean }): FilterBuilder.Filter { @@ -28,6 +28,7 @@ export class ResultPickerControl extends AdvancedFilterControlBase { let idCounter = 0; @Component({ + standalone: false, selector: "bl-adv-filter-resultpicker", templateUrl: "result-picker-control.html", }) diff --git a/desktop/src/@batch-flask/ui/advanced-filter/state-picker-control/state-picker-control.ts b/desktop/src/@batch-flask/ui/advanced-filter/state-picker-control/state-picker-control.ts index f57430450e..794a14231d 100644 --- a/desktop/src/@batch-flask/ui/advanced-filter/state-picker-control/state-picker-control.ts +++ b/desktop/src/@batch-flask/ui/advanced-filter/state-picker-control/state-picker-control.ts @@ -1,5 +1,5 @@ import { Component, HostBinding, Input } from "@angular/core"; -import { FormControl, FormGroup } from "@angular/forms"; +import { UntypedFormControl, UntypedFormGroup } from "@angular/forms"; import * as FilterBuilder from "@batch-flask/core/filter-builder"; import { AdvancedFilter } from "../advanced-filter"; import { AdvancedFilterControlBase } from "../control-base"; @@ -11,12 +11,12 @@ export class StatePickerControl extends AdvancedFilterControlBase { super(label); } - public formGroup(): FormGroup { + public formGroup(): UntypedFormGroup { const controls = this.states.reduce((map, state) => { - map[state] = new FormControl(false); + map[state] = new UntypedFormControl(false); return map; }, {}); - return new FormGroup(controls); + return new UntypedFormGroup(controls); } public buildFilter(data: { [key: string]: boolean }): FilterBuilder.Filter { @@ -28,6 +28,7 @@ export class StatePickerControl extends AdvancedFilterControlBase { let idCounter = 0; @Component({ + standalone: false, selector: "bl-adv-filter-statepicker", templateUrl: "state-picker-control.html", }) diff --git a/desktop/src/@batch-flask/ui/auto-focus/auto-focus.directive.spec.ts b/desktop/src/@batch-flask/ui/auto-focus/auto-focus.directive.spec.ts index c36ff2c233..0e03eec454 100644 --- a/desktop/src/@batch-flask/ui/auto-focus/auto-focus.directive.spec.ts +++ b/desktop/src/@batch-flask/ui/auto-focus/auto-focus.directive.spec.ts @@ -4,6 +4,7 @@ import { By } from "@angular/platform-browser"; import { AutoFocusDirective } from "./auto-focus.directive"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/auto-focus/auto-focus.directive.ts b/desktop/src/@batch-flask/ui/auto-focus/auto-focus.directive.ts index 6da5698d25..0db9f87050 100644 --- a/desktop/src/@batch-flask/ui/auto-focus/auto-focus.directive.ts +++ b/desktop/src/@batch-flask/ui/auto-focus/auto-focus.directive.ts @@ -1,6 +1,7 @@ import { AfterViewInit, Directive, ElementRef, Input } from "@angular/core"; @Directive({ + standalone: false, // eslint-disable-next-line @angular-eslint/directive-selector selector: "[autofocus]", }) diff --git a/desktop/src/@batch-flask/ui/auto-focus/auto-focus.module.ts b/desktop/src/@batch-flask/ui/auto-focus/auto-focus.module.ts index 6dd3fe73b1..4376eb97eb 100644 --- a/desktop/src/@batch-flask/ui/auto-focus/auto-focus.module.ts +++ b/desktop/src/@batch-flask/ui/auto-focus/auto-focus.module.ts @@ -9,7 +9,6 @@ const privateComponents = []; imports: [CommonModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class AutoFocusModule { } diff --git a/desktop/src/@batch-flask/ui/banner/banner.component.spec.ts b/desktop/src/@batch-flask/ui/banner/banner.component.spec.ts index 8cc5e6a00b..26a0d40848 100644 --- a/desktop/src/@batch-flask/ui/banner/banner.component.spec.ts +++ b/desktop/src/@batch-flask/ui/banner/banner.component.spec.ts @@ -7,6 +7,7 @@ import { mouseenter } from "test/utils/helpers"; import { ClickableComponent } from "../buttons"; @Component({ + standalone: false, template: `
Error 404
diff --git a/desktop/src/@batch-flask/ui/banner/banner.component.ts b/desktop/src/@batch-flask/ui/banner/banner.component.ts index 6d362b0ef9..c2b611f4ba 100644 --- a/desktop/src/@batch-flask/ui/banner/banner.component.ts +++ b/desktop/src/@batch-flask/ui/banner/banner.component.ts @@ -18,6 +18,7 @@ export enum BannerType { import "./banner.scss"; @Directive({ + standalone: false, // eslint-disable-next-line @angular-eslint/directive-selector selector: "[other-fix]", }) @@ -34,6 +35,7 @@ export class BannerOtherFixDirective { * - Detail content that is hidden by default */ @Component({ + standalone: false, selector: "bl-banner", templateUrl: "banner.html", // TODO-Change-Detection This require updating all the ng-content diff --git a/desktop/src/@batch-flask/ui/batchui.module.ts b/desktop/src/@batch-flask/ui/batchui.module.ts index badd5e702e..40782be578 100644 --- a/desktop/src/@batch-flask/ui/batchui.module.ts +++ b/desktop/src/@batch-flask/ui/batchui.module.ts @@ -109,9 +109,6 @@ const components = [ @NgModule({ declarations: components, - entryComponents: [ - SimpleDialogComponent, - ], exports: [...modules, ...components], imports: [ CommonModule, diff --git a/desktop/src/@batch-flask/ui/breadcrumbs/breadcrumb-group/breadcrumb-group.component.ts b/desktop/src/@batch-flask/ui/breadcrumbs/breadcrumb-group/breadcrumb-group.component.ts index fa4b604a9e..8da698052e 100644 --- a/desktop/src/@batch-flask/ui/breadcrumbs/breadcrumb-group/breadcrumb-group.component.ts +++ b/desktop/src/@batch-flask/ui/breadcrumbs/breadcrumb-group/breadcrumb-group.component.ts @@ -13,6 +13,7 @@ import { BreadcrumbService } from "../breadcrumb.service"; import "./breadcrumb-group.scss"; @Component({ + standalone: false, selector: "bl-breadcrumb-group", templateUrl: "breadcrumb-group.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/breadcrumbs/breadcrumb-link.directive.ts b/desktop/src/@batch-flask/ui/breadcrumbs/breadcrumb-link.directive.ts index 9695032295..3824117bbf 100644 --- a/desktop/src/@batch-flask/ui/breadcrumbs/breadcrumb-link.directive.ts +++ b/desktop/src/@batch-flask/ui/breadcrumbs/breadcrumb-link.directive.ts @@ -2,6 +2,7 @@ import { Directive, HostListener, Input } from "@angular/core"; import { Router } from "@angular/router"; @Directive({ + standalone: false, selector: "[blBreadcrumbLink]", }) export class BreadcrumbLinkDirective { diff --git a/desktop/src/@batch-flask/ui/breadcrumbs/breadcrumb/breadcrumb.component.ts b/desktop/src/@batch-flask/ui/breadcrumbs/breadcrumb/breadcrumb.component.ts index 19f16b63a5..723397eb6f 100644 --- a/desktop/src/@batch-flask/ui/breadcrumbs/breadcrumb/breadcrumb.component.ts +++ b/desktop/src/@batch-flask/ui/breadcrumbs/breadcrumb/breadcrumb.component.ts @@ -4,6 +4,7 @@ import { BreadcrumbService } from "../breadcrumb.service"; import { Breadcrumb } from "../breadcrumbs.model"; @Component({ + standalone: false, selector: "bl-breadcrumb", templateUrl: "breadcrumb.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/browse-layout/browse-layout-advanced-filter/browse-layout-advanced-filter.directive.ts b/desktop/src/@batch-flask/ui/browse-layout/browse-layout-advanced-filter/browse-layout-advanced-filter.directive.ts index dcdfcbe47f..dddd509e33 100644 --- a/desktop/src/@batch-flask/ui/browse-layout/browse-layout-advanced-filter/browse-layout-advanced-filter.directive.ts +++ b/desktop/src/@batch-flask/ui/browse-layout/browse-layout-advanced-filter/browse-layout-advanced-filter.directive.ts @@ -1,6 +1,7 @@ import { Directive } from "@angular/core"; @Directive({ + standalone: false, selector: "[blBrowseLayoutAdvancedFilter]", }) export class BrowseLayoutAdvancedFilterDirective { diff --git a/desktop/src/@batch-flask/ui/browse-layout/browse-layout-list/browse-layout-list.directive.ts b/desktop/src/@batch-flask/ui/browse-layout/browse-layout-list/browse-layout-list.directive.ts index b17097ac11..66fcbb1421 100644 --- a/desktop/src/@batch-flask/ui/browse-layout/browse-layout-list/browse-layout-list.directive.ts +++ b/desktop/src/@batch-flask/ui/browse-layout/browse-layout-list/browse-layout-list.directive.ts @@ -3,6 +3,7 @@ import { ListBaseComponent } from "@batch-flask/ui/abstract-list"; import { SanitizedError, log } from "@batch-flask/utils"; @Directive({ + standalone: false, selector: "[blBrowseLayoutList]", }) export class BrowseLayoutListDirective { diff --git a/desktop/src/@batch-flask/ui/browse-layout/browse-layout.component.spec.ts b/desktop/src/@batch-flask/ui/browse-layout/browse-layout.component.spec.ts index f4765b98a9..22647b0445 100644 --- a/desktop/src/@batch-flask/ui/browse-layout/browse-layout.component.spec.ts +++ b/desktop/src/@batch-flask/ui/browse-layout/browse-layout.component.spec.ts @@ -15,6 +15,7 @@ import { BrowseLayoutComponent } from "./browse-layout.component"; import { ToggleFilterButtonComponent } from "./toggle-filter-button"; @Component({ + standalone: false, selector: "bl-fake-list", template: ` `, @@ -30,6 +31,7 @@ class FakeListComponent extends ListBaseComponent { } @Component({ + standalone: false, template: `
diff --git a/desktop/src/@batch-flask/ui/browse-layout/browse-layout.component.ts b/desktop/src/@batch-flask/ui/browse-layout/browse-layout.component.ts index a090bc4e1e..565b5db69c 100644 --- a/desktop/src/@batch-flask/ui/browse-layout/browse-layout.component.ts +++ b/desktop/src/@batch-flask/ui/browse-layout/browse-layout.component.ts @@ -4,7 +4,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, Input, OnChanges, OnDestroy, OnInit, ViewChild, } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { ActivatedRoute } from "@angular/router"; import { Filter, FilterBuilder, I18nService, autobind } from "@batch-flask/core"; import { KeyCode } from "@batch-flask/core/keys"; @@ -42,6 +42,7 @@ const defaultConfig: BrowseLayoutConfig = { let idCounter = 0; @Component({ + standalone: false, selector: "bl-browse-layout", templateUrl: "browse-layout.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -78,7 +79,7 @@ export class BrowseLayoutComponent implements OnInit, AfterViewInit, AfterConten separatorThickness: 0, }; - public quickSearchQuery = new FormControl(""); + public quickSearchQuery = new UntypedFormControl(""); public filter: Filter = FilterBuilder.none(); public quickFilter: Filter = FilterBuilder.none(); public advancedFilter: Filter = FilterBuilder.none(); diff --git a/desktop/src/@batch-flask/ui/browse-layout/toggle-filter-button/toggle-filter-button.component.spec.ts b/desktop/src/@batch-flask/ui/browse-layout/toggle-filter-button/toggle-filter-button.component.spec.ts index cbd211f14b..f3076ef67f 100644 --- a/desktop/src/@batch-flask/ui/browse-layout/toggle-filter-button/toggle-filter-button.component.spec.ts +++ b/desktop/src/@batch-flask/ui/browse-layout/toggle-filter-button/toggle-filter-button.component.spec.ts @@ -7,6 +7,7 @@ import { click } from "test/utils/helpers"; import { ToggleFilterButtonComponent } from "./toggle-filter-button.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/browse-layout/toggle-filter-button/toggle-filter-button.component.ts b/desktop/src/@batch-flask/ui/browse-layout/toggle-filter-button/toggle-filter-button.component.ts index ba8516d68e..201168f379 100644 --- a/desktop/src/@batch-flask/ui/browse-layout/toggle-filter-button/toggle-filter-button.component.ts +++ b/desktop/src/@batch-flask/ui/browse-layout/toggle-filter-button/toggle-filter-button.component.ts @@ -12,6 +12,7 @@ import { Filter, FilterBuilder } from "@batch-flask/core"; import "./toggle-filter-button.scss"; @Component({ + standalone: false, selector: "bl-toggle-filter-button", templateUrl: "toggle-filter-button.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/buttons/button-group.component.ts b/desktop/src/@batch-flask/ui/buttons/button-group.component.ts index eb7187f268..65688cc372 100644 --- a/desktop/src/@batch-flask/ui/buttons/button-group.component.ts +++ b/desktop/src/@batch-flask/ui/buttons/button-group.component.ts @@ -1,6 +1,7 @@ import { Component } from "@angular/core"; @Component({ + standalone: false, selector: "bl-button-group", template: ` diff --git a/desktop/src/@batch-flask/ui/buttons/button.component.spec.ts b/desktop/src/@batch-flask/ui/buttons/button.component.spec.ts index fd81f111a9..0e9077d4a8 100644 --- a/desktop/src/@batch-flask/ui/buttons/button.component.spec.ts +++ b/desktop/src/@batch-flask/ui/buttons/button.component.spec.ts @@ -9,6 +9,7 @@ import { click } from "test/utils/helpers"; import { runAxe } from "test/utils/helpers/axe-helpers"; @Component({ + standalone: false, template: ` diff --git a/desktop/src/@batch-flask/ui/buttons/button.component.ts b/desktop/src/@batch-flask/ui/buttons/button.component.ts index 67a4647cac..99fd88c4b4 100644 --- a/desktop/src/@batch-flask/ui/buttons/button.component.ts +++ b/desktop/src/@batch-flask/ui/buttons/button.component.ts @@ -33,6 +33,7 @@ export enum SubmitStatus { let idCounter = 0; @Component({ + standalone: false, selector: "bl-button", templateUrl: "button.html", animations: [ diff --git a/desktop/src/@batch-flask/ui/buttons/buttons.component.ts b/desktop/src/@batch-flask/ui/buttons/buttons.component.ts index 10b096ed53..2ff6c68aa9 100644 --- a/desktop/src/@batch-flask/ui/buttons/buttons.component.ts +++ b/desktop/src/@batch-flask/ui/buttons/buttons.component.ts @@ -2,7 +2,7 @@ import { Component, Directive, Input } from "@angular/core"; import { autobind } from "@batch-flask/core"; import { ButtonAction } from "./button.component"; -@Directive() +@Directive({ standalone: false }) // eslint-disable-next-line @angular-eslint/directive-class-suffix export class BaseButton { @Input() public action: ButtonAction; @@ -11,6 +11,7 @@ export class BaseButton { } @Component({ + standalone: false, selector: "bl-loading-button", template: ` @@ -25,6 +26,7 @@ export class LoadingButtonComponent extends BaseButton { } @Component({ + standalone: false, selector: "bl-clear-list-selection", template: ` @@ -44,6 +46,7 @@ export class ClearListSelectionButtonComponent extends BaseButton { } @Component({ + standalone: false, selector: "bl-download-button", template: ` @@ -83,6 +84,7 @@ class ClickableWithRouterLinkOnParent extends TestComponent { } @Component({ + standalone: false, template: ` `, diff --git a/desktop/src/@batch-flask/ui/buttons/clickable/clickable.component.ts b/desktop/src/@batch-flask/ui/buttons/clickable/clickable.component.ts index 0d16eb0898..0bad584b29 100644 --- a/desktop/src/@batch-flask/ui/buttons/clickable/clickable.component.ts +++ b/desktop/src/@batch-flask/ui/buttons/clickable/clickable.component.ts @@ -21,6 +21,7 @@ import { Subscription } from "rxjs"; import "./clickable.scss"; @Component({ + standalone: false, selector: "bl-clickable", template: ``, }) @@ -119,7 +120,7 @@ export class ClickableComponent implements OnChanges, OnDestroy { this.do.emit(event); if (this._routerLink) { - this._routerLink.onClick(); + this._routerLink.onClick(0, false, false, false, false); } } diff --git a/desktop/src/@batch-flask/ui/buttons/directory-picker.component.ts b/desktop/src/@batch-flask/ui/buttons/directory-picker.component.ts index 6752b97947..758b442128 100644 --- a/desktop/src/@batch-flask/ui/buttons/directory-picker.component.ts +++ b/desktop/src/@batch-flask/ui/buttons/directory-picker.component.ts @@ -4,6 +4,7 @@ import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from "@ * Combine a button and a file input control into one better looking control. */ @Component({ + standalone: false, selector: "bl-directory-picker", templateUrl: "directory-picker.html", }) diff --git a/desktop/src/@batch-flask/ui/buttons/refresh-btn/refresh-btn.component.ts b/desktop/src/@batch-flask/ui/buttons/refresh-btn/refresh-btn.component.ts index 966a9b667a..13a7d8e5ff 100644 --- a/desktop/src/@batch-flask/ui/buttons/refresh-btn/refresh-btn.component.ts +++ b/desktop/src/@batch-flask/ui/buttons/refresh-btn/refresh-btn.component.ts @@ -16,6 +16,7 @@ export enum RefreshStatus { } @Component({ + standalone: false, selector: "bl-refresh-btn", templateUrl: "refresh-btn.html", animations: [ diff --git a/desktop/src/@batch-flask/ui/callout/callout.component.ts b/desktop/src/@batch-flask/ui/callout/callout.component.ts index 0b0ca2669b..50fa4b4c25 100644 --- a/desktop/src/@batch-flask/ui/callout/callout.component.ts +++ b/desktop/src/@batch-flask/ui/callout/callout.component.ts @@ -3,6 +3,7 @@ import { ChangeDetectionStrategy, Component, TemplateRef, ViewChild } from "@ang import "./callout.scss"; @Component({ + standalone: false, selector: "bl-callout", templateUrl: "callout.html", exportAs: "blCallout", diff --git a/desktop/src/@batch-flask/ui/callout/callout.directive.spec.ts b/desktop/src/@batch-flask/ui/callout/callout.directive.spec.ts index 7fd6a0dadc..4f0965e6fc 100644 --- a/desktop/src/@batch-flask/ui/callout/callout.directive.spec.ts +++ b/desktop/src/@batch-flask/ui/callout/callout.directive.spec.ts @@ -5,6 +5,7 @@ import { By } from "@angular/platform-browser"; import { CalloutDirective } from ".."; @Component({ + standalone: false, template: `` }) class HostComponent { diff --git a/desktop/src/@batch-flask/ui/callout/callout.directive.ts b/desktop/src/@batch-flask/ui/callout/callout.directive.ts index c902704341..e5e93a3145 100644 --- a/desktop/src/@batch-flask/ui/callout/callout.directive.ts +++ b/desktop/src/@batch-flask/ui/callout/callout.directive.ts @@ -7,6 +7,7 @@ import { Subscription } from "rxjs"; import { CalloutComponent } from "./callout.component"; @Directive({ + standalone: false, selector: "[blCallout]", }) export class CalloutDirective { @@ -100,9 +101,9 @@ export class CalloutDirective { }, ]; - const positionStrategy = this.overlay.position().connectedTo(this.elementRef, - { originX: "start", originY: "top" }, - { overlayX: "start", overlayY: "bottom" }); + const positionStrategy = this.overlay.position().flexibleConnectedTo(this.elementRef) + .withFlexibleDimensions(false) + .withPush(false); positionStrategy.withPositions(positions); return new OverlayConfig({ positionStrategy: positionStrategy, diff --git a/desktop/src/@batch-flask/ui/callout/callout.module.ts b/desktop/src/@batch-flask/ui/callout/callout.module.ts index 716ba00bd8..dbc866aff4 100644 --- a/desktop/src/@batch-flask/ui/callout/callout.module.ts +++ b/desktop/src/@batch-flask/ui/callout/callout.module.ts @@ -10,7 +10,6 @@ const privateComponents = []; imports: [CommonModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class CalloutModule { } diff --git a/desktop/src/@batch-flask/ui/card/card.component.ts b/desktop/src/@batch-flask/ui/card/card.component.ts index f77953ccaf..58ee8d60f9 100644 --- a/desktop/src/@batch-flask/ui/card/card.component.ts +++ b/desktop/src/@batch-flask/ui/card/card.component.ts @@ -3,6 +3,7 @@ import { ChangeDetectionStrategy, Component } from "@angular/core"; import "./card.scss"; @Component({ + standalone: false, selector: "bl-card", template: "", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/card/card.module.ts b/desktop/src/@batch-flask/ui/card/card.module.ts index 0c5d82f1f6..1228c09d88 100644 --- a/desktop/src/@batch-flask/ui/card/card.module.ts +++ b/desktop/src/@batch-flask/ui/card/card.module.ts @@ -9,7 +9,6 @@ const privateComponents = []; imports: [CommonModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class CardModule { } diff --git a/desktop/src/@batch-flask/ui/charts/chart.directive.ts b/desktop/src/@batch-flask/ui/charts/chart.directive.ts index feef8426e0..2085bced09 100644 --- a/desktop/src/@batch-flask/ui/charts/chart.directive.ts +++ b/desktop/src/@batch-flask/ui/charts/chart.directive.ts @@ -10,7 +10,7 @@ import { Output, SimpleChanges, } from "@angular/core"; -import * as Chart from "chart.js"; +import Chart from "chart.js"; import { getColors } from "./helpers"; export enum ChartType { @@ -21,7 +21,8 @@ export enum ChartType { Pie = "pie", } -@Directive({ selector: "canvas[blChart]" }) +@Directive({ + standalone: false, selector: "canvas[blChart]" }) export class ChartDirective implements OnDestroy, OnChanges, OnInit { @Input() public data: number[] | any[]; diff --git a/desktop/src/@batch-flask/ui/copyable/copyable.directive.spec.ts b/desktop/src/@batch-flask/ui/copyable/copyable.directive.spec.ts index 25d0c5680c..80a99a7045 100644 --- a/desktop/src/@batch-flask/ui/copyable/copyable.directive.spec.ts +++ b/desktop/src/@batch-flask/ui/copyable/copyable.directive.spec.ts @@ -8,6 +8,7 @@ import { CopyableDirective } from "./copyable.directive"; const sampleText = "target clipboard text"; @Component({ + standalone: false, template: `
${sampleText}
` }) class TestCopyableComponent {} diff --git a/desktop/src/@batch-flask/ui/copyable/copyable.directive.ts b/desktop/src/@batch-flask/ui/copyable/copyable.directive.ts index 4217ee4ce5..02c12a0008 100644 --- a/desktop/src/@batch-flask/ui/copyable/copyable.directive.ts +++ b/desktop/src/@batch-flask/ui/copyable/copyable.directive.ts @@ -5,7 +5,8 @@ import { ClipboardService } from "@batch-flask/electron"; import "./copyable.scss"; -@Directive({ selector: "[beCopyable]" }) +@Directive({ + standalone: false, selector: "[beCopyable]" }) export class CopyableDirective { private button: HTMLElement; private copiedAlert: HTMLElement; diff --git a/desktop/src/@batch-flask/ui/date/date.component.spec.ts b/desktop/src/@batch-flask/ui/date/date.component.spec.ts index 32155d3ed9..a57b0b0b1b 100644 --- a/desktop/src/@batch-flask/ui/date/date.component.spec.ts +++ b/desktop/src/@batch-flask/ui/date/date.component.spec.ts @@ -11,6 +11,7 @@ const date1 = new Date(Date.UTC(2017, 8, 3)); const date2 = new Date(Date.UTC(2015, 9, 4)); @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/date/date.component.ts b/desktop/src/@batch-flask/ui/date/date.component.ts index 91f1438ccf..08f55e4894 100644 --- a/desktop/src/@batch-flask/ui/date/date.component.ts +++ b/desktop/src/@batch-flask/ui/date/date.component.ts @@ -8,6 +8,7 @@ import { BehaviorSubject, Subject, combineLatest } from "rxjs"; import { takeUntil } from "rxjs/operators"; @Component({ + standalone: false, selector: "bl-date", template: "{{formatedDate}}", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/date/date.module.ts b/desktop/src/@batch-flask/ui/date/date.module.ts index 0ebdddae38..ce9fd6761d 100644 --- a/desktop/src/@batch-flask/ui/date/date.module.ts +++ b/desktop/src/@batch-flask/ui/date/date.module.ts @@ -9,7 +9,6 @@ const privateComponents = []; imports: [CommonModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class DateModule { } diff --git a/desktop/src/@batch-flask/ui/datetime-picker/datetime-picker.component.spec.ts b/desktop/src/@batch-flask/ui/datetime-picker/datetime-picker.component.spec.ts index caadc69f06..4063617624 100644 --- a/desktop/src/@batch-flask/ui/datetime-picker/datetime-picker.component.spec.ts +++ b/desktop/src/@batch-flask/ui/datetime-picker/datetime-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { MatNativeDateModule } from "@angular/material/core"; import { MatDatepickerModule } from "@angular/material/datepicker"; import { By } from "@angular/platform-browser"; @@ -10,10 +10,11 @@ import { updateInput } from "test/utils/helpers"; import { DatetimePickerComponent } from "./datetime-picker.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public control = new FormControl(); + public control = new UntypedFormControl(); } describe("DatetimePickerComponent", () => { @@ -41,7 +42,7 @@ describe("DatetimePickerComponent", () => { de = fixture.debugElement.query(By.css("bl-datetime-picker")); fixture.detectChanges(); - timezoneService = TestBed.get(TimeZoneService); + timezoneService = TestBed.inject(TimeZoneService); dateInputEl = de.query(By.css("input[formControlName=date]")); timeInputEl = de.query(By.css("input[formControlName=time]")); diff --git a/desktop/src/@batch-flask/ui/datetime-picker/datetime-picker.component.ts b/desktop/src/@batch-flask/ui/datetime-picker/datetime-picker.component.ts index fee36ca605..4eead11c73 100644 --- a/desktop/src/@batch-flask/ui/datetime-picker/datetime-picker.component.ts +++ b/desktop/src/@batch-flask/ui/datetime-picker/datetime-picker.component.ts @@ -1,8 +1,8 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, forwardRef } from "@angular/core"; import { ControlValueAccessor, - FormBuilder, - FormGroup, + UntypedFormBuilder, + UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; @@ -19,6 +19,7 @@ let idCounter = 0; * DatetimePickerComponent is used in schedule of job schedule */ @Component({ + standalone: false, selector: "bl-datetime-picker", templateUrl: "datetime-picker.html", providers: [ @@ -32,7 +33,7 @@ export class DatetimePickerComponent implements ControlValueAccessor, OnDestroy @Input() public label: string; @Input() public timePicker: boolean = true; - public datetime: FormGroup; + public datetime: UntypedFormGroup; public currentTimeZone: TimeZone; private _datetime = null; @@ -42,7 +43,7 @@ export class DatetimePickerComponent implements ControlValueAccessor, OnDestroy constructor( private changeDetector: ChangeDetectorRef, private timezoneService: TimeZoneService, - formBuilder: FormBuilder, + formBuilder: UntypedFormBuilder, ) { this.timezoneService.current.pipe(takeUntil(this._destroy)).subscribe((current) => { this.currentTimeZone = current; diff --git a/desktop/src/@batch-flask/ui/datetime-picker/datetime-picker.module.ts b/desktop/src/@batch-flask/ui/datetime-picker/datetime-picker.module.ts index e3a8c19375..a0455b7409 100644 --- a/desktop/src/@batch-flask/ui/datetime-picker/datetime-picker.module.ts +++ b/desktop/src/@batch-flask/ui/datetime-picker/datetime-picker.module.ts @@ -12,7 +12,6 @@ const privateComponents = []; imports: [CommonModule, MatDatepickerModule, FormsModule, ReactiveFormsModule, I18nUIModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class DatetimePickerModule { } diff --git a/desktop/src/@batch-flask/ui/dialogs/confirmation-dialog.component.ts b/desktop/src/@batch-flask/ui/dialogs/confirmation-dialog.component.ts index 9462771c52..b1318a645c 100644 --- a/desktop/src/@batch-flask/ui/dialogs/confirmation-dialog.component.ts +++ b/desktop/src/@batch-flask/ui/dialogs/confirmation-dialog.component.ts @@ -6,6 +6,7 @@ import { AsyncSubject, Observable } from "rxjs"; import "./confirmation-dialog.scss"; @Component({ + standalone: false, selector: "bl-confirmation-dialog", templateUrl: "confirmation-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/dialogs/confirmation-dialog.ts b/desktop/src/@batch-flask/ui/dialogs/confirmation-dialog.ts index db9715bb2d..3e39da6c63 100644 --- a/desktop/src/@batch-flask/ui/dialogs/confirmation-dialog.ts +++ b/desktop/src/@batch-flask/ui/dialogs/confirmation-dialog.ts @@ -1,7 +1,7 @@ import { Directive } from "@angular/core"; import { AsyncSubject, Observable } from "rxjs"; -@Directive() +@Directive({ standalone: false }) // eslint-disable-next-line @angular-eslint/directive-class-suffix export class ConfirmationDialog { public onSubmit: Observable; diff --git a/desktop/src/@batch-flask/ui/dialogs/dialogs.module.ts b/desktop/src/@batch-flask/ui/dialogs/dialogs.module.ts index 101eb5a2d1..33f9ee08c5 100644 --- a/desktop/src/@batch-flask/ui/dialogs/dialogs.module.ts +++ b/desktop/src/@batch-flask/ui/dialogs/dialogs.module.ts @@ -25,10 +25,6 @@ import { DialogService } from "./dialog.service"; FormModule, I18nUIModule, ], - entryComponents: [ - ConfirmationDialogComponent, - PromptDialogComponent, - ], providers: [ DialogService, // This needs to be here otherwise entry components in lazy loaded doesn't work ], diff --git a/desktop/src/@batch-flask/ui/dialogs/prompt/prompt-dialog.component.ts b/desktop/src/@batch-flask/ui/dialogs/prompt/prompt-dialog.component.ts index d025547974..deb3145f59 100644 --- a/desktop/src/@batch-flask/ui/dialogs/prompt/prompt-dialog.component.ts +++ b/desktop/src/@batch-flask/ui/dialogs/prompt/prompt-dialog.component.ts @@ -1,11 +1,12 @@ import { ChangeDetectionStrategy, Component } from "@angular/core"; -import { AsyncValidatorFn, FormControl, FormGroup, ValidatorFn } from "@angular/forms"; +import { AsyncValidatorFn, UntypedFormControl, UntypedFormGroup, ValidatorFn } from "@angular/forms"; import { MatDialogRef } from "@angular/material/dialog"; import { autobind } from "@batch-flask/core"; import { AsyncSubject, Observable } from "rxjs"; import { ValidatorMessage } from "../dialog.service"; @Component({ + standalone: false, selector: "bl-prompt-dialog", templateUrl: "prompt-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -14,8 +15,8 @@ export class PromptDialogComponent { public title: string; public description: string; public execute: (value: string) => Observable; - public promptControl = new FormControl(); - public form: FormGroup; + public promptControl = new UntypedFormControl(); + public form: UntypedFormGroup; public validatorMessages: ValidatorMessage[]; public set validator(validator: ValidatorFn | ValidatorFn[] | null) { @@ -29,7 +30,7 @@ export class PromptDialogComponent { constructor(public dialogRef: MatDialogRef) { this.response.next(null); - this.form = new FormGroup({ + this.form = new UntypedFormGroup({ prompt: this.promptControl, }); } diff --git a/desktop/src/@batch-flask/ui/dropdown/dropdown.component.spec.ts b/desktop/src/@batch-flask/ui/dropdown/dropdown.component.spec.ts index 862d902a67..f7c6c6f2da 100644 --- a/desktop/src/@batch-flask/ui/dropdown/dropdown.component.spec.ts +++ b/desktop/src/@batch-flask/ui/dropdown/dropdown.component.spec.ts @@ -37,10 +37,12 @@ describe("DropdownComponent", () => { }); }); -@Component({ template: `` }) +@Component({ + standalone: false, template: `` }) class TestComponent { } @Component({ + standalone: false, template: `
Button
` diff --git a/desktop/src/@batch-flask/ui/dropdown/dropdown.component.ts b/desktop/src/@batch-flask/ui/dropdown/dropdown.component.ts index d7f529ce08..12e7574290 100644 --- a/desktop/src/@batch-flask/ui/dropdown/dropdown.component.ts +++ b/desktop/src/@batch-flask/ui/dropdown/dropdown.component.ts @@ -6,6 +6,7 @@ import { I18nService } from "@batch-flask/core"; import "./dropdown.scss"; @Component({ + standalone: false, selector: "bl-dropdown", templateUrl: "dropdown.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/duration-picker/duration-picker.component.spec.ts b/desktop/src/@batch-flask/ui/duration-picker/duration-picker.component.spec.ts index 18f27c241a..b964588a21 100644 --- a/desktop/src/@batch-flask/ui/duration-picker/duration-picker.component.spec.ts +++ b/desktop/src/@batch-flask/ui/duration-picker/duration-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { I18nTestingModule } from "@batch-flask/core/testing"; import { SelectComponent } from "@batch-flask/ui"; @@ -11,6 +11,7 @@ import { DurationPickerComponent, DurationUnit } from "./duration-picker.compone import { DurationPickerModule } from "./duration-picker.module"; @Component({ + standalone: false, template: ` (); + public control = new UntypedFormControl(); } @Component({ + standalone: false, template: ` (); + public control = new UntypedFormControl(); public default = "7"; } diff --git a/desktop/src/@batch-flask/ui/duration-picker/duration-picker.component.ts b/desktop/src/@batch-flask/ui/duration-picker/duration-picker.component.ts index f22c449723..db04b21817 100644 --- a/desktop/src/@batch-flask/ui/duration-picker/duration-picker.component.ts +++ b/desktop/src/@batch-flask/ui/duration-picker/duration-picker.component.ts @@ -49,6 +49,7 @@ let nextUniqueId = 0; * to server. This picker also includes a 'unlimited' mode which set current duration to null */ @Component({ + standalone: false, selector: "bl-duration-picker", templateUrl: "duration-picker.html", providers: [ diff --git a/desktop/src/@batch-flask/ui/duration-picker/duration-picker.module.ts b/desktop/src/@batch-flask/ui/duration-picker/duration-picker.module.ts index 6699630e57..63437f96ac 100644 --- a/desktop/src/@batch-flask/ui/duration-picker/duration-picker.module.ts +++ b/desktop/src/@batch-flask/ui/duration-picker/duration-picker.module.ts @@ -15,7 +15,6 @@ const privateComponents = []; imports: [CommonModule, FormsModule, SelectModule, FormModule, I18nUIModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class DurationPickerModule { } diff --git a/desktop/src/@batch-flask/ui/editor/editor.component.ts b/desktop/src/@batch-flask/ui/editor/editor.component.ts index 185d1cbf30..425b943262 100644 --- a/desktop/src/@batch-flask/ui/editor/editor.component.ts +++ b/desktop/src/@batch-flask/ui/editor/editor.component.ts @@ -3,7 +3,7 @@ import { EventEmitter, HostListener, Input, OnChanges, OnDestroy, Output, ViewChild, forwardRef, } from "@angular/core"; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; -import * as elementResizeDetectorMaker from "element-resize-detector"; +import elementResizeDetectorMaker from "element-resize-detector"; import type { Uri, editor, IDisposable } from "monaco-editor"; import "./editor.scss"; @@ -28,6 +28,7 @@ const defaultConfig = { }; @Component({ + standalone: false, selector: "bl-editor", providers: [ { diff --git a/desktop/src/@batch-flask/ui/entity-commands-list/button/entity-command-button.component.spec.ts b/desktop/src/@batch-flask/ui/entity-commands-list/button/entity-command-button.component.spec.ts index 601ed06b31..e41b7099bc 100644 --- a/desktop/src/@batch-flask/ui/entity-commands-list/button/entity-command-button.component.spec.ts +++ b/desktop/src/@batch-flask/ui/entity-commands-list/button/entity-command-button.component.spec.ts @@ -26,6 +26,7 @@ interface MockCommandOptions { } @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/entity-commands-list/button/entity-command-button.component.ts b/desktop/src/@batch-flask/ui/entity-commands-list/button/entity-command-button.component.ts index 247bb3a4da..dd28cd4f89 100644 --- a/desktop/src/@batch-flask/ui/entity-commands-list/button/entity-command-button.component.ts +++ b/desktop/src/@batch-flask/ui/entity-commands-list/button/entity-command-button.component.ts @@ -14,6 +14,7 @@ import { WorkspaceService } from "@batch-flask/ui/workspace"; import { Subscription } from "rxjs"; @Component({ + standalone: false, selector: "bl-entity-command-button", templateUrl: "entity-command-button.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/entity-commands-list/entity-commands-list.component.ts b/desktop/src/@batch-flask/ui/entity-commands-list/entity-commands-list.component.ts index 7af0d0178c..596eb52c8c 100644 --- a/desktop/src/@batch-flask/ui/entity-commands-list/entity-commands-list.component.ts +++ b/desktop/src/@batch-flask/ui/entity-commands-list/entity-commands-list.component.ts @@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component, Input } from "@angular/core"; import { EntityCommand, EntityCommands } from "../entity-commands"; @Component({ + standalone: false, selector: "bl-commands-list", templateUrl: "entity-commands-list.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/entity-commands-list/entity-commands-list.module.ts b/desktop/src/@batch-flask/ui/entity-commands-list/entity-commands-list.module.ts index be7ae7d4fa..21ec578e83 100644 --- a/desktop/src/@batch-flask/ui/entity-commands-list/entity-commands-list.module.ts +++ b/desktop/src/@batch-flask/ui/entity-commands-list/entity-commands-list.module.ts @@ -16,7 +16,6 @@ const privateComponents = [ imports: [CommonModule, ButtonsModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class EntityCommandsListModule { } diff --git a/desktop/src/@batch-flask/ui/entity-commands/entity-command.spec.ts b/desktop/src/@batch-flask/ui/entity-commands/entity-command.spec.ts index b24b7a5058..f126eb1fda 100644 --- a/desktop/src/@batch-flask/ui/entity-commands/entity-command.spec.ts +++ b/desktop/src/@batch-flask/ui/entity-commands/entity-command.spec.ts @@ -49,7 +49,7 @@ describe("EntityCommand", () => { }); injector = TestBed.inject(Injector); - telemetryServiceSpy = TestBed.get(TelemetryService); + telemetryServiceSpy = TestBed.inject(TelemetryService); }); function newCommand(options: EntityCommandAttributes) { diff --git a/desktop/src/@batch-flask/ui/file/download-folder-dialog/download-folder-dialog.component.ts b/desktop/src/@batch-flask/ui/file/download-folder-dialog/download-folder-dialog.component.ts index b6fcce7cb7..ba79f0da77 100644 --- a/desktop/src/@batch-flask/ui/file/download-folder-dialog/download-folder-dialog.component.ts +++ b/desktop/src/@batch-flask/ui/file/download-folder-dialog/download-folder-dialog.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { MatDialogRef } from "@angular/material/dialog"; import { autobind } from "@batch-flask/core"; import { ElectronShell, FileSystemService } from "@batch-flask/electron"; @@ -7,7 +7,7 @@ import { Activity, ActivityService } from "@batch-flask/ui/activity"; import { FileNavigator } from "@batch-flask/ui/file/file-navigator"; import { SecureUtils } from "@batch-flask/utils"; import { List } from "immutable"; -import * as minimatch from "minimatch"; +import minimatch from "minimatch"; import * as path from "path"; import { Observable, forkJoin, from, of } from "rxjs"; import { flatMap, map, reduce } from "rxjs/operators"; @@ -15,6 +15,7 @@ import { flatMap, map, reduce } from "rxjs/operators"; import "./download-folder-dialog.scss"; @Component({ + standalone: false, selector: "bl-download-folder-dialog", templateUrl: "download-folder-dialog.html", }) @@ -28,8 +29,8 @@ export class DownloadFolderComponent { } public get navigator() { return this._navigator; } - public patterns = new FormControl("**/*"); - public downloadFolder = new FormControl(""); + public patterns = new UntypedFormControl("**/*"); + public downloadFolder = new UntypedFormControl(""); public subfolder: string = ""; /** * Folder to download. Leave blank to download all files under navigator diff --git a/desktop/src/@batch-flask/ui/file/file-explorer/file-explorer-tabs/file-explorer-tabs.component.spec.ts b/desktop/src/@batch-flask/ui/file/file-explorer/file-explorer-tabs/file-explorer-tabs.component.spec.ts index 66cdf30be6..a4f3ce58f7 100644 --- a/desktop/src/@batch-flask/ui/file/file-explorer/file-explorer-tabs/file-explorer-tabs.component.spec.ts +++ b/desktop/src/@batch-flask/ui/file/file-explorer/file-explorer-tabs/file-explorer-tabs.component.spec.ts @@ -9,6 +9,7 @@ import { CurrentNode, FileExplorerWorkspace } from "../file-explorer-workspace"; import { FileExplorerTabsComponent } from "./file-explorer-tabs.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/file/file-explorer/file-explorer-tabs/file-explorer-tabs.component.ts b/desktop/src/@batch-flask/ui/file/file-explorer/file-explorer-tabs/file-explorer-tabs.component.ts index ad27dc6a37..2766b889f6 100644 --- a/desktop/src/@batch-flask/ui/file/file-explorer/file-explorer-tabs/file-explorer-tabs.component.ts +++ b/desktop/src/@batch-flask/ui/file/file-explorer/file-explorer-tabs/file-explorer-tabs.component.ts @@ -25,6 +25,7 @@ interface Tab { } @Component({ + standalone: false, selector: "bl-file-explorer-tabs", templateUrl: "file-explorer-tabs.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/file/file-explorer/file-explorer.component.ts b/desktop/src/@batch-flask/ui/file/file-explorer/file-explorer.component.ts index f985daa39c..db6d5fc12e 100644 --- a/desktop/src/@batch-flask/ui/file/file-explorer/file-explorer.component.ts +++ b/desktop/src/@batch-flask/ui/file/file-explorer/file-explorer.component.ts @@ -71,6 +71,7 @@ const fileExplorerDefaultConfig: FileExplorerConfig = { * File explorer is a combination of the tree view and the file preview. */ @Component({ + standalone: false, selector: "bl-file-explorer", templateUrl: "file-explorer.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/file/file-explorer/file-table-view/file-path-navigator/file-path-navigator.component.spec.ts b/desktop/src/@batch-flask/ui/file/file-explorer/file-table-view/file-path-navigator/file-path-navigator.component.spec.ts index 244ce71ac1..47db0ab5e2 100644 --- a/desktop/src/@batch-flask/ui/file/file-explorer/file-table-view/file-path-navigator/file-path-navigator.component.spec.ts +++ b/desktop/src/@batch-flask/ui/file/file-explorer/file-table-view/file-path-navigator/file-path-navigator.component.spec.ts @@ -2,7 +2,8 @@ import { DOWN_ARROW } from "@angular/cdk/keycodes"; import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; import { ReactiveFormsModule } from "@angular/forms"; -import { MatAutocompleteModule, MatAutocompleteTrigger, _MatAutocompleteBase } from "@angular/material/autocomplete"; +import { MatAutocompleteModule, MatAutocompleteTrigger } from "@angular/material/autocomplete"; +import { _MatAutocompleteBase } from "@angular/material/autocomplete"; import { By } from "@angular/platform-browser"; import { KeyCode } from "@batch-flask/core/keys"; import { I18nTestingModule } from "@batch-flask/core/testing"; @@ -23,6 +24,7 @@ const files = [ ]; @Component({ + standalone: false, template: ` diff --git a/desktop/src/@batch-flask/ui/file/file-explorer/file-table-view/file-path-navigator/file-path-navigator.component.ts b/desktop/src/@batch-flask/ui/file/file-explorer/file-table-view/file-path-navigator/file-path-navigator.component.ts index b93cf224c2..48ee39de14 100644 --- a/desktop/src/@batch-flask/ui/file/file-explorer/file-table-view/file-path-navigator/file-path-navigator.component.ts +++ b/desktop/src/@batch-flask/ui/file/file-explorer/file-table-view/file-path-navigator/file-path-navigator.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostListener, Input, OnChanges, OnDestroy, OnInit, Output, ViewChild, } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from "@angular/material/autocomplete"; import { KeyCode } from "@batch-flask/core/keys"; import { FileNavigator } from "@batch-flask/ui/file/file-navigator"; @@ -16,6 +16,7 @@ import "./file-path-navigator.scss"; const AUTOCOMPLETE_LIMIT = 5; @Component({ + standalone: false, selector: "bl-file-path-navigator", templateUrl: "file-path-navigator.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -38,7 +39,7 @@ export class FilePathNavigatorComponent implements OnInit, OnChanges, OnDestroy */ @Output() public navigate = new EventEmitter(); - public control = new FormControl(""); + public control = new UntypedFormControl(""); public availablePaths: List = List([]); @ViewChild(MatAutocompleteTrigger, { static: false }) public _autocomplete: MatAutocompleteTrigger; diff --git a/desktop/src/@batch-flask/ui/file/file-explorer/file-table-view/file-table-view.component.ts b/desktop/src/@batch-flask/ui/file/file-explorer/file-table-view/file-table-view.component.ts index 0f560cad50..fc0307038f 100644 --- a/desktop/src/@batch-flask/ui/file/file-explorer/file-table-view/file-table-view.component.ts +++ b/desktop/src/@batch-flask/ui/file/file-explorer/file-table-view/file-table-view.component.ts @@ -9,6 +9,7 @@ import { FileDropEvent } from "../file-explorer.component"; import "./file-table-view.scss"; @Component({ + standalone: false, selector: "bl-file-table-view", templateUrl: "file-table-view.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/file/file-explorer/file-tree-view/file-tree-view-row/file-tree-view-row.component.ts b/desktop/src/@batch-flask/ui/file/file-explorer/file-tree-view/file-tree-view-row/file-tree-view-row.component.ts index 6a00bb3642..05e29a5c2d 100644 --- a/desktop/src/@batch-flask/ui/file/file-explorer/file-tree-view/file-tree-view-row/file-tree-view-row.component.ts +++ b/desktop/src/@batch-flask/ui/file/file-explorer/file-tree-view/file-tree-view-row/file-tree-view-row.component.ts @@ -6,6 +6,7 @@ import { TreeRow } from ".."; import "./file-tree-view-row.scss"; @Component({ + standalone: false, selector: "bl-file-tree-view-row", templateUrl: "file-tree-view-row.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/file/file-explorer/file-tree-view/file-tree-view.component.spec.ts b/desktop/src/@batch-flask/ui/file/file-explorer/file-tree-view/file-tree-view.component.spec.ts index a4490d54c1..4275ab4b4b 100644 --- a/desktop/src/@batch-flask/ui/file/file-explorer/file-tree-view/file-tree-view.component.spec.ts +++ b/desktop/src/@batch-flask/ui/file/file-explorer/file-tree-view/file-tree-view.component.spec.ts @@ -31,6 +31,7 @@ const files = [ new File({ name: "package-lock.json", properties: {} }), ]; @Component({ + standalone: false, template: ` `, }) class TestComponent { @@ -77,7 +78,6 @@ describe("FileViewerContainerComponent", () => { }); TestBed.overrideModule(BrowserDynamicTestingModule, { set: { - entryComponents: [ImageFileViewerComponent], }, }); fixture = TestBed.createComponent(TestComponent); diff --git a/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer-container/file-viewer-container.component.ts b/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer-container/file-viewer-container.component.ts index c11c74f9ed..3a6c39929a 100644 --- a/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer-container/file-viewer-container.component.ts +++ b/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer-container/file-viewer-container.component.ts @@ -2,7 +2,6 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, - ComponentFactoryResolver, ComponentRef, Input, OnChanges, @@ -26,6 +25,7 @@ const defaultConfig: FileViewerConfig = Object.freeze({ }); @Component({ + standalone: false, selector: "bl-file-viewer-container", templateUrl: "file-viewer-container.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -55,7 +55,6 @@ export class FileViewerContainerComponent implements OnChanges, OnDestroy { private _viewerContainer: ViewContainerRef; constructor( - private resolver: ComponentFactoryResolver, private fileAssociationService: FileTypeAssociationService, private changeDetector: ChangeDetectorRef) { } @@ -146,8 +145,7 @@ export class FileViewerContainerComponent implements OnChanges, OnDestroy { } this._clearViewer(); if (!this.componentType) { return; } - const componentFactory = this.resolver.resolveComponentFactory(this.componentType); - const ref = this.viewRef = this._viewerContainer.createComponent(componentFactory); + const ref = this.viewRef = this._viewerContainer.createComponent(this.componentType); ref.instance.fileLoader = this.fileLoader; ref.instance.config = this.config; } diff --git a/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer-container/file-viewer-header/file-viewer-header.component.spec.ts b/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer-container/file-viewer-header/file-viewer-header.component.spec.ts index c05f653a85..4e40d7d38b 100644 --- a/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer-container/file-viewer-header/file-viewer-header.component.spec.ts +++ b/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer-container/file-viewer-header/file-viewer-header.component.spec.ts @@ -16,6 +16,7 @@ import { FileViewerConfig } from "../../file-viewer"; import { FileViewerHeaderComponent } from "./file-viewer-header.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer-container/file-viewer-header/file-viewer-header.component.ts b/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer-container/file-viewer-header/file-viewer-header.component.ts index ee7dad72a2..87d9d2dc95 100644 --- a/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer-container/file-viewer-header/file-viewer-header.component.ts +++ b/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer-container/file-viewer-header/file-viewer-header.component.ts @@ -12,6 +12,7 @@ import { FileViewer, FileViewerCommand, FileViewerConfig } from "../../file-view import "./file-viewer-header.scss"; @Component({ + standalone: false, selector: "bl-file-viewer-header", templateUrl: "file-viewer-header.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer.module.ts b/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer.module.ts index a01cb69e23..3c1f7501dd 100644 --- a/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer.module.ts +++ b/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer.module.ts @@ -38,12 +38,6 @@ const publicComponents = [ I18nUIModule, DateModule, ], - entryComponents: [ - FileDialogViewerComponent, - LogFileViewerComponent, - ImageFileViewerComponent, - TextFileViewerComponent, - ], }) export class FileViewerModule { diff --git a/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer/file-viewer.ts b/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer/file-viewer.ts index 6b8814ec63..cc6133bb5a 100644 --- a/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer/file-viewer.ts +++ b/desktop/src/@batch-flask/ui/file/file-viewer/file-viewer/file-viewer.ts @@ -25,7 +25,7 @@ export interface FileViewerConfig { /** * Generic file viewer */ -@Directive() +@Directive({ standalone: false }) // eslint-disable-next-line @angular-eslint/directive-class-suffix export abstract class FileViewer implements OnDestroy { /** diff --git a/desktop/src/@batch-flask/ui/file/file-viewer/image-file-viewer/image-file-viewer.component.spec.ts b/desktop/src/@batch-flask/ui/file/file-viewer/image-file-viewer/image-file-viewer.component.spec.ts index 29bf0452fc..26b485e292 100644 --- a/desktop/src/@batch-flask/ui/file/file-viewer/image-file-viewer/image-file-viewer.component.spec.ts +++ b/desktop/src/@batch-flask/ui/file/file-viewer/image-file-viewer/image-file-viewer.component.spec.ts @@ -6,6 +6,7 @@ import { Subject, of } from "rxjs"; import { ImageFileViewerComponent } from "./image-file-viewer.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/file/file-viewer/image-file-viewer/image-file-viewer.component.ts b/desktop/src/@batch-flask/ui/file/file-viewer/image-file-viewer/image-file-viewer.component.ts index a2c62e2c3a..3c0bdcee7b 100644 --- a/desktop/src/@batch-flask/ui/file/file-viewer/image-file-viewer/image-file-viewer.component.ts +++ b/desktop/src/@batch-flask/ui/file/file-viewer/image-file-viewer/image-file-viewer.component.ts @@ -5,6 +5,7 @@ import { FileViewer } from "../file-viewer"; import "./image-file-viewer.scss"; @Component({ + standalone: false, selector: "bl-image-file-viewer", templateUrl: "image-file-viewer.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/file/file-viewer/log-file-viewer/log-file-viewer.component.spec.ts b/desktop/src/@batch-flask/ui/file/file-viewer/log-file-viewer/log-file-viewer.component.spec.ts index 60fd2ba5d5..79f2872dd5 100644 --- a/desktop/src/@batch-flask/ui/file/file-viewer/log-file-viewer/log-file-viewer.component.spec.ts +++ b/desktop/src/@batch-flask/ui/file/file-viewer/log-file-viewer/log-file-viewer.component.spec.ts @@ -9,6 +9,7 @@ import { FileViewerConfig } from "../file-viewer"; import { LogFileViewerComponent } from "./log-file-viewer.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/file/file-viewer/log-file-viewer/log-file-viewer.component.ts b/desktop/src/@batch-flask/ui/file/file-viewer/log-file-viewer/log-file-viewer.component.ts index e2826fe705..eb0ac67a19 100644 --- a/desktop/src/@batch-flask/ui/file/file-viewer/log-file-viewer/log-file-viewer.component.ts +++ b/desktop/src/@batch-flask/ui/file/file-viewer/log-file-viewer/log-file-viewer.component.ts @@ -15,6 +15,7 @@ import { FileViewer } from "../file-viewer"; import "./log-file-viewer.scss"; @Component({ + standalone: false, selector: "bl-log-file-viewer", templateUrl: "log-file-viewer.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/file/file-viewer/text-file-viewer/text-file-viewer.component.spec.ts b/desktop/src/@batch-flask/ui/file/file-viewer/text-file-viewer/text-file-viewer.component.spec.ts index eb55a9a8c0..7c8e201eeb 100644 --- a/desktop/src/@batch-flask/ui/file/file-viewer/text-file-viewer/text-file-viewer.component.spec.ts +++ b/desktop/src/@batch-flask/ui/file/file-viewer/text-file-viewer/text-file-viewer.component.spec.ts @@ -9,6 +9,7 @@ import { Subject, of } from "rxjs"; import { TextFileViewerComponent } from "./text-file-viewer.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/file/file-viewer/text-file-viewer/text-file-viewer.component.ts b/desktop/src/@batch-flask/ui/file/file-viewer/text-file-viewer/text-file-viewer.component.ts index 2c89aa7123..52ab1fc31e 100644 --- a/desktop/src/@batch-flask/ui/file/file-viewer/text-file-viewer/text-file-viewer.component.ts +++ b/desktop/src/@batch-flask/ui/file/file-viewer/text-file-viewer/text-file-viewer.component.ts @@ -7,6 +7,7 @@ import { FileViewer } from "../file-viewer"; import "./text-file-viewer.scss"; @Component({ + standalone: false, selector: "bl-text-file-viewer", templateUrl: "text-file-viewer.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/file/file.module.ts b/desktop/src/@batch-flask/ui/file/file.module.ts index 0e0de120c9..b1a8c4a1bb 100644 --- a/desktop/src/@batch-flask/ui/file/file.module.ts +++ b/desktop/src/@batch-flask/ui/file/file.module.ts @@ -20,9 +20,6 @@ const publicModules = [ declarations: [...privateComponents, ...publicComponents], exports: [...publicModules, ...publicComponents], imports: [FormModule, FormsModule, ReactiveFormsModule, ButtonsModule, ...publicModules], - entryComponents: [ - DownloadFolderComponent, - ], }) export class FileModule { } diff --git a/desktop/src/@batch-flask/ui/focus-section/focus-section.component.ts b/desktop/src/@batch-flask/ui/focus-section/focus-section.component.ts index 6665677389..bb91aa023b 100644 --- a/desktop/src/@batch-flask/ui/focus-section/focus-section.component.ts +++ b/desktop/src/@batch-flask/ui/focus-section/focus-section.component.ts @@ -1,6 +1,7 @@ import { Component, ElementRef, EventEmitter, HostBinding, HostListener, Output } from "@angular/core"; @Component({ + standalone: false, selector: "bl-focus-section", template: ` diff --git a/desktop/src/@batch-flask/ui/form/complex-form/complex-form.component.spec.ts b/desktop/src/@batch-flask/ui/form/complex-form/complex-form.component.spec.ts index 13e5589060..e6dbfb0330 100644 --- a/desktop/src/@batch-flask/ui/form/complex-form/complex-form.component.spec.ts +++ b/desktop/src/@batch-flask/ui/form/complex-form/complex-form.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement, NO_ERRORS_SCHEMA, ViewChild } from "@angular/core"; import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, FormsModule, ReactiveFormsModule, Validators } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { ServerError, autobind } from "@batch-flask/core"; import { I18nTestingModule } from "@batch-flask/core/testing"; @@ -17,6 +17,7 @@ import { click } from "test/utils/helpers"; const date = new Date(2017, 9, 13, 23, 43, 38); @Component({ + standalone: false, template: ` @@ -41,7 +42,7 @@ export class FormTestComponent { @ViewChild("banner", { static: false }) public createForm: ComplexFormComponent; - public form: FormGroup; + public form: UntypedFormGroup; public sidebarRef = { destroy: jasmine.createSpy("sidebarRef.destroy"), @@ -49,7 +50,7 @@ export class FormTestComponent { public submitSpy = jasmine.createSpy("submit"); - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ id: ["", Validators.required], state: [""], diff --git a/desktop/src/@batch-flask/ui/form/complex-form/complex-form.component.ts b/desktop/src/@batch-flask/ui/form/complex-form/complex-form.component.ts index 8ae3a360ae..3b98142e38 100644 --- a/desktop/src/@batch-flask/ui/form/complex-form/complex-form.component.ts +++ b/desktop/src/@batch-flask/ui/form/complex-form/complex-form.component.ts @@ -12,7 +12,7 @@ import { Type, ViewChild, } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { AsyncTask, Dto, ServerError, autobind } from "@batch-flask/core"; import { SanitizedError, log } from "@batch-flask/utils"; import { validJsonConfig } from "@batch-flask/utils/validators"; @@ -43,6 +43,7 @@ export const defaultComplexFormConfig: ComplexFormConfig = { }; @Component({ + standalone: false, selector: "bl-complex-form", templateUrl: "complex-form.html", }) @@ -87,7 +88,7 @@ export class ComplexFormComponent extends FormBase implements AfterViewInit, OnC public mainPage: FormPageComponent; public currentPage: FormPageComponent; public showJsonEditor = false; - public jsonValue = new FormControl(null, null, validJsonConfig); + public jsonValue = new UntypedFormControl(null, null, validJsonConfig); public waitingForAsyncTask = false; public asyncTaskList: AsyncTask[]; public actionConfig: FormActionConfig; diff --git a/desktop/src/@batch-flask/ui/form/complex-form/footer/form-footer.component.ts b/desktop/src/@batch-flask/ui/form/complex-form/footer/form-footer.component.ts index 71ab283c8c..b0dc8da566 100644 --- a/desktop/src/@batch-flask/ui/form/complex-form/footer/form-footer.component.ts +++ b/desktop/src/@batch-flask/ui/form/complex-form/footer/form-footer.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnChanges, OnDestroy, Output, forwardRef, } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { AsyncTask, ServerError } from "@batch-flask/core"; import { FormPageComponent } from "@batch-flask/ui/form/form-page"; import { Subscription } from "rxjs"; @@ -43,6 +43,7 @@ const defaultActionConfig: FormActionConfig = { }; @Component({ + standalone: false, selector: "bl-form-footer", templateUrl: "form-footer.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -55,7 +56,7 @@ export class FormFooterComponent implements OnChanges, OnDestroy { this._actionConfig = { ...defaultActionConfig, ...actionConfig }; } public get actionConfig() { return this._actionConfig; } - @Input() public jsonValue: FormControl; + @Input() public jsonValue: UntypedFormControl; @Input() public showJsonEditor: boolean; @Input() public currentPage: FormPageComponent; @Input() public error: ServerError; diff --git a/desktop/src/@batch-flask/ui/form/editable-table/editable-table-column.component.ts b/desktop/src/@batch-flask/ui/form/editable-table/editable-table-column.component.ts index 9ef95d33ef..897da7c8cf 100644 --- a/desktop/src/@batch-flask/ui/form/editable-table/editable-table-column.component.ts +++ b/desktop/src/@batch-flask/ui/form/editable-table/editable-table-column.component.ts @@ -25,6 +25,7 @@ export type PipeableSelectOptions = OperatorFunction, string[]>; export type EditableTableSelectOptions = string[] | List | (() => PipeableSelectOptions); @Component({ + standalone: false, selector: "bl-editable-table-column", template: ``, }) diff --git a/desktop/src/@batch-flask/ui/form/editable-table/editable-table.component.spec.ts b/desktop/src/@batch-flask/ui/form/editable-table/editable-table.component.spec.ts index 7c6075740d..3fc8b8632e 100644 --- a/desktop/src/@batch-flask/ui/form/editable-table/editable-table.component.spec.ts +++ b/desktop/src/@batch-flask/ui/form/editable-table/editable-table.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { ENTER, KeyCode } from "@batch-flask/core/keys"; import { I18nTestingModule } from "@batch-flask/core/testing"; @@ -12,6 +12,7 @@ import { click, createKeyboardEvent, updateInput } from "test/utils/helpers"; import { EditableTableSelectCellComponent } from "./select-cell"; @Component({ + standalone: false, template: ` Key @@ -20,7 +21,7 @@ import { EditableTableSelectCellComponent } from "./select-cell"; `, }) class TestComponent { - public items = new FormControl([]); + public items = new UntypedFormControl([]); } describe("EditableTableComponent", () => { diff --git a/desktop/src/@batch-flask/ui/form/editable-table/editable-table.component.ts b/desktop/src/@batch-flask/ui/form/editable-table/editable-table.component.ts index 4af48c92ba..449dc1b08a 100644 --- a/desktop/src/@batch-flask/ui/form/editable-table/editable-table.component.ts +++ b/desktop/src/@batch-flask/ui/form/editable-table/editable-table.component.ts @@ -3,7 +3,7 @@ import { Component, ContentChildren, HostListener, Input, OnDestroy, QueryList, forwardRef, } from "@angular/core"; import { - ControlValueAccessor, FormArray, FormBuilder, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, + ControlValueAccessor, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, } from "@angular/forms"; import { ENTER } from "@batch-flask/core/keys"; import { ReplaySubject, Subject, combineLatest } from "rxjs"; @@ -13,6 +13,7 @@ import { EditableTableColumnComponent, EditableTableColumnType } from "./editabl import "./editable-table.scss"; @Component({ + standalone: false, selector: "bl-editable-table", templateUrl: "editable-table.html", providers: [ @@ -28,12 +29,12 @@ export class EditableTableComponent implements ControlValueAccessor, Validator, @ContentChildren(EditableTableColumnComponent) public columns: QueryList; public EditableTableColumnType = EditableTableColumnType; - public form: FormGroup; + public form: UntypedFormGroup; private _propagateChange: (items: any[]) => void; private _valueUpdated = new ReplaySubject(1); private _destroy = new Subject(); - constructor(private formBuilder: FormBuilder, private changeDetector: ChangeDetectorRef) { + constructor(private formBuilder: UntypedFormBuilder, private changeDetector: ChangeDetectorRef) { this.form = formBuilder.group({ items: this.formBuilder.array([]) }); } @@ -78,8 +79,8 @@ export class EditableTableComponent implements ControlValueAccessor, Validator, } } - public get items(): FormArray { - return this.form.controls.items as FormArray; + public get items(): UntypedFormArray { + return this.form.controls.items as UntypedFormArray; } public addNewItem(columns: EditableTableColumnComponent[]) { @@ -108,7 +109,7 @@ export class EditableTableComponent implements ControlValueAccessor, Validator, // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } @@ -126,7 +127,7 @@ export class EditableTableComponent implements ControlValueAccessor, Validator, private _buildControlsFromValue(items: any[], columns: EditableTableColumnComponent[]) { if (Array.isArray(items) && items.length > 0) { - const controls: FormGroup[] = Object.values(this.items.controls).slice(0, items.length) as any; + const controls: UntypedFormGroup[] = Object.values(this.items.controls).slice(0, items.length) as any; if (controls.length < items.length) { for (const _ of items.slice(controls.length)) { controls.push(this._createEmptyRow(columns)); @@ -139,14 +140,14 @@ export class EditableTableComponent implements ControlValueAccessor, Validator, for (const [index, value] of items.entries()) { controls[index].patchValue(value); } - this.form.setControl("items", new FormArray(controls)); + this.form.setControl("items", new UntypedFormArray(controls)); } else { - this.form.setControl("items", new FormArray([this._createEmptyRow(columns)])); + this.form.setControl("items", new UntypedFormArray([this._createEmptyRow(columns)])); } this.changeDetector.markForCheck(); } - private _createEmptyRow(columns: EditableTableColumnComponent[]): FormGroup { + private _createEmptyRow(columns: EditableTableColumnComponent[]): UntypedFormGroup { const obj = {}; for (const column of columns) { obj[column.name] = [column.default]; diff --git a/desktop/src/@batch-flask/ui/form/editable-table/editable-table.module.ts b/desktop/src/@batch-flask/ui/form/editable-table/editable-table.module.ts index c257207a3e..1335f63e26 100644 --- a/desktop/src/@batch-flask/ui/form/editable-table/editable-table.module.ts +++ b/desktop/src/@batch-flask/ui/form/editable-table/editable-table.module.ts @@ -20,7 +20,6 @@ const privateComponents = [ imports: [CommonModule, I18nUIModule, FormsModule, ReactiveFormsModule, ButtonsModule, SelectModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class EditableTableModule { } diff --git a/desktop/src/@batch-flask/ui/form/editable-table/select-cell/editable-table-select-cell.component.ts b/desktop/src/@batch-flask/ui/form/editable-table/select-cell/editable-table-select-cell.component.ts index 3957e89862..834539f49c 100644 --- a/desktop/src/@batch-flask/ui/form/editable-table/select-cell/editable-table-select-cell.component.ts +++ b/desktop/src/@batch-flask/ui/form/editable-table/select-cell/editable-table-select-cell.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { log } from "@batch-flask/utils"; import { List } from "immutable"; import { BehaviorSubject, Subject, of } from "rxjs"; @@ -9,12 +9,13 @@ import { catchError, switchMap, takeUntil } from "rxjs/operators"; import { EditableTableSelectOptions } from "../editable-table-column.component"; @Component({ + standalone: false, selector: "bl-editable-table-select-cell", templateUrl: "editable-table-select-cell.html", changeDetection: ChangeDetectionStrategy.OnPush, }) export class EditableTableSelectCellComponent implements OnInit, OnChanges, OnDestroy { - @Input() public control: FormControl; + @Input() public control: UntypedFormControl; @Input() public options: EditableTableSelectOptions; @Input() public rowValue: StringMap; diff --git a/desktop/src/@batch-flask/ui/form/expanding-textarea/expanding-textarea.component.ts b/desktop/src/@batch-flask/ui/form/expanding-textarea/expanding-textarea.component.ts index 23510d3022..98a4bbf158 100644 --- a/desktop/src/@batch-flask/ui/form/expanding-textarea/expanding-textarea.component.ts +++ b/desktop/src/@batch-flask/ui/form/expanding-textarea/expanding-textarea.component.ts @@ -4,6 +4,7 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; import "./expanding-textarea.scss"; @Component({ + standalone: false, selector: "bl-expanding-textarea", templateUrl: "expanding-textarea.html", providers: [ diff --git a/desktop/src/@batch-flask/ui/form/form-base.ts b/desktop/src/@batch-flask/ui/form/form-base.ts index 7ef45da354..6b8d392266 100644 --- a/desktop/src/@batch-flask/ui/form/form-base.ts +++ b/desktop/src/@batch-flask/ui/form/form-base.ts @@ -1,5 +1,5 @@ import { Directive, EventEmitter, Input, Output } from "@angular/core"; -import { FormGroup } from "@angular/forms"; +import { UntypedFormGroup } from "@angular/forms"; import { MatDialogRef } from "@angular/material/dialog"; import { ServerError, autobind } from "@batch-flask/core"; import { SidebarRef } from "../sidebar"; @@ -12,7 +12,7 @@ export interface GenericContainer { destroy(); } -@Directive() +@Directive({ standalone: false }) // eslint-disable-next-line @angular-eslint/directive-class-suffix export class FormBase { @Output() public done = new EventEmitter(); @@ -26,7 +26,7 @@ export class FormBase { /** * Form group used in this form */ - @Input() public formGroup: FormGroup; + @Input() public formGroup: UntypedFormGroup; public loading = false; public error: ServerError = null; diff --git a/desktop/src/@batch-flask/ui/form/form-error/form-error.component.spec.ts b/desktop/src/@batch-flask/ui/form/form-error/form-error.component.spec.ts index a5d18a60cb..412404131c 100644 --- a/desktop/src/@batch-flask/ui/form/form-error/form-error.component.spec.ts +++ b/desktop/src/@batch-flask/ui/form/form-error/form-error.component.spec.ts @@ -1,9 +1,10 @@ import { Component, ViewChild } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, ReactiveFormsModule, Validators } from "@angular/forms"; import { FormErrorComponent } from "@batch-flask/ui/form/form-error"; @Component({ + standalone: false, template: `
@@ -27,9 +28,9 @@ export class FormErrorTestComponent { @ViewChild("osNameError", { static: false }) public osNameError: FormErrorComponent; - public form: FormGroup; + public form: UntypedFormGroup; - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ id: ["", [Validators.required, Validators.maxLength(5)]], os: formBuilder.group({ diff --git a/desktop/src/@batch-flask/ui/form/form-error/form-error.component.ts b/desktop/src/@batch-flask/ui/form/form-error/form-error.component.ts index 8f8271ffa3..ce609695c8 100644 --- a/desktop/src/@batch-flask/ui/form/form-error/form-error.component.ts +++ b/desktop/src/@batch-flask/ui/form/form-error/form-error.component.ts @@ -2,12 +2,13 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, Optional, } from "@angular/core"; -import { AbstractControl, ControlContainer, FormControl, FormGroupDirective } from "@angular/forms"; +import { AbstractControl, ControlContainer, UntypedFormControl, FormGroupDirective } from "@angular/forms"; import { SanitizedError } from "@batch-flask/utils"; import { Subscription } from "rxjs"; let idCounter = 0; @Component({ + standalone: false, selector: "bl-error", template: `
`, changeDetection: ChangeDetectionStrategy.OnPush, @@ -19,7 +20,7 @@ export class FormErrorComponent implements OnChanges, OnDestroy { * Form control. * Exclusive with controlName */ - @Input() public control: FormControl; + @Input() public control: UntypedFormControl; /** * Name of the control. diff --git a/desktop/src/@batch-flask/ui/form/form-field/form-field.component.spec.ts b/desktop/src/@batch-flask/ui/form/form-field/form-field.component.spec.ts index 9000cd486b..22184d8338 100644 --- a/desktop/src/@batch-flask/ui/form/form-field/form-field.component.spec.ts +++ b/desktop/src/@batch-flask/ui/form/form-field/form-field.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { FormErrorComponent } from "../form-error"; import { HintComponent } from "../hint"; @@ -8,6 +8,7 @@ import { InputDirective } from "../input"; import { FormFieldComponent } from "./form-field.component"; @Component({ + standalone: false, template: ` @@ -17,7 +18,7 @@ import { FormFieldComponent } from "./form-field.component"; `, }) class TestComponent { - public control = new FormControl(""); + public control = new UntypedFormControl(""); } describe("FormFieldComponent", () => { diff --git a/desktop/src/@batch-flask/ui/form/form-field/form-field.component.ts b/desktop/src/@batch-flask/ui/form/form-field/form-field.component.ts index 83393557b0..a96c96cce4 100644 --- a/desktop/src/@batch-flask/ui/form/form-field/form-field.component.ts +++ b/desktop/src/@batch-flask/ui/form/form-field/form-field.component.ts @@ -18,6 +18,7 @@ import { FormFieldPrefixDirective, FormFieldSuffixDirective } from "./form-field import "./form-field.scss"; @Component({ + standalone: false, selector: "bl-form-field", templateUrl: "form-field.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/form/form-field/form-field.directive.ts b/desktop/src/@batch-flask/ui/form/form-field/form-field.directive.ts index 4cedaa4ca6..051dde46ce 100644 --- a/desktop/src/@batch-flask/ui/form/form-field/form-field.directive.ts +++ b/desktop/src/@batch-flask/ui/form/form-field/form-field.directive.ts @@ -1,6 +1,7 @@ import { Directive } from "@angular/core"; @Directive({ + standalone: false, selector: "[blFormFieldPrefix]", }) export class FormFieldPrefixDirective { @@ -8,6 +9,7 @@ export class FormFieldPrefixDirective { } @Directive({ + standalone: false, selector: "[blFormFieldSuffix]", }) export class FormFieldSuffixDirective { diff --git a/desktop/src/@batch-flask/ui/form/form-json-editor/form-json-editor.component.ts b/desktop/src/@batch-flask/ui/form/form-json-editor/form-json-editor.component.ts index 3cf6f03f3a..8efd6fdc7e 100644 --- a/desktop/src/@batch-flask/ui/form/form-json-editor/form-json-editor.component.ts +++ b/desktop/src/@batch-flask/ui/form/form-json-editor/form-json-editor.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, forwardRef } from "@angular/core"; -import { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from "@angular/forms"; +import { ControlValueAccessor, UntypedFormControl, NG_VALUE_ACCESSOR } from "@angular/forms"; import { EditorConfig } from "@batch-flask/ui/editor"; import { validJsonConfig } from "@batch-flask/utils/validators"; import { Subscription } from "rxjs"; @@ -9,6 +9,7 @@ import "./form-json-editor.scss"; const emptyJson = "{\n\n}"; @Component({ + standalone: false, selector: "bl-form-json-editor", templateUrl: "form-json-editor.html", providers: [ @@ -17,7 +18,7 @@ const emptyJson = "{\n\n}"; changeDetection: ChangeDetectionStrategy.OnPush, }) export class FormJsonEditorComponent implements ControlValueAccessor, OnDestroy { - public jsonControl = new FormControl(emptyJson, null, validJsonConfig); + public jsonControl = new UntypedFormControl(emptyJson, null, validJsonConfig); public editorConfig: EditorConfig; diff --git a/desktop/src/@batch-flask/ui/form/form-page/form-page.component.ts b/desktop/src/@batch-flask/ui/form/form-page/form-page.component.ts index f2a27e6278..e23c3c1f5f 100644 --- a/desktop/src/@batch-flask/ui/form/form-page/form-page.component.ts +++ b/desktop/src/@batch-flask/ui/form/form-page/form-page.component.ts @@ -27,6 +27,7 @@ export interface FocusableElement { } @Component({ + standalone: false, selector: "bl-form-page", templateUrl: "form-page.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/form/form-picker/form-multi-picker.component.ts b/desktop/src/@batch-flask/ui/form/form-picker/form-multi-picker.component.ts index 97169f34c9..454a3ac76e 100644 --- a/desktop/src/@batch-flask/ui/form/form-picker/form-multi-picker.component.ts +++ b/desktop/src/@batch-flask/ui/form/form-picker/form-multi-picker.component.ts @@ -3,13 +3,14 @@ import { ElementRef, Input, QueryList, TemplateRef, ViewChild, ViewChildren, forwardRef, } from "@angular/core"; import { - ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, + ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, } from "@angular/forms"; import { FormPageComponent } from "../form-page"; import "./form-multi-picker.scss"; @Directive({ + standalone: false, selector: "[blFormPickerItem]", }) export class FormPickerItemTemplateDirective { @@ -18,6 +19,7 @@ export class FormPickerItemTemplateDirective { } @Component({ + standalone: false, selector: "bl-form-multi-picker", templateUrl: "form-multi-picker.html", providers: [ @@ -41,7 +43,7 @@ export class FormMultiPickerComponent implements ControlValueAccessor, Validator public itemTemplate: FormPickerItemTemplateDirective; public values: any[]; - public currentEditValue = new FormControl(null); + public currentEditValue = new UntypedFormControl(null); public hasValue = false; @@ -71,7 +73,7 @@ export class FormMultiPickerComponent implements ControlValueAccessor, Validator this._registerTouched = fn; } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } diff --git a/desktop/src/@batch-flask/ui/form/form-picker/form-picker.component.ts b/desktop/src/@batch-flask/ui/form/form-picker/form-picker.component.ts index ae2a9e93d9..312d4ea264 100644 --- a/desktop/src/@batch-flask/ui/form/form-picker/form-picker.component.ts +++ b/desktop/src/@batch-flask/ui/form/form-picker/form-picker.component.ts @@ -1,10 +1,11 @@ import { Component, ElementRef, EventEmitter, Input, Output, ViewChild, forwardRef } from "@angular/core"; -import { ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from "@angular/forms"; +import { ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from "@angular/forms"; import { FormPageComponent } from "../form-page"; import "./form-picker.scss"; @Component({ + standalone: false, selector: "bl-form-picker", templateUrl: "form-picker.html", providers: [ @@ -30,7 +31,7 @@ export class FormPickerComponent implements ControlValueAccessor, Validator { public open = new EventEmitter(); @Input() - public nestedValue = new FormControl(); + public nestedValue = new UntypedFormControl(); public hasValue = false; @@ -98,7 +99,7 @@ export class FormPickerComponent implements ControlValueAccessor, Validator { // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } diff --git a/desktop/src/@batch-flask/ui/form/form-section/form-section.component.ts b/desktop/src/@batch-flask/ui/form/form-section/form-section.component.ts index b4ae45badb..7241f5129f 100644 --- a/desktop/src/@batch-flask/ui/form/form-section/form-section.component.ts +++ b/desktop/src/@batch-flask/ui/form/form-section/form-section.component.ts @@ -1,6 +1,7 @@ import { ChangeDetectionStrategy, Component, Input, TemplateRef, ViewChild } from "@angular/core"; @Component({ + standalone: false, selector: "bl-form-section", templateUrl: "form-section.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/form/hint/hint.component.spec.ts b/desktop/src/@batch-flask/ui/form/hint/hint.component.spec.ts index fa8872def0..5f7e912f27 100644 --- a/desktop/src/@batch-flask/ui/form/hint/hint.component.spec.ts +++ b/desktop/src/@batch-flask/ui/form/hint/hint.component.spec.ts @@ -4,6 +4,7 @@ import { By } from "@angular/platform-browser"; import { HintComponent } from "./hint.component"; @Component({ + standalone: false, template: `My foo hint`, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/form/hint/hint.component.ts b/desktop/src/@batch-flask/ui/form/hint/hint.component.ts index 54835c9b3e..44d15b4d63 100644 --- a/desktop/src/@batch-flask/ui/form/hint/hint.component.ts +++ b/desktop/src/@batch-flask/ui/form/hint/hint.component.ts @@ -5,6 +5,7 @@ import "./hint.scss"; let idCounter = 0; @Component({ + standalone: false, selector: "bl-hint", template: "", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/form/input/input.directive.spec.ts b/desktop/src/@batch-flask/ui/form/input/input.directive.spec.ts index 73e57bdb94..6e5ef668d5 100644 --- a/desktop/src/@batch-flask/ui/form/input/input.directive.spec.ts +++ b/desktop/src/@batch-flask/ui/form/input/input.directive.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule, Validators } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule, Validators } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { InputDirective } from "./input.directive"; @@ -125,6 +125,7 @@ describe("InputDirective", () => { }); @Component({ + standalone: false, template: ``, }) class BlInputWithPlaceholder { @@ -132,6 +133,7 @@ class BlInputWithPlaceholder { } @Component({ + standalone: false, template: ``, }) class BlInputWithDisabled { @@ -139,16 +141,18 @@ class BlInputWithDisabled { } @Component({ + standalone: false, template: ``, }) class BlInputWithRequired { public required: boolean; - public formControl = new FormControl(); + public formControl = new UntypedFormControl(); } @Component({ + standalone: false, template: ``, }) class BlInputWithFormControl { - public formControl = new FormControl(); + public formControl = new UntypedFormControl(); } diff --git a/desktop/src/@batch-flask/ui/form/input/input.directive.ts b/desktop/src/@batch-flask/ui/form/input/input.directive.ts index 93a2c0aca0..246610326c 100644 --- a/desktop/src/@batch-flask/ui/form/input/input.directive.ts +++ b/desktop/src/@batch-flask/ui/form/input/input.directive.ts @@ -11,7 +11,7 @@ import { Optional, Self, } from "@angular/core"; -import { FormControl, FormGroupDirective, NgControl, NgForm } from "@angular/forms"; +import { UntypedFormControl, FormGroupDirective, NgControl, NgForm } from "@angular/forms"; import { FlagInput, coerceBooleanProperty } from "@batch-flask/core"; import { FormFieldControl } from "@batch-flask/ui/form/form-field"; import { SanitizedError } from "@batch-flask/utils"; @@ -35,6 +35,7 @@ const INPUT_INVALID_TYPES = [ let nextUniqueId = 0; @Directive({ + standalone: false, selector: `input[blInput], textarea[blInput]`, providers: [{ provide: FormFieldControl, useExisting: InputDirective }], }) @@ -81,7 +82,7 @@ export class InputDirective implements FormFieldControl, OnChanges, OnDestr } if (this.ngControl?.control?.validator) { return this.ngControl.control - .validator({} as FormControl)?.required; + .validator({} as UntypedFormControl)?.required; } return false; } @@ -242,11 +243,11 @@ export class InputDirective implements FormFieldControl, OnChanges, OnDestr private _computeErrorState() { const parent = this._parentFormGroup || this._parentForm; - const control = this.ngControl ? this.ngControl.control as FormControl : null; + const control = this.ngControl ? this.ngControl.control as UntypedFormControl : null; this.invalid = this._isInErrorState(control, parent); } - private _isInErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean { + private _isInErrorState(control: UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean { return !!(control && control.invalid && (control.touched || (form && form.submitted))); } } diff --git a/desktop/src/@batch-flask/ui/form/key-value-picker/key-value-picker.component.ts b/desktop/src/@batch-flask/ui/form/key-value-picker/key-value-picker.component.ts index a1197a4201..6842aa3eb0 100644 --- a/desktop/src/@batch-flask/ui/form/key-value-picker/key-value-picker.component.ts +++ b/desktop/src/@batch-flask/ui/form/key-value-picker/key-value-picker.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { Subscription } from "rxjs"; @@ -10,6 +10,7 @@ interface KeyValue { } @Component({ + standalone: false, selector: "bl-key-value-picker", templateUrl: "key-value-picker.html", providers: [ @@ -21,12 +22,12 @@ export class KeyValuePickerComponent implements ControlValueAccessor, OnDestroy @Input() public label: string; @Input() public hideCaption = false; - public items: FormControl; + public items: UntypedFormControl; private _propagateChange: (value: KeyValue[]) => void = null; private _sub: Subscription; - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.items = formBuilder.control([]); this._sub = this.items.valueChanges.subscribe((items) => { if (this._propagateChange) { @@ -53,7 +54,7 @@ export class KeyValuePickerComponent implements ControlValueAccessor, OnDestroy // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } } diff --git a/desktop/src/@batch-flask/ui/form/simple-form/simple-form.component.spec.ts b/desktop/src/@batch-flask/ui/form/simple-form/simple-form.component.spec.ts index a090b9b9f5..7d85fe3830 100644 --- a/desktop/src/@batch-flask/ui/form/simple-form/simple-form.component.spec.ts +++ b/desktop/src/@batch-flask/ui/form/simple-form/simple-form.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement, NO_ERRORS_SCHEMA, ViewChild } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, ReactiveFormsModule, Validators } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { MaterialModule } from "@batch-flask/core"; import { I18nTestingModule } from "@batch-flask/core/testing"; @@ -10,6 +10,7 @@ import { ServerErrorComponent } from "@batch-flask/ui/server-error"; import { complexFormMockComponents } from "test/utils/mocks/components"; @Component({ + standalone: false, template: ` `, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/graphs/gauge/gauge.component.ts b/desktop/src/@batch-flask/ui/graphs/gauge/gauge.component.ts index 347c212b64..4d6ed99bb5 100644 --- a/desktop/src/@batch-flask/ui/graphs/gauge/gauge.component.ts +++ b/desktop/src/@batch-flask/ui/graphs/gauge/gauge.component.ts @@ -32,6 +32,7 @@ const startingAngle = 240; const padRad = 0.025; @Component({ + standalone: false, selector: "bl-gauge", templateUrl: "gauge.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/i18n/i18n-ui.module.ts b/desktop/src/@batch-flask/ui/i18n/i18n-ui.module.ts index b9a40fb340..45050c5d6f 100644 --- a/desktop/src/@batch-flask/ui/i18n/i18n-ui.module.ts +++ b/desktop/src/@batch-flask/ui/i18n/i18n-ui.module.ts @@ -10,7 +10,6 @@ const privateComponents = []; imports: [CommonModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class I18nUIModule { } diff --git a/desktop/src/@batch-flask/ui/i18n/i18n.component.spec.ts b/desktop/src/@batch-flask/ui/i18n/i18n.component.spec.ts index f3d533c74e..7b438b4b79 100644 --- a/desktop/src/@batch-flask/ui/i18n/i18n.component.spec.ts +++ b/desktop/src/@batch-flask/ui/i18n/i18n.component.spec.ts @@ -4,12 +4,14 @@ import { By } from "@angular/platform-browser"; import { I18nTestingModule } from "@batch-flask/core/testing"; @Component({ + standalone: false, template: ``, }) class SimpleI18nComponent { } @Component({ + standalone: false, template: ` 4 diff --git a/desktop/src/@batch-flask/ui/i18n/i18n.component.ts b/desktop/src/@batch-flask/ui/i18n/i18n.component.ts index 8abeaa7c44..5760671cfc 100644 --- a/desktop/src/@batch-flask/ui/i18n/i18n.component.ts +++ b/desktop/src/@batch-flask/ui/i18n/i18n.component.ts @@ -6,6 +6,7 @@ import { import { I18nService } from "@batch-flask/core"; @Directive({ + standalone: false, // eslint-disable-next-line @angular-eslint/directive-selector selector: "[i18nParam]", }) @@ -18,6 +19,7 @@ export class I18nParameterDirective { } @Component({ + standalone: false, selector: "bl-i18n", templateUrl: "i18n.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/i18n/i18n.pipe.spec.ts b/desktop/src/@batch-flask/ui/i18n/i18n.pipe.spec.ts index 42667839d6..6016ff5f30 100644 --- a/desktop/src/@batch-flask/ui/i18n/i18n.pipe.spec.ts +++ b/desktop/src/@batch-flask/ui/i18n/i18n.pipe.spec.ts @@ -4,18 +4,21 @@ import { I18nTestingModule } from "@batch-flask/core/testing"; import { I18N_NAMESPACE } from "./i18n.pipe"; @Component({ + standalone: false, template: `{{'my-key.label' | i18n}}`, }) class SimplePipeComponent { } @Component({ + standalone: false, template: `{{'my-param.label' | i18n: {count: 4} }}`, }) class ParameterPipeComponent { } @Component({ + standalone: false, template: `{{'foo.label' | i18n }}`, }) class NamespacePipeComponent { diff --git a/desktop/src/@batch-flask/ui/i18n/i18n.pipe.ts b/desktop/src/@batch-flask/ui/i18n/i18n.pipe.ts index 4d0dfcddb6..d3d3d5c343 100644 --- a/desktop/src/@batch-flask/ui/i18n/i18n.pipe.ts +++ b/desktop/src/@batch-flask/ui/i18n/i18n.pipe.ts @@ -4,6 +4,7 @@ import { I18nService } from "@batch-flask/core"; export const I18N_NAMESPACE = new InjectionToken("I18N_NAMESPACE"); @Pipe({ + standalone: false, name: "i18n", pure: true, }) diff --git a/desktop/src/@batch-flask/ui/icon/icon.component.ts b/desktop/src/@batch-flask/ui/icon/icon.component.ts index f7faa0af50..be1b97e85e 100644 --- a/desktop/src/@batch-flask/ui/icon/icon.component.ts +++ b/desktop/src/@batch-flask/ui/icon/icon.component.ts @@ -2,6 +2,7 @@ import { Component, Input } from "@angular/core"; import { Icon } from "./icon.model"; @Component({ + standalone: false, selector: "bl-icon", templateUrl: "icon.html", }) diff --git a/desktop/src/@batch-flask/ui/info-box/info-box.component.ts b/desktop/src/@batch-flask/ui/info-box/info-box.component.ts index c5807dc1eb..6b5652ea95 100644 --- a/desktop/src/@batch-flask/ui/info-box/info-box.component.ts +++ b/desktop/src/@batch-flask/ui/info-box/info-box.component.ts @@ -1,6 +1,7 @@ import { Component, Input } from "@angular/core"; @Component({ + standalone: false, selector: "bl-info-box", templateUrl: "info-box.html", }) diff --git a/desktop/src/@batch-flask/ui/info-box/info-box.module.ts b/desktop/src/@batch-flask/ui/info-box/info-box.module.ts index 805a17567f..3f85d8e076 100644 --- a/desktop/src/@batch-flask/ui/info-box/info-box.module.ts +++ b/desktop/src/@batch-flask/ui/info-box/info-box.module.ts @@ -9,7 +9,6 @@ const components = [ @NgModule({ declarations: components, - entryComponents: [], exports: [...components], imports: [RouterModule, I18nUIModule], }) diff --git a/desktop/src/@batch-flask/ui/keybindings/keybinding-picker/keybinding-picker-dialog.component.ts b/desktop/src/@batch-flask/ui/keybindings/keybinding-picker/keybinding-picker-dialog.component.ts index 795fb300f2..f4d636bbda 100644 --- a/desktop/src/@batch-flask/ui/keybindings/keybinding-picker/keybinding-picker-dialog.component.ts +++ b/desktop/src/@batch-flask/ui/keybindings/keybinding-picker/keybinding-picker-dialog.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, OnDestroy } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { MatDialogRef } from "@angular/material/dialog"; import { Command, KeyBinding, KeyBindingsService } from "@batch-flask/core"; import { Subject, combineLatest } from "rxjs"; @@ -8,6 +8,7 @@ import { takeUntil } from "rxjs/operators"; import "./keybinding-picker-dialog.scss"; @Component({ + standalone: false, selector: "bl-keybinding-picker-dialog", templateUrl: "keybinding-picker-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -19,7 +20,7 @@ export class KeyBindingPickerDialogComponent implements OnDestroy { } public get command() { return this._command; } - public keybinding = new FormControl(""); + public keybinding = new UntypedFormControl(""); public commandAlreadyUsed = false; public otherCommands: Command[]; diff --git a/desktop/src/@batch-flask/ui/keybindings/keybindings-listener.directive.ts b/desktop/src/@batch-flask/ui/keybindings/keybindings-listener.directive.ts index c56dccc80a..1196567071 100644 --- a/desktop/src/@batch-flask/ui/keybindings/keybindings-listener.directive.ts +++ b/desktop/src/@batch-flask/ui/keybindings/keybindings-listener.directive.ts @@ -3,6 +3,7 @@ import { KeyBinding } from "@batch-flask/core"; import { KeyCode } from "@batch-flask/core/keys"; @Directive({ + standalone: false, selector: "[blKeyBindingListener]", }) export class KeyBindingListenerDirective { diff --git a/desktop/src/@batch-flask/ui/keybindings/keybindings.component.spec.ts b/desktop/src/@batch-flask/ui/keybindings/keybindings.component.spec.ts index 7b8ab059eb..073102b22b 100644 --- a/desktop/src/@batch-flask/ui/keybindings/keybindings.component.spec.ts +++ b/desktop/src/@batch-flask/ui/keybindings/keybindings.component.spec.ts @@ -15,6 +15,7 @@ import { KeyBindingListenerDirective } from "./keybindings-listener.directive"; import { KeyBindingsComponent } from "./keybindings.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/keybindings/keybindings.component.ts b/desktop/src/@batch-flask/ui/keybindings/keybindings.component.ts index 7510a0aab3..a050df49d7 100644 --- a/desktop/src/@batch-flask/ui/keybindings/keybindings.component.ts +++ b/desktop/src/@batch-flask/ui/keybindings/keybindings.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnDestroy, OnInit, ViewChild, } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { Command, CommandRegistry, KeyBinding, KeyBindingsService } from "@batch-flask/core"; import { SanitizedError } from "@batch-flask/utils"; import { Subject, combineLatest } from "rxjs"; @@ -31,6 +31,7 @@ interface KeyBindingFilter { const SEARCH_BY_BINDING_REGEX = /"([^"]*)"?/i; @Component({ + standalone: false, selector: "bl-keybindings", templateUrl: "keybindings.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -41,7 +42,7 @@ export class KeyBindingsComponent implements OnInit, OnDestroy { } public displayedCommands: DisplayedCommand[] = []; - public search = new FormControl(""); + public search = new UntypedFormControl(""); public searchByKeyBinding = false; public tableConfig: TableConfig = { diff --git a/desktop/src/@batch-flask/ui/keybindings/keybindings.module.ts b/desktop/src/@batch-flask/ui/keybindings/keybindings.module.ts index 0598520fce..97e4dc3412 100644 --- a/desktop/src/@batch-flask/ui/keybindings/keybindings.module.ts +++ b/desktop/src/@batch-flask/ui/keybindings/keybindings.module.ts @@ -17,7 +17,6 @@ const privateComponents = []; ], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [KeyBindingsComponent, KeyBindingPickerDialogComponent], }) export class KeyBindingsModule { } diff --git a/desktop/src/@batch-flask/ui/list-and-show-layout/entity-details-list.component.ts b/desktop/src/@batch-flask/ui/list-and-show-layout/entity-details-list.component.ts index 99e388ba3e..4a0162ac3f 100644 --- a/desktop/src/@batch-flask/ui/list-and-show-layout/entity-details-list.component.ts +++ b/desktop/src/@batch-flask/ui/list-and-show-layout/entity-details-list.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { FilterBuilder } from "@batch-flask/core"; import { Observable } from "rxjs"; import { debounceTime, distinctUntilChanged } from "rxjs/operators"; @@ -11,6 +11,7 @@ import "./entity-details-list.scss"; * Adds a search box and a refresh button */ @Component({ + standalone: false, selector: "bl-entity-details-list", templateUrl: "entity-details-list.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -59,7 +60,7 @@ export class EntityDetailsListComponent { public onAddEntity: EventEmitter = new EventEmitter(); public filter = FilterBuilder.none(); - public searchQuery = new FormControl(); + public searchQuery = new UntypedFormControl(); constructor(changeDetector: ChangeDetectorRef) { this.searchQuery.valueChanges.pipe(debounceTime(400), distinctUntilChanged()).subscribe((query: string) => { diff --git a/desktop/src/@batch-flask/ui/loading/loading.component.ts b/desktop/src/@batch-flask/ui/loading/loading.component.ts index 9ccb10852b..0fcad18383 100644 --- a/desktop/src/@batch-flask/ui/loading/loading.component.ts +++ b/desktop/src/@batch-flask/ui/loading/loading.component.ts @@ -14,6 +14,7 @@ import { DisplayStatus, LoadingStatus } from "./loading-status"; import "./loading.scss"; @Component({ + standalone: false, selector: "bl-loading", templateUrl: "loading.html", }) diff --git a/desktop/src/@batch-flask/ui/loading/simple-loading.component.ts b/desktop/src/@batch-flask/ui/loading/simple-loading.component.ts index 7375f89328..247239e2cb 100644 --- a/desktop/src/@batch-flask/ui/loading/simple-loading.component.ts +++ b/desktop/src/@batch-flask/ui/loading/simple-loading.component.ts @@ -5,6 +5,7 @@ import { Subscription, interval } from "rxjs"; * Loading showing a simple loading text. */ @Component({ + standalone: false, selector: "bl-simple-loading", template: `{{message}}`, }) diff --git a/desktop/src/@batch-flask/ui/metrics-monitor/metrics-monitor-metric/metrics-monitor-metric.component.ts b/desktop/src/@batch-flask/ui/metrics-monitor/metrics-monitor-metric/metrics-monitor-metric.component.ts index 06d9fbd655..71739880fb 100644 --- a/desktop/src/@batch-flask/ui/metrics-monitor/metrics-monitor-metric/metrics-monitor-metric.component.ts +++ b/desktop/src/@batch-flask/ui/metrics-monitor/metrics-monitor-metric/metrics-monitor-metric.component.ts @@ -3,6 +3,7 @@ import { ChangeDetectionStrategy, Component, Input, TemplateRef, ViewChild } fro import "./metrics-monitor-metric.scss"; @Component({ + standalone: false, selector: "bl-metrics-monitor-metric", templateUrl: "metrics-monitor-metric.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/metrics-monitor/metrics-monitor.component.ts b/desktop/src/@batch-flask/ui/metrics-monitor/metrics-monitor.component.ts index ee65066346..a56ca8f524 100644 --- a/desktop/src/@batch-flask/ui/metrics-monitor/metrics-monitor.component.ts +++ b/desktop/src/@batch-flask/ui/metrics-monitor/metrics-monitor.component.ts @@ -6,6 +6,7 @@ import { MetricsMonitorGraphComponent } from "./metrics-monitor-metric"; import "./metrics-monitor.scss"; @Component({ + standalone: false, selector: "bl-metrics-monitor", templateUrl: "metrics-monitor.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/notifications/persisted-dropdown/persisted-notifications-dropdown.component.ts b/desktop/src/@batch-flask/ui/notifications/persisted-dropdown/persisted-notifications-dropdown.component.ts index 5804535617..1fb017f04b 100644 --- a/desktop/src/@batch-flask/ui/notifications/persisted-dropdown/persisted-notifications-dropdown.component.ts +++ b/desktop/src/@batch-flask/ui/notifications/persisted-dropdown/persisted-notifications-dropdown.component.ts @@ -7,6 +7,7 @@ import { NotificationService } from "../notification-service"; import "./persisted-notifications.scss"; @Component({ + standalone: false, selector: "bl-persisted-notifications-dropdown", templateUrl: "persisted-notifications-dropdown.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/notifications/toast/toast.component.spec.ts b/desktop/src/@batch-flask/ui/notifications/toast/toast.component.spec.ts index b58d70f288..05b4d0a8f6 100644 --- a/desktop/src/@batch-flask/ui/notifications/toast/toast.component.spec.ts +++ b/desktop/src/@batch-flask/ui/notifications/toast/toast.component.spec.ts @@ -9,6 +9,7 @@ import { ToastComponent } from "./toast.component"; import { I18nTestingModule } from "@batch-flask/core/testing"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/notifications/toast/toast.component.ts b/desktop/src/@batch-flask/ui/notifications/toast/toast.component.ts index 6df537d086..5b725dff2d 100644 --- a/desktop/src/@batch-flask/ui/notifications/toast/toast.component.ts +++ b/desktop/src/@batch-flask/ui/notifications/toast/toast.component.ts @@ -7,6 +7,7 @@ import { NotificationService } from "../notification-service"; import "./toast.scss"; @Component({ + standalone: false, selector: "bl-toast", templateUrl: "toast.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -36,7 +37,7 @@ export class ToastComponent extends ClickableComponent { } @HostListener("mouseup", ["$event"]) - public handleMouseUp(event: MouseEvent, tab) { + public handleMouseUp(event: MouseEvent) { if (event.button === MouseButton.middle) { // Middle click this.dismiss(); } diff --git a/desktop/src/@batch-flask/ui/notifications/toasts-container/toasts-container.component.ts b/desktop/src/@batch-flask/ui/notifications/toasts-container/toasts-container.component.ts index c0044fad97..c3d15a8f45 100644 --- a/desktop/src/@batch-flask/ui/notifications/toasts-container/toasts-container.component.ts +++ b/desktop/src/@batch-flask/ui/notifications/toasts-container/toasts-container.component.ts @@ -7,6 +7,7 @@ import { NotificationService } from "../notification-service"; import "./toasts-container.scss"; @Component({ + standalone: false, selector: "bl-toasts-container", templateUrl: "toasts-container.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/notifications/toasts-container/toasts-container.spec.ts b/desktop/src/@batch-flask/ui/notifications/toasts-container/toasts-container.spec.ts index 139f71d692..b9f30e6871 100644 --- a/desktop/src/@batch-flask/ui/notifications/toasts-container/toasts-container.spec.ts +++ b/desktop/src/@batch-flask/ui/notifications/toasts-container/toasts-container.spec.ts @@ -12,6 +12,7 @@ import { PermissionService } from "@batch-flask/ui/permission"; import { List } from "immutable"; @Component({ + standalone: false, template: ``, }) class FakeAppComponent { diff --git a/desktop/src/@batch-flask/ui/property-list/bool-property/bool-property.component.ts b/desktop/src/@batch-flask/ui/property-list/bool-property/bool-property.component.ts index a514d69136..6c133a767c 100644 --- a/desktop/src/@batch-flask/ui/property-list/bool-property/bool-property.component.ts +++ b/desktop/src/@batch-flask/ui/property-list/bool-property/bool-property.component.ts @@ -1,6 +1,7 @@ import { ChangeDetectionStrategy, Component, HostBinding, Input } from "@angular/core"; @Component({ + standalone: false, selector: "bl-bool-property", templateUrl: "bool-property.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/property-list/date-property/date-property.component.spec.ts b/desktop/src/@batch-flask/ui/property-list/date-property/date-property.component.spec.ts index 8c660ce509..12b0c7e7a3 100644 --- a/desktop/src/@batch-flask/ui/property-list/date-property/date-property.component.spec.ts +++ b/desktop/src/@batch-flask/ui/property-list/date-property/date-property.component.spec.ts @@ -13,6 +13,7 @@ const date1 = new Date(Date.UTC(2017, 8, 3)); const date2 = new Date(Date.UTC(2015, 9, 4)); @Component({ + standalone: false, template: ``, }) class TestComponent { @@ -38,7 +39,7 @@ describe("DatePropertyComponent", () => { fixture.detectChanges(); valueEl = de.query(By.css("bl-property-content")); - timeZoneServiceSpy = TestBed.get(TimeZoneService); + timeZoneServiceSpy = TestBed.inject(TimeZoneService); }); it("shows the pretty date in the current timezone", () => { diff --git a/desktop/src/@batch-flask/ui/property-list/date-property/date-property.component.ts b/desktop/src/@batch-flask/ui/property-list/date-property/date-property.component.ts index d70d96f073..e7d8142c82 100644 --- a/desktop/src/@batch-flask/ui/property-list/date-property/date-property.component.ts +++ b/desktop/src/@batch-flask/ui/property-list/date-property/date-property.component.ts @@ -8,6 +8,7 @@ import { BehaviorSubject, Subject, combineLatest } from "rxjs"; import { takeUntil } from "rxjs/operators"; @Component({ + standalone: false, selector: "bl-date-property", templateUrl: "date-property.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/property-list/entity-configuration/entity-configuration.component.ts b/desktop/src/@batch-flask/ui/property-list/entity-configuration/entity-configuration.component.ts index c2f5b6e616..ae2ba8151f 100644 --- a/desktop/src/@batch-flask/ui/property-list/entity-configuration/entity-configuration.component.ts +++ b/desktop/src/@batch-flask/ui/property-list/entity-configuration/entity-configuration.component.ts @@ -7,6 +7,7 @@ import { EditorConfig } from "@batch-flask/ui/editor"; import "./entity-configuration.scss"; @Component({ + standalone: false, selector: "bl-entity-configuration", templateUrl: "entity-configuration.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/property-list/link-property/link-property.component.ts b/desktop/src/@batch-flask/ui/property-list/link-property/link-property.component.ts index c8767ff0fa..2003f52854 100644 --- a/desktop/src/@batch-flask/ui/property-list/link-property/link-property.component.ts +++ b/desktop/src/@batch-flask/ui/property-list/link-property/link-property.component.ts @@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component, HostListener, Input } from "@angula import { ENTER, SPACE } from "@batch-flask/core/keys"; @Component({ + standalone: false, selector: "bl-link-property", templateUrl: "link-property.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/property-list/property-content/property-content.component.ts b/desktop/src/@batch-flask/ui/property-list/property-content/property-content.component.ts index 4756530724..0e9447c1e7 100644 --- a/desktop/src/@batch-flask/ui/property-list/property-content/property-content.component.ts +++ b/desktop/src/@batch-flask/ui/property-list/property-content/property-content.component.ts @@ -3,6 +3,7 @@ import { ChangeDetectionStrategy, Component, HostBinding, HostListener, Input } import "./property-content.scss"; @Component({ + standalone: false, selector: "bl-property-content", templateUrl: "property-content.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/property-list/property-field/property-field.component.ts b/desktop/src/@batch-flask/ui/property-list/property-field/property-field.component.ts index d73cddf19e..d331bebc54 100644 --- a/desktop/src/@batch-flask/ui/property-list/property-field/property-field.component.ts +++ b/desktop/src/@batch-flask/ui/property-list/property-field/property-field.component.ts @@ -6,6 +6,7 @@ import "./property-field.scss"; let idCounter = 0; @Component({ + standalone: false, selector: "bl-property-field", templateUrl: "property-field.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/property-list/property-group/property-group.component.spec.ts b/desktop/src/@batch-flask/ui/property-list/property-group/property-group.component.spec.ts index 5bf3ae7fd8..e582871011 100644 --- a/desktop/src/@batch-flask/ui/property-list/property-group/property-group.component.spec.ts +++ b/desktop/src/@batch-flask/ui/property-list/property-group/property-group.component.spec.ts @@ -6,6 +6,7 @@ import { PropertyGroupComponent } from "@batch-flask/ui/property-list"; import { click } from "test/utils/helpers"; @Component({ + standalone: false, template: `
Preview of content
diff --git a/desktop/src/@batch-flask/ui/property-list/property-group/property-group.component.ts b/desktop/src/@batch-flask/ui/property-list/property-group/property-group.component.ts index bcbbf5a6a6..45e6e7023a 100644 --- a/desktop/src/@batch-flask/ui/property-list/property-group/property-group.component.ts +++ b/desktop/src/@batch-flask/ui/property-list/property-group/property-group.component.ts @@ -6,6 +6,7 @@ import "./property-group.scss"; let idCounter = 0; @Component({ + standalone: false, selector: "bl-property-group", templateUrl: "property-group.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/property-list/property-list.component.ts b/desktop/src/@batch-flask/ui/property-list/property-list.component.ts index 125525487f..e1a2af4aea 100644 --- a/desktop/src/@batch-flask/ui/property-list/property-list.component.ts +++ b/desktop/src/@batch-flask/ui/property-list/property-list.component.ts @@ -3,6 +3,7 @@ import { ChangeDetectionStrategy, Component } from "@angular/core"; import "./property-list.scss"; @Component({ + standalone: false, selector: "bl-property-list", template: ``, changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/property-list/property-list.module.ts b/desktop/src/@batch-flask/ui/property-list/property-list.module.ts index ba877f5c86..73ce2071bb 100644 --- a/desktop/src/@batch-flask/ui/property-list/property-list.module.ts +++ b/desktop/src/@batch-flask/ui/property-list/property-list.module.ts @@ -45,7 +45,6 @@ const privateComponents = [ @NgModule({ declarations: [...publicComponents, ...privateComponents], - entryComponents: [], exports: publicComponents, imports: [ ButtonsModule, diff --git a/desktop/src/@batch-flask/ui/property-list/table-property/table-property.component.spec.ts b/desktop/src/@batch-flask/ui/property-list/table-property/table-property.component.spec.ts index cf6c3da2de..cd211356e9 100644 --- a/desktop/src/@batch-flask/ui/property-list/table-property/table-property.component.spec.ts +++ b/desktop/src/@batch-flask/ui/property-list/table-property/table-property.component.spec.ts @@ -12,6 +12,7 @@ import { /* eslint-disable */ @Component({ + standalone: false, template: ` diff --git a/desktop/src/@batch-flask/ui/property-list/table-property/table-property.component.ts b/desktop/src/@batch-flask/ui/property-list/table-property/table-property.component.ts index 2ec400f663..7a17641588 100644 --- a/desktop/src/@batch-flask/ui/property-list/table-property/table-property.component.ts +++ b/desktop/src/@batch-flask/ui/property-list/table-property/table-property.component.ts @@ -8,6 +8,7 @@ import { ClickableComponent } from "@batch-flask/ui/buttons"; import "./table-property.scss"; @Component({ + standalone: false, selector: "bl-table-property-header", template: ` @@ -21,6 +22,7 @@ export class TablePropertyHeaderComponent { } @Component({ + standalone: false, selector: "bl-table-property-row", template: ` @@ -36,6 +38,7 @@ export class TablePropertyRowComponent { let idCounter = 0; @Component({ + standalone: false, selector: "bl-tp-cell", template: `
@@ -86,12 +89,13 @@ export class TablePropertyCellComponent extends ClickableComponent { } @HostListener("(focus)") - public focusContent(event: FocusEvent) { + public focusContent(event?: FocusEvent) { window.getSelection().selectAllChildren(event.target as any); } } @Component({ + standalone: false, selector: "bl-tp-plain-cell", template: ` @@ -108,6 +112,7 @@ export class TablePropertyCellPlainComponent extends ClickableComponent { } @Component({ + standalone: false, selector: "bl-table-property", templateUrl: "table-property.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/property-list/text-property/text-property.component.spec.ts b/desktop/src/@batch-flask/ui/property-list/text-property/text-property.component.spec.ts index e0bcb319a1..585e2d22cd 100644 --- a/desktop/src/@batch-flask/ui/property-list/text-property/text-property.component.spec.ts +++ b/desktop/src/@batch-flask/ui/property-list/text-property/text-property.component.spec.ts @@ -4,6 +4,7 @@ import { By } from "@angular/platform-browser"; import { TextPropertyComponent } from "./text-property.component"; @Component({ + standalone: false, template: ` diff --git a/desktop/src/@batch-flask/ui/property-list/text-property/text-property.component.ts b/desktop/src/@batch-flask/ui/property-list/text-property/text-property.component.ts index 1ae175d567..119c253c40 100644 --- a/desktop/src/@batch-flask/ui/property-list/text-property/text-property.component.ts +++ b/desktop/src/@batch-flask/ui/property-list/text-property/text-property.component.ts @@ -3,6 +3,7 @@ import { ChangeDetectionStrategy, Component, Input } from "@angular/core"; import "./text-property.scss"; @Component({ + standalone: false, selector: "bl-text-property", templateUrl: "text-property.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/quick-list/no-item.component.ts b/desktop/src/@batch-flask/ui/quick-list/no-item.component.ts index faf7223ca9..298df6cd8f 100644 --- a/desktop/src/@batch-flask/ui/quick-list/no-item.component.ts +++ b/desktop/src/@batch-flask/ui/quick-list/no-item.component.ts @@ -3,6 +3,7 @@ import { Filter } from "@batch-flask/core"; import { LoadingStatus } from "@batch-flask/ui/loading"; @Component({ + standalone: false, selector: "bl-no-item", template: `
diff --git a/desktop/src/@batch-flask/ui/quick-list/quick-list.component.ts b/desktop/src/@batch-flask/ui/quick-list/quick-list.component.ts index bf3d49c2b6..284d693d01 100644 --- a/desktop/src/@batch-flask/ui/quick-list/quick-list.component.ts +++ b/desktop/src/@batch-flask/ui/quick-list/quick-list.component.ts @@ -27,6 +27,7 @@ import "./quick-list.scss"; let idCounter = 0; @Component({ + standalone: false, selector: "bl-quick-list", templateUrl: "quick-list.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/quotas/quota-display/quota-display.component.ts b/desktop/src/@batch-flask/ui/quotas/quota-display/quota-display.component.ts index 2648bfd8d2..f68f91cf7e 100644 --- a/desktop/src/@batch-flask/ui/quotas/quota-display/quota-display.component.ts +++ b/desktop/src/@batch-flask/ui/quotas/quota-display/quota-display.component.ts @@ -10,6 +10,7 @@ export enum QuotaDisplayType { } @Component({ + standalone: false, selector: "bl-quota-display", templateUrl: "quota-display.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/scrollable/scrollable.component.ts b/desktop/src/@batch-flask/ui/scrollable/scrollable.component.ts index 12fb775af8..4d05cfc4ed 100644 --- a/desktop/src/@batch-flask/ui/scrollable/scrollable.component.ts +++ b/desktop/src/@batch-flask/ui/scrollable/scrollable.component.ts @@ -14,7 +14,7 @@ import { ViewEncapsulation, } from "@angular/core"; import { SecureUtils } from "@batch-flask/utils"; -import * as elementResizeDetectorMaker from "element-resize-detector"; +import elementResizeDetectorMaker from "element-resize-detector"; import { ScrollableService } from "./scrollable.service"; enum Orientation { @@ -23,6 +23,7 @@ enum Orientation { } @Component({ + standalone: false, encapsulation: ViewEncapsulation.None, selector: "bl-scrollable", templateUrl: "scrollable.html", diff --git a/desktop/src/@batch-flask/ui/select/option-template.directive.ts b/desktop/src/@batch-flask/ui/select/option-template.directive.ts index a9be4d571c..acf231cb74 100644 --- a/desktop/src/@batch-flask/ui/select/option-template.directive.ts +++ b/desktop/src/@batch-flask/ui/select/option-template.directive.ts @@ -3,6 +3,7 @@ import { } from "@angular/core"; @Directive({ + standalone: false, selector: "[blOptionTemplate]", }) export class OptionTemplateDirective { diff --git a/desktop/src/@batch-flask/ui/select/option/option.component.ts b/desktop/src/@batch-flask/ui/select/option/option.component.ts index 8facae480d..54e5c90c8a 100644 --- a/desktop/src/@batch-flask/ui/select/option/option.component.ts +++ b/desktop/src/@batch-flask/ui/select/option/option.component.ts @@ -29,6 +29,7 @@ export interface OptionParent { let _uniqueIdCounter = 0; @Component({ + standalone: false, selector: "bl-option", template: "", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/select/select-dropdown/select-dropdown.component.ts b/desktop/src/@batch-flask/ui/select/select-dropdown/select-dropdown.component.ts index ea9429dffe..03aa04f675 100644 --- a/desktop/src/@batch-flask/ui/select/select-dropdown/select-dropdown.component.ts +++ b/desktop/src/@batch-flask/ui/select/select-dropdown/select-dropdown.component.ts @@ -12,6 +12,7 @@ import "./select-dropdown.scss"; const unselectAllOptionId = "_bl-select-option-unselect-all"; @Component({ + standalone: false, selector: "bl-select-dropdown", templateUrl: "select-dropdown.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/select/select.component.spec.ts b/desktop/src/@batch-flask/ui/select/select.component.spec.ts index 5b3ace376a..82a90bd4b3 100644 --- a/desktop/src/@batch-flask/ui/select/select.component.spec.ts +++ b/desktop/src/@batch-flask/ui/select/select.component.spec.ts @@ -1,7 +1,7 @@ import { OverlayContainer, OverlayModule } from "@angular/cdk/overlay"; import { Component, DebugElement, Directive } from "@angular/core"; import { ComponentFixture, TestBed, inject } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { BrowserDynamicTestingModule } from "@angular/platform-browser-dynamic/testing"; import { ClickableComponent } from "@batch-flask/ui/buttons/clickable"; @@ -21,11 +21,11 @@ const baseOptions = [ { value: "opt-5", label: "Rice" }, ]; -@Directive() +@Directive({ standalone: false }) // eslint-disable-next-line @angular-eslint/directive-class-suffix, class TestComponent { public options: any[] = baseOptions; - public value = new FormControl(null); + public value = new UntypedFormControl(null); public filterable = false; public multiple = false; @@ -35,6 +35,7 @@ class TestComponent { } @Component({ + standalone: false, template: `
My:{{option.label}}
@@ -91,7 +93,6 @@ describe("SelectComponent", () => { }); TestBed.overrideModule(BrowserDynamicTestingModule, { set: { - entryComponents: [SelectDropdownComponent], }, }); fixture = TestBed.createComponent(component); diff --git a/desktop/src/@batch-flask/ui/select/select.component.ts b/desktop/src/@batch-flask/ui/select/select.component.ts index 79b5031b5f..85c0a307f2 100644 --- a/desktop/src/@batch-flask/ui/select/select.component.ts +++ b/desktop/src/@batch-flask/ui/select/select.component.ts @@ -50,6 +50,7 @@ export class SelectInjector implements Injector { let nextUniqueId = 0; @Component({ + standalone: false, selector: "bl-select", templateUrl: "select.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -491,11 +492,11 @@ export class SelectComponent implements FormFieldControl, Opt }, ]; - const positionStrategy = this.overlay.position().connectedTo(this.elementRef, - { originX: "start", originY: "top" }, - { overlayX: "start", overlayY: "bottom" }); + const positionStrategy = this.overlay.position().flexibleConnectedTo(this.elementRef) + .withFlexibleDimensions(false) + .withPush(false); positionStrategy.withPositions(positions); - positionStrategy.onPositionChange.subscribe((x) => { + positionStrategy.positionChanges.subscribe((x) => { if (this._dropdownRef) { this._dropdownRef.instance.above = x.connectionPair.overlayY === "bottom"; } diff --git a/desktop/src/@batch-flask/ui/select/select.module.ts b/desktop/src/@batch-flask/ui/select/select.module.ts index fb22e7d42d..4e9c00e1a0 100644 --- a/desktop/src/@batch-flask/ui/select/select.module.ts +++ b/desktop/src/@batch-flask/ui/select/select.module.ts @@ -14,7 +14,6 @@ const privateComponents = [SelectDropdownComponent]; imports: [CommonModule, ReactiveFormsModule, FormsModule, ButtonsModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [SelectDropdownComponent], }) export class SelectModule { } diff --git a/desktop/src/@batch-flask/ui/server-error/server-error.component.spec.ts b/desktop/src/@batch-flask/ui/server-error/server-error.component.spec.ts index 2e6dd514cc..4dd9310d07 100644 --- a/desktop/src/@batch-flask/ui/server-error/server-error.component.spec.ts +++ b/desktop/src/@batch-flask/ui/server-error/server-error.component.spec.ts @@ -10,6 +10,7 @@ import { ServerErrorComponent } from "./server-error.component"; const date = new Date(2017, 9, 13, 23, 43, 38); @Component({ + standalone: false, template: ` `, diff --git a/desktop/src/@batch-flask/ui/server-error/server-error.component.ts b/desktop/src/@batch-flask/ui/server-error/server-error.component.ts index 087d24fa19..fdb55f8461 100644 --- a/desktop/src/@batch-flask/ui/server-error/server-error.component.ts +++ b/desktop/src/@batch-flask/ui/server-error/server-error.component.ts @@ -5,6 +5,7 @@ import { log } from "@batch-flask/utils"; import "./server-error.scss"; @Component({ + standalone: false, selector: "bl-server-error", templateUrl: "server-error.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/server-error/server-error.module.ts b/desktop/src/@batch-flask/ui/server-error/server-error.module.ts index 5fcf76fc91..7cb05f45f4 100644 --- a/desktop/src/@batch-flask/ui/server-error/server-error.module.ts +++ b/desktop/src/@batch-flask/ui/server-error/server-error.module.ts @@ -11,7 +11,6 @@ const privateComponents = []; imports: [CommonModule, ButtonsModule, I18nUIModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class ServerErrorModule { } diff --git a/desktop/src/@batch-flask/ui/sidebar/sidebar-bookmarks/sidebar-bookmarks.component.ts b/desktop/src/@batch-flask/ui/sidebar/sidebar-bookmarks/sidebar-bookmarks.component.ts index 8e0ec87f42..f22c460f18 100644 --- a/desktop/src/@batch-flask/ui/sidebar/sidebar-bookmarks/sidebar-bookmarks.component.ts +++ b/desktop/src/@batch-flask/ui/sidebar/sidebar-bookmarks/sidebar-bookmarks.component.ts @@ -13,6 +13,7 @@ import { SidebarRef } from "../sidebar-ref"; import "./sidebar-bookmarks.scss"; @Component({ + standalone: false, selector: "bl-sidebar-bookmarks", templateUrl: "sidebar-bookmarks.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/sidebar/sidebar-content/sidebar-content.component.ts b/desktop/src/@batch-flask/ui/sidebar/sidebar-content/sidebar-content.component.ts index 5c309727a9..18b8c76b39 100644 --- a/desktop/src/@batch-flask/ui/sidebar/sidebar-content/sidebar-content.component.ts +++ b/desktop/src/@batch-flask/ui/sidebar/sidebar-content/sidebar-content.component.ts @@ -1,4 +1,4 @@ -import { ComponentPortal, PortalHostDirective } from "@angular/cdk/portal"; +import { CdkPortalOutlet, ComponentPortal } from "@angular/cdk/portal"; import { Component, ComponentRef, @@ -17,13 +17,14 @@ import { SidebarRef } from "../sidebar-ref"; import "./sidebar-content.scss"; @Component({ + standalone: false, selector: "bl-sidebar-content", templateUrl: "sidebar-content.html", }) export class SidebarContentComponent implements OnInit { @Input() private sidebar: MatSidenav; - @ViewChild(PortalHostDirective, { static: false }) private portalHost: PortalHostDirective; + @ViewChild(CdkPortalOutlet, { static: false }) private portalHost: CdkPortalOutlet; private currentComponentRef: ComponentRef; diff --git a/desktop/src/@batch-flask/ui/sidebar/sidebar-content/sidebar-content.html b/desktop/src/@batch-flask/ui/sidebar/sidebar-content/sidebar-content.html index 3b4d3d5501..b38cbf1190 100644 --- a/desktop/src/@batch-flask/ui/sidebar/sidebar-content/sidebar-content.html +++ b/desktop/src/@batch-flask/ui/sidebar/sidebar-content/sidebar-content.html @@ -1,4 +1,4 @@ diff --git a/desktop/src/@batch-flask/ui/sidebar/sidebar-page.ts b/desktop/src/@batch-flask/ui/sidebar/sidebar-page.ts index 39f6990e8e..16acfa0a7e 100644 --- a/desktop/src/@batch-flask/ui/sidebar/sidebar-page.ts +++ b/desktop/src/@batch-flask/ui/sidebar/sidebar-page.ts @@ -1,4 +1,4 @@ -import { ComponentPortal, PortalHostDirective } from "@angular/cdk/portal"; +import { CdkPortalOutlet, ComponentPortal } from "@angular/cdk/portal"; import { Component, ComponentRef, @@ -14,11 +14,12 @@ import { SidebarInjector } from "./sidebar-injector"; import { SidebarRef } from "./sidebar-ref"; @Component({ + standalone: false, encapsulation: ViewEncapsulation.None, selector: "bl-sidebar-page", template: `
- +
`, }) @@ -28,8 +29,8 @@ export class SidebarPageComponent implements OnDestroy { @HostBinding("attr.role") public role = "dialog"; @HostBinding("attr.aria-modal") public ariaModal = true; - @ViewChild(PortalHostDirective, { static: true }) - private portalHost: PortalHostDirective; + @ViewChild(CdkPortalOutlet, { static: true }) + private portalHost: CdkPortalOutlet; private componentRef: ComponentRef = null; private onSideBarOpenEvent: any; diff --git a/desktop/src/@batch-flask/ui/sidebar/sidebar-spec-helper.spec.ts b/desktop/src/@batch-flask/ui/sidebar/sidebar-spec-helper.spec.ts index d1bf14ee3e..0fddcdfc4a 100644 --- a/desktop/src/@batch-flask/ui/sidebar/sidebar-spec-helper.spec.ts +++ b/desktop/src/@batch-flask/ui/sidebar/sidebar-spec-helper.spec.ts @@ -9,6 +9,7 @@ import { GlobalSidebarService } from "./sidebar-manager"; import { SidebarModule } from "./sidebar.module"; @Component({ + standalone: false, template: "

{{text}}

", }) export class FakeComponent { @@ -19,6 +20,7 @@ export class FakeComponent { * This is a test component that simulate an app with a sidebar. */ @Component({ + standalone: false, template: ` @@ -55,7 +57,6 @@ export function setupSidebarTest() { TestBed.overrideModule(BrowserDynamicTestingModule, { set: { - entryComponents: [AppTestComponent, FakeComponent], }, }); TestBed.compileComponents(); diff --git a/desktop/src/@batch-flask/ui/sidebar/sidebar.module.ts b/desktop/src/@batch-flask/ui/sidebar/sidebar.module.ts index 2e7cba802f..305d91ff23 100644 --- a/desktop/src/@batch-flask/ui/sidebar/sidebar.module.ts +++ b/desktop/src/@batch-flask/ui/sidebar/sidebar.module.ts @@ -18,9 +18,6 @@ const privateComponents = []; @NgModule({ declarations: [...publicComponents, ...privateComponents], - entryComponents: [ - SidebarPageComponent, - ], exports: [...publicComponents], imports: [ CommonModule, diff --git a/desktop/src/@batch-flask/ui/simple-dialog/simple-dialog.component.ts b/desktop/src/@batch-flask/ui/simple-dialog/simple-dialog.component.ts index 348000f493..2f8b69029f 100644 --- a/desktop/src/@batch-flask/ui/simple-dialog/simple-dialog.component.ts +++ b/desktop/src/@batch-flask/ui/simple-dialog/simple-dialog.component.ts @@ -8,6 +8,7 @@ import "./simple-dialog.scss"; * SimpleDialog is an helper component that displays a standard message dialog and a close button. */ @Component({ + standalone: false, selector: "bl-simple-dialog", templateUrl: "simple-dialog.html", }) diff --git a/desktop/src/@batch-flask/ui/split-pane/split-pane.component.spec.ts b/desktop/src/@batch-flask/ui/split-pane/split-pane.component.spec.ts index 59389b443e..9b3b30b1b9 100644 --- a/desktop/src/@batch-flask/ui/split-pane/split-pane.component.spec.ts +++ b/desktop/src/@batch-flask/ui/split-pane/split-pane.component.spec.ts @@ -6,6 +6,7 @@ import { SplitPaneComponent, SplitPaneConfig } from "./split-pane.component"; import { SplitSeparatorComponent } from "./split-separator"; @Component({ + standalone: false, template: `
diff --git a/desktop/src/@batch-flask/ui/split-pane/split-pane.component.ts b/desktop/src/@batch-flask/ui/split-pane/split-pane.component.ts index e95fd8a48c..c95b6d7dba 100644 --- a/desktop/src/@batch-flask/ui/split-pane/split-pane.component.ts +++ b/desktop/src/@batch-flask/ui/split-pane/split-pane.component.ts @@ -37,6 +37,7 @@ const defaultConfig: SplitPaneConfig = { }; @Component({ + standalone: false, selector: "bl-split-pane", templateUrl: "split-pane.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/split-pane/split-separator/split-separator.component.ts b/desktop/src/@batch-flask/ui/split-pane/split-separator/split-separator.component.ts index 34609e7c81..5ae3d3a181 100644 --- a/desktop/src/@batch-flask/ui/split-pane/split-separator/split-separator.component.ts +++ b/desktop/src/@batch-flask/ui/split-pane/split-separator/split-separator.component.ts @@ -3,6 +3,7 @@ import { Component, EventEmitter, HostBinding, Input, Output } from "@angular/co import "./split-separator.scss"; @Component({ + standalone: false, selector: "bl-split-separator", templateUrl: "split-separator.html", }) diff --git a/desktop/src/@batch-flask/ui/summary-card/summary-card.component.ts b/desktop/src/@batch-flask/ui/summary-card/summary-card.component.ts index 25771eae5d..8a761eedcd 100644 --- a/desktop/src/@batch-flask/ui/summary-card/summary-card.component.ts +++ b/desktop/src/@batch-flask/ui/summary-card/summary-card.component.ts @@ -3,6 +3,7 @@ import { Component } from "@angular/core"; import "./summary-card.scss"; @Component({ + standalone: false, selector: "bl-summary-card", templateUrl: "summary-card.html", }) diff --git a/desktop/src/@batch-flask/ui/table/table-cell-def/table-cell-def.directive.ts b/desktop/src/@batch-flask/ui/table/table-cell-def/table-cell-def.directive.ts index 4ea09b04c2..596953adac 100644 --- a/desktop/src/@batch-flask/ui/table/table-cell-def/table-cell-def.directive.ts +++ b/desktop/src/@batch-flask/ui/table/table-cell-def/table-cell-def.directive.ts @@ -3,6 +3,7 @@ import { } from "@angular/core"; @Directive({ + standalone: false, selector: "[blCellDef]", }) export class TableCellDefDirective { diff --git a/desktop/src/@batch-flask/ui/table/table-column/table-column.component.ts b/desktop/src/@batch-flask/ui/table/table-column/table-column.component.ts index 46c07c1d59..111969fcf4 100644 --- a/desktop/src/@batch-flask/ui/table/table-column/table-column.component.ts +++ b/desktop/src/@batch-flask/ui/table/table-column/table-column.component.ts @@ -15,6 +15,7 @@ import { TableComponent } from "../table.component"; let idCounter = 0; @Component({ + standalone: false, selector: "bl-column", template: ``, changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/table/table-head-cell-def/table-head-cell-def.directive.ts b/desktop/src/@batch-flask/ui/table/table-head-cell-def/table-head-cell-def.directive.ts index 7be594c7d1..f4d546fba4 100644 --- a/desktop/src/@batch-flask/ui/table/table-head-cell-def/table-head-cell-def.directive.ts +++ b/desktop/src/@batch-flask/ui/table/table-head-cell-def/table-head-cell-def.directive.ts @@ -3,6 +3,7 @@ import { } from "@angular/core"; @Directive({ + standalone: false, selector: "[blHeadCellDef]", }) export class TableHeadCellDefDirective { diff --git a/desktop/src/@batch-flask/ui/table/table-head/table-head-cell/table-head-cell.component.ts b/desktop/src/@batch-flask/ui/table/table-head/table-head-cell/table-head-cell.component.ts index 3cb7167ae8..7cb2fe6422 100644 --- a/desktop/src/@batch-flask/ui/table/table-head/table-head-cell/table-head-cell.component.ts +++ b/desktop/src/@batch-flask/ui/table/table-head/table-head-cell/table-head-cell.component.ts @@ -11,6 +11,7 @@ import { Subscription } from "rxjs"; import "./table-head-cell.scss"; @Component({ + standalone: false, selector: "bl-table-head-cell", templateUrl: "table-head-cell.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/table/table-head/table-head.component.ts b/desktop/src/@batch-flask/ui/table/table-head/table-head.component.ts index 386b8faed6..706ea40767 100644 --- a/desktop/src/@batch-flask/ui/table/table-head/table-head.component.ts +++ b/desktop/src/@batch-flask/ui/table/table-head/table-head.component.ts @@ -22,6 +22,7 @@ interface ResizeRef { initialSizeRight?: number; } @Component({ + standalone: false, selector: "bl-thead", templateUrl: "table-head.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/table/table-row-render/table-row-render.component.ts b/desktop/src/@batch-flask/ui/table/table-row-render/table-row-render.component.ts index 265bf8b6ee..a835df2d21 100644 --- a/desktop/src/@batch-flask/ui/table/table-row-render/table-row-render.component.ts +++ b/desktop/src/@batch-flask/ui/table/table-row-render/table-row-render.component.ts @@ -17,6 +17,7 @@ import { TableColumnRef } from "../table-column-manager"; import { TableComponent, TableConfig } from "../table.component"; @Component({ + standalone: false, selector: "bl-row-render", templateUrl: "table-row-render.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/table/table.component.spec.ts b/desktop/src/@batch-flask/ui/table/table.component.spec.ts index 988a2e6d3f..dd530b41b5 100644 --- a/desktop/src/@batch-flask/ui/table/table.component.spec.ts +++ b/desktop/src/@batch-flask/ui/table/table.component.spec.ts @@ -28,7 +28,7 @@ const sizeD = { id: "size_d", name: "Size D", numberOfCores: 2, resourceDiskSize /* eslint-disable @angular-eslint/component-class-suffix */ /* eslint-disable */ -@Directive() +@Directive({ standalone: false }) // eslint-disable-next-line @angular-eslint/directive-class-suffix class BaseTestComponent { public sizes: any[] = []; @@ -37,6 +37,7 @@ class BaseTestComponent { } @Component({ + standalone: false, template: ` @@ -457,6 +458,7 @@ describe("TableComponent", () => { }); @Component({ + standalone: false, template: ` @@ -470,6 +472,7 @@ class MissingColumnName extends BaseTestComponent { } @Component({ + standalone: false, template: ` @@ -487,6 +490,7 @@ class DuplicateColumnName extends BaseTestComponent { } @Component({ + standalone: false, template: ` diff --git a/desktop/src/@batch-flask/ui/table/table.component.ts b/desktop/src/@batch-flask/ui/table/table.component.ts index 13e31f01c2..53974f87df 100644 --- a/desktop/src/@batch-flask/ui/table/table.component.ts +++ b/desktop/src/@batch-flask/ui/table/table.component.ts @@ -66,6 +66,7 @@ export interface DropEvent { let idCounter = 0; @Component({ + standalone: false, selector: "bl-table", templateUrl: "table.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/tabs/tab-group.component.ts b/desktop/src/@batch-flask/ui/tabs/tab-group.component.ts index 50722b5564..6077759b0e 100644 --- a/desktop/src/@batch-flask/ui/tabs/tab-group.component.ts +++ b/desktop/src/@batch-flask/ui/tabs/tab-group.component.ts @@ -5,6 +5,7 @@ import { ActivatedRoute, Router } from "@angular/router"; import { TabComponent } from "./tab.component"; @Component({ + standalone: false, selector: "bl-tab-group", templateUrl: "tab-group.html", }) diff --git a/desktop/src/@batch-flask/ui/tabs/tab.component.ts b/desktop/src/@batch-flask/ui/tabs/tab.component.ts index 81c5eef137..e350df3e05 100644 --- a/desktop/src/@batch-flask/ui/tabs/tab.component.ts +++ b/desktop/src/@batch-flask/ui/tabs/tab.component.ts @@ -3,6 +3,7 @@ import { Component, ContentChild, Input, TemplateRef, ViewChild } from "@angular import "./tabs.scss"; @Component({ + standalone: false, selector: "bl-tab-label", template: "", }) @@ -12,6 +13,7 @@ export class TabLabelComponent { } @Component({ + standalone: false, selector: "bl-tab", template: "", }) diff --git a/desktop/src/@batch-flask/ui/tabs/tabs.spec.ts b/desktop/src/@batch-flask/ui/tabs/tabs.spec.ts index b5d9c35a79..2446cec24b 100644 --- a/desktop/src/@batch-flask/ui/tabs/tabs.spec.ts +++ b/desktop/src/@batch-flask/ui/tabs/tabs.spec.ts @@ -8,6 +8,7 @@ import { TabsModule } from "@batch-flask/ui/tabs"; import { BehaviorSubject } from "rxjs"; @Component({ + standalone: false, template: ` diff --git a/desktop/src/@batch-flask/ui/tags/tag-list/tag-list.component.ts b/desktop/src/@batch-flask/ui/tags/tag-list/tag-list.component.ts index 9435dd7393..7b53355071 100644 --- a/desktop/src/@batch-flask/ui/tags/tag-list/tag-list.component.ts +++ b/desktop/src/@batch-flask/ui/tags/tag-list/tag-list.component.ts @@ -4,6 +4,7 @@ import { List } from "immutable"; import "./tag-list.scss"; @Component({ + standalone: false, selector: "bl-tag-list", templateUrl: "tag-list.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/tags/tags.component.spec.ts b/desktop/src/@batch-flask/ui/tags/tags.component.spec.ts index ecbc899c20..80f4765485 100644 --- a/desktop/src/@batch-flask/ui/tags/tags.component.spec.ts +++ b/desktop/src/@batch-flask/ui/tags/tags.component.spec.ts @@ -9,6 +9,7 @@ import { of } from "rxjs"; import { click } from "test/utils/helpers"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/@batch-flask/ui/tags/tags.component.ts b/desktop/src/@batch-flask/ui/tags/tags.component.ts index d0c8a97ee4..248bafc21c 100644 --- a/desktop/src/@batch-flask/ui/tags/tags.component.ts +++ b/desktop/src/@batch-flask/ui/tags/tags.component.ts @@ -14,6 +14,7 @@ import { Observable } from "rxjs"; import "./tags.scss"; @Component({ + standalone: false, selector: "bl-tags", templateUrl: "tags.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/testing/editor/editor.testing.module.ts b/desktop/src/@batch-flask/ui/testing/editor/editor.testing.module.ts index b3a0e4f819..fd47711a86 100644 --- a/desktop/src/@batch-flask/ui/testing/editor/editor.testing.module.ts +++ b/desktop/src/@batch-flask/ui/testing/editor/editor.testing.module.ts @@ -3,6 +3,7 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; import { EditorConfig } from "@batch-flask/ui/editor"; @Component({ + standalone: false, selector: "bl-editor", template: ``, providers: [ diff --git a/desktop/src/@batch-flask/ui/testing/virtual-scroll/virtual-scroll.testing.module.ts b/desktop/src/@batch-flask/ui/testing/virtual-scroll/virtual-scroll.testing.module.ts index 3f8d17c222..be1717a6e9 100644 --- a/desktop/src/@batch-flask/ui/testing/virtual-scroll/virtual-scroll.testing.module.ts +++ b/desktop/src/@batch-flask/ui/testing/virtual-scroll/virtual-scroll.testing.module.ts @@ -3,6 +3,7 @@ import { Component, ContentChild, EventEmitter, Input, NgModule, OnChanges, Outp import { VirtualScrollComponent, VirtualScrollRowDirective } from "@batch-flask/ui/virtual-scroll"; @Component({ + standalone: false, selector: "bl-virtual-scroll", template: ` ", }) diff --git a/desktop/src/@batch-flask/ui/time-range-picker/time-range-picker.component.spec.ts b/desktop/src/@batch-flask/ui/time-range-picker/time-range-picker.component.spec.ts index 7d6941f2fa..c60be9258b 100644 --- a/desktop/src/@batch-flask/ui/time-range-picker/time-range-picker.component.spec.ts +++ b/desktop/src/@batch-flask/ui/time-range-picker/time-range-picker.component.spec.ts @@ -1,7 +1,7 @@ import { OverlayContainer } from "@angular/cdk/overlay"; import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed, inject } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { TimeZoneService } from "@batch-flask/core"; import { @@ -16,6 +16,7 @@ import { TimeRangePickerComponent } from "./time-range-picker.component"; import { QuickRanges, TimeRange } from "./time-range.model"; @Component({ + standalone: false, selector: "bl-datetime-picker", template: "", providers: [controlValueAccessorProvider(() => FakeDateTimePickerComponent)], }) @@ -24,10 +25,11 @@ class FakeDateTimePickerComponent extends MockControlValueAccessorComponent`, }) class TestComponent { - public control = new FormControl(QuickRanges.last24h); + public control = new UntypedFormControl(QuickRanges.last24h); } describe("TimeRangePickerComponent", () => { diff --git a/desktop/src/@batch-flask/ui/time-range-picker/time-range-picker.component.ts b/desktop/src/@batch-flask/ui/time-range-picker/time-range-picker.component.ts index 7059716835..ec96b6a15c 100644 --- a/desktop/src/@batch-flask/ui/time-range-picker/time-range-picker.component.ts +++ b/desktop/src/@batch-flask/ui/time-range-picker/time-range-picker.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, OnDestroy, forwardRef, } from "@angular/core"; -import { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR, ValidationErrors } from "@angular/forms"; +import { ControlValueAccessor, UntypedFormBuilder, UntypedFormGroup, NG_VALUE_ACCESSOR, ValidationErrors } from "@angular/forms"; import { I18nService, TimeZoneService } from "@batch-flask/core"; import { DateUtils } from "@batch-flask/utils"; import { DateTime, Duration } from "luxon"; @@ -14,6 +14,7 @@ import "./time-range-picker.scss"; let idCounter = 0; @Component({ + standalone: false, selector: "bl-time-range-picker", templateUrl: "time-range-picker.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -33,7 +34,7 @@ export class TimeRangePickerComponent implements ControlValueAccessor, OnDestroy ]; @Input() public showLabel = true; - public customRange: FormGroup; + public customRange: UntypedFormGroup; public current: QuickRange | TimeRangeAttributes | null = null; public currentLabel: string; public _currentTimezone: string; @@ -45,7 +46,7 @@ export class TimeRangePickerComponent implements ControlValueAccessor, OnDestroy private changeDetector: ChangeDetectorRef, private i18n: I18nService, timezoneService: TimeZoneService, - formBuilder: FormBuilder) { + formBuilder: UntypedFormBuilder) { this.customRange = formBuilder.group( { start: [null], @@ -153,7 +154,7 @@ export class TimeRangePickerComponent implements ControlValueAccessor, OnDestroy return DateUtils.prettyDate(DateTime.fromJSDate(date).setZone(this._currentTimezone)); } - private _validateCustomRange(c: FormGroup): ValidationErrors { + private _validateCustomRange(c: UntypedFormGroup): ValidationErrors { let { start, end } = c.value; if (!start && !end) { return { diff --git a/desktop/src/@batch-flask/ui/time-range-picker/time-range-picker.module.ts b/desktop/src/@batch-flask/ui/time-range-picker/time-range-picker.module.ts index a5715ad9bf..d84949f110 100644 --- a/desktop/src/@batch-flask/ui/time-range-picker/time-range-picker.module.ts +++ b/desktop/src/@batch-flask/ui/time-range-picker/time-range-picker.module.ts @@ -24,7 +24,6 @@ const privateComponents = []; ], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class TimeRangePickerModule { } diff --git a/desktop/src/@batch-flask/ui/timespan/timespan.component.spec.ts b/desktop/src/@batch-flask/ui/timespan/timespan.component.spec.ts index 932fd179f9..e794e618c1 100644 --- a/desktop/src/@batch-flask/ui/timespan/timespan.component.spec.ts +++ b/desktop/src/@batch-flask/ui/timespan/timespan.component.spec.ts @@ -5,6 +5,7 @@ import { DateTime } from "luxon"; import { TimespanComponent, TimespanDisplayType } from "./timespan.component"; @Component({ + standalone: false, template: ` diff --git a/desktop/src/@batch-flask/ui/timespan/timespan.component.ts b/desktop/src/@batch-flask/ui/timespan/timespan.component.ts index f2bc7eecac..faf869ff4b 100644 --- a/desktop/src/@batch-flask/ui/timespan/timespan.component.ts +++ b/desktop/src/@batch-flask/ui/timespan/timespan.component.ts @@ -11,6 +11,7 @@ export enum TimespanDisplayType { compact = "compact", } @Component({ + standalone: false, selector: "bl-timespan", template: `{{formattedValue}}`, changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/toolbar/toolbar.component.ts b/desktop/src/@batch-flask/ui/toolbar/toolbar.component.ts index 6b94b5a59c..8fe86d2e63 100644 --- a/desktop/src/@batch-flask/ui/toolbar/toolbar.component.ts +++ b/desktop/src/@batch-flask/ui/toolbar/toolbar.component.ts @@ -3,6 +3,7 @@ import { ChangeDetectionStrategy, Component, HostBinding } from "@angular/core"; import "./toolbar.scss"; @Component({ + standalone: false, selector: "bl-toolbar", templateUrl: "toolbar.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/toolbar/toolbar.module.ts b/desktop/src/@batch-flask/ui/toolbar/toolbar.module.ts index 65d33bee3b..ad6fde1210 100644 --- a/desktop/src/@batch-flask/ui/toolbar/toolbar.module.ts +++ b/desktop/src/@batch-flask/ui/toolbar/toolbar.module.ts @@ -9,7 +9,6 @@ const privateComponents = []; imports: [CommonModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class ToolbarModule { } diff --git a/desktop/src/@batch-flask/ui/validation/range-validator.directive.ts b/desktop/src/@batch-flask/ui/validation/range-validator.directive.ts index 27523c9b25..df0940269c 100644 --- a/desktop/src/@batch-flask/ui/validation/range-validator.directive.ts +++ b/desktop/src/@batch-flask/ui/validation/range-validator.directive.ts @@ -1,10 +1,10 @@ -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; export class RangeValidator { - public validator: (control: FormControl) => any; + public validator: (control: UntypedFormControl) => any; constructor(rangeStart: number, rangeEnd: number) { - this.validator = ((control: FormControl) => { + this.validator = ((control: UntypedFormControl) => { return control.value && (control.value < rangeStart || control.value > rangeEnd) ? { validateRange: { diff --git a/desktop/src/@batch-flask/ui/virtual-scroll/virtual-scroll-row.directive.ts b/desktop/src/@batch-flask/ui/virtual-scroll/virtual-scroll-row.directive.ts index 37f84cecb7..d820a99b0c 100644 --- a/desktop/src/@batch-flask/ui/virtual-scroll/virtual-scroll-row.directive.ts +++ b/desktop/src/@batch-flask/ui/virtual-scroll/virtual-scroll-row.directive.ts @@ -1,6 +1,7 @@ import { Directive, Input, TemplateRef } from "@angular/core"; @Directive({ + standalone: false, selector: "[blVirtualRow]", }) export class VirtualScrollRowDirective { diff --git a/desktop/src/@batch-flask/ui/virtual-scroll/virtual-scroll-tail/virtual-scroll-tail.component.ts b/desktop/src/@batch-flask/ui/virtual-scroll/virtual-scroll-tail/virtual-scroll-tail.component.ts index d0c19e25b5..99bfaeff88 100644 --- a/desktop/src/@batch-flask/ui/virtual-scroll/virtual-scroll-tail/virtual-scroll-tail.component.ts +++ b/desktop/src/@batch-flask/ui/virtual-scroll/virtual-scroll-tail/virtual-scroll-tail.component.ts @@ -3,6 +3,7 @@ import { ChangeDetectionStrategy, Component, HostBinding, Input } from "@angular import "./virtual-scroll-tail.scss"; @Component({ + standalone: false, selector: "bl-virtual-scroll-tail", templateUrl: "virtual-scroll-tail.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/virtual-scroll/virtual-scroll.component.spec.ts b/desktop/src/@batch-flask/ui/virtual-scroll/virtual-scroll.component.spec.ts index 9510f3ac58..f65d16b871 100644 --- a/desktop/src/@batch-flask/ui/virtual-scroll/virtual-scroll.component.spec.ts +++ b/desktop/src/@batch-flask/ui/virtual-scroll/virtual-scroll.component.spec.ts @@ -9,6 +9,7 @@ import { VirtualScrollComponent } from "./virtual-scroll.component"; /* eslint-disable */ @Component({ + standalone: false, template: ` diff --git a/desktop/src/@batch-flask/ui/vtabs/vtab-group.component.ts b/desktop/src/@batch-flask/ui/vtabs/vtab-group.component.ts index 2317c67bf0..97fb73c693 100644 --- a/desktop/src/@batch-flask/ui/vtabs/vtab-group.component.ts +++ b/desktop/src/@batch-flask/ui/vtabs/vtab-group.component.ts @@ -5,6 +5,7 @@ import { log } from "@batch-flask/utils"; import { VTabComponent } from "./vtab.component"; @Component({ + standalone: false, selector: "bl-vtab-group", templateUrl: "vtab-group.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/@batch-flask/ui/vtabs/vtab.component.ts b/desktop/src/@batch-flask/ui/vtabs/vtab.component.ts index 3b99478049..fafdef006a 100644 --- a/desktop/src/@batch-flask/ui/vtabs/vtab.component.ts +++ b/desktop/src/@batch-flask/ui/vtabs/vtab.component.ts @@ -3,6 +3,7 @@ import { Component, Input, TemplateRef, ViewChild } from "@angular/core"; import "./vtab.scss"; @Component({ + standalone: false, selector: "bl-vtab", templateUrl: "vtab.html", }) diff --git a/desktop/src/@batch-flask/ui/workspace/feature-visible.directive.ts b/desktop/src/@batch-flask/ui/workspace/feature-visible.directive.ts index 09e73fbb4e..6a08016162 100644 --- a/desktop/src/@batch-flask/ui/workspace/feature-visible.directive.ts +++ b/desktop/src/@batch-flask/ui/workspace/feature-visible.directive.ts @@ -13,6 +13,7 @@ import { Workspace } from "./workspace.model"; import { WorkspaceService } from "./workspace.service"; @Directive({ + standalone: false, selector: "[blFeatureOn]", }) export class FeatureVisibleDirective implements OnInit, OnDestroy, OnChanges { diff --git a/desktop/src/@batch-flask/utils/form-utils/form-utils.spec.ts b/desktop/src/@batch-flask/utils/form-utils/form-utils.spec.ts index decbd29822..a707e6a63f 100644 --- a/desktop/src/@batch-flask/utils/form-utils/form-utils.spec.ts +++ b/desktop/src/@batch-flask/utils/form-utils/form-utils.spec.ts @@ -1,22 +1,22 @@ -import { FormControl, FormGroup } from "@angular/forms"; +import { UntypedFormControl, UntypedFormGroup } from "@angular/forms"; import { FormUtils } from "./form-utils"; describe("FormUtils", () => { describe("#getControl", () => { - let control1: FormControl; - let control2: FormControl; + let control1: UntypedFormControl; + let control2: UntypedFormControl; beforeEach(() => { - control1 = new FormControl(); - control2 = new FormControl(); + control1 = new UntypedFormControl(); + control2 = new UntypedFormControl(); control1.setValue("Control 1"); control2.setValue("Control 2"); }); it("should get a simple control", () => { - const group = new FormGroup({ + const group = new UntypedFormGroup({ control1, control2, }); @@ -26,11 +26,11 @@ describe("FormUtils", () => { }); it("should get a nested control", () => { - const group = new FormGroup({ - group1: new FormGroup({ + const group = new UntypedFormGroup({ + group1: new UntypedFormGroup({ control1, }), - group2: new FormGroup({ + group2: new UntypedFormGroup({ control2, }), }); @@ -40,8 +40,8 @@ describe("FormUtils", () => { }); it("should throws an error when not found", () => { - const group = new FormGroup({ - group1: new FormGroup({ + const group = new UntypedFormGroup({ + group1: new UntypedFormGroup({ control1, }), control2, diff --git a/desktop/src/@batch-flask/utils/form-utils/form-utils.ts b/desktop/src/@batch-flask/utils/form-utils/form-utils.ts index 2fb99cbef8..79ef4edc87 100644 --- a/desktop/src/@batch-flask/utils/form-utils/form-utils.ts +++ b/desktop/src/@batch-flask/utils/form-utils/form-utils.ts @@ -1,10 +1,10 @@ -import { AbstractControl, FormControl, FormGroup } from "@angular/forms"; +import { AbstractControl, UntypedFormControl, UntypedFormGroup } from "@angular/forms"; import { Observable, of } from "rxjs"; import { filter, map, take } from "rxjs/operators"; import { SanitizedError } from "../error"; export class FormUtils { - public static getControl(formGroup: FormGroup, path: string | string[]): AbstractControl { + public static getControl(formGroup: UntypedFormGroup, path: string | string[]): AbstractControl { const actualPath = Array.isArray(path) ? path : [path]; let current: AbstractControl | null = formGroup; for (const segment of actualPath) { @@ -16,7 +16,7 @@ export class FormUtils { return current; } - public static passValidation(control: FormControl, processErrors?: (errors: any) => any): Observable { + public static passValidation(control: UntypedFormControl, processErrors?: (errors: any) => any): Observable { const errorProcessor = processErrors || ((errors) => errors); if (control.status === "PENDING") { diff --git a/desktop/src/@batch-flask/utils/logging/node-logger.ts b/desktop/src/@batch-flask/utils/logging/node-logger.ts index d6aba5de77..631f868655 100644 --- a/desktop/src/@batch-flask/utils/logging/node-logger.ts +++ b/desktop/src/@batch-flask/utils/logging/node-logger.ts @@ -47,7 +47,7 @@ export class NodeLogger implements Logger { format = winston.format.simple(); } - transports.push(new DailyRotateFile({ + transports.push(new (DailyRotateFile as any)({ maxFiles: 3, filename: config.path, format, diff --git a/desktop/src/@batch-flask/utils/validators/json.ts b/desktop/src/@batch-flask/utils/validators/json.ts index edd06acb10..cd32cef84d 100644 --- a/desktop/src/@batch-flask/utils/validators/json.ts +++ b/desktop/src/@batch-flask/utils/validators/json.ts @@ -1,4 +1,4 @@ -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { Observable, of } from "rxjs"; import { debounceTime, map } from "rxjs/operators"; @@ -8,7 +8,7 @@ const stripJsonComments = require("strip-json-comments"); /** * Validator that requires controls to have a valid json */ -export function validJsonConfig(c: FormControl): Observable { +export function validJsonConfig(c: UntypedFormControl): Observable { return of(null).pipe( debounceTime(400), map(() => { diff --git a/desktop/src/@batch-flask/utils/validators/number/number.spec.ts b/desktop/src/@batch-flask/utils/validators/number/number.spec.ts index 43b4b02d5c..9b6b0f3667 100644 --- a/desktop/src/@batch-flask/utils/validators/number/number.spec.ts +++ b/desktop/src/@batch-flask/utils/validators/number/number.spec.ts @@ -1,48 +1,48 @@ -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { max, min, number } from "./number"; describe("Number Validator", () => { describe("min validator", () => { it("return null when valid", () => { - expect(min(10)(new FormControl(10))).toBe(null); - expect(min(10)(new FormControl(15))).toBe(null); - expect(min(10)(new FormControl(100))).toBe(null); + expect(min(10)(new UntypedFormControl(10))).toBe(null); + expect(min(10)(new UntypedFormControl(15))).toBe(null); + expect(min(10)(new UntypedFormControl(100))).toBe(null); }); it("return error when invvalid", () => { - expect(min(10)(new FormControl(9))).toEqual({ min: true }); - expect(min(10)(new FormControl(1))).toEqual({ min: true }); - expect(min(10)(new FormControl(-11))).toEqual({ min: true }); + expect(min(10)(new UntypedFormControl(9))).toEqual({ min: true }); + expect(min(10)(new UntypedFormControl(1))).toEqual({ min: true }); + expect(min(10)(new UntypedFormControl(-11))).toEqual({ min: true }); }); }); describe("max validator", () => { it("return null when valid", () => { - expect(max(10)(new FormControl(10))).toBe(null); - expect(max(10)(new FormControl(9))).toBe(null); - expect(max(10)(new FormControl(-100))).toBe(null); + expect(max(10)(new UntypedFormControl(10))).toBe(null); + expect(max(10)(new UntypedFormControl(9))).toBe(null); + expect(max(10)(new UntypedFormControl(-100))).toBe(null); }); it("return error when invvalid", () => { - expect(max(10)(new FormControl(11))).toEqual({ max: true }); - expect(max(10)(new FormControl(15))).toEqual({ max: true }); - expect(max(10)(new FormControl(100))).toEqual({ max: true }); + expect(max(10)(new UntypedFormControl(11))).toEqual({ max: true }); + expect(max(10)(new UntypedFormControl(15))).toEqual({ max: true }); + expect(max(10)(new UntypedFormControl(100))).toEqual({ max: true }); }); }); describe("number validator", () => { it("return null when valid", () => { // Empty string is not considered and error as it could not be required - expect(number(new FormControl(""))).toBe(null); - expect(number(new FormControl("0"))).toBe(null); - expect(number(new FormControl("9"))).toBe(null); - expect(number(new FormControl("-100"))).toBe(null); - expect(number(new FormControl("1.43"))).toBe(null); + expect(number(new UntypedFormControl(""))).toBe(null); + expect(number(new UntypedFormControl("0"))).toBe(null); + expect(number(new UntypedFormControl("9"))).toBe(null); + expect(number(new UntypedFormControl("-100"))).toBe(null); + expect(number(new UntypedFormControl("1.43"))).toBe(null); }); it("return error when invvalid", () => { - expect(number(new FormControl("abcdef"))).toEqual({ number: true }); - expect(number(new FormControl("1f23"))).toEqual({ number: true }); + expect(number(new UntypedFormControl("abcdef"))).toEqual({ number: true }); + expect(number(new UntypedFormControl("1f23"))).toEqual({ number: true }); }); }); }); diff --git a/desktop/src/app/app.component.ts b/desktop/src/app/app.component.ts index fc787aaef5..a3207f206e 100644 --- a/desktop/src/app/app.component.ts +++ b/desktop/src/app/app.component.ts @@ -27,6 +27,7 @@ import { initDesktopEnvironment } from "./environment/desktop-environment"; import { IpcEvent } from "common/constants"; @Component({ + standalone: false, selector: "bl-app", templateUrl: "app.layout.html", }) diff --git a/desktop/src/app/app.module.ts b/desktop/src/app/app.module.ts index 462578696e..85f58b6496 100644 --- a/desktop/src/app/app.module.ts +++ b/desktop/src/app/app.module.ts @@ -49,9 +49,6 @@ const modules = [ declarations: [ AppComponent, ], - entryComponents: [ - // imported in specific area modules - ], imports: [ NoopAnimationsModule, BrowserModule, @@ -64,7 +61,6 @@ const modules = [ useHash: false, paramsInheritanceStrategy: "always", preloadingStrategy: PreloadAllModules, - relativeLinkResolution: "legacy" }), BaseModule, KeyBindingsModule, diff --git a/desktop/src/app/components/account/account.module.ts b/desktop/src/app/components/account/account.module.ts index e76afb6c44..0793eb4583 100644 --- a/desktop/src/app/components/account/account.module.ts +++ b/desktop/src/app/components/account/account.module.ts @@ -45,13 +45,6 @@ const modules = [ TimeRangePickerModule, MatButtonToggleModule, ], - entryComponents: [ - AddLocalBatchAccountComponent, - EditLocalBatchAccountComponent, - BatchAccountCreateComponent, - DeleteAccountDialogComponent, - EditStorageAccountFormComponent, - ], }) export class AccountModule { } diff --git a/desktop/src/app/components/account/action/add/add-local-batch-account.component.ts b/desktop/src/app/components/account/action/add/add-local-batch-account.component.ts index 57587f3f99..b83dd41ae2 100644 --- a/desktop/src/app/components/account/action/add/add-local-batch-account.component.ts +++ b/desktop/src/app/components/account/action/add/add-local-batch-account.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component } from "@angular/core"; -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { SidebarRef } from "@batch-flask/ui"; import { UrlUtils } from "@batch-flask/utils"; @@ -9,18 +9,19 @@ import { LocalBatchAccountService } from "app/services"; import "./add-local-batch-account.scss"; @Component({ + standalone: false, selector: "bl-add-local-batch-account", templateUrl: "add-local-batch-account.html", changeDetection: ChangeDetectionStrategy.OnPush, }) export class AddLocalBatchAccountComponent { public title = "Add local batch account"; - public form: FormGroup; + public form: UntypedFormGroup; constructor( public sidebarRef: SidebarRef, private localAccountService: LocalBatchAccountService, - formBuilder: FormBuilder) { + formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ displayName: [""], diff --git a/desktop/src/app/components/account/action/add/edit-local-batch-account.component.ts b/desktop/src/app/components/account/action/add/edit-local-batch-account.component.ts index 47683ad644..a599d20d03 100644 --- a/desktop/src/app/components/account/action/add/edit-local-batch-account.component.ts +++ b/desktop/src/app/components/account/action/add/edit-local-batch-account.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component } from "@angular/core"; -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { SidebarRef } from "@batch-flask/ui"; import { UrlUtils } from "@batch-flask/utils"; @@ -9,19 +9,20 @@ import { LocalBatchAccountService } from "app/services"; import "./add-local-batch-account.scss"; @Component({ + standalone: false, selector: "bl-edit-local-batch-account", templateUrl: "add-local-batch-account.html", changeDetection: ChangeDetectionStrategy.OnPush, }) export class EditLocalBatchAccountComponent { public title = "Edit local batch account"; - public form: FormGroup; + public form: UntypedFormGroup; private _existingAccount: LocalBatchAccount; constructor( public sidebarRef: SidebarRef, private localAccountService: LocalBatchAccountService, - formBuilder: FormBuilder) { + formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ displayName: [""], diff --git a/desktop/src/app/components/account/action/create/batch-account-create.component.spec.ts b/desktop/src/app/components/account/action/create/batch-account-create.component.spec.ts index 1a8c7b59b0..8b80f7edef 100644 --- a/desktop/src/app/components/account/action/create/batch-account-create.component.spec.ts +++ b/desktop/src/app/components/account/action/create/batch-account-create.component.spec.ts @@ -1,7 +1,7 @@ import { HttpErrorResponse } from "@angular/common/http"; import { DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed, fakeAsync } from "@angular/core/testing"; -import { FormBuilder } from "@angular/forms"; +import { UntypedFormBuilder } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { NoopAnimationsModule } from "@angular/platform-browser/animations"; import { MaterialModule, ServerError } from "@batch-flask/core"; @@ -167,7 +167,7 @@ describe("BatchAccountCreateComponent ", () => { imports: [MaterialModule, NoopAnimationsModule, LocationPickerModule, I18nTestingModule], declarations: [...complexFormMockComponents, BatchAccountCreateComponent, ServerErrorMockComponent], providers: [ - { provide: FormBuilder, useValue: new FormBuilder() }, + { provide: UntypedFormBuilder, useValue: new UntypedFormBuilder() }, { provide: SidebarRef, useValue: null }, { provide: ArmBatchAccountService, useValue: accountServiceSpy }, { provide: AuthorizationHttpService, useValue: authServiceSpy }, diff --git a/desktop/src/app/components/account/action/create/batch-account-create.component.ts b/desktop/src/app/components/account/action/create/batch-account-create.component.ts index 2c17563d77..6c1868a040 100644 --- a/desktop/src/app/components/account/action/create/batch-account-create.component.ts +++ b/desktop/src/app/components/account/action/create/batch-account-create.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy } from "@angular/core"; -import { AbstractControl, FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms"; +import { AbstractControl, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { NotificationService } from "@batch-flask/ui/notifications"; import { Permission } from "@batch-flask/ui/permission"; @@ -23,12 +23,13 @@ import "./batch-account-create.scss"; const accountIdSuffix = ".batch.azure.com"; @Component({ + standalone: false, selector: "bl-batch-account-create", templateUrl: "batch-account-create.html", changeDetection: ChangeDetectionStrategy.OnPush, }) export class BatchAccountCreateComponent implements OnDestroy { - public form: FormGroup; + public form: UntypedFormGroup; public resourceGroups: ResourceGroup[] = []; public title = "Create batch account"; @@ -42,7 +43,7 @@ export class BatchAccountCreateComponent implements OnDestroy { public subscriptionService: SubscriptionService, public sidebarRef: SidebarRef, private changeDetector: ChangeDetectorRef, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private notificationService: NotificationService) { this.form = this._buildCreateForm(); this._subs.push(this._subscriptionOnChangeSub()); @@ -222,7 +223,7 @@ export class BatchAccountCreateComponent implements OnDestroy { @autobind() private _availabilityValidator() { - return (control: FormControl): Observable<{ [key: string]: any }> => { + return (control: UntypedFormControl): Observable<{ [key: string]: any }> => { const accountName = control.value; const subscription = this.form.controls.subscription.value; const location = this.form.controls.location.value; @@ -250,7 +251,7 @@ export class BatchAccountCreateComponent implements OnDestroy { @autobind() private _resourceGroupPermissionValidator() { - return (control: FormControl): Observable<{ [key: string]: any }> => { + return (control: UntypedFormControl): Observable<{ [key: string]: any }> => { let resourceGroup = control.value; if (!resourceGroup) { return of(null); @@ -283,7 +284,7 @@ export class BatchAccountCreateComponent implements OnDestroy { @autobind() private _accountQuotaValidator() { - return (control: FormControl): Observable<{ [key: string]: any }> => { + return (control: UntypedFormControl): Observable<{ [key: string]: any }> => { const location = control.value; const subscription = this.form.controls.subscription.value; return this.accountService.accountQuota(subscription, location).pipe( diff --git a/desktop/src/app/components/account/action/delete/delete-account-dialog.component.ts b/desktop/src/app/components/account/action/delete/delete-account-dialog.component.ts index 733a13b0c3..ce8a53a77b 100644 --- a/desktop/src/app/components/account/action/delete/delete-account-dialog.component.ts +++ b/desktop/src/app/components/account/action/delete/delete-account-dialog.component.ts @@ -5,6 +5,7 @@ import { ConfirmationDialog } from "@batch-flask/ui/dialogs"; import { BatchAccount } from "app/models"; @Component({ + standalone: false, selector: "bl-delete-account-dialog", templateUrl: "delete-account-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/account/action/edit-storage-account/edit-storage-account-form.component.ts b/desktop/src/app/components/account/action/edit-storage-account/edit-storage-account-form.component.ts index d48b928b96..6221508bba 100644 --- a/desktop/src/app/components/account/action/edit-storage-account/edit-storage-account-form.component.ts +++ b/desktop/src/app/components/account/action/edit-storage-account/edit-storage-account-form.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { SidebarRef } from "@batch-flask/ui/sidebar"; import { ArmBatchAccount } from "app/models"; @@ -10,6 +10,7 @@ import { Observable } from "rxjs"; import "./edit-storage-account-form.scss"; @Component({ + standalone: false, selector: "bl-edit-storage-account-form", templateUrl: "edit-storage-account-form.html", }) @@ -23,7 +24,7 @@ export class EditStorageAccountFormComponent { } public get account() { return this._account; } - public storageAccountId = new FormControl(); + public storageAccountId = new UntypedFormControl(); private _account: ArmBatchAccount; diff --git a/desktop/src/app/components/account/base/auto-storage-account-picker/auto-storage-account-picker.component.spec.ts b/desktop/src/app/components/account/base/auto-storage-account-picker/auto-storage-account-picker.component.spec.ts index 2cace588d8..cc71829976 100644 --- a/desktop/src/app/components/account/base/auto-storage-account-picker/auto-storage-account-picker.component.spec.ts +++ b/desktop/src/app/components/account/base/auto-storage-account-picker/auto-storage-account-picker.component.spec.ts @@ -21,6 +21,7 @@ const account = new ArmBatchAccount({ } as any); @Component({ + standalone: false, template: ` diff --git a/desktop/src/app/components/account/base/auto-storage-account-picker/auto-storage-account-picker.component.ts b/desktop/src/app/components/account/base/auto-storage-account-picker/auto-storage-account-picker.component.ts index 93329b54dc..9e41174814 100644 --- a/desktop/src/app/components/account/base/auto-storage-account-picker/auto-storage-account-picker.component.ts +++ b/desktop/src/app/components/account/base/auto-storage-account-picker/auto-storage-account-picker.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnInit, forwardRef, ViewChild } from "@angular/core"; -import { ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms"; +import { ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms"; import { MatTooltip } from "@angular/material/tooltip"; import { ListSelection } from "@batch-flask/core"; import { LoadingStatus } from "@batch-flask/ui/loading"; @@ -10,6 +10,7 @@ import { List } from "immutable"; import "./auto-storage-account-picker.scss"; @Component({ + standalone: false, selector: "bl-auto-storage-account-picker", templateUrl: "auto-storage-account-picker.html", providers: [ @@ -56,7 +57,7 @@ export class AutoStorageAccountPickerComponent implements OnInit, ControlValueAc // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } diff --git a/desktop/src/app/components/account/browse/account-dropdown.component.ts b/desktop/src/app/components/account/browse/account-dropdown.component.ts index 7c28844a31..11af14c402 100644 --- a/desktop/src/app/components/account/browse/account-dropdown.component.ts +++ b/desktop/src/app/components/account/browse/account-dropdown.component.ts @@ -7,6 +7,7 @@ import { Subscription } from "rxjs"; import "./account-dropdown.scss"; @Component({ + standalone: false, selector: "bl-account-dropdown", templateUrl: "account-dropdown.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/account/browse/account-list/account-list.component.ts b/desktop/src/app/components/account/browse/account-list/account-list.component.ts index b3ad547546..f8cf1247a3 100644 --- a/desktop/src/app/components/account/browse/account-list/account-list.component.ts +++ b/desktop/src/app/components/account/browse/account-list/account-list.component.ts @@ -13,6 +13,7 @@ import { takeUntil } from "rxjs/operators"; import "./account-list.scss"; @Component({ + standalone: false, selector: "bl-account-list", templateUrl: "account-list.html", providers: [ diff --git a/desktop/src/app/components/account/details/account-cost-card/account-cost-card.component.spec.ts b/desktop/src/app/components/account/details/account-cost-card/account-cost-card.component.spec.ts index 084e93271c..407be6ace0 100644 --- a/desktop/src/app/components/account/details/account-cost-card/account-cost-card.component.spec.ts +++ b/desktop/src/app/components/account/details/account-cost-card/account-cost-card.component.spec.ts @@ -48,6 +48,7 @@ const costs: BatchAccountCost = { }; @Component({ + standalone: false, selector: "bl-time-range-picker", template: "", providers: [controlValueAccessorProvider(() => FakeTimeRangePickerComponent)], }) @@ -57,6 +58,7 @@ class FakeTimeRangePickerComponent extends MockControlValueAccessorComponent`, }) class TestComponent { diff --git a/desktop/src/app/components/account/details/account-cost-card/account-cost-card.component.ts b/desktop/src/app/components/account/details/account-cost-card/account-cost-card.component.ts index d5dc7f352f..cfae7e75e9 100644 --- a/desktop/src/app/components/account/details/account-cost-card/account-cost-card.component.ts +++ b/desktop/src/app/components/account/details/account-cost-card/account-cost-card.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { QuickRange, QuickRanges, TimeRange } from "@batch-flask/ui"; import { log } from "@batch-flask/utils"; import { ArmBatchAccount } from "app/models"; @@ -15,6 +15,7 @@ import { catchError, filter, startWith, switchMap, takeUntil } from "rxjs/operat import "./account-cost-card.scss"; @Component({ + standalone: false, selector: "bl-account-cost-card", templateUrl: "account-cost-card.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -36,7 +37,7 @@ export class AccountCostCardComponent implements OnInit, OnDestroy { QuickRanges.thisYearRange, ]; - public timeRange = new FormControl(QuickRanges.thisMonthRange); + public timeRange = new UntypedFormControl(QuickRanges.thisMonthRange); public costMangementUrl: string | null = null; diff --git a/desktop/src/app/components/account/details/account-default.component.ts b/desktop/src/app/components/account/details/account-default.component.ts index fc76bbc22c..03fcd8f5cb 100644 --- a/desktop/src/app/components/account/details/account-default.component.ts +++ b/desktop/src/app/components/account/details/account-default.component.ts @@ -6,6 +6,7 @@ import { Subscription } from "rxjs"; import { BatchAccountCreateComponent } from "../action/create"; @Component({ + standalone: false, selector: "bl-account-details-home", template: `
diff --git a/desktop/src/app/components/account/details/account-details.component.ts b/desktop/src/app/components/account/details/account-details.component.ts index 2ea7e0b6e4..9ed21372cd 100644 --- a/desktop/src/app/components/account/details/account-details.component.ts +++ b/desktop/src/app/components/account/details/account-details.component.ts @@ -14,6 +14,7 @@ import { takeUntil } from "rxjs/operators"; import "./account-details.scss"; @Component({ + standalone: false, selector: "bl-account-details", templateUrl: "account-details.html", }) diff --git a/desktop/src/app/components/account/details/account-monitoring-section/account-monitoring-section.component.ts b/desktop/src/app/components/account/details/account-monitoring-section/account-monitoring-section.component.ts index 1303305c87..eb2ed4ee0a 100644 --- a/desktop/src/app/components/account/details/account-monitoring-section/account-monitoring-section.component.ts +++ b/desktop/src/app/components/account/details/account-monitoring-section/account-monitoring-section.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from "@angular/core"; -import { FormControl, FormGroup } from "@angular/forms"; +import { UntypedFormControl, UntypedFormGroup } from "@angular/forms"; import { ChartType, QuickRanges } from "@batch-flask/ui"; import { ArmBatchAccount, BatchAccount } from "app/models"; import { MonitorChartType } from "app/services"; @@ -7,6 +7,7 @@ import { MonitorChartType } from "app/services"; import "./account-monitoring-section.scss"; @Component({ + standalone: false, selector: "bl-account-monitoring-section", templateUrl: "account-monitoring-section.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -19,14 +20,14 @@ export class AccountMonitoringSectionComponent { public isArmAccount = true; - public settings: FormGroup; + public settings: UntypedFormGroup; public currentRange = QuickRanges.last24h; public chartType: ChartType = ChartType.Line; constructor(private changeDetector: ChangeDetectorRef) { - this.settings = new FormGroup({ - timeRange: new FormControl(this.currentRange), - chartType: new FormControl(this.chartType), + this.settings = new UntypedFormGroup({ + timeRange: new UntypedFormControl(this.currentRange), + chartType: new UntypedFormControl(this.chartType), }); this.settings.valueChanges.subscribe(({ timeRange, chartType }) => { this.currentRange = timeRange; diff --git a/desktop/src/app/components/account/details/account-quotas-card/account-quotas-card.component.ts b/desktop/src/app/components/account/details/account-quotas-card/account-quotas-card.component.ts index 611e3a6d4f..f8a293b549 100644 --- a/desktop/src/app/components/account/details/account-quotas-card/account-quotas-card.component.ts +++ b/desktop/src/app/components/account/details/account-quotas-card/account-quotas-card.component.ts @@ -11,6 +11,7 @@ import { Subscription } from "rxjs"; import "./account-quotas-card.scss"; @Component({ + standalone: false, selector: "bl-account-quotas-card", templateUrl: "account-quotas-card.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/account/details/account-summary-card/account-summary-card.component.spec.ts b/desktop/src/app/components/account/details/account-summary-card/account-summary-card.component.spec.ts index 21fb1a8103..e926d30434 100644 --- a/desktop/src/app/components/account/details/account-summary-card/account-summary-card.component.spec.ts +++ b/desktop/src/app/components/account/details/account-summary-card/account-summary-card.component.spec.ts @@ -52,6 +52,7 @@ const acc1 = new ArmBatchAccount({ }); @Component({ + standalone: false, template: ``, }) class TestComponent { @@ -59,6 +60,7 @@ class TestComponent { } @Component({ + standalone: false, selector: "bl-account-quotas-card", template: "", }) @@ -67,6 +69,7 @@ class AccountQuotasCardMockComponent { } @Component({ + standalone: false, selector: "bl-storage-account-card", template: "", }) diff --git a/desktop/src/app/components/account/details/account-summary-card/account-summary-card.component.ts b/desktop/src/app/components/account/details/account-summary-card/account-summary-card.component.ts index bd13727288..e50591657b 100644 --- a/desktop/src/app/components/account/details/account-summary-card/account-summary-card.component.ts +++ b/desktop/src/app/components/account/details/account-summary-card/account-summary-card.component.ts @@ -8,6 +8,7 @@ import { BatchAccountCommands } from "../../action"; import "./account-summary-card.scss"; @Component({ + standalone: false, selector: "bl-account-summary-card", templateUrl: "account-summary-card.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/account/details/getting-started-card/getting-started-card.component.ts b/desktop/src/app/components/account/details/getting-started-card/getting-started-card.component.ts index b59afa454a..cbd5b782a2 100644 --- a/desktop/src/app/components/account/details/getting-started-card/getting-started-card.component.ts +++ b/desktop/src/app/components/account/details/getting-started-card/getting-started-card.component.ts @@ -6,6 +6,7 @@ import { CredentialType, ProgrammaticUsageComponent } from "../programmatic-usag import "./getting-started-card.scss"; @Component({ + standalone: false, selector: "bl-getting-started-card", templateUrl: "getting-started-card.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/aad-app-picker/aad-app-picker.component.ts b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/aad-app-picker/aad-app-picker.component.ts index ce452b0301..4c9f8f2d5f 100644 --- a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/aad-app-picker/aad-app-picker.component.ts +++ b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/aad-app-picker/aad-app-picker.component.ts @@ -13,6 +13,7 @@ import { catchError } from "rxjs/operators"; import "./aad-app-picker.scss"; @Component({ + standalone: false, selector: "bl-aad-app-picker", templateUrl: "aad-app-picker.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/aad-app-secret-picker/aad-app-secret-picker.component.ts b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/aad-app-secret-picker/aad-app-secret-picker.component.ts index 1e8b3f35bc..1697f7845a 100644 --- a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/aad-app-secret-picker/aad-app-secret-picker.component.ts +++ b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/aad-app-secret-picker/aad-app-secret-picker.component.ts @@ -1,6 +1,6 @@ import { Component, forwardRef } from "@angular/core"; import { - AbstractControl, ControlValueAccessor, FormBuilder, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, + AbstractControl, ControlValueAccessor, UntypedFormBuilder, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, } from "@angular/forms"; import { DateTime } from "luxon"; @@ -14,6 +14,7 @@ enum Expire { } @Component({ + standalone: false, selector: "bl-aad-app-secret-picker", templateUrl: "aad-app-secret-picker.html", providers: [ @@ -24,10 +25,10 @@ enum Expire { export class AADAppSecretPickerComponent implements ControlValueAccessor, Validator { public Expire = Expire; - public form: FormGroup; + public form: UntypedFormGroup; private _propagateChanges: any; - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ name: [""], value: [""], diff --git a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/aad-credentials-picker.component.ts b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/aad-credentials-picker.component.ts index baaabb9bae..00abc18428 100644 --- a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/aad-credentials-picker.component.ts +++ b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/aad-credentials-picker.component.ts @@ -14,6 +14,7 @@ enum Step { createApplication, } @Component({ + standalone: false, selector: "bl-aad-credentials-picker", templateUrl: "aad-credentials-picker.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/create-new-aad-app/create-new-aad-app.component.ts b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/create-new-aad-app/create-new-aad-app.component.ts index 07adf45bfe..56de57ec19 100644 --- a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/create-new-aad-app/create-new-aad-app.component.ts +++ b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/create-new-aad-app/create-new-aad-app.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from "@angular/core"; -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms"; import { HttpCode, ServerError, autobind } from "@batch-flask/core"; import { log } from "@batch-flask/utils"; import { BatchAccount, RoleDefinition } from "app/models"; @@ -27,6 +27,7 @@ export interface AppCreatedEvent { const maxRetry = 36; @Component({ + standalone: false, selector: "bl-create-new-aad-app", templateUrl: "create-new-aad-app.html", }) @@ -35,7 +36,7 @@ export class CreateNewAadAppComponent { @Output() public appCreated = new EventEmitter(); @Output() public cancel = new EventEmitter(); - public form: FormGroup; + public form: UntypedFormGroup; public set createStatus(status: string) { this._createStatus = status; this.changeDetector.markForCheck(); @@ -44,7 +45,7 @@ export class CreateNewAadAppComponent { private _createStatus: string; constructor( - formBuilder: FormBuilder, + formBuilder: UntypedFormBuilder, private changeDetector: ChangeDetectorRef, private aadApplicationService: AADApplicationService, private servicePrincipalService: ServicePrincipalService, diff --git a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/generate-aad-app-secret/generate-aad-app-secret.component.ts b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/generate-aad-app-secret/generate-aad-app-secret.component.ts index 1b1f265551..9640f4604f 100644 --- a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/generate-aad-app-secret/generate-aad-app-secret.component.ts +++ b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/generate-aad-app-secret/generate-aad-app-secret.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, Output, } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { BatchAccount } from "app/models"; import { AADApplication } from "app/models/ms-graph"; @@ -10,6 +10,7 @@ import { AADApplicationService, ServicePrincipalService } from "app/services/ms- import "./generate-aad-app-secret.scss"; @Component({ + standalone: false, selector: "bl-generate-aad-app-secret", templateUrl: "generate-aad-app-secret.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -21,7 +22,7 @@ export class GenerateAADAppSecretComponent implements OnChanges { @Output() public cancel = new EventEmitter(); public principalId: string; - public secret = new FormControl({}); + public secret = new UntypedFormControl({}); public get storageAccountId() { const autoStorage = this.account && this.account.autoStorage; return autoStorage && autoStorage.storageAccountId; diff --git a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/resource-permission-button/resource-permission-button.component.spec.ts b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/resource-permission-button/resource-permission-button.component.spec.ts index 35fdbc06f5..ac4c83b2e6 100644 --- a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/resource-permission-button/resource-permission-button.component.spec.ts +++ b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/resource-permission-button/resource-permission-button.component.spec.ts @@ -29,6 +29,7 @@ const customRole = new RoleDefinition({ } as any); @Component({ + standalone: false, template: ` diff --git a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/resource-permission-button/resource-permission-button.component.ts b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/resource-permission-button/resource-permission-button.component.ts index 159f1a751f..42ba38e020 100644 --- a/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/resource-permission-button/resource-permission-button.component.ts +++ b/desktop/src/app/components/account/details/programmatic-usage/aad-credentials-picker/resource-permission-button/resource-permission-button.component.ts @@ -15,6 +15,7 @@ const allowedRoleNames = new Set([ let idCounter = 0; @Component({ + standalone: false, selector: "bl-resource-permission-button", templateUrl: "resource-permission-button.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/account/details/programmatic-usage/programmatic-usage.component.ts b/desktop/src/app/components/account/details/programmatic-usage/programmatic-usage.component.ts index e11ab6b6d7..3164cb6be4 100644 --- a/desktop/src/app/components/account/details/programmatic-usage/programmatic-usage.component.ts +++ b/desktop/src/app/components/account/details/programmatic-usage/programmatic-usage.component.ts @@ -19,6 +19,7 @@ export interface AADCredential { } @Component({ + standalone: false, selector: "bl-programmatic-usage", templateUrl: "programmatic-usage.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/account/details/programmatic-usage/programmatic-usage.module.ts b/desktop/src/app/components/account/details/programmatic-usage/programmatic-usage.module.ts index 15102d669b..48816473e0 100644 --- a/desktop/src/app/components/account/details/programmatic-usage/programmatic-usage.module.ts +++ b/desktop/src/app/components/account/details/programmatic-usage/programmatic-usage.module.ts @@ -37,9 +37,6 @@ const modules = [ exports: [ ...publicComponents, ], - entryComponents: [ - ProgrammaticUsageComponent, - ], imports: modules, }) export class ProgrammaticUsageModule { diff --git a/desktop/src/app/components/account/details/programmatic-usage/programming-sample/programming-sample.component.spec.ts b/desktop/src/app/components/account/details/programmatic-usage/programming-sample/programming-sample.component.spec.ts index 600a9a1ac8..4b19431de8 100644 --- a/desktop/src/app/components/account/details/programmatic-usage/programming-sample/programming-sample.component.spec.ts +++ b/desktop/src/app/components/account/details/programmatic-usage/programming-sample/programming-sample.component.spec.ts @@ -12,6 +12,7 @@ import { ProgrammingSampleComponent } from "./programming-sample.component"; const account1 = Fixtures.account.create(); @Component({ + standalone: false, template: ` diff --git a/desktop/src/app/components/account/details/programmatic-usage/programming-sample/programming-sample.component.ts b/desktop/src/app/components/account/details/programmatic-usage/programming-sample/programming-sample.component.ts index 5ddb2c4125..05bfd27c1a 100644 --- a/desktop/src/app/components/account/details/programmatic-usage/programming-sample/programming-sample.component.ts +++ b/desktop/src/app/components/account/details/programmatic-usage/programming-sample/programming-sample.component.ts @@ -23,6 +23,7 @@ const engineLanguages = { }; @Component({ + standalone: false, selector: "bl-programming-sample", templateUrl: "programming-sample.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/account/details/storage-account-card/storage-account-card.component.spec.ts b/desktop/src/app/components/account/details/storage-account-card/storage-account-card.component.spec.ts index 8ae483b778..7f69585d4e 100644 --- a/desktop/src/app/components/account/details/storage-account-card/storage-account-card.component.spec.ts +++ b/desktop/src/app/components/account/details/storage-account-card/storage-account-card.component.spec.ts @@ -28,6 +28,7 @@ const accountWithInvalidStorage = new ArmBatchAccount({ const storage1 = new StorageAccount({ id: "sub-1/storage-1", name: "storage-1", location: "westus" } as any); @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/account/details/storage-account-card/storage-account-card.component.ts b/desktop/src/app/components/account/details/storage-account-card/storage-account-card.component.ts index c1c8a5ff20..c964e90952 100644 --- a/desktop/src/app/components/account/details/storage-account-card/storage-account-card.component.ts +++ b/desktop/src/app/components/account/details/storage-account-card/storage-account-card.component.ts @@ -8,6 +8,7 @@ import { StorageAccountService } from "app/services"; import "./storage-account-card.scss"; @Component({ + standalone: false, selector: "bl-storage-account-card", templateUrl: "storage-account-card.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/account/home/account-home.component.ts b/desktop/src/app/components/account/home/account-home.component.ts index f64bf26d26..8e5fbb99fd 100644 --- a/desktop/src/app/components/account/home/account-home.component.ts +++ b/desktop/src/app/components/account/home/account-home.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewChild } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { Filter, FilterBuilder, autobind } from "@batch-flask/core"; import { ContextMenu, ContextMenuItem, ContextMenuService } from "@batch-flask/ui"; import { BrowseLayoutComponent, BrowseLayoutConfig } from "@batch-flask/ui/browse-layout"; @@ -14,6 +14,7 @@ import { BatchAccountCreateComponent } from "../action/create"; import "./account-home.scss"; @Component({ + standalone: false, selector: "bl-account-home", templateUrl: "account-home.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -26,7 +27,7 @@ export class AccountHomeComponent implements OnInit, OnDestroy { @ViewChild("layout", { static: true }) public layout: BrowseLayoutComponent; - public subscriptionIds = new FormControl(); + public subscriptionIds = new UntypedFormControl(); private _subs = []; diff --git a/desktop/src/app/components/account/monitoring/account-monitoring-home/account-monitoring-home.component.ts b/desktop/src/app/components/account/monitoring/account-monitoring-home/account-monitoring-home.component.ts index 6e49a766fa..c869d112c8 100644 --- a/desktop/src/app/components/account/monitoring/account-monitoring-home/account-monitoring-home.component.ts +++ b/desktop/src/app/components/account/monitoring/account-monitoring-home/account-monitoring-home.component.ts @@ -1,11 +1,12 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from "@angular/core"; -import { FormControl, FormGroup } from "@angular/forms"; +import { UntypedFormControl, UntypedFormGroup } from "@angular/forms"; import { ChartType, QuickRanges } from "@batch-flask/ui"; import { MonitorChartType } from "app/services"; import "./account-monitoring-home.scss"; @Component({ + standalone: false, selector: "bl-account-monitoring-home", templateUrl: "account-monitoring-home.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -19,14 +20,14 @@ export class AccountMonitoringHomeComponent { public chartTypes = Object.values(MonitorChartType); - public settings: FormGroup; + public settings: UntypedFormGroup; public currentRange = QuickRanges.last24h; public chartType: ChartType = ChartType.Line; constructor(private changeDetector: ChangeDetectorRef) { - this.settings = new FormGroup({ - timeRange: new FormControl(this.currentRange), - chartType: new FormControl(this.chartType), + this.settings = new UntypedFormGroup({ + timeRange: new UntypedFormControl(this.currentRange), + chartType: new UntypedFormControl(this.chartType), }); this.settings.valueChanges.subscribe(({ timeRange, chartType }) => { this.currentRange = timeRange; diff --git a/desktop/src/app/components/account/monitoring/account-monitoring.module.ts b/desktop/src/app/components/account/monitoring/account-monitoring.module.ts index bab120bb41..645f28977e 100644 --- a/desktop/src/app/components/account/monitoring/account-monitoring.module.ts +++ b/desktop/src/app/components/account/monitoring/account-monitoring.module.ts @@ -15,9 +15,6 @@ const publicComponents = [ imports: [CommonModule, ...commonModules, TimeRangePickerModule], declarations: [...privateComponents, publicComponents], exports: publicComponents, - entryComponents: [ - AccountMonitoringHomeComponent, - ], }) export class AccountMonitoringModule { diff --git a/desktop/src/app/components/account/monitoring/monitor-chart/monitor-chart.component.spec.ts b/desktop/src/app/components/account/monitoring/monitor-chart/monitor-chart.component.spec.ts index 61ac947f8b..e2e241c5ca 100644 --- a/desktop/src/app/components/account/monitoring/monitor-chart/monitor-chart.component.spec.ts +++ b/desktop/src/app/components/account/monitoring/monitor-chart/monitor-chart.component.spec.ts @@ -11,6 +11,7 @@ import { MonitorChartComponent } from "./monitor-chart.component"; const date1 = DateTime.local().minus({ hours: 1 }).toJSDate(); const date2 = new Date(); @Component({ + standalone: false, template: ` diff --git a/desktop/src/app/components/account/monitoring/monitor-chart/monitor-chart.component.ts b/desktop/src/app/components/account/monitoring/monitor-chart/monitor-chart.component.ts index 0532947bb8..2ea3eca226 100644 --- a/desktop/src/app/components/account/monitoring/monitor-chart/monitor-chart.component.ts +++ b/desktop/src/app/components/account/monitoring/monitor-chart/monitor-chart.component.ts @@ -27,6 +27,7 @@ const aggregationAttributes = { let idCounter = 0; @Component({ + standalone: false, selector: "bl-monitor-chart", templateUrl: "monitor-chart.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/application/action/create/application-create-dialog.component.spec.ts b/desktop/src/app/components/application/action/create/application-create-dialog.component.spec.ts index 3d679304ca..8ab95b4b8e 100644 --- a/desktop/src/app/components/application/action/create/application-create-dialog.component.spec.ts +++ b/desktop/src/app/components/application/action/create/application-create-dialog.component.spec.ts @@ -1,7 +1,7 @@ import { HttpErrorResponse } from "@angular/common/http"; import { DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormBuilder } from "@angular/forms"; +import { UntypedFormBuilder } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { ServerError } from "@batch-flask/core"; import { I18nTestingModule } from "@batch-flask/core/testing"; @@ -83,7 +83,7 @@ describe("ApplicationCreateDialogComponent ", () => { imports: [I18nTestingModule], declarations: [...complexFormMockComponents, ApplicationCreateDialogComponent, ServerErrorMockComponent], providers: [ - { provide: FormBuilder, useValue: new FormBuilder() }, + { provide: UntypedFormBuilder, useValue: new UntypedFormBuilder() }, { provide: SidebarRef, useValue: null }, { provide: BatchApplicationService, useValue: appServiceSpy }, { provide: BatchApplicationPackageService, useValue: appPackageServiceSpy }, diff --git a/desktop/src/app/components/application/action/create/application-create-dialog.component.ts b/desktop/src/app/components/application/action/create/application-create-dialog.component.ts index 0799978c71..dc7eaba85e 100644 --- a/desktop/src/app/components/application/action/create/application-create-dialog.component.ts +++ b/desktop/src/app/components/application/action/create/application-create-dialog.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { NotificationService } from "@batch-flask/ui/notifications"; import { SidebarRef } from "@batch-flask/ui/sidebar"; @@ -14,19 +14,20 @@ import { Observable, of, throwError } from "rxjs"; import { catchError, share, switchMap, tap } from "rxjs/operators"; @Component({ + standalone: false, selector: "bl-application-create-dialog", templateUrl: "application-create-dialog.html", }) export class ApplicationCreateDialogComponent { public file: File; - public form: FormGroup; + public form: UntypedFormGroup; public blockCount: number = 0; public progress: string; public title: string = "Create application package"; public description: string = "Upload an application package and give it an identifier to create your application"; constructor( - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, public sidebarRef: SidebarRef, private applicationService: BatchApplicationService, private packageService: BatchApplicationPackageService, diff --git a/desktop/src/app/components/application/action/edit/application-edit-dialog.component.spec.ts b/desktop/src/app/components/application/action/edit/application-edit-dialog.component.spec.ts index b6e0851f32..1a41198dcf 100644 --- a/desktop/src/app/components/application/action/edit/application-edit-dialog.component.spec.ts +++ b/desktop/src/app/components/application/action/edit/application-edit-dialog.component.spec.ts @@ -1,7 +1,7 @@ import { HttpErrorResponse } from "@angular/common/http"; import { DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormBuilder } from "@angular/forms"; +import { UntypedFormBuilder } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { ServerError } from "@batch-flask/core"; import { NotificationService } from "@batch-flask/ui/notifications"; @@ -55,7 +55,7 @@ describe("ApplicationEditDialogComponent ", () => { TestBed.configureTestingModule({ declarations: [...complexFormMockComponents, ApplicationEditDialogComponent, ServerErrorMockComponent], providers: [ - { provide: FormBuilder, useValue: new FormBuilder() }, + { provide: UntypedFormBuilder, useValue: new UntypedFormBuilder() }, { provide: SidebarRef, useValue: null }, { provide: BatchApplicationService, useValue: appServiceSpy }, { provide: BatchApplicationPackageService, useValue: appPackageServiceSpy }, diff --git a/desktop/src/app/components/application/action/edit/application-edit-dialog.component.ts b/desktop/src/app/components/application/action/edit/application-edit-dialog.component.ts index 87c96fc0c7..74f25612fb 100644 --- a/desktop/src/app/components/application/action/edit/application-edit-dialog.component.ts +++ b/desktop/src/app/components/application/action/edit/application-edit-dialog.component.ts @@ -1,6 +1,6 @@ import { HttpErrorResponse } from "@angular/common/http"; import { ChangeDetectorRef, Component } from "@angular/core"; -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { NotificationService } from "@batch-flask/ui/notifications"; import { SidebarRef } from "@batch-flask/ui/sidebar"; @@ -12,11 +12,12 @@ import { List } from "immutable"; import { Observable } from "rxjs"; @Component({ + standalone: false, selector: "bl-application-edit-dialog", templateUrl: "application-edit-dialog.html", }) export class ApplicationEditDialogComponent { - public form: FormGroup; + public form: UntypedFormGroup; public application: BatchApplication; public packages: List; public title: string = "Edit application"; @@ -24,7 +25,7 @@ export class ApplicationEditDialogComponent { constructor( private changeDetector: ChangeDetectorRef, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, public sidebarRef: SidebarRef, private applicationService: BatchApplicationService, private packageService: BatchApplicationPackageService, diff --git a/desktop/src/app/components/application/application.module.ts b/desktop/src/app/components/application/application.module.ts index d1a25f58a0..a0578dcace 100644 --- a/desktop/src/app/components/application/application.module.ts +++ b/desktop/src/app/components/application/application.module.ts @@ -21,10 +21,6 @@ const components = [ declarations: components, exports: components, imports: [BatchApplicationRoutingModule, ...commonModules ], - entryComponents: [ - ApplicationCreateDialogComponent, - ApplicationEditDialogComponent, - ], }) export class ApplicationModule { } diff --git a/desktop/src/app/components/application/browse/application-list.component.ts b/desktop/src/app/components/application/browse/application-list.component.ts index 3ee4f52172..d3b315b533 100644 --- a/desktop/src/app/components/application/browse/application-list.component.ts +++ b/desktop/src/app/components/application/browse/application-list.component.ts @@ -11,6 +11,7 @@ import { BatchApplicationCommands } from "../action"; import "./application-list.scss"; @Component({ + standalone: false, selector: "bl-application-list", templateUrl: "application-list.html", providers: [BatchApplicationCommands, { diff --git a/desktop/src/app/components/application/browse/preview/application-preview.component.spec.ts b/desktop/src/app/components/application/browse/preview/application-preview.component.spec.ts index 7e0b449308..479e1f35b4 100644 --- a/desktop/src/app/components/application/browse/preview/application-preview.component.spec.ts +++ b/desktop/src/app/components/application/browse/preview/application-preview.component.spec.ts @@ -5,6 +5,7 @@ import { BatchApplication } from "app/models"; import { ApplicationPreviewComponent } from "./application-preview.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/application/browse/preview/application-preview.component.ts b/desktop/src/app/components/application/browse/preview/application-preview.component.ts index 47461e1d9f..20a8c55012 100644 --- a/desktop/src/app/components/application/browse/preview/application-preview.component.ts +++ b/desktop/src/app/components/application/browse/preview/application-preview.component.ts @@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component, Input } from "@angular/core"; import { BatchApplication } from "app/models"; @Component({ + standalone: false, selector: "bl-application-preview", templateUrl: "application-preview.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/application/details/application-default.component.ts b/desktop/src/app/components/application/details/application-default.component.ts index 73230745f6..692b398344 100644 --- a/desktop/src/app/components/application/details/application-default.component.ts +++ b/desktop/src/app/components/application/details/application-default.component.ts @@ -1,6 +1,7 @@ import { Component } from "@angular/core"; @Component({ + standalone: false, selector: "bl-application-default", template: ` diff --git a/desktop/src/app/components/application/details/application-details.component.spec.ts b/desktop/src/app/components/application/details/application-details.component.spec.ts index a32c9eaf09..d75c5bf5fe 100644 --- a/desktop/src/app/components/application/details/application-details.component.spec.ts +++ b/desktop/src/app/components/application/details/application-details.component.spec.ts @@ -18,6 +18,7 @@ import { LoadingMockComponent } from "test/utils/mocks/components"; // mock application properties component @Component({ + standalone: false, selector: "bl-application-properties", template: "", }) @@ -33,6 +34,7 @@ class ApplicationPropertiesMockComponent { // mock application packages component @Component({ + standalone: false, selector: "bl-application-packages", template: "", }) @@ -42,6 +44,7 @@ class ApplicationPackagesMockComponent { // mock application error component @Component({ + standalone: false, selector: "bl-application-error-display", template: "", }) diff --git a/desktop/src/app/components/application/details/application-details.component.ts b/desktop/src/app/components/application/details/application-details.component.ts index 5f4b8fd62f..d644db9edc 100644 --- a/desktop/src/app/components/application/details/application-details.component.ts +++ b/desktop/src/app/components/application/details/application-details.component.ts @@ -7,6 +7,7 @@ import { Subscription } from "rxjs"; import { BatchApplicationCommands } from "../action"; @Component({ + standalone: false, selector: "bl-application-details", templateUrl: "application-details.html", providers: [BatchApplicationCommands], diff --git a/desktop/src/app/components/application/details/application-package-table.component.spec.ts b/desktop/src/app/components/application/details/application-package-table.component.spec.ts index d2c5a46c13..14fcaeefab 100644 --- a/desktop/src/app/components/application/details/application-package-table.component.spec.ts +++ b/desktop/src/app/components/application/details/application-package-table.component.spec.ts @@ -38,6 +38,7 @@ const packages = { [applications.noPackages.id]: [], }; @Component({ + standalone: false, template: ` diff --git a/desktop/src/app/components/application/details/application-package-table.component.ts b/desktop/src/app/components/application/details/application-package-table.component.ts index 7e9d89415d..47b620cdba 100644 --- a/desktop/src/app/components/application/details/application-package-table.component.ts +++ b/desktop/src/app/components/application/details/application-package-table.component.ts @@ -13,6 +13,7 @@ import { } from "../action"; @Component({ + standalone: false, selector: "bl-application-package-table", templateUrl: "application-package-table.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/application/details/application-packages.component.spec.ts b/desktop/src/app/components/application/details/application-packages.component.spec.ts index c5a2ce4d24..32206268d2 100644 --- a/desktop/src/app/components/application/details/application-packages.component.spec.ts +++ b/desktop/src/app/components/application/details/application-packages.component.spec.ts @@ -23,6 +23,7 @@ const disabledApp = new BatchApplication({ }); @Component({ + standalone: false, template: ``, }) class TestComponent { @@ -36,6 +37,7 @@ class TestComponent { } @Component({ + standalone: false, selector: "bl-application-package-table", template: "", }) diff --git a/desktop/src/app/components/application/details/application-packages.component.ts b/desktop/src/app/components/application/details/application-packages.component.ts index 3576a04d79..e3475b410a 100644 --- a/desktop/src/app/components/application/details/application-packages.component.ts +++ b/desktop/src/app/components/application/details/application-packages.component.ts @@ -6,6 +6,7 @@ import { ComponentUtils } from "app/utils"; import { BatchApplicationPackageCommands } from "../action"; @Component({ + standalone: false, selector: "bl-application-packages", templateUrl: "application-packages.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/application/details/configuration/application-configuration.component.ts b/desktop/src/app/components/application/details/configuration/application-configuration.component.ts index 635efb8614..b1c59576bd 100644 --- a/desktop/src/app/components/application/details/configuration/application-configuration.component.ts +++ b/desktop/src/app/components/application/details/configuration/application-configuration.component.ts @@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component, Input } from "@angular/core"; import { BatchApplication } from "app/models"; @Component({ + standalone: false, selector: "bl-application-configuration", templateUrl: "application-configuration.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/application/errors/application-error-display.component.spec.ts b/desktop/src/app/components/application/errors/application-error-display.component.spec.ts index 43fe685c56..89b5e4e25f 100644 --- a/desktop/src/app/components/application/errors/application-error-display.component.spec.ts +++ b/desktop/src/app/components/application/errors/application-error-display.component.spec.ts @@ -10,6 +10,7 @@ import * as Fixtures from "test/fixture"; import { BannerMockComponent } from "test/utils/mocks/components"; @Component({ + standalone: false, template: ``, }) class TestApplicationErrorDisplayComponent { diff --git a/desktop/src/app/components/application/errors/application-error-display.component.ts b/desktop/src/app/components/application/errors/application-error-display.component.ts index da0597e5aa..50f1356b3e 100644 --- a/desktop/src/app/components/application/errors/application-error-display.component.ts +++ b/desktop/src/app/components/application/errors/application-error-display.component.ts @@ -7,6 +7,7 @@ import { BatchAccountService } from "app/services"; import { Subscription } from "rxjs"; @Component({ + standalone: false, selector: "bl-application-error-display", templateUrl: "application-error-display.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/application/home/application-home.component.ts b/desktop/src/app/components/application/home/application-home.component.ts index 68e6fb2346..9878674e72 100644 --- a/desktop/src/app/components/application/home/application-home.component.ts +++ b/desktop/src/app/components/application/home/application-home.component.ts @@ -1,16 +1,17 @@ import { Component } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { Filter, FilterBuilder, autobind } from "@batch-flask/core"; import { SidebarManager } from "@batch-flask/ui/sidebar"; import { debounceTime, distinctUntilChanged } from "rxjs/operators"; import { ApplicationCreateDialogComponent } from "../action"; @Component({ + standalone: false, selector: "bl-application-home", templateUrl: "application-home.html", }) export class ApplicationHomeComponent { - public quickSearchQuery = new FormControl(); + public quickSearchQuery = new UntypedFormControl(); public filter: Filter = FilterBuilder.none(); public quickFilter: Filter = FilterBuilder.none(); diff --git a/desktop/src/app/components/auth/auth-overlay/auth-overlay.component.ts b/desktop/src/app/components/auth/auth-overlay/auth-overlay.component.ts index 6f03f6d4d2..27bf51ceee 100644 --- a/desktop/src/app/components/auth/auth-overlay/auth-overlay.component.ts +++ b/desktop/src/app/components/auth/auth-overlay/auth-overlay.component.ts @@ -4,6 +4,7 @@ import { autobind } from "@batch-flask/core"; import { ExternalBrowserAuthToggleComponent } from ".."; @Component({ + standalone: false, selector: "be-auth-overlay", templateUrl: "auth-overlay.html", }) diff --git a/desktop/src/app/components/auth/external-browser-auth-toggle.component.ts b/desktop/src/app/components/auth/external-browser-auth-toggle.component.ts index ce15281c07..a6431957b5 100644 --- a/desktop/src/app/components/auth/external-browser-auth-toggle.component.ts +++ b/desktop/src/app/components/auth/external-browser-auth-toggle.component.ts @@ -3,6 +3,7 @@ import { UserConfigurationService, autobind } from "@batch-flask/core"; import { BEUserConfiguration } from "common"; @Component({ + standalone: false, selector: "be-external-browser-auth-toggle", templateUrl: "external-browser-auth-toggle.html", }) diff --git a/desktop/src/app/components/certificate/action/add/add-certificate-form.component.ts b/desktop/src/app/components/certificate/action/add/add-certificate-form.component.ts index 4693f79802..b4895ad3df 100644 --- a/desktop/src/app/components/certificate/action/add/add-certificate-form.component.ts +++ b/desktop/src/app/components/certificate/action/add/add-certificate-form.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from "@angular/core"; -import { FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { NotificationService } from "@batch-flask/ui/notifications"; import { SidebarRef } from "@batch-flask/ui/sidebar"; @@ -14,6 +14,7 @@ import "./add-certificate-form.scss"; let idCounter = 0; @Component({ + standalone: false, selector: "bl-add-certificate-form", templateUrl: "add-certificate-form.html", }) @@ -21,11 +22,11 @@ export class AddCertificateFormComponent { @Input() public id = `bl-add-certificate-form-${idCounter++}`; public file: File; - public form: FormGroup; + public form: UntypedFormGroup; public title = "Add certificate"; constructor( - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, public sidebarRef: SidebarRef, private certificateService: CertificateService, private notificationService: NotificationService, @@ -86,7 +87,7 @@ export class AddCertificateFormComponent { } private _passwordValidator() { - return (control: FormControl): { [key: string]: any } => { + return (control: UntypedFormControl): { [key: string]: any } => { if (this.showPassword) { if (!control.value) { return { diff --git a/desktop/src/app/components/certificate/action/certificate-action.module.ts b/desktop/src/app/components/certificate/action/certificate-action.module.ts index a2be313e83..ea8b13b848 100644 --- a/desktop/src/app/components/certificate/action/certificate-action.module.ts +++ b/desktop/src/app/components/certificate/action/certificate-action.module.ts @@ -13,7 +13,6 @@ const components = [ declarations: components, exports: components, imports: [...commonModules, JobActionModule, BaseModule], - entryComponents: components, }) export class CertificateActionModule { } diff --git a/desktop/src/app/components/certificate/action/reactivate/reactivate-certificate-dialog.component.ts b/desktop/src/app/components/certificate/action/reactivate/reactivate-certificate-dialog.component.ts index 7e97131b2f..5c570fd945 100644 --- a/desktop/src/app/components/certificate/action/reactivate/reactivate-certificate-dialog.component.ts +++ b/desktop/src/app/components/certificate/action/reactivate/reactivate-certificate-dialog.component.ts @@ -4,6 +4,7 @@ import { autobind } from "@batch-flask/core"; import { CertificateService } from "app/services"; @Component({ + standalone: false, selector: "bl-reactivate-certificate-dialog", templateUrl: "reactivate-certificate-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/certificate/browse/certificate-list.component.spec.ts b/desktop/src/app/components/certificate/browse/certificate-list.component.spec.ts index 89369ce388..0e898666fb 100644 --- a/desktop/src/app/components/certificate/browse/certificate-list.component.spec.ts +++ b/desktop/src/app/components/certificate/browse/certificate-list.component.spec.ts @@ -18,6 +18,7 @@ import { MockListView } from "test/utils/mocks"; import { CertificateListComponent } from "./certificate-list.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/certificate/browse/certificate-list.component.ts b/desktop/src/app/components/certificate/browse/certificate-list.component.ts index 0ef68a34a1..74c86c1a9a 100644 --- a/desktop/src/app/components/certificate/browse/certificate-list.component.ts +++ b/desktop/src/app/components/certificate/browse/certificate-list.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Injector, OnDestroy, OnInit, forwardRef, } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { ActivatedRoute } from "@angular/router"; import { Filter, FilterMatcher, ListSelection, ListView, autobind } from "@batch-flask/core"; import { ListBaseComponent } from "@batch-flask/ui"; @@ -15,6 +15,7 @@ import { Observable, Subscription, of } from "rxjs"; import { CertificateCommands } from "../action"; @Component({ + standalone: false, selector: "bl-certificate-list", templateUrl: "certificate-list.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -28,7 +29,7 @@ export class CertificateListComponent extends ListBaseComponent implements OnIni public displayedCertificates: List = List([]); public LoadingStatus = LoadingStatus; public data: ListView; - public searchQuery = new FormControl(); + public searchQuery = new UntypedFormControl(); private _onCertificateAddedSub: Subscription; diff --git a/desktop/src/app/components/certificate/browse/filter/certificate-advanced-filter.component.ts b/desktop/src/app/components/certificate/browse/filter/certificate-advanced-filter.component.ts index a61ef68f14..2286b0dcf6 100644 --- a/desktop/src/app/components/certificate/browse/filter/certificate-advanced-filter.component.ts +++ b/desktop/src/app/components/certificate/browse/filter/certificate-advanced-filter.component.ts @@ -4,6 +4,7 @@ import { AdvancedFilter, StatePickerControl } from "@batch-flask/ui/advanced-fil import { CertificateState } from "app/models"; @Component({ + standalone: false, selector: "bl-certificate-advanced-filter", templateUrl: "certificate-advanced-filter.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/certificate/certificate.module.ts b/desktop/src/app/components/certificate/certificate.module.ts index e7e9315916..5a42792fcc 100644 --- a/desktop/src/app/components/certificate/certificate.module.ts +++ b/desktop/src/app/components/certificate/certificate.module.ts @@ -21,8 +21,6 @@ const modules = [ declarations: components, exports: [...modules, ...components], imports: [...modules], - entryComponents: [ - ], }) export class CertificateModule { } diff --git a/desktop/src/app/components/certificate/details/certificate-configuration.component.ts b/desktop/src/app/components/certificate/details/certificate-configuration.component.ts index 7fa0ff1d46..d61fe8fc72 100644 --- a/desktop/src/app/components/certificate/details/certificate-configuration.component.ts +++ b/desktop/src/app/components/certificate/details/certificate-configuration.component.ts @@ -4,6 +4,7 @@ import { Certificate } from "app/models"; /* eslint-disable */ @Component({ + standalone: false, selector: "bl-certificate-configuration", templateUrl: "certificate-configuration.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/certificate/details/certificate-default.component.ts b/desktop/src/app/components/certificate/details/certificate-default.component.ts index 42f3949c85..61a28fff7e 100644 --- a/desktop/src/app/components/certificate/details/certificate-default.component.ts +++ b/desktop/src/app/components/certificate/details/certificate-default.component.ts @@ -1,6 +1,7 @@ import { ChangeDetectionStrategy, Component } from "@angular/core"; @Component({ + standalone: false, selector: "bl-certificate-details-home", template: `
diff --git a/desktop/src/app/components/certificate/details/certificate-details.component.ts b/desktop/src/app/components/certificate/details/certificate-details.component.ts index 2cf6c79134..40d38008ef 100644 --- a/desktop/src/app/components/certificate/details/certificate-details.component.ts +++ b/desktop/src/app/components/certificate/details/certificate-details.component.ts @@ -15,6 +15,7 @@ import { import "./certificate-details.scss"; @Component({ + standalone: false, selector: "bl-certificate-details", templateUrl: "certificate-details.html", providers: [CertificateCommands], diff --git a/desktop/src/app/components/certificate/home/certificate-home.component.ts b/desktop/src/app/components/certificate/home/certificate-home.component.ts index a067513540..01b77280dc 100644 --- a/desktop/src/app/components/certificate/home/certificate-home.component.ts +++ b/desktop/src/app/components/certificate/home/certificate-home.component.ts @@ -1,17 +1,18 @@ import { ChangeDetectionStrategy, Component } from "@angular/core"; -import { FormBuilder, FormControl } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormControl } from "@angular/forms"; import { Filter, FilterBuilder, autobind } from "@batch-flask/core"; import { SidebarManager } from "@batch-flask/ui/sidebar"; import { debounceTime, distinctUntilChanged } from "rxjs/operators"; import { AddCertificateFormComponent } from "../action/add"; @Component({ + standalone: false, selector: "bl-certificate-home", templateUrl: "certificate-home.html", changeDetection: ChangeDetectionStrategy.OnPush, }) export class CertificateHomeComponent { - public quickSearchQuery = new FormControl(); + public quickSearchQuery = new UntypedFormControl(); public filter: Filter = FilterBuilder.none(); public quickFilter: Filter = FilterBuilder.none(); @@ -23,7 +24,7 @@ export class CertificateHomeComponent { keyField: "thumbprint", }; - constructor(formBuilder: FormBuilder, private sidebarManager: SidebarManager) { + constructor(formBuilder: UntypedFormBuilder, private sidebarManager: SidebarManager) { this.quickSearchQuery.valueChanges.pipe( debounceTime(400), distinctUntilChanged(), diff --git a/desktop/src/app/components/common/blob-container-picker/blob-container-picker.component.ts b/desktop/src/app/components/common/blob-container-picker/blob-container-picker.component.ts index 032fd3d35d..4974b29507 100644 --- a/desktop/src/app/components/common/blob-container-picker/blob-container-picker.component.ts +++ b/desktop/src/app/components/common/blob-container-picker/blob-container-picker.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, forwardRef, } from "@angular/core"; import { - ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { ListView, LoadingStatus } from "@batch-flask/core"; import { UrlUtils } from "@batch-flask/utils"; @@ -24,6 +24,7 @@ export enum BlobContainerPickerOutput { } @Component({ + standalone: false, selector: "bl-blob-container-picker", templateUrl: "blob-container-picker.html", providers: [ @@ -51,7 +52,7 @@ export class BlobContainerPickerComponent implements ControlValueAccessor, OnCha @Input() public sasPermissions: PermissionType[] = ["r"]; public containers: List; - public container = new FormControl(); + public container = new UntypedFormControl(); public containersData: ListView; public warning = false; @@ -134,7 +135,7 @@ export class BlobContainerPickerComponent implements ControlValueAccessor, OnCha // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } diff --git a/desktop/src/app/components/common/blob-container-picker/blob-container-picker.module.ts b/desktop/src/app/components/common/blob-container-picker/blob-container-picker.module.ts index 6056785e60..5955302d44 100644 --- a/desktop/src/app/components/common/blob-container-picker/blob-container-picker.module.ts +++ b/desktop/src/app/components/common/blob-container-picker/blob-container-picker.module.ts @@ -19,7 +19,6 @@ const privateComponents = []; ], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class BlobContainerPickerModule { } diff --git a/desktop/src/app/components/common/common.module.ts b/desktop/src/app/components/common/common.module.ts index c531a425a0..965cbd6cfe 100644 --- a/desktop/src/app/components/common/common.module.ts +++ b/desktop/src/app/components/common/common.module.ts @@ -37,7 +37,6 @@ const publicModules = [ imports: [NgCommonModule, BaseModule, FormsModule, ReactiveFormsModule, MaterialModule, ...publicModules], declarations: [...privateComponents, publicComponents], exports: [...publicComponents, ...publicModules], - entryComponents: [EditMetadataFormComponent], }) export class CommonModule { diff --git a/desktop/src/app/components/common/edit-metadata-form/edit-metadata-form.component.ts b/desktop/src/app/components/common/edit-metadata-form/edit-metadata-form.component.ts index 0146a3985d..5e798aee41 100644 --- a/desktop/src/app/components/common/edit-metadata-form/edit-metadata-form.component.ts +++ b/desktop/src/app/components/common/edit-metadata-form/edit-metadata-form.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { SidebarRef } from "@batch-flask/ui/sidebar"; import { Metadata } from "app/models"; @@ -7,6 +7,7 @@ import { List } from "immutable"; import { Observable } from "rxjs"; @Component({ + standalone: false, selector: "bl-edit-metadata-form", templateUrl: "edit-metadata-form.html", }) @@ -17,7 +18,7 @@ export class EditMetadataFormComponent { public save: (metadata: Metadata[]) => Observable; - public form = new FormControl([]); + public form = new UntypedFormControl([]); constructor(public sidebarRef: SidebarRef) { } diff --git a/desktop/src/app/components/common/guards/hidden-navigation.directive.ts b/desktop/src/app/components/common/guards/hidden-navigation.directive.ts index 4077aa3e67..53bafd5608 100644 --- a/desktop/src/app/components/common/guards/hidden-navigation.directive.ts +++ b/desktop/src/app/components/common/guards/hidden-navigation.directive.ts @@ -3,6 +3,7 @@ import { BatchAccountService } from "app/services"; import { Subscription } from "rxjs"; @Directive({ + standalone: false, selector: "[blHiddenIfNoAccount]", }) export class HiddenIfNoAccountDirective implements OnInit, OnDestroy { diff --git a/desktop/src/app/components/common/guards/select-acccount-dialog/select-account-dialog.component.ts b/desktop/src/app/components/common/guards/select-acccount-dialog/select-account-dialog.component.ts index 2a44075a37..2a00d66a67 100644 --- a/desktop/src/app/components/common/guards/select-acccount-dialog/select-account-dialog.component.ts +++ b/desktop/src/app/components/common/guards/select-acccount-dialog/select-account-dialog.component.ts @@ -10,6 +10,7 @@ import { takeUntil } from "rxjs/operators"; import "./select-account-dialog.scss"; @Component({ + standalone: false, selector: "bl-select-account-dialog", templateUrl: "select-account-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/common/guards/select-acccount-dialog/select-account-dialog.module.ts b/desktop/src/app/components/common/guards/select-acccount-dialog/select-account-dialog.module.ts index 136b42ac65..2a7b8fa101 100644 --- a/desktop/src/app/components/common/guards/select-acccount-dialog/select-account-dialog.module.ts +++ b/desktop/src/app/components/common/guards/select-acccount-dialog/select-account-dialog.module.ts @@ -11,7 +11,6 @@ const privateComponents = []; imports: [CommonModule, QuickListModule, LocationModule, ToolbarModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [SelectAccountDialogComponent], }) export class SelectAccountDialogModule { } diff --git a/desktop/src/app/components/common/inline-quota/inline-quota.component.ts b/desktop/src/app/components/common/inline-quota/inline-quota.component.ts index cc3ee1ab36..82ba70edbd 100644 --- a/desktop/src/app/components/common/inline-quota/inline-quota.component.ts +++ b/desktop/src/app/components/common/inline-quota/inline-quota.component.ts @@ -18,6 +18,7 @@ const labels = { }; @Component({ + standalone: false, selector: "bl-inline-quota", templateUrl: "inline-quota.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/common/location-picker/location-picker.component.spec.ts b/desktop/src/app/components/common/location-picker/location-picker.component.spec.ts index 1766e2d98e..bc49f3024d 100644 --- a/desktop/src/app/components/common/location-picker/location-picker.component.spec.ts +++ b/desktop/src/app/components/common/location-picker/location-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { I18nTestingModule } from "@batch-flask/core/testing"; import { SelectModule } from "@batch-flask/ui"; @@ -12,6 +12,7 @@ import { LocationModule } from "../location"; import { LocationPickerComponent } from "./location-picker.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public location = new FormControl(); + public location = new UntypedFormControl(); public subscription = new ArmSubscription({ subscriptionId: "dummy-1", displayName: "Dummy one" }); public resourceType?: string; } diff --git a/desktop/src/app/components/common/location-picker/location-picker.component.ts b/desktop/src/app/components/common/location-picker/location-picker.component.ts index 69d55f0b6e..d7cd7bcd07 100644 --- a/desktop/src/app/components/common/location-picker/location-picker.component.ts +++ b/desktop/src/app/components/common/location-picker/location-picker.component.ts @@ -3,7 +3,7 @@ import { Input, OnChanges, OnDestroy, forwardRef, } from "@angular/core"; import { - ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, + ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, } from "@angular/forms"; import { isNotNullOrUndefined } from "@batch-flask/core"; import { I18N_NAMESPACE, LoadingStatus } from "@batch-flask/ui"; @@ -15,6 +15,7 @@ import { filter, switchMap, tap } from "rxjs/operators"; import "./location-picker.scss"; @Component({ + standalone: false, selector: "bl-location-picker", templateUrl: "location-picker.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -32,7 +33,7 @@ export class LocationPickerComponent implements OnChanges, OnDestroy, ControlVal * Show location only for the given resources */ @Input() public resourceType?: string; - public location = new FormControl(); + public location = new UntypedFormControl(); public locations: ArmLocation[] = []; public loadingStatus = LoadingStatus.Loading; diff --git a/desktop/src/app/components/common/location-picker/location-picker.module.ts b/desktop/src/app/components/common/location-picker/location-picker.module.ts index b6c397a049..1fdf8bdec8 100644 --- a/desktop/src/app/components/common/location-picker/location-picker.module.ts +++ b/desktop/src/app/components/common/location-picker/location-picker.module.ts @@ -20,7 +20,6 @@ const privateComponents = []; ], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class LocationPickerModule { } diff --git a/desktop/src/app/components/common/location/location.component.spec.ts b/desktop/src/app/components/common/location/location.component.spec.ts index 617da4ec13..10d349b28f 100644 --- a/desktop/src/app/components/common/location/location.component.spec.ts +++ b/desktop/src/app/components/common/location/location.component.spec.ts @@ -4,6 +4,7 @@ import { By } from "@angular/platform-browser"; import { LocationComponent } from "./location.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/common/location/location.component.ts b/desktop/src/app/components/common/location/location.component.ts index 8d541cfdab..cb17513476 100644 --- a/desktop/src/app/components/common/location/location.component.ts +++ b/desktop/src/app/components/common/location/location.component.ts @@ -38,6 +38,7 @@ export const countryCodes = { }; @Component({ + standalone: false, selector: "bl-location", templateUrl: "location.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/common/location/location.module.ts b/desktop/src/app/components/common/location/location.module.ts index a0b9105679..f2c522cce3 100644 --- a/desktop/src/app/components/common/location/location.module.ts +++ b/desktop/src/app/components/common/location/location.module.ts @@ -9,7 +9,6 @@ const privateComponents = []; imports: [CommonModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class LocationModule { } diff --git a/desktop/src/app/components/common/react-action-form/react-action-form.component.spec.ts b/desktop/src/app/components/common/react-action-form/react-action-form.component.spec.ts index 6408c602e9..261eac2fe8 100644 --- a/desktop/src/app/components/common/react-action-form/react-action-form.component.spec.ts +++ b/desktop/src/app/components/common/react-action-form/react-action-form.component.spec.ts @@ -14,6 +14,7 @@ import { ReactActionFormComponent } from "../react-action-form"; import { ReactContainerComponent } from "../react-container"; @Component({ + standalone: false, template: ` { }; @Component({ + standalone: false, selector: "be-reactcontainer", template: `
`, }) diff --git a/desktop/src/app/components/common/resource-files-properties/resource-files-properties.component.spec.ts b/desktop/src/app/components/common/resource-files-properties/resource-files-properties.component.spec.ts index 09eec6ff7f..308e9b419e 100644 --- a/desktop/src/app/components/common/resource-files-properties/resource-files-properties.component.spec.ts +++ b/desktop/src/app/components/common/resource-files-properties/resource-files-properties.component.spec.ts @@ -21,6 +21,7 @@ const file3 = new ResourceFile({ }); @Component({ + standalone: false, template: ` `, diff --git a/desktop/src/app/components/common/resource-files-properties/resource-files-properties.component.ts b/desktop/src/app/components/common/resource-files-properties/resource-files-properties.component.ts index a515fade0d..97c26220dd 100644 --- a/desktop/src/app/components/common/resource-files-properties/resource-files-properties.component.ts +++ b/desktop/src/app/components/common/resource-files-properties/resource-files-properties.component.ts @@ -6,6 +6,7 @@ import { List } from "immutable"; import "./resource-files-properties.scss"; @Component({ + standalone: false, selector: "bl-resource-files-properties", templateUrl: "resource-files-properties.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/common/resource-files-properties/resource-files-properties.module.ts b/desktop/src/app/components/common/resource-files-properties/resource-files-properties.module.ts index 186ac9e957..31e072c9ce 100644 --- a/desktop/src/app/components/common/resource-files-properties/resource-files-properties.module.ts +++ b/desktop/src/app/components/common/resource-files-properties/resource-files-properties.module.ts @@ -10,7 +10,6 @@ const privateComponents = []; imports: [CommonModule, PropertyListModule, ButtonsModule, I18nUIModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class ResourceFilesPropertiesModule { } diff --git a/desktop/src/app/components/common/resourcefile-picker/resourcefile-cloud-file-dialog/resourcefile-cloud-file-dialog.component.spec.ts b/desktop/src/app/components/common/resourcefile-picker/resourcefile-cloud-file-dialog/resourcefile-cloud-file-dialog.component.spec.ts index 5953c86527..a1d4da2e59 100644 --- a/desktop/src/app/components/common/resourcefile-picker/resourcefile-cloud-file-dialog/resourcefile-cloud-file-dialog.component.spec.ts +++ b/desktop/src/app/components/common/resourcefile-picker/resourcefile-cloud-file-dialog/resourcefile-cloud-file-dialog.component.spec.ts @@ -16,6 +16,7 @@ import { of } from "rxjs"; import { ResourceFileCloudFileDialogComponent } from "./resourcefile-cloud-file-dialog.component"; @Component({ + standalone: false, selector: "bl-storage-account-picker", template: "", providers: [controlValueAccessorProvider(() => FakeStorageAccountPickerComponent)], }) @@ -24,6 +25,7 @@ class FakeStorageAccountPickerComponent extends MockControlValueAccessorComponen } @Component({ + standalone: false, selector: "bl-blob-container-picker", template: "", providers: [controlValueAccessorProvider(() => FakeBlobContainerPickerComponent)], }) @@ -33,6 +35,7 @@ class FakeBlobContainerPickerComponent extends MockControlValueAccessorComponent } @Component({ + standalone: false, selector: "bl-blob-files-browser", template: "", }) class FakeBlobFileBrowserComponent { diff --git a/desktop/src/app/components/common/resourcefile-picker/resourcefile-cloud-file-dialog/resourcefile-cloud-file-dialog.component.ts b/desktop/src/app/components/common/resourcefile-picker/resourcefile-cloud-file-dialog/resourcefile-cloud-file-dialog.component.ts index 7bfb80a8cd..097c2a9e4f 100644 --- a/desktop/src/app/components/common/resourcefile-picker/resourcefile-cloud-file-dialog/resourcefile-cloud-file-dialog.component.ts +++ b/desktop/src/app/components/common/resourcefile-picker/resourcefile-cloud-file-dialog/resourcefile-cloud-file-dialog.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from "@angular/core"; -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms"; import { MatDialogRef } from "@angular/material/dialog"; import { autobind } from "@batch-flask/core"; import { FileExplorerConfig, FileExplorerSelectable } from "@batch-flask/ui"; @@ -17,13 +17,14 @@ import { import "./resourcefile-cloud-file-dialog.scss"; @Component({ + standalone: false, selector: "bl-resourcefile-cloud-file-dialog", templateUrl: "resourcefile-cloud-file-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, }) export class ResourceFileCloudFileDialogComponent implements OnInit, OnDestroy { - public form: FormGroup; + public form: UntypedFormGroup; public storageAccountName: string | null; public storageAccountId: string | null; public containerName: string | null; @@ -40,7 +41,7 @@ export class ResourceFileCloudFileDialogComponent implements OnInit, OnDestroy { constructor( private changeDetector: ChangeDetectorRef, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private accountService: BatchAccountService, private storageAccountService: StorageAccountService, private autoStorageService: AutoStorageService, diff --git a/desktop/src/app/components/common/resourcefile-picker/resourcefile-container-source/resourcefile-container-source.component.ts b/desktop/src/app/components/common/resourcefile-picker/resourcefile-container-source/resourcefile-container-source.component.ts index 860dac64de..e5c87ed7c9 100644 --- a/desktop/src/app/components/common/resourcefile-picker/resourcefile-container-source/resourcefile-container-source.component.ts +++ b/desktop/src/app/components/common/resourcefile-picker/resourcefile-container-source/resourcefile-container-source.component.ts @@ -9,6 +9,7 @@ import { ResourceFileCloudFileDialogComponent } from "../resourcefile-cloud-file import "./resourcefile-container-source.scss"; @Component({ + standalone: false, selector: "bl-resourcefile-container-source", templateUrl: "resourcefile-container-source.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker-row/resourcefile-picker-row.component.ts b/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker-row/resourcefile-picker-row.component.ts index 7ea53b5252..24c8f8dd9d 100644 --- a/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker-row/resourcefile-picker-row.component.ts +++ b/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker-row/resourcefile-picker-row.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Output, forwardRef } from "@angular/core"; import { - AbstractControl, ControlValueAccessor, FormControl, - FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, + AbstractControl, ControlValueAccessor, UntypedFormControl, + UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, } from "@angular/forms"; import { exists } from "@batch-flask/utils"; import { ResourceFileAttributes } from "app/models"; @@ -13,6 +13,7 @@ enum ResourceFileType { Container, } @Component({ + standalone: false, selector: "bl-resourcefile-picker-row", templateUrl: "resourcefile-picker-row.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -26,15 +27,15 @@ export class ResourceFilePickerRowComponent implements ControlValueAccessor, Val public ResourceFileType = ResourceFileType; public type: ResourceFileType = ResourceFileType.Url; - public form: FormGroup; + public form: UntypedFormGroup; public file: ResourceFileAttributes; private _propagateFn: (value: ResourceFileAttributes) => void; constructor(private changeDetector: ChangeDetectorRef) { - this.form = new FormGroup({ - filePath: new FormControl(""), - httpUrl: new FormControl(""), + this.form = new UntypedFormGroup({ + filePath: new UntypedFormControl(""), + httpUrl: new UntypedFormControl(""), }); this.form.valueChanges.subscribe(() => { diff --git a/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker.component.spec.ts b/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker.component.spec.ts index 8a009ceb15..e6bf171f8f 100644 --- a/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker.component.spec.ts +++ b/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { UserConfigurationService } from "@batch-flask/core"; import { I18nTestingModule } from "@batch-flask/core/testing"; @@ -17,10 +17,11 @@ import { ResourceFileContainerSourceComponent } from "./resourcefile-container-s import { ResourceFilePickerRowComponent } from "./resourcefile-picker-row"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public files = new FormControl([]); + public files = new UntypedFormControl([]); } const storageDialogResult: ResourceFileAttributes = { diff --git a/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker.component.ts b/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker.component.ts index 336959d23b..9c916b1504 100644 --- a/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker.component.ts +++ b/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectorRef, Component, EventEmitter, HostListener, Input, OnDestroy, Output, forwardRef, } from "@angular/core"; import { - ControlValueAccessor, FormArray, FormBuilder, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { UserConfigurationService } from "@batch-flask/core"; import { FileSystemService } from "@batch-flask/electron"; @@ -26,6 +26,7 @@ export interface UploadResourceFileEvent { } @Component({ + standalone: false, selector: "bl-resourcefile-picker", templateUrl: "resourcefile-picker.html", providers: [ @@ -40,7 +41,7 @@ export class ResourcefilePickerComponent implements ControlValueAccessor, OnDest * Event emitted when a file is being uploaded, use this to add async task to the form */ @Output() public upload = new EventEmitter(); - public files: FormArray; + public files: UntypedFormArray; public isDraging = 0; public uploadingFiles: string[] = []; @@ -54,7 +55,7 @@ export class ResourcefilePickerComponent implements ControlValueAccessor, OnDest private _folderId: string; constructor( - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private autoStorageService: AutoStorageService, private storageBlobService: StorageBlobService, private storageContainerService: StorageContainerService, @@ -89,7 +90,7 @@ export class ResourcefilePickerComponent implements ControlValueAccessor, OnDest } public addUrlResourceFile() { - this.files.push(new FormControl({ httpUrl: "", filePath: "" })); + this.files.push(new UntypedFormControl({ httpUrl: "", filePath: "" })); this.changeDetector.markForCheck(); } @@ -97,7 +98,7 @@ export class ResourcefilePickerComponent implements ControlValueAccessor, OnDest const ref = this.dialogService.open(ResourceFileCloudFileDialogComponent); ref.afterClosed().subscribe((file) => { if (file) { - this.files.push(new FormControl(file)); + this.files.push(new UntypedFormControl(file)); this.changeDetector.markForCheck(); } }); @@ -116,7 +117,7 @@ export class ResourcefilePickerComponent implements ControlValueAccessor, OnDest // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } @@ -222,7 +223,7 @@ export class ResourcefilePickerComponent implements ControlValueAccessor, OnDest } private _addResourceFile(httpUrl: string, filePath: string) { - this.files.push(new FormControl({ + this.files.push(new UntypedFormControl({ httpUrl, filePath, })); diff --git a/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker.module.ts b/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker.module.ts index 50be1f43db..85224a8577 100644 --- a/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker.module.ts +++ b/desktop/src/app/components/common/resourcefile-picker/resourcefile-picker.module.ts @@ -33,7 +33,6 @@ const privateComponents = [ ], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [ResourceFileCloudFileDialogComponent], }) export class ResourceFilePickerModule { } diff --git a/desktop/src/app/components/common/storage-account-picker/storage-account-picker.component.spec.ts b/desktop/src/app/components/common/storage-account-picker/storage-account-picker.component.spec.ts index 38913d2d86..88ae2a795a 100644 --- a/desktop/src/app/components/common/storage-account-picker/storage-account-picker.component.spec.ts +++ b/desktop/src/app/components/common/storage-account-picker/storage-account-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { I18nTestingModule } from "@batch-flask/core/testing"; import { SelectComponent, SelectModule } from "@batch-flask/ui"; @@ -12,10 +12,11 @@ import { BehaviorSubject, of } from "rxjs"; import { StorageAccountPickerComponent } from "./storage-account-picker.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public control = new FormControl(null); + public control = new UntypedFormControl(null); } const sub1 = new ArmSubscription({ diff --git a/desktop/src/app/components/common/storage-account-picker/storage-account-picker.component.ts b/desktop/src/app/components/common/storage-account-picker/storage-account-picker.component.ts index c2038f4968..0483cc7449 100644 --- a/desktop/src/app/components/common/storage-account-picker/storage-account-picker.component.ts +++ b/desktop/src/app/components/common/storage-account-picker/storage-account-picker.component.ts @@ -14,6 +14,7 @@ import { filter, switchMap, takeUntil } from "rxjs/operators"; import "./storage-account-picker.scss"; @Component({ + standalone: false, selector: "bl-storage-account-picker", templateUrl: "storage-account-picker.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/common/storage-account-picker/storage-account-picker.module.ts b/desktop/src/app/components/common/storage-account-picker/storage-account-picker.module.ts index 24f7e56812..c404d401e1 100644 --- a/desktop/src/app/components/common/storage-account-picker/storage-account-picker.module.ts +++ b/desktop/src/app/components/common/storage-account-picker/storage-account-picker.module.ts @@ -17,7 +17,6 @@ const privateComponents = []; ], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class StorageAccountPickerModule { } diff --git a/desktop/src/app/components/common/subscription-picker/subscription-picker.component.spec.ts b/desktop/src/app/components/common/subscription-picker/subscription-picker.component.spec.ts index e18dc0b711..9166d98526 100644 --- a/desktop/src/app/components/common/subscription-picker/subscription-picker.component.spec.ts +++ b/desktop/src/app/components/common/subscription-picker/subscription-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { SelectComponent, SelectModule } from "@batch-flask/ui"; import { FormModule } from "@batch-flask/ui/form"; @@ -11,10 +11,11 @@ import { BehaviorSubject } from "rxjs"; import { SubscriptionPickerComponent } from "./subscription-picker.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public subscription = new FormControl(null); + public subscription = new UntypedFormControl(null); } const sub1 = new ArmSubscription({ id: "subs/sub-1", subscriptionId: "sub-1", displayName: "Sub 1" }); diff --git a/desktop/src/app/components/common/subscription-picker/subscription-picker.component.ts b/desktop/src/app/components/common/subscription-picker/subscription-picker.component.ts index 3526aee98c..9078029bcd 100644 --- a/desktop/src/app/components/common/subscription-picker/subscription-picker.component.ts +++ b/desktop/src/app/components/common/subscription-picker/subscription-picker.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, forwardRef } from "@angular/core"; -import { ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms"; +import { ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms"; import { ArmSubscription } from "app/models"; import { SubscriptionService } from "app/services"; import { Subscription } from "rxjs"; @@ -7,6 +7,7 @@ import { Subscription } from "rxjs"; import "./subscription-picker.scss"; @Component({ + standalone: false, selector: "bl-subscription-picker", templateUrl: "subscription-picker.html", providers: [ @@ -16,7 +17,7 @@ import "./subscription-picker.scss"; changeDetection: ChangeDetectionStrategy.OnPush, }) export class SubscriptionPickerComponent implements ControlValueAccessor, OnDestroy { - public subscriptionId = new FormControl(); + public subscriptionId = new UntypedFormControl(); public subscriptionList: ArmSubscription[]; private _propagateChange: (value: ArmSubscription) => void = null; @@ -58,7 +59,7 @@ export class SubscriptionPickerComponent implements ControlValueAccessor, OnDest // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } diff --git a/desktop/src/app/components/data/action/add/file-group-create-form.component.ts b/desktop/src/app/components/data/action/add/file-group-create-form.component.ts index 7bc2fd4840..aa0df65585 100644 --- a/desktop/src/app/components/data/action/add/file-group-create-form.component.ts +++ b/desktop/src/app/components/data/action/add/file-group-create-form.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy, Optional } from "@angular/core"; -import { FormBuilder, FormControl, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormControl, Validators } from "@angular/forms"; import { MatCheckboxChange } from "@angular/material/checkbox"; import { MatDialogRef } from "@angular/material/dialog"; import { DynamicForm, autobind } from "@batch-flask/core"; @@ -18,6 +18,7 @@ import { debounceTime, distinctUntilChanged, takeUntil } from "rxjs/operators"; import "./file-group-create-form.scss"; @Component({ + standalone: false, selector: "bl-file-group-create-form", templateUrl: "file-group-create-form.html", }) @@ -32,12 +33,12 @@ export class FileGroupCreateFormComponent extends DynamicForm, @Optional() public dialogRef: MatDialogRef, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private fileGroupService: FileGroupService, private storageContainerService: StorageContainerService) { super(FileGroupCreateDto); diff --git a/desktop/src/app/components/data/action/add/file-group-create.module.ts b/desktop/src/app/components/data/action/add/file-group-create.module.ts index 9c565f7e48..2073c3fbef 100644 --- a/desktop/src/app/components/data/action/add/file-group-create.module.ts +++ b/desktop/src/app/components/data/action/add/file-group-create.module.ts @@ -21,7 +21,6 @@ const privateComponents = [FileGroupOptionsPickerComponent]; ], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [FileGroupCreateFormComponent], }) export class FileGroupCreateModule { } diff --git a/desktop/src/app/components/data/action/add/file-group-options-picker.component.ts b/desktop/src/app/components/data/action/add/file-group-options-picker.component.ts index 9e27cf4693..de9c06f8ab 100644 --- a/desktop/src/app/components/data/action/add/file-group-options-picker.component.ts +++ b/desktop/src/app/components/data/action/add/file-group-options-picker.component.ts @@ -1,6 +1,6 @@ import { Component, OnDestroy, forwardRef } from "@angular/core"; import { - AbstractControl, ControlValueAccessor, FormBuilder, FormControl, FormGroup, NG_VALIDATORS, + AbstractControl, ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, } from "@angular/forms"; import { Constants } from "common"; @@ -8,6 +8,7 @@ import { Subscription } from "rxjs"; import { distinctUntilChanged } from "rxjs/operators"; @Component({ + standalone: false, selector: "bl-file-group-options-picker", templateUrl: "file-group-options-picker.html", providers: [ @@ -16,13 +17,13 @@ import { distinctUntilChanged } from "rxjs/operators"; ], }) export class FileGroupOptionsPickerComponent implements OnDestroy, ControlValueAccessor { - public form: FormGroup; + public form: UntypedFormGroup; private _propagateChange: (value: any) => void; private _propagateTouched: (value: boolean) => void = null; private _valueChangeSub: Subscription; - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ prefix: [null, Validators.pattern(Constants.forms.validation.regex.id)], flatten: [false, this._validateFlatten()], @@ -56,7 +57,7 @@ export class FileGroupOptionsPickerComponent implements OnDestroy, ControlValueA * Return validation result to the parent form * @param control */ - public validate(control: FormControl) { + public validate(control: UntypedFormControl) { const valid = this.form.valid; if (valid) { return null; @@ -71,7 +72,7 @@ export class FileGroupOptionsPickerComponent implements OnDestroy, ControlValueA * Cannot have both Flatten and FullPath selected at the same time */ private _validateFullPath(): { [key: string]: any } { - return (control: FormControl): { [key: string]: any } => { + return (control: UntypedFormControl): { [key: string]: any } => { return this._validateOtherControl(control, this.form && this.form.controls.flatten); }; } @@ -80,12 +81,12 @@ export class FileGroupOptionsPickerComponent implements OnDestroy, ControlValueA * Cannot have both Flatten and FullPath selected at the same time */ private _validateFlatten(): { [key: string]: any } { - return (control: FormControl): { [key: string]: any } => { + return (control: UntypedFormControl): { [key: string]: any } => { return this._validateOtherControl(control, this.form && this.form.controls.fullPath); }; } - private _validateOtherControl(control: FormControl, otherControl: AbstractControl) { + private _validateOtherControl(control: UntypedFormControl, otherControl: AbstractControl) { if (!this.form || !otherControl || !otherControl.value) { return null; } diff --git a/desktop/src/app/components/data/action/delete/delete-container-dialog.component.ts b/desktop/src/app/components/data/action/delete/delete-container-dialog.component.ts index c6441612b5..b4f30bb9c6 100644 --- a/desktop/src/app/components/data/action/delete/delete-container-dialog.component.ts +++ b/desktop/src/app/components/data/action/delete/delete-container-dialog.component.ts @@ -7,6 +7,7 @@ import { BlobContainer } from "app/models"; import "./delete-container-dialog.scss"; @Component({ + standalone: false, selector: "bl-delete-container-dialog", templateUrl: "delete-container-dialog.html", }) diff --git a/desktop/src/app/components/data/browse/data-container-list.component.ts b/desktop/src/app/components/data/browse/data-container-list.component.ts index d7794028f9..85856ce20d 100644 --- a/desktop/src/app/components/data/browse/data-container-list.component.ts +++ b/desktop/src/app/components/data/browse/data-container-list.component.ts @@ -20,6 +20,7 @@ const defaultListOptions = { pageSize: Constants.ListPageSizes.default, }; @Component({ + standalone: false, selector: "bl-data-container-list", templateUrl: "data-container-list.html", providers: [BlobContainerCommands, { diff --git a/desktop/src/app/components/data/data.module.ts b/desktop/src/app/components/data/data.module.ts index 2575a84bf7..baac50cdf7 100644 --- a/desktop/src/app/components/data/data.module.ts +++ b/desktop/src/app/components/data/data.module.ts @@ -41,9 +41,6 @@ const components = [ BlobFilesBrowserModule, StorageAccountPickerModule, ], - entryComponents: [ - DeleteContainerDialogComponent, - ], }) export class DataModule { } diff --git a/desktop/src/app/components/data/details/data-container-configuration.component.ts b/desktop/src/app/components/data/details/data-container-configuration.component.ts index 6e43d9f87f..dd38ecf224 100644 --- a/desktop/src/app/components/data/details/data-container-configuration.component.ts +++ b/desktop/src/app/components/data/details/data-container-configuration.component.ts @@ -4,6 +4,7 @@ import { BlobContainer } from "app/models"; /* eslint-disable */ @Component({ + standalone: false, selector: "bl-data-container-configuration", templateUrl: "data-container-configuration.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/data/details/data-container-files.component.ts b/desktop/src/app/components/data/details/data-container-files.component.ts index 4083b2f49d..647b925daf 100644 --- a/desktop/src/app/components/data/details/data-container-files.component.ts +++ b/desktop/src/app/components/data/details/data-container-files.component.ts @@ -5,6 +5,7 @@ import { StorageContainerService } from "app/services/storage"; import { Subscription } from "rxjs"; @Component({ + standalone: false, selector: "bl-data-container-files", templateUrl: "data-container-files.html", }) diff --git a/desktop/src/app/components/data/details/data-default.component.ts b/desktop/src/app/components/data/details/data-default.component.ts index bc7d0f77e8..45e3ceea1e 100644 --- a/desktop/src/app/components/data/details/data-default.component.ts +++ b/desktop/src/app/components/data/details/data-default.component.ts @@ -1,6 +1,7 @@ import { Component } from "@angular/core"; import { ArmResourceUtils } from "app/utils"; @Component({ + standalone: false, selector: "bl-application-default", template: `
diff --git a/desktop/src/app/components/data/details/data-details.component.ts b/desktop/src/app/components/data/details/data-details.component.ts index 1e6e310092..5b9de21ce9 100644 --- a/desktop/src/app/components/data/details/data-details.component.ts +++ b/desktop/src/app/components/data/details/data-details.component.ts @@ -9,6 +9,7 @@ import { Subscription } from "rxjs"; import { BlobContainerCommands } from "../action"; @Component({ + standalone: false, selector: "bl-data-details", templateUrl: "data-details.html", providers: [BlobContainerCommands], diff --git a/desktop/src/app/components/data/home/data-home.component.ts b/desktop/src/app/components/data/home/data-home.component.ts index 995a6bee65..d679adb72b 100644 --- a/desktop/src/app/components/data/home/data-home.component.ts +++ b/desktop/src/app/components/data/home/data-home.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, ViewChild } from "@angular/core"; -import { FormControl, Validators } from "@angular/forms"; +import { UntypedFormControl, Validators } from "@angular/forms"; import { MatMenuTrigger } from "@angular/material/menu"; import { ActivatedRoute, Router } from "@angular/router"; import { Filter, FilterBuilder, Property, autobind } from "@batch-flask/core"; @@ -16,6 +16,7 @@ import { FileGroupCreateFormComponent } from "../action"; import "./data-home.scss"; @Component({ + standalone: false, selector: "bl-data-home", templateUrl: "data-home.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -35,7 +36,7 @@ export class DataHomeComponent implements OnInit { public quickSearchQuery: string = ""; public filter: Filter = FilterBuilder.none(); public hasAutoStorage = true; - public containerTypePrefix = new FormControl(""); + public containerTypePrefix = new UntypedFormControl(""); public storageAccountId: string; /** @@ -191,7 +192,7 @@ export class DataHomeComponent implements OnInit { * the existing group and not creating a new one. */ private _validateContainerUnique(prefix = "") { - return (control: FormControl) => { + return (control: UntypedFormControl) => { const containerName = `${prefix}${control.value}`; return of(null).pipe( debounceTime(500), diff --git a/desktop/src/app/components/data/shared/cloud-file-picker/cloud-file-picker-dialog.component.ts b/desktop/src/app/components/data/shared/cloud-file-picker/cloud-file-picker-dialog.component.ts index 7840e7820d..c98254b48c 100644 --- a/desktop/src/app/components/data/shared/cloud-file-picker/cloud-file-picker-dialog.component.ts +++ b/desktop/src/app/components/data/shared/cloud-file-picker/cloud-file-picker-dialog.component.ts @@ -10,6 +10,7 @@ import { AsyncSubject, of } from "rxjs"; import "./cloud-file-picker-dialog.scss"; @Component({ + standalone: false, selector: "bl-cloud-file-picker-dialog", templateUrl: "cloud-file-picker-dialog.html", }) diff --git a/desktop/src/app/components/data/shared/cloud-file-picker/cloud-file-picker.component.ts b/desktop/src/app/components/data/shared/cloud-file-picker/cloud-file-picker.component.ts index 80548d298a..fb8dfaa930 100644 --- a/desktop/src/app/components/data/shared/cloud-file-picker/cloud-file-picker.component.ts +++ b/desktop/src/app/components/data/shared/cloud-file-picker/cloud-file-picker.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnChanges, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { DialogService } from "@batch-flask/ui/dialogs"; @@ -13,6 +13,7 @@ import { CloudFilePickerDialogComponent } from "./cloud-file-picker-dialog.compo import "./cloud-file-picker.scss"; @Component({ + standalone: false, selector: "bl-cloud-file-picker", templateUrl: "cloud-file-picker.html", providers: [ @@ -34,7 +35,7 @@ export class CloudFilePickerComponent implements ControlValueAccessor, OnChanges */ @Input() public wildcards: string; - public value = new FormControl(); + public value = new UntypedFormControl(); public warning = false; private _propagateChange: (value: any[]) => void = null; @@ -79,7 +80,7 @@ export class CloudFilePickerComponent implements ControlValueAccessor, OnChanges this.value.markAsTouched(); } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } diff --git a/desktop/src/app/components/data/shared/data.shared.module.ts b/desktop/src/app/components/data/shared/data.shared.module.ts index f927cfac2f..212ee9a98f 100644 --- a/desktop/src/app/components/data/shared/data.shared.module.ts +++ b/desktop/src/app/components/data/shared/data.shared.module.ts @@ -31,7 +31,6 @@ const modules = [ ...modules, BlobFilesBrowserModule, ], - entryComponents: [CloudFilePickerDialogComponent], }) export class DataSharedModule { } diff --git a/desktop/src/app/components/data/shared/errors/storage-error-display.component.spec.ts b/desktop/src/app/components/data/shared/errors/storage-error-display.component.spec.ts index 54b14aff97..6e328df368 100644 --- a/desktop/src/app/components/data/shared/errors/storage-error-display.component.spec.ts +++ b/desktop/src/app/components/data/shared/errors/storage-error-display.component.spec.ts @@ -11,6 +11,7 @@ import { BehaviorSubject } from "rxjs"; import { StorageErrorDisplayComponent } from "./storage-error-display.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/data/shared/errors/storage-error-display.component.ts b/desktop/src/app/components/data/shared/errors/storage-error-display.component.ts index 3d0c8f8b76..d31bd8bd08 100644 --- a/desktop/src/app/components/data/shared/errors/storage-error-display.component.ts +++ b/desktop/src/app/components/data/shared/errors/storage-error-display.component.ts @@ -8,6 +8,7 @@ import { Subject } from "rxjs"; import { takeUntil } from "rxjs/operators"; @Component({ + standalone: false, selector: "bl-storage-error-display", templateUrl: "storage-error-display.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/data/shared/file-group-picker/file-group-picker.component.spec.ts b/desktop/src/app/components/data/shared/file-group-picker/file-group-picker.component.spec.ts index 332b21152e..b6ad9ad419 100644 --- a/desktop/src/app/components/data/shared/file-group-picker/file-group-picker.component.spec.ts +++ b/desktop/src/app/components/data/shared/file-group-picker/file-group-picker.component.spec.ts @@ -1,7 +1,7 @@ import { HttpClientTestingModule } from "@angular/common/http/testing"; import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { BrowserDynamicTestingModule } from "@angular/platform-browser-dynamic/testing"; @@ -22,10 +22,11 @@ import { FileGroupPickerComponent } from "./file-group-picker.component"; import { FileGroupPickerModule } from "./file-group-picker.module"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public control = new FormControl(); + public control = new UntypedFormControl(); } describe("FileGroupPickerComponent", () => { diff --git a/desktop/src/app/components/data/shared/file-group-picker/file-group-picker.component.ts b/desktop/src/app/components/data/shared/file-group-picker/file-group-picker.component.ts index a23e421d35..7413753c1c 100644 --- a/desktop/src/app/components/data/shared/file-group-picker/file-group-picker.component.ts +++ b/desktop/src/app/components/data/shared/file-group-picker/file-group-picker.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, forwardRef, } from "@angular/core"; import { - ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { FilterBuilder, ListView } from "@batch-flask/core"; import { Activity, DialogService } from "@batch-flask/ui"; @@ -18,6 +18,7 @@ import "./file-group-picker.scss"; import { FileGroupService } from "app/services"; @Component({ + standalone: false, selector: "bl-file-group-picker", templateUrl: "file-group-picker.html", providers: [ @@ -31,7 +32,7 @@ export class FileGroupPickerComponent implements ControlValueAccessor, OnInit, O @Input() public hint: string; public fileGroups: List; - public value = new FormControl(); + public value = new UntypedFormControl(); public fileGroupsData: ListView; public warning = false; public uploadProgress: number | null; @@ -136,7 +137,7 @@ export class FileGroupPickerComponent implements ControlValueAccessor, OnInit, O // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } diff --git a/desktop/src/app/components/data/shared/file-group-sas/file-group-sas.component.ts b/desktop/src/app/components/data/shared/file-group-sas/file-group-sas.component.ts index 8dc7dbc8e1..4c002444d3 100644 --- a/desktop/src/app/components/data/shared/file-group-sas/file-group-sas.component.ts +++ b/desktop/src/app/components/data/shared/file-group-sas/file-group-sas.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnChanges, OnDestroy, OnInit, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { ListView, autobind } from "@batch-flask/core"; import { BlobContainer } from "app/models"; @@ -16,6 +16,7 @@ import "./file-group-sas.scss"; /* eslint-disable @angular-eslint/no-forward-ref */ @Component({ + standalone: false, selector: "bl-file-group-sas", templateUrl: "file-group-sas.html", providers: [ @@ -38,7 +39,7 @@ export class FileGroupSasComponent implements ControlValueAccessor, OnChanges, O @Input() public allowWrite: boolean; public fileGroups: List; - public value = new FormControl(); + public value = new UntypedFormControl(); public fileGroupsData: ListView; public warning = false; @@ -104,7 +105,7 @@ export class FileGroupSasComponent implements ControlValueAccessor, OnChanges, O this.value.markAsTouched(); } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } diff --git a/desktop/src/app/components/data/shared/file-groups-picker/file-groups-picker.component.ts b/desktop/src/app/components/data/shared/file-groups-picker/file-groups-picker.component.ts index cddce62329..d55878d4eb 100644 --- a/desktop/src/app/components/data/shared/file-groups-picker/file-groups-picker.component.ts +++ b/desktop/src/app/components/data/shared/file-groups-picker/file-groups-picker.component.ts @@ -1,6 +1,6 @@ import { Component, OnDestroy, OnInit, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { ListView } from "@batch-flask/core"; import { BlobContainer } from "app/models"; @@ -11,6 +11,7 @@ import { Observable, Subscription } from "rxjs"; /* eslint-disable @angular-eslint/no-forward-ref */ @Component({ + standalone: false, selector: "bl-file-groups-picker", templateUrl: "file-groups-picker.html", providers: [ @@ -19,7 +20,7 @@ import { Observable, Subscription } from "rxjs"; ], }) export class FileGroupsPickerComponent implements ControlValueAccessor, OnInit, OnDestroy { - public fileGroups: FormControl; + public fileGroups: UntypedFormControl; public data: ListView; public groups: List; public filteredOptions: Observable; @@ -30,7 +31,7 @@ export class FileGroupsPickerComponent implements ControlValueAccessor, OnInit, // TODO: handle no autostorage, hide file group control if account has no autostorage settings. constructor( - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private autoStorageService: AutoStorageService, private storageContainerService: StorageContainerService) { @@ -80,7 +81,7 @@ export class FileGroupsPickerComponent implements ControlValueAccessor, OnInit, // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } diff --git a/desktop/src/app/components/data/shared/file-or-directory-picker/file-or-directory-picker.component.spec.ts b/desktop/src/app/components/data/shared/file-or-directory-picker/file-or-directory-picker.component.spec.ts index 5c33a466ba..1b2a181aeb 100644 --- a/desktop/src/app/components/data/shared/file-or-directory-picker/file-or-directory-picker.component.spec.ts +++ b/desktop/src/app/components/data/shared/file-or-directory-picker/file-or-directory-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { FormControl, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, ReactiveFormsModule } from "@angular/forms"; import { BrowserModule, By } from "@angular/platform-browser"; import { I18nTestingModule } from "@batch-flask/core/testing"; import { FileSystemService } from "@batch-flask/electron"; @@ -8,10 +8,11 @@ import { EditableTableColumnComponent, EditableTableComponent } from "@batch-fla import { FileOrDirectoryPickerComponent } from "./file-or-directory-picker.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public paths = new FormControl([]); + public paths = new UntypedFormControl([]); } describe("FileOrDirectoryPickerComponent", () => { diff --git a/desktop/src/app/components/data/shared/file-or-directory-picker/file-or-directory-picker.component.ts b/desktop/src/app/components/data/shared/file-or-directory-picker/file-or-directory-picker.component.ts index cf3228e4b6..33b80d6897 100644 --- a/desktop/src/app/components/data/shared/file-or-directory-picker/file-or-directory-picker.component.ts +++ b/desktop/src/app/components/data/shared/file-or-directory-picker/file-or-directory-picker.component.ts @@ -10,8 +10,8 @@ import { import { AsyncValidator, ControlValueAccessor, - FormBuilder, - FormControl, + UntypedFormBuilder, + UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; @@ -25,6 +25,7 @@ import { map } from "rxjs/operators"; import "./file-or-directory-picker.scss"; @Component({ + standalone: false, selector: "bl-file-or-directory-picker", templateUrl: "file-or-directory-picker.html", providers: [ @@ -38,7 +39,7 @@ export class FileOrDirectoryPickerComponent implements AsyncValidator, ControlVa public invalidPath: string; public isDraging = 0; - public paths: FormControl; + public paths: UntypedFormControl; private _propagateChange: (value: FileOrDirectoryDto[]) => void = null; private _sub: Subscription; @@ -46,7 +47,7 @@ export class FileOrDirectoryPickerComponent implements AsyncValidator, ControlVa constructor( private fs: FileSystemService, private changeDetector: ChangeDetectorRef, - private formBuilder: FormBuilder) { + private formBuilder: UntypedFormBuilder) { this.paths = this.formBuilder.control([], null, this._validatePaths); this._sub = this.paths.valueChanges.subscribe((paths) => { @@ -74,7 +75,7 @@ export class FileOrDirectoryPickerComponent implements AsyncValidator, ControlVa // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return this._validatePaths(c); } @@ -123,7 +124,7 @@ export class FileOrDirectoryPickerComponent implements AsyncValidator, ControlVa } @autobind() - private _validatePaths(control: FormControl) { + private _validatePaths(control: UntypedFormControl) { return from(this._validatePathsAsync(control.value)).pipe(map((path) => { if (path) { return { diff --git a/desktop/src/app/components/data/shared/file-or-directory-picker/file-or-directory-picker.module.ts b/desktop/src/app/components/data/shared/file-or-directory-picker/file-or-directory-picker.module.ts index d5835f05eb..317e2b526c 100644 --- a/desktop/src/app/components/data/shared/file-or-directory-picker/file-or-directory-picker.module.ts +++ b/desktop/src/app/components/data/shared/file-or-directory-picker/file-or-directory-picker.module.ts @@ -17,7 +17,6 @@ const privateComponents = []; ], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class FileOrDirectoryPickerModule { } diff --git a/desktop/src/app/components/data/shared/job-id/job-id.component.spec.ts b/desktop/src/app/components/data/shared/job-id/job-id.component.spec.ts index 062531c164..870ffabe01 100644 --- a/desktop/src/app/components/data/shared/job-id/job-id.component.spec.ts +++ b/desktop/src/app/components/data/shared/job-id/job-id.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { FormControl, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, ReactiveFormsModule } from "@angular/forms"; import { BrowserModule, By } from "@angular/platform-browser"; import { ServerError } from "@batch-flask/core"; import { JobService } from "app/services"; @@ -9,10 +9,11 @@ import * as Fixtures from "test/fixture"; import { JobIdComponent } from "./job-id.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public jobId = new FormControl(""); + public jobId = new UntypedFormControl(""); } describe("JobIdComponent", () => { diff --git a/desktop/src/app/components/data/shared/job-id/job-id.component.ts b/desktop/src/app/components/data/shared/job-id/job-id.component.ts index eaceecef2b..4d4146c9d2 100644 --- a/desktop/src/app/components/data/shared/job-id/job-id.component.ts +++ b/desktop/src/app/components/data/shared/job-id/job-id.component.ts @@ -2,8 +2,8 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy import { AsyncValidator, ControlValueAccessor, - FormBuilder, - FormControl, + UntypedFormBuilder, + UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; @@ -17,6 +17,7 @@ import { catchError, distinctUntilChanged, map, switchMap } from "rxjs/operato import "./job-id.scss"; @Component({ + standalone: false, selector: "bl-job-id", templateUrl: "job-id.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -29,7 +30,7 @@ export class JobIdComponent implements AsyncValidator, ControlValueAccessor, OnD @Input() public label: string; @Input() public hint: string; - public value: FormControl; + public value: UntypedFormControl; public warning = false; private _propagateChange: (value: any) => void = null; @@ -37,7 +38,7 @@ export class JobIdComponent implements AsyncValidator, ControlValueAccessor, OnD constructor( private changeDetector: ChangeDetectorRef, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private jobService: JobService) { this.value = this.formBuilder.control([], null, this._validateJobUnique); @@ -65,12 +66,12 @@ export class JobIdComponent implements AsyncValidator, ControlValueAccessor, OnD // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return FormUtils.passValidation(this.value); } @autobind() - private _validateJobUnique(control: FormControl) { + private _validateJobUnique(control: UntypedFormControl) { // on init, value is an empty array. if (!control.value || (Array.isArray(control.value) && control.value.length === 0)) { return of(null); diff --git a/desktop/src/app/components/file/browse/blob-files-browser/blob-files-browser.component.ts b/desktop/src/app/components/file/browse/blob-files-browser/blob-files-browser.component.ts index d9232f6936..4480ace499 100644 --- a/desktop/src/app/components/file/browse/blob-files-browser/blob-files-browser.component.ts +++ b/desktop/src/app/components/file/browse/blob-files-browser/blob-files-browser.component.ts @@ -3,6 +3,7 @@ import { FileExplorerConfig, FileNavigator } from "@batch-flask/ui"; import { StorageBlobService } from "app/services/storage"; @Component({ + standalone: false, selector: "bl-blob-files-browser", templateUrl: "blob-files-browser.html", }) diff --git a/desktop/src/app/components/file/browse/blob-files-browser/blob-files-browser.module.ts b/desktop/src/app/components/file/browse/blob-files-browser/blob-files-browser.module.ts index f8100fb0c7..07e09344c1 100644 --- a/desktop/src/app/components/file/browse/blob-files-browser/blob-files-browser.module.ts +++ b/desktop/src/app/components/file/browse/blob-files-browser/blob-files-browser.module.ts @@ -13,7 +13,6 @@ const privateComponents = []; ], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class BlobFilesBrowserModule { } diff --git a/desktop/src/app/components/file/browse/node-file-browse.component.ts b/desktop/src/app/components/file/browse/node-file-browse.component.ts index f6855fcf8c..81cf29d825 100644 --- a/desktop/src/app/components/file/browse/node-file-browse.component.ts +++ b/desktop/src/app/components/file/browse/node-file-browse.component.ts @@ -13,6 +13,7 @@ const availableStates = new Set([ * Component for browsing node files. */ @Component({ + standalone: false, selector: "bl-node-file-browse", templateUrl: "node-file-browse.html", }) diff --git a/desktop/src/app/components/file/file.module.ts b/desktop/src/app/components/file/file.module.ts index 1519684d49..9d26c6fbd9 100644 --- a/desktop/src/app/components/file/file.module.ts +++ b/desktop/src/app/components/file/file.module.ts @@ -12,8 +12,6 @@ const modules = [ declarations: components, exports: [...modules, ...components], imports: [...modules], - entryComponents: [ - ], }) export class FileModule { } diff --git a/desktop/src/app/components/job-schedule/action/add/job-schedule-create-basic-dialog.component.ts b/desktop/src/app/components/job-schedule/action/add/job-schedule-create-basic-dialog.component.ts index 33811b6951..6b7abb492e 100644 --- a/desktop/src/app/components/job-schedule/action/add/job-schedule-create-basic-dialog.component.ts +++ b/desktop/src/app/components/job-schedule/action/add/job-schedule-create-basic-dialog.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms"; import { DynamicForm, autobind } from "@batch-flask/core"; import { ComplexFormConfig } from "@batch-flask/ui/form"; import { NotificationService } from "@batch-flask/ui/notifications"; @@ -14,17 +14,18 @@ import { Observable } from "rxjs"; import "./job-schedule-create-basic-dialog.scss"; @Component({ + standalone: false, selector: "bl-job-schedule-create-basic-dialog", templateUrl: "job-schedule-create-basic-dialog.html", }) export class JobScheduleCreateBasicDialogComponent extends DynamicForm { public complexFormConfig: ComplexFormConfig; - public scheduleGroup: FormGroup; + public scheduleGroup: UntypedFormGroup; public title = "Create job schedule"; public fileUri = "create.jobschedule.batch.json"; constructor( - public formBuilder: FormBuilder, + public formBuilder: UntypedFormBuilder, public sidebarRef: SidebarRef, public jobScheduleService: JobScheduleService, public notificationService: NotificationService) { diff --git a/desktop/src/app/components/job-schedule/action/add/job-schedule-job-specification.component.ts b/desktop/src/app/components/job-schedule/action/add/job-schedule-job-specification.component.ts index 95ed16bebd..fcca107798 100644 --- a/desktop/src/app/components/job-schedule/action/add/job-schedule-job-specification.component.ts +++ b/desktop/src/app/components/job-schedule/action/add/job-schedule-job-specification.component.ts @@ -1,9 +1,9 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, forwardRef } from "@angular/core"; import { ControlValueAccessor, - FormBuilder, - FormControl, - FormGroup, + UntypedFormBuilder, + UntypedFormControl, + UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, @@ -16,6 +16,7 @@ import { Subscription, of } from "rxjs"; import { debounceTime, distinctUntilChanged, flatMap } from "rxjs/operators"; @Component({ + standalone: false, selector: "bl-job-schedule-job-specification", templateUrl: "job-schedule-job-specification.html", providers: [ @@ -35,8 +36,8 @@ import { debounceTime, distinctUntilChanged, flatMap } from "rxjs/operators"; export class JobScheduleJobSpecificationComponent implements ControlValueAccessor, OnDestroy { public AllTasksCompleteAction = AllTasksCompleteAction; public TaskFailureAction = TaskFailureAction; - public form: FormGroup; - public constraintsGroup: FormGroup; + public form: UntypedFormGroup; + public constraintsGroup: UntypedFormGroup; public virtualMachineConfiguration: VirtualMachineConfiguration | null = null; public showJobReleaseTask: boolean; @@ -46,7 +47,7 @@ export class JobScheduleJobSpecificationComponent implements ControlValueAccesso constructor( private changeDetector: ChangeDetectorRef, private poolService: PoolService, - private formBuilder: FormBuilder) { + private formBuilder: UntypedFormBuilder) { const validation = Constants.forms.validation; this.constraintsGroup = this.formBuilder.group({ maxWallClockTime: null, @@ -132,7 +133,7 @@ export class JobScheduleJobSpecificationComponent implements ControlValueAccesso // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { const valid = this.form.valid; if (!valid) { return { diff --git a/desktop/src/app/components/job-schedule/action/add/patch-job-schedule-form.component.ts b/desktop/src/app/components/job-schedule/action/add/patch-job-schedule-form.component.ts index e43d8f3882..199d278241 100644 --- a/desktop/src/app/components/job-schedule/action/add/patch-job-schedule-form.component.ts +++ b/desktop/src/app/components/job-schedule/action/add/patch-job-schedule-form.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from "@angular/core"; -import { FormBuilder } from "@angular/forms"; +import { UntypedFormBuilder } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { NotificationService } from "@batch-flask/ui/notifications"; import { SidebarRef } from "@batch-flask/ui/sidebar"; @@ -9,6 +9,7 @@ import { Observable } from "rxjs"; import { JobScheduleCreateBasicDialogComponent } from "./job-schedule-create-basic-dialog.component"; @Component({ + standalone: false, selector: "bl-patch-job-schedule-form", templateUrl: "job-schedule-create-basic-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -25,7 +26,7 @@ export class PatchJobScheduleComponent extends JobScheduleCreateBasicDialogCompo } constructor( - formBuilder: FormBuilder, + formBuilder: UntypedFormBuilder, sidebarRef: SidebarRef, jobScheduleService: JobScheduleService, notificationService: NotificationService, diff --git a/desktop/src/app/components/job-schedule/action/delete/delete-job-schedule-dialog.component.ts b/desktop/src/app/components/job-schedule/action/delete/delete-job-schedule-dialog.component.ts index 188b453ad4..4e07faeefb 100644 --- a/desktop/src/app/components/job-schedule/action/delete/delete-job-schedule-dialog.component.ts +++ b/desktop/src/app/components/job-schedule/action/delete/delete-job-schedule-dialog.component.ts @@ -5,6 +5,7 @@ import { Activity, ActivityService } from "@batch-flask/ui"; import { JobScheduleService } from "app/services"; @Component({ + standalone: false, selector: "bl-delete-job-schedule-dialog", templateUrl: "delete-job-schedule-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job-schedule/action/disable/disable-job-schedule-dialog.component.ts b/desktop/src/app/components/job-schedule/action/disable/disable-job-schedule-dialog.component.ts index d0a50adc72..5df200f191 100644 --- a/desktop/src/app/components/job-schedule/action/disable/disable-job-schedule-dialog.component.ts +++ b/desktop/src/app/components/job-schedule/action/disable/disable-job-schedule-dialog.component.ts @@ -4,6 +4,7 @@ import { autobind } from "@batch-flask/core"; import { JobScheduleService } from "app/services"; @Component({ + standalone: false, selector: "bl-disable-job-schedule-dialog", templateUrl: "disable-job-schedule-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job-schedule/action/enable/enable-job-schedule-dialog.component.ts b/desktop/src/app/components/job-schedule/action/enable/enable-job-schedule-dialog.component.ts index 6de08d046e..ff4cdbe216 100644 --- a/desktop/src/app/components/job-schedule/action/enable/enable-job-schedule-dialog.component.ts +++ b/desktop/src/app/components/job-schedule/action/enable/enable-job-schedule-dialog.component.ts @@ -4,6 +4,7 @@ import { autobind } from "@batch-flask/core"; import { JobScheduleService } from "app/services"; @Component({ + standalone: false, selector: "bl-enable-job-schedule-dialog", templateUrl: "enable-job-schedule-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job-schedule/action/job-schedule-action.module.ts b/desktop/src/app/components/job-schedule/action/job-schedule-action.module.ts index 67195b4841..aa9e2969ed 100644 --- a/desktop/src/app/components/job-schedule/action/job-schedule-action.module.ts +++ b/desktop/src/app/components/job-schedule/action/job-schedule-action.module.ts @@ -25,10 +25,6 @@ const components = [ declarations: components, exports: components, imports: [...commonModules, JobActionModule, BaseModule, DatetimePickerModule], - entryComponents: [ - JobScheduleCreateBasicDialogComponent, DeleteJobScheduleDialogComponent, DisableJobScheduleDialogComponent, - EnableJobScheduleDialogComponent, TerminateJobScheduleDialogComponent, PatchJobScheduleComponent, - ], }) export class JobScheduleActionModule { } diff --git a/desktop/src/app/components/job-schedule/action/terminate/terminate-job-schedule-dialog.component.ts b/desktop/src/app/components/job-schedule/action/terminate/terminate-job-schedule-dialog.component.ts index 615d86a357..83ad5dcbe7 100644 --- a/desktop/src/app/components/job-schedule/action/terminate/terminate-job-schedule-dialog.component.ts +++ b/desktop/src/app/components/job-schedule/action/terminate/terminate-job-schedule-dialog.component.ts @@ -4,6 +4,7 @@ import { autobind } from "@batch-flask/core"; import { JobScheduleService } from "app/services"; @Component({ + standalone: false, selector: "bl-terminate-job-schedule-dialog", templateUrl: "terminate-job-schedule-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job-schedule/browse/filter/job-schedule-advanced-filter.component.ts b/desktop/src/app/components/job-schedule/browse/filter/job-schedule-advanced-filter.component.ts index 64a1312d28..ac4f591082 100644 --- a/desktop/src/app/components/job-schedule/browse/filter/job-schedule-advanced-filter.component.ts +++ b/desktop/src/app/components/job-schedule/browse/filter/job-schedule-advanced-filter.component.ts @@ -4,6 +4,7 @@ import { AdvancedFilter, StatePickerControl } from "@batch-flask/ui/advanced-fil import { JobScheduleState } from "app/models"; @Component({ + standalone: false, selector: "bl-job-schedule-advanced-filter", templateUrl: "job-schedule-advanced-filter.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job-schedule/browse/job-schedule-list.component.ts b/desktop/src/app/components/job-schedule/browse/job-schedule-list.component.ts index e03d45aa84..2891fde4a0 100644 --- a/desktop/src/app/components/job-schedule/browse/job-schedule-list.component.ts +++ b/desktop/src/app/components/job-schedule/browse/job-schedule-list.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Injector, OnDestroy, OnInit, forwardRef, } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { ActivatedRoute } from "@angular/router"; import { Filter, ListView, autobind } from "@batch-flask/core"; import { ListSelection } from "@batch-flask/core/list"; @@ -17,6 +17,7 @@ import { map } from "rxjs/operators"; import { JobScheduleCommands } from "../action"; @Component({ + standalone: false, selector: "bl-job-schedule-list", templateUrl: "job-schedule-list.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -30,7 +31,7 @@ export class JobScheduleListComponent extends ListBaseComponent implements OnIni public LoadingStatus = LoadingStatus; public data: ListView; - public searchQuery = new FormControl(); + public searchQuery = new UntypedFormControl(); private _baseOptions = {}; private _onJobScheduleAddedSub: Subscription; diff --git a/desktop/src/app/components/job-schedule/details/autopool/job-schedule-autopool.component.spec.ts b/desktop/src/app/components/job-schedule/details/autopool/job-schedule-autopool.component.spec.ts index 83605a87cb..5461a9d65b 100644 --- a/desktop/src/app/components/job-schedule/details/autopool/job-schedule-autopool.component.spec.ts +++ b/desktop/src/app/components/job-schedule/details/autopool/job-schedule-autopool.component.spec.ts @@ -21,6 +21,7 @@ const poolWithStartTask = new AutoPoolSpecification({ } as any, }); @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/job-schedule/details/autopool/job-schedule-autopool.component.ts b/desktop/src/app/components/job-schedule/details/autopool/job-schedule-autopool.component.ts index f85fc4f717..0d21c53d52 100644 --- a/desktop/src/app/components/job-schedule/details/autopool/job-schedule-autopool.component.ts +++ b/desktop/src/app/components/job-schedule/details/autopool/job-schedule-autopool.component.ts @@ -4,6 +4,7 @@ import { AutoPoolSpecification, Pool } from "app/models"; /* eslint-disable */ @Component({ + standalone: false, selector: "bl-job-schedule-autopool", templateUrl: "job-schedule-autopool.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job-schedule/details/job-schedule-configuration.component.ts b/desktop/src/app/components/job-schedule/details/job-schedule-configuration.component.ts index 1007caab97..f81ab32654 100644 --- a/desktop/src/app/components/job-schedule/details/job-schedule-configuration.component.ts +++ b/desktop/src/app/components/job-schedule/details/job-schedule-configuration.component.ts @@ -7,6 +7,7 @@ import { Subscription } from "rxjs"; /* eslint-disable */ @Component({ + standalone: false, selector: "bl-job-schedule-configuration", templateUrl: "job-schedule-configuration.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job-schedule/details/job-schedule-default.component.ts b/desktop/src/app/components/job-schedule/details/job-schedule-default.component.ts index 887cd4efe8..023fe9f110 100644 --- a/desktop/src/app/components/job-schedule/details/job-schedule-default.component.ts +++ b/desktop/src/app/components/job-schedule/details/job-schedule-default.component.ts @@ -1,6 +1,7 @@ import { ChangeDetectionStrategy, Component } from "@angular/core"; @Component({ + standalone: false, selector: "bl-job-schedule-details-home", template: `
diff --git a/desktop/src/app/components/job-schedule/details/job-schedule-details.component.ts b/desktop/src/app/components/job-schedule/details/job-schedule-details.component.ts index 365ae91df5..56c6df1a69 100644 --- a/desktop/src/app/components/job-schedule/details/job-schedule-details.component.ts +++ b/desktop/src/app/components/job-schedule/details/job-schedule-details.component.ts @@ -12,6 +12,7 @@ import { JobScheduleCommands } from "../action"; import "./job-schedule-details.scss"; @Component({ + standalone: false, selector: "bl-job-schedule-details", templateUrl: "job-schedule-details.html", providers: [JobScheduleCommands], diff --git a/desktop/src/app/components/job-schedule/details/job-schedule-job-specification.component.spec.ts b/desktop/src/app/components/job-schedule/details/job-schedule-job-specification.component.spec.ts index 926f20c9a0..8c4a96d6e2 100644 --- a/desktop/src/app/components/job-schedule/details/job-schedule-job-specification.component.spec.ts +++ b/desktop/src/app/components/job-schedule/details/job-schedule-job-specification.component.spec.ts @@ -10,6 +10,7 @@ import { JobService } from "app/services"; import { JobScheduleJobSpecificationComponent } from "./job-schedule-job-specification.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/job-schedule/details/job-schedule-job-specification.component.ts b/desktop/src/app/components/job-schedule/details/job-schedule-job-specification.component.ts index 8d746fd43d..42405beaf4 100644 --- a/desktop/src/app/components/job-schedule/details/job-schedule-job-specification.component.ts +++ b/desktop/src/app/components/job-schedule/details/job-schedule-job-specification.component.ts @@ -6,6 +6,7 @@ import { JobService } from "app/services"; /* eslint-disable */ @Component({ + standalone: false, selector: "bl-job-schedule-job-specification", templateUrl: "job-schedule-job-specification.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job-schedule/home/job-schedule-home.component.ts b/desktop/src/app/components/job-schedule/home/job-schedule-home.component.ts index ac225d9468..326a502f6e 100644 --- a/desktop/src/app/components/job-schedule/home/job-schedule-home.component.ts +++ b/desktop/src/app/components/job-schedule/home/job-schedule-home.component.ts @@ -1,23 +1,24 @@ import { ChangeDetectionStrategy, Component } from "@angular/core"; -import { FormBuilder, FormControl } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormControl } from "@angular/forms"; import { Filter, FilterBuilder, autobind } from "@batch-flask/core"; import { SidebarManager } from "@batch-flask/ui/sidebar"; import { debounceTime, distinctUntilChanged } from "rxjs/operators"; import { JobScheduleCreateBasicDialogComponent } from "../action"; @Component({ + standalone: false, selector: "bl-job-schedule-home", templateUrl: "job-schedule-home.html", changeDetection: ChangeDetectionStrategy.OnPush, }) export class JobScheduleHomeComponent { - public quickSearchQuery = new FormControl(); + public quickSearchQuery = new UntypedFormControl(); public filter: Filter = FilterBuilder.none(); public quickFilter: Filter = FilterBuilder.none(); public advancedFilter: Filter = FilterBuilder.none(); - constructor(formBuilder: FormBuilder, private sidebarManager: SidebarManager) { + constructor(formBuilder: UntypedFormBuilder, private sidebarManager: SidebarManager) { this.quickSearchQuery.valueChanges.pipe( debounceTime(400), distinctUntilChanged(), diff --git a/desktop/src/app/components/job-schedule/job-schedule.module.ts b/desktop/src/app/components/job-schedule/job-schedule.module.ts index 045688cae5..81f5480603 100644 --- a/desktop/src/app/components/job-schedule/job-schedule.module.ts +++ b/desktop/src/app/components/job-schedule/job-schedule.module.ts @@ -21,8 +21,6 @@ const modules = [ declarations: components, exports: [...modules, ...components], imports: [...modules], - entryComponents: [ - ], }) export class JobScheduleModule { } diff --git a/desktop/src/app/components/job/action/add/add-job-form.component.spec.ts b/desktop/src/app/components/job/action/add/add-job-form.component.spec.ts index 4d05b8035f..3b2588bd82 100644 --- a/desktop/src/app/components/job/action/add/add-job-form.component.spec.ts +++ b/desktop/src/app/components/job/action/add/add-job-form.component.spec.ts @@ -1,6 +1,6 @@ import { DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormBuilder } from "@angular/forms"; +import { UntypedFormBuilder } from "@angular/forms"; import { ServerError } from "@batch-flask/core"; import { I18nTestingModule } from "@batch-flask/core/testing"; import { NotificationService } from "@batch-flask/ui/notifications"; @@ -84,7 +84,7 @@ describe("AddJobFormComponent ", () => { imports: [I18nTestingModule], declarations: [...complexFormMockComponents, AddJobFormComponent, ServerErrorMockComponent], providers: [ - { provide: FormBuilder, useValue: new FormBuilder() }, + { provide: UntypedFormBuilder, useValue: new UntypedFormBuilder() }, { provide: SidebarRef, useValue: sidebarRefSpy }, { provide: JobService, useValue: jobServiceSpy }, { provide: PoolService, useValue: poolServiceSpy }, diff --git a/desktop/src/app/components/job/action/add/add-job-form.component.ts b/desktop/src/app/components/job/action/add/add-job-form.component.ts index 1b002bbd46..3e52e0d819 100644 --- a/desktop/src/app/components/job/action/add/add-job-form.component.ts +++ b/desktop/src/app/components/job/action/add/add-job-form.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from "@angular/core"; -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms"; import { DynamicForm, autobind } from "@batch-flask/core"; import { ComplexFormConfig } from "@batch-flask/ui/form"; import { NotificationService } from "@batch-flask/ui/notifications"; @@ -17,6 +17,7 @@ import { debounceTime, distinctUntilChanged, switchMap } from "rxjs/operators"; import "./add-job-form.scss"; @Component({ + standalone: false, selector: "bl-add-job-form", templateUrl: "add-job-form.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -34,7 +35,7 @@ export class AddJobFormComponent extends DynamicForm { }, }; - public constraintsGroup: FormGroup; + public constraintsGroup: UntypedFormGroup; public showJobReleaseTask: boolean; public title = "Create job"; public subtitle = null; @@ -43,7 +44,7 @@ export class AddJobFormComponent extends DynamicForm { constructor( public sidebarRef: SidebarRef, - protected formBuilder: FormBuilder, + protected formBuilder: UntypedFormBuilder, protected jobService: JobService, protected changeDetector: ChangeDetectorRef, protected notificationService: NotificationService, diff --git a/desktop/src/app/components/job/action/add/job-manager-task-picker.component.ts b/desktop/src/app/components/job/action/add/job-manager-task-picker.component.ts index 2a1c1b7e02..480e878dc8 100644 --- a/desktop/src/app/components/job/action/add/job-manager-task-picker.component.ts +++ b/desktop/src/app/components/job/action/add/job-manager-task-picker.component.ts @@ -1,6 +1,6 @@ import { Component, forwardRef } from "@angular/core"; import { - FormBuilder, + UntypedFormBuilder, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, @@ -23,6 +23,7 @@ const INVALID_RESPONSE = { }; @Component({ + standalone: false, selector: "bl-job-manager-task-picker", templateUrl: "job-manager-task-picker.html", providers: [ @@ -31,7 +32,7 @@ const INVALID_RESPONSE = { ], }) export class JobManagerTaskPickerComponent extends JobTaskBaseComponent { - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { super(formBuilder, DEFAULT_JOBMANAGER, INVALID_RESPONSE); this._baseFormControls["displayName"] = [null]; this._baseFormControls["killJobOnCompletion"] = [true]; diff --git a/desktop/src/app/components/job/action/add/job-preparation-task-picker.component.ts b/desktop/src/app/components/job/action/add/job-preparation-task-picker.component.ts index 06e14a84b6..d16f1630e6 100644 --- a/desktop/src/app/components/job/action/add/job-preparation-task-picker.component.ts +++ b/desktop/src/app/components/job/action/add/job-preparation-task-picker.component.ts @@ -1,6 +1,6 @@ import { Component, forwardRef } from "@angular/core"; import { - FormBuilder, + UntypedFormBuilder, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, @@ -26,6 +26,7 @@ const INVALID_RESPONSE = { }; @Component({ + standalone: false, selector: "bl-job-preparation-task-picker", templateUrl: "job-preparation-task-picker.html", providers: [ @@ -35,7 +36,7 @@ const INVALID_RESPONSE = { ], }) export class JobPreparationTaskPickerComponent extends JobTaskBaseComponent { - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { super(formBuilder, DEFAULT_JOBPREPARATION, INVALID_RESPONSE); this._baseFormControls["id"] = [DEFAULT_JOBPREPARATION_ID, Validators.required]; this._baseFormControls["rerunOnNodeRebootAfterSuccess"] = [true]; diff --git a/desktop/src/app/components/job/action/add/job-release-task-picker.component.ts b/desktop/src/app/components/job/action/add/job-release-task-picker.component.ts index e8464e0fcd..2765b4268a 100644 --- a/desktop/src/app/components/job/action/add/job-release-task-picker.component.ts +++ b/desktop/src/app/components/job/action/add/job-release-task-picker.component.ts @@ -1,6 +1,6 @@ import { Component, forwardRef } from "@angular/core"; import { - FormBuilder, + UntypedFormBuilder, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, @@ -24,6 +24,7 @@ const INVALID_RESPONSE = { }; @Component({ + standalone: false, selector: "bl-job-release-task-picker", templateUrl: "job-release-task-picker.html", providers: [ @@ -33,7 +34,7 @@ const INVALID_RESPONSE = { ], }) export class JobReleaseTaskPickerComponent extends JobTaskBaseComponent { - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { super(formBuilder, DEFAULT_JOBRELEASE, INVALID_RESPONSE); this._baseFormControls["id"] = [DEFAULT_JOBRELEASE_ID, Validators.required]; this.form = formBuilder.group(this._baseFormControls); diff --git a/desktop/src/app/components/job/action/add/job-task-base.component.ts b/desktop/src/app/components/job/action/add/job-task-base.component.ts index 90992ac5b4..546405180b 100644 --- a/desktop/src/app/components/job/action/add/job-task-base.component.ts +++ b/desktop/src/app/components/job/action/add/job-task-base.component.ts @@ -1,9 +1,9 @@ import { Directive, Input } from "@angular/core"; import { ControlValueAccessor, - FormBuilder, - FormControl, - FormGroup, + UntypedFormBuilder, + UntypedFormControl, + UntypedFormGroup, Validators, } from "@angular/forms"; import { RangeValidator } from "@batch-flask/ui/validation"; @@ -11,18 +11,18 @@ import { UserAccount, VirtualMachineConfiguration } from "app/models"; import { Constants } from "common"; import { List } from "immutable"; -@Directive() +@Directive({ standalone: false }) export class JobTaskBaseComponent implements ControlValueAccessor { @Input() public userAccounts: List | UserAccount[]; @Input() public virtualMachineConfiguration: VirtualMachineConfiguration; - public form: FormGroup; - public constraintsGroup: FormGroup; + public form: UntypedFormGroup; + public constraintsGroup: UntypedFormGroup; protected _propagateChange: (value: any) => void = null; protected _baseFormControls: any; protected _defaultValue: any; protected _invalidResponse: any; - constructor(formBuilder: FormBuilder, defaultValue: any, invalidResponse: any) { + constructor(formBuilder: UntypedFormBuilder, defaultValue: any, invalidResponse: any) { const validation = Constants.forms.validation; this.constraintsGroup = formBuilder.group({ maxWallClockTime: null, @@ -67,7 +67,7 @@ export class JobTaskBaseComponent implements ControlValueAccessor { // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { const valid = this.form.valid; if (!valid) { return this._invalidResponse; diff --git a/desktop/src/app/components/job/action/add/patch-job-form.component.ts b/desktop/src/app/components/job/action/add/patch-job-form.component.ts index 8dd0a101a0..b2b6a94bd1 100644 --- a/desktop/src/app/components/job/action/add/patch-job-form.component.ts +++ b/desktop/src/app/components/job/action/add/patch-job-form.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from "@angular/core"; -import { FormBuilder } from "@angular/forms"; +import { UntypedFormBuilder } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { NotificationService } from "@batch-flask/ui/notifications"; import { SidebarRef } from "@batch-flask/ui/sidebar"; @@ -10,6 +10,7 @@ import { Observable } from "rxjs"; import { AddJobFormComponent } from "./add-job-form.component"; @Component({ + standalone: false, selector: "bl-patch-job-form", templateUrl: "add-job-form.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -26,7 +27,7 @@ export class PatchJobComponent extends AddJobFormComponent { } constructor( - formBuilder: FormBuilder, + formBuilder: UntypedFormBuilder, sidebarRef: SidebarRef, jobService: JobService, poolService: PoolService, diff --git a/desktop/src/app/components/job/action/add/pool-picker/pool-picker.component.spec.ts b/desktop/src/app/components/job/action/add/pool-picker/pool-picker.component.spec.ts index 7c15385d34..937035e8b5 100644 --- a/desktop/src/app/components/job/action/add/pool-picker/pool-picker.component.spec.ts +++ b/desktop/src/app/components/job/action/add/pool-picker/pool-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { I18nTestingModule } from "@batch-flask/core/testing"; import { ButtonsModule, SelectComponent, SelectModule } from "@batch-flask/ui"; @@ -14,16 +14,18 @@ import { click, updateInput } from "test/utils/helpers"; import { GithubDataServiceMock } from "test/utils/mocks"; @Component({ + standalone: false, template: ` `, }) class SimpleTestComponent { - public poolInfo = new FormControl({}); + public poolInfo = new UntypedFormControl({}); } @Component({ + standalone: false, template: ` @@ -31,7 +33,7 @@ class SimpleTestComponent { `, }) class TestComponent extends SimpleTestComponent { - public poolInfo = new FormControl({}); + public poolInfo = new UntypedFormControl({}); public app: RenderApplication; public renderEngine: RenderEngine; diff --git a/desktop/src/app/components/job/action/add/pool-picker/pool-picker.component.ts b/desktop/src/app/components/job/action/add/pool-picker/pool-picker.component.ts index 162a3f7412..e18b36c2ff 100644 --- a/desktop/src/app/components/job/action/add/pool-picker/pool-picker.component.ts +++ b/desktop/src/app/components/job/action/add/pool-picker/pool-picker.component.ts @@ -4,8 +4,8 @@ import { } from "@angular/core"; import { ControlValueAccessor, - FormBuilder, - FormGroup, + UntypedFormBuilder, + UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; @@ -38,6 +38,7 @@ interface Inputs { const CLOUD_SERVICE_OFFER = "cloudservice-windows"; @Component({ + standalone: false, selector: "bl-pool-picker", templateUrl: "pool-picker.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -55,7 +56,7 @@ export class PoolPickerComponent implements ControlValueAccessor, OnChanges, OnD public pickedPool: string; public displayedPools: List = List([]); - public filters: FormGroup; + public filters: UntypedFormGroup; public offers: any[] = []; private _vmSizeCoresMap = new Map(); @@ -64,7 +65,7 @@ export class PoolPickerComponent implements ControlValueAccessor, OnChanges, OnD private _inputs = new BehaviorSubject(null); constructor( - formBuilder: FormBuilder, + formBuilder: UntypedFormBuilder, private poolService: PoolService, private poolOsService: PoolOsService, private vmSizeService: VmSizeService, diff --git a/desktop/src/app/components/job/action/disable/disable-job-button.component.ts b/desktop/src/app/components/job/action/disable/disable-job-button.component.ts index 7fb65d2e04..a5b63c3f56 100644 --- a/desktop/src/app/components/job/action/disable/disable-job-button.component.ts +++ b/desktop/src/app/components/job/action/disable/disable-job-button.component.ts @@ -3,6 +3,7 @@ import { BaseButton } from "@batch-flask/ui/buttons"; import { Job, JobState } from "../../../../models/azure-batch/job/job"; @Component({ + standalone: false, selector: "bl-disable-button", template: ` `, }) class TestComponent { diff --git a/desktop/src/app/components/job/base/job-state/job-state.component.ts b/desktop/src/app/components/job/base/job-state/job-state.component.ts index c00654e1b8..a99f65ecc7 100644 --- a/desktop/src/app/components/job/base/job-state/job-state.component.ts +++ b/desktop/src/app/components/job/base/job-state/job-state.component.ts @@ -5,6 +5,7 @@ import { Job, JobState, JobTerminateReason } from "app/models"; import "./job-state.scss"; @Component({ + standalone: false, selector: "bl-job-state", templateUrl: "job-state.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job/browse/filter/job-advanced-filter.component.ts b/desktop/src/app/components/job/browse/filter/job-advanced-filter.component.ts index e13a7db3ae..d92b45c107 100644 --- a/desktop/src/app/components/job/browse/filter/job-advanced-filter.component.ts +++ b/desktop/src/app/components/job/browse/filter/job-advanced-filter.component.ts @@ -4,6 +4,7 @@ import { AdvancedFilter, StatePickerControl } from "@batch-flask/ui/advanced-fil import { JobState } from "app/models"; @Component({ + standalone: false, selector: "bl-job-advanced-filter", templateUrl: "job-advanced-filter.html", }) diff --git a/desktop/src/app/components/job/browse/job-list.component.ts b/desktop/src/app/components/job/browse/job-list.component.ts index 49488eaa03..31dc830964 100644 --- a/desktop/src/app/components/job/browse/job-list.component.ts +++ b/desktop/src/app/components/job/browse/job-list.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, Injector, OnDestroy, OnInit, forwardRef } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { ActivatedRoute } from "@angular/router"; import { Filter, ListSelection, ListView, autobind } from "@batch-flask/core"; import { AbstractListBaseConfig, ListBaseComponent } from "@batch-flask/ui"; @@ -19,6 +19,7 @@ import { } from "../action"; @Component({ + standalone: false, selector: "bl-job-list", templateUrl: "job-list.html", providers: [JobCommands, { @@ -32,7 +33,7 @@ export class JobListComponent extends ListBaseComponent implements OnInit, OnDes public LoadingStatus = LoadingStatus; public data: ListView; - public searchQuery = new FormControl(); + public searchQuery = new UntypedFormControl(); public listConfig: AbstractListBaseConfig = { id: "job-list", diff --git a/desktop/src/app/components/job/details/error-display/job-error-display.component.spec.ts b/desktop/src/app/components/job/details/error-display/job-error-display.component.spec.ts index 7e0167181f..d937ef50e5 100644 --- a/desktop/src/app/components/job/details/error-display/job-error-display.component.spec.ts +++ b/desktop/src/app/components/job/details/error-display/job-error-display.component.spec.ts @@ -10,6 +10,7 @@ import { Duration } from "luxon"; import { BannerMockComponent } from "test/utils/mocks/components"; @Component({ + standalone: false, template: ``, }) class TestJobErrorDisplayComponent { diff --git a/desktop/src/app/components/job/details/error-display/job-error-display.component.ts b/desktop/src/app/components/job/details/error-display/job-error-display.component.ts index b5d321dc8c..55e90f4c7e 100644 --- a/desktop/src/app/components/job/details/error-display/job-error-display.component.ts +++ b/desktop/src/app/components/job/details/error-display/job-error-display.component.ts @@ -8,6 +8,7 @@ import { ODataFields } from "common/constants"; import { of } from "rxjs"; @Component({ + standalone: false, selector: "bl-job-error-display", templateUrl: "job-error-display.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job/details/job-configuration.component.ts b/desktop/src/app/components/job/details/job-configuration.component.ts index 2e11a90f6e..0e6b863a91 100644 --- a/desktop/src/app/components/job/details/job-configuration.component.ts +++ b/desktop/src/app/components/job/details/job-configuration.component.ts @@ -15,6 +15,7 @@ import { flatMap } from "rxjs/operators"; /* eslint-disable */ @Component({ + standalone: false, selector: "bl-job-configuration", templateUrl: "job-configuration.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job/details/job-default.component.ts b/desktop/src/app/components/job/details/job-default.component.ts index 4c188099c6..d6fad427f5 100644 --- a/desktop/src/app/components/job/details/job-default.component.ts +++ b/desktop/src/app/components/job/details/job-default.component.ts @@ -3,6 +3,7 @@ import { Component } from "@angular/core"; import "./jobs-dashboard.scss"; @Component({ + standalone: false, selector: "bl-jobs-dashboard", template: ` diff --git a/desktop/src/app/components/job/details/job-details.component.ts b/desktop/src/app/components/job/details/job-details.component.ts index 57b91a7b7c..c7eae5c74b 100644 --- a/desktop/src/app/components/job/details/job-details.component.ts +++ b/desktop/src/app/components/job/details/job-details.component.ts @@ -12,6 +12,7 @@ import { JobCommands } from "../action"; import "./job-details.scss"; @Component({ + standalone: false, selector: "bl-job-details", templateUrl: "job-details.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job/details/job-progress-status/job-progress-status.component.spec.ts b/desktop/src/app/components/job/details/job-progress-status/job-progress-status.component.spec.ts index 30bf9eb21a..997ab216e9 100644 --- a/desktop/src/app/components/job/details/job-progress-status/job-progress-status.component.spec.ts +++ b/desktop/src/app/components/job/details/job-progress-status/job-progress-status.component.spec.ts @@ -12,6 +12,7 @@ import { GaugeMockComponent } from "test/utils/mocks/components"; import { JobProgressStatusComponent } from "./job-progress-status.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/job/details/job-progress-status/job-progress-status.component.ts b/desktop/src/app/components/job/details/job-progress-status/job-progress-status.component.ts index 9d35d380e6..878f48cbad 100644 --- a/desktop/src/app/components/job/details/job-progress-status/job-progress-status.component.ts +++ b/desktop/src/app/components/job/details/job-progress-status/job-progress-status.component.ts @@ -10,6 +10,7 @@ import "./job-progress-status.scss"; const refreshRate = 5000; @Component({ + standalone: false, selector: "bl-job-progress-status", templateUrl: "job-progress-status.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job/graphs/all-job-graphs-home/all-job-graphs-home.component.ts b/desktop/src/app/components/job/graphs/all-job-graphs-home/all-job-graphs-home.component.ts index 7a1a7bfe85..995d622b89 100644 --- a/desktop/src/app/components/job/graphs/all-job-graphs-home/all-job-graphs-home.component.ts +++ b/desktop/src/app/components/job/graphs/all-job-graphs-home/all-job-graphs-home.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { FilterBuilder, autobind } from "@batch-flask/core"; import { Job, JobState } from "app/models"; import { JobService } from "app/services"; @@ -15,6 +15,7 @@ enum TimeRange { week = 3, } @Component({ + standalone: false, selector: "bl-all-job-graphs-home", templateUrl: "all-job-graphs-home.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -24,7 +25,7 @@ export class AllJobGraphsComponent implements OnInit, OnDestroy { public jobs: List; public loading = false; - public selectedTimeRange = new FormControl(TimeRange.day); + public selectedTimeRange = new UntypedFormControl(TimeRange.day); private _sub: Subscription; constructor(private jobService: JobService, private changeDetector: ChangeDetectorRef) { diff --git a/desktop/src/app/components/job/graphs/all-job-graphs-home/jobs-bar-chart/jobs-bar-chart.component.ts b/desktop/src/app/components/job/graphs/all-job-graphs-home/jobs-bar-chart/jobs-bar-chart.component.ts index e7c4a4b232..dca7258a44 100644 --- a/desktop/src/app/components/job/graphs/all-job-graphs-home/jobs-bar-chart/jobs-bar-chart.component.ts +++ b/desktop/src/app/components/job/graphs/all-job-graphs-home/jobs-bar-chart/jobs-bar-chart.component.ts @@ -7,6 +7,7 @@ import { List } from "immutable"; import "./jobs-bar-chart.scss"; @Component({ + standalone: false, selector: "bl-jobs-bar-chart", templateUrl: "jobs-bar-chart.html", }) diff --git a/desktop/src/app/components/job/graphs/all-job-graphs-home/jobs-cpu-wait-time-graph/jobs-cpu-wait-time-graph.component.ts b/desktop/src/app/components/job/graphs/all-job-graphs-home/jobs-cpu-wait-time-graph/jobs-cpu-wait-time-graph.component.ts index 80daa67e49..1c8cc896f2 100644 --- a/desktop/src/app/components/job/graphs/all-job-graphs-home/jobs-cpu-wait-time-graph/jobs-cpu-wait-time-graph.component.ts +++ b/desktop/src/app/components/job/graphs/all-job-graphs-home/jobs-cpu-wait-time-graph/jobs-cpu-wait-time-graph.component.ts @@ -8,6 +8,7 @@ import { DateTime } from "luxon"; import "./jobs-cpu-wait-time-graph.scss"; @Component({ + standalone: false, selector: "bl-jobs-cpu-wait-time-graph", templateUrl: "jobs-cpu-wait-time-graph.html", }) diff --git a/desktop/src/app/components/job/graphs/all-job-graphs-home/jobs-running-time-graph/jobs-running-time-graph.component.ts b/desktop/src/app/components/job/graphs/all-job-graphs-home/jobs-running-time-graph/jobs-running-time-graph.component.ts index 07f0d53e95..b0e52f60ce 100644 --- a/desktop/src/app/components/job/graphs/all-job-graphs-home/jobs-running-time-graph/jobs-running-time-graph.component.ts +++ b/desktop/src/app/components/job/graphs/all-job-graphs-home/jobs-running-time-graph/jobs-running-time-graph.component.ts @@ -8,6 +8,7 @@ import { DateTime } from "luxon"; import "./jobs-running-time-graph.scss"; @Component({ + standalone: false, selector: "bl-jobs-running-time-graph", templateUrl: "jobs-running-time-graph.html", }) diff --git a/desktop/src/app/components/job/graphs/job-graphs-home/job-graphs-home.component.ts b/desktop/src/app/components/job/graphs/job-graphs-home/job-graphs-home.component.ts index 5338a56927..ed0de3c79d 100644 --- a/desktop/src/app/components/job/graphs/job-graphs-home/job-graphs-home.component.ts +++ b/desktop/src/app/components/job/graphs/job-graphs-home/job-graphs-home.component.ts @@ -17,6 +17,7 @@ enum AvailableGraph { progress, } @Component({ + standalone: false, selector: "bl-job-graphs-home", templateUrl: "job-graphs-home.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/job/graphs/job-progress-graph/job-progress-graph.component.ts b/desktop/src/app/components/job/graphs/job-progress-graph/job-progress-graph.component.ts index a4071dcba9..8882857b7c 100644 --- a/desktop/src/app/components/job/graphs/job-progress-graph/job-progress-graph.component.ts +++ b/desktop/src/app/components/job/graphs/job-progress-graph/job-progress-graph.component.ts @@ -8,6 +8,7 @@ import { DateTime, Duration } from "luxon"; import "./job-progress-graph.scss"; @Component({ + standalone: false, selector: "bl-job-progress-graph", templateUrl: "job-progress-graph.html", }) diff --git a/desktop/src/app/components/job/graphs/tasks-running-time-graph/task-running-time-graph.component.spec.ts b/desktop/src/app/components/job/graphs/tasks-running-time-graph/task-running-time-graph.component.spec.ts index ab1e0dcccc..4b1e586ac8 100644 --- a/desktop/src/app/components/job/graphs/tasks-running-time-graph/task-running-time-graph.component.spec.ts +++ b/desktop/src/app/components/job/graphs/tasks-running-time-graph/task-running-time-graph.component.spec.ts @@ -34,6 +34,7 @@ const taskWithoutNodeInfo = new Task({ }); @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/job/graphs/tasks-running-time-graph/tasks-running-time-graph.component.ts b/desktop/src/app/components/job/graphs/tasks-running-time-graph/tasks-running-time-graph.component.ts index 9055a91056..73e0043d33 100644 --- a/desktop/src/app/components/job/graphs/tasks-running-time-graph/tasks-running-time-graph.component.ts +++ b/desktop/src/app/components/job/graphs/tasks-running-time-graph/tasks-running-time-graph.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { Router } from "@angular/router"; import { DateUtils } from "@batch-flask/utils"; import { Job, Task } from "app/models"; @@ -23,6 +23,7 @@ export enum SortOption { } @Component({ + standalone: false, selector: "bl-tasks-running-time-graph", templateUrl: "tasks-running-time-graph.html", }) @@ -45,7 +46,7 @@ export class TasksRunningTimeGraphComponent implements OnInit, OnChanges, OnDest public loading = false; - public sortControl = new FormControl(SortOption.default); + public sortControl = new UntypedFormControl(SortOption.default); private _failedTasks: TaskPoint[]; private _succeededTasks: TaskPoint[]; @@ -117,7 +118,7 @@ export class TasksRunningTimeGraphComponent implements OnInit, OnChanges, OnDest ticks: { min: 0, callback: (value) => { - if (value > 180) { + if (value as number > 180) { if (value as number % 60 === 0) { return value as number / 60 + "m"; } diff --git a/desktop/src/app/components/job/home/job-home.component.ts b/desktop/src/app/components/job/home/job-home.component.ts index 5976fa9784..8c34b6d7b2 100644 --- a/desktop/src/app/components/job/home/job-home.component.ts +++ b/desktop/src/app/components/job/home/job-home.component.ts @@ -1,22 +1,23 @@ import { Component } from "@angular/core"; -import { FormBuilder, FormControl } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormControl } from "@angular/forms"; import { Filter, FilterBuilder, autobind } from "@batch-flask/core"; import { SidebarManager } from "@batch-flask/ui/sidebar"; import { debounceTime, distinctUntilChanged } from "rxjs/operators"; import { AddJobFormComponent } from "../action"; @Component({ + standalone: false, selector: "bl-job-home", templateUrl: "job-home.html", }) export class JobHomeComponent { - public quickSearchQuery = new FormControl(); + public quickSearchQuery = new UntypedFormControl(); public filter: Filter = FilterBuilder.none(); public quickFilter: Filter = FilterBuilder.none(); public advancedFilter: Filter = FilterBuilder.none(); - constructor(formBuilder: FormBuilder, private sidebarManager: SidebarManager) { + constructor(formBuilder: UntypedFormBuilder, private sidebarManager: SidebarManager) { this.quickSearchQuery.valueChanges.pipe( debounceTime(400), distinctUntilChanged(), diff --git a/desktop/src/app/components/job/job-hook-task/job-hook-task-browser/job-hook-task-browser.component.ts b/desktop/src/app/components/job/job-hook-task/job-hook-task-browser/job-hook-task-browser.component.ts index 85dfd75236..0363f0706a 100644 --- a/desktop/src/app/components/job/job-hook-task/job-hook-task-browser/job-hook-task-browser.component.ts +++ b/desktop/src/app/components/job/job-hook-task/job-hook-task-browser/job-hook-task-browser.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnChanges, OnDestroy, SimpleChanges } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { FilterBuilder, ListView } from "@batch-flask/core"; import { Job, JobHookTask, JobHookTaskState } from "app/models"; import { TaskExecutionResult } from "app/models/azure-batch"; @@ -15,13 +15,14 @@ enum HookTaskType { } @Component({ + standalone: false, selector: "bl-job-hook-task-browser", templateUrl: "job-hook-task-browser.html", }) export class JobHookTaskBrowserComponent implements OnDestroy, OnChanges { public HookTaskType = HookTaskType; - public onlyFailedControl = new FormControl(false); + public onlyFailedControl = new UntypedFormControl(false); @Input() public job: Job; diff --git a/desktop/src/app/components/job/job-hook-task/job-hook-task-details/job-hook-task-details.component.ts b/desktop/src/app/components/job/job-hook-task/job-hook-task-details/job-hook-task-details.component.ts index 93343391f9..484461a3d1 100644 --- a/desktop/src/app/components/job/job-hook-task/job-hook-task-details/job-hook-task-details.component.ts +++ b/desktop/src/app/components/job/job-hook-task/job-hook-task-details/job-hook-task-details.component.ts @@ -7,6 +7,7 @@ import { NodeParams, NodeService } from "app/services"; import "./job-hook-task-details.scss"; @Component({ + standalone: false, selector: "bl-job-hook-task-details", templateUrl: "job-hook-task-details.html", }) diff --git a/desktop/src/app/components/job/job-hook-task/job-hook-task.module.ts b/desktop/src/app/components/job/job-hook-task/job-hook-task.module.ts index 99d6d87ac9..40252a8df7 100644 --- a/desktop/src/app/components/job/job-hook-task/job-hook-task.module.ts +++ b/desktop/src/app/components/job/job-hook-task/job-hook-task.module.ts @@ -18,8 +18,6 @@ const modules = [ declarations: components, exports: [...modules, ...components], imports: [...modules], - entryComponents: [ - ], }) export class JobHookTaskModule { } diff --git a/desktop/src/app/components/job/job.module.ts b/desktop/src/app/components/job/job.module.ts index ed88848662..34583ee47f 100644 --- a/desktop/src/app/components/job/job.module.ts +++ b/desktop/src/app/components/job/job.module.ts @@ -24,8 +24,6 @@ const modules = [ declarations: components, exports: [...modules, ...components], imports: [JobBaseModule, ...modules], - entryComponents: [ - ], }) export class JobModule { } diff --git a/desktop/src/app/components/layout/footer/footer.component.ts b/desktop/src/app/components/layout/footer/footer.component.ts index 6ee977ff58..5b6af8d08f 100644 --- a/desktop/src/app/components/layout/footer/footer.component.ts +++ b/desktop/src/app/components/layout/footer/footer.component.ts @@ -3,6 +3,7 @@ import { Component } from "@angular/core"; import "./footer.scss"; @Component({ + standalone: false, selector: "bl-footer", templateUrl: "footer.html", }) diff --git a/desktop/src/app/components/layout/footer/timezone-dropdown/timezone-dropdown.component.spec.ts b/desktop/src/app/components/layout/footer/timezone-dropdown/timezone-dropdown.component.spec.ts index 2d2d2d8030..16d7c57f8b 100644 --- a/desktop/src/app/components/layout/footer/timezone-dropdown/timezone-dropdown.component.spec.ts +++ b/desktop/src/app/components/layout/footer/timezone-dropdown/timezone-dropdown.component.spec.ts @@ -9,6 +9,7 @@ import { click, dblclick } from "test/utils/helpers"; import { TimezoneDropdownComponent } from "./timezone-dropdown.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { @@ -30,7 +31,7 @@ describe("TimezoneDropdownComponent", () => { de = fixture.debugElement.query(By.css("bl-timezone-dropdown")); fixture.detectChanges(); - timeZoneService = TestBed.get(TimeZoneService); + timeZoneService = TestBed.inject(TimeZoneService); dropDownButton = de.query(By.css(".dropdown-btn-container")); }); diff --git a/desktop/src/app/components/layout/footer/timezone-dropdown/timezone-dropdown.component.ts b/desktop/src/app/components/layout/footer/timezone-dropdown/timezone-dropdown.component.ts index df390a2b53..285018b0b6 100644 --- a/desktop/src/app/components/layout/footer/timezone-dropdown/timezone-dropdown.component.ts +++ b/desktop/src/app/components/layout/footer/timezone-dropdown/timezone-dropdown.component.ts @@ -7,6 +7,7 @@ import { takeUntil } from "rxjs/operators"; import "./timezone-dropdown.scss"; @Component({ + standalone: false, selector: "bl-timezone-dropdown", templateUrl: "timezone-dropdown.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/layout/footer/version-channel/version-type.component.spec.ts b/desktop/src/app/components/layout/footer/version-channel/version-type.component.spec.ts index 6aa6046e63..d272d628bb 100644 --- a/desktop/src/app/components/layout/footer/version-channel/version-type.component.spec.ts +++ b/desktop/src/app/components/layout/footer/version-channel/version-type.component.spec.ts @@ -5,6 +5,7 @@ import { VersionService, VersionType } from "app/services"; import { VersionTypeComponent } from "./version-type.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/layout/footer/version-channel/version-type.component.ts b/desktop/src/app/components/layout/footer/version-channel/version-type.component.ts index 528df0cc50..bda353dbe7 100644 --- a/desktop/src/app/components/layout/footer/version-channel/version-type.component.ts +++ b/desktop/src/app/components/layout/footer/version-channel/version-type.component.ts @@ -4,6 +4,7 @@ import { VersionService, VersionType } from "app/services"; import "./version-type.scss"; @Component({ + standalone: false, selector: "bl-version-type", templateUrl: "version-type.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/layout/header/header.component.spec.ts b/desktop/src/app/components/layout/header/header.component.spec.ts index 2f69b480de..c94c8a8c0d 100644 --- a/desktop/src/app/components/layout/header/header.component.spec.ts +++ b/desktop/src/app/components/layout/header/header.component.spec.ts @@ -8,6 +8,7 @@ import { BehaviorSubject } from "rxjs"; import { HeaderComponent } from "./header.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/layout/header/header.component.ts b/desktop/src/app/components/layout/header/header.component.ts index d1d2f4bd68..ce24dc0b7e 100644 --- a/desktop/src/app/components/layout/header/header.component.ts +++ b/desktop/src/app/components/layout/header/header.component.ts @@ -12,6 +12,7 @@ import { Subscription } from "rxjs"; import "./header.scss"; @Component({ + standalone: false, selector: "bl-header", templateUrl: "header.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/layout/main-navigation/main-navigation.component.ts b/desktop/src/app/components/layout/main-navigation/main-navigation.component.ts index 18cbe0be1c..a9f2f6cb40 100644 --- a/desktop/src/app/components/layout/main-navigation/main-navigation.component.ts +++ b/desktop/src/app/components/layout/main-navigation/main-navigation.component.ts @@ -6,6 +6,7 @@ import { Subscription } from "rxjs"; import "./main-navigation.scss"; @Component({ + standalone: false, selector: "bl-app-nav", templateUrl: "main-navigation.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/layout/main-navigation/profile-button/profile-button.component.spec.ts b/desktop/src/app/components/layout/main-navigation/profile-button/profile-button.component.spec.ts index 2538561c6d..88d1000fba 100644 --- a/desktop/src/app/components/layout/main-navigation/profile-button/profile-button.component.spec.ts +++ b/desktop/src/app/components/layout/main-navigation/profile-button/profile-button.component.spec.ts @@ -23,6 +23,7 @@ import { ContextMenuServiceMock, NotificationServiceMock } from "test/utils/mock import { ProfileButtonComponent } from "./profile-button.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/layout/main-navigation/profile-button/profile-button.component.ts b/desktop/src/app/components/layout/main-navigation/profile-button/profile-button.component.ts index b6e95daca6..7b7b780be4 100644 --- a/desktop/src/app/components/layout/main-navigation/profile-button/profile-button.component.ts +++ b/desktop/src/app/components/layout/main-navigation/profile-button/profile-button.component.ts @@ -24,6 +24,7 @@ import { takeUntil } from "rxjs/operators"; import "./profile-button.scss"; @Component({ + standalone: false, selector: "bl-profile-button", templateUrl: "profile-button.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/layout/online-status/online-status.component.spec.ts b/desktop/src/app/components/layout/online-status/online-status.component.spec.ts index 5009e5ada5..9af78fb5ee 100644 --- a/desktop/src/app/components/layout/online-status/online-status.component.spec.ts +++ b/desktop/src/app/components/layout/online-status/online-status.component.spec.ts @@ -6,6 +6,7 @@ import { NavigatorService } from "app/services"; import { OnlineStatusComponent } from "./online-status.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/layout/online-status/online-status.component.ts b/desktop/src/app/components/layout/online-status/online-status.component.ts index 79a7116697..7d6895e293 100644 --- a/desktop/src/app/components/layout/online-status/online-status.component.ts +++ b/desktop/src/app/components/layout/online-status/online-status.component.ts @@ -6,6 +6,7 @@ import { concatMap } from "rxjs/operators"; import "./online-status.scss"; @Component({ + standalone: false, selector: "bl-online-status", templateUrl: "online-status.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/layout/pinned-entity-dropdown/pinned-dropdown.component.spec.ts b/desktop/src/app/components/layout/pinned-entity-dropdown/pinned-dropdown.component.spec.ts index d383ba3acb..3621dfab7e 100644 --- a/desktop/src/app/components/layout/pinned-entity-dropdown/pinned-dropdown.component.spec.ts +++ b/desktop/src/app/components/layout/pinned-entity-dropdown/pinned-dropdown.component.spec.ts @@ -13,6 +13,7 @@ import * as Fixtures from "test/fixture"; import { PinnedDropDownComponent } from "./pinned-dropdown.component"; @Component({ + standalone: false, template: "", }) class TestComponent { diff --git a/desktop/src/app/components/layout/pinned-entity-dropdown/pinned-dropdown.component.ts b/desktop/src/app/components/layout/pinned-entity-dropdown/pinned-dropdown.component.ts index 7111c176da..5335622663 100644 --- a/desktop/src/app/components/layout/pinned-entity-dropdown/pinned-dropdown.component.ts +++ b/desktop/src/app/components/layout/pinned-entity-dropdown/pinned-dropdown.component.ts @@ -10,6 +10,7 @@ import { filter } from "rxjs/operators"; import "./pinned-dropdown.scss"; @Component({ + standalone: false, selector: "bl-pinned-dropdown", templateUrl: "pinned-dropdown.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/misc/misc.module.ts b/desktop/src/app/components/misc/misc.module.ts index 2d132184e6..cd30aa93aa 100644 --- a/desktop/src/app/components/misc/misc.module.ts +++ b/desktop/src/app/components/misc/misc.module.ts @@ -23,10 +23,6 @@ const modules = [ exports: [ ...publicComponents, ], - entryComponents: [ - ThemeColorsComponent, - PlaygroundRouteComponent - ], imports: modules, }) export class MiscModule { diff --git a/desktop/src/app/components/misc/playground-route/playground-route.component.ts b/desktop/src/app/components/misc/playground-route/playground-route.component.ts index 0e631ff8bb..4a4d6f0aa2 100644 --- a/desktop/src/app/components/misc/playground-route/playground-route.component.ts +++ b/desktop/src/app/components/misc/playground-route/playground-route.component.ts @@ -5,6 +5,7 @@ import "./playground-route.scss"; import { PlaygroundExample, PlaygroundExampleProps } from "@batch/ui-playground"; @Component({ + standalone: false, selector: "bl-theme-colors", templateUrl: "playground-route.html", }) diff --git a/desktop/src/app/components/misc/theme-colors/theme-colors.component.ts b/desktop/src/app/components/misc/theme-colors/theme-colors.component.ts index c9ec3ae3fe..89c95f07d8 100644 --- a/desktop/src/app/components/misc/theme-colors/theme-colors.component.ts +++ b/desktop/src/app/components/misc/theme-colors/theme-colors.component.ts @@ -7,6 +7,7 @@ import "./theme-colors.scss"; const varRegex = /var\((.*)\)/; @Component({ + standalone: false, selector: "bl-theme-colors", templateUrl: "theme-colors.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/node/action/node-action.module.ts b/desktop/src/app/components/node/action/node-action.module.ts index f8fa1aa5f0..3a26e1dd67 100644 --- a/desktop/src/app/components/node/action/node-action.module.ts +++ b/desktop/src/app/components/node/action/node-action.module.ts @@ -12,9 +12,6 @@ const publicComponents = [ imports: [...commonModules, BlobContainerPickerModule], declarations: [...privateComponents, publicComponents], exports: publicComponents, - entryComponents: [ - UploadNodeLogsDialogComponent, - ], }) export class NodeActionModule { diff --git a/desktop/src/app/components/node/action/upload-node-logs/upload-node-logs-dialog.component.ts b/desktop/src/app/components/node/action/upload-node-logs/upload-node-logs-dialog.component.ts index 6b8d5f9608..aaf03635c6 100644 --- a/desktop/src/app/components/node/action/upload-node-logs/upload-node-logs-dialog.component.ts +++ b/desktop/src/app/components/node/action/upload-node-logs/upload-node-logs-dialog.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from "@angular/core"; -import { FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms"; import { MatDialogRef } from "@angular/material/dialog"; import { Router } from "@angular/router"; import { autobind } from "@batch-flask/core"; @@ -23,6 +23,7 @@ enum TimeRangePreset { } @Component({ + standalone: false, selector: "bl-upload-node-logs-dialog", templateUrl: "upload-node-logs-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -42,7 +43,7 @@ export class UploadNodeLogsDialogComponent { } public get node() { return this._node; } - public form: FormGroup; + public form: UntypedFormGroup; public warningTimeRange = false; private _pool: Pool; private _node: Node; @@ -57,7 +58,7 @@ export class UploadNodeLogsDialogComponent { private storageBlobService: StorageBlobService, private notificationService: NotificationService, private router: Router, - formBuilder: FormBuilder, + formBuilder: UntypedFormBuilder, ) { this.form = formBuilder.group({ container: ["", Validators.required], diff --git a/desktop/src/app/components/node/browse/display/node-list-display.component.ts b/desktop/src/app/components/node/browse/display/node-list-display.component.ts index a77b64257d..984ca8b547 100644 --- a/desktop/src/app/components/node/browse/display/node-list-display.component.ts +++ b/desktop/src/app/components/node/browse/display/node-list-display.component.ts @@ -8,6 +8,7 @@ import { List } from "immutable"; import "./node-list-display.scss"; @Component({ + standalone: false, selector: "bl-node-list-display", templateUrl: "node-list-display.html", }) diff --git a/desktop/src/app/components/node/browse/filter/node-advanced-filter.component.ts b/desktop/src/app/components/node/browse/filter/node-advanced-filter.component.ts index bce8bf955d..8b11279c99 100644 --- a/desktop/src/app/components/node/browse/filter/node-advanced-filter.component.ts +++ b/desktop/src/app/components/node/browse/filter/node-advanced-filter.component.ts @@ -4,6 +4,7 @@ import { AdvancedFilter, StatePickerControl } from "@batch-flask/ui/advanced-fil import { NodeState } from "app/models"; @Component({ + standalone: false, selector: "bl-node-advanced-filter", templateUrl: "node-advanced-filter.html", }) diff --git a/desktop/src/app/components/node/browse/node-list.component.ts b/desktop/src/app/components/node/browse/node-list.component.ts index 13d58aa1cb..be0ab1deb6 100644 --- a/desktop/src/app/components/node/browse/node-list.component.ts +++ b/desktop/src/app/components/node/browse/node-list.component.ts @@ -12,6 +12,7 @@ import { map } from "rxjs/operators"; import { NodeCommands } from "../action"; @Component({ + standalone: false, selector: "bl-node-list", templateUrl: "node-list.html", providers: [NodeCommands, { diff --git a/desktop/src/app/components/node/connect/node-connect.component.spec.ts b/desktop/src/app/components/node/connect/node-connect.component.spec.ts index ab934946fa..d9849159cc 100644 --- a/desktop/src/app/components/node/connect/node-connect.component.spec.ts +++ b/desktop/src/app/components/node/connect/node-connect.component.spec.ts @@ -24,6 +24,7 @@ import * as Fixtures from "test/fixture"; import { delay } from "test/utils/helpers"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/node/connect/node-connect.component.ts b/desktop/src/app/components/node/connect/node-connect.component.ts index 6523dc1923..3f17253a23 100644 --- a/desktop/src/app/components/node/connect/node-connect.component.ts +++ b/desktop/src/app/components/node/connect/node-connect.component.ts @@ -22,6 +22,7 @@ import { UserConfiguration } from "./property-display"; import "./node-connect.scss"; @Component({ + standalone: false, selector: "bl-node-connect", templateUrl: "node-connect.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/node/connect/node-connect.module.ts b/desktop/src/app/components/node/connect/node-connect.module.ts index 00ff2eb2f5..20350838ea 100644 --- a/desktop/src/app/components/node/connect/node-connect.module.ts +++ b/desktop/src/app/components/node/connect/node-connect.module.ts @@ -16,10 +16,6 @@ const components = [ declarations: components, exports: components, imports: [...commonModules], - entryComponents: [ - NodeConnectComponent, - SSHKeyPickerDialogComponent, - ], }) export class NodeConnectModule { } diff --git a/desktop/src/app/components/node/connect/property-display/node-property-display.component.spec.ts b/desktop/src/app/components/node/connect/property-display/node-property-display.component.spec.ts index 02b2311eaa..caa135362b 100644 --- a/desktop/src/app/components/node/connect/property-display/node-property-display.component.spec.ts +++ b/desktop/src/app/components/node/connect/property-display/node-property-display.component.spec.ts @@ -1,6 +1,6 @@ import { ChangeDetectorRef, Component, DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { MatCheckboxModule } from "@angular/material/checkbox"; import { By } from "@angular/platform-browser"; import { UserConfigurationService } from "@batch-flask/core"; @@ -23,6 +23,7 @@ import { SSHKeyPickerDialogComponent } from "../ssh-key-picker-dialog"; import { NodePropertyDisplayComponent, UserConfiguration } from "./node-property-display.component"; @Component({ + standalone: false, template: ` { dialogServiceSpy = { open: jasmine.createSpy("openDialog").and.returnValue({ componentInstance: { - sshPublicKey: new FormControl(), + sshPublicKey: new UntypedFormControl(), }, afterClosed: () => of("rsa picked-key"), }), diff --git a/desktop/src/app/components/node/connect/property-display/node-property-display.component.ts b/desktop/src/app/components/node/connect/property-display/node-property-display.component.ts index c0f197cff6..59e5c05196 100644 --- a/desktop/src/app/components/node/connect/property-display/node-property-display.component.ts +++ b/desktop/src/app/components/node/connect/property-display/node-property-display.component.ts @@ -39,6 +39,7 @@ export interface UserConfiguration { } @Component({ + standalone: false, selector: "bl-node-property-display", templateUrl: "node-property-display.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/node/connect/ssh-key-picker-dialog/ssh-key-picker-dialog.component.ts b/desktop/src/app/components/node/connect/ssh-key-picker-dialog/ssh-key-picker-dialog.component.ts index f24a1f3887..c564bbefb9 100644 --- a/desktop/src/app/components/node/connect/ssh-key-picker-dialog/ssh-key-picker-dialog.component.ts +++ b/desktop/src/app/components/node/connect/ssh-key-picker-dialog/ssh-key-picker-dialog.component.ts @@ -1,17 +1,18 @@ import { ChangeDetectionStrategy, Component } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { MatDialogRef } from "@angular/material/dialog"; import { autobind } from "@batch-flask/core"; import "./ssh-key-picker-dialog.scss"; @Component({ + standalone: false, selector: "bl-ssh-key-picker-dialog", templateUrl: "ssh-key-picker-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, }) export class SSHKeyPickerDialogComponent { - public sshPublicKey = new FormControl(); + public sshPublicKey = new UntypedFormControl(); constructor(public dialogRef: MatDialogRef) { diff --git a/desktop/src/app/components/node/connect/ssh-key-picker/ssh-key-picker.component.spec.ts b/desktop/src/app/components/node/connect/ssh-key-picker/ssh-key-picker.component.spec.ts index 02e01fca55..3411c296e8 100644 --- a/desktop/src/app/components/node/connect/ssh-key-picker/ssh-key-picker.component.spec.ts +++ b/desktop/src/app/components/node/connect/ssh-key-picker/ssh-key-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { NoopAnimationsModule } from "@angular/platform-browser/animations"; import { ButtonComponent } from "@batch-flask/ui/buttons"; @@ -13,10 +13,11 @@ import { BehaviorSubject, of } from "rxjs"; import { click } from "test/utils/helpers"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public sshValue = new FormControl(""); + public sshValue = new UntypedFormControl(""); } describe("SSHKeyPickerComponent", () => { diff --git a/desktop/src/app/components/node/connect/ssh-key-picker/ssh-key-picker.component.ts b/desktop/src/app/components/node/connect/ssh-key-picker/ssh-key-picker.component.ts index 25e7517120..600b5ea296 100644 --- a/desktop/src/app/components/node/connect/ssh-key-picker/ssh-key-picker.component.ts +++ b/desktop/src/app/components/node/connect/ssh-key-picker/ssh-key-picker.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnDestroy, ViewChild, forwardRef, } from "@angular/core"; -import { ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms"; +import { ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { DialogService } from "@batch-flask/ui/dialogs"; import { SSHPublicKey } from "app/models"; @@ -13,6 +13,7 @@ import { takeUntil } from "rxjs/operators"; import "./ssh-key-picker.scss"; @Component({ + standalone: false, selector: "bl-ssh-key-picker", templateUrl: "ssh-key-picker.html", providers: [ @@ -23,7 +24,7 @@ import "./ssh-key-picker.scss"; }) export class SSHKeyPickerComponent implements OnDestroy, ControlValueAccessor { public savedSSHKeys: List = List([]); - public sshKeyValue = new FormControl(""); + public sshKeyValue = new UntypedFormControl(""); @ViewChild("nameInput", { static: false }) public nameInput: ElementRef; @@ -79,7 +80,7 @@ export class SSHKeyPickerComponent implements OnDestroy, ControlValueAccessor { // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { const valid = this.sshKeyValue.valid; if (!valid) { diff --git a/desktop/src/app/components/node/details/configuration/node-configuration.component.spec.ts b/desktop/src/app/components/node/details/configuration/node-configuration.component.spec.ts index 4ed29d1b95..c56ed3f831 100644 --- a/desktop/src/app/components/node/details/configuration/node-configuration.component.spec.ts +++ b/desktop/src/app/components/node/details/configuration/node-configuration.component.spec.ts @@ -28,6 +28,7 @@ const pool1 = new Pool({ const node1 = new Node({ id: "node-1", state: NodeState.idle }); @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/node/details/configuration/node-configuration.component.ts b/desktop/src/app/components/node/details/configuration/node-configuration.component.ts index 56c5802a04..21cc84d38b 100644 --- a/desktop/src/app/components/node/details/configuration/node-configuration.component.ts +++ b/desktop/src/app/components/node/details/configuration/node-configuration.component.ts @@ -7,6 +7,7 @@ import { NodeConnectService } from "app/services"; import { ComponentUtils, PoolUtils } from "app/utils"; @Component({ + standalone: false, selector: "bl-node-configuration", templateUrl: "node-configuration.html", providers: [ diff --git a/desktop/src/app/components/node/details/error/node-error-display.component.ts b/desktop/src/app/components/node/details/error/node-error-display.component.ts index c12d6207fc..4091039b94 100644 --- a/desktop/src/app/components/node/details/error/node-error-display.component.ts +++ b/desktop/src/app/components/node/details/error/node-error-display.component.ts @@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component, Input } from "@angular/core"; import { ComputeNodeError, NameValuePair, Node } from "app/models"; @Component({ + standalone: false, selector: "bl-node-error-display", templateUrl: "node-error-display.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/node/details/error/start-task-error-display.component.ts b/desktop/src/app/components/node/details/error/start-task-error-display.component.ts index c61429576b..37286f4497 100644 --- a/desktop/src/app/components/node/details/error/start-task-error-display.component.ts +++ b/desktop/src/app/components/node/details/error/start-task-error-display.component.ts @@ -8,6 +8,7 @@ import { FailureInfo, NameValuePair, Pool, StartTaskInfo } from "app/models"; import { NodeService } from "app/services"; @Component({ + standalone: false, selector: "bl-start-task-error-display", templateUrl: "start-task-error-display.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/node/details/node-default.component.ts b/desktop/src/app/components/node/details/node-default.component.ts index 7e987964a2..42174da1a0 100644 --- a/desktop/src/app/components/node/details/node-default.component.ts +++ b/desktop/src/app/components/node/details/node-default.component.ts @@ -1,6 +1,7 @@ import { Component } from "@angular/core"; @Component({ + standalone: false, selector: "bl-no-node-selected", template: `
diff --git a/desktop/src/app/components/node/details/node-details.component.ts b/desktop/src/app/components/node/details/node-details.component.ts index 7dd66a07b1..e90d11ceaf 100644 --- a/desktop/src/app/components/node/details/node-details.component.ts +++ b/desktop/src/app/components/node/details/node-details.component.ts @@ -10,6 +10,7 @@ import { NodeCommands, UploadNodeLogsDialogComponent } from "../action"; import "./node-details.scss"; @Component({ + standalone: false, selector: "bl-node-details", templateUrl: "node-details.html", providers: [NodeCommands], diff --git a/desktop/src/app/components/node/home/node-home.component.ts b/desktop/src/app/components/node/home/node-home.component.ts index 9797a5b3a9..5a56fb092e 100644 --- a/desktop/src/app/components/node/home/node-home.component.ts +++ b/desktop/src/app/components/node/home/node-home.component.ts @@ -3,6 +3,7 @@ import { ActivatedRoute } from "@angular/router"; import { Subscription } from "rxjs"; @Component({ + standalone: false, selector: "bl-node-home", templateUrl: "node-home.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/node/node.module.ts b/desktop/src/app/components/node/node.module.ts index a4cc4bd4d1..2de41b46ac 100644 --- a/desktop/src/app/components/node/node.module.ts +++ b/desktop/src/app/components/node/node.module.ts @@ -28,8 +28,6 @@ const modules = [ declarations: components, exports: [...modules, ...components], imports: [...modules, ...commonModules, PoolGraphsModule], - entryComponents: [ - ], }) export class NodeModule { } diff --git a/desktop/src/app/components/pool/action/add/container-configuration-picker/container-configuration-picker.component.spec.ts b/desktop/src/app/components/pool/action/add/container-configuration-picker/container-configuration-picker.component.spec.ts index e3eb2420b4..f3fe196b6a 100644 --- a/desktop/src/app/components/pool/action/add/container-configuration-picker/container-configuration-picker.component.spec.ts +++ b/desktop/src/app/components/pool/action/add/container-configuration-picker/container-configuration-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { I18nTestingModule } from "@batch-flask/core/testing"; import { SelectComponent, SelectModule } from "@batch-flask/ui"; @@ -12,10 +12,11 @@ import { ContainerImagesPickerComponent } from "./images-picker/container-images import { ContainerRegistryPickerComponent } from "./registry-picker/container-registry-picker.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public containerConfig = new FormControl(null); + public containerConfig = new UntypedFormControl(null); } describe("ContainerConfigurationPickerComponent", () => { diff --git a/desktop/src/app/components/pool/action/add/container-configuration-picker/container-configuration-picker.component.ts b/desktop/src/app/components/pool/action/add/container-configuration-picker/container-configuration-picker.component.ts index 1c5bfbd741..d0ef1b6c33 100644 --- a/desktop/src/app/components/pool/action/add/container-configuration-picker/container-configuration-picker.component.ts +++ b/desktop/src/app/components/pool/action/add/container-configuration-picker/container-configuration-picker.component.ts @@ -1,9 +1,9 @@ import { Component, forwardRef } from "@angular/core"; import { ControlValueAccessor, - FormBuilder, - FormControl, - FormGroup, + UntypedFormBuilder, + UntypedFormControl, + UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, @@ -14,6 +14,7 @@ import { ContainerConfigurationDto } from "app/models/dtos"; import "./container-configuration-picker.scss"; @Component({ + standalone: false, selector: "bl-container-configuration-picker", templateUrl: "container-configuration-picker.html", providers: [ @@ -27,9 +28,9 @@ import "./container-configuration-picker.scss"; }) export class ContainerConfigurationPickerComponent implements ControlValueAccessor { public ContainerType = ContainerType; - public form: FormGroup; + public form: UntypedFormGroup; private _propagateChange: (value: ContainerConfigurationAttributes) => void = null; - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ type: [ContainerType.DockerCompatible, Validators.required], containerImageNames: [[]], @@ -67,7 +68,7 @@ export class ContainerConfigurationPickerComponent implements ControlValueAccess public registerOnTouched() { // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { const valid = this.form.valid; if (!valid) { return { diff --git a/desktop/src/app/components/pool/action/add/container-configuration-picker/container-configuration-picker.module.ts b/desktop/src/app/components/pool/action/add/container-configuration-picker/container-configuration-picker.module.ts index 3fe739f7d1..68f2cea63c 100644 --- a/desktop/src/app/components/pool/action/add/container-configuration-picker/container-configuration-picker.module.ts +++ b/desktop/src/app/components/pool/action/add/container-configuration-picker/container-configuration-picker.module.ts @@ -18,7 +18,6 @@ const privateComponents = [ imports: [CommonModule, FormsModule, ReactiveFormsModule, FormModule, SelectModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class ContainerConfigurationPickerModule { } diff --git a/desktop/src/app/components/pool/action/add/container-configuration-picker/images-picker/container-images-picker.component.ts b/desktop/src/app/components/pool/action/add/container-configuration-picker/images-picker/container-images-picker.component.ts index b99ba931c4..c0f0f44b9b 100644 --- a/desktop/src/app/components/pool/action/add/container-configuration-picker/images-picker/container-images-picker.component.ts +++ b/desktop/src/app/components/pool/action/add/container-configuration-picker/images-picker/container-images-picker.component.ts @@ -1,11 +1,12 @@ import { Component, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { ContainerImage } from "app/models/dtos"; import { Subscription } from "rxjs"; @Component({ + standalone: false, selector: "bl-container-images-picker", templateUrl: "container-images-picker.html", providers: [ @@ -14,12 +15,12 @@ import { Subscription } from "rxjs"; ], }) export class ContainerImagesPickerComponent implements ControlValueAccessor, OnDestroy { - public images: FormControl; + public images: UntypedFormControl; private _propagateChange: (value: ContainerImage[]) => void = null; private _sub: Subscription; - constructor(private formBuilder: FormBuilder) { + constructor(private formBuilder: UntypedFormBuilder) { this.images = this.formBuilder.control([]); this._sub = this.images.valueChanges.subscribe((images) => { if (this._propagateChange) { @@ -46,7 +47,7 @@ export class ContainerImagesPickerComponent implements ControlValueAccessor, OnD // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } } diff --git a/desktop/src/app/components/pool/action/add/container-configuration-picker/registry-picker/container-registry-picker.component.ts b/desktop/src/app/components/pool/action/add/container-configuration-picker/registry-picker/container-registry-picker.component.ts index 06fff9d5f9..2df2c27735 100644 --- a/desktop/src/app/components/pool/action/add/container-configuration-picker/registry-picker/container-registry-picker.component.ts +++ b/desktop/src/app/components/pool/action/add/container-configuration-picker/registry-picker/container-registry-picker.component.ts @@ -1,11 +1,12 @@ import { Component, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { ContainerRegistryDto } from "app/models/dtos"; import { Subscription } from "rxjs"; @Component({ + standalone: false, selector: "bl-container-registry-picker", templateUrl: "container-registry-picker.html", providers: [ @@ -14,12 +15,12 @@ import { Subscription } from "rxjs"; ], }) export class ContainerRegistryPickerComponent implements ControlValueAccessor, OnDestroy { - public registries: FormControl; + public registries: UntypedFormControl; private _propagateChange: (value: ContainerRegistryDto[]) => void = null; private _sub: Subscription; - constructor(private formBuilder: FormBuilder) { + constructor(private formBuilder: UntypedFormBuilder) { this.registries = this.formBuilder.control([]); this._sub = this.registries.valueChanges.subscribe((registries) => { if (this._propagateChange) { @@ -46,7 +47,7 @@ export class ContainerRegistryPickerComponent implements ControlValueAccessor, O // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } } diff --git a/desktop/src/app/components/pool/action/add/os-picker/data-disk-picker/data-disk-picker.component.spec.ts b/desktop/src/app/components/pool/action/add/os-picker/data-disk-picker/data-disk-picker.component.spec.ts index b13a345e40..66e6a5ad19 100644 --- a/desktop/src/app/components/pool/action/add/os-picker/data-disk-picker/data-disk-picker.component.spec.ts +++ b/desktop/src/app/components/pool/action/add/os-picker/data-disk-picker/data-disk-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { I18nTestingModule } from "@batch-flask/core/testing"; import { ButtonsModule } from "@batch-flask/ui"; @@ -10,10 +10,11 @@ import { DataDiskDto } from "app/models/dtos/virtual-machine-configuration.dto"; import { DataDiskPickerComponent } from "./data-disk-picker.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public disks = new FormControl(); + public disks = new UntypedFormControl(); } describe("DataDiskPickerComponent", () => { diff --git a/desktop/src/app/components/pool/action/add/os-picker/data-disk-picker/data-disk-picker.component.ts b/desktop/src/app/components/pool/action/add/os-picker/data-disk-picker/data-disk-picker.component.ts index ed65f0e21a..11152c5d7b 100644 --- a/desktop/src/app/components/pool/action/add/os-picker/data-disk-picker/data-disk-picker.component.ts +++ b/desktop/src/app/components/pool/action/add/os-picker/data-disk-picker/data-disk-picker.component.ts @@ -1,11 +1,12 @@ import { ChangeDetectionStrategy, Component, forwardRef } from "@angular/core"; import { - AbstractControl, ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, + AbstractControl, ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, } from "@angular/forms"; import { CachingType, StorageAccountType } from "app/models"; import { DataDiskDto } from "app/models/dtos/virtual-machine-configuration.dto"; @Component({ + standalone: false, selector: "bl-data-disk-picker", templateUrl: "data-disk-picker.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -18,7 +19,7 @@ export class DataDiskPickerComponent implements ControlValueAccessor, Validator public storageAccountTypes = Object.values(StorageAccountType); public cachingOptions = Object.values(CachingType); - public disks = new FormControl>>>(); + public disks = new UntypedFormControl(); private _changeCallback: (disks: DataDiskDto[]) => void; private _touchedCallback: () => void; diff --git a/desktop/src/app/components/pool/action/add/os-picker/os-image-picker/os-image-picker.component.spec.ts b/desktop/src/app/components/pool/action/add/os-picker/os-image-picker/os-image-picker.component.spec.ts index 75c51d4540..622ec63e78 100644 --- a/desktop/src/app/components/pool/action/add/os-picker/os-image-picker/os-image-picker.component.spec.ts +++ b/desktop/src/app/components/pool/action/add/os-picker/os-image-picker/os-image-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, UntypedFormGroup, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { MatMenuModule } from "@angular/material/menu"; import { By } from "@angular/platform-browser"; import { NoopAnimationsModule } from "@angular/platform-browser/animations"; @@ -16,16 +16,18 @@ import { OsOfferTileComponent } from "../os-offer-tile"; import { OSImagePickerComponent, OSImageSelection } from "./os-image-picker.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public form = new FormGroup({ - cloudServiceConfiguration: new FormControl(), - virtualMachineConfiguration: new FormControl(), + public form = new UntypedFormGroup({ + cloudServiceConfiguration: new UntypedFormControl(), + virtualMachineConfiguration: new UntypedFormControl(), }); } @Component({ + standalone: false, selector: "bl-sig-image-picker", template: "", providers: [controlValueAccessorProvider(() => FakeCustomImagePickerComponent)], }) diff --git a/desktop/src/app/components/pool/action/add/os-picker/os-image-picker/os-image-picker.component.ts b/desktop/src/app/components/pool/action/add/os-picker/os-image-picker/os-image-picker.component.ts index 0621c58ad2..c415ce9b28 100644 --- a/desktop/src/app/components/pool/action/add/os-picker/os-image-picker/os-image-picker.component.ts +++ b/desktop/src/app/components/pool/action/add/os-picker/os-image-picker/os-image-picker.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy } from "@angular/core"; -import { FormGroup } from "@angular/forms"; +import { UntypedFormGroup } from "@angular/forms"; import { ImageInformation, Offer, PoolOsSkus, Resource, Sku } from "app/models"; import { PoolOsService } from "app/services"; import { Subject, Subscription } from "rxjs"; @@ -46,12 +46,13 @@ const cloudServiceOsFamilies = [{ * CloudService vs VirtualMachine */ @Component({ + standalone: false, selector: "bl-os-image-picker", templateUrl: "os-image-picker.html", changeDetection: ChangeDetectionStrategy.OnPush, }) export class OSImagePickerComponent implements OnChanges, OnDestroy { - @Input() public formGroup: FormGroup; + @Input() public formGroup: UntypedFormGroup; // Shared to the view public cloudServiceOsFamilies = cloudServiceOsFamilies; diff --git a/desktop/src/app/components/pool/action/add/os-picker/os-offer-tile/os-offer-tile.component.ts b/desktop/src/app/components/pool/action/add/os-picker/os-offer-tile/os-offer-tile.component.ts index 83249213e3..dbffe3d816 100644 --- a/desktop/src/app/components/pool/action/add/os-picker/os-offer-tile/os-offer-tile.component.ts +++ b/desktop/src/app/components/pool/action/add/os-picker/os-offer-tile/os-offer-tile.component.ts @@ -5,6 +5,7 @@ import { PoolUtils } from "app/utils"; import "./os-offer-tile.scss"; @Component({ + standalone: false, selector: "bl-os-offer-tile", templateUrl: "os-offer-tile.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/action/add/os-picker/pool-os-picker.component.ts b/desktop/src/app/components/pool/action/add/os-picker/pool-os-picker.component.ts index 68bdac1dbd..99c7a8e8f4 100644 --- a/desktop/src/app/components/pool/action/add/os-picker/pool-os-picker.component.ts +++ b/desktop/src/app/components/pool/action/add/os-picker/pool-os-picker.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { PoolOSPickerModel, PoolOsSources } from "app/models/forms"; import { Subject } from "rxjs"; @@ -9,6 +9,7 @@ import { takeUntil } from "rxjs/operators"; import "./pool-os-picker.scss"; @Component({ + standalone: false, selector: "bl-pool-os-picker", templateUrl: "pool-os-picker.html", providers: [ @@ -18,7 +19,7 @@ import "./pool-os-picker.scss"; changeDetection: ChangeDetectionStrategy.OnPush, }) export class PoolOsPickerComponent implements ControlValueAccessor, OnDestroy { - public form: FormGroup; + public form: UntypedFormGroup; // Container configuration public showDataDiskPicker: boolean = false; @@ -26,7 +27,7 @@ export class PoolOsPickerComponent implements ControlValueAccessor, OnDestroy { private _destroy = new Subject(); constructor( - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private changeDetector: ChangeDetectorRef) { this.form = this.formBuilder.group({ @@ -97,7 +98,7 @@ export class PoolOsPickerComponent implements ControlValueAccessor, OnDestroy { this._destroy.complete(); } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { const value = this.form.value; if (!value || (!value.virtualMachineConfiguration && !value.cloudServiceConfiguration)) { return { diff --git a/desktop/src/app/components/pool/action/add/os-picker/pool-os-picker.module.ts b/desktop/src/app/components/pool/action/add/os-picker/pool-os-picker.module.ts index 95e9566c77..d4f0737f11 100644 --- a/desktop/src/app/components/pool/action/add/os-picker/pool-os-picker.module.ts +++ b/desktop/src/app/components/pool/action/add/os-picker/pool-os-picker.module.ts @@ -35,7 +35,6 @@ const privateComponents = [ ], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class PoolOSPickerModule { } diff --git a/desktop/src/app/components/pool/action/add/os-picker/sig-image-picker/sig-image-picker.component.spec.ts b/desktop/src/app/components/pool/action/add/os-picker/sig-image-picker/sig-image-picker.component.spec.ts index 7925b2685a..7df9b83e1b 100644 --- a/desktop/src/app/components/pool/action/add/os-picker/sig-image-picker/sig-image-picker.component.spec.ts +++ b/desktop/src/app/components/pool/action/add/os-picker/sig-image-picker/sig-image-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { I18nTestingModule } from "@batch-flask/core/testing"; import { FormModule, SelectComponent, SelectModule } from "@batch-flask/ui"; @@ -11,10 +11,11 @@ import { of } from "rxjs"; import { SigImagePickerComponent } from "./sig-image-picker.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public control = new FormControl(); + public control = new UntypedFormControl(); } const sub1 = new ArmSubscription({ id: "/subs/sub-1", subscriptionId: "sub-1" }); diff --git a/desktop/src/app/components/pool/action/add/os-picker/sig-image-picker/sig-image-picker.component.ts b/desktop/src/app/components/pool/action/add/os-picker/sig-image-picker/sig-image-picker.component.ts index 57edead0d1..df2b07d4a2 100644 --- a/desktop/src/app/components/pool/action/add/os-picker/sig-image-picker/sig-image-picker.component.ts +++ b/desktop/src/app/components/pool/action/add/os-picker/sig-image-picker/sig-image-picker.component.ts @@ -3,7 +3,7 @@ import { Input, OnDestroy, OnInit, forwardRef, } from "@angular/core"; import { - AbstractControl, ControlValueAccessor, FormControl, FormGroup, + AbstractControl, ControlValueAccessor, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, } from "@angular/forms"; import { ServerError } from "@batch-flask/core"; @@ -23,6 +23,7 @@ export interface SigImageSelection { let idCounter = 0; @Component({ + standalone: false, selector: "bl-sig-image-picker", templateUrl: "sig-image-picker.html", providers: [ @@ -37,8 +38,8 @@ export class SigImagePickerComponent implements OnInit, OnDestroy, ControlValueA public sigImages: Resource[] = []; public supportedImages: ImageInformation[] = []; - public sigImage = new FormControl(); - public nodeAgentSku = new FormControl(); + public sigImage = new UntypedFormControl(); + public nodeAgentSku = new UntypedFormControl(); public LoadingStatus = LoadingStatus; public loadingStatus = LoadingStatus.Loading; @@ -46,7 +47,7 @@ export class SigImagePickerComponent implements OnInit, OnDestroy, ControlValueA public errorMessage: string; private _destroy = new Subject(); - private _form: FormGroup; + private _form: UntypedFormGroup; constructor( private accountService: BatchAccountService, @@ -54,7 +55,7 @@ export class SigImagePickerComponent implements OnInit, OnDestroy, ControlValueA private poolOsService: PoolOsService, private changeDetector: ChangeDetectorRef) { - this._form = new FormGroup({ + this._form = new UntypedFormGroup({ sigImage: this.sigImage, nodeAgentSku: this.nodeAgentSku, }); diff --git a/desktop/src/app/components/pool/action/add/pool-create-basic-dialog.component.ts b/desktop/src/app/components/pool/action/add/pool-create-basic-dialog.component.ts index e61837305e..5ab6cc15a8 100644 --- a/desktop/src/app/components/pool/action/add/pool-create-basic-dialog.component.ts +++ b/desktop/src/app/components/pool/action/add/pool-create-basic-dialog.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, OnDestroy } from "@angular/core"; -import { AbstractControl, AsyncValidatorFn, FormBuilder, FormControl, ValidationErrors, Validators } from "@angular/forms"; +import { AbstractControl, AsyncValidatorFn, UntypedFormBuilder, UntypedFormControl, ValidationErrors, Validators } from "@angular/forms"; import { DynamicForm, autobind } from "@batch-flask/core"; import { ElectronShell } from "@batch-flask/electron"; import { ComplexFormConfig } from "@batch-flask/ui/form"; @@ -25,6 +25,7 @@ export enum ImageEOLState { } @Component({ + standalone: false, selector: "bl-pool-create-basic-dialog", templateUrl: "pool-create-basic-dialog.html", }) @@ -79,13 +80,13 @@ export class PoolCreateBasicDialogComponent extends DynamicForm, private poolService: PoolService, private accountService: BatchAccountService, diff --git a/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker-filter.component.spec.ts b/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker-filter.component.spec.ts index 5db0b4eade..acb20e405c 100644 --- a/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker-filter.component.spec.ts +++ b/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker-filter.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormBuilder, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormBuilder, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { MaterialModule } from "@batch-flask/core"; import { SelectComponent, SelectModule } from "@batch-flask/ui"; @@ -8,6 +8,7 @@ import { VmSizePickerFilterComponent } from "app/components/pool/action/add"; import { updateInput } from "test/utils/helpers"; @Component({ + standalone: false, template: ``, }) @@ -31,7 +32,7 @@ describe("VmSizePickerFilterComponent", () => { imports: [MaterialModule, FormsModule, SelectModule, ReactiveFormsModule], declarations: [VmSizePickerFilterComponent, TestComponent], providers: [ - { provide: FormBuilder, useValue: new FormBuilder() }, + { provide: UntypedFormBuilder, useValue: new UntypedFormBuilder() }, ], schemas: [NO_ERRORS_SCHEMA], }); diff --git a/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker-filter.component.ts b/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker-filter.component.ts index 7045c65632..3945022ec7 100644 --- a/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker-filter.component.ts +++ b/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker-filter.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core"; -import { FormBuilder, FormGroup } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup } from "@angular/forms"; import { distinctUntilChanged } from "rxjs/operators"; export interface VmSizeFilterValue { @@ -8,6 +8,7 @@ export interface VmSizeFilterValue { } @Component({ + standalone: false, selector: "bl-vm-size-picker-filter", templateUrl: "vm-size-picker-filter.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -15,9 +16,9 @@ export interface VmSizeFilterValue { export class VmSizePickerFilterComponent { @Input() public categoriesDisplayName: {[key: string]: string }; @Output() public filterChange = new EventEmitter(); - public form: FormGroup; + public form: UntypedFormGroup; - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ category: ["all"], searchName: [], diff --git a/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker.component.spec.ts b/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker.component.spec.ts index 6b4dfd7478..e4fa7c0e89 100644 --- a/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker.component.spec.ts +++ b/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker.component.spec.ts @@ -17,6 +17,7 @@ import { BehaviorSubject, of } from "rxjs"; import { updateInput } from "test/utils/helpers"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker.component.ts b/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker.component.ts index 47da5419dd..e08a313fbb 100644 --- a/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker.component.ts +++ b/desktop/src/app/components/pool/action/add/vm-size-picker/vm-size-picker.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, OnInit, forwardRef, } from "@angular/core"; import { - ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { LoadingStatus } from "@batch-flask/ui"; import { TableConfig } from "@batch-flask/ui/table"; @@ -62,6 +62,7 @@ export class VmSizeDecorator { } @Component({ + standalone: false, selector: "bl-vm-size-picker", templateUrl: "vm-size-picker.html", providers: [ @@ -83,7 +84,7 @@ export class VmSizePickerComponent implements ControlValueAccessor, OnInit, OnCh public filteredCategories: VmSizeDecorator[]; public prices: OSPricing = null; public categoriesDisplayName = categoriesDisplayName; - public basicInput = new FormControl(); + public basicInput = new UntypedFormControl(); public isCloudService = false; public tableConfig: TableConfig = { @@ -171,7 +172,7 @@ export class VmSizePickerComponent implements ControlValueAccessor, OnInit, OnCh // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } diff --git a/desktop/src/app/components/pool/action/delete/delete-pool-dialog.component.ts b/desktop/src/app/components/pool/action/delete/delete-pool-dialog.component.ts index 90725e4d81..0267343b42 100644 --- a/desktop/src/app/components/pool/action/delete/delete-pool-dialog.component.ts +++ b/desktop/src/app/components/pool/action/delete/delete-pool-dialog.component.ts @@ -10,6 +10,7 @@ export interface DeletePoolOutput { } @Component({ + standalone: false, selector: "bl-delete-pool-dialog", templateUrl: "delete-pool-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/action/edit/edit-app-package/edit-app-package-form.component.spec.ts b/desktop/src/app/components/pool/action/edit/edit-app-package/edit-app-package-form.component.spec.ts index e2c98e100b..f000fc8447 100644 --- a/desktop/src/app/components/pool/action/edit/edit-app-package/edit-app-package-form.component.spec.ts +++ b/desktop/src/app/components/pool/action/edit/edit-app-package/edit-app-package-form.component.spec.ts @@ -14,6 +14,7 @@ import { NotificationServiceMock } from "test/utils/mocks"; import { EditAppPackageFormComponent } from "./edit-app-package-form.component"; @Component({ + standalone: false, selector: "bl-app-package-picker", template: "", providers: [controlValueAccessorProvider(() => FakeAppPackagePickerComponent)], }) diff --git a/desktop/src/app/components/pool/action/edit/edit-app-package/edit-app-package-form.component.ts b/desktop/src/app/components/pool/action/edit/edit-app-package/edit-app-package-form.component.ts index b33c45d59a..48befaa029 100644 --- a/desktop/src/app/components/pool/action/edit/edit-app-package/edit-app-package-form.component.ts +++ b/desktop/src/app/components/pool/action/edit/edit-app-package/edit-app-package-form.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { I18nService, autobind } from "@batch-flask/core"; import { NotificationService, SidebarRef } from "@batch-flask/ui"; import { Pool } from "app/models"; @@ -10,6 +10,7 @@ import { share, switchMap } from "rxjs/operators"; import "./edit-app-package-form.scss"; @Component({ + standalone: false, selector: "bl-edit-app-package-form", templateUrl: "edit-app-package-form.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -22,7 +23,7 @@ export class EditAppPackageFormComponent { } public get pool() { return this._pool; } - public appPackages = new FormControl([]); + public appPackages = new UntypedFormControl([]); private _pool: Pool; diff --git a/desktop/src/app/components/pool/action/edit/edit-certificate/edit-certificate-references-form.component.spec.ts b/desktop/src/app/components/pool/action/edit/edit-certificate/edit-certificate-references-form.component.spec.ts index 3dd8814d57..6b7fd0c08f 100644 --- a/desktop/src/app/components/pool/action/edit/edit-certificate/edit-certificate-references-form.component.spec.ts +++ b/desktop/src/app/components/pool/action/edit/edit-certificate/edit-certificate-references-form.component.spec.ts @@ -15,6 +15,7 @@ import { NotificationServiceMock } from "test/utils/mocks"; import { EditCertificateReferencesComponent } from "./edit-certificate-references-form.component"; @Component({ + standalone: false, selector: "bl-certificate-references-picker", template: "", providers: [controlValueAccessorProvider(() => FakeCertificateReferencesPickerComponent)], }) diff --git a/desktop/src/app/components/pool/action/edit/edit-certificate/edit-certificate-references-form.component.ts b/desktop/src/app/components/pool/action/edit/edit-certificate/edit-certificate-references-form.component.ts index 4f325a4e8a..20bcd3488a 100644 --- a/desktop/src/app/components/pool/action/edit/edit-certificate/edit-certificate-references-form.component.ts +++ b/desktop/src/app/components/pool/action/edit/edit-certificate/edit-certificate-references-form.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { I18nService, autobind } from "@batch-flask/core"; import { NotificationService, SidebarRef } from "@batch-flask/ui"; import { Pool } from "app/models"; @@ -10,6 +10,7 @@ import { share, switchMap } from "rxjs/operators"; import "./edit-certificate-references-form.scss"; @Component({ + standalone: false, selector: "bl-edit-certificate-references-form", templateUrl: "edit-certificate-references-form.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -22,7 +23,7 @@ export class EditCertificateReferencesComponent { } public get pool() { return this._pool; } - public references = new FormControl([]); + public references = new UntypedFormControl([]); private _pool: Pool; diff --git a/desktop/src/app/components/pool/action/edit/edit-node-comms/edit-node-comms-form.component.ts b/desktop/src/app/components/pool/action/edit/edit-node-comms/edit-node-comms-form.component.ts index 033f6c0d57..5f71f032f8 100644 --- a/desktop/src/app/components/pool/action/edit/edit-node-comms/edit-node-comms-form.component.ts +++ b/desktop/src/app/components/pool/action/edit/edit-node-comms/edit-node-comms-form.component.ts @@ -8,6 +8,7 @@ import { Subscription } from "rxjs"; import { of } from "rxjs"; @Component({ + standalone: false, selector: "bl-edit-node-comms-form", templateUrl: "edit-node-comms-form.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/action/edit/edit-pool.module.ts b/desktop/src/app/components/pool/action/edit/edit-pool.module.ts index 76c2bbdc17..c9dda85a46 100644 --- a/desktop/src/app/components/pool/action/edit/edit-pool.module.ts +++ b/desktop/src/app/components/pool/action/edit/edit-pool.module.ts @@ -15,7 +15,6 @@ const privateComponents = []; imports: [CommonModule, FormModule, PoolBaseModule, ReactiveFormsModule, FormsModule, I18nUIModule, ...commonModules], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [EditAppPackageFormComponent, EditCertificateReferencesComponent, EditNodeCommsFormComponent], }) export class EditPoolModule { } diff --git a/desktop/src/app/components/pool/action/resize/pool-resize-dialog.component.spec.ts b/desktop/src/app/components/pool/action/resize/pool-resize-dialog.component.spec.ts index d11124de99..2775e0fcef 100644 --- a/desktop/src/app/components/pool/action/resize/pool-resize-dialog.component.spec.ts +++ b/desktop/src/app/components/pool/action/resize/pool-resize-dialog.component.spec.ts @@ -16,6 +16,7 @@ import { PoolScaleSelection } from "../scale"; import { PoolResizeDialogComponent } from "./pool-resize-dialog.component"; @Component({ + standalone: false, selector: "bl-pool-scale-picker", template: "", providers: [controlValueAccessorProvider(() => FakeScalePickerComponent)], }) @@ -25,6 +26,7 @@ class FakeScalePickerComponent extends MockControlValueAccessorComponent FakeDealocationOptionPickerComponent)], }) diff --git a/desktop/src/app/components/pool/action/resize/pool-resize-dialog.component.ts b/desktop/src/app/components/pool/action/resize/pool-resize-dialog.component.ts index 700df7c4c7..fb528686fe 100644 --- a/desktop/src/app/components/pool/action/resize/pool-resize-dialog.component.ts +++ b/desktop/src/app/components/pool/action/resize/pool-resize-dialog.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, Input } from "@angular/core"; -import { FormBuilder, FormControl, FormGroup } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from "@angular/forms"; import { ServerError, autobind } from "@batch-flask/core"; import { NotificationService } from "@batch-flask/ui/notifications"; import { SidebarRef } from "@batch-flask/ui/sidebar"; @@ -11,6 +11,7 @@ import { filter, share, switchMap, take, timeoutWith } from "rxjs/operators"; import { PoolScaleSelection } from "../scale"; @Component({ + standalone: false, selector: "bl-pool-resize-dialog", templateUrl: "pool-resize-dialog.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -31,14 +32,14 @@ export class PoolResizeDialogComponent { } public get pool() { return this._pool; } - public form: FormGroup; - public scale: FormControl; - public taskAction: FormControl; + public form: UntypedFormGroup; + public scale: UntypedFormControl; + public taskAction: UntypedFormControl; private _pool: Pool; constructor( - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, public sidebarRef: SidebarRef, private notificationService: NotificationService, private poolService: PoolService) { diff --git a/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/autoscale-formula-picker.component.spec.ts b/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/autoscale-formula-picker.component.spec.ts index de32bc5693..981591d6e6 100644 --- a/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/autoscale-formula-picker.component.spec.ts +++ b/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/autoscale-formula-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { BrowserModule, By } from "@angular/platform-browser"; import { ClickableComponent, DialogService } from "@batch-flask/ui"; import { EditorMockComponent, EditorTestingModule } from "@batch-flask/ui/testing"; @@ -18,10 +18,11 @@ const predefinedFormulas = [ ]; @Component({ + standalone: false, template: ``, }) class TestComponent { - public formula = new FormControl(""); + public formula = new UntypedFormControl(""); } describe("AutoscaleFormulaPickerComponent", () => { diff --git a/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/autoscale-formula-picker.component.ts b/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/autoscale-formula-picker.component.ts index 34d2ad5209..7fdcc4c336 100644 --- a/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/autoscale-formula-picker.component.ts +++ b/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/autoscale-formula-picker.component.ts @@ -9,7 +9,7 @@ import { ViewChild, forwardRef, } from "@angular/core"; -import { ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms"; +import { ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms"; import { DialogService } from "@batch-flask/ui/dialogs"; import { EditorConfig } from "@batch-flask/ui/editor"; import { AutoscaleFormula, Pool } from "app/models"; @@ -21,6 +21,7 @@ import { Subscription } from "rxjs"; import "./autoscale-formula-picker.scss"; @Component({ + standalone: false, selector: "bl-autoscale-formula-picker", templateUrl: "autoscale-formula-picker.html", providers: [ @@ -100,7 +101,7 @@ export class AutoscaleFormulaPickerComponent implements OnInit, OnDestroy, Contr this._propagateTouch = fn; } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } diff --git a/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/autoscale-formula-picker.module.ts b/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/autoscale-formula-picker.module.ts index 7bb64993e3..801dfe2a3c 100644 --- a/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/autoscale-formula-picker.module.ts +++ b/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/autoscale-formula-picker.module.ts @@ -12,7 +12,6 @@ const privateComponents = [EvaluateAutoScaleForumlaComponent]; imports: [BaseModule, CommonModule, FormsModule], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class AutoScaleFormulaPickerModule { } diff --git a/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/evaluate-autoscale-formula/evaluate-autoscale-formula.component.spec.ts b/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/evaluate-autoscale-formula/evaluate-autoscale-formula.component.spec.ts index 046f896aed..fc1151c296 100644 --- a/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/evaluate-autoscale-formula/evaluate-autoscale-formula.component.spec.ts +++ b/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/evaluate-autoscale-formula/evaluate-autoscale-formula.component.spec.ts @@ -40,6 +40,7 @@ const resultWithErrors = new AutoScaleFormulaEvaluation({ }), }); @Component({ + standalone: false, template: ` diff --git a/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/evaluate-autoscale-formula/evaluate-autoscale-formula.component.ts b/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/evaluate-autoscale-formula/evaluate-autoscale-formula.component.ts index d070a4da56..c0d1ee8482 100644 --- a/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/evaluate-autoscale-formula/evaluate-autoscale-formula.component.ts +++ b/desktop/src/app/components/pool/action/scale/autoscale-formula-picker/evaluate-autoscale-formula/evaluate-autoscale-formula.component.ts @@ -8,6 +8,7 @@ import { List } from "immutable"; import "./evaluate-autoscale-formula.scss"; @Component({ + standalone: false, selector: "bl-evaluate-autoscale-formula", templateUrl: "evaluate-autoscale-formula.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/action/scale/deallocation-option-picker.component.spec.ts b/desktop/src/app/components/pool/action/scale/deallocation-option-picker.component.spec.ts index 7f9106d6ff..41871741a0 100644 --- a/desktop/src/app/components/pool/action/scale/deallocation-option-picker.component.spec.ts +++ b/desktop/src/app/components/pool/action/scale/deallocation-option-picker.component.spec.ts @@ -1,12 +1,13 @@ import { Component, DebugElement, NO_ERRORS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormBuilder, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormBuilder, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { MaterialModule } from "@batch-flask/core"; import { DeallocationOptionPickerComponent } from "app/components/pool/action/scale"; import { BannerMockComponent } from "test/utils/mocks/components"; @Component({ + standalone: false, template: ``, }) class TestComponent { @@ -26,7 +27,7 @@ describe("DeallocationOptionPickerComponent", () => { declarations: [BannerMockComponent, DeallocationOptionPickerComponent, TestComponent], schemas: [NO_ERRORS_SCHEMA], providers: [ - { provide: FormBuilder, useValue: new FormBuilder() }, + { provide: UntypedFormBuilder, useValue: new UntypedFormBuilder() }, ], }); fixture = TestBed.createComponent(TestComponent); diff --git a/desktop/src/app/components/pool/action/scale/deallocation-option-picker.component.ts b/desktop/src/app/components/pool/action/scale/deallocation-option-picker.component.ts index b701be8d3a..5bc436d14d 100644 --- a/desktop/src/app/components/pool/action/scale/deallocation-option-picker.component.ts +++ b/desktop/src/app/components/pool/action/scale/deallocation-option-picker.component.ts @@ -1,6 +1,6 @@ import { Component, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { NodeDeallocationOption } from "app/models/dtos"; import { Subscription } from "rxjs"; @@ -9,6 +9,7 @@ import { distinctUntilChanged } from "rxjs/operators"; import "./deallocation-option-picker.scss"; @Component({ + standalone: false, selector: "bl-deallocation-option-picker", templateUrl: "deallocation-option-picker.html", providers: [ @@ -18,14 +19,14 @@ import "./deallocation-option-picker.scss"; ], }) export class DeallocationOptionPickerComponent implements OnDestroy, ControlValueAccessor { - public form: FormGroup; + public form: UntypedFormGroup; public NodeDeallocationOption = NodeDeallocationOption; public nodeActionInfo: string; private _propagateChange: (value: any) => void; private _sub: Subscription; - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ nodeDeallocationOption: NodeDeallocationOption.requeue, }); @@ -58,7 +59,7 @@ export class DeallocationOptionPickerComponent implements OnDestroy, ControlValu // Nothing to do } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { const valid = this.form.valid; if (valid) { return null; diff --git a/desktop/src/app/components/pool/action/scale/pool-scale-picker/pool-scale-picker.component.spec.ts b/desktop/src/app/components/pool/action/scale/pool-scale-picker/pool-scale-picker.component.spec.ts index e95eb6081a..c049728d1e 100644 --- a/desktop/src/app/components/pool/action/scale/pool-scale-picker/pool-scale-picker.component.spec.ts +++ b/desktop/src/app/components/pool/action/scale/pool-scale-picker/pool-scale-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement, Input } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { MatRadioGroup, MatRadioModule } from "@angular/material/radio"; import { By } from "@angular/platform-browser"; import { @@ -13,10 +13,11 @@ import { click, updateInput } from "test/utils/helpers"; import { PoolScalePickerComponent } from "./pool-scale-picker.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public control = new FormControl(); + public control = new UntypedFormControl(); } export interface Inputs { @@ -28,6 +29,7 @@ export interface Inputs { } @Component({ + standalone: false, selector: "bl-autoscale-formula-picker", template: "", providers: [controlValueAccessorProvider(() => MockAutoscaleFormulaPickerComponent)], }) diff --git a/desktop/src/app/components/pool/action/scale/pool-scale-picker/pool-scale-picker.component.ts b/desktop/src/app/components/pool/action/scale/pool-scale-picker/pool-scale-picker.component.ts index 8df7723c8d..d5fe625adb 100644 --- a/desktop/src/app/components/pool/action/scale/pool-scale-picker/pool-scale-picker.component.ts +++ b/desktop/src/app/components/pool/action/scale/pool-scale-picker/pool-scale-picker.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, } from "@angular/forms"; import { Pool } from "app/models"; import { Duration } from "luxon"; @@ -36,6 +36,7 @@ function cleanSelection(value: PoolScaleSelection): PoolScaleSelection { } @Component({ + standalone: false, selector: "bl-pool-scale-picker", templateUrl: "pool-scale-picker.html", providers: [ @@ -47,17 +48,17 @@ function cleanSelection(value: PoolScaleSelection): PoolScaleSelection { export class PoolScalePickerComponent implements OnDestroy, ControlValueAccessor { @Input() public pool: Pool; - public form: FormGroup; + public form: UntypedFormGroup; private _propagateChange: (value: PoolScaleSelection) => void; private _subs: Subscription[] = []; - private _enableAutoScaleControl = new FormControl(false); - private _autoScaleFormulaControl = new FormControl(""); - private _targetDedicatedNodes = new FormControl(0); - private _targetLowPriorityNodes = new FormControl(0); + private _enableAutoScaleControl = new UntypedFormControl(false); + private _autoScaleFormulaControl = new UntypedFormControl(""); + private _targetDedicatedNodes = new UntypedFormControl(0); + private _targetLowPriorityNodes = new UntypedFormControl(0); - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ enableAutoScale: this._enableAutoScaleControl, autoScaleFormula: this._autoScaleFormulaControl, @@ -108,7 +109,7 @@ export class PoolScalePickerComponent implements OnDestroy, ControlValueAccessor // Nothing to do } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { const valid = this.form.valid; if (valid) { return null; diff --git a/desktop/src/app/components/pool/base/app-packages/app-package-picker.component.spec.ts b/desktop/src/app/components/pool/base/app-packages/app-package-picker.component.spec.ts index f215f072ef..0a5e59b363 100644 --- a/desktop/src/app/components/pool/base/app-packages/app-package-picker.component.spec.ts +++ b/desktop/src/app/components/pool/base/app-packages/app-package-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormBuilder, FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { NoopAnimationsModule } from "@angular/platform-browser/animations"; import { MaterialModule } from "@batch-flask/core"; @@ -18,13 +18,14 @@ import * as Fixtures from "test/fixture"; import { MockListView } from "test/utils/mocks"; @Component({ + standalone: false, template: ` `, }) class TestComponent { - public references = new FormControl([]); + public references = new UntypedFormControl([]); } const applications = { @@ -95,7 +96,7 @@ describe("AppPackagePickerComponent", () => { { provide: BatchApplicationService, useValue: applicationServiceSpy }, { provide: BatchApplicationPackageService, useValue: applicationPackageServiceSpy }, { provide: AutoStorageService, useValue: autoStorageServiceSpy }, - { provide: FormBuilder, useValue: new FormBuilder() }, + { provide: UntypedFormBuilder, useValue: new UntypedFormBuilder() }, { provide: PermissionService, useValue: {} }, ], }); diff --git a/desktop/src/app/components/pool/base/app-packages/app-package-picker.component.ts b/desktop/src/app/components/pool/base/app-packages/app-package-picker.component.ts index 23a755c73e..29fcec51f3 100644 --- a/desktop/src/app/components/pool/base/app-packages/app-package-picker.component.ts +++ b/desktop/src/app/components/pool/base/app-packages/app-package-picker.component.ts @@ -8,7 +8,7 @@ import { } from "@angular/core"; import { ControlValueAccessor, - FormControl, + UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, @@ -43,6 +43,7 @@ interface PackageReference { } @Component({ + standalone: false, selector: "bl-app-package-picker", templateUrl: "app-package-picker.html", providers: [ @@ -61,7 +62,7 @@ interface PackageReference { }) export class AppPackagePickerComponent implements ControlValueAccessor, Validator, OnInit, OnDestroy { - public references = new FormControl( + public references = new UntypedFormControl( [], this._duplicateValidator, ); @@ -124,7 +125,7 @@ export class AppPackagePickerComponent // Nothing to do } - public validate(c: FormControl): ValidationErrors | null { + public validate(c: UntypedFormControl): ValidationErrors | null { if (this.references.valid) { return null; } else { @@ -154,7 +155,7 @@ export class AppPackagePickerComponent @autobind() private _duplicateValidator( - control: FormControl, + control: UntypedFormControl, ): ValidationErrors | null { const references = control.value; if (references === null) { diff --git a/desktop/src/app/components/pool/base/certificate-references/certificate-picker/certificate-picker.component.ts b/desktop/src/app/components/pool/base/certificate-references/certificate-picker/certificate-picker.component.ts index 2de8ca5d43..9beb20ab40 100644 --- a/desktop/src/app/components/pool/base/certificate-references/certificate-picker/certificate-picker.component.ts +++ b/desktop/src/app/components/pool/base/certificate-references/certificate-picker/certificate-picker.component.ts @@ -3,7 +3,7 @@ import { Input, OnChanges, OnDestroy, forwardRef, } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, Validators, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, Validators, } from "@angular/forms"; import { Certificate, CertificateStoreLocation, CertificateVisibility, CommonStoreName, OSType } from "app/models"; import { defaultThumbprintAlgorithm } from "app/services"; @@ -26,6 +26,7 @@ const defaultVisibility = [ ]; @Component({ + standalone: false, selector: "bl-certificate-picker", templateUrl: "certificate-picker.html", providers: [ @@ -43,7 +44,7 @@ export class CertificatePickerComponent implements OnChanges, ControlValueAccess @Input() public certificates: Certificate[] = []; @Input() public currentCertificates: Certificate[] = []; - public form: FormGroup; + public form: UntypedFormGroup; public linuxStoreLocationMessage = `For Linux compute nodes, the certificates are stored in a ` + `directory inside the task working directory and an environment variable AZ_BATCH_CERTIFICATES_DIR ` + `is supplied to the task to query for this location. For certificates with visibility of "remoteUser", ` @@ -58,7 +59,7 @@ export class CertificatePickerComponent implements OnChanges, ControlValueAccess private _sub: Subscription; constructor( - formBuilder: FormBuilder, + formBuilder: UntypedFormBuilder, private changeDetector: ChangeDetectorRef) { this.form = formBuilder.group({ @@ -110,7 +111,7 @@ export class CertificatePickerComponent implements OnChanges, ControlValueAccess // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { const valid = this.form.valid; if (!valid) { return { diff --git a/desktop/src/app/components/pool/base/certificate-references/certificate-references-picker.component.spec.ts b/desktop/src/app/components/pool/base/certificate-references/certificate-references-picker.component.spec.ts index a59f039e7c..8f706d86f3 100644 --- a/desktop/src/app/components/pool/base/certificate-references/certificate-references-picker.component.spec.ts +++ b/desktop/src/app/components/pool/base/certificate-references/certificate-references-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { MatAutocompleteModule } from "@angular/material/autocomplete"; import { BrowserModule, By } from "@angular/platform-browser"; import { I18nTestingModule } from "@batch-flask/core/testing"; @@ -14,6 +14,7 @@ import { CertificatePickerComponent } from "./certificate-picker"; import { CertificateReferencesPickerComponent, TrimThumbprintPipe } from "./certificate-references-picker.component"; @Component({ + standalone: false, template: ` @@ -25,7 +26,7 @@ import { CertificateReferencesPickerComponent, TrimThumbprintPipe } from "./cert `, }) class TestComponent { - public references = new FormControl(); + public references = new UntypedFormControl(); } const certificates: Certificate[] = [ diff --git a/desktop/src/app/components/pool/base/certificate-references/certificate-references-picker.component.ts b/desktop/src/app/components/pool/base/certificate-references/certificate-references-picker.component.ts index 1b7ea35578..5d452fe821 100644 --- a/desktop/src/app/components/pool/base/certificate-references/certificate-references-picker.component.ts +++ b/desktop/src/app/components/pool/base/certificate-references/certificate-references-picker.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, Pipe, PipeTransform, forwardRef, } from "@angular/core"; import { - ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, + ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, } from "@angular/forms"; import { I18nService, autobind } from "@batch-flask/core"; import { Certificate, CertificateReferenceAttributes, OSType } from "app/models"; @@ -11,6 +11,7 @@ import { Subject } from "rxjs"; import { takeUntil } from "rxjs/operators"; @Pipe({ + standalone: false, name: "trimThumbprint", pure: true, }) @@ -25,6 +26,7 @@ export class TrimThumbprintPipe implements PipeTransform { } @Component({ + standalone: false, selector: "bl-certificate-references-picker", templateUrl: "certificate-references-picker.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -43,7 +45,7 @@ export class CertificateReferencesPickerComponent implements OnInit, OnDestroy, public certificates: Certificate[] = []; - public references = new FormControl([], this._duplicateValidator); + public references = new UntypedFormControl([], this._duplicateValidator); public _propagateChange: (value: CertificateReferenceAttributes[]) => void; private _destroy = new Subject(); @@ -72,7 +74,7 @@ export class CertificateReferencesPickerComponent implements OnInit, OnDestroy, this._destroy.complete(); } - public validate(c: FormControl): ValidationErrors | null { + public validate(c: UntypedFormControl): ValidationErrors | null { if (this.references.valid) { return null; } else { @@ -101,7 +103,7 @@ export class CertificateReferencesPickerComponent implements OnInit, OnDestroy, } @autobind() - private _duplicateValidator(control: FormControl): ValidationErrors | null { + private _duplicateValidator(control: UntypedFormControl): ValidationErrors | null { const certificates = control.value; if (certificates === null) { return null; diff --git a/desktop/src/app/components/pool/base/pool-nodes-preview.component.spec.ts b/desktop/src/app/components/pool/base/pool-nodes-preview.component.spec.ts index b4124199d0..610d47ada7 100644 --- a/desktop/src/app/components/pool/base/pool-nodes-preview.component.spec.ts +++ b/desktop/src/app/components/pool/base/pool-nodes-preview.component.spec.ts @@ -5,6 +5,7 @@ import { PoolNodesPreviewComponent } from "app/components/pool/base"; import { Pool } from "app/models"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/pool/base/pool-nodes-preview.component.ts b/desktop/src/app/components/pool/base/pool-nodes-preview.component.ts index cb1657f9d6..0a81f261bb 100644 --- a/desktop/src/app/components/pool/base/pool-nodes-preview.component.ts +++ b/desktop/src/app/components/pool/base/pool-nodes-preview.component.ts @@ -5,6 +5,7 @@ import { PoolUtils } from "app/utils"; import "./pool-nodes-preview.scss"; @Component({ + standalone: false, selector: "bl-pool-nodes-preview", templateUrl: "pool-nodes-preview.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/base/pool-os-icon/pool-os-icon.component.spec.ts b/desktop/src/app/components/pool/base/pool-os-icon/pool-os-icon.component.spec.ts index a444948c14..a4459762d5 100644 --- a/desktop/src/app/components/pool/base/pool-os-icon/pool-os-icon.component.spec.ts +++ b/desktop/src/app/components/pool/base/pool-os-icon/pool-os-icon.component.spec.ts @@ -52,6 +52,7 @@ const linuxCustomImage = new Pool({ }); @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/pool/base/pool-os-icon/pool-os-icon.component.ts b/desktop/src/app/components/pool/base/pool-os-icon/pool-os-icon.component.ts index 9c6a62886c..fa9249c521 100644 --- a/desktop/src/app/components/pool/base/pool-os-icon/pool-os-icon.component.ts +++ b/desktop/src/app/components/pool/base/pool-os-icon/pool-os-icon.component.ts @@ -4,6 +4,7 @@ import { OSType, Pool } from "app/models"; import "./pool-os-icon.scss"; @Component({ + standalone: false, selector: "bl-pool-os-icon", templateUrl: "pool-os-icon.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/browse/filter/pool-advanced-filter.component.ts b/desktop/src/app/components/pool/browse/filter/pool-advanced-filter.component.ts index 4221468f83..c649b5bb11 100644 --- a/desktop/src/app/components/pool/browse/filter/pool-advanced-filter.component.ts +++ b/desktop/src/app/components/pool/browse/filter/pool-advanced-filter.component.ts @@ -4,6 +4,7 @@ import { AdvancedFilter, StatePickerControl } from "@batch-flask/ui/advanced-fil import { PoolAllocationState, PoolState } from "app/models"; @Component({ + standalone: false, selector: "bl-pool-advanced-filter", templateUrl: "pool-advanced-filter.html", }) diff --git a/desktop/src/app/components/pool/browse/pool-list.component.ts b/desktop/src/app/components/pool/browse/pool-list.component.ts index 072ae2468f..b1bf6dc7d6 100644 --- a/desktop/src/app/components/pool/browse/pool-list.component.ts +++ b/desktop/src/app/components/pool/browse/pool-list.component.ts @@ -18,6 +18,7 @@ import { PoolCommands } from "../action"; import "./pool-list.scss"; @Component({ + standalone: false, selector: "bl-pool-list", templateUrl: "pool-list.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/details/configuration/pool-configuration.component.spec.ts b/desktop/src/app/components/pool/details/configuration/pool-configuration.component.spec.ts index 087a94921e..e2f04fa05e 100644 --- a/desktop/src/app/components/pool/details/configuration/pool-configuration.component.spec.ts +++ b/desktop/src/app/components/pool/details/configuration/pool-configuration.component.spec.ts @@ -11,6 +11,7 @@ import { PoolConfigurationComponent } from "./pool-configuration.component"; import { I18nTestingModule } from "@batch-flask/core/testing"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/pool/details/configuration/pool-configuration.component.ts b/desktop/src/app/components/pool/details/configuration/pool-configuration.component.ts index 5529fd0c8a..84197cfbb2 100644 --- a/desktop/src/app/components/pool/details/configuration/pool-configuration.component.ts +++ b/desktop/src/app/components/pool/details/configuration/pool-configuration.component.ts @@ -16,6 +16,7 @@ import "./pool-configuration.scss"; /* eslint-disable */ @Component({ + standalone: false, selector: "bl-pool-configuration", templateUrl: "pool-configuration.html", }) diff --git a/desktop/src/app/components/pool/details/error-display/pool-error-display.component.spec.ts b/desktop/src/app/components/pool/details/error-display/pool-error-display.component.spec.ts index c55cadbeac..a5d32091ce 100644 --- a/desktop/src/app/components/pool/details/error-display/pool-error-display.component.spec.ts +++ b/desktop/src/app/components/pool/details/error-display/pool-error-display.component.spec.ts @@ -13,6 +13,7 @@ import * as Fixtures from "test/fixture"; import { BannerMockComponent } from "test/utils/mocks/components"; @Component({ + standalone: false, template: ``, }) class TestPoolErrorDisplayComponent { @@ -44,7 +45,7 @@ describe("PoolErrorDisplayComponent", () => { fixture = TestBed.createComponent(TestPoolErrorDisplayComponent); testComponent = fixture.componentInstance; - shellSpy = TestBed.get(ElectronShell); + shellSpy = TestBed.inject(ElectronShell); fixture.detectChanges(); }); diff --git a/desktop/src/app/components/pool/details/error-display/pool-error-display.component.ts b/desktop/src/app/components/pool/details/error-display/pool-error-display.component.ts index 88a1e1745a..4bd67f9f5b 100644 --- a/desktop/src/app/components/pool/details/error-display/pool-error-display.component.ts +++ b/desktop/src/app/components/pool/details/error-display/pool-error-display.component.ts @@ -8,6 +8,7 @@ import { ExternalLinks } from "common/constants"; import { map } from "rxjs/operators"; @Component({ + standalone: false, selector: "bl-pool-error-display", templateUrl: "pool-error-display.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/details/pool-cost-card/pool-cost-card.component.spec.ts b/desktop/src/app/components/pool/details/pool-cost-card/pool-cost-card.component.spec.ts index c62184aeba..37089bd16d 100644 --- a/desktop/src/app/components/pool/details/pool-cost-card/pool-cost-card.component.spec.ts +++ b/desktop/src/app/components/pool/details/pool-cost-card/pool-cost-card.component.spec.ts @@ -48,6 +48,7 @@ const costs: BatchAccountCost = { }; @Component({ + standalone: false, selector: "bl-time-range-picker", template: "", providers: [controlValueAccessorProvider(() => FakeTimeRangePickerComponent)], }) @@ -57,6 +58,7 @@ class FakeTimeRangePickerComponent extends MockControlValueAccessorComponent`, }) class TestComponent { diff --git a/desktop/src/app/components/pool/details/pool-cost-card/pool-cost-card.component.ts b/desktop/src/app/components/pool/details/pool-cost-card/pool-cost-card.component.ts index df6b4ba94f..5ee0a3272f 100644 --- a/desktop/src/app/components/pool/details/pool-cost-card/pool-cost-card.component.ts +++ b/desktop/src/app/components/pool/details/pool-cost-card/pool-cost-card.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, OnInit, } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { QuickRange, QuickRanges, TimeRange } from "@batch-flask/ui"; import { log } from "@batch-flask/utils"; import { ArmBatchAccount } from "app/models"; @@ -19,6 +19,7 @@ import "./pool-cost-card.scss"; const partialDataDate = new Date(2019, 3, 1).getTime(); @Component({ + standalone: false, selector: "bl-pool-cost-card", templateUrl: "pool-cost-card.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -41,7 +42,7 @@ export class PoolCostCardComponent implements OnInit, OnChanges, OnDestroy { QuickRanges.thisYearRange, ]; - public timeRange = new FormControl(QuickRanges.thisMonthRange); + public timeRange = new UntypedFormControl(QuickRanges.thisMonthRange); public loading: boolean = false; // If the start time is less than april 1st 2019 billing was done per account not per pool public showPartialDataWarning: boolean = false; diff --git a/desktop/src/app/components/pool/details/pool-default.component.ts b/desktop/src/app/components/pool/details/pool-default.component.ts index 3945628a61..b582199174 100644 --- a/desktop/src/app/components/pool/details/pool-default.component.ts +++ b/desktop/src/app/components/pool/details/pool-default.component.ts @@ -1,6 +1,7 @@ import { Component } from "@angular/core"; @Component({ + standalone: false, selector: "bl-pool-details-home", template: `
diff --git a/desktop/src/app/components/pool/details/pool-details.component.ts b/desktop/src/app/components/pool/details/pool-details.component.ts index 745d53fcdb..2cb854cfd7 100644 --- a/desktop/src/app/components/pool/details/pool-details.component.ts +++ b/desktop/src/app/components/pool/details/pool-details.component.ts @@ -20,6 +20,7 @@ export enum ImageEOLState { } @Component({ + standalone: false, selector: "bl-pool-details", templateUrl: "pool-details.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/graphs/heatmap/legend/nodes-heatmap-legend.component.ts b/desktop/src/app/components/pool/graphs/heatmap/legend/nodes-heatmap-legend.component.ts index 071847ca02..9503f68eb9 100644 --- a/desktop/src/app/components/pool/graphs/heatmap/legend/nodes-heatmap-legend.component.ts +++ b/desktop/src/app/components/pool/graphs/heatmap/legend/nodes-heatmap-legend.component.ts @@ -9,6 +9,7 @@ import { CategoryNode, StateNode, StateTree } from "../state-tree"; import "./nodes-heatmap-legend.scss"; @Component({ + standalone: false, selector: "bl-nodes-heatmap-legend", templateUrl: "nodes-heatmap-legend.html", }) diff --git a/desktop/src/app/components/pool/graphs/heatmap/nodes-heatmap.component.spec.ts b/desktop/src/app/components/pool/graphs/heatmap/nodes-heatmap.component.spec.ts index d3359de5a6..ccc88c7b43 100644 --- a/desktop/src/app/components/pool/graphs/heatmap/nodes-heatmap.component.spec.ts +++ b/desktop/src/app/components/pool/graphs/heatmap/nodes-heatmap.component.spec.ts @@ -20,6 +20,7 @@ const defaultRunningTasksCount = 2; const defaultRunningTaskSlotsCount = 2; @Component({ + standalone: false, template: `
diff --git a/desktop/src/app/components/pool/graphs/heatmap/nodes-heatmap.component.ts b/desktop/src/app/components/pool/graphs/heatmap/nodes-heatmap.component.ts index 2339bfb210..8029be1317 100644 --- a/desktop/src/app/components/pool/graphs/heatmap/nodes-heatmap.component.ts +++ b/desktop/src/app/components/pool/graphs/heatmap/nodes-heatmap.component.ts @@ -10,7 +10,7 @@ import { Node, NodeState, Pool } from "app/models"; import { ComponentUtils, NodeUtils } from "app/utils"; import * as d3 from "d3"; import { BaseType, Selection } from "d3"; -import * as elementResizeDetectorMaker from "element-resize-detector"; +import elementResizeDetectorMaker from "element-resize-detector"; import { List } from "immutable"; import { BehaviorSubject } from "rxjs"; import { HeatmapColor } from "./heatmap-color"; @@ -77,6 +77,7 @@ const maxNodes = 2500; const maxTileSize = 100; @Component({ + standalone: false, selector: "bl-nodes-heatmap", templateUrl: "nodes-heatmap.html", viewProviders: [ diff --git a/desktop/src/app/components/pool/graphs/history-graph/history-graph.component.ts b/desktop/src/app/components/pool/graphs/history-graph/history-graph.component.ts index 820ece5b66..ea3aa21bf6 100644 --- a/desktop/src/app/components/pool/graphs/history-graph/history-graph.component.ts +++ b/desktop/src/app/components/pool/graphs/history-graph/history-graph.component.ts @@ -3,6 +3,7 @@ import { HistoryItem } from "app/components/pool/graphs/history-data/history-dat import { DateTime } from "luxon"; @Component({ + standalone: false, selector: "bl-history-graph", templateUrl: "history-graph.html", }) diff --git a/desktop/src/app/components/pool/graphs/performance-graph/cpu-usage/cpu-usage-graph.component.ts b/desktop/src/app/components/pool/graphs/performance-graph/cpu-usage/cpu-usage-graph.component.ts index 7fd6b618e2..50563dc83a 100644 --- a/desktop/src/app/components/pool/graphs/performance-graph/cpu-usage/cpu-usage-graph.component.ts +++ b/desktop/src/app/components/pool/graphs/performance-graph/cpu-usage/cpu-usage-graph.component.ts @@ -9,6 +9,7 @@ import { PerformanceGraphComponent } from "../performance-graph.component"; import "./cpu-usage-graph.scss"; @Component({ + standalone: false, selector: "bl-cpu-usage-graph", templateUrl: "cpu-usage-graph.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/graphs/performance-graph/disk-io/disk-io-graph.component.ts b/desktop/src/app/components/pool/graphs/performance-graph/disk-io/disk-io-graph.component.ts index 043afa82e0..a70cc9062b 100644 --- a/desktop/src/app/components/pool/graphs/performance-graph/disk-io/disk-io-graph.component.ts +++ b/desktop/src/app/components/pool/graphs/performance-graph/disk-io/disk-io-graph.component.ts @@ -5,6 +5,7 @@ import { NumberUtils } from "app/utils"; import { PerformanceGraphComponent } from "../performance-graph.component"; @Component({ + standalone: false, selector: "bl-disk-io-graph", templateUrl: "disk-io-graph.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/graphs/performance-graph/disk-usage/disk-usage-graph.component.ts b/desktop/src/app/components/pool/graphs/performance-graph/disk-usage/disk-usage-graph.component.ts index 8e67fa69d2..d64de2f973 100644 --- a/desktop/src/app/components/pool/graphs/performance-graph/disk-usage/disk-usage-graph.component.ts +++ b/desktop/src/app/components/pool/graphs/performance-graph/disk-usage/disk-usage-graph.component.ts @@ -12,6 +12,7 @@ interface Disk { } @Component({ + standalone: false, selector: "bl-disk-usage-graph", templateUrl: "disk-usage-graph.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/graphs/performance-graph/enable-app-insights-doc/enable-app-insights-doc.component.ts b/desktop/src/app/components/pool/graphs/performance-graph/enable-app-insights-doc/enable-app-insights-doc.component.ts index 7191853616..c8ecd3e551 100644 --- a/desktop/src/app/components/pool/graphs/performance-graph/enable-app-insights-doc/enable-app-insights-doc.component.ts +++ b/desktop/src/app/components/pool/graphs/performance-graph/enable-app-insights-doc/enable-app-insights-doc.component.ts @@ -4,6 +4,7 @@ import { ElectronShell } from "@batch-flask/electron"; import "./enable-app-insights-doc.scss"; @Component({ + standalone: false, selector: "bl-enable-app-insights-doc", templateUrl: "enable-app-insights-doc.html", }) diff --git a/desktop/src/app/components/pool/graphs/performance-graph/gpu-memory-usage/gpu-memory-usage-graph.component.ts b/desktop/src/app/components/pool/graphs/performance-graph/gpu-memory-usage/gpu-memory-usage-graph.component.ts index a1b9eb016e..2c57a9e3e8 100644 --- a/desktop/src/app/components/pool/graphs/performance-graph/gpu-memory-usage/gpu-memory-usage-graph.component.ts +++ b/desktop/src/app/components/pool/graphs/performance-graph/gpu-memory-usage/gpu-memory-usage-graph.component.ts @@ -9,6 +9,7 @@ import { PerformanceGraphComponent } from "../performance-graph.component"; import "./gpu-memory-usage-graph.scss"; @Component({ + standalone: false, selector: "bl-gpu-memory-usage-graph", templateUrl: "gpu-memory-usage-graph.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/graphs/performance-graph/gpu-usage/gpu-usage-graph.component.ts b/desktop/src/app/components/pool/graphs/performance-graph/gpu-usage/gpu-usage-graph.component.ts index 42f5ec2c61..990a94a2ba 100644 --- a/desktop/src/app/components/pool/graphs/performance-graph/gpu-usage/gpu-usage-graph.component.ts +++ b/desktop/src/app/components/pool/graphs/performance-graph/gpu-usage/gpu-usage-graph.component.ts @@ -9,6 +9,7 @@ import { PerformanceGraphComponent } from "../performance-graph.component"; import "./gpu-usage-graph.scss"; @Component({ + standalone: false, selector: "bl-gpu-usage-graph", templateUrl: "gpu-usage-graph.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/graphs/performance-graph/memory-usage/memory-usage-graph.component.ts b/desktop/src/app/components/pool/graphs/performance-graph/memory-usage/memory-usage-graph.component.ts index 1bad443084..f36b7da328 100644 --- a/desktop/src/app/components/pool/graphs/performance-graph/memory-usage/memory-usage-graph.component.ts +++ b/desktop/src/app/components/pool/graphs/performance-graph/memory-usage/memory-usage-graph.component.ts @@ -7,6 +7,7 @@ import { NumberUtils } from "app/utils"; import { Aggregation, PerformanceGraphComponent } from "../performance-graph.component"; @Component({ + standalone: false, selector: "bl-memory-usage-graph", templateUrl: "memory-usage-graph.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/graphs/performance-graph/network-usage/network-usage-graph.component.ts b/desktop/src/app/components/pool/graphs/performance-graph/network-usage/network-usage-graph.component.ts index 3d99b6fe52..3cd3e900f1 100644 --- a/desktop/src/app/components/pool/graphs/performance-graph/network-usage/network-usage-graph.component.ts +++ b/desktop/src/app/components/pool/graphs/performance-graph/network-usage/network-usage-graph.component.ts @@ -5,6 +5,7 @@ import { NumberUtils } from "app/utils"; import { PerformanceGraphComponent } from "../performance-graph.component"; @Component({ + standalone: false, selector: "bl-network-usage-graph", templateUrl: "network-usage-graph.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/graphs/performance-graph/performance-graph.component.ts b/desktop/src/app/components/pool/graphs/performance-graph/performance-graph.component.ts index 0a36f1da5c..f1fb042ed3 100644 --- a/desktop/src/app/components/pool/graphs/performance-graph/performance-graph.component.ts +++ b/desktop/src/app/components/pool/graphs/performance-graph/performance-graph.component.ts @@ -23,6 +23,7 @@ export enum Aggregation { } @Component({ + standalone: false, selector: "bl-performance-graph", templateUrl: "performance-graph.html", }) diff --git a/desktop/src/app/components/pool/graphs/pool-graphs.component.ts b/desktop/src/app/components/pool/graphs/pool-graphs.component.ts index cdcdbb767f..b777fd4f66 100644 --- a/desktop/src/app/components/pool/graphs/pool-graphs.component.ts +++ b/desktop/src/app/components/pool/graphs/pool-graphs.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, SimpleChanges, } from "@angular/core"; -import { FormControl } from "@angular/forms"; +import { UntypedFormControl } from "@angular/forms"; import { ListView, PollObservable, PollService, autobind } from "@batch-flask/core"; import { SidebarManager } from "@batch-flask/ui/sidebar"; import { PerformanceData } from "app/components/pool/graphs/performance-graph"; @@ -30,6 +30,7 @@ const refreshRate = 5000; const appInsightsRefreshRate = 60 * 1000; // Every minute(Aggregation is minimum 1 min) @Component({ + standalone: false, selector: "bl-pool-graphs", templateUrl: "pool-graphs.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -62,7 +63,7 @@ export class PoolGraphsComponent implements OnChanges, OnDestroy { public runningNodesHistory = new NodesStateHistoryData([NodeState.running, NodeState.idle]); public maxRunningTasks = 0; - public selectedHistoryLength = new FormControl(historyLength.TenMinute); + public selectedHistoryLength = new UntypedFormControl(historyLength.TenMinute); public performanceData: PerformanceData; public performanceMetrics: BatchPerformanceMetrics; diff --git a/desktop/src/app/components/pool/graphs/pool-state-graph/pool-state-graph.component.spec.ts b/desktop/src/app/components/pool/graphs/pool-state-graph/pool-state-graph.component.spec.ts index 433811c07d..259cc5da37 100644 --- a/desktop/src/app/components/pool/graphs/pool-state-graph/pool-state-graph.component.spec.ts +++ b/desktop/src/app/components/pool/graphs/pool-state-graph/pool-state-graph.component.spec.ts @@ -112,6 +112,7 @@ const nodeCounts = new Map() }, })); @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/pool/graphs/pool-state-graph/pool-state-graph.component.ts b/desktop/src/app/components/pool/graphs/pool-state-graph/pool-state-graph.component.ts index 94f684f011..97c34f8c35 100644 --- a/desktop/src/app/components/pool/graphs/pool-state-graph/pool-state-graph.component.ts +++ b/desktop/src/app/components/pool/graphs/pool-state-graph/pool-state-graph.component.ts @@ -38,6 +38,7 @@ const lowPriColor = colors.map(x => pattern.draw("diagonal", x)); const emptyNodeCount = new NodeCounts().toJS(); @Component({ + standalone: false, selector: "bl-pool-state-graph", templateUrl: "pool-state-graph.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/pool/graphs/standalone/pool-standalone-graphs.component.ts b/desktop/src/app/components/pool/graphs/standalone/pool-standalone-graphs.component.ts index 1e247d9d93..d86b23e813 100644 --- a/desktop/src/app/components/pool/graphs/standalone/pool-standalone-graphs.component.ts +++ b/desktop/src/app/components/pool/graphs/standalone/pool-standalone-graphs.component.ts @@ -7,6 +7,7 @@ import { PoolParams, PoolService } from "app/services"; import "./pool-standalone-graphs.scss"; @Component({ + standalone: false, selector: "bl-pool-standalone-graphs", templateUrl: "pool-standalone-graphs.html", }) diff --git a/desktop/src/app/components/pool/home/pool-home.component.ts b/desktop/src/app/components/pool/home/pool-home.component.ts index 38f2114b1e..2974e8a607 100644 --- a/desktop/src/app/components/pool/home/pool-home.component.ts +++ b/desktop/src/app/components/pool/home/pool-home.component.ts @@ -4,6 +4,7 @@ import { SidebarManager } from "@batch-flask/ui/sidebar"; import { PoolCreateBasicDialogComponent } from "../action"; @Component({ + standalone: false, selector: "bl-pool-home", templateUrl: "pool-home.html", }) diff --git a/desktop/src/app/components/pool/network-configuration/inbound-nat-pool-picker.component.ts b/desktop/src/app/components/pool/network-configuration/inbound-nat-pool-picker.component.ts index b6b7e9793d..0af6944c78 100644 --- a/desktop/src/app/components/pool/network-configuration/inbound-nat-pool-picker.component.ts +++ b/desktop/src/app/components/pool/network-configuration/inbound-nat-pool-picker.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, Validators, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, Validators, } from "@angular/forms"; import { InboundEndpointProtocol, InboundNATPoolAttributes } from "app/models"; import { Subscription } from "rxjs"; @@ -9,6 +9,7 @@ import * as EndpointHelper from "./pool-endpoint-helper"; import "./inbound-nat-pool-picker.scss"; @Component({ + standalone: false, selector: "bl-inbound-nat-pool-picker", templateUrl: "inbound-nat-pool-picker.html", providers: [ @@ -22,12 +23,12 @@ export class InboundNATPoolPickerComponent implements ControlValueAccessor, Vali public InboundEndpointProtocol = InboundEndpointProtocol; public EndpointHelper = EndpointHelper; - public form: FormGroup; + public form: UntypedFormGroup; private _propagateChange: (value: InboundNATPoolAttributes) => void = null; private _sub: Subscription; - constructor(public formBuilder: FormBuilder) { + constructor(public formBuilder: UntypedFormBuilder) { this.form = this.formBuilder.group({ backendPort: [""], frontendPortRangeEnd: ["", [ @@ -71,7 +72,7 @@ export class InboundNATPoolPickerComponent implements ControlValueAccessor, Vali // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { const valid = this.form.valid; if (valid) { return null; diff --git a/desktop/src/app/components/pool/network-configuration/network-configuration.module.ts b/desktop/src/app/components/pool/network-configuration/network-configuration.module.ts index 47cd39fe6f..51feb6eb71 100644 --- a/desktop/src/app/components/pool/network-configuration/network-configuration.module.ts +++ b/desktop/src/app/components/pool/network-configuration/network-configuration.module.ts @@ -16,7 +16,6 @@ const components = [InboundNATPoolPickerComponent, NetworkSecurityGroupRulesComp exports: components, imports: [CommonModule, MaterialModule, RouterModule, FormsModule, ReactiveFormsModule, BaseModule, TaskBaseModule], - entryComponents: [InboundNATPoolPickerComponent], }) export class NetworkConfigurationModule { diff --git a/desktop/src/app/components/pool/network-configuration/network-security-group-rules.component.ts b/desktop/src/app/components/pool/network-configuration/network-security-group-rules.component.ts index 15b0d1c049..a9bb21701d 100644 --- a/desktop/src/app/components/pool/network-configuration/network-security-group-rules.component.ts +++ b/desktop/src/app/components/pool/network-configuration/network-security-group-rules.component.ts @@ -1,6 +1,6 @@ import { Component, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { EditableTableColumnType } from "@batch-flask/ui/form/editable-table"; import { NetworkSecurityGroupRule, NetworkSecurityGroupRuleAccess } from "app/models"; @@ -8,6 +8,7 @@ import { Subscription } from "rxjs"; import * as EndpointHelper from "./pool-endpoint-helper"; @Component({ + standalone: false, selector: "bl-network-security-group-rules", templateUrl: "network-security-group-rules.html", providers: [ @@ -17,7 +18,7 @@ import * as EndpointHelper from "./pool-endpoint-helper"; }) export class NetworkSecurityGroupRulesComponent implements ControlValueAccessor, OnDestroy { public EditableTableColumnType = EditableTableColumnType; - public rules: FormControl; + public rules: UntypedFormControl; public allowSelections: string[] = [ NetworkSecurityGroupRuleAccess.Allow, NetworkSecurityGroupRuleAccess.Deny, @@ -26,7 +27,7 @@ export class NetworkSecurityGroupRulesComponent implements ControlValueAccessor, private _propagateChange: (value: NetworkSecurityGroupRule[]) => void = null; private _sub: Subscription; - constructor(private formBuilder: FormBuilder) { + constructor(private formBuilder: UntypedFormBuilder) { this.rules = this.formBuilder.control([]); this._sub = this.rules.valueChanges.subscribe((rules) => { const decoratedRules = rules ? rules.map(rule => { @@ -62,7 +63,7 @@ export class NetworkSecurityGroupRulesComponent implements ControlValueAccessor, // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { if (Array.isArray(c.value)) { if (c.value.length > EndpointHelper.MAXIMUM_SECURITY_GROUP_RULES) { return { diff --git a/desktop/src/app/components/pool/network-configuration/pool-endpoint-helper.ts b/desktop/src/app/components/pool/network-configuration/pool-endpoint-helper.ts index 543cae2137..70488d532c 100644 --- a/desktop/src/app/components/pool/network-configuration/pool-endpoint-helper.ts +++ b/desktop/src/app/components/pool/network-configuration/pool-endpoint-helper.ts @@ -1,4 +1,4 @@ -import { FormControl, FormGroup } from "@angular/forms"; +import { UntypedFormControl, UntypedFormGroup } from "@angular/forms"; import { InboundNATPoolAttributes } from "app/models"; export const MININUM_PORT = 1; @@ -22,7 +22,7 @@ export const ENDPOINTNAME_LENGTH = 77; * 3, Backend port must be unique within Batch pool */ export function backendPortValidator(inboundNATPools: InboundNATPoolAttributes[]) { - return (control: FormControl): {[key: string]: any} => { + return (control: UntypedFormControl): {[key: string]: any} => { if (control.value === null) { return null; } @@ -69,7 +69,7 @@ export function backendPortValidator(inboundNATPools: InboundNATPoolAttributes[] * 2, Frontend port must not be between 50000 and 55000 which are reserved ports */ export function frontendPortValidator() { - return (control: FormControl): {[key: string]: any} => { + return (control: UntypedFormControl): {[key: string]: any} => { if (control.value === null) { return null; } @@ -101,7 +101,7 @@ export function frontendPortValidator() { export function frontendPortRangeValidator(frontendPortRangeStart: string, frontendPortRangeEnd: string, inboundNATPools: InboundNATPoolAttributes[]) { - return (group: FormGroup): {[key: string]: any} => { + return (group: UntypedFormGroup): {[key: string]: any} => { const start = group.controls[frontendPortRangeStart]; const end = group.controls[frontendPortRangeEnd]; if (start.value === null || end.value === null) { @@ -157,7 +157,7 @@ export function frontendPortRangeValidator(frontendPortRangeStart: string, * 2, Endponit name must be unique within a Batch pool */ export function nameValidator(inboundNATPools: InboundNATPoolAttributes[]) { - return (control: FormControl): {[key: string]: any} => { + return (control: UntypedFormControl): {[key: string]: any} => { if (control.value === null) { return null; } @@ -195,7 +195,7 @@ export function nameValidator(inboundNATPools: InboundNATPoolAttributes[]) { */ export function networkSecurityGroupRuleValidator(networkSecurityGroupRules: string, inboundNATPools: InboundNATPoolAttributes[]) { - return (group: FormGroup): {[key: string]: any} => { + return (group: UntypedFormGroup): {[key: string]: any} => { const control = group.controls[networkSecurityGroupRules]; if (control.value === null) { return null; diff --git a/desktop/src/app/components/pool/network-configuration/virtual-network-picker/virtual-network-picker.component.spec.ts b/desktop/src/app/components/pool/network-configuration/virtual-network-picker/virtual-network-picker.component.spec.ts index 1c5cd8973f..f4dad7cb87 100644 --- a/desktop/src/app/components/pool/network-configuration/virtual-network-picker/virtual-network-picker.component.spec.ts +++ b/desktop/src/app/components/pool/network-configuration/virtual-network-picker/virtual-network-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { I18nTestingModule } from "@batch-flask/core/testing"; import { SelectComponent, SelectModule } from "@batch-flask/ui"; @@ -10,6 +10,7 @@ import { BehaviorSubject, of } from "rxjs"; import { VirtualNetworkPickerComponent } from "./virtual-network-picker.component"; @Component({ + standalone: false, template: ` @@ -17,7 +18,7 @@ import { VirtualNetworkPickerComponent } from "./virtual-network-picker.componen }) class TestComponent { public armNetworkOnly = false; - public control = new FormControl(null); + public control = new UntypedFormControl(null); } const sub1 = new ArmSubscription({ diff --git a/desktop/src/app/components/pool/network-configuration/virtual-network-picker/virtual-network-picker.component.ts b/desktop/src/app/components/pool/network-configuration/virtual-network-picker/virtual-network-picker.component.ts index 72659fe638..2457df118e 100644 --- a/desktop/src/app/components/pool/network-configuration/virtual-network-picker/virtual-network-picker.component.ts +++ b/desktop/src/app/components/pool/network-configuration/virtual-network-picker/virtual-network-picker.component.ts @@ -3,7 +3,7 @@ import { Input, OnChanges, OnDestroy, SimpleChanges, forwardRef, } from "@angular/core"; import { - ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, + ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { ArmBatchAccount } from "app/models"; @@ -15,6 +15,7 @@ import { filter, switchMap, takeUntil, tap } from "rxjs/operators"; import "./virtual-network-picker.scss"; @Component({ + standalone: false, selector: "bl-virtual-network-picker", templateUrl: "virtual-network-picker.html", providers: [ @@ -27,8 +28,8 @@ export class VirtualNetworkPickerComponent implements ControlValueAccessor, Vali @Input() public armNetworkOnly: boolean = true; - public virtualNetworkControl = new FormControl(null); - public subnetControl = new FormControl(null); + public virtualNetworkControl = new UntypedFormControl(null); + public subnetControl = new UntypedFormControl(null); public subnets: Subnet[] = []; public subscriptionId: string; public location: string; diff --git a/desktop/src/app/components/pool/pool.module.ts b/desktop/src/app/components/pool/pool.module.ts index b3f1205178..018e92c576 100644 --- a/desktop/src/app/components/pool/pool.module.ts +++ b/desktop/src/app/components/pool/pool.module.ts @@ -59,11 +59,6 @@ const publicModules = [ declarations: components, exports: [...modules, ...publicModules, ...components], imports: [...modules, ...publicModules], - entryComponents: [ - DeletePoolDialogComponent, - PoolCreateBasicDialogComponent, - PoolResizeDialogComponent, - ], }) export class PoolModule { } diff --git a/desktop/src/app/components/pool/start-task/start-task-edit-form.component.ts b/desktop/src/app/components/pool/start-task/start-task-edit-form.component.ts index 29b7edc718..e125310ccf 100644 --- a/desktop/src/app/components/pool/start-task/start-task-edit-form.component.ts +++ b/desktop/src/app/components/pool/start-task/start-task-edit-form.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Output } from "@angular/core"; -import { FormBuilder, FormGroup } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup } from "@angular/forms"; import { autobind } from "@batch-flask/core"; import { NotificationService } from "@batch-flask/ui/notifications"; import { SidebarRef } from "@batch-flask/ui/sidebar"; @@ -9,6 +9,7 @@ import { NodeService, PoolService } from "app/services"; import { flatMap, share } from "rxjs/operators"; @Component({ + standalone: false, selector: "bl-start-task-edit-form", templateUrl: "start-task-edit-form.html", }) @@ -33,12 +34,12 @@ export class StartTaskEditFormComponent { public get pool() { return this._pool; } - public form: FormGroup; + public form: UntypedFormGroup; private _pool: Pool; constructor( - formBuilder: FormBuilder, + formBuilder: UntypedFormBuilder, private poolService: PoolService, private nodeService: NodeService, public sidebarRef: SidebarRef, diff --git a/desktop/src/app/components/pool/start-task/start-task-picker.component.spec.ts b/desktop/src/app/components/pool/start-task/start-task-picker.component.spec.ts index e1404828d0..b16e5d72e2 100644 --- a/desktop/src/app/components/pool/start-task/start-task-picker.component.spec.ts +++ b/desktop/src/app/components/pool/start-task/start-task-picker.component.spec.ts @@ -1,7 +1,7 @@ import { CommonModule } from "@angular/common"; import { Component, DebugElement, Input } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { MatCheckboxModule } from "@angular/material/checkbox"; import { By } from "@angular/platform-browser"; import { TranslationsLoaderService } from "@batch-flask/core"; @@ -13,16 +13,18 @@ import { List } from "immutable"; import { StartTaskPickerComponent } from "./start-task-picker.component"; @Component({ + standalone: false, template: ` `, }) class TestComponent { - public form = FormGroup; + public form = UntypedFormGroup; } @Component({ + standalone: false, selector: "bl-user-identity-picker", template: "", providers: [controlValueAccessorProvider(() => MockUserIdentityPickerComponent)], }) @@ -31,6 +33,7 @@ class MockUserIdentityPickerComponent extends MockControlValueAccessorComponent< } @Component({ + standalone: false, selector: "bl-container-settings-picker", template: "", providers: [controlValueAccessorProvider(() => MockContainerSettingsPickerComponent)], }) @@ -39,6 +42,7 @@ class MockContainerSettingsPickerComponent extends MockControlValueAccessorCompo } @Component({ + standalone: false, selector: "bl-resourcefile-picker", template: "", providers: [controlValueAccessorProvider(() => MockResourceFilePickerComponent)], }) @@ -69,7 +73,7 @@ describe("StartTaskPickerComponent", () => { MockResourceFilePickerComponent, ], providers: [ - FormBuilder, + UntypedFormBuilder, TranslationsLoaderService, ], }); diff --git a/desktop/src/app/components/pool/start-task/start-task-picker.component.ts b/desktop/src/app/components/pool/start-task/start-task-picker.component.ts index cfdb90562e..3e772e1d43 100644 --- a/desktop/src/app/components/pool/start-task/start-task-picker.component.ts +++ b/desktop/src/app/components/pool/start-task/start-task-picker.component.ts @@ -1,11 +1,12 @@ import { Component, Input, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, } from "@angular/forms"; import { UserAccount, VirtualMachineConfiguration } from "app/models"; import { List } from "immutable"; @Component({ + standalone: false, selector: "bl-start-task-picker", templateUrl: "start-task-picker.html", providers: [ @@ -18,11 +19,11 @@ export class StartTaskPickerComponent implements ControlValueAccessor { @Input() public userAccounts: List | UserAccount[]; @Input() public virtualMachineConfiguration: VirtualMachineConfiguration = null; - public form: FormGroup; + public form: UntypedFormGroup; private _propagateChange: (value: any) => void = null; - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ commandLine: ["", Validators.required], maxTaskRetryCount: [0], @@ -63,7 +64,7 @@ export class StartTaskPickerComponent implements ControlValueAccessor { // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { const valid = this.form.valid; if (!valid) { diff --git a/desktop/src/app/components/pool/start-task/start-task.module.ts b/desktop/src/app/components/pool/start-task/start-task.module.ts index ab790488e6..59a67e6071 100644 --- a/desktop/src/app/components/pool/start-task/start-task.module.ts +++ b/desktop/src/app/components/pool/start-task/start-task.module.ts @@ -24,7 +24,6 @@ const components = [StartTaskEditFormComponent, StartTaskPickerComponent]; TaskBaseModule, ResourceFilePickerModule, ], - entryComponents: [StartTaskEditFormComponent], }) export class StartTaskModule { diff --git a/desktop/src/app/components/pool/user-accounts-picker/user-account-picker/user-account-picker.component.ts b/desktop/src/app/components/pool/user-accounts-picker/user-account-picker/user-account-picker.component.ts index 7868f63073..ce73b9bef1 100644 --- a/desktop/src/app/components/pool/user-accounts-picker/user-account-picker/user-account-picker.component.ts +++ b/desktop/src/app/components/pool/user-accounts-picker/user-account-picker/user-account-picker.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, Validators, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator, Validators, } from "@angular/forms"; import { LoginMode, OSType, UserAccountElevationLevel } from "app/models"; import { UserAccountDto } from "app/models/dtos"; @@ -58,6 +58,7 @@ function userAccountToDto(value: UserAccountFormModel, osType: OSType): UserAcco } @Component({ + standalone: false, selector: "bl-user-account-picker", templateUrl: "user-account-picker.html", providers: [ @@ -72,12 +73,12 @@ export class UserAccountPickerComponent implements ControlValueAccessor, Validat @Input() public osType: OSType; - public form: FormGroup; + public form: UntypedFormGroup; private _propagateChange: (value: UserAccountDto) => void = null; private _destroy = new Subject(); - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ name: ["", Validators.required], password: ["", Validators.required], @@ -137,7 +138,7 @@ export class UserAccountPickerComponent implements ControlValueAccessor, Validat // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { const valid = this.form.valid; if (!valid) { return { diff --git a/desktop/src/app/components/pool/user-accounts-picker/user-accounts-picker.component.spec.ts b/desktop/src/app/components/pool/user-accounts-picker/user-accounts-picker.component.spec.ts index 1d7070f69d..be73885483 100644 --- a/desktop/src/app/components/pool/user-accounts-picker/user-accounts-picker.component.spec.ts +++ b/desktop/src/app/components/pool/user-accounts-picker/user-accounts-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { MatButtonToggleModule } from "@angular/material/button-toggle"; import { MatCheckboxModule } from "@angular/material/checkbox"; import { BrowserModule, By } from "@angular/platform-browser"; @@ -13,6 +13,7 @@ import { UserAccountPickerComponent } from "./user-account-picker/user-account-p import { UserAccountsPickerComponent } from "./user-accounts-picker.component"; @Component({ + standalone: false, template: ` @@ -24,7 +25,7 @@ import { UserAccountsPickerComponent } from "./user-accounts-picker.component"; `, }) class TestComponent { - public userAccounts = new FormControl(); + public userAccounts = new UntypedFormControl(); } describe("UserAccountsPickerComponent", () => { diff --git a/desktop/src/app/components/pool/user-accounts-picker/user-accounts-picker.component.ts b/desktop/src/app/components/pool/user-accounts-picker/user-accounts-picker.component.ts index 71ca6ca95a..f18d907524 100644 --- a/desktop/src/app/components/pool/user-accounts-picker/user-accounts-picker.component.ts +++ b/desktop/src/app/components/pool/user-accounts-picker/user-accounts-picker.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, + ControlValueAccessor, UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, } from "@angular/forms"; import { I18nService, autobind } from "@batch-flask/core"; import { CertificateReferenceAttributes, OSType, UserAccountElevationLevel } from "app/models"; @@ -9,6 +9,7 @@ import { Subject } from "rxjs"; import { takeUntil } from "rxjs/operators"; @Component({ + standalone: false, selector: "bl-user-accounts-picker", templateUrl: "user-accounts-picker.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -25,7 +26,7 @@ export class UserAccountsPickerComponent implements ControlValueAccessor, Valida public UserAccountElevationLevel = UserAccountElevationLevel; @Input() public osType: OSType; - public userAccounts = new FormControl([], this._duplicateValidator); + public userAccounts = new UntypedFormControl([], this._duplicateValidator); private _propagateChange?: (value: UserAccountDto[]) => void; private _destroy = new Subject(); @@ -42,7 +43,7 @@ export class UserAccountsPickerComponent implements ControlValueAccessor, Valida this._destroy.next(); this._destroy.complete(); } - public validate(c: FormControl): ValidationErrors | null { + public validate(c: UntypedFormControl): ValidationErrors | null { if (this.userAccounts.valid) { return null; } else { @@ -71,7 +72,7 @@ export class UserAccountsPickerComponent implements ControlValueAccessor, Valida } @autobind() - private _duplicateValidator(control: FormControl): ValidationErrors | null { + private _duplicateValidator(control: UntypedFormControl): ValidationErrors | null { const users = control.value; if (users === null) { return null; diff --git a/desktop/src/app/components/pool/user-accounts-picker/user-accounts-picker.module.ts b/desktop/src/app/components/pool/user-accounts-picker/user-accounts-picker.module.ts index a7faa06f25..c3d9fd73ed 100644 --- a/desktop/src/app/components/pool/user-accounts-picker/user-accounts-picker.module.ts +++ b/desktop/src/app/components/pool/user-accounts-picker/user-accounts-picker.module.ts @@ -22,7 +22,6 @@ const privateComponents = []; ], declarations: [...publicComponents, ...privateComponents], exports: publicComponents, - entryComponents: [], }) export class UserAccountsPickerModule { } diff --git a/desktop/src/app/components/settings/auth-settings/auth-settings.component.ts b/desktop/src/app/components/settings/auth-settings/auth-settings.component.ts index 3f965e14c5..4beaa480f1 100644 --- a/desktop/src/app/components/settings/auth-settings/auth-settings.component.ts +++ b/desktop/src/app/components/settings/auth-settings/auth-settings.component.ts @@ -4,6 +4,7 @@ import { Subject } from "rxjs"; import "./auth-settings.scss"; @Component({ + standalone: false, selector: "be-auth-settings", templateUrl: "auth-settings.html", changeDetection: ChangeDetectionStrategy.OnPush diff --git a/desktop/src/app/components/settings/settings.component.spec.ts b/desktop/src/app/components/settings/settings.component.spec.ts index bcb595b497..ad65708090 100644 --- a/desktop/src/app/components/settings/settings.component.spec.ts +++ b/desktop/src/app/components/settings/settings.component.spec.ts @@ -13,6 +13,7 @@ import { BEUserConfiguration, DEFAULT_BE_USER_CONFIGURATION } from "common"; import { updateInput } from "test/utils/helpers"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/settings/settings.component.ts b/desktop/src/app/components/settings/settings.component.ts index b843bec1e5..718965aa59 100644 --- a/desktop/src/app/components/settings/settings.component.ts +++ b/desktop/src/app/components/settings/settings.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy } from "@angular/core"; -import { FormBuilder, FormGroup } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormGroup } from "@angular/forms"; import { EntityConfigurationView, UserConfigurationService, autobind } from "@batch-flask/core"; import { BEUserConfiguration, DEFAULT_BE_USER_CONFIGURATION } from "common"; import { Subject } from "rxjs"; @@ -22,6 +22,7 @@ export interface SettingsSelection { } @Component({ + standalone: false, selector: "bl-settings", templateUrl: "settings.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -31,7 +32,7 @@ export class SettingsComponent implements OnDestroy { return { name: "Settings" }; } - public form: FormGroup; + public form: UntypedFormGroup; public viewerOptions = ["log", "code", "image"]; public saved = false; public modified = false; @@ -41,7 +42,7 @@ export class SettingsComponent implements OnDestroy { constructor( private userConfigurationService: UserConfigurationService, private changeDetector: ChangeDetectorRef, - formBuilder: FormBuilder) { + formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ theme: [null], externalBrowserAuth: [true], diff --git a/desktop/src/app/components/task/action/add/add-task-form.component.ts b/desktop/src/app/components/task/action/add/add-task-form.component.ts index 4fd7c09d7b..e2fbc87604 100644 --- a/desktop/src/app/components/task/action/add/add-task-form.component.ts +++ b/desktop/src/app/components/task/action/add/add-task-form.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from "@angular/core"; -import { FormArray, FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { UntypedFormArray, UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms"; import { DynamicForm, I18nService, autobind } from "@batch-flask/core"; import { ComplexFormConfig } from "@batch-flask/ui/form"; import { NotificationService } from "@batch-flask/ui/notifications"; @@ -14,6 +14,7 @@ import { Constants } from "common"; import { Observable } from "rxjs"; @Component({ + standalone: false, selector: "bl-add-task-form", templateUrl: "add-task-form.html", }) @@ -24,8 +25,8 @@ export class AddTaskFormComponent extends DynamicForm imple public jobId: string; public complexFormConfig: ComplexFormConfig; - public constraintsGroup: FormGroup; - public resourceFiles: FormArray; + public constraintsGroup: UntypedFormGroup; + public resourceFiles: UntypedFormArray; public multiUse = true; public fileUri = "create.task.batch.json"; public virtualMachineConfiguration: VirtualMachineConfiguration = null; @@ -34,7 +35,7 @@ export class AddTaskFormComponent extends DynamicForm imple constructor( i18n: I18nService, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, public sidebarRef: SidebarRef, protected taskService: TaskService, private notificationService: NotificationService, diff --git a/desktop/src/app/components/task/action/add/multi-instance-settings-picker/multi-instance-settings-picker.component.ts b/desktop/src/app/components/task/action/add/multi-instance-settings-picker/multi-instance-settings-picker.component.ts index d8be51c70d..f47bec2dd9 100644 --- a/desktop/src/app/components/task/action/add/multi-instance-settings-picker/multi-instance-settings-picker.component.ts +++ b/desktop/src/app/components/task/action/add/multi-instance-settings-picker/multi-instance-settings-picker.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, forwardRef } from "@angular/core"; import { - AbstractControl, ControlValueAccessor, FormBuilder, FormGroup, + AbstractControl, ControlValueAccessor, UntypedFormBuilder, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, Validators, } from "@angular/forms"; import { MultiInstanceSettingsAttributes } from "app/models"; @@ -8,6 +8,7 @@ import { MultiInstanceSettingsAttributes } from "app/models"; import "./multi-instance-settings-picker.scss"; @Component({ + standalone: false, selector: "bl-multi-instance-settings-picker", templateUrl: "multi-instance-settings-picker.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -18,11 +19,11 @@ import "./multi-instance-settings-picker.scss"; ], }) export class MultiInstanceSettingsPickerComponent implements ControlValueAccessor, Validator { - public form: FormGroup; + public form: UntypedFormGroup; private _propagateChangeFn: (value: MultiInstanceSettingsAttributes) => void; - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.form = formBuilder.group({ numberOfInstances: [1, [Validators.min(0), Validators.required]], coordinationCommandLine: ["", Validators.required], diff --git a/desktop/src/app/components/task/action/add/multi-instance-settings-picker/multi-instance-settings-picker.spec.ts b/desktop/src/app/components/task/action/add/multi-instance-settings-picker/multi-instance-settings-picker.spec.ts index e0fec2be01..2b55aab19e 100644 --- a/desktop/src/app/components/task/action/add/multi-instance-settings-picker/multi-instance-settings-picker.spec.ts +++ b/desktop/src/app/components/task/action/add/multi-instance-settings-picker/multi-instance-settings-picker.spec.ts @@ -1,19 +1,21 @@ import { Component, DebugElement, forwardRef } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { ControlValueAccessor, FormControl, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from "@angular/forms"; +import { ControlValueAccessor, UntypedFormControl, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { FormModule } from "@batch-flask/ui/form"; import { updateInput } from "test/utils/helpers"; import { MultiInstanceSettingsPickerComponent } from "./multi-instance-settings-picker.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public control = new FormControl(); + public control = new UntypedFormControl(); } @Component({ + standalone: false, selector: "bl-resourcefile-picker", template: "", providers: [ diff --git a/desktop/src/app/components/task/action/add/rerun-task-form.component.ts b/desktop/src/app/components/task/action/add/rerun-task-form.component.ts index 639d339a56..4f90a38ed0 100644 --- a/desktop/src/app/components/task/action/add/rerun-task-form.component.ts +++ b/desktop/src/app/components/task/action/add/rerun-task-form.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { FormBuilder } from "@angular/forms"; +import { UntypedFormBuilder } from "@angular/forms"; import { I18nService, autobind } from "@batch-flask/core"; import { NotificationService } from "@batch-flask/ui/notifications"; import { SidebarRef } from "@batch-flask/ui/sidebar"; @@ -11,13 +11,14 @@ import { catchError } from "rxjs/operators"; import { AddTaskFormComponent } from "./add-task-form.component"; @Component({ + standalone: false, selector: "bl-rerun-task-form", templateUrl: "add-task-form.html", }) export class RerunTaskFormComponent extends AddTaskFormComponent { constructor( i18n: I18nService, - formBuilder: FormBuilder, + formBuilder: UntypedFormBuilder, sidebarRef: SidebarRef, taskService: TaskService, jobService: JobService, diff --git a/desktop/src/app/components/task/base/container-settings/container-settings-picker.component.spec.ts b/desktop/src/app/components/task/base/container-settings/container-settings-picker.component.spec.ts index 922288ce0c..39b7f3db13 100644 --- a/desktop/src/app/components/task/base/container-settings/container-settings-picker.component.spec.ts +++ b/desktop/src/app/components/task/base/container-settings/container-settings-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { MatAutocompleteModule } from "@angular/material/autocomplete"; import { MatCheckboxModule } from "@angular/material/checkbox"; import { By } from "@angular/platform-browser"; @@ -10,10 +10,11 @@ import { ContainerSettingsPickerComponent } from "./container-settings-picker.co import { RegistryPickerComponent } from "./registry-picker.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { - public containerSettings = new FormControl(null); + public containerSettings = new UntypedFormControl(null); } describe("ContainerSettingsPickerComponent", () => { diff --git a/desktop/src/app/components/task/base/container-settings/container-settings-picker.component.ts b/desktop/src/app/components/task/base/container-settings/container-settings-picker.component.ts index f8385dcbcc..449750b815 100644 --- a/desktop/src/app/components/task/base/container-settings/container-settings-picker.component.ts +++ b/desktop/src/app/components/task/base/container-settings/container-settings-picker.component.ts @@ -1,11 +1,12 @@ import { ChangeDetectionStrategy, Component, Input, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { ContainerConfigurationDto, TaskContainerSettingsDto } from "app/models/dtos"; import { Subscription } from "rxjs"; @Component({ + standalone: false, selector: "bl-container-settings-picker", templateUrl: "container-settings-picker.html", providers: [ @@ -16,12 +17,12 @@ import { Subscription } from "rxjs"; }) export class ContainerSettingsPickerComponent implements ControlValueAccessor, OnDestroy { @Input() public containerConfiguration: ContainerConfigurationDto = null; - public containerSettings: FormGroup; + public containerSettings: UntypedFormGroup; private _propagateChange: (value: TaskContainerSettingsDto) => void = null; private _sub: Subscription; - constructor(private formBuilder: FormBuilder) { + constructor(private formBuilder: UntypedFormBuilder) { this.containerSettings = this.formBuilder.group({ imageName: [""], containerRunOptions: [null], @@ -61,7 +62,7 @@ export class ContainerSettingsPickerComponent implements ControlValueAccessor, O // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { const valid = this.containerSettings.valid; if (!valid) { return { diff --git a/desktop/src/app/components/task/base/container-settings/registry-picker.component.ts b/desktop/src/app/components/task/base/container-settings/registry-picker.component.ts index 3c9d84f1fb..62a3567683 100644 --- a/desktop/src/app/components/task/base/container-settings/registry-picker.component.ts +++ b/desktop/src/app/components/task/base/container-settings/registry-picker.component.ts @@ -1,11 +1,12 @@ import { Component, OnDestroy, forwardRef } from "@angular/core"; import { - ControlValueAccessor, FormBuilder, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, + ControlValueAccessor, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import { ContainerRegistryDto } from "app/models/dtos"; import { Subscription } from "rxjs"; @Component({ + standalone: false, selector: "bl-registry-picker", templateUrl: "registry-picker.html", providers: [ @@ -15,7 +16,7 @@ import { Subscription } from "rxjs"; ], }) export class RegistryPickerComponent implements ControlValueAccessor, OnDestroy { - public form: FormGroup; + public form: UntypedFormGroup; public customValue: boolean; public registry: ContainerRegistryDto; @@ -23,7 +24,7 @@ export class RegistryPickerComponent implements ControlValueAccessor, OnDestroy private _sub: Subscription; - constructor(formBuilder: FormBuilder) { + constructor(formBuilder: UntypedFormBuilder) { this.form = formBuilder.group( { username: [null], password: [null], @@ -64,7 +65,7 @@ export class RegistryPickerComponent implements ControlValueAccessor, OnDestroy // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } } diff --git a/desktop/src/app/components/task/base/task-state/task-state.component.spec.ts b/desktop/src/app/components/task/base/task-state/task-state.component.spec.ts index 801a0d240d..f4ac8c0ce8 100644 --- a/desktop/src/app/components/task/base/task-state/task-state.component.spec.ts +++ b/desktop/src/app/components/task/base/task-state/task-state.component.spec.ts @@ -6,6 +6,7 @@ import { FailureInfo, Task, TaskState } from "app/models"; import { TaskStateComponent } from "./task-state.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/task/base/task-state/task-state.component.ts b/desktop/src/app/components/task/base/task-state/task-state.component.ts index c5c910c185..e95bb8b60c 100644 --- a/desktop/src/app/components/task/base/task-state/task-state.component.ts +++ b/desktop/src/app/components/task/base/task-state/task-state.component.ts @@ -7,6 +7,7 @@ import { Task, TaskState } from "app/models"; import "./task-state.scss"; @Component({ + standalone: false, selector: "bl-task-state", templateUrl: "task-state.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/task/base/user-identity/user-identity-picker.component.spec.ts b/desktop/src/app/components/task/base/user-identity/user-identity-picker.component.spec.ts index 73c666b6a4..66ba37c39e 100644 --- a/desktop/src/app/components/task/base/user-identity/user-identity-picker.component.spec.ts +++ b/desktop/src/app/components/task/base/user-identity/user-identity-picker.component.spec.ts @@ -1,6 +1,6 @@ import { Component, DebugElement } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { FormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { UntypedFormControl, FormsModule, ReactiveFormsModule } from "@angular/forms"; import { By } from "@angular/platform-browser"; import { FormModule, SelectComponent, SelectModule } from "@batch-flask/ui"; import { AutoUserScope, UserAccount, UserAccountElevationLevel, UserIdentityAttributes } from "app/models"; @@ -17,12 +17,13 @@ const user2 = new UserAccount({ }); @Component({ + standalone: false, template: ` `, }) class TestComponent { - public control = new FormControl(null); + public control = new UntypedFormControl(null); public userAccounts: UserAccount[] = [user1, user2]; } diff --git a/desktop/src/app/components/task/base/user-identity/user-identity-picker.component.ts b/desktop/src/app/components/task/base/user-identity/user-identity-picker.component.ts index ef0a9bbe92..34e81c261c 100644 --- a/desktop/src/app/components/task/base/user-identity/user-identity-picker.component.ts +++ b/desktop/src/app/components/task/base/user-identity/user-identity-picker.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, forwardRef, } from "@angular/core"; -import { FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms"; +import { UntypedFormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms"; import { AutoUserScope, UserAccount, UserAccountElevationLevel, UserIdentityAttributes } from "app/models"; import { UserIdentityDto } from "app/models/dtos"; import { List } from "immutable"; @@ -48,6 +48,7 @@ const defaultUsers = [ const defaultSelectedUser = defaultUsers[0]; @Component({ + standalone: false, selector: "bl-user-identity-picker", templateUrl: "user-identity-picker.html", providers: [ @@ -60,7 +61,7 @@ export class UserIdentityPickerComponent implements OnChanges, OnDestroy { @Input() public userAccounts: List | UserAccount[]; public options: UserOption[]; - public selected = new FormControl(); + public selected = new UntypedFormControl(); private _propagateChange: (value: UserIdentityAttributes) => void = null; private _sub: Subscription; @@ -109,7 +110,7 @@ export class UserIdentityPickerComponent implements OnChanges, OnDestroy { // Do nothing } - public validate(c: FormControl) { + public validate(c: UntypedFormControl) { return null; } diff --git a/desktop/src/app/components/task/browse/filter/task-advanced-filter.component.ts b/desktop/src/app/components/task/browse/filter/task-advanced-filter.component.ts index 94d3ad785b..7172bf00ee 100644 --- a/desktop/src/app/components/task/browse/filter/task-advanced-filter.component.ts +++ b/desktop/src/app/components/task/browse/filter/task-advanced-filter.component.ts @@ -10,6 +10,7 @@ import { TaskResult, TaskState } from "app/models"; import { ODataFields } from "common/constants"; @Component({ + standalone: false, selector: "bl-task-advanced-filter", templateUrl: "task-advanced-filter.html", }) diff --git a/desktop/src/app/components/task/browse/preview/task-preview.component.ts b/desktop/src/app/components/task/browse/preview/task-preview.component.ts index f87cf5dbf7..5117f22b83 100644 --- a/desktop/src/app/components/task/browse/preview/task-preview.component.ts +++ b/desktop/src/app/components/task/browse/preview/task-preview.component.ts @@ -8,6 +8,7 @@ import "./task-preview.scss"; * Handles both task and subTask */ @Component({ + standalone: false, selector: "bl-task-preview", templateUrl: "task-preview.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/task/browse/preview/task-runtime.component.ts b/desktop/src/app/components/task/browse/preview/task-runtime.component.ts index 90cc6b233d..93a2761884 100644 --- a/desktop/src/app/components/task/browse/preview/task-runtime.component.ts +++ b/desktop/src/app/components/task/browse/preview/task-runtime.component.ts @@ -8,6 +8,7 @@ import "./task-runtime.scss"; * Handles both task and subTask */ @Component({ + standalone: false, selector: "bl-task-runtime", templateUrl: "task-runtime.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/task/browse/task-list.component.ts b/desktop/src/app/components/task/browse/task-list.component.ts index 7fcd24e961..377f6ef66c 100644 --- a/desktop/src/app/components/task/browse/task-list.component.ts +++ b/desktop/src/app/components/task/browse/task-list.component.ts @@ -25,6 +25,7 @@ import { TaskCommands } from "../action"; import "./task-list.scss"; @Component({ + standalone: false, selector: "bl-task-list", templateUrl: "task-list.html", providers: [TaskCommands, { diff --git a/desktop/src/app/components/task/details/configuration/task-configuration.component.ts b/desktop/src/app/components/task/details/configuration/task-configuration.component.ts index a868658e26..426fc7e3dd 100644 --- a/desktop/src/app/components/task/details/configuration/task-configuration.component.ts +++ b/desktop/src/app/components/task/details/configuration/task-configuration.component.ts @@ -7,6 +7,7 @@ import { List } from "immutable"; /* eslint-disable */ @Component({ + standalone: false, selector: "bl-task-configuration", templateUrl: "task-configuration.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/task/details/output/task-outputs.component.spec.ts b/desktop/src/app/components/task/details/output/task-outputs.component.spec.ts index 48e7932637..974a101851 100644 --- a/desktop/src/app/components/task/details/output/task-outputs.component.spec.ts +++ b/desktop/src/app/components/task/details/output/task-outputs.component.spec.ts @@ -14,6 +14,7 @@ import * as Fixtures from "test/fixture"; import { MockStorageListGetter } from "test/utils/mocks"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/task/details/output/task-outputs.component.ts b/desktop/src/app/components/task/details/output/task-outputs.component.ts index 37b908a431..a44ddb2aa4 100644 --- a/desktop/src/app/components/task/details/output/task-outputs.component.ts +++ b/desktop/src/app/components/task/details/output/task-outputs.component.ts @@ -26,6 +26,7 @@ const outputTabs = [ { key: OutputType.logs, label: "Saved logs" }, ]; @Component({ + standalone: false, selector: "bl-task-outputs", templateUrl: "task-outputs.html", }) diff --git a/desktop/src/app/components/task/details/sub-tasks/list/sub-task-list.component.ts b/desktop/src/app/components/task/details/sub-tasks/list/sub-task-list.component.ts index 53ff277efa..7e0acf7a26 100644 --- a/desktop/src/app/components/task/details/sub-tasks/list/sub-task-list.component.ts +++ b/desktop/src/app/components/task/details/sub-tasks/list/sub-task-list.component.ts @@ -8,6 +8,7 @@ import { SubtaskInformation, TaskState } from "app/models"; import { List } from "immutable"; @Component({ + standalone: false, selector: "bl-sub-task-list", templateUrl: "sub-task-list.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/task/details/sub-tasks/properties/sub-task-properties.component.spec.ts b/desktop/src/app/components/task/details/sub-tasks/properties/sub-task-properties.component.spec.ts index c380bfbb16..a11b7e3463 100644 --- a/desktop/src/app/components/task/details/sub-tasks/properties/sub-task-properties.component.spec.ts +++ b/desktop/src/app/components/task/details/sub-tasks/properties/sub-task-properties.component.spec.ts @@ -35,6 +35,7 @@ const subtaskWithError = new SubtaskInformation({ }); @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/task/details/sub-tasks/properties/sub-task-properties.component.ts b/desktop/src/app/components/task/details/sub-tasks/properties/sub-task-properties.component.ts index 50748fc502..b39ce667a7 100644 --- a/desktop/src/app/components/task/details/sub-tasks/properties/sub-task-properties.component.ts +++ b/desktop/src/app/components/task/details/sub-tasks/properties/sub-task-properties.component.ts @@ -3,6 +3,7 @@ import { NameValuePair, SubtaskInformation, Task } from "app/models"; import { List } from "immutable"; @Component({ + standalone: false, selector: "bl-sub-task-properties", templateUrl: "sub-task-properties.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/task/details/sub-tasks/sub-tasks-browser.component.ts b/desktop/src/app/components/task/details/sub-tasks/sub-tasks-browser.component.ts index fc87c22dc6..f8980c7b94 100644 --- a/desktop/src/app/components/task/details/sub-tasks/sub-tasks-browser.component.ts +++ b/desktop/src/app/components/task/details/sub-tasks/sub-tasks-browser.component.ts @@ -11,6 +11,7 @@ import { Observable } from "rxjs"; import "./sub-tasks-browser.scss"; @Component({ + standalone: false, selector: "bl-sub-tasks-browser", templateUrl: "sub-tasks-browser.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/task/details/task-default.component.ts b/desktop/src/app/components/task/details/task-default.component.ts index e55f6fbc6f..68392a14b3 100644 --- a/desktop/src/app/components/task/details/task-default.component.ts +++ b/desktop/src/app/components/task/details/task-default.component.ts @@ -1,6 +1,7 @@ import { Component } from "@angular/core"; @Component({ + standalone: false, selector: "bl-no-task-selected", template: `
diff --git a/desktop/src/app/components/task/details/task-dependency-browser/task-dependency-browser.component.spec.ts b/desktop/src/app/components/task/details/task-dependency-browser/task-dependency-browser.component.spec.ts index b5436299cd..c14245626c 100644 --- a/desktop/src/app/components/task/details/task-dependency-browser/task-dependency-browser.component.spec.ts +++ b/desktop/src/app/components/task/details/task-dependency-browser/task-dependency-browser.component.spec.ts @@ -19,6 +19,7 @@ const taskMap: Map = new Map() .set("2", new Task({ id: "2", dependsOn: { taskIds: ["3", "4", "5"] } } as any)); @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/task/details/task-dependency-browser/task-dependency-browser.component.ts b/desktop/src/app/components/task/details/task-dependency-browser/task-dependency-browser.component.ts index 381fec60a0..88620dae1f 100644 --- a/desktop/src/app/components/task/details/task-dependency-browser/task-dependency-browser.component.ts +++ b/desktop/src/app/components/task/details/task-dependency-browser/task-dependency-browser.component.ts @@ -5,6 +5,7 @@ import { ComponentUtils } from "app/utils"; import { List } from "immutable"; @Component({ + standalone: false, selector: "bl-task-dependency-browser", templateUrl: "task-dependency-browser.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/task/details/task-details.component.ts b/desktop/src/app/components/task/details/task-details.component.ts index 462ca47080..0bf4c4a58f 100644 --- a/desktop/src/app/components/task/details/task-details.component.ts +++ b/desktop/src/app/components/task/details/task-details.component.ts @@ -8,6 +8,7 @@ import { Subscription } from "rxjs"; import { TaskCommands } from "../action"; @Component({ + standalone: false, selector: "bl-task-details", templateUrl: "task-details.html", providers: [TaskCommands], diff --git a/desktop/src/app/components/task/details/task-error-display.component.spec.ts b/desktop/src/app/components/task/details/task-error-display.component.spec.ts index 9eeaf9ea1e..06792803dc 100644 --- a/desktop/src/app/components/task/details/task-error-display.component.spec.ts +++ b/desktop/src/app/components/task/details/task-error-display.component.spec.ts @@ -8,6 +8,7 @@ import { TaskService } from "app/services"; import { BannerMockComponent } from "test/utils/mocks/components"; @Component({ + standalone: false, template: ``, }) class TaskErrorDisplayMockComponent { diff --git a/desktop/src/app/components/task/details/task-error-display.component.ts b/desktop/src/app/components/task/details/task-error-display.component.ts index 48eb1ef799..7a3d45cf80 100644 --- a/desktop/src/app/components/task/details/task-error-display.component.ts +++ b/desktop/src/app/components/task/details/task-error-display.component.ts @@ -8,6 +8,7 @@ import { TaskService } from "app/services"; import { ObservableUtils } from "app/utils"; @Component({ + standalone: false, selector: "bl-task-error-display", templateUrl: "task-error-display.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/task/details/task-node-info/task-node-info.component.spec.ts b/desktop/src/app/components/task/details/task-node-info/task-node-info.component.spec.ts index f851382ba4..3e1265a0d5 100644 --- a/desktop/src/app/components/task/details/task-node-info/task-node-info.component.spec.ts +++ b/desktop/src/app/components/task/details/task-node-info/task-node-info.component.spec.ts @@ -13,6 +13,7 @@ import { click } from "test/utils/helpers"; import { TaskNodeInfoComponent } from "./task-node-info.component"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/task/details/task-node-info/task-node-info.component.ts b/desktop/src/app/components/task/details/task-node-info/task-node-info.component.ts index 9d82b09c06..39ae7a8cdf 100644 --- a/desktop/src/app/components/task/details/task-node-info/task-node-info.component.ts +++ b/desktop/src/app/components/task/details/task-node-info/task-node-info.component.ts @@ -13,6 +13,7 @@ enum EntityStatus { NotFound, } @Component({ + standalone: false, selector: "bl-task-node-info", templateUrl: "task-node-info.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/task/details/task-timeline/task-timeline-state.component.spec.ts b/desktop/src/app/components/task/details/task-timeline/task-timeline-state.component.spec.ts index 19cc720ef0..8da34f58f2 100644 --- a/desktop/src/app/components/task/details/task-timeline/task-timeline-state.component.spec.ts +++ b/desktop/src/app/components/task/details/task-timeline/task-timeline-state.component.spec.ts @@ -5,6 +5,7 @@ import { TaskTimelineStateComponent } from "app/components/task/details/task-tim import { TaskState } from "app/models"; @Component({ + standalone: false, template: ` Additional content info diff --git a/desktop/src/app/components/task/details/task-timeline/task-timeline-state.component.ts b/desktop/src/app/components/task/details/task-timeline/task-timeline-state.component.ts index 84198083d8..a332e3a09a 100644 --- a/desktop/src/app/components/task/details/task-timeline/task-timeline-state.component.ts +++ b/desktop/src/app/components/task/details/task-timeline/task-timeline-state.component.ts @@ -5,6 +5,7 @@ import * as inflection from "inflection"; const stateOrder = [TaskState.active, TaskState.preparing, TaskState.running, TaskState.completed]; @Component({ + standalone: false, selector: "bl-task-timeline-state", templateUrl: "task-timeline-state.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/task/details/task-timeline/task-timeline.component.spec.ts b/desktop/src/app/components/task/details/task-timeline/task-timeline.component.spec.ts index 556633f9f1..31ea03c746 100644 --- a/desktop/src/app/components/task/details/task-timeline/task-timeline.component.spec.ts +++ b/desktop/src/app/components/task/details/task-timeline/task-timeline.component.spec.ts @@ -10,6 +10,7 @@ import { Job, Task, TaskState } from "app/models"; import { DateTime } from "luxon"; @Component({ + standalone: false, template: ` Additional content info diff --git a/desktop/src/app/components/task/details/task-timeline/task-timeline.component.ts b/desktop/src/app/components/task/details/task-timeline/task-timeline.component.ts index 1fcc5ff553..f366725886 100644 --- a/desktop/src/app/components/task/details/task-timeline/task-timeline.component.ts +++ b/desktop/src/app/components/task/details/task-timeline/task-timeline.component.ts @@ -7,6 +7,7 @@ import { DateTime } from "luxon"; import "./task-timeline.scss"; @Component({ + standalone: false, selector: "bl-task-timeline", templateUrl: "task-timeline.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/components/task/home/task-home.component.ts b/desktop/src/app/components/task/home/task-home.component.ts index c25f32172b..3f4d45af0c 100644 --- a/desktop/src/app/components/task/home/task-home.component.ts +++ b/desktop/src/app/components/task/home/task-home.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from "@angular/core"; -import { FormBuilder, FormControl } from "@angular/forms"; +import { UntypedFormBuilder, UntypedFormControl } from "@angular/forms"; import { ActivatedRoute } from "@angular/router"; import { autobind } from "@batch-flask/core"; import { SidebarManager } from "@batch-flask/ui/sidebar"; @@ -7,19 +7,20 @@ import { Subscription } from "rxjs"; import { AddTaskFormComponent } from "../action"; @Component({ + standalone: false, selector: "bl-task-home", templateUrl: "task-home.html", changeDetection: ChangeDetectionStrategy.OnPush, }) export class TaskHomeComponent implements OnInit, OnDestroy { - public quickSearchQuery = new FormControl(); + public quickSearchQuery = new UntypedFormControl(); public jobId: string; private _paramsSubscriber: Subscription; constructor( - formBuilder: FormBuilder, + formBuilder: UntypedFormBuilder, private sidebarManager: SidebarManager, private changeDetector: ChangeDetectorRef, private activatedRoute: ActivatedRoute) { diff --git a/desktop/src/app/components/task/task.module.ts b/desktop/src/app/components/task/task.module.ts index 4eb3d6e277..df2a2a7f35 100644 --- a/desktop/src/app/components/task/task.module.ts +++ b/desktop/src/app/components/task/task.module.ts @@ -27,10 +27,6 @@ const modules = [ declarations: components, exports: [...modules, ...components], imports: [...modules, ResourceFilePickerModule], - entryComponents: [ - RerunTaskFormComponent, - AddTaskFormComponent, - ], }) export class TaskModule { } diff --git a/desktop/src/app/components/tenant-picker/tenant-card.component.ts b/desktop/src/app/components/tenant-picker/tenant-card.component.ts index ef475e7cc6..e4abd4827f 100644 --- a/desktop/src/app/components/tenant-picker/tenant-card.component.ts +++ b/desktop/src/app/components/tenant-picker/tenant-card.component.ts @@ -8,6 +8,7 @@ import { TenantRefreshModel } from "."; import "./tenant-card.scss"; @Component({ + standalone: false, selector: "be-tenant-card", templateUrl: "tenant-card.html", changeDetection: ChangeDetectionStrategy.OnPush diff --git a/desktop/src/app/components/tenant-picker/tenant-picker.component.spec.ts b/desktop/src/app/components/tenant-picker/tenant-picker.component.spec.ts index 86d698d889..266bf52a6e 100644 --- a/desktop/src/app/components/tenant-picker/tenant-picker.component.spec.ts +++ b/desktop/src/app/components/tenant-picker/tenant-picker.component.spec.ts @@ -8,6 +8,7 @@ import { TenantCardComponent } from "."; import { By } from "@angular/platform-browser"; @Component({ + standalone: false, template: ``, }) class TestComponent { diff --git a/desktop/src/app/components/tenant-picker/tenant-picker.component.ts b/desktop/src/app/components/tenant-picker/tenant-picker.component.ts index 0f40dbda3a..aae6ac5b31 100644 --- a/desktop/src/app/components/tenant-picker/tenant-picker.component.ts +++ b/desktop/src/app/components/tenant-picker/tenant-picker.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, NgZone, OnDestroy } from "@angular/core"; -import { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from "@angular/forms"; +import { ControlValueAccessor, UntypedFormControl, NG_VALUE_ACCESSOR } from "@angular/forms"; import { AuthService, reauthenticateAll, TenantAuthorization } from "app/services"; import { Subject, throwError } from "rxjs"; import { catchError, first, takeUntil } from "rxjs/operators"; @@ -16,6 +16,7 @@ export interface TenantRefreshModel { } @Component({ + standalone: false, selector: "be-tenant-picker", templateUrl: "tenant-picker.html", changeDetection: ChangeDetectionStrategy.OnPush, @@ -32,7 +33,7 @@ export class TenantPickerComponent implements ControlValueAccessor, OnDestroy { return { name: "Tenants" }; } - public tenantSettings = new FormControl([]); + public tenantSettings = new UntypedFormControl([]); public saved: false; public loggedIn: boolean; public loaded = false; diff --git a/desktop/src/app/components/welcome/welcome.component.ts b/desktop/src/app/components/welcome/welcome.component.ts index 3c743cc6d1..3cf502ab86 100644 --- a/desktop/src/app/components/welcome/welcome.component.ts +++ b/desktop/src/app/components/welcome/welcome.component.ts @@ -4,6 +4,7 @@ import { autobind } from "@batch-flask/core"; import { first } from "rxjs/operators"; @Component({ + standalone: false, selector: "be-welcome", templateUrl: "./welcome.html", }) diff --git a/desktop/src/app/components/workspace/workspace-selector/workspace-dropdown.component.spec.ts b/desktop/src/app/components/workspace/workspace-selector/workspace-dropdown.component.spec.ts index ce4fe5eda9..28087b47d4 100644 --- a/desktop/src/app/components/workspace/workspace-selector/workspace-dropdown.component.spec.ts +++ b/desktop/src/app/components/workspace/workspace-selector/workspace-dropdown.component.spec.ts @@ -12,6 +12,7 @@ import * as Fixtures from "test/fixture"; import { WorkspaceDropDownComponent } from "./workspace-dropdown.component"; @Component({ + standalone: false, template: "", }) class TestComponent { diff --git a/desktop/src/app/components/workspace/workspace-selector/workspace-dropdown.component.ts b/desktop/src/app/components/workspace/workspace-selector/workspace-dropdown.component.ts index d1cebb8307..8f8baecbab 100644 --- a/desktop/src/app/components/workspace/workspace-selector/workspace-dropdown.component.ts +++ b/desktop/src/app/components/workspace/workspace-selector/workspace-dropdown.component.ts @@ -6,6 +6,7 @@ import { Observable, Subscription } from "rxjs"; import "./workspace-dropdown.scss"; @Component({ + standalone: false, selector: "bl-workspace-dropdown", templateUrl: "workspace-dropdown.html", changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/desktop/src/app/polyfills.browser.ts b/desktop/src/app/polyfills.browser.ts index a0e368d611..ca3a778623 100644 --- a/desktop/src/app/polyfills.browser.ts +++ b/desktop/src/app/polyfills.browser.ts @@ -2,4 +2,4 @@ import "reflect-metadata"; // eslint-disable-next-line -require("zone.js/dist/zone"); +require("zone.js"); diff --git a/desktop/src/app/services/azure-batch/certificate/certificate.service.spec.ts b/desktop/src/app/services/azure-batch/certificate/certificate.service.spec.ts index 953f7ad93a..f58533ea09 100644 --- a/desktop/src/app/services/azure-batch/certificate/certificate.service.spec.ts +++ b/desktop/src/app/services/azure-batch/certificate/certificate.service.spec.ts @@ -16,7 +16,7 @@ describe("CertificateService", () => { CertificateService, ], }); - certificateService = new CertificateService(TestBed.get(HttpClient)); + certificateService = new CertificateService(TestBed.inject(HttpClient)); httpMock = TestBed.inject(HttpTestingController); }); diff --git a/desktop/src/app/services/azure-batch/file/file.service.spec.ts b/desktop/src/app/services/azure-batch/file/file.service.spec.ts index 2520b9989b..a4798aa6e6 100644 --- a/desktop/src/app/services/azure-batch/file/file.service.spec.ts +++ b/desktop/src/app/services/azure-batch/file/file.service.spec.ts @@ -20,7 +20,7 @@ describe("FileService", () => { FileService, ], }); - fileService = new FileService(TestBed.get(HttpClient), null as any); + fileService = new FileService(TestBed.inject(HttpClient), null as any); httpMock = TestBed.inject(HttpTestingController); }); diff --git a/desktop/src/app/services/azure-batch/job-schedule/job-schedule.service.spec.ts b/desktop/src/app/services/azure-batch/job-schedule/job-schedule.service.spec.ts index fca05a439c..a723fad45f 100644 --- a/desktop/src/app/services/azure-batch/job-schedule/job-schedule.service.spec.ts +++ b/desktop/src/app/services/azure-batch/job-schedule/job-schedule.service.spec.ts @@ -17,7 +17,7 @@ describe("JobScheduleService", () => { JobScheduleService, ], }); - jobScheduleService = new JobScheduleService(TestBed.get(HttpClient)); + jobScheduleService = new JobScheduleService(TestBed.inject(HttpClient)); httpMock = TestBed.inject(HttpTestingController); }); diff --git a/desktop/src/app/services/azure-batch/job/job.service.spec.ts b/desktop/src/app/services/azure-batch/job/job.service.spec.ts index 2e7ee06161..9d64c4ad30 100644 --- a/desktop/src/app/services/azure-batch/job/job.service.spec.ts +++ b/desktop/src/app/services/azure-batch/job/job.service.spec.ts @@ -17,7 +17,7 @@ describe("JobService", () => { JobService, ], }); - jobService = new JobService(TestBed.get(HttpClient)); + jobService = new JobService(TestBed.inject(HttpClient)); httpMock = TestBed.inject(HttpTestingController); }); diff --git a/desktop/src/app/services/azure-batch/node-user/node-user.service.spec.ts b/desktop/src/app/services/azure-batch/node-user/node-user.service.spec.ts index 9fd1180dec..aa8c4149d9 100644 --- a/desktop/src/app/services/azure-batch/node-user/node-user.service.spec.ts +++ b/desktop/src/app/services/azure-batch/node-user/node-user.service.spec.ts @@ -17,7 +17,7 @@ describe("NodeUserService", () => { NodeUserService, ], }); - nodeUserService = new NodeUserService(TestBed.get(HttpClient)); + nodeUserService = new NodeUserService(TestBed.inject(HttpClient)); httpMock = TestBed.inject(HttpTestingController); }); diff --git a/desktop/src/app/services/azure-batch/node/node.service.spec.ts b/desktop/src/app/services/azure-batch/node/node.service.spec.ts index 442be40e45..dad5807062 100644 --- a/desktop/src/app/services/azure-batch/node/node.service.spec.ts +++ b/desktop/src/app/services/azure-batch/node/node.service.spec.ts @@ -16,7 +16,7 @@ describe("NodeService", () => { NodeService, ], }); - nodeService = new NodeService(null, TestBed.get(HttpClient)); + nodeService = new NodeService(null, TestBed.inject(HttpClient)); httpMock = TestBed.inject(HttpTestingController); }); diff --git a/desktop/src/app/services/azure-batch/pool/pool.service.spec.ts b/desktop/src/app/services/azure-batch/pool/pool.service.spec.ts index 21f3a97b1b..b881126a08 100644 --- a/desktop/src/app/services/azure-batch/pool/pool.service.spec.ts +++ b/desktop/src/app/services/azure-batch/pool/pool.service.spec.ts @@ -18,7 +18,7 @@ describe("PoolService", () => { PoolService, ], }); - poolService = new PoolService(TestBed.get(HttpClient)); + poolService = new PoolService(TestBed.inject(HttpClient)); httpMock = TestBed.inject(HttpTestingController); }); diff --git a/desktop/src/app/services/azure-batch/task/task.service.spec.ts b/desktop/src/app/services/azure-batch/task/task.service.spec.ts index e8def4f436..5ba0feaa19 100644 --- a/desktop/src/app/services/azure-batch/task/task.service.spec.ts +++ b/desktop/src/app/services/azure-batch/task/task.service.spec.ts @@ -16,7 +16,7 @@ describe("TaskService", () => { TaskService, ], }); - taskService = new TaskService(TestBed.get(HttpClient)); + taskService = new TaskService(TestBed.inject(HttpClient)); httpMock = TestBed.inject(HttpTestingController); }); diff --git a/desktop/src/app/services/telemetry/router-telemetry.service.spec.ts b/desktop/src/app/services/telemetry/router-telemetry.service.spec.ts index 055deb725c..38ab4ef152 100644 --- a/desktop/src/app/services/telemetry/router-telemetry.service.spec.ts +++ b/desktop/src/app/services/telemetry/router-telemetry.service.spec.ts @@ -6,6 +6,7 @@ import { TelemetryService } from "@batch-flask/core"; import { RouterTelemetryService } from "./router-telemetry.service"; @Component({ + standalone: false, selector: "bl-pools", template: "
", }) @@ -14,6 +15,7 @@ export class PoolsComponent { } @Component({ + standalone: false, selector: "bl-home", template: "
", }) diff --git a/desktop/src/app/services/themes/theme-core.ts b/desktop/src/app/services/themes/theme-core.ts index 9aff60968a..b1ec9b7b32 100644 --- a/desktop/src/app/services/themes/theme-core.ts +++ b/desktop/src/app/services/themes/theme-core.ts @@ -21,7 +21,7 @@ export class ThemeElement { } for (const { attr, metadata } of this._getAttrs()) { const { name, type } = metadata; - if (name in data) { + if (name in (data as object)) { const value = data[name]; if (type.name === "String") { this[attr] = value; diff --git a/desktop/src/app/styles/vendor/material-theme.scss b/desktop/src/app/styles/vendor/material-theme.scss index e5e1344e59..a5163276af 100644 --- a/desktop/src/app/styles/vendor/material-theme.scss +++ b/desktop/src/app/styles/vendor/material-theme.scss @@ -1,23 +1,28 @@ -@import "~@angular/material/theming"; +@use "@angular/material" as mat; // Plus imports for other components in your app. // Include the base styles for Angular Material core. We include this here so that you only // have to load a single css file for Angular Material in your app. -@include mat-core(); +@include mat.core(); // Define the palettes for your theme using the Material Design palettes available in palette.scss // (imported above). For each palette, you can optionally specify a default, lighter, and darker // hue. -$mat-primary: mat-palette($mat-indigo); -$mat-accent: mat-palette($mat-grey, A200, A100, A400); +$mat-primary: mat.m2-define-palette(mat.$m2-indigo-palette); +$mat-accent: mat.m2-define-palette(mat.$m2-grey-palette, A200, A100, A400); // Create the theme object (a Sass map containing all of the palettes). -$mat-theme: mat-light-theme($mat-primary, $mat-accent); +$mat-theme: mat.m2-define-light-theme(( + color: ( + primary: $mat-primary, + accent: $mat-accent, + ), +)); // Include theme styles for core and each component used in your app. // Alternatively, you can import and @include the theme mixins for each component // that you are using. -@include angular-material-theme($mat-theme); +@include mat.all-component-themes($mat-theme); // TODO: can we pull in the material scss classes into the project? // really want to be able to override the styles more easily. diff --git a/desktop/src/client/api/file/file-utils.ts b/desktop/src/client/api/file/file-utils.ts index ef651b3f3f..e8b65bef69 100644 --- a/desktop/src/client/api/file/file-utils.ts +++ b/desktop/src/client/api/file/file-utils.ts @@ -25,7 +25,7 @@ export class FileUtils { public unzip(source: string, dest: string): Promise { return new Promise((resolve, reject) => { - extract(source, { dir: dest }, (err) => { + (extract as any)(source, { dir: dest }, (err) => { if (err) { return reject(err); } diff --git a/desktop/src/client/startup.ts b/desktop/src/client/startup.ts index ea9c525b37..2c4accf7c3 100644 --- a/desktop/src/client/startup.ts +++ b/desktop/src/client/startup.ts @@ -1,4 +1,4 @@ -import { platformDynamicServer } from "@angular/platform-server"; +import { platformServer } from "@angular/platform-server"; import { LocaleService, TranslationsLoaderService } from "@batch-flask/core"; import { log } from "@batch-flask/utils"; import { ClientTranslationsLoaderService } from "client/core/i18n"; @@ -81,7 +81,7 @@ export async function startBatchExplorer(args: BatchExplorerArgs) { app.commandLine.appendSwitch("disable-features", "OutOfBlinkCors"); } - const module = await platformDynamicServer().bootstrapModule(BatchExplorerClientModule); + const module = await platformServer().bootstrapModule(BatchExplorerClientModule); const localeService = module.injector.get(LocaleService) as ClientLocaleService; await localeService.load(); const translationLoader = module.injector.get(TranslationsLoaderService) as ClientTranslationsLoaderService; diff --git a/desktop/src/test/utils/helpers/form-control-validators.ts b/desktop/src/test/utils/helpers/form-control-validators.ts index 0df4d6291b..a22b56e5cf 100644 --- a/desktop/src/test/utils/helpers/form-control-validators.ts +++ b/desktop/src/test/utils/helpers/form-control-validators.ts @@ -1,12 +1,12 @@ -import { FormGroup } from "@angular/forms"; +import { UntypedFormGroup } from "@angular/forms"; -export function validateControl(formGroup: FormGroup, controlName: string) { +export function validateControl(formGroup: UntypedFormGroup, controlName: string) { return new Validate(formGroup, controlName); } class Validate { constructor( - private formGroup: FormGroup, + private formGroup: UntypedFormGroup, private controlName: string) { } @@ -21,7 +21,7 @@ class Validate { class With { constructor( - private formGroup: FormGroup, + private formGroup: UntypedFormGroup, private controlName: string, private validator: string, private hasError: boolean) { diff --git a/desktop/src/test/utils/index.ts b/desktop/src/test/utils/index.ts index e69de29bb2..d90f38ae22 100644 --- a/desktop/src/test/utils/index.ts +++ b/desktop/src/test/utils/index.ts @@ -0,0 +1,33 @@ +import { Component, Input } from "@angular/core"; + +@Component({ + standalone: false, + selector: "bl-complex-form", + template: ` + + + `, +}) +export class ComplexFormMockComponent { + @Input() public submit: () => any; + @Input() public containerRef; + @Input() public formGroup; +} + +@Component({ + standalone: false, + selector: "bl-form-page", + template: ` +

{{title}}

+

{{subtitle}}

+ + `, +}) +export class FormPageMockComponent { + @Input() + public title: string; + @Input() + public subtitle: string; +} + +export const complexFormMockComponents = [ComplexFormMockComponent, FormPageMockComponent]; diff --git a/desktop/src/test/utils/mocks/components/banner.component.mock.ts b/desktop/src/test/utils/mocks/components/banner.component.mock.ts index 6874cdfafc..e97a9e3f7b 100644 --- a/desktop/src/test/utils/mocks/components/banner.component.mock.ts +++ b/desktop/src/test/utils/mocks/components/banner.component.mock.ts @@ -1,6 +1,7 @@ import { Component, Input } from "@angular/core"; @Component({ + standalone: false, selector: "bl-banner", template: `
{{fixMessage}}
`, }) diff --git a/desktop/src/test/utils/mocks/components/complex-form.component.mock.ts b/desktop/src/test/utils/mocks/components/complex-form.component.mock.ts index b31c0f27a6..d90f38ae22 100644 --- a/desktop/src/test/utils/mocks/components/complex-form.component.mock.ts +++ b/desktop/src/test/utils/mocks/components/complex-form.component.mock.ts @@ -1,6 +1,7 @@ import { Component, Input } from "@angular/core"; @Component({ + standalone: false, selector: "bl-complex-form", template: ` @@ -14,6 +15,7 @@ export class ComplexFormMockComponent { } @Component({ + standalone: false, selector: "bl-form-page", template: `

{{title}}

diff --git a/desktop/src/test/utils/mocks/components/entity-details-list.component.mock.ts b/desktop/src/test/utils/mocks/components/entity-details-list.component.mock.ts index 007de34663..b7d10c6187 100644 --- a/desktop/src/test/utils/mocks/components/entity-details-list.component.mock.ts +++ b/desktop/src/test/utils/mocks/components/entity-details-list.component.mock.ts @@ -1,6 +1,7 @@ import { Component, Input } from "@angular/core"; @Component({ + standalone: false, selector: "bl-entity-details-list", template: ` diff --git a/desktop/src/test/utils/mocks/components/gauge.component.mock.ts b/desktop/src/test/utils/mocks/components/gauge.component.mock.ts index d2c4d48434..c22c2db2df 100644 --- a/desktop/src/test/utils/mocks/components/gauge.component.mock.ts +++ b/desktop/src/test/utils/mocks/components/gauge.component.mock.ts @@ -2,6 +2,7 @@ import { Component, Input } from "@angular/core"; import { GaugeConfig } from "@batch-flask/ui/graphs/gauge"; @Component({ + standalone: false, selector: "bl-gauge", template: `
`, }) diff --git a/desktop/src/test/utils/mocks/components/info-box.component.mock.ts b/desktop/src/test/utils/mocks/components/info-box.component.mock.ts index 0bca1df694..acf6f89cf2 100644 --- a/desktop/src/test/utils/mocks/components/info-box.component.mock.ts +++ b/desktop/src/test/utils/mocks/components/info-box.component.mock.ts @@ -1,6 +1,7 @@ import { Component, Input } from "@angular/core"; @Component({ + standalone: false, selector: "bl-info-box", template: ` {{message}} diff --git a/desktop/src/test/utils/mocks/components/loading.component.mock.ts b/desktop/src/test/utils/mocks/components/loading.component.mock.ts index 8c3b8d1b09..ff34ad96fd 100644 --- a/desktop/src/test/utils/mocks/components/loading.component.mock.ts +++ b/desktop/src/test/utils/mocks/components/loading.component.mock.ts @@ -2,6 +2,7 @@ import { Component, Input } from "@angular/core"; import { LoadingStatus } from "@batch-flask/ui/loading"; @Component({ + standalone: false, selector: "bl-loading", template: ``, }) diff --git a/desktop/src/test/utils/mocks/components/no-item.component.mock.ts b/desktop/src/test/utils/mocks/components/no-item.component.mock.ts index 9e69f4960c..1e6c720e95 100644 --- a/desktop/src/test/utils/mocks/components/no-item.component.mock.ts +++ b/desktop/src/test/utils/mocks/components/no-item.component.mock.ts @@ -1,6 +1,7 @@ import { Component } from "@angular/core"; @Component({ + standalone: false, selector: "bl-no-item", template: ` diff --git a/desktop/src/test/utils/mocks/components/server-error.component.mock.ts b/desktop/src/test/utils/mocks/components/server-error.component.mock.ts index 262ac7bb5a..d7c42afa95 100644 --- a/desktop/src/test/utils/mocks/components/server-error.component.mock.ts +++ b/desktop/src/test/utils/mocks/components/server-error.component.mock.ts @@ -2,6 +2,7 @@ import { Component, Input } from "@angular/core"; import { ServerError } from "@batch-flask/core"; @Component({ + standalone: false, selector: "bl-server-error", template: `
{{fixMessage}}
`, }) diff --git a/desktop/src/test/utils/mocks/components/simple-form.component.mock.ts b/desktop/src/test/utils/mocks/components/simple-form.component.mock.ts index d4dddc75e6..d4e7a84266 100644 --- a/desktop/src/test/utils/mocks/components/simple-form.component.mock.ts +++ b/desktop/src/test/utils/mocks/components/simple-form.component.mock.ts @@ -1,6 +1,7 @@ import { Component, Input } from "@angular/core"; @Component({ + standalone: false, selector: "bl-simple-form", template: `
{{title}}
diff --git a/desktop/test/app/memory-leak/mem-leak.spec.ts b/desktop/test/app/memory-leak/mem-leak.spec.ts index ced7b92b9c..3d88a33c89 100644 --- a/desktop/test/app/memory-leak/mem-leak.spec.ts +++ b/desktop/test/app/memory-leak/mem-leak.spec.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import { Component } from "@angular/core"; -import { TestBed, async } from "@angular/core/testing"; +import { TestBed, waitForAsync } from "@angular/core/testing"; import { TaskDetailsModule } from "app/components/task/details"; export function main() { @@ -8,7 +8,7 @@ export function main() { fdescribe("Memory leak Testing", () => { for (let i = 0; i < 100000; i++) { describe(`${i}`, () => { - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TaskDetailsModule], // imports: [BaseModule], @@ -45,8 +45,10 @@ export function main() { // Uncomment below to focus the above tests // main(); -@Component({ selector: "bl-cmp", template: "
" }) +@Component({ + standalone: false, selector: "bl-cmp", template: "
" }) class TestComponent { } -@Component({ selector: "bl-big", templateUrl: "./test-big-component.html" }) +@Component({ + standalone: false, selector: "bl-big", templateUrl: "./test-big-component.html" }) class TestBigComponent { } diff --git a/desktop/test/app/spec-imports.ts b/desktop/test/app/spec-imports.ts index 8e0eb6c07e..43faf0b697 100644 --- a/desktop/test/app/spec-imports.ts +++ b/desktop/test/app/spec-imports.ts @@ -5,13 +5,8 @@ jasmine.MAX_PRETTY_PRINT_DEPTH = 3; import "reflect-metadata"; /* eslint-disable @typescript-eslint/no-var-requires */ -require("zone.js/dist/zone"); -require("zone.js/dist/long-stack-trace-zone"); -require("zone.js/dist/proxy"); // since zone.js 0.6.15 -require("zone.js/dist/sync-test"); -require("zone.js/dist/jasmine-patch"); // put here since zone.js 0.6.14 -require("zone.js/dist/async-test"); -require("zone.js/dist/fake-async-test"); +require("zone.js"); +require("zone.js/testing"); import "@batch-flask/extensions"; import "hammerjs"; diff --git a/desktop/test/setup.ts b/desktop/test/setup.ts index e69de29bb2..d90f38ae22 100644 --- a/desktop/test/setup.ts +++ b/desktop/test/setup.ts @@ -0,0 +1,33 @@ +import { Component, Input } from "@angular/core"; + +@Component({ + standalone: false, + selector: "bl-complex-form", + template: ` + + + `, +}) +export class ComplexFormMockComponent { + @Input() public submit: () => any; + @Input() public containerRef; + @Input() public formGroup; +} + +@Component({ + standalone: false, + selector: "bl-form-page", + template: ` +

{{title}}

+

{{subtitle}}

+ + `, +}) +export class FormPageMockComponent { + @Input() + public title: string; + @Input() + public subtitle: string; +} + +export const complexFormMockComponents = [ComplexFormMockComponent, FormPageMockComponent]; diff --git a/desktop/tsconfig.browser.json b/desktop/tsconfig.browser.json index 98c7ced86f..0f65b27e3d 100644 --- a/desktop/tsconfig.browser.json +++ b/desktop/tsconfig.browser.json @@ -1,5 +1,8 @@ { "extends": "./tsconfig.json", + "compilerOptions": { + "moduleResolution": "bundler" + }, "include": [ "src/app", "src/@batch-flask/utils/logging", @@ -12,6 +15,8 @@ "**/testing**/*" ], "angularCompilerOptions": { - "disableTypeScriptVersionCheck": true + "disableTypeScriptVersionCheck": true, + "strictTemplates": false, + "fullTemplateTypeCheck": false } } diff --git a/desktop/tsconfig.json b/desktop/tsconfig.json index 51f5418bef..4eebc67630 100644 --- a/desktop/tsconfig.json +++ b/desktop/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "ignoreDeprecations": "6.0", "target": "es2015", "module": "esnext", "lib": [ @@ -43,7 +44,8 @@ "jasmine" ], "typeRoots": [ - "node_modules/@types" + "node_modules/@types", + "node_modules" ], }, "files": [ diff --git a/desktop/tsconfig.node.json b/desktop/tsconfig.node.json index 16bad681f8..d16d60224b 100644 --- a/desktop/tsconfig.node.json +++ b/desktop/tsconfig.node.json @@ -3,6 +3,7 @@ "compilerOptions": { "target": "ES6", "module": "commonjs", + "rootDir": "./src", "outDir": "build" }, // This is not actually used for building but to let the editor know what files use this config diff --git a/util/bux/package-lock.json b/util/bux/package-lock.json index 15aab65b23..46503c5b73 100644 --- a/util/bux/package-lock.json +++ b/util/bux/package-lock.json @@ -1116,7 +1116,7 @@ "version": "20.5.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.4.tgz", "integrity": "sha512-Y9vbIAoM31djQZrPYjpTLo0XlaSwOIsrlfE3LpulZeRblttsLQRFRlBAppW0LOxyT3ALj2M5vU1ucQQayQH3jA==", - "devOptional": true + "dev": true }, "node_modules/@types/prettier": { "version": "2.7.3", @@ -5541,20 +5541,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", diff --git a/util/common-config/package-lock.json b/util/common-config/package-lock.json index 474f8844dd..4f2a59e5ee 100644 --- a/util/common-config/package-lock.json +++ b/util/common-config/package-lock.json @@ -3961,20 +3961,6 @@ "is-typedarray": "^1.0.0" } }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, "node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", From 2ad2a490c59ee67b7d0ca27653a3f0c98e5d3869 Mon Sep 17 00:00:00 2001 From: Zhiqiang Feng Date: Sat, 4 Jul 2026 03:56:53 -0700 Subject: [PATCH 2/9] Bundle electron main process with webpack to work with pure ESM only angular v22 --- desktop/config/webpack.config.electron.js | 123 ++++++++++++++++++++++ desktop/definitions/missing-defs.d.ts | 4 + desktop/package.json | 4 +- desktop/src/client/client-constants.ts | 2 +- desktop/src/client/main.prod.ts | 5 +- desktop/tsconfig.electron.json | 24 +++++ 6 files changed, 158 insertions(+), 4 deletions(-) create mode 100644 desktop/config/webpack.config.electron.js create mode 100644 desktop/tsconfig.electron.json diff --git a/desktop/config/webpack.config.electron.js b/desktop/config/webpack.config.electron.js new file mode 100644 index 0000000000..ca9ce1dd63 --- /dev/null +++ b/desktop/config/webpack.config.electron.js @@ -0,0 +1,123 @@ +/** + * Webpack configuration for the Electron **main process** (and preload scripts). + * + * Why this exists: as of Angular 16+ the framework packages are ESM-only and, from + * Angular 21+, expose their types exclusively through the package.json "exports" map. + * The main process is CommonJS (run directly by Electron), and CommonJS cannot + * `require()` an ESM-only package. Bundling the main process with webpack resolves + * this: webpack reads the "exports" maps, bundles the ESM Angular code, and emits + * CommonJS output that Electron can load. + * + * Design notes: + * - Output paths mirror the previous `tsc` layout (build/client/*.js) so that all the + * `__dirname`-relative path math in client-constants.ts and the package.json "main" + * field keep working unchanged. + * - Only `@angular/*` (ESM-only) is bundled. Every other node_modules package is left + * external and `require`d at runtime, matching the previous runtime behaviour and + * avoiding issues with native modules / dynamic requires. + * - process.env.* is intentionally NOT inlined (optimization.nodeEnv=false, no + * DefinePlugin) because the client reads NODE_ENV / HOT / DEV_TOOLS_MODE at runtime + * (e.g. main.prod.ts sets NODE_ENV="production" at runtime). + */ +const path = require("path"); +const webpack = require("webpack"); +const helpers = require("./helpers"); + +const NODE_ENV = process.env.NODE_ENV; +const isProd = NODE_ENV === "production" || NODE_ENV === "prod"; + +module.exports = { + target: "electron-main", + mode: isProd ? "production" : "development", + devtool: "source-map", + entry: { + "client/main": "./src/client/main.ts", + "client/main.prod": "./src/client/main.prod.ts", + "client/preload-insecure-test": "./src/client/preload-insecure-test.ts", + }, + output: { + path: helpers.root("build"), + filename: "[name].js", + sourceMapFilename: "[name].js.map", + }, + resolve: { + extensions: [".ts", ".mjs", ".js", ".json"], + // Mirror the renderer config so absolute imports (client/..., common/..., + // @batch-flask/...) resolve without the runtime NODE_PATH hack. + modules: [helpers.root(), helpers.root("src"), "node_modules"], + alias: { + // Ensure the patched copy of @azure/core-util is used (see patches/). + "@azure/core-util": path.resolve("./node_modules/@azure/core-util"), + }, + }, + module: { + rules: [ + { + test: /\.ts$/, + loader: "ts-loader", + options: { + configFile: helpers.root("tsconfig.electron.json"), + }, + exclude: [/\.spec\.ts$/, /[\\/]src[\\/]test[\\/]/, /[\\/]testing[\\/]/], + }, + { + // Angular ships fesm ESM (.mjs) with extensionless internal imports. + test: /\.m?js$/, + resolve: { fullySpecified: false }, + }, + ], + }, + // Keep the real Node __dirname/__filename so client-constants.ts path math works. + node: { + __dirname: false, + __filename: false, + }, + optimization: { + // Keep readable stack traces in the packaged app. + minimize: false, + // Do NOT inject process.env.NODE_ENV; the client reads it at runtime. + nodeEnv: false, + // Each entry (main, main.prod, preload) must be fully self-contained since + // they are loaded independently by Electron. Prevent webpack from hoisting + // shared modules into a separate chunk (which would leave main.prod empty). + splitChunks: false, + runtimeChunk: false, + }, + externals: [ + ({ request }, callback) => { + // Bundle Angular (ESM-only) so it is converted to CommonJS. + if (/^@angular[\\/]/.test(request)) { + return callback(); + } + // Bundle first-party source (relative + absolute src imports). + if ( + request.startsWith(".") || + request.startsWith("@batch-flask/") || + request.startsWith("client/") || + request.startsWith("common/") || + path.isAbsolute(request) + ) { + return callback(); + } + // Everything else (node builtins, electron, other node_modules) stays + // external and is required at runtime from node_modules. + return callback(null, "commonjs " + request); + }, + ], + plugins: [ + // Silence the "Critical dependency" warning from Angular's runtime linker. + new webpack.ContextReplacementPlugin( + /@angular(\\|\/)core(\\|\/)/, + helpers.root("src"), + ), + ], + stats: { + errorDetails: true, + }, + // The main process intentionally uses runtime `require` indirection + // (ElectronApp.require, preload's `window.require = require`) to keep certain + // modules external. Webpack can't statically analyse these; the warning is expected. + ignoreWarnings: [ + { message: /Critical dependency: require function is used in a way/ }, + ], +}; diff --git a/desktop/definitions/missing-defs.d.ts b/desktop/definitions/missing-defs.d.ts index 8addd3aa7d..9e822f5677 100644 --- a/desktop/definitions/missing-defs.d.ts +++ b/desktop/definitions/missing-defs.d.ts @@ -2,6 +2,10 @@ declare module "*.scss"; declare module "*.css"; +// Provided by webpack: emits a literal `require` (bypasses bundling) so runtime +// paths outside the bundle (e.g. the app's own package.json) resolve correctly. +declare const __non_webpack_require__: NodeRequire; + declare module "element-resize-detector" { module ElementResizeDetectorMaker { diff --git a/desktop/package.json b/desktop/package.json index 5193cef338..edbc2b4482 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -41,8 +41,8 @@ "test-e2e": "playwright test", "test-e2e:debug": "playwright test --debug", "test-models": "npm run ts scripts/swagger/validate-models.ts", - "build-client": " tsc -p tsconfig.node.json", - "build-client:dev": " tsc -p tsconfig.node.json --noUnusedLocals false", + "build-client": "cross-env NODE_ENV=production npm run webpack -- --config config/webpack.config.electron.js", + "build-client:dev": "npm run webpack -- --config config/webpack.config.electron.js", "build-app": "npm run webpack -- --profile", "build": "npm run clean && npm run build-translations && npm run build-client && npm run build-app", "build:clean": "npm run build", diff --git a/desktop/src/client/client-constants.ts b/desktop/src/client/client-constants.ts index a03e75fd2d..4864545bb4 100644 --- a/desktop/src/client/client-constants.ts +++ b/desktop/src/client/client-constants.ts @@ -26,7 +26,7 @@ function getPort(port = portrange): Promise { } // eslint-disable-next-line @typescript-eslint/no-var-requires -const packageConfig = require(`${root}/package.json`); +const packageConfig = __non_webpack_require__(`${root}/package.json`); export function clientFileUrl(path: string, protocol = true): { dev: string, prod: string } { const prefix = protocol ? "file://" : ""; diff --git a/desktop/src/client/main.prod.ts b/desktop/src/client/main.prod.ts index 634aeff345..218c4545bb 100644 --- a/desktop/src/client/main.prod.ts +++ b/desktop/src/client/main.prod.ts @@ -1,2 +1,5 @@ process.env.NODE_ENV = "production"; -import "./main"; +// Load the sibling main bundle at runtime (not bundled here) so this stays a tiny +// loader and does not duplicate the whole main graph. Webpack leaves this require +// untouched via __non_webpack_require__. +__non_webpack_require__("./main.js"); diff --git a/desktop/tsconfig.electron.json b/desktop/tsconfig.electron.json new file mode 100644 index 0000000000..581d142a14 --- /dev/null +++ b/desktop/tsconfig.electron.json @@ -0,0 +1,24 @@ +{ + // Used by config/webpack.config.electron.js (ts-loader) to build the Electron + // main process bundle. Uses "bundler" module resolution so the ESM-only + // Angular packages (which expose types via their package.json "exports" map) + // resolve correctly. Webpack converts the bundled ESM output to CommonJS. + "extends": "./tsconfig.json", + "compilerOptions": { + "moduleResolution": "bundler", + "sourceMap": true, + "types": [ + "node", + "electron" + ] + }, + "include": [ + "src/client/**/*.ts", + "src/common/**/*.ts" + ], + "exclude": [ + "**/*.spec.ts", + "**/testing/**/*", + "src/test/**/*" + ] +} From 99d4cb64d94115c1d94efdd4cd3b8d1a9532958d Mon Sep 17 00:00:00 2001 From: Zhiqiang Feng Date: Sat, 4 Jul 2026 04:21:36 -0700 Subject: [PATCH 3/9] Fix Error: The injectable 'PlatformLocation' needs to be compiled using the JIT compiler, but '@angular/compiler' is not available. --- desktop/src/client/main.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/desktop/src/client/main.ts b/desktop/src/client/main.ts index 2ca2ddb955..b57b3fd500 100644 --- a/desktop/src/client/main.ts +++ b/desktop/src/client/main.ts @@ -9,6 +9,13 @@ * 5. Call startBatchExplorer from startup.ts */ +// 0. Load the Angular JIT compiler BEFORE any Angular library code is evaluated. +// The main process is bundled with ts-loader (no AOT/linker step, unlike the +// renderer's AngularWebpackPlugin), so Angular's partially-compiled libraries and +// the client NgModule (bootstrapped via platformServer().bootstrapModule) are +// compiled with JIT at runtime. This replaces the removed `platformDynamicServer`. +import "@angular/compiler"; + // 1. Add the src/ folder to the NODE_PATH to be able to do absolute import(Relative to src folder) import * as path from "path"; import "./init"; From 59353c83d2eb66b9d68bddffbf4056e896691ca2 Mon Sep 17 00:00:00 2001 From: Zhiqiang Feng Date: Sat, 4 Jul 2026 04:28:47 -0700 Subject: [PATCH 4/9] Fix runtime Error: Cannot find module 'common' --- desktop/config/webpack.config.electron.js | 24 ++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/desktop/config/webpack.config.electron.js b/desktop/config/webpack.config.electron.js index ca9ce1dd63..d48a90caf7 100644 --- a/desktop/config/webpack.config.electron.js +++ b/desktop/config/webpack.config.electron.js @@ -20,12 +20,26 @@ * (e.g. main.prod.ts sets NODE_ENV="production" at runtime). */ const path = require("path"); +const fs = require("fs"); const webpack = require("webpack"); const helpers = require("./helpers"); const NODE_ENV = process.env.NODE_ENV; const isProd = NODE_ENV === "production" || NODE_ENV === "prod"; +// First-party absolute-import roots. The base tsconfig maps "*" -> "src/*", so any +// top-level entry under src/ can be imported as a bare specifier (e.g. `common`, +// `client/menu`, `@batch-flask/core`). These must all be BUNDLED, not externalized — +// the previous tsc build emitted them under build/ and relied on a runtime NODE_PATH +// hack, which no longer applies once the main process is bundled. +const srcRoots = new Set( + fs.readdirSync(helpers.root("src")).map((name) => name.replace(/\.(ts|js)$/, "")), +); + +function firstSegment(request) { + return request.split("/")[0]; +} + module.exports = { target: "electron-main", mode: isProd ? "production" : "development", @@ -89,13 +103,13 @@ module.exports = { if (/^@angular[\\/]/.test(request)) { return callback(); } - // Bundle first-party source (relative + absolute src imports). + // Bundle first-party source: relative imports, absolute paths, and any + // bare specifier whose first segment is a top-level src/ root + // (e.g. `common`, `client/...`, `@batch-flask/core`). if ( request.startsWith(".") || - request.startsWith("@batch-flask/") || - request.startsWith("client/") || - request.startsWith("common/") || - path.isAbsolute(request) + path.isAbsolute(request) || + srcRoots.has(firstSegment(request)) ) { return callback(); } From db1720ec9fc2faac410d0dbadc242f1af87ebbc4 Mon Sep 17 00:00:00 2001 From: Zhiqiang Feng Date: Sat, 4 Jul 2026 04:43:31 -0700 Subject: [PATCH 5/9] Fix runtime ReferenceError: Cannot access 'BatchExplorerApplication' before initialization --- desktop/src/client/core/aad/auth/aad.service.ts | 7 ++++++- desktop/src/client/core/batch-explorer-initializer.ts | 5 ++++- desktop/src/client/menu/main-application-menu.ts | 7 ++++++- desktop/src/client/proxy/proxy-settings.ts | 11 ++++++++++- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/desktop/src/client/core/aad/auth/aad.service.ts b/desktop/src/client/core/aad/auth/aad.service.ts index f48e72a73b..68eb672e07 100644 --- a/desktop/src/client/core/aad/auth/aad.service.ts +++ b/desktop/src/client/core/aad/auth/aad.service.ts @@ -55,14 +55,19 @@ export class AADService { private _currentUser = new BehaviorSubject(null); private _tenants = new BehaviorSubject([]); + private app: BatchExplorerApplication; constructor( - @Inject(forwardRef(() => BatchExplorerApplication)) private app: BatchExplorerApplication, + // `app` typed `any` to avoid an eager `design:paramtypes` reference to + // BatchExplorerApplication (circular dep). DI resolves it via forwardRef; the typed + // field above preserves type-safety. Without this the bundled main process TDZ-throws. + @Inject(forwardRef(() => BatchExplorerApplication)) app: any, private localStorage: DataStore, private properties: BatchExplorerProperties, private telemetryManager: TelemetryManager, ipcMain: BlIpcMain ) { + this.app = app; this._userDecoder = new UserDecoder(); this.currentUser = this._currentUser.asObservable(); this.tenants = this._tenants.asObservable(); diff --git a/desktop/src/client/core/batch-explorer-initializer.ts b/desktop/src/client/core/batch-explorer-initializer.ts index 0c44160f40..362f647497 100644 --- a/desktop/src/client/core/batch-explorer-initializer.ts +++ b/desktop/src/client/core/batch-explorer-initializer.ts @@ -15,7 +15,10 @@ export class BatchExplorerInitializer { private _sub: Subscription; private _tasks = new BehaviorSubject>(new Map()); constructor( - @Inject(forwardRef(() => BatchExplorerApplication)) batchExplorerApplication: BatchExplorerApplication) { + // Typed `any` to avoid an eager `design:paramtypes` reference to + // BatchExplorerApplication (circular dep). DI still resolves it via forwardRef; + // without this the webpack-bundled main process throws a TDZ ReferenceError. + @Inject(forwardRef(() => BatchExplorerApplication)) batchExplorerApplication: any) { this.splashScreen = new SplashScreen(batchExplorerApplication); this._sub = this._tasks.subscribe(() => { this._updateSplashScreen(); diff --git a/desktop/src/client/menu/main-application-menu.ts b/desktop/src/client/menu/main-application-menu.ts index 1de13ae8ff..c0f7f00e75 100644 --- a/desktop/src/client/menu/main-application-menu.ts +++ b/desktop/src/client/menu/main-application-menu.ts @@ -51,13 +51,18 @@ function setupOSXSpecificMenu(template) { */ @Injectable() export class MainApplicationMenu { + private app: BatchExplorerApplication; constructor( private helpMenu: HelpMenu, private telemetryManager: TelemetryManager, private proxySettings: ProxySettingsManager, private environmentService: AzureEnvironmentService, - @Inject(forwardRef(() => BatchExplorerApplication)) private app: BatchExplorerApplication, + // `app` typed `any` to avoid an eager `design:paramtypes` reference to + // BatchExplorerApplication (circular dep). DI resolves it via forwardRef; the typed + // field above preserves type-safety. Without this the bundled main process TDZ-throws. + @Inject(forwardRef(() => BatchExplorerApplication)) app: any, private properties: BatchExplorerProperties) { + this.app = app; } public async applyMenu() { diff --git a/desktop/src/client/proxy/proxy-settings.ts b/desktop/src/client/proxy/proxy-settings.ts index 15fb5d2960..3379fed4fb 100644 --- a/desktop/src/client/proxy/proxy-settings.ts +++ b/desktop/src/client/proxy/proxy-settings.ts @@ -18,10 +18,19 @@ export interface ProxySettingConfiguration { @Injectable() export class ProxySettingsManager { private _settings = new BehaviorSubject(null); + private batchExplorerApp: BatchExplorerApplication; constructor( - @Inject(forwardRef(() => BatchExplorerApplication)) private batchExplorerApp: BatchExplorerApplication, + // NOTE: `batchExplorerApp` is typed `any` (not BatchExplorerApplication) on purpose. + // BatchExplorerApplication <-> ProxySettingsManager form a circular dependency. The + // DI token is supplied via `forwardRef` (lazy), but with `emitDecoratorMetadata` a + // `BatchExplorerApplication` param type would also be emitted eagerly in + // `design:paramtypes`, which throws a TDZ ReferenceError once the code is bundled by + // webpack. Keeping the param untyped avoids that eager reference; the typed private + // field below preserves type-safety for internal usage. + @Inject(forwardRef(() => BatchExplorerApplication)) batchExplorerApp: any, private batchExplorerProcess: BatchExplorerProcess, private storage: DataStore) { + this.batchExplorerApp = batchExplorerApp; } public async init() { From 14f5c68b4ff7b97692257a6aa098f4167dc36dc8 Mon Sep 17 00:00:00 2001 From: Zhiqiang Feng Date: Sat, 4 Jul 2026 14:58:41 -0700 Subject: [PATCH 6/9] Fix TypeError: Cannot read properties of undefined (reading 'error') etc --- desktop/config/webpack.config.base.js | 9 +++++ .../electron/electron-app.service.ts | 8 ++++- .../src/@batch-flask/utils/logging/index.ts | 16 ++++++++- desktop/src/client/main-window/main-window.ts | 35 ++++++++++++++++++- 4 files changed, 65 insertions(+), 3 deletions(-) diff --git a/desktop/config/webpack.config.base.js b/desktop/config/webpack.config.base.js index 372fd57168..928c966da6 100644 --- a/desktop/config/webpack.config.base.js +++ b/desktop/config/webpack.config.base.js @@ -83,6 +83,15 @@ const baseConfig = { stats: { errorDetails: true, }, + // ElectronApp intentionally captures the real Node `require` for runtime module + // lookups (app.require(...)). webpack can't statically analyse that and emits a + // benign "Critical dependency" warning; suppress it just for that module. + ignoreWarnings: [ + { + module: /electron-app\.service\.ts$/, + message: /Critical dependency: require function is used/, + }, + ], }; module.exports = baseConfig; diff --git a/desktop/src/@batch-flask/electron/electron-app.service.ts b/desktop/src/@batch-flask/electron/electron-app.service.ts index 9b14b03998..2f655c3eb9 100644 --- a/desktop/src/@batch-flask/electron/electron-app.service.ts +++ b/desktop/src/@batch-flask/electron/electron-app.service.ts @@ -15,7 +15,13 @@ export class ElectronApp { this.require = this._remote.require; } else { this._app = app; - this.require = require; + // Use the real Node require (not webpack's) so dynamic runtime lookups like + // app.require("fs") / "glob" / "chokidar" resolve. In the bundled main process + // a plain `require` is webpack's require, which throws MODULE_NOT_FOUND for + // these (they are intentionally left external). __non_webpack_require__ emits a + // literal require untouched by the bundler. Falls back to `require` when running + // unbundled (e.g. ts-node scripts / tests). + this.require = typeof __non_webpack_require__ !== "undefined" ? __non_webpack_require__ : require; } } diff --git a/desktop/src/@batch-flask/utils/logging/index.ts b/desktop/src/@batch-flask/utils/logging/index.ts index 04b46defb7..591ba5148c 100644 --- a/desktop/src/@batch-flask/utils/logging/index.ts +++ b/desktop/src/@batch-flask/utils/logging/index.ts @@ -15,7 +15,21 @@ if (process.env.NODE_ENV === "test") { const { RendererLogger } = require("./renderer"); _logger = new RendererLogger(require("electron").ipcRenderer); } else { - _logger = require("./configuration").mainLogger; + // Main process: `mainLogger` is assigned lazily by configureLogging() (via + // initLogger()), which can run AFTER this module is evaluated once the main + // process is bundled (webpack hoists imports, so this module loads before + // main.ts's initLogger() statement executes). Resolve `mainLogger` on each + // access via a Proxy instead of snapshotting `undefined` at load time. + const configuration = require("./configuration"); + _logger = new Proxy({} as Logger, { + get(_target, prop) { + // Fall back to the console until the real logger is configured, so a + // logging call can never crash the process with "reading 'x' of undefined". + const target = configuration.mainLogger || console; + const value = target[prop]; + return typeof value === "function" ? value.bind(target) : value; + }, + }); } export const log: Logger = _logger; diff --git a/desktop/src/client/main-window/main-window.ts b/desktop/src/client/main-window/main-window.ts index 9c4ab7eb61..0ef1cf9298 100644 --- a/desktop/src/client/main-window/main-window.ts +++ b/desktop/src/client/main-window/main-window.ts @@ -13,6 +13,12 @@ const devServerUrl = Constants.urls.main.dev; // Webpack build output const buildFileUrl = Constants.urls.main.prod; +// When running against the webpack dev server (HOT=1), the dev server and Electron are +// started in parallel, so the server may not be listening (or may still be building) when +// the window first loads. Retry loading for up to (interval * maxRetries) before giving up. +const DEV_SERVER_RETRY_INTERVAL = 1000; +const DEV_SERVER_MAX_RETRIES = 60; + export enum WindowState { Closed, Loading, @@ -40,6 +46,7 @@ export class MainWindow extends GenericWindow { private _state = new BehaviorSubject(WindowState.Closed); private _resolveAppReady: (value?: any) => void; + private _devServerRetries = 0; constructor(batchExplorerApp: BatchExplorerApplication, private telemetryManager: TelemetryManager) { super(batchExplorerApp); @@ -128,7 +135,33 @@ export class MainWindow extends GenericWindow { } }); - window.webContents.on("did-fail-load", (event, errorCode, errorDescription) => { + window.webContents.on("did-finish-load", () => { + // Loaded successfully; reset the dev-server retry counter so a later + // navigation (e.g. dev server restart) can retry again if needed. + this._devServerRetries = 0; + }); + + window.webContents.on("did-fail-load", (event, errorCode, errorDescription, validatedURL, isMainFrame) => { + // Ignore sub-frame failures and user-initiated aborts (ERR_ABORTED = -3), + // which are not real main-window load failures. + if (isMainFrame === false || errorCode === -3) { + return; + } + + // In dev (HOT) mode the webpack dev server may not be ready yet when the window + // first loads. Retry until it comes up instead of leaving a blank failed window. + if (process.env.HOT && this._devServerRetries < DEV_SERVER_MAX_RETRIES) { + this._devServerRetries++; + log.warn(`Main window failed to load from dev server (${errorDescription}); ` + + `retry ${this._devServerRetries}/${DEV_SERVER_MAX_RETRIES} in ${DEV_SERVER_RETRY_INTERVAL}ms`); + setTimeout(() => { + if (this._window && !this._window.isDestroyed()) { + this._window.loadURL(devServerUrl); + } + }, DEV_SERVER_RETRY_INTERVAL); + return; + } + this._state.next(WindowState.FailedLoad); log.error(`Failed to load main window: ${errorDescription} (Error code ${errorCode})`); }); From 8afc511a37fbdb2cf080fc2183409454345b12bb Mon Sep 17 00:00:00 2001 From: Zhiqiang Feng Date: Sat, 4 Jul 2026 15:45:56 -0700 Subject: [PATCH 7/9] Fix issue where lanuch:desktop stuck at splash screen loading application --- desktop/src/app/polyfills.browser.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/desktop/src/app/polyfills.browser.ts b/desktop/src/app/polyfills.browser.ts index ca3a778623..c16085c7be 100644 --- a/desktop/src/app/polyfills.browser.ts +++ b/desktop/src/app/polyfills.browser.ts @@ -3,3 +3,15 @@ import "reflect-metadata"; // eslint-disable-next-line require("zone.js"); + +// Load the Angular JIT compiler here, in the polyfills entry. The renderer +// bootstraps with platformBrowserDynamic() (JIT), and Angular's partially-compiled +// library injectables (e.g. PlatformLocation from @angular/common) run +// `getCompilerFacade()` in their static initializers at module-evaluation time, so +// the compiler MUST be registered before any @angular/* app code evaluates. The +// AOT loader (@ngtools/webpack) reorders/strips a bare `import "@angular/compiler"` +// inside app.ts, and polyfills is emitted as a separate chunk that loads before +// app.js, so registering it here guarantees correct ordering. `require` (not import) +// is used so it is never reordered or tree-shaken. +// eslint-disable-next-line +require("@angular/compiler"); From 4d9f757637dc58eef41ba606117a16ad67576a12 Mon Sep 17 00:00:00 2001 From: Zhiqiang Feng Date: Sat, 4 Jul 2026 19:03:19 -0700 Subject: [PATCH 8/9] Fix issue where Batch Explorer main application shows empty page and no login prompt --- desktop/config/webpack.config.base.js | 15 +++ desktop/package-lock.json | 148 ++++++++++++++++++++++++++ desktop/package.json | 2 + desktop/src/app/app.component.ts | 9 +- desktop/src/app/app.module.ts | 7 +- desktop/src/app/app.ts | 6 ++ desktop/src/app/polyfills.browser.ts | 12 --- 7 files changed, 184 insertions(+), 15 deletions(-) diff --git a/desktop/config/webpack.config.base.js b/desktop/config/webpack.config.base.js index 928c966da6..a03dd2311a 100644 --- a/desktop/config/webpack.config.base.js +++ b/desktop/config/webpack.config.base.js @@ -42,6 +42,21 @@ const baseConfig = { loader: '@ngtools/webpack', exclude: [/\.spec\.ts/, /src\/test\//] }, + { + // Run the Angular Linker on the framework's partially-compiled (Ivy + // "partial") library code shipped as ESM (.mjs). This performs full AOT + // linking at build time so the app does NOT need the JIT compiler at + // runtime. Required because BatchExplorer bans `eval` in production + // (see src/@batch-flask/extensions/security.ts), which JIT relies on. + test: /\.mjs$/, + include: /node_modules/, + loader: 'babel-loader', + options: { + compact: false, + plugins: ['@angular/compiler-cli/linker/babel'], + cacheDirectory: true, + }, + }, ...commonRules, ], }, diff --git a/desktop/package-lock.json b/desktop/package-lock.json index 94426f951a..8cf0642658 100644 --- a/desktop/package-lock.json +++ b/desktop/package-lock.json @@ -67,6 +67,7 @@ "@angular-eslint/eslint-plugin-template": "^13.2.1", "@angular-eslint/template-parser": "^13.2.1", "@angular/compiler-cli": "^22.0.0", + "@babel/core": "^7.29.0", "@jsdevtools/coverage-istanbul-loader": "^3.0.5", "@ngtools/webpack": "^22.0.0", "@playwright/test": "^1.43.1", @@ -85,6 +86,7 @@ "@types/tinycolor2": "^1.4.2", "@types/webdriverio": "^4.13.3", "@types/xml2js": "^0.4.5", + "babel-loader": "^9.2.1", "colors": "^1.4.0", "concurrently": "^5.3.0", "copy-webpack-plugin": "^11.0.0", @@ -3826,6 +3828,145 @@ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, + "node_modules/babel-loader": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-loader/node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/babel-loader/node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4827,6 +4968,13 @@ "node": ">= 12.0.0" } }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "license": "ISC" + }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", diff --git a/desktop/package.json b/desktop/package.json index edbc2b4482..2c5ed30e41 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -103,9 +103,11 @@ "@angular-eslint/eslint-plugin-template": "^13.2.1", "@angular-eslint/template-parser": "^13.2.1", "@angular/compiler-cli": "^22.0.0", + "@babel/core": "^7.29.0", "@batch/common-config": "^1.0.0", "@jsdevtools/coverage-istanbul-loader": "^3.0.5", "@ngtools/webpack": "^22.0.0", + "babel-loader": "^9.2.1", "@playwright/test": "^1.43.1", "@types/chart.js": "^2.9.24", "@types/d3": "^7.4.0", diff --git a/desktop/src/app/app.component.ts b/desktop/src/app/app.component.ts index a3207f206e..3b443fd2c6 100644 --- a/desktop/src/app/app.component.ts +++ b/desktop/src/app/app.component.ts @@ -1,4 +1,4 @@ -import { Component, HostBinding, OnDestroy, OnInit } from "@angular/core"; +import { ChangeDetectorRef, Component, HostBinding, OnDestroy, OnInit } from "@angular/core"; import { MatIconRegistry } from "@angular/material/icon"; import { DomSanitizer } from "@angular/platform-browser"; import { ActivatedRoute } from "@angular/router"; @@ -64,7 +64,8 @@ export class AppComponent implements OnInit, OnDestroy { private predefinedFormulaService: PredefinedFormulaService, private workspaceService: WorkspaceService, private translationsLoaderService: AppTranslationsLoaderService, - private batchExplorer: BatchExplorerService + private batchExplorer: BatchExplorerService, + private changeDetector: ChangeDetectorRef ) { this.telemetryService.init(remote.getCurrentWindow().TELEMETRY_ENABLED); this._initWorkspaces(); @@ -87,6 +88,10 @@ export class AppComponent implements OnInit, OnDestroy { } this.isAppReady = ready; + // The config observable is bridged from the main process (see + // RendererConfigurationStore/wrapMainObservable). Its emissions no longer + // reliably schedule change detection on Angular 22, so trigger it explicitly. + this.changeDetector.markForCheck(); }); registerIcons(matIconRegistry, sanitizer); diff --git a/desktop/src/app/app.module.ts b/desktop/src/app/app.module.ts index 85f58b6496..7c77a057fc 100644 --- a/desktop/src/app/app.module.ts +++ b/desktop/src/app/app.module.ts @@ -1,6 +1,6 @@ import { HashLocationStrategy, LocationStrategy } from "@angular/common"; import { HttpClientModule } from "@angular/common/http"; -import { ErrorHandler, NgModule } from "@angular/core"; +import { ErrorHandler, NgModule, provideZoneChangeDetection } from "@angular/core"; import { FormsModule, ReactiveFormsModule } from "@angular/forms"; import { BrowserModule } from "@angular/platform-browser"; import { NoopAnimationsModule } from "@angular/platform-browser/animations"; @@ -68,6 +68,11 @@ const modules = [ ...modules, ], providers: [ + // Explicitly install zone.js-based change detection. On Angular 22 in this + // custom (non-CLI) webpack + Electron setup, NgZone auto-detection fell back to + // NoopNgZone, which disabled automatic change detection (the app rendered a blank + // page because view bindings never updated). This guarantees a real NgZone. + provideZoneChangeDetection(), { provide: LocationStrategy, useClass: HashLocationStrategy }, { provide: TranslationsLoaderService, useClass: AppTranslationsLoaderService }, { provide: LocaleService, useClass: AppLocaleService }, diff --git a/desktop/src/app/app.ts b/desktop/src/app/app.ts index 4516b095a8..2d3945fb92 100644 --- a/desktop/src/app/app.ts +++ b/desktop/src/app/app.ts @@ -1,3 +1,9 @@ +// zone.js MUST be imported/evaluated before @angular/core in this same entry so that +// Angular detects it and installs a real (zone-based) NgZone. Relying only on the +// separate polyfills chunk proved unreliable here (Angular 22 fell back to NoopNgZone, +// disabling change detection). A direct import guarantees zone.js patches the runtime +// before AppModule/@angular/core is evaluated below. +import "zone.js"; import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"; import { ipcRenderer } from "electron"; import { getCurrentWindow } from "@electron/remote"; diff --git a/desktop/src/app/polyfills.browser.ts b/desktop/src/app/polyfills.browser.ts index c16085c7be..ca3a778623 100644 --- a/desktop/src/app/polyfills.browser.ts +++ b/desktop/src/app/polyfills.browser.ts @@ -3,15 +3,3 @@ import "reflect-metadata"; // eslint-disable-next-line require("zone.js"); - -// Load the Angular JIT compiler here, in the polyfills entry. The renderer -// bootstraps with platformBrowserDynamic() (JIT), and Angular's partially-compiled -// library injectables (e.g. PlatformLocation from @angular/common) run -// `getCompilerFacade()` in their static initializers at module-evaluation time, so -// the compiler MUST be registered before any @angular/* app code evaluates. The -// AOT loader (@ngtools/webpack) reorders/strips a bare `import "@angular/compiler"` -// inside app.ts, and polyfills is emitted as a separate chunk that loads before -// app.js, so registering it here guarantees correct ordering. `require` (not import) -// is used so it is never reordered or tree-shaken. -// eslint-disable-next-line -require("@angular/compiler"); From 9fb4875063e9f976c5ce91550eaef7e01cd4c9c6 Mon Sep 17 00:00:00 2001 From: Zhiqiang Feng Date: Wed, 8 Jul 2026 16:22:13 -0700 Subject: [PATCH 9/9] turn off eslint rule max-len of 140 as BatchExplorer is near retirement --- util/common-config/.eslintrc-common.json | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/util/common-config/.eslintrc-common.json b/util/common-config/.eslintrc-common.json index afffaa7f5a..11b4013064 100644 --- a/util/common-config/.eslintrc-common.json +++ b/util/common-config/.eslintrc-common.json @@ -22,16 +22,7 @@ "rules": { "@typescript-eslint/no-inferrable-types": "off", "@typescript-eslint/no-unused-vars": "off", - "max-len": [ - "error", - { - "code": 140, - "ignoreComments": true, - "ignoreUrls": true, - "ignoreTemplateLiterals": true, - "ignoreRegExpLiterals": true - } - ], + "max-len": "off", "no-console": [ "warn", {