diff --git a/apps/picsa-apps/extension-app-native/android/app/build.gradle b/apps/picsa-apps/extension-app-native/android/app/build.gradle index b97d58fe6..4dab4ab38 100644 --- a/apps/picsa-apps/extension-app-native/android/app/build.gradle +++ b/apps/picsa-apps/extension-app-native/android/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "io.picsa.extension" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 3018000 - versionName "3.18.0" + versionCode 3019000 + versionName "3.19.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/apps/picsa-apps/extension-app/src/app/app-routing.module.ts b/apps/picsa-apps/extension-app/src/app/app-routing.module.ts index 9b26e66b6..89595dc6a 100644 --- a/apps/picsa-apps/extension-app/src/app/app-routing.module.ts +++ b/apps/picsa-apps/extension-app/src/app/app-routing.module.ts @@ -3,6 +3,7 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { BudgetToolModule } from '@picsa/budget/src/app/app.module-embedded'; import { ClimateToolModule } from '@picsa/climate/src/app/app.module-embedded'; +import { CropProbabilityToolModule } from '@picsa/crop-probability/src/app/app.module-embedded'; import { MonitoringToolModule } from '@picsa/monitoring/src/app/app.module-embedded'; import { OptionsToolModule } from '@picsa/option/src/app/app.module-embedded'; import { ResourcesToolModule } from '@picsa/resources/src/app/app.module-embedded'; @@ -24,6 +25,13 @@ const routes: Routes = [ (mod) => mod.ClimateToolModule ), }, + { + path: 'crop-probability', + loadChildren: () => + import('@picsa/crop-probability/src/app/app.module-embedded').then( + (mod) => mod.CropProbabilityToolModule + ), + }, { path: 'monitoring', loadChildren: () => @@ -81,6 +89,7 @@ const routes: Routes = [ imports: [ RouterModule.forRoot(routes), ClimateToolModule.forRoot({ urlPrefix: 'climate' }), + CropProbabilityToolModule.forRoot({ urlPrefix: 'crop-probability' }), BudgetToolModule.forRoot({ urlPrefix: 'budget' }), MonitoringToolModule.forRoot({ urlPrefix: 'monitoring' }), OptionsToolModule.forRoot({ urlPrefix: 'option' }), diff --git a/apps/picsa-tools/crop-probability-tool/project.json b/apps/picsa-tools/crop-probability-tool/project.json index 7d501d387..3ebf9b85b 100644 --- a/apps/picsa-tools/crop-probability-tool/project.json +++ b/apps/picsa-tools/crop-probability-tool/project.json @@ -31,7 +31,7 @@ { "type": "initial", "maximumWarning": "500kb", - "maximumError": "1mb" + "maximumError": "2mb" }, { "type": "anyComponentStyle", diff --git a/apps/picsa-tools/crop-probability-tool/src/app/app-routing.module.ts b/apps/picsa-tools/crop-probability-tool/src/app/app-routing.module.ts new file mode 100644 index 000000000..036d1c674 --- /dev/null +++ b/apps/picsa-tools/crop-probability-tool/src/app/app-routing.module.ts @@ -0,0 +1,26 @@ +import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; +import { NgModule } from '@angular/core'; + +export const ROUTES_COMMON: Routes = [ + { + path: '', + loadChildren: () => + import('./pages/home/home.module').then((m) => m.HomeModule), + title: 'Crop Probability', + }, +]; +/** Routes only registered in standalone mode */ +const ROUTES_STANDALONE: Routes = [{ path: '**', redirectTo: '' }]; + +/******************************************************************* + * Standalone Version + ******************************************************************/ +@NgModule({ + imports: [ + RouterModule.forRoot([...ROUTES_COMMON, ...ROUTES_STANDALONE], { + preloadingStrategy: PreloadAllModules, + }), + ], + exports: [RouterModule], +}) +export class AppRoutingModule {} diff --git a/apps/picsa-tools/crop-probability-tool/src/app/app.component.html b/apps/picsa-tools/crop-probability-tool/src/app/app.component.html index 5cf4ab0de..d5e086097 100644 --- a/apps/picsa-tools/crop-probability-tool/src/app/app.component.html +++ b/apps/picsa-tools/crop-probability-tool/src/app/app.component.html @@ -1 +1,4 @@ - +
+ + +
diff --git a/apps/picsa-tools/crop-probability-tool/src/app/app.component.ts b/apps/picsa-tools/crop-probability-tool/src/app/app.component.ts index c9cd048a2..ff514cb1a 100644 --- a/apps/picsa-tools/crop-probability-tool/src/app/app.component.ts +++ b/apps/picsa-tools/crop-probability-tool/src/app/app.component.ts @@ -1,10 +1,19 @@ import { Component } from '@angular/core'; @Component({ - selector: 'picsa-root', + // eslint-disable-next-line @angular-eslint/component-selector + selector: 'picsa-crop-probability-tool', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], }) export class AppComponent { - title = 'picsa-tools-crop-probability-tool'; + title = 'picsa-crop-probability'; } + +@Component({ + // eslint-disable-next-line @angular-eslint/component-selector + selector: 'picsa-crop-probability-tool', + template: '', +}) +// eslint-disable-next-line @angular-eslint/component-class-suffix +export class AppComponentEmbedded extends AppComponent {} diff --git a/apps/picsa-tools/crop-probability-tool/src/app/app.module-embedded.ts b/apps/picsa-tools/crop-probability-tool/src/app/app.module-embedded.ts new file mode 100644 index 000000000..904893807 --- /dev/null +++ b/apps/picsa-tools/crop-probability-tool/src/app/app.module-embedded.ts @@ -0,0 +1,53 @@ +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { Router, RouterModule } from '@angular/router'; +import { PicsaTranslateService } from '@picsa/shared/modules'; + +import { registerEmbeddedRoutes } from '@picsa/utils'; + +import { APP_COMMON_IMPORTS } from './app.module'; +import { AppComponentEmbedded } from './app.component'; +import { ROUTES_COMMON } from './app-routing.module'; + +export class EmbeddedConfig { + /** Path app routed through, e.g. 'budget' */ + urlPrefix: string; +} + +/******************************************************************* + * Routes + ******************************************************************/ +@NgModule({ + imports: [RouterModule.forChild([])], +}) +export class EmbeddedRoutingModule { + constructor(router: Router, embeddedConfig: EmbeddedConfig) { + registerEmbeddedRoutes(ROUTES_COMMON, router, embeddedConfig.urlPrefix); + } +} + +/******************************************************************* + * Module + ******************************************************************/ +@NgModule({ + declarations: [AppComponentEmbedded], + imports: [...APP_COMMON_IMPORTS, EmbeddedRoutingModule], + bootstrap: [AppComponentEmbedded], +}) +export class BaseModule { + // ensure translate has been initiated + constructor(public translate: PicsaTranslateService) {} +} + +/** Use to import directly into another app via lazy-loading */ +@NgModule() +export class CropProbabilityToolModule { + static forRoot(config: EmbeddedConfig): ModuleWithProviders { + return { + ngModule: BaseModule, + providers: [ + PicsaTranslateService, + { provide: EmbeddedConfig, useValue: config }, + ], + }; + } +} diff --git a/apps/picsa-tools/crop-probability-tool/src/app/app.module.ts b/apps/picsa-tools/crop-probability-tool/src/app/app.module.ts index de7ee2cf1..080e8ee56 100644 --- a/apps/picsa-tools/crop-probability-tool/src/app/app.module.ts +++ b/apps/picsa-tools/crop-probability-tool/src/app/app.module.ts @@ -1,27 +1,50 @@ -import { NgModule } from '@angular/core'; +import { + BrowserAnimationsModule, + NoopAnimationsModule, +} from '@angular/platform-browser/animations'; import { BrowserModule } from '@angular/platform-browser'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { HttpClientModule } from '@angular/common/http'; +import { NgModule } from '@angular/core'; + +import { + PicsaDbModule, + PicsaTranslateModule, + PicsaTranslateService, +} from '@picsa/shared/modules'; +import { PicsaCommonComponentsModule } from '@picsa/components'; import { AppComponent } from './app.component'; -import { RouterModule } from '@angular/router'; -import { appRoutes } from './app.routes'; -import { CropProbabilityTableComponent } from './components/crop-probability-table/crop-probability-table.component'; +import { AppRoutingModule } from './app-routing.module'; import { CropProbabilityMaterialModule } from './components/material.module'; -import { CropProbabilityTableHeaderComponent } from './components/crop-probability-table-header/crop-probability-table-header.component'; +/** Core imports only required when running standalone */ +const StandaloneImports = [ + AppRoutingModule, + BrowserModule, + BrowserAnimationsModule, + NoopAnimationsModule, + PicsaTranslateModule.forRoot(), +]; + +/** Common imports used in both standalone and embedded formats */ +export const APP_COMMON_IMPORTS = [ + HttpClientModule, + CropProbabilityMaterialModule, + PicsaTranslateModule, + PicsaDbModule.forRoot(), + PicsaCommonComponentsModule, +]; + +/******************************************************************* + * Standalone Version + ******************************************************************/ @NgModule({ - declarations: [ - AppComponent, - CropProbabilityTableComponent, - CropProbabilityTableHeaderComponent, - ], - imports: [ - BrowserModule, - BrowserAnimationsModule, - RouterModule.forRoot(appRoutes, { initialNavigation: 'enabledBlocking' }), - CropProbabilityMaterialModule, - ], - providers: [], + declarations: [AppComponent], + imports: [...StandaloneImports, ...APP_COMMON_IMPORTS], bootstrap: [AppComponent], + schemas: [], }) -export class AppModule {} +export class AppModule { + // ensure translate service initialised + constructor(public translate: PicsaTranslateService) {} +} diff --git a/apps/picsa-tools/crop-probability-tool/src/app/app.routes.ts b/apps/picsa-tools/crop-probability-tool/src/app/app.routes.ts deleted file mode 100644 index 8762dfe2c..000000000 --- a/apps/picsa-tools/crop-probability-tool/src/app/app.routes.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Route } from '@angular/router'; - -export const appRoutes: Route[] = []; diff --git a/apps/picsa-tools/crop-probability-tool/src/app/components/components.module.ts b/apps/picsa-tools/crop-probability-tool/src/app/components/components.module.ts new file mode 100644 index 000000000..1cb445681 --- /dev/null +++ b/apps/picsa-tools/crop-probability-tool/src/app/components/components.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; + +import { CropProbabilityTableComponent } from './crop-probability-table/crop-probability-table.component'; +import { CropProbabilityMaterialModule } from './material.module'; +import { CropProbabilityTableHeaderComponent } from './crop-probability-table-header/crop-probability-table-header.component'; +import { FormsModule } from '@angular/forms'; +import { CommonModule } from '@angular/common'; + +const components = [ + CropProbabilityTableComponent, + CropProbabilityTableHeaderComponent, +]; + +@NgModule({ + imports: [CommonModule, FormsModule, CropProbabilityMaterialModule], + exports: components, + declarations: components, + providers: [], +}) +export class CropProbabilityToolComponentsModule {} diff --git a/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.component.html b/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.component.html new file mode 100644 index 000000000..5cf4ab0de --- /dev/null +++ b/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.component.html @@ -0,0 +1 @@ + diff --git a/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.component.scss b/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.component.spec.ts b/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.component.spec.ts new file mode 100644 index 000000000..7d04862b9 --- /dev/null +++ b/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeComponent } from './home.component'; + +describe('HomeComponent', () => { + let component: HomeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [HomeComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(HomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.component.ts b/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.component.ts new file mode 100644 index 000000000..17d922722 --- /dev/null +++ b/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'picsa-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.scss'], +}) +export class HomeComponent {} diff --git a/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.module.ts b/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.module.ts new file mode 100644 index 000000000..9043717ea --- /dev/null +++ b/apps/picsa-tools/crop-probability-tool/src/app/pages/home/home.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { Route, RouterModule } from '@angular/router'; + +import { CropProbabilityToolComponentsModule } from '../../components/components.module'; +import { HomeComponent } from './home.component'; +import { CommonModule } from '@angular/common'; +import { PicsaTranslateModule } from '@picsa/shared/modules'; + +const routes: Route[] = [ + { + path: '', + component: HomeComponent, + }, +]; + +@NgModule({ + imports: [ + CommonModule, + CropProbabilityToolComponentsModule, + RouterModule.forChild(routes), + PicsaTranslateModule, + ], + exports: [], + declarations: [HomeComponent], + providers: [], +}) +export class HomeModule {} diff --git a/apps/picsa-tools/crop-probability-tool/src/index.html b/apps/picsa-tools/crop-probability-tool/src/index.html index 4a723acc7..1879d349d 100644 --- a/apps/picsa-tools/crop-probability-tool/src/index.html +++ b/apps/picsa-tools/crop-probability-tool/src/index.html @@ -8,6 +8,6 @@ - + diff --git a/apps/picsa-tools/resources-tool/src/app/app.module-embedded.ts b/apps/picsa-tools/resources-tool/src/app/app.module-embedded.ts index 735adf230..381977298 100644 --- a/apps/picsa-tools/resources-tool/src/app/app.module-embedded.ts +++ b/apps/picsa-tools/resources-tool/src/app/app.module-embedded.ts @@ -40,7 +40,6 @@ export class BaseModule { @NgModule() export class ResourcesToolModule { static forRoot(config: EmbeddedConfig): ModuleWithProviders { - console.log('resources module forRoot', config); return { ngModule: BaseModule, providers: [ diff --git a/package.json b/package.json index e133a9762..7031d2870 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "picsa-apps", - "version": "3.18.0", + "version": "3.19.0", "license": "See LICENSE", "scripts": { "ng": "nx", diff --git a/tsconfig.base.json b/tsconfig.base.json index aa1fe57bc..224d1caa4 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -26,6 +26,7 @@ "@picsa/climate/*": ["apps/picsa-tools/climate-tool/*"], "@picsa/components": ["libs/components/src/index.ts"], "@picsa/configuration": ["libs/configuration/src/index.ts"], + "@picsa/crop-probability/*": ["apps/picsa-tools/crop-probability-tool/*"], "@picsa/dashboard/*": ["apps/sites/dashboard/*"], "@picsa/environments": ["libs/environments/src/index.ts"], "@picsa/extension/*": ["apps/native/extension-toolkit/*"],