Delete Event
>
{{ showArchivedForms ? 'Hide' : 'Show' }} Archived Forms
-
+
Create Form
@@ -552,10 +612,10 @@
Delete Event
[(ngModel)]="event.minObservationForms"
placeholder="No Minimum"
/>
- Minimum number of forms that must be present in an
- observation for this event
+
+ Minimum number of forms that must be present in an observation
+ for this event
+
@@ -567,10 +627,10 @@
Delete Event
[(ngModel)]="event.maxObservationForms"
placeholder="No Maximum"
/>
- Limit the total number of forms that can be added to an
- observation for this event
+
+ Limit the total number of forms that can be added to an
+ observation for this event
+
@@ -629,6 +689,7 @@
Delete Event
diff --git a/web-app/admin/src/app/admin/admin-event/event-details/event-details.component.scss b/web-app/admin/src/app/admin/admin-event/event-details/event-details.component.scss
index 9f9a27e10..2c1088312 100644
--- a/web-app/admin/src/app/admin/admin-event/event-details/event-details.component.scss
+++ b/web-app/admin/src/app/admin/admin-event/event-details/event-details.component.scss
@@ -956,3 +956,16 @@ mat-spinner {
float: inline-end !important;
align-self: flex-end !important;
}
+
+.row-main-link {
+ display: flex;
+ align-items: center;
+ flex: 1 1 auto;
+ min-width: 0;
+ color: inherit;
+}
+
+.row-main-link:hover {
+ color: inherit;
+ text-decoration: none;
+}
\ No newline at end of file
From 6d8ca8d8280b8323f859a9fae428bb77ad0eb26d Mon Sep 17 00:00:00 2001
From: Ryan
Date: Thu, 30 Apr 2026 10:52:08 -0400
Subject: [PATCH 07/19] update to 6.6.5
Co-authored-by: Copilot
---
instance/package.json | 2 +-
package-lock.json | 4 +--
package.json | 2 +-
service/npm-shrinkwrap.json | 4 +--
service/package.json | 2 +-
web-app/package-lock.json | 4 +--
web-app/package.json | 2 +-
web-app/projects/core-lib/package-lock.json | 4 +--
web-app/projects/core-lib/package.json | 2 +-
.../observation-edit-date.component.ts | 26 ++++++++++++++-----
10 files changed, 33 insertions(+), 19 deletions(-)
diff --git a/instance/package.json b/instance/package.json
index 097e22b5c..7f5bfe1ed 100644
--- a/instance/package.json
+++ b/instance/package.json
@@ -1,6 +1,6 @@
{
"name": "@ngageoint/mage.dev-instance",
- "version": "6.6.4",
+ "version": "6.6.5",
"description": "Assemble a Mage Server deployment from the core service, the web-app, and selected plugins. This is primarily a development tool because the dependencies point to relative directories instead of production packages. This can however serve as a starting point to create a production Mage instance package.json.",
"scripts": {
"start": "npm run start:dev",
diff --git a/package-lock.json b/package-lock.json
index 8fca3b0cb..9def111b1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@ngageoint/mage.project",
- "version": "6.6.4",
+ "version": "6.6.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@ngageoint/mage.project",
- "version": "6.6.4",
+ "version": "6.6.5",
"hasInstallScript": true,
"dependencies": {
"@angular/cdk": "^17.3.10",
diff --git a/package.json b/package.json
index 09f6d5f79..ffb9e7239 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "@ngageoint/mage.project",
"description": "This is the root package definition for the mage-server monorepo.",
"private": true,
- "version": "6.6.4",
+ "version": "6.6.5",
"files": [],
"scripts": {
"postinstall": "npm-run-all service:ci web-app:ci arcgis:ci sftp:ci nga-msi:ci",
diff --git a/service/npm-shrinkwrap.json b/service/npm-shrinkwrap.json
index 32d6e7f7f..29108f961 100644
--- a/service/npm-shrinkwrap.json
+++ b/service/npm-shrinkwrap.json
@@ -1,12 +1,12 @@
{
"name": "@ngageoint/mage.service",
- "version": "6.6.4",
+ "version": "6.6.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@ngageoint/mage.service",
- "version": "6.6.4",
+ "version": "6.6.5",
"dependencies": {
"@ngageoint/geopackage": "4.2.6",
"@ngageoint/mongodb-migrations": "1.0.0",
diff --git a/service/package.json b/service/package.json
index bbc251896..021938214 100644
--- a/service/package.json
+++ b/service/package.json
@@ -1,6 +1,6 @@
{
"name": "@ngageoint/mage.service",
- "version": "6.6.4",
+ "version": "6.6.5",
"displayName": "Mage Service",
"description": "Mage is a geospatial situational awareness and data collection platform. The Mage Service is the ReST service API that the Mage client apps use to interact with Mage data.",
"keywords": [
diff --git a/web-app/package-lock.json b/web-app/package-lock.json
index c1e0c9cbf..0deb0b6f4 100644
--- a/web-app/package-lock.json
+++ b/web-app/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@ngageoint/mage.web-app",
- "version": "6.6.4",
+ "version": "6.6.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@ngageoint/mage.web-app",
- "version": "6.6.4",
+ "version": "6.6.5",
"license": "Apache-2.0",
"dependencies": {
"@angular/animations": "17.3.12",
diff --git a/web-app/package.json b/web-app/package.json
index da53c4c69..639532511 100644
--- a/web-app/package.json
+++ b/web-app/package.json
@@ -1,7 +1,7 @@
{
"private": true,
"name": "@ngageoint/mage.web-app",
- "version": "6.6.4",
+ "version": "6.6.5",
"description": "The Mage web-app is the UI for interacting with the Mage service in a web browser.",
"keywords": [
"NGA",
diff --git a/web-app/projects/core-lib/package-lock.json b/web-app/projects/core-lib/package-lock.json
index 6239da91b..3ec3d255a 100644
--- a/web-app/projects/core-lib/package-lock.json
+++ b/web-app/projects/core-lib/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@ngageoint/mage.web-core-lib",
- "version": "6.6.4",
+ "version": "6.6.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@ngageoint/mage.web-core-lib",
- "version": "6.6.4",
+ "version": "6.6.5",
"dependencies": {
"@rollup/plugin-commonjs": "25.0.8",
"@rollup/plugin-node-resolve": "15.3.1",
diff --git a/web-app/projects/core-lib/package.json b/web-app/projects/core-lib/package.json
index b076ffc42..ff95e3bfc 100644
--- a/web-app/projects/core-lib/package.json
+++ b/web-app/projects/core-lib/package.json
@@ -1,6 +1,6 @@
{
"name": "@ngageoint/mage.web-core-lib",
- "version": "6.6.4",
+ "version": "6.6.5",
"repository": {
"type": "git",
"url": "https://github.com/ngageoint/mage-server.git"
diff --git a/web-app/src/app/observation/observation-edit/observation-edit-date/observation-edit-date.component.ts b/web-app/src/app/observation/observation-edit/observation-edit-date/observation-edit-date.component.ts
index 1ace48b42..ccdab60af 100644
--- a/web-app/src/app/observation/observation-edit/observation-edit-date/observation-edit-date.component.ts
+++ b/web-app/src/app/observation/observation-edit/observation-edit-date/observation-edit-date.component.ts
@@ -3,11 +3,14 @@ import {
ElementRef,
Input,
OnChanges,
+ OnDestroy,
SimpleChanges,
ViewChild
} from '@angular/core';
import { UntypedFormGroup, NgModel } from '@angular/forms';
import moment from 'moment';
+import { Subject, Subscription } from 'rxjs';
+import { debounceTime } from 'rxjs/operators';
import { LocalStorageService } from '../../../http/local-storage.service';
@Component({
@@ -15,7 +18,7 @@ import { LocalStorageService } from '../../../http/local-storage.service';
templateUrl: './observation-edit-date.component.html',
styleUrls: ['./observation-edit-date.component.scss']
})
-export class ObservationEditDateComponent implements OnChanges {
+export class ObservationEditDateComponent implements OnChanges, OnDestroy {
@Input() formGroup: UntypedFormGroup;
@Input() definition: any;
@@ -29,8 +32,23 @@ export class ObservationEditDateComponent implements OnChanges {
timeInvalid = false;
second = 0;
+ private timeChange$ = new Subject();
+ private timeChangeSub: Subscription;
+
constructor(private localStorageService: LocalStorageService) {
this.timeZone = localStorageService.getTimeZoneEdit();
+ this.timeChangeSub = this.timeChange$
+ .pipe(debounceTime(300))
+ .subscribe(() => {
+ this.timeInvalid = !this.isValidTime(this.time);
+ if (!this.timeInvalid) {
+ this.setValue(false);
+ }
+ });
+ }
+
+ ngOnDestroy(): void {
+ this.timeChangeSub.unsubscribe();
}
ngOnChanges(changes: SimpleChanges): void {
@@ -67,11 +85,7 @@ export class ObservationEditDateComponent implements OnChanges {
}
onTime(): void {
- this.timeInvalid = !this.isValidTime(this.time);
-
- if (!this.timeInvalid) {
- this.setValue(false);
- }
+ this.timeChange$.next();
}
openTimePicker(event: Event): void {
From 1d8cd40897bbc42a90195359b25913311c729702 Mon Sep 17 00:00:00 2001
From: Ryan Carpenter
Date: Thu, 30 Apr 2026 11:35:11 -0600
Subject: [PATCH 08/19] Table Fixes
---
.../admin-dashboard/admin-dashboard.html | 212 +++++---
.../admin-dashboard/admin-dashboard.scss | 459 +++++++++++-------
.../admin/admin-dashboard/admin-dashboard.ts | 275 +++++++----
.../admin/services/admin-device.service.ts | 77 ++-
.../src/app/logins/logins.component.html | 379 ++++++++-------
.../src/app/logins/logins.component.scss | 152 ++++--
6 files changed, 998 insertions(+), 556 deletions(-)
diff --git a/web-app/admin/src/app/admin/admin-dashboard/admin-dashboard.html b/web-app/admin/src/app/admin/admin-dashboard/admin-dashboard.html
index b6eddb975..d021427f2 100644
--- a/web-app/admin/src/app/admin/admin-dashboard/admin-dashboard.html
+++ b/web-app/admin/src/app/admin/admin-dashboard/admin-dashboard.html
@@ -2,104 +2,188 @@
-
-
-
-
-
-
-
-
- OK
-
-
\ No newline at end of file
+
{{statusTitle}}
+
+
+
+
+ OK
+
\ No newline at end of file
diff --git a/web-app/src/app/datetime-picker/datetime-picker.component.html b/web-app/src/app/datetime-picker/datetime-picker.component.html
index 61ccb705b..e26f9a993 100644
--- a/web-app/src/app/datetime-picker/datetime-picker.component.html
+++ b/web-app/src/app/datetime-picker/datetime-picker.component.html
@@ -2,25 +2,13 @@
{{ title }} Date
-
-
+
+
-
+ ">
Date is required
@@ -34,17 +22,12 @@
{{ title }} Time {{ timezone === 'gmt' ? '(GMT)' : '(Local)' }}
-
+
+
+ schedule
+ Invalid time