- Poll only rooms returned by /api/v1/rooms so calls are never wasted on sensor-less rooms; new rooms are picked up automatically after deploy - Replace timer(0, interval) with concat() for synchronous initial emission - Remove mock fallback from getLatestReadingForRoom / getHistoryForRoom so the UI reflects real API state instead of hiding errors with fake data - Add Basic-Auth interceptor and dev proxy (proxy.conf.json) for local dev - Replace hardcoded API credentials with __API_USERNAME__ / __API_PASSWORD__ placeholders for CI-time injection from GitHub Secrets - Add "Very Poor" CO2 level (1500-2000 ppm) to the 6-level scale - Update "No sensor installed" copy to "No data available currently" - Handle empty history state in room-details-panel Closes #30
140 lines
3.8 KiB
JSON
140 lines
3.8 KiB
JSON
{
|
|
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
|
"version": 1,
|
|
"cli": {
|
|
"packageManager": "npm",
|
|
"analytics": false,
|
|
"schematicCollections": [
|
|
"@angular-eslint/schematics"
|
|
]
|
|
},
|
|
"newProjectRoot": "projects",
|
|
"projects": {
|
|
"dashboard": {
|
|
"projectType": "application",
|
|
"schematics": {
|
|
"@schematics/angular:component": {
|
|
"style": "scss",
|
|
"standalone": true,
|
|
"changeDetection": "OnPush"
|
|
},
|
|
"@schematics/angular:directive": {
|
|
"standalone": true
|
|
},
|
|
"@schematics/angular:pipe": {
|
|
"standalone": true
|
|
}
|
|
},
|
|
"root": "",
|
|
"sourceRoot": "src",
|
|
"prefix": "app",
|
|
"architect": {
|
|
"build": {
|
|
"builder": "@angular-devkit/build-angular:application",
|
|
"options": {
|
|
"outputPath": "dist/dashboard",
|
|
"index": "src/index.html",
|
|
"browser": "src/main.ts",
|
|
"polyfills": [
|
|
"zone.js"
|
|
],
|
|
"tsConfig": "tsconfig.app.json",
|
|
"inlineStyleLanguage": "scss",
|
|
"assets": [
|
|
{
|
|
"glob": "**/*",
|
|
"input": "public"
|
|
}
|
|
],
|
|
"styles": [
|
|
"@angular/material/prebuilt-themes/cyan-orange.css",
|
|
"src/styles.scss"
|
|
],
|
|
"scripts": []
|
|
},
|
|
"configurations": {
|
|
"production": {
|
|
"budgets": [
|
|
{
|
|
"type": "initial",
|
|
"maximumWarning": "500kB",
|
|
"maximumError": "1MB"
|
|
},
|
|
{
|
|
"type": "anyComponentStyle",
|
|
"maximumWarning": "10kB",
|
|
"maximumError": "20kB"
|
|
}
|
|
],
|
|
"outputHashing": "all",
|
|
"fileReplacements": [
|
|
{
|
|
"replace": "src/environments/environment.ts",
|
|
"with": "src/environments/environment.prod.ts"
|
|
}
|
|
]
|
|
},
|
|
"development": {
|
|
"optimization": false,
|
|
"extractLicenses": false,
|
|
"sourceMap": true
|
|
}
|
|
},
|
|
"defaultConfiguration": "production"
|
|
},
|
|
"serve": {
|
|
"builder": "@angular-devkit/build-angular:dev-server",
|
|
"options": {
|
|
"port": 4200,
|
|
"open": true,
|
|
"proxyConfig": "proxy.conf.json"
|
|
},
|
|
"configurations": {
|
|
"production": {
|
|
"buildTarget": "dashboard:build:production"
|
|
},
|
|
"development": {
|
|
"buildTarget": "dashboard:build:development"
|
|
}
|
|
},
|
|
"defaultConfiguration": "development"
|
|
},
|
|
"extract-i18n": {
|
|
"builder": "@angular-devkit/build-angular:extract-i18n"
|
|
},
|
|
"test": {
|
|
"builder": "@angular-devkit/build-angular:karma",
|
|
"options": {
|
|
"polyfills": [
|
|
"zone.js",
|
|
"zone.js/testing"
|
|
],
|
|
"tsConfig": "tsconfig.spec.json",
|
|
"inlineStyleLanguage": "scss",
|
|
"assets": [
|
|
{
|
|
"glob": "**/*",
|
|
"input": "public"
|
|
}
|
|
],
|
|
"styles": [
|
|
"@angular/material/prebuilt-themes/cyan-orange.css",
|
|
"src/styles.scss"
|
|
],
|
|
"scripts": []
|
|
}
|
|
},
|
|
"lint": {
|
|
"builder": "@angular-eslint/builder:lint",
|
|
"options": {
|
|
"lintFilePatterns": [
|
|
"src/**/*.ts",
|
|
"src/**/*.html"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|