diff --git a/angular.json b/angular.json index caa3bceaa9..b557dc7a20 100644 --- a/angular.json +++ b/angular.json @@ -32,7 +32,6 @@ ], "styles": [ "src/frontend/packages/core/src/styles.scss", - "src/frontend/packages/cf-autoscaler/src/styles.scss", "node_modules/xterm/css/xterm.css" ], "scripts": [] diff --git a/src/frontend/packages/cf-autoscaler/package.json b/src/frontend/packages/cf-autoscaler/package.json index 5258e6ebc3..0c833ab0ae 100644 --- a/src/frontend/packages/cf-autoscaler/package.json +++ b/src/frontend/packages/cf-autoscaler/package.json @@ -1,8 +1,13 @@ { - "name": "cf-autoscaler", + "name": "@stratosui/cf-autoscaler", "version": "0.0.1", "peerDependencies": { "@angular/common": "^6.0.0-rc.0 || ^6.0.0", "@angular/core": "^6.0.0-rc.0 || ^6.0.0" + }, + "stratos": { + "module": "CfAutoscalerPackageModule", + "routingModule": "CfAutoscalerRoutingModule", + "theming": "sass/_all-theme#apply-theme-stratos-autoscaler" } } diff --git a/src/frontend/packages/cf-autoscaler/sass/_all-theme.scss b/src/frontend/packages/cf-autoscaler/sass/_all-theme.scss new file mode 100644 index 0000000000..8a54bf0ff5 --- /dev/null +++ b/src/frontend/packages/cf-autoscaler/sass/_all-theme.scss @@ -0,0 +1,8 @@ +@import '../src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.theme'; + +@mixin apply-theme-stratos-autoscaler($stratos-theme) { + + $theme: map-get($stratos-theme, theme); + $app-theme: map-get($stratos-theme, app-theme); + +} diff --git a/src/frontend/packages/cf-autoscaler/src/cf-autoscaler-package.module.ts b/src/frontend/packages/cf-autoscaler/src/cf-autoscaler-package.module.ts new file mode 100644 index 0000000000..adf5c8b4cb --- /dev/null +++ b/src/frontend/packages/cf-autoscaler/src/cf-autoscaler-package.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { EffectsModule } from '@ngrx/effects'; + +import { EntityCatalogModule } from '../../store/src/entity-catalog.module'; +import { generateASEntities } from './store/autoscaler-entity-generator'; +import { AutoscalerEffects } from './store/autoscaler.effects'; + +@NgModule({ + imports: [ + EntityCatalogModule.forFeature(generateASEntities), + EffectsModule.forFeature([ + AutoscalerEffects + ]), + ], +}) +export class CfAutoscalerPackageModule { } + diff --git a/src/frontend/packages/cf-autoscaler/src/cf-autoscaler-routing.module.ts b/src/frontend/packages/cf-autoscaler/src/cf-autoscaler-routing.module.ts new file mode 100644 index 0000000000..85f4dcbb8e --- /dev/null +++ b/src/frontend/packages/cf-autoscaler/src/cf-autoscaler-routing.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +// Things in this path include add/edit policy stepper, policy metrics page and policy events page +// They're include like this to ensure those parts are lazy loaded. +// The core application policy tab is included via CfAutoscalerModule, which is imported in the Application Module +const customRoutes: Routes = [ + { + path: 'autoscaler', + loadChildren: () => import('./core/autoscaler.module').then(m => m.AutoscalerModule), + data: { + // Required to place content in the mat-drawer-content/.page-content container + stratosNavigationPage: true + }, + }, +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(customRoutes), + ], +}) +export class CfAutoscalerRoutingModule { } diff --git a/src/frontend/packages/cf-autoscaler/src/cf-autoscaler.module.ts b/src/frontend/packages/cf-autoscaler/src/cf-autoscaler.module.ts index e470be161e..95b411929b 100644 --- a/src/frontend/packages/cf-autoscaler/src/cf-autoscaler.module.ts +++ b/src/frontend/packages/cf-autoscaler/src/cf-autoscaler.module.ts @@ -1,36 +1,15 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { EffectsModule } from '@ngrx/effects'; import { NgxChartsModule } from '@swimlane/ngx-charts'; -import { of } from 'rxjs'; +import { ExtensionService } from 'frontend/packages/core/src/core/extension/extension-service'; import { CloudFoundrySharedModule } from '../../cloud-foundry/src/shared/cf-shared.module'; import { CoreModule } from '../../core/src/core/core.module'; import { MDAppModule } from '../../core/src/core/md.module'; import { SharedModule } from '../../core/src/shared/shared.module'; -import { EntityCatalogModule } from '../../store/src/entity-catalog.module'; -import { AutoscalerModule } from './core/autoscaler.module'; import { AutoscalerTabExtensionComponent } from './features/autoscaler-tab-extension/autoscaler-tab-extension.component'; -import { generateASEntities } from './store/autoscaler-entity-generator'; -import { AutoscalerEffects } from './store/autoscaler.effects'; -import { ExtensionService } from 'frontend/packages/core/src/core/extension/extension-service'; +import { CardAutoscalerDefaultComponent } from './shared/card-autoscaler-default/card-autoscaler-default.component'; -// FIXME Work out why we need this and remove it. -const customRoutes: Routes = [ - { - path: 'autoscaler', - loadChildren: () => import('./core/autoscaler.module').then(m => m.AutoscalerModule), - data: { - stratosNavigation: { - text: 'Applications', - matIcon: 'apps', - position: 20, - hidden: of(true) - } - }, - }, -]; @NgModule({ imports: [ @@ -38,20 +17,15 @@ const customRoutes: Routes = [ CommonModule, SharedModule, MDAppModule, - NgxChartsModule, CloudFoundrySharedModule, - AutoscalerModule, - RouterModule.forRoot(customRoutes), - EntityCatalogModule.forFeature(generateASEntities), - EffectsModule.forFeature([ - AutoscalerEffects - ]), + NgxChartsModule, ExtensionService.declare([ AutoscalerTabExtensionComponent, ]) ], declarations: [ - AutoscalerTabExtensionComponent + CardAutoscalerDefaultComponent, + AutoscalerTabExtensionComponent, ] }) export class CfAutoscalerModule { } diff --git a/src/frontend/packages/cf-autoscaler/src/core/autoscaler.module.ts b/src/frontend/packages/cf-autoscaler/src/core/autoscaler.module.ts index cb76b829f2..4a92214407 100644 --- a/src/frontend/packages/cf-autoscaler/src/core/autoscaler.module.ts +++ b/src/frontend/packages/cf-autoscaler/src/core/autoscaler.module.ts @@ -1,7 +1,11 @@ +import { DatePipe } from '@angular/common'; import { NgModule } from '@angular/core'; import { NgxChartsModule } from '@swimlane/ngx-charts'; import { ApplicationService } from '../../../cloud-foundry/src/features/applications/application.service'; +import { + ApplicationEnvVarsHelper, +} from '../../../cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/application-env-vars.service'; import { CloudFoundrySharedModule } from '../../../cloud-foundry/src/shared/cf-shared.module'; import { CoreModule } from '../../../core/src/core/core.module'; import { SharedModule } from '../../../core/src/shared/shared.module'; @@ -26,7 +30,6 @@ import { EditAutoscalerPolicyStep4Component, } from '../features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component'; import { EditAutoscalerPolicyComponent } from '../features/edit-autoscaler-policy/edit-autoscaler-policy.component'; -import { CardAutoscalerDefaultComponent } from '../shared/card-autoscaler-default/card-autoscaler-default.component'; import { TableCellAutoscalerEventChangeIconPipe, } from '../shared/list-types/app-autoscaler-event/table-cell-autoscaler-event-change/table-cell-autoscaler-event-change-icon.pipe'; @@ -69,7 +72,6 @@ import { AutoscalerRoutingModule } from './autoscaler.routing'; EditAutoscalerPolicyStep3Component, EditAutoscalerPolicyStep4Component, EditAutoscalerCredentialComponent, - CardAutoscalerDefaultComponent, AppAutoscalerMetricChartCardComponent, AppAutoscalerComboChartComponent, AppAutoscalerComboSeriesVerticalComponent, @@ -78,11 +80,10 @@ import { AutoscalerRoutingModule } from './autoscaler.routing'; TableCellAutoscalerEventStatusIconPipe, TableCellAutoscalerEventChangeIconPipe, ], - exports: [ - CardAutoscalerDefaultComponent - ], providers: [ - ApplicationService + ApplicationService, + ApplicationEnvVarsHelper, + DatePipe ] }) export class AutoscalerModule { } diff --git a/src/frontend/packages/cf-autoscaler/src/styles.scss b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.theme.scss similarity index 100% rename from src/frontend/packages/cf-autoscaler/src/styles.scss rename to src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.theme.scss diff --git a/src/frontend/packages/cf-autoscaler/src/public_api.ts b/src/frontend/packages/cf-autoscaler/src/public_api.ts index 24160374d0..56ee5fc0d6 100644 --- a/src/frontend/packages/cf-autoscaler/src/public_api.ts +++ b/src/frontend/packages/cf-autoscaler/src/public_api.ts @@ -2,5 +2,6 @@ * Public API Surface of cloud-foundry */ -// export * from './lib/cloud-foundry.service'; -export * from './lib/cf-autoscaler.module'; +export * from './cf-autoscaler-package.module'; +export * from './cf-autoscaler-routing.module'; +export * from './core/autoscaler-helpers/autoscaler-available'; diff --git a/src/frontend/packages/cloud-foundry/package.json b/src/frontend/packages/cloud-foundry/package.json index 844bc32e3a..370dd15236 100644 --- a/src/frontend/packages/cloud-foundry/package.json +++ b/src/frontend/packages/cloud-foundry/package.json @@ -1,12 +1,13 @@ { - "name": "cloud-foundry", + "name": "@stratosui/cloud-foundry", "version": "0.0.1", "peerDependencies": { "@angular/common": "^6.0.0-rc.0 || ^6.0.0", "@angular/core": "^6.0.0-rc.0 || ^6.0.0" }, "stratos": { + "module": "CloudFoundryPackageModule", + "routingModule": "CloudFoundryRoutingModule", "theming": "sass/_all-theme#apply-theme-stratos-cloud-foundry" } - -} \ No newline at end of file +} diff --git a/src/frontend/packages/cloud-foundry/sass/_all-theme.scss b/src/frontend/packages/cloud-foundry/sass/_all-theme.scss index fd92ae1354..b344095253 100644 --- a/src/frontend/packages/cloud-foundry/sass/_all-theme.scss +++ b/src/frontend/packages/cloud-foundry/sass/_all-theme.scss @@ -1,7 +1,16 @@ // Theming for the copmponents in the Cloud Foundry package + @import '../src/features/applications/application-wall/application-wall.component.theme'; +@import '../src/features/services/services-wall/services-wall.component.theme'; +@import '../src/features/service-catalog/service-catalog-page/service-catalog-page.component.theme'; + @import '../src/shared/components/list/list-types/cf-security-groups/cf-security-groups-card/cf-security-groups-card.component.theme'; +@import '../src/shared/components/schema-form/schema-form.component.theme'; +@import '../src/features/cloud-foundry/tabs/cf-admin-add-user-warning/cf-admin-add-user-warning.component.theme'; +@import '../src/features/applications/deploy-application/deploy-application.component.theme'; +@import '../src/features/applications/deploy-application/deploy-application-step2/deploy-application-fs/deploy-application-fs.component.theme'; +@import '../src/features/cloud-foundry/tabs/cloud-foundry-firehose/cloud-foundry-firehose.component.theme'; @mixin apply-theme-stratos-cloud-foundry($stratos-theme) { @@ -9,4 +18,10 @@ $app-theme: map-get($stratos-theme, app-theme); @include cf-security-group-theme($theme); + @include app-schema-form-theme($theme, $app-theme); + @include cf-admin-add-user-warning($theme, $app-theme); + @include app-deploy-app-theme($theme, $app-theme); + @include app-deploy-app-fs-component-theme($theme, $app-theme); + @include app-cloud-foundry-firehose-theme($theme, $app-theme); + } diff --git a/src/frontend/packages/cloud-foundry/sass/mixins.scss b/src/frontend/packages/cloud-foundry/sass/mixins.scss new file mode 100644 index 0000000000..6d4ec43454 --- /dev/null +++ b/src/frontend/packages/cloud-foundry/sass/mixins.scss @@ -0,0 +1,20 @@ +@mixin apply-smaller-list-input { + + @include breakpoint(phablet) { + .list-component__header__right-filter { + width: 140px; + } + .list-component__header__right-sort { + width: 120px; + } + } + + @include breakpoint(laptop) { + .list-component__header__right-filter { + width: inherit; + } + .list-component__header__right-sort { + width: inherit; + } + } +} diff --git a/src/frontend/packages/cloud-foundry/src/cloud-foundry-package.module.ts b/src/frontend/packages/cloud-foundry/src/cloud-foundry-package.module.ts index 6e088679f4..410bbe7b18 100644 --- a/src/frontend/packages/cloud-foundry/src/cloud-foundry-package.module.ts +++ b/src/frontend/packages/cloud-foundry/src/cloud-foundry-package.module.ts @@ -5,14 +5,10 @@ import { MDAppModule } from '../../core/src/core/md.module'; import { SharedModule } from '../../core/src/shared/shared.module'; import { EntityCatalogModule } from '../../store/src/entity-catalog.module'; import { generateCFEntities } from './cf-entity-generator'; -import { ApplicationsModule } from './features/applications/applications.module'; -import { CloudFoundryModule } from './features/cloud-foundry/cloud-foundry.module'; -import { ServiceCatalogModule } from './features/service-catalog/service-catalog.module'; -import { ServicesModule } from './features/services/services.module'; -import { CloudFoundrySharedModule } from './shared/cf-shared.module'; import { CfUserService } from './shared/data-services/cf-user.service'; import { CloudFoundryService } from './shared/data-services/cloud-foundry.service'; import { LongRunningCfOperationsService } from './shared/data-services/long-running-cf-op.service'; +import { GitSCMService } from './shared/data-services/scm/scm.service'; import { ServiceActionHelperService } from './shared/data-services/service-action-helper.service'; import { CloudFoundryUserProvidedServicesService } from './shared/services/cloud-foundry-user-provided-services.service'; import { CloudFoundryStoreModule } from './store/cloud-foundry.store.module'; @@ -24,18 +20,7 @@ import { cfCurrentUserPermissionsService } from './user-permissions/cf-user-perm CommonModule, SharedModule, MDAppModule, - ApplicationsModule, - CloudFoundryModule, - ServiceCatalogModule, - ServicesModule, CloudFoundryStoreModule, - // FIXME: Ensure that anything lazy loaded is not included here - #3675 - CloudFoundrySharedModule, - // FIXME: Move cf effects into cf module - #3675 - // EffectsModule.for Root([ - // PermissionsEffects, - // PermissionEffects - // ]) ], providers: [ ...cfCurrentUserPermissionsService, @@ -44,6 +29,7 @@ import { cfCurrentUserPermissionsService } from './user-permissions/cf-user-perm ServiceActionHelperService, LongRunningCfOperationsService, CloudFoundryUserProvidedServicesService, + GitSCMService, ] }) export class CloudFoundryPackageModule { } diff --git a/src/frontend/packages/cloud-foundry/src/cloud-foundry-routing.module.ts b/src/frontend/packages/cloud-foundry/src/cloud-foundry-routing.module.ts new file mode 100644 index 0000000000..0266310650 --- /dev/null +++ b/src/frontend/packages/cloud-foundry/src/cloud-foundry-routing.module.ts @@ -0,0 +1,64 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +const customRoutes: Routes = [ + { + path: 'applications', + loadChildren: () => import('./features/applications/applications.module').then(m => m.ApplicationsModule), + data: { + stratosNavigation: { + label: 'Applications', + matIcon: 'apps', + requiresEndpointType: 'cf', + position: 20 + } + }, + }, + { + path: 'marketplace', + loadChildren: () => import('./features/service-catalog/service-catalog.module') + .then(m => m.ServiceCatalogModule), + data: { + stratosNavigation: { + label: 'Marketplace', + matIcon: 'store', + requiresEndpointType: 'cf', + position: 30 + } + }, + }, + { + path: 'services', + loadChildren: () => import('./features/services/services.module').then(m => m.ServicesModule), + data: { + stratosNavigation: { + label: 'Services', + matIcon: 'service', + matIconFont: 'stratos-icons', + requiresEndpointType: 'cf', + position: 40 + } + }, + }, + { + path: 'cloud-foundry', + loadChildren: () => import('./features/cloud-foundry/cloud-foundry-section.module').then(m => m.CloudFoundrySectionModule), + data: { + stratosNavigation: { + label: 'Cloud Foundry', + matIcon: 'cloud_foundry', + matIconFont: 'stratos-icons', + requiresEndpointType: 'cf', + position: 50 + } + }, + }, +] + +@NgModule({ + imports: [ + RouterModule.forRoot(customRoutes), + ], + declarations: [] +}) +export class CloudFoundryRoutingModule { } \ No newline at end of file diff --git a/src/frontend/packages/cloud-foundry/src/cloud-foundry-test.module.ts b/src/frontend/packages/cloud-foundry/src/cloud-foundry-test.module.ts index 99bfc37bbd..5bb932f851 100644 --- a/src/frontend/packages/cloud-foundry/src/cloud-foundry-test.module.ts +++ b/src/frontend/packages/cloud-foundry/src/cloud-foundry-test.module.ts @@ -29,7 +29,7 @@ import { CloudFoundryStoreModule } from './store/cloud-foundry.store.module'; return [ ...generateCFEntities(), ...generateStratosEntities(), - ...generateASEntities(), // FIXME: CF should not depend on autoscaler. See #3916 + ...generateASEntities(), // FIXME: Remove hard link between cf and autoscaler packages #4416 ]; } } diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application-wall/application-wall.component.theme.scss b/src/frontend/packages/cloud-foundry/src/features/applications/application-wall/application-wall.component.theme.scss index 81840ebdad..053873e20b 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application-wall/application-wall.component.theme.scss +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application-wall/application-wall.component.theme.scss @@ -1,9 +1,6 @@ -// For the App Wall, reduce the size of the filter and sort +@import '../../../../sass/mixins'; + .app-wall { - .list-component__header__right-filter { - width: 140px; - } - .list-component__header__right-sort { - width: 120px; - } + @include apply-smaller-list-input; } + diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-base.component.theme.scss b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-base.component.theme.scss deleted file mode 100644 index 8d1f7fa03d..0000000000 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-base.component.theme.scss +++ /dev/null @@ -1,5 +0,0 @@ -@mixin app-base-page-theme($theme, $app-theme) { - .summary__nav { - //background-color: map-get($app-theme, app-background-color); - } -} diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/applications.module.ts b/src/frontend/packages/cloud-foundry/src/features/applications/applications.module.ts index ce3afe8842..ce590dbaa6 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/applications.module.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/applications.module.ts @@ -1,6 +1,7 @@ import { DatePipe } from '@angular/common'; import { NgModule } from '@angular/core'; +import { CfAutoscalerModule } from '../../../../cf-autoscaler/src/cf-autoscaler.module'; import { CoreModule } from '../../../../core/src/core/core.module'; import { SharedModule } from '../../../../core/src/shared/shared.module'; import { CloudFoundrySharedModule } from '../../shared/cf-shared.module'; @@ -38,12 +39,15 @@ import { AddRoutesComponent } from './routes/add-routes/add-routes.component'; import { MapRoutesComponent } from './routes/map-routes/map-routes.component'; import { SshApplicationComponent } from './ssh-application/ssh-application.component'; + @NgModule({ imports: [ CoreModule, SharedModule, ApplicationsRoutingModule, - CloudFoundrySharedModule + CloudFoundrySharedModule, + // FIXME: Remove hard link between cf and autoscaler packages #4416 + CfAutoscalerModule ], declarations: [ ApplicationWallComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/cloud-foundry.module.ts b/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/cloud-foundry-section.module.ts similarity index 97% rename from src/frontend/packages/cloud-foundry/src/features/cloud-foundry/cloud-foundry.module.ts rename to src/frontend/packages/cloud-foundry/src/features/cloud-foundry/cloud-foundry-section.module.ts index 76e9e15ff3..ca523e3b30 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/cloud-foundry.module.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/cloud-foundry-section.module.ts @@ -1,8 +1,10 @@ +import { CommonModule, DatePipe } from '@angular/common'; import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { NgxChartsModule } from '@swimlane/ngx-charts'; import { CoreModule } from '../../../../core/src/core/core.module'; +import { MDAppModule } from '../../../../core/src/public-api'; import { SharedModule } from '../../../../core/src/shared/shared.module'; import { CloudFoundrySharedModule } from '../../shared/cf-shared.module'; import { @@ -21,8 +23,8 @@ import { CreateSpaceStepComponent } from './add-space/create-space-step/create-s import { ActiveRouteCfCell, ActiveRouteCfOrgSpace } from './cf-page.types'; import { CliInfoCloudFoundryComponent } from './cli-info-cloud-foundry/cli-info-cloud-foundry.component'; import { CloudFoundryBaseComponent } from './cloud-foundry-base/cloud-foundry-base.component'; +import { CloudFoundrySectionRoutingModule } from './cloud-foundry-section.routing'; import { CloudFoundryTabsBaseComponent } from './cloud-foundry-tabs-base/cloud-foundry-tabs-base.component'; -import { CloudFoundryRoutingModule } from './cloud-foundry.routing'; import { CloudFoundryComponent } from './cloud-foundry/cloud-foundry.component'; import { EditOrganizationStepComponent } from './edit-organization/edit-organization-step/edit-organization-step.component'; import { EditOrganizationComponent } from './edit-organization/edit-organization.component'; @@ -135,9 +137,11 @@ import { RemoveUserComponent } from './users/remove-user/remove-user.component'; @NgModule({ imports: [ + CommonModule, CoreModule, SharedModule, - CloudFoundryRoutingModule, + MDAppModule, + CloudFoundrySectionRoutingModule, RouterModule, NgxChartsModule, CloudFoundrySharedModule @@ -228,9 +232,10 @@ import { RemoveUserComponent } from './users/remove-user/remove-user.component'; CloudFoundryCellService, UserInviteService, UserInviteConfigureService, + DatePipe ], entryComponents: [ UserInviteConfigurationDialogComponent ] }) -export class CloudFoundryModule { } +export class CloudFoundrySectionModule { } diff --git a/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/cloud-foundry.routing.ts b/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/cloud-foundry-section.routing.ts similarity index 99% rename from src/frontend/packages/cloud-foundry/src/features/cloud-foundry/cloud-foundry.routing.ts rename to src/frontend/packages/cloud-foundry/src/features/cloud-foundry/cloud-foundry-section.routing.ts index cdfcacbe8b..258d2b2163 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/cloud-foundry.routing.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/cloud-foundry-section.routing.ts @@ -427,4 +427,4 @@ const cloudFoundry: Routes = [{ @NgModule({ imports: [RouterModule.forChild(cloudFoundry)] }) -export class CloudFoundryRoutingModule { } +export class CloudFoundrySectionRoutingModule { } diff --git a/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/users/manage-users/cf-roles.service.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/users/manage-users/cf-roles.service.spec.ts index 14e0a46dd7..90e369eeec 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/users/manage-users/cf-roles.service.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cloud-foundry/users/manage-users/cf-roles.service.spec.ts @@ -1,12 +1,12 @@ +import { HttpClientModule } from '@angular/common/http'; import { inject, TestBed } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { SharedModule } from '../../../../../../core/src/shared/shared.module'; import { generateCfStoreModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { CfUserService } from '../../../../shared/data-services/cf-user.service'; -import { CloudFoundryModule } from '../../cloud-foundry.module'; +import { CloudFoundrySectionModule } from '../../cloud-foundry-section.module'; import { CfRolesService } from './cf-roles.service'; -import { HttpClientModule } from '@angular/common/http'; describe('CfRolesService', () => { beforeEach(() => { @@ -14,7 +14,7 @@ describe('CfRolesService', () => { imports: [ ...generateCfStoreModules(), SharedModule, - CloudFoundryModule, + CloudFoundrySectionModule, HttpClientModule, RouterTestingModule ], diff --git a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-catalog-page/service-catalog-page.component.theme.scss b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-catalog-page/service-catalog-page.component.theme.scss index d2b75ca4fd..34874c1bd6 100644 --- a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-catalog-page/service-catalog-page.component.theme.scss +++ b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-catalog-page/service-catalog-page.component.theme.scss @@ -1,9 +1,6 @@ -// For the Services Catalog, reduce the size of the filter and sort +@import '../../../../sass/mixins'; + .marketplace { - .list-component__header__right-filter { - width: 140px; - } - .list-component__header__right-sort { - width: 120px; - } + @include apply-smaller-list-input; } + diff --git a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-catalog.module.ts b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-catalog.module.ts index a959216d92..f2d5dec61b 100644 --- a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-catalog.module.ts +++ b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-catalog.module.ts @@ -1,4 +1,4 @@ -import { CommonModule } from '@angular/common'; +import { CommonModule, DatePipe } from '@angular/common'; import { NgModule } from '@angular/core'; import { CoreModule } from '../../../../core/src/core/core.module'; @@ -33,6 +33,9 @@ import { ServiceTabsBaseComponent } from './service-tabs-base/service-tabs-base. ], exports: [ ServiceTabsBaseComponent, + ], + providers: [ + DatePipe ] }) export class ServiceCatalogModule { } diff --git a/src/frontend/packages/cloud-foundry/src/features/services/services-wall/services-wall.component.theme.scss b/src/frontend/packages/cloud-foundry/src/features/services/services-wall/services-wall.component.theme.scss index 73f218c996..ef6a14c026 100644 --- a/src/frontend/packages/cloud-foundry/src/features/services/services-wall/services-wall.component.theme.scss +++ b/src/frontend/packages/cloud-foundry/src/features/services/services-wall/services-wall.component.theme.scss @@ -1,9 +1,5 @@ -// For the Services Wall, reduce the size of the filter and sort +@import '../../../../sass/mixins'; + .services-wall { - .list-component__header__right-filter { - width: 140px; - } - .list-component__header__right-sort { - width: 120px; - } + @include apply-smaller-list-input; } diff --git a/src/frontend/packages/cloud-foundry/src/features/services/services.module.ts b/src/frontend/packages/cloud-foundry/src/features/services/services.module.ts index 628dced999..0680c4e2ff 100644 --- a/src/frontend/packages/cloud-foundry/src/features/services/services.module.ts +++ b/src/frontend/packages/cloud-foundry/src/features/services/services.module.ts @@ -1,4 +1,4 @@ -import { CommonModule } from '@angular/common'; +import { CommonModule, DatePipe } from '@angular/common'; import { NgModule } from '@angular/core'; import { @@ -27,6 +27,9 @@ import { ServicesRoutingModule } from './services.routing'; ServicesWallComponent, DetachServiceInstanceComponent, DetachAppsComponent + ], + providers: [ + DatePipe ] }) export class ServicesModule { } diff --git a/src/frontend/packages/cloud-foundry/src/public_api.ts b/src/frontend/packages/cloud-foundry/src/public_api.ts index dbe7a16cbd..0d517d9617 100644 --- a/src/frontend/packages/cloud-foundry/src/public_api.ts +++ b/src/frontend/packages/cloud-foundry/src/public_api.ts @@ -2,8 +2,7 @@ * Public API Surface of cloud-foundry */ -// export * from './lib/cloud-foundry.service'; -export * from './lib/cloud-foundry.component'; -export * from './lib/cloud-foundry.module'; +export * from './cloud-foundry-package.module'; +export * from './cloud-foundry-routing.module'; export * from './cf-api-svc.types'; \ No newline at end of file diff --git a/src/frontend/packages/cloud-foundry/src/shared/cf-shared.module.ts b/src/frontend/packages/cloud-foundry/src/shared/cf-shared.module.ts index aeef92fd78..faca9700ab 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/cf-shared.module.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/cf-shared.module.ts @@ -202,15 +202,11 @@ import { ServiceIconComponent } from './components/service-icon/service-icon.com import { ServiceInstanceLastOpComponent } from './components/service-instance-last-op/service-instance-last-op.component'; import { ServicePlanPriceComponent } from './components/service-plan-price/service-plan-price.component'; import { ServicePlanPublicComponent } from './components/service-plan-public/service-plan-public.component'; -import { GitSCMService } from './data-services/scm/scm.service'; import { AppNameUniqueDirective } from './directives/app-name-unique.directive/app-name-unique.directive'; import { CfUserPermissionDirective } from './directives/cf-user-permission/cf-user-permission.directive'; import { ApplicationStateService } from './services/application-state.service'; import { CloudFoundryUserProvidedServicesService } from './services/cloud-foundry-user-provided-services.service'; -// tslint:disable:max-line-length -// tslint:enable:max-line-length - const cfListTableCells: Type>[] = [ TableCellServiceInstanceAppsAttachedComponent, TableCellServiceComponent, @@ -267,8 +263,6 @@ const cfListCards: Type>[] = [ UserProvidedServiceInstanceCardComponent, ]; -// listTableCells.push(); - @NgModule({ imports: [ CommonModule, @@ -378,7 +372,6 @@ const cfListCards: Type>[] = [ ], providers: [ ApplicationStateService, - GitSCMService, CloudFoundryUserProvidedServicesService ] }) diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-info/card-cf-info.component.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-info/card-cf-info.component.ts index 503ac52c40..89afc74d73 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-info/card-cf-info.component.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-info/card-cf-info.component.ts @@ -1,10 +1,10 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; +import { fetchAutoscalerInfo } from '@stratosui/cf-autoscaler'; import { APIResource, EntityInfo } from 'frontend/packages/store/src/types/api.types'; import { Observable, Subscription } from 'rxjs'; import { map, tap } from 'rxjs/operators'; -import { fetchAutoscalerInfo } from '../../../../../../cf-autoscaler/src/core/autoscaler-helpers/autoscaler-available'; import { EntityServiceFactory } from '../../../../../../store/src/entity-service-factory.service'; import { ICfV2Info } from '../../../../cf-api.types'; import { CloudFoundryEndpointService } from '../../../../features/cloud-foundry/services/cloud-foundry-endpoint.service'; @@ -16,7 +16,6 @@ import { UserInviteService, } from '../../../../features/cloud-foundry/user-invites/user-invite.service'; - @Component({ selector: 'app-card-cf-info', templateUrl: './card-cf-info.component.html', @@ -50,6 +49,7 @@ export class CardCfInfoComponent implements OnInit, OnDestroy { ); // FIXME: CF should not depend on autoscaler. See #3916 + // FIXME: Remove hard link between cf and autoscaler packages #4416 this.autoscalerVersion$ = fetchAutoscalerInfo(this.cfEndpointService.cfGuid, this.esf).pipe( map(e => e.entityRequestInfo.error ? null : diff --git a/src/frontend/packages/cloud-foundry/src/store/cloud-foundry.store.module.ts b/src/frontend/packages/cloud-foundry/src/store/cloud-foundry.store.module.ts index f2c9b707bd..700bf7c0a7 100644 --- a/src/frontend/packages/cloud-foundry/src/store/cloud-foundry.store.module.ts +++ b/src/frontend/packages/cloud-foundry/src/store/cloud-foundry.store.module.ts @@ -1,6 +1,7 @@ import { NgModule } from '@angular/core'; import { EffectsModule } from '@ngrx/effects'; +import { ActiveRouteCfOrgSpace } from '../features/cloud-foundry/cf-page.types'; import { CloudFoundryReducersModule } from './cloud-foundry.reducers.module'; import { AppVariablesEffect } from './effects/app-variables.effects'; import { AppEffects } from './effects/app.effects'; @@ -30,6 +31,12 @@ import { UsersRolesEffects } from './effects/users-roles.effects'; CfValidateEffects, UsersRolesEffects ]) + ], + providers: [ + { + provide: ActiveRouteCfOrgSpace, + useValue: {} + }, ] }) export class CloudFoundryStoreModule { } diff --git a/src/frontend/packages/core/sass/_all-theme.scss b/src/frontend/packages/core/sass/_all-theme.scss index 950f0d84f3..ccbd01c43a 100644 --- a/src/frontend/packages/core/sass/_all-theme.scss +++ b/src/frontend/packages/core/sass/_all-theme.scss @@ -55,14 +55,7 @@ @import '../src/shared/components/favorites-global-list/favorites-global-list.component.theme'; @import '../src/shared/components/favorites-meta-card/favorites-meta-card.component.theme'; -@import '../../cloud-foundry/src/shared/components/schema-form/schema-form.component.theme'; -@import '../../cloud-foundry/src/features/services/services-wall/services-wall.component.theme'; -@import '../../cloud-foundry/src/features/cloud-foundry/tabs/cf-admin-add-user-warning/cf-admin-add-user-warning.component.theme'; -@import '../../cloud-foundry/src/features/applications/application/application-base.component.theme'; -@import '../../cloud-foundry/src/features/applications/deploy-application/deploy-application.component.theme'; -@import '../../cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-fs/deploy-application-fs.component.theme'; -@import '../../cloud-foundry/src/features/cloud-foundry/tabs/cloud-foundry-firehose/cloud-foundry-firehose.component.theme'; -@import '../../cloud-foundry/src/features/service-catalog/service-catalog-page/service-catalog-page.component.theme'; + @import '../../core/src/features/error-page/error-page/error-page.component.theme'; @import '../../core/src/features/endpoints/backup-restore/restore-endpoints/restore-endpoints.component.theme'; @import '../../core/src/features/metrics/metrics/metrics.component.theme'; @@ -88,7 +81,6 @@ @include display-value-theme($theme, $app-theme); @include steppers-theme($theme, $app-theme); @include list-theme($theme, $app-theme); - @include app-base-page-theme($theme, $app-theme); @include app-mat-snack-bar-theme($theme, $app-theme); @include ngx-charts-gauge($theme, $app-theme); @include app-text-status-theme($theme, $app-theme); @@ -101,8 +93,6 @@ @include app-boolean-indicator-theme($theme, $app-theme); @include loading-page-theme($theme, $app-theme); @include app-log-viewer-theme($theme, $app-theme); - @include app-deploy-app-theme($theme, $app-theme); - @include app-cloud-foundry-firehose-theme($theme, $app-theme); @include app-card-number-metric-theme($theme, $app-theme); @include app-card-boolean-metric-theme($theme, $app-theme); @include app-dot-content($theme, $app-theme); @@ -111,12 +101,10 @@ @include app-page-header-events($theme, $app-theme); @include app-user-profile-banner-component-theme($theme, $app-theme); @include action-monitor-icon-theme($theme, $app-theme); - @include app-deploy-app-fs-component-theme($theme, $app-theme); @include app-upload-progress-indicator-component-theme($theme, $app-theme); @include page-404($theme, $app-theme); @include about-page-theme($theme, $app-theme); @include meta-card-component($theme, $app-theme); - @include app-schema-form-theme($theme, $app-theme); @include start-end-theme($theme, $app-theme); @include metrics-chart-theme($theme, $app-theme); @include metrics-range-selector-theme($theme, $app-theme); @@ -130,7 +118,6 @@ @include favorites-global-list-theme($theme, $app-theme); @include favorites-meta-card-theme($theme, $app-theme); @include page-side-nav-theme($theme, $app-theme); - @include cf-admin-add-user-warning($theme, $app-theme); @include entity-summary-title-theme($theme, $app-theme); @include app-meta-card-item-theme($theme, $app-theme); @include error-page-theme($theme, $app-theme); diff --git a/src/frontend/packages/core/src/app.module.ts b/src/frontend/packages/core/src/app.module.ts index 24bfcbbe56..37614cdb52 100644 --- a/src/frontend/packages/core/src/app.module.ts +++ b/src/frontend/packages/core/src/app.module.ts @@ -7,8 +7,6 @@ import { Store } from '@ngrx/store'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; import { debounceTime, filter, withLatestFrom } from 'rxjs/operators'; -import { CfAutoscalerModule } from '../../cf-autoscaler/src/cf-autoscaler.module'; -import { CloudFoundryPackageModule } from '../../cloud-foundry/src/cloud-foundry-package.module'; import { SetRecentlyVisitedEntityAction } from '../../store/src/actions/recently-visited.actions'; import { GeneralEntityAppState, GeneralRequestDataState } from '../../store/src/app-state'; import { EntityCatalogModule } from '../../store/src/entity-catalog.module'; @@ -103,7 +101,6 @@ class AppStoreDebugModule { } imports: [ EntityCatalogModule.forFeature(generateStratosEntities), RouteModule, - CloudFoundryPackageModule, AppStoreModule, AppStoreDebugModule, BrowserModule, @@ -118,7 +115,6 @@ class AppStoreDebugModule { } AboutModule, CustomImportModule, XSRFModule, - CfAutoscalerModule ], providers: [ CustomizationService, diff --git a/src/frontend/packages/core/src/app.routing.ts b/src/frontend/packages/core/src/app.routing.ts index 4dcb335ed5..9441eb4583 100644 --- a/src/frontend/packages/core/src/app.routing.ts +++ b/src/frontend/packages/core/src/app.routing.ts @@ -59,18 +59,6 @@ const appRoutes: Routes = [ } }, { path: 'entity-list', loadChildren: () => import('./api-driven-views/api-driven-views.module').then(m => m.ApiDrivenViewsModule) }, - { - path: 'applications', - loadChildren: () => import('../../cloud-foundry/src/features/applications/applications.module').then(m => m.ApplicationsModule), - data: { - stratosNavigation: { - label: 'Applications', - matIcon: 'apps', - requiresEndpointType: 'cf', - position: 20 - } - }, - }, { path: 'endpoints', data: { @@ -91,45 +79,6 @@ const appRoutes: Routes = [ loadChildren: () => import('./features/endpoints/endpoints.module').then(m => m.EndpointsModule), }] }, - { - path: 'marketplace', - loadChildren: () => import('../../cloud-foundry/src/features/service-catalog/service-catalog.module') - .then(m => m.ServiceCatalogModule), - data: { - stratosNavigation: { - label: 'Marketplace', - matIcon: 'store', - requiresEndpointType: 'cf', - position: 30 - } - }, - }, - { - path: 'services', - loadChildren: () => import('../../cloud-foundry/src/features/services/services.module').then(m => m.ServicesModule), - data: { - stratosNavigation: { - label: 'Services', - matIcon: 'service', - matIconFont: 'stratos-icons', - requiresEndpointType: 'cf', - position: 40 - } - }, - }, - { - path: 'cloud-foundry', - loadChildren: () => import('../../cloud-foundry/src/features/cloud-foundry/cloud-foundry.module').then(m => m.CloudFoundryModule), - data: { - stratosNavigation: { - label: 'Cloud Foundry', - matIcon: 'cloud_foundry', - matIconFont: 'stratos-icons', - requiresEndpointType: 'cf', - position: 50 - } - }, - }, { path: 'about', loadChildren: () => import('./features/about/about.module').then(m => m.AboutModule) }, { path: 'user-profile', loadChildren: () => import('./features/user-profile/user-profile.module').then(m => m.UserProfileModule) }, { path: 'events', loadChildren: () => import('./features/event-page/event-page.module').then(m => m.EventPageModule) }, diff --git a/src/frontend/packages/core/src/core/extension/extension-service.ts b/src/frontend/packages/core/src/core/extension/extension-service.ts index c71151f5b7..b43f57a0bf 100644 --- a/src/frontend/packages/core/src/core/extension/extension-service.ts +++ b/src/frontend/packages/core/src/core/extension/extension-service.ts @@ -178,7 +178,7 @@ export class ExtensionService { } private moveExtensionRoute(routeConfig: Route[], dashboardRoute: Route): boolean { - const index = routeConfig.findIndex(r => !!r.data && !!r.data.stratosNavigation); + const index = routeConfig.findIndex(r => !!r.data && (!!r.data.stratosNavigation || r.data.stratosNavigationPage)); if (index >= 0) { const removed = routeConfig.splice(index, 1); dashboardRoute.children = dashboardRoute.children.concat(removed); diff --git a/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.ts b/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.ts index 981436de47..aaa4ece632 100644 --- a/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.ts +++ b/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.ts @@ -6,8 +6,8 @@ import { buffer, debounceTime, filter, map } from 'rxjs/operators'; import { ActionHistoryDump } from '../../../../../store/src/actions/action-history.actions'; import { ToggleSideNav } from '../../../../../store/src/actions/dashboard-actions'; import { AppState } from '../../../../../store/src/app-state'; -import { CustomizationService, CustomizationsMetadata } from '../../../core/customizations.types'; import { TabNavItem } from '../../../../tab-nav.types'; +import { CustomizationService, CustomizationsMetadata } from '../../../core/customizations.types'; export const SIDENAV_COPYRIGHT = new InjectionToken('Optional copyright string for side nav'); diff --git a/src/test-e2e/application/po/card-autoscaler-default.po.ts b/src/test-e2e/application/po/card-autoscaler-default.po.ts index caab933f2e..b0267fb648 100644 --- a/src/test-e2e/application/po/card-autoscaler-default.po.ts +++ b/src/test-e2e/application/po/card-autoscaler-default.po.ts @@ -1,7 +1,6 @@ -import { by, element, ElementFinder, promise, protractor } from 'protractor'; +import { by, element, ElementFinder, promise } from 'protractor'; import { Component } from '../../po/component.po'; -import { CreateAutoscalerPolicy } from './create-autoscaler-policy.po' export class CardAutoscalerDefault extends Component { diff --git a/src/tsconfig.json b/src/tsconfig.json index b78f3fdc24..26ac698586 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -33,7 +33,9 @@ "@stratosui/core": ["frontend/packages/core/src/public-api.ts"], "@stratosui/store": ["frontend/packages/store/src/public-api.ts"], "@stratosui/store/testing": ["frontend/packages/store/testing/public-api.ts"], - "@example/extensions": ["frontend/packages/example-extensions/src/public-api.ts"] - } + "@stratosui/cloud-foundry": ["frontend/packages/cloud-foundry/src/public_api.ts"], + "@stratosui/cf-autoscaler": ["frontend/packages/cf-autoscaler/src/public_api.ts"], + "@example/extensions": ["frontend/packages/example-extensions/src/public-api.ts"], + } } }