import { useCallback, useRef } from 'react' import { Parcel } from './model/models' import { useLatestCallback } from './useLatestCallback' const weightsOf = (parcels: Array) => parcels.map(parcel => parcel.weightInGrams) export const useReviewedParcels = ( setParcels: (parcels: Array) => void, onParcelCountReviewed: (parcelWeightsInGrams: Array) => void ) => { const reviewedParcels = useRef | undefined>(undefined) const numberOfParcels = useRef(0) const reportParcelCountReviewed = useLatestCallback(onParcelCountReviewed) const splitParcels = useCallback( (parcels: Array) => { reviewedParcels.current = undefined numberOfParcels.current = parcels.length setParcels(parcels) }, [setParcels] ) const reviewParcels = useCallback( (parcels: Array) => { const parcelCountChanged = parcels.length !== numberOfParcels.current reviewedParcels.current = parcels numberOfParcels.current = parcels.length setParcels(parcels) if (parcelCountChanged) { reportParcelCountReviewed(weightsOf(parcels)) } }, [setParcels, reportParcelCountReviewed] ) const reviewedParcelWeights = useCallback( () => reviewedParcels.current && weightsOf(reviewedParcels.current), [] ) return { splitParcels, reviewParcels, reviewedParcelWeights } }