22 lines
915 B
JavaScript
22 lines
915 B
JavaScript
import { useEffect, useState } from 'react'
|
|
import { getAbgerechnet } from '../lib/teamApi'
|
|
|
|
const NICHTS = Object.freeze({})
|
|
|
|
/**
|
|
* Arbeitsblatt-Kennung -> Rechnungsnummer oder „Entwurf“ für die Tickets in `ticketIds` (Team-Route, alle Mitarbeiter,
|
|
* ohne Beträge). Ein Fehler verbirgt nur die Abzeichen, das Arbeitsblatt bleibt bedienbar; der Hook wirft nie.
|
|
*/
|
|
export function useAbgerechnet(ticketIds) {
|
|
const key = (ticketIds || []).join(',')
|
|
const [state, setState] = useState({ key: '', map: NICHTS })
|
|
useEffect(() => {
|
|
if (!key) return undefined
|
|
let cancelled = false
|
|
Promise.all(key.split(',').map((id) => getAbgerechnet(id).then((r) => r?.abgerechnet || NICHTS).catch(() => NICHTS)))
|
|
.then((maps) => { if (!cancelled) setState({ key, map: Object.assign({}, ...maps) }) })
|
|
return () => { cancelled = true }
|
|
}, [key])
|
|
return state.key === key ? state.map : NICHTS
|
|
}
|