import { useSelect } from '@wordpress/data'; import { BULK_LABELS_STORE_NAME } from 'data/constants'; import { toError, type BulkLabelsSelect } from './store'; import type { AutoAssignedPackagesMap } from './types'; interface UseAutoAssignedPackagesResult { isResolving: boolean; error: Error | null; results: AutoAssignedPackagesMap; } const EMPTY_RESULTS: AutoAssignedPackagesMap = {}; /** * Per-order box-packer suggestions for the given orders, backed by the * bulk-labels @wordpress/data store. The POST * /wcshipping/v1/label/auto-assign-packages call runs once per distinct * order-id set (resolver-cached); reopening the modal with the same * selection reuses the cached result. */ export const useAutoAssignedPackages = ( orderIds: number[] ): UseAutoAssignedPackagesResult => { const idsKey = orderIds.join( ',' ); return useSelect( ( select ): UseAutoAssignedPackagesResult => { if ( orderIds.length === 0 ) { return { isResolving: false, error: null, results: EMPTY_RESULTS, }; } const store = select( BULK_LABELS_STORE_NAME ) as unknown as BulkLabelsSelect; const results = store.getAutoAssignedPackages( orderIds ); const resolutionError = store.getResolutionError( 'getAutoAssignedPackages', [ orderIds ] ); return { results: results ?? EMPTY_RESULTS, isResolving: ! store.hasFinishedResolution( 'getAutoAssignedPackages', [ orderIds ] ), error: toError( resolutionError ), }; }, // eslint-disable-next-line react-hooks/exhaustive-deps -- idsKey covers orderIds contents [ idsKey ] ); };