Auf dem Trail passt nicht immer ein vorgefertigter Typ - "Wespennest am Anlieger" legt niemand vorher an. Der Marker-Dialog fuehrt deshalb ein Dropdown, dessen erste Zeile "Eigener Typ" ist und ein Textfeld oeffnet. Das Icon steht ab jetzt am Marker selbst. Ein gewaehlter Typ schlaegt seines vor, ueberschreiben laesst es sich jederzeit: Dieselbe Art Hindernis sieht nicht immer gleich aus. Der Picker ist deshalb immer sichtbar und wandert als eigene Komponente auch in die Flag-Verwaltung. Schema: trail_markers.flag ist nicht mehr Pflicht, dafuer gibt es label und icon. Bestehende Marker bleiben gueltig - ohne eigene Angaben faellt die Anzeige auf den Typ zurueck. Damit braucht ein Trail auch keine Flag-Typen mehr, um ueberhaupt Meldungen aufnehmen zu koennen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014dh9W1i7aLSdPYJzQPid5o
57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
/// <reference path="../pb_data/types.d.ts" />
|
|
|
|
// Marker dürfen einen eigenen Text und ein eigenes Icon tragen.
|
|
//
|
|
// Bisher musste jede Meldung auf einen vorgefertigten Flag-Typ zeigen. Auf
|
|
// dem Trail passt aber nicht immer einer: „Wespennest am Anlieger" legt
|
|
// niemand vorher als Typ an. Deshalb:
|
|
//
|
|
// - flag ist nicht mehr Pflicht. Fehlt es, trägt der Marker seinen eigenen
|
|
// Text in label.
|
|
// - icon steht am Marker selbst. Beim Wählen eines Typs kommt dessen Icon als
|
|
// Vorschlag; ändern lässt es sich trotzdem, denn dieselbe Art Hindernis
|
|
// sieht nicht immer gleich aus.
|
|
//
|
|
// Bestehende Marker bleiben unverändert gültig: Sie haben ein flag und weder
|
|
// label noch icon, die Anzeige fällt dann auf den Typ zurück.
|
|
|
|
migrate((app) => {
|
|
const markers = app.findCollectionByNameOrId('trail_markers')
|
|
|
|
const flag = markers.fields.getByName('flag')
|
|
if (flag) {
|
|
flag.required = false
|
|
}
|
|
|
|
if (!markers.fields.getByName('label')) {
|
|
markers.fields.add(new Field({
|
|
id: 'text_marker_label',
|
|
name: 'label',
|
|
type: 'text',
|
|
max: 120,
|
|
}))
|
|
}
|
|
|
|
if (!markers.fields.getByName('icon')) {
|
|
markers.fields.add(new Field({
|
|
id: 'text_marker_icon',
|
|
name: 'icon',
|
|
type: 'text',
|
|
max: 60,
|
|
}))
|
|
}
|
|
|
|
app.save(markers)
|
|
}, (app) => {
|
|
const markers = app.findCollectionByNameOrId('trail_markers')
|
|
|
|
const flag = markers.fields.getByName('flag')
|
|
if (flag) {
|
|
flag.required = true
|
|
}
|
|
|
|
markers.fields.removeByName('label')
|
|
markers.fields.removeByName('icon')
|
|
|
|
app.save(markers)
|
|
})
|