Skip to content

refactor(admin): ein Vue-Global für beide Runtimes - #174

Merged
BechsteinDigital merged 1 commit into
mainfrom
feat/one-vue-global
Aug 6, 2026
Merged

refactor(admin): ein Vue-Global für beide Runtimes#174
BechsteinDigital merged 1 commit into
mainfrom
feat/one-vue-global

Conversation

@BechsteinDigital

Copy link
Copy Markdown
Owner

1. Why is this change necessary?

Vue lag an zwei Orten: window.CalloraVue in der Surface-Runtime, CalloraAdmin.vue in der
Admin-Shell. Ein Plugin-Bundle ist gegen genau einen davon gebaut — und damit an eine der beiden
Welten gefesselt.

Der Canvas des Composers ist der Fall, an dem das zählt: Er läuft in der Admin-Shell und
rendert Surface-Blöcke. Mit zwei Namen gäbe es entweder zwei Vue-Instanzen — womit Reaktivität
über die Grenze stillschweigend aufhört, ohne Fehlermeldung — oder Blöcke, die im Editor nicht
laufen.

Voraussetzung für Baustein 7 (§7.6, Bedingung 1).

2. What does this change do, exactly?

Beide Runtimes stellen CalloraVue bereit, beide Presets mappen dorthin. Der Name enthält
bewusst keinen Punkt: CalloraAdmin.vue sagte schon in der Schreibweise, dass das Global
einer Runtime gehört.

Ersetzt, nicht aliasiert. Es gibt keine fremden Bundles, und ein Alias, den niemand braucht,
wäre nur ein zweiter Weg zum selben Ziel — die Sorte technischer Schuld, die niemand mehr
entfernt, weil sie nichts kostet.

Ein Test vergleicht, worauf beide Presets mappen. Sie liegen in getrennten Paketen ohne
gemeinsamen Code; das Surface-Preset im Admin zu importieren hieße, eine Abhängigkeit zwischen
zwei bewusst getrennten Paketen einzuführen, um eine Zeichenkette zu vergleichen. Also ein
Quelltextvergleich — die Gegenprobe belegt, dass er bei divergierenden Namen rot wird.

3. Describe each step to reproduce the issue or behaviour.

Auf main ist ein Admin-Bundle gegen CalloraAdmin.vue gebaut und findet auf einer Surface
nichts; ein Surface-Bundle gegen CalloraVue findet im Admin nichts. Beide scheitern still —
Rollup lässt das externe Symbol undefiniert, und das fällt erst beim ersten Render auf.

Auf diesem Branch bauen beide gegen denselben Namen. Verifiziert am echten Konsumenten:

cd src/Administration/Resources/app/administration && npm run build:lib
cd custom/static-plugins/Communication && npm install && npx vite build
grep -o "CalloraVue" src/Resources/public/admin/main.js   # → CalloraVue

4. Please link to the relevant issues (if any).

Setzt §7.6 Bedingung 1 des Composer-Designs um.

Zahlen

6 Dateien. Admin 521 Tests (vorher 518), Surface-Runtime 99, .NET 1932 + 29 — alle grün, und
das Communication-Bundle gebaut und geprüft.

Was für den Canvas noch fehlt

  • Theme-Tokens in den Canvas scopen (§7.6 Bedingung 2). Möglich, weil tokens.scss bewusst
    Custom Properties statt SCSS-Variablen nutzt; der Aufwand liegt bei Plugin-Themes, deren CSS auf
    :root zielt.
  • Sektions-CSS vom Theme in den Canvas (Bedingung 3) — dasselbe Stylesheet, das live gilt.

Vue lag bisher an zwei Orten: window.CalloraVue in der Surface-Runtime, CalloraAdmin.vue in
der Admin-Shell. Ein Plugin-Bundle ist gegen genau einen davon gebaut — und damit an eine
der beiden Welten gefesselt.

Der Canvas des Composers ist der Fall, an dem das zählt: Er läuft in der Admin-Shell und
rendert Surface-Blöcke. Mit zwei Namen gäbe es entweder zwei Vue-Instanzen — womit
Reaktivität über die Grenze stillschweigend aufhört, ohne Fehlermeldung — oder Blöcke, die
im Editor nicht laufen.

Beide Runtimes stellen jetzt CalloraVue bereit, beide Presets mappen dorthin. Der Name
enthält bewusst keinen Punkt: CalloraAdmin.vue sagte schon in der Schreibweise, dass das
Global einer Runtime gehört.

Ersetzt, nicht aliasiert. Es gibt keine fremden Bundles, und ein Alias, den niemand
braucht, wäre nur ein zweiter Weg zum selben Ziel — und die Sorte technischer Schuld, die
niemand mehr entfernt, weil sie nichts kostet.

Ein Test vergleicht, worauf beide Presets mappen. Sie liegen in getrennten Paketen ohne
gemeinsamen Code; das Surface-Preset im Admin zu importieren hieße, eine Abhängigkeit
zwischen zwei bewusst getrennten Paketen einzuführen, um eine Zeichenkette zu vergleichen.
Also ein Quelltextvergleich — die Gegenprobe belegt, dass er bei divergierenden Namen rot
wird.

Das Communication-Bundle gebaut und geprüft: es referenziert jetzt CalloraVue.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant