diff options
| author | Valentin <valentin@fricklerhandwerk.de> | 2026-06-07 11:45:00 +0200 |
|---|---|---|
| committer | Valentin <valentin@fricklerhandwerk.de> | 2026-06-07 11:45:00 +0200 |
| commit | 2a94ed352e1a5fdeb0fdba9a5e7ea8aa8f35f027 (patch) | |
| tree | 9b855803f1c2c4f311f13b5df67749375bfbbc74 /www/framework/event.nix | |
| parent | 09fc28b167b135dbc874ea8f4450df432156db6b (diff) | |
Adressvererbung zwischen Terminen über Veranstaltungsort-Kennzeichen
Diffstat (limited to 'www/framework/event.nix')
| -rw-r--r-- | www/framework/event.nix | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/www/framework/event.nix b/www/framework/event.nix index 7dea810..2daa4a2 100644 --- a/www/framework/event.nix +++ b/www/framework/event.nix @@ -1,9 +1,23 @@ { config, ... }: { config.types.event = - event@{ lib, ... }: + event@{ lib, events, ... }: let inherit (lib) mkOption types; + cfg = event.config; + sort-key = e: "${e.date.start} ${e.time.start}"; + prior = + let + candidates = lib.filter ( + e: + e.venue != null && e.venue == cfg.venue && sort-key e < sort-key cfg && !e.address.once + ) (lib.attrValues events); + sorted = lib.sortOn sort-key candidates; + in + if sorted == [ ] then + throw "Kein vorheriger Termin mit gleichem Veranstaltungsort gefunden." + else + lib.last sorted; in { imports = [ config.types.document ]; @@ -144,19 +158,33 @@ type = types.str; example = "Samstag, 20.12.2025 von 15:00 bis 17:00 Uhr"; }; + venue = mkOption { + description = '' + Kennzeichen des Veranstaltungsorts zum Wiederverwenden von Angaben in nachfolgenden Terminen. + ''; + type = with types; nullOr singleLineStr; + default = null; + }; address.name = mkOption { description = '' Eigenname des Veranstaltungsorts ''; type = with types; nullOr str; example = "Treffpunkthaus"; - default = null; + default = if cfg.venue == null then null else prior.address.name; + defaultText = lib.literalMD "Adresse des vorherigen Termins mit gleichem Veranstaltungsort, falls vorhanden."; }; address.text = mkOption { description = '' Ort in Textform ''; type = types.lines; + default = + if cfg.venue == null then + throw "Ohne Veranstaltungsort-Kennzeichen muss die Adresse vollständig angegeben werden." + else + prior.address.text; + defaultText = lib.literalMD "Adresse des vorherigen Termins mit gleichem Veranstaltungsort."; }; address.openstreetmap = mkOption { description = '' @@ -175,6 +203,19 @@ example = { node = 6549438363; }; + default = + if cfg.venue == null then + throw "Ohne Veranstaltungsort-Kennzeichen muss die Adresse vollständig angegeben werden." + else + prior.address.openstreetmap; + defaultText = lib.literalMD "Adresse des vorherigen Termins mit gleichem Veranstaltungsort."; + }; + address.once = mkOption { + description = '' + Wenn gesetzt, wird die Adresse nicht in nachfolgende Termine vererbt. + ''; + type = types.bool; + default = false; }; }; }; |
