import { OrderItem, ShipmentItem, ShipmentSubItem } from 'types';
export const hasSubItems = ( item: OrderItem | ShipmentItem ) =>
item.quantity > 1;
export const getSubItemId = ( item: ShipmentItem, index: number ) =>
`${ item.id }-sub-${ index }`;
export const createSubItemOfCount = ( count: number, item: ShipmentItem ) =>
new Array( count ).fill( 1 ).map( ( _, index ) => ( {
...item,
id: getSubItemId( item, index ),
parentId: item.id,
quantity: 1,
subItems: [],
} ) );
export const getSubItems = ( item: ShipmentItem ) =>
hasSubItems( item ) ? createSubItemOfCount( item.quantity, item ) : [];
export const getSubItemIds = ( item: ShipmentItem ): string[] =>
( item.subItems || getSubItems( item ) ).map( ( { id } ) => `${ id }` );
export const isSubItem = ( item: {
id: string | number;
} ): item is ShipmentSubItem => `${ item.id }`.includes( 'sub' );
export const getSelectablesCount = ( items: ( OrderItem | ShipmentItem )[] ) =>
items.reduce( ( acc, { quantity } ) => acc + quantity, 0 );
export const getParentIdFromSubItemId = ( id: string ): number =>
isSubItem( { id } )
? parseInt( id.split( '-sub-' )[ 0 ], 10 )
: Number( id );