diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/areas/area-list.component.ts b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/areas/area-list.component.ts
index b1a5aded..66722a5f 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/areas/area-list.component.ts
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/areas/area-list.component.ts
@@ -11,6 +11,7 @@ import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';
+import { RouterLink } from '@angular/router';
import { TranslatePipe } from '@ngx-translate/core';
import { AreaDefinition, GeofenceData, Location } from '../../core/models';
@@ -52,6 +53,7 @@ interface GroupInfo {
AreaMapComponent,
LanguageSelectorComponent,
RegionSelectorComponent,
+ RouterLink,
],
selector: 'app-area-list',
standalone: true,
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/shared/components/places-dialog/places-dialog.component.html b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/places/places.component.html
similarity index 80%
rename from Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/shared/components/places-dialog/places-dialog.component.html
rename to Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/places/places.component.html
index 2f9bcc73..64fa6319 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/shared/components/places-dialog/places-dialog.component.html
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/places/places.component.html
@@ -1,9 +1,18 @@
-
{{ 'WHERE.PLACES_TITLE' | translate }}
+
+
+
{{ 'WHERE.PLACES_TITLE' | translate }}
+
{{ 'WHERE.PLACES_PAGE_DESC' | translate }}
+
+
+
-
- @if (loading()) {
-
- } @else {
+@if (loading()) {
+
+} @else {
+
@if (places.pin(); as pin) {
my_location
@@ -36,13 +45,5 @@
{{ 'WHERE.PLACES_TITLE' | translate }}
}
}
- }
-
-
-
-
-
-
+
+}
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/shared/components/places-dialog/places-dialog.component.scss b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/places/places.component.scss
similarity index 100%
rename from Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/shared/components/places-dialog/places-dialog.component.scss
rename to Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/places/places.component.scss
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/shared/components/places-dialog/places-dialog.component.spec.ts b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/places/places.component.spec.ts
similarity index 88%
rename from Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/shared/components/places-dialog/places-dialog.component.spec.ts
rename to Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/places/places.component.spec.ts
index 5182f1ec..212a1a2f 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/shared/components/places-dialog/places-dialog.component.spec.ts
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/places/places.component.spec.ts
@@ -1,16 +1,16 @@
import { HttpErrorResponse, provideHttpClient } from '@angular/common/http';
import { provideHttpClientTesting } from '@angular/common/http/testing';
import { TestBed } from '@angular/core/testing';
-import { MatDialog, MatDialogRef } from '@angular/material/dialog';
+import { MatDialog } from '@angular/material/dialog';
import { MatSnackBar } from '@angular/material/snack-bar';
import { provideTranslateService } from '@ngx-translate/core';
import { of, throwError } from 'rxjs';
-import { PlacesDialogComponent } from './places-dialog.component';
-import { ConfigService } from '../../../core/services/config.service';
-import { PlacesService } from '../../../core/services/places.service';
+import { PlacesComponent } from './places.component';
+import { ConfigService } from '../../core/services/config.service';
+import { PlacesService } from '../../core/services/places.service';
-describe('PlacesDialogComponent', () => {
+describe('PlacesComponent', () => {
let dialog: { open: jest.Mock };
let places: {
add: jest.Mock;
@@ -26,7 +26,7 @@ describe('PlacesDialogComponent', () => {
results.forEach(result => dialog.open.mockReturnValueOnce({ afterClosed: () => of(result) }));
}
- function create(): PlacesDialogComponent {
+ function create(): PlacesComponent {
dialog = { open: jest.fn() };
snackBar = { open: jest.fn() };
places = {
@@ -41,7 +41,6 @@ describe('PlacesDialogComponent', () => {
TestBed.configureTestingModule({
providers: [
provideTranslateService(),
- { provide: MatDialogRef, useValue: { close: jest.fn() } },
{ provide: MatDialog, useValue: dialog },
{ provide: MatSnackBar, useValue: snackBar },
{ provide: PlacesService, useValue: places },
@@ -49,12 +48,12 @@ describe('PlacesDialogComponent', () => {
provideHttpClient(),
provideHttpClientTesting(),
],
- imports: [PlacesDialogComponent],
+ imports: [PlacesComponent],
});
// MatDialogModule is in the component's own imports, so its MatDialog wins over the TestBed
// provider. Overriding at the component injector is the only level that beats it.
- TestBed.overrideComponent(PlacesDialogComponent, {
+ TestBed.overrideComponent(PlacesComponent, {
set: {
providers: [
{ provide: MatDialog, useValue: dialog },
@@ -63,7 +62,7 @@ describe('PlacesDialogComponent', () => {
},
});
- const component = TestBed.createComponent(PlacesDialogComponent).componentInstance;
+ const component = TestBed.createComponent(PlacesComponent).componentInstance;
component.ngOnInit();
return component;
}
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/shared/components/places-dialog/places-dialog.component.ts b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/places/places.component.ts
similarity index 83%
rename from Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/shared/components/places-dialog/places-dialog.component.ts
rename to Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/places/places.component.ts
index 135009ea..a2f74706 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/shared/components/places-dialog/places-dialog.component.ts
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/app/modules/places/places.component.ts
@@ -2,34 +2,39 @@ import { DecimalPipe } from '@angular/common';
import { HttpErrorResponse } from '@angular/common/http';
import { ChangeDetectionStrategy, Component, OnInit, inject, signal } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
-import { MatDialog, MatDialogModule } from '@angular/material/dialog';
+import { MatDialog } from '@angular/material/dialog';
import { MatIconModule } from '@angular/material/icon';
import { MatListModule } from '@angular/material/list';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatSnackBar } from '@angular/material/snack-bar';
import { TranslatePipe, TranslateService } from '@ngx-translate/core';
-import { Location, SavedPlace } from '../../../core/models';
-import { PlacesService } from '../../../core/services/places.service';
-import { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';
-import { LocationDialogComponent } from '../location-dialog/location-dialog.component';
+import { Location, SavedPlace } from '../../core/models';
+import { PlacesService } from '../../core/services/places.service';
+import { ConfirmDialogComponent } from '../../shared/components/confirm-dialog/confirm-dialog.component';
+import { LocationDialogComponent } from '../../shared/components/location-dialog/location-dialog.component';
/**
* The places a user's alarms can be aimed at: the profile pin, plus whatever they have named.
*
+ * A page rather than a dialog, and in the nav beside Areas and My Geofences, because these are the
+ * user's data and not a preference. The Areas page already frames alerts as reaching you by area or by
+ * a radius from a point; named points are more of the second, so hiding them in a settings menu split
+ * one idea across two surfaces.
+ *
* Adding a place borrows the location dialog as a coordinate picker rather than growing a second map,
* then asks for the name separately, because picking a point and naming it are two decisions and
* putting them on one screen makes both feel like a form.
*/
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
- imports: [DecimalPipe, MatButtonModule, MatDialogModule, MatIconModule, MatListModule, MatProgressSpinnerModule, TranslatePipe],
- selector: 'app-places-dialog',
+ imports: [DecimalPipe, MatButtonModule, MatIconModule, MatListModule, MatProgressSpinnerModule, TranslatePipe],
+ selector: 'app-places',
standalone: true,
- styleUrl: './places-dialog.component.scss',
- templateUrl: './places-dialog.component.html',
+ styleUrl: './places.component.scss',
+ templateUrl: './places.component.html',
})
-export class PlacesDialogComponent implements OnInit {
+export class PlacesComponent implements OnInit {
private readonly dialog = inject(MatDialog);
private readonly snackBar = inject(MatSnackBar);
private readonly translate = inject(TranslateService);
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/da.json b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/da.json
index 02cb9583..654abbe4 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/da.json
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/da.json
@@ -1,5 +1,6 @@
{
"NAV": {
+ "PLACES": "Steder",
"GROUP_ALARMS": "Alarmer",
"GROUP_SETTINGS": "Indstillinger",
"GROUP_ADMIN": "Admin",
@@ -63,8 +64,7 @@
"ACCENT_MYSTIC": "Mystic",
"ACCENT_VALOR": "Valor",
"ACCENT_INSTINCT": "Instinct",
- "ALERT_DEFAULTS": "Standardindstillinger for advarsler",
- "PLACES": "Steder"
+ "ALERT_DEFAULTS": "Standardindstillinger for advarsler"
},
"SHORTCUTS": {
"TITLE": "Tastaturgenveje",
@@ -775,6 +775,7 @@
"SNACK_UPDATED": "Max Battle-alarm opdateret"
},
"AREAS": {
+ "MANAGE_PLACES": "Administrer steder",
"PAGE_TITLE": "Områder og placering",
"PAGE_DESC": "Kontrollér, hvor du modtager notifikationer.",
"METHOD_AREAS": "Områder",
@@ -1722,6 +1723,7 @@
"LAST_PAGE": "Sidste side"
},
"WHERE": {
+ "PLACES_PAGE_DESC": "Navngivne punkter, dine beskeder kan rettes mod i stedet for din position.",
"ADD_PLACE": "Tilføj et sted",
"AREAS_LABEL": "Områder",
"AREA_LIST_MORE": "{{areas}} og {{count}} mere",
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/de.json b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/de.json
index 41574272..a9facc61 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/de.json
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/de.json
@@ -1,5 +1,6 @@
{
"NAV": {
+ "PLACES": "Orte",
"GROUP_ALARMS": "Alarme",
"GROUP_SETTINGS": "Einstellungen",
"GROUP_ADMIN": "Admin",
@@ -63,8 +64,7 @@
"ACCENT_MYSTIC": "Mystic",
"ACCENT_VALOR": "Valor",
"ACCENT_INSTINCT": "Instinct",
- "ALERT_DEFAULTS": "Benachrichtigungs-Standards",
- "PLACES": "Orte"
+ "ALERT_DEFAULTS": "Benachrichtigungs-Standards"
},
"SHORTCUTS": {
"TITLE": "Tastenkürzel",
@@ -775,6 +775,7 @@
"SNACK_UPDATED": "Dynamax-Kampfalarm aktualisiert"
},
"AREAS": {
+ "MANAGE_PLACES": "Orte verwalten",
"PAGE_TITLE": "Gebiete & Standort",
"PAGE_DESC": "Bestimme, wo du Benachrichtigungen erhältst.",
"METHOD_AREAS": "Gebiete",
@@ -1722,6 +1723,7 @@
"LAST_PAGE": "Letzte Seite"
},
"WHERE": {
+ "PLACES_PAGE_DESC": "Benannte Punkte, auf die deine Meldungen statt auf deinen Standort ausgerichtet werden können.",
"ADD_PLACE": "Ort hinzufügen",
"AREAS_LABEL": "Gebiete",
"AREA_LIST_MORE": "{{areas}} und {{count}} weitere",
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/en.json b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/en.json
index 8994cd64..ad1f0068 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/en.json
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/en.json
@@ -1,5 +1,6 @@
{
"NAV": {
+ "PLACES": "Places",
"GROUP_ALARMS": "Alarms",
"GROUP_SETTINGS": "Settings",
"GROUP_ADMIN": "Admin",
@@ -63,8 +64,7 @@
"ACCENT_MYSTIC": "Mystic",
"ACCENT_VALOR": "Valor",
"ACCENT_INSTINCT": "Instinct",
- "ALERT_DEFAULTS": "Alert Defaults",
- "PLACES": "Places"
+ "ALERT_DEFAULTS": "Alert Defaults"
},
"SHORTCUTS": {
"TITLE": "Keyboard Shortcuts",
@@ -775,6 +775,7 @@
"LEVEL_GMAX_LEGENDARY": "Legendary Gigantamax"
},
"AREAS": {
+ "MANAGE_PLACES": "Manage places",
"PAGE_TITLE": "Areas & Location",
"PAGE_DESC": "Control where you receive notifications.",
"METHOD_AREAS": "Areas",
@@ -1722,6 +1723,7 @@
"LAST_PAGE": "Last page"
},
"WHERE": {
+ "PLACES_PAGE_DESC": "Named points your alerts can be aimed at, instead of your pin.",
"EDIT_FROM_CARD": "Change this from the card.",
"MEASURED_FROM": "Measured from",
"SCOPE_SAVED": "Where updated.",
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/es.json b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/es.json
index 5e08c247..e7cf2f1a 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/es.json
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/es.json
@@ -1,5 +1,6 @@
{
"NAV": {
+ "PLACES": "Lugares",
"GROUP_ALARMS": "Alarmas",
"GROUP_SETTINGS": "Ajustes",
"GROUP_ADMIN": "Admin",
@@ -63,8 +64,7 @@
"ACCENT_MYSTIC": "Mystic",
"ACCENT_VALOR": "Valor",
"ACCENT_INSTINCT": "Instinct",
- "ALERT_DEFAULTS": "Valores predeterminados de alertas",
- "PLACES": "Lugares"
+ "ALERT_DEFAULTS": "Valores predeterminados de alertas"
},
"SHORTCUTS": {
"TITLE": "Atajos de teclado",
@@ -775,6 +775,7 @@
"SNACK_UPDATED": "Alarma de Combate Dinamax actualizada"
},
"AREAS": {
+ "MANAGE_PLACES": "Gestionar lugares",
"PAGE_TITLE": "Zonas y ubicación",
"PAGE_DESC": "Controla dónde recibes las notificaciones.",
"METHOD_AREAS": "Zonas",
@@ -1722,6 +1723,7 @@
"LAST_PAGE": "Última página"
},
"WHERE": {
+ "PLACES_PAGE_DESC": "Puntos con nombre a los que puedes dirigir tus alertas en vez de a tu ubicación.",
"ADD_PLACE": "Añadir un lugar",
"AREAS_LABEL": "Áreas",
"AREA_LIST_MORE": "{{areas}} y {{count}} más",
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/fr.json b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/fr.json
index 8944af44..371368b5 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/fr.json
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/fr.json
@@ -1,5 +1,6 @@
{
"NAV": {
+ "PLACES": "Lieux",
"GROUP_ALARMS": "Alarmes",
"GROUP_SETTINGS": "Paramètres",
"GROUP_ADMIN": "Admin",
@@ -63,8 +64,7 @@
"ACCENT_MYSTIC": "Mystic",
"ACCENT_VALOR": "Valor",
"ACCENT_INSTINCT": "Instinct",
- "ALERT_DEFAULTS": "Réglages par défaut des alertes",
- "PLACES": "Lieux"
+ "ALERT_DEFAULTS": "Réglages par défaut des alertes"
},
"SHORTCUTS": {
"TITLE": "Raccourcis clavier",
@@ -775,6 +775,7 @@
"SNACK_UPDATED": "Alarme Combat Dynamax mise à jour"
},
"AREAS": {
+ "MANAGE_PLACES": "Gérer les lieux",
"PAGE_TITLE": "Zones et localisation",
"PAGE_DESC": "Contrôle où tu reçois les notifications.",
"METHOD_AREAS": "Zones",
@@ -1722,6 +1723,7 @@
"LAST_PAGE": "Dernière page"
},
"WHERE": {
+ "PLACES_PAGE_DESC": "Des points nommés vers lesquels diriger vos alertes, au lieu de votre position.",
"ADD_PLACE": "Ajouter un lieu",
"AREAS_LABEL": "Zones",
"AREA_LIST_MORE": "{{areas}} et {{count}} autres",
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/it.json b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/it.json
index d79dd5a3..20642ce1 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/it.json
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/it.json
@@ -1,5 +1,6 @@
{
"NAV": {
+ "PLACES": "Luoghi",
"GROUP_ALARMS": "Allarmi",
"GROUP_SETTINGS": "Impostazioni",
"GROUP_ADMIN": "Amministrazione",
@@ -63,8 +64,7 @@
"ACCENT_MYSTIC": "Mystic",
"ACCENT_VALOR": "Valor",
"ACCENT_INSTINCT": "Instinct",
- "ALERT_DEFAULTS": "Impostazioni predefinite avvisi",
- "PLACES": "Luoghi"
+ "ALERT_DEFAULTS": "Impostazioni predefinite avvisi"
},
"SHORTCUTS": {
"TITLE": "Scorciatoie da Tastiera",
@@ -775,6 +775,7 @@
"SNACK_UPDATED": "Allarme Lotta Dynamax aggiornato"
},
"AREAS": {
+ "MANAGE_PLACES": "Gestisci i luoghi",
"PAGE_TITLE": "Aree e Posizione",
"PAGE_DESC": "Controlla dove ricevi le notifiche.",
"METHOD_AREAS": "Aree",
@@ -1722,6 +1723,7 @@
"LAST_PAGE": "Ultima pagina"
},
"WHERE": {
+ "PLACES_PAGE_DESC": "Punti con un nome a cui puntare i tuoi avvisi, al posto della tua posizione.",
"ADD_PLACE": "Aggiungi un luogo",
"AREAS_LABEL": "Aree",
"AREA_LIST_MORE": "{{areas}} e altre {{count}}",
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/nl.json b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/nl.json
index cc8ed20c..5d6a44e6 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/nl.json
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/nl.json
@@ -1,5 +1,6 @@
{
"NAV": {
+ "PLACES": "Plaatsen",
"GROUP_ALARMS": "Alarmen",
"GROUP_SETTINGS": "Instellingen",
"GROUP_ADMIN": "Beheer",
@@ -63,8 +64,7 @@
"ACCENT_MYSTIC": "Mystic",
"ACCENT_VALOR": "Valor",
"ACCENT_INSTINCT": "Instinct",
- "ALERT_DEFAULTS": "Standaardinstellingen meldingen",
- "PLACES": "Plaatsen"
+ "ALERT_DEFAULTS": "Standaardinstellingen meldingen"
},
"SHORTCUTS": {
"TITLE": "Sneltoetsen",
@@ -775,6 +775,7 @@
"SNACK_UPDATED": "Max Battle-alarm bijgewerkt"
},
"AREAS": {
+ "MANAGE_PLACES": "Plaatsen beheren",
"PAGE_TITLE": "Gebieden & Locatie",
"PAGE_DESC": "Bepaal waar je meldingen ontvangt.",
"METHOD_AREAS": "Gebieden",
@@ -1722,6 +1723,7 @@
"LAST_PAGE": "Laatste pagina"
},
"WHERE": {
+ "PLACES_PAGE_DESC": "Benoemde punten waar je meldingen op gericht kunnen worden, in plaats van je locatie.",
"ADD_PLACE": "Plaats toevoegen",
"AREAS_LABEL": "Gebieden",
"AREA_LIST_MORE": "{{areas}} en nog {{count}}",
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/pl.json b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/pl.json
index 19f4f12b..81dfed11 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/pl.json
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/pl.json
@@ -1,5 +1,6 @@
{
"NAV": {
+ "PLACES": "Miejsca",
"GROUP_ALARMS": "Alarmy",
"GROUP_SETTINGS": "Ustawienia",
"GROUP_ADMIN": "Admin",
@@ -63,8 +64,7 @@
"ACCENT_MYSTIC": "Mystic",
"ACCENT_VALOR": "Valor",
"ACCENT_INSTINCT": "Instinct",
- "ALERT_DEFAULTS": "Domyślne ustawienia alertów",
- "PLACES": "Miejsca"
+ "ALERT_DEFAULTS": "Domyślne ustawienia alertów"
},
"SHORTCUTS": {
"TITLE": "Skróty klawiszowe",
@@ -775,6 +775,7 @@
"SNACK_UPDATED": "Zaktualizowano alarm Max Battle"
},
"AREAS": {
+ "MANAGE_PLACES": "Zarządzaj miejscami",
"PAGE_TITLE": "Obszary i lokalizacja",
"PAGE_DESC": "Kontroluj, gdzie otrzymujesz powiadomienia.",
"METHOD_AREAS": "Obszary",
@@ -1722,6 +1723,7 @@
"LAST_PAGE": "Ostatnia strona"
},
"WHERE": {
+ "PLACES_PAGE_DESC": "Nazwane punkty, na które możesz kierować alerty zamiast na swoją lokalizację.",
"ADD_PLACE": "Dodaj miejsce",
"AREAS_LABEL": "Obszary",
"AREA_LIST_MORE": "{{areas}} i jeszcze {{count}}",
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/pt-BR.json b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/pt-BR.json
index bf0627a3..da02ccc4 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/pt-BR.json
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/pt-BR.json
@@ -1,5 +1,6 @@
{
"NAV": {
+ "PLACES": "Locais",
"GROUP_ALARMS": "Alarmes",
"GROUP_SETTINGS": "Configurações",
"GROUP_ADMIN": "Admin",
@@ -63,8 +64,7 @@
"ACCENT_MYSTIC": "Mystic",
"ACCENT_VALOR": "Valor",
"ACCENT_INSTINCT": "Instinct",
- "ALERT_DEFAULTS": "Padrões de alertas",
- "PLACES": "Locais"
+ "ALERT_DEFAULTS": "Padrões de alertas"
},
"SHORTCUTS": {
"TITLE": "Atalhos do Teclado",
@@ -775,6 +775,7 @@
"SNACK_UPDATED": "Alarme de Batalha Max atualizado"
},
"AREAS": {
+ "MANAGE_PLACES": "Gerenciar locais",
"PAGE_TITLE": "Áreas e Localização",
"PAGE_DESC": "Controle onde você recebe notificações.",
"METHOD_AREAS": "Áreas",
@@ -1722,6 +1723,7 @@
"LAST_PAGE": "Última página"
},
"WHERE": {
+ "PLACES_PAGE_DESC": "Pontos nomeados para onde direcionar seus alertas, em vez da sua localização.",
"ADD_PLACE": "Adicionar um local",
"AREAS_LABEL": "Áreas",
"AREA_LIST_MORE": "{{areas}} e mais {{count}}",
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/pt.json b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/pt.json
index 39ae39ea..950d530a 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/pt.json
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/pt.json
@@ -1,5 +1,6 @@
{
"NAV": {
+ "PLACES": "Locais",
"GROUP_ALARMS": "Alarmes",
"GROUP_SETTINGS": "Definições",
"GROUP_ADMIN": "Administração",
@@ -63,8 +64,7 @@
"ACCENT_MYSTIC": "Mystic",
"ACCENT_VALOR": "Valor",
"ACCENT_INSTINCT": "Instinct",
- "ALERT_DEFAULTS": "Padrões de alertas",
- "PLACES": "Locais"
+ "ALERT_DEFAULTS": "Padrões de alertas"
},
"SHORTCUTS": {
"TITLE": "Atalhos de Teclado",
@@ -775,6 +775,7 @@
"SNACK_UPDATED": "Alarme de Combate Max atualizado"
},
"AREAS": {
+ "MANAGE_PLACES": "Gerir locais",
"PAGE_TITLE": "Áreas e Localização",
"PAGE_DESC": "Controla onde recebes notificações.",
"METHOD_AREAS": "Áreas",
@@ -1722,6 +1723,7 @@
"LAST_PAGE": "Última página"
},
"WHERE": {
+ "PLACES_PAGE_DESC": "Pontos com nome para onde podes dirigir os teus alertas, em vez da tua localização.",
"ADD_PLACE": "Adicionar um local",
"AREAS_LABEL": "Áreas",
"AREA_LIST_MORE": "{{areas}} e mais {{count}}",
diff --git a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/sv.json b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/sv.json
index a373cce0..d93470f7 100644
--- a/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/sv.json
+++ b/Applications/Pgan.PoracleWebNet.App/ClientApp/src/assets/i18n/sv.json
@@ -1,5 +1,6 @@
{
"NAV": {
+ "PLACES": "Platser",
"GROUP_ALARMS": "Larm",
"GROUP_SETTINGS": "Inställningar",
"GROUP_ADMIN": "Admin",
@@ -63,8 +64,7 @@
"ACCENT_MYSTIC": "Mystic",
"ACCENT_VALOR": "Valor",
"ACCENT_INSTINCT": "Instinct",
- "ALERT_DEFAULTS": "Standardinställningar för aviseringar",
- "PLACES": "Platser"
+ "ALERT_DEFAULTS": "Standardinställningar för aviseringar"
},
"SHORTCUTS": {
"TITLE": "Kortkommandon",
@@ -775,6 +775,7 @@
"SNACK_UPDATED": "Max Battle-larm uppdaterat"
},
"AREAS": {
+ "MANAGE_PLACES": "Hantera platser",
"PAGE_TITLE": "Områden och plats",
"PAGE_DESC": "Kontrollera var du tar emot notiser.",
"METHOD_AREAS": "Områden",
@@ -1722,6 +1723,7 @@
"LAST_PAGE": "Sista sidan"
},
"WHERE": {
+ "PLACES_PAGE_DESC": "Namngivna punkter som dina aviseringar kan riktas mot i stället för din position.",
"ADD_PLACE": "Lägg till en plats",
"AREAS_LABEL": "Områden",
"AREA_LIST_MORE": "{{areas}} och {{count}} till",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c0e82f81..3048e1bd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,15 +9,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
+- **Places.** A page in the sidebar beside Areas and My Geofences: your pin, plus whatever points you name. Adding one borrows the existing location map as a picker rather than growing a second one, and naming is a separate step because picking a point and naming it are two decisions. Deleting a place that alerts still point at says how many and refuses, instead of quietly widening them back to your pin. The Areas page's location card links to it, since that page already explains that alerts reach you by area or by a radius from a point and named points are more of the second. Shown only where the location feature is enabled, matching the endpoints it calls ([#730](https://github.com/PGAN-Dev/PoracleWeb.NET/issues/730)).
- **New alarms can start somewhere other than your pin.** Alert Defaults gains a place alongside the radius, and all ten add dialogs now offer a "measured from" selector, so a preference like "within 2 km of work" applies to everything you create instead of being re-picked each time. A place that gets deleted is forgotten rather than left seeding alarms with a label PoracleNG rejects ([#730](https://github.com/PGAN-Dev/PoracleWeb.NET/issues/730)).
- **PVP rules can target mega evolutions.** PoracleNG 5.1.0 ranks megas separately from base forms, so a Pokemon PVP rule now chooses between Base, Mega, Mega X and Mega Y, and the card's PVP badge says which. Works regardless of the server's `include_mega_evolution` setting, which only decides the default for rules that do not ask ([#730](https://github.com/PGAN-Dev/PoracleWeb.NET/issues/730)).
-
- **Every alarm type says where it reaches you, in your own language.** The scope chip now appears on raid, egg, quest, invasion, lure, nest, gym, fort-change and max-battle cards as well as Pokemon, and clicking it opens the same picker. Raids, eggs, quests and max battles got it through the shared alarm-info summary, so four types describe themselves correctly from one implementation rather than four. Edit dialogs show the scope read-only and hide the areas-or-distance control for an area-confined alarm, which that control cannot describe and a save would have had refused. All 37 strings are translated into the ten non-English locales ([#730](https://github.com/PGAN-Dev/PoracleWeb.NET/issues/730)).
-
- **Alarms can be aimed somewhere other than your pin.** PoracleNG 5.1.0 gives every alarm its own delivery scope, and the API now carries it: an alarm can measure its radius from a saved place ("within 2 km of work") or be confined to a set of areas, instead of inheriting the profile's single pin and area list. Saved places are managed at `GET/POST /api/location/places` and `DELETE /api/location/places/{label}`; deleting a place that alarms still point at answers 409 and names them rather than orphaning the label. The three ways a scope can contradict itself — a place and areas together, areas with a radius, a place without one — are refused before anything is written, with wording that says which one to change ([#730](https://github.com/PGAN-Dev/PoracleWeb.NET/issues/730)).
- **Your own geofences work as an alarm's areas.** PoracleNG refuses `override_areas` entries whose fence is not user-selectable, and PoracleWeb serves user-drawn geofences that way deliberately, to keep them out of the bot's area picker — so naming one would have failed the whole write with "area not permitted". Matching never consults that flag, so the permitted names are sent to PoracleNG and the full list is written to the alarm afterwards, then state is reloaded. Verified against PoracleNG 5.1.0's matcher rather than inferred. Tagged `HACK: trusted-set-areas` alongside the existing area workarounds, and removable in one piece if PoracleNG grows a trusted override write ([#730](https://github.com/PGAN-Dev/PoracleWeb.NET/issues/730)).
- **Every alarm can say where it should reach you.** The scope an alarm has always had, inherited and invisible, is now stated on the card and editable per alarm: anywhere in your areas, within a radius of a saved place, or only in specific areas. One shared control reads and writes it wherever it appears, rather than two more fields in each of the nine alarm dialogs. The three options are a radio group because PoracleNG treats them as mutually exclusive, so the combinations it refuses cannot be expressed in the first place ([#730](https://github.com/PGAN-Dev/PoracleWeb.NET/issues/730)).
-- **Places.** The user menu gains a Places screen: your pin, plus whatever you name. Adding one borrows the existing location map as a picker rather than growing a second one, and naming is a separate step because picking a point and naming it are two decisions. Deleting a place that alerts still point at says how many and refuses, instead of quietly widening them back to your pin ([#730](https://github.com/PGAN-Dev/PoracleWeb.NET/issues/730)).
- **The Pokemon card says where each alert reaches you, and lets you change it there.** The chip replaces the old areas-or-distance badge and covers the cases it could not say: within a radius of a saved place, or confined to specific areas. Clicking it opens the scope picker without opening the whole edit dialog. The other nine alarm types follow ([#730](https://github.com/PGAN-Dev/PoracleWeb.NET/issues/730)).
- **New Pokemon alarms can be aimed at a saved place.** The delivery step's radius gains a "measured from" selector: your pin, as before, or any place you have saved. Editing an alarm shows its scope but sends you to the card to change it, so there is one way to do it rather than two that can disagree ([#730](https://github.com/PGAN-Dev/PoracleWeb.NET/issues/730)).