stiftungswo / Dime

DimeERP - Timetracker, Offers & Invoices
MIT License
5 stars 1 forks source link

Formularfelder in Overviews zeigen nach Mutationen ihre Daten nicht an #124

Closed tourn closed 6 years ago

tourn commented 6 years ago

Reporter: Zivi


Seit der neuen Formularvalidierung (#106) werden nach Mutationen manchmal alle Felder in einer Overview weiss. Das Speichern hat erfolgreich geklappt und nach einem Refresh ist alles wieder sichtbar - trotzdem ist das natürlich nicht schön.

Das Problem scheint an ngControlGroup zu liegen, das mit dem Index von ngFor in eine Arraystruktur gezwängt wird (ngControl="start{{i}}), wie z.B. hier: https://github.com/stiftungswo/Dime/blob/a4cd75a7fc9fd5898b2714f96035393c77e4eaad/src/Dime/FrontendBundle/Resources/public/lib/src/component/overview/period_overview_component.html#L19-L26

ngControlGroup ist nicht dafür gedacht, für Arrays verwendet zu werden. Vermutlich mag ngControl es nicht, wenn aufgrund der Arraystruktur plötzlich das darunterliegende Model verschwindet. Dafür gibt es eigentlich ControlArray - dies kann aber nicht in den HTML-Templates verwendet werden, da ein ngControlArray-Attribut (noch?) nicht implementiert ist. Daher müsste man wohl die betroffenen Overviews als Reactive Forms refactoren. (Ist in Dart kaum dokumentiert, darum hab ich die TypeScript Doku verlinkt.)


Im selben Rahmen wäre es wohl auch sinnvoll, Overviews, die nur Daten anzeigen, und Overviews, deren Zeilen direkt bearbeitbar sind in zwei unterschiedliche Base-Klassen aufzuteilen, damit der alte Code für die ReadOnlyOverviews behalten kann und der Code für EditableOverviews nicht die bestehende EntityOverview-Klasse mit Code verseucht, der von den ReadOnlyOverviews nicht benötigt wird. Ebenso: Aufteilen von root Overviews (R), auf die direkt gerouted wird, und child Overviews (C), die in anderen Views eingebunden werden in separate Ordner.

ReadOnly Overviews:

Editable Overviews: (grundlegend alle, die im Template ein <tr ... ngControlGroup ...> haben)

Schräge Vögel: