fix(maintenance): #1596 persist wiki_url on Custom Type create + correct

inline mutation type

  POST /api/v1/maintenance/types hard-coded the MaintenanceType
  constructor and silently dropped `wiki_url`, so the Documentation URL
  field disappeared after save. PATCH worked because it uses
  `data.model_dump(exclude_unset=True) + setattr`, which is why editing
  a freshly-created type DID save the URL — masking the bug under any
  "save then immediately fix it" retest. Reporter @BurntOutHylian
  pre-triaged the issue to the exact constructor call at
  routes/maintenance.py:206-213; fix is the missing `wiki_url=data.wiki_url`
  argument.

  Frontend nit from the same report: MaintenancePage.tsx:1131's
  `updateTypeMutation` declared `data: Partial<{ name; default_interval_hours;
  interval_type; icon }>` — omitting `wiki_url`. The value reached the
  API correctly at runtime because `api.updateMaintenanceType` accepts
  `Partial<MaintenanceTypeCreate>` (which has wiki_url), but the inline
  type lied about the payload shape. Extended the inline `Partial<{...}>`
  to include `wiki_url?: string | null`. Pure type fix — no runtime change.
This commit is contained in:
maziggy
2026-06-02 14:58:10 +02:00
parent a837a3acbd
commit 673001e3cd
4 changed files with 32 additions and 1 deletions
+5 -1
View File
@@ -1128,7 +1128,11 @@ export function MaintenancePage() {
// directly in onAddType callback
const updateTypeMutation = useMutation({
mutationFn: ({ id, data }: { id: number; data: Partial<{ name: string; default_interval_hours: number; interval_type: 'hours' | 'days'; icon: string }> }) =>
// `wiki_url` is part of `MaintenanceTypeCreate` and reaches the API
// correctly at runtime (the api helper takes `Partial<MaintenanceTypeCreate>`),
// but the inline shape on this mutation used to omit it — making the
// type lie about what the payload carries (#1596 nit).
mutationFn: ({ id, data }: { id: number; data: Partial<{ name: string; default_interval_hours: number; interval_type: 'hours' | 'days'; icon: string; wiki_url: string | null }> }) =>
api.updateMaintenanceType(id, data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['maintenanceTypes'] });