64 lines
2.0 KiB
JavaScript
64 lines
2.0 KiB
JavaScript
import React from 'react'
|
|
import {Droppable} from "@hello-pangea/dnd";
|
|
import {cartStyle} from "./utils";
|
|
import {ProductCartItem} from "./ProductCartItem.jsx";
|
|
import {FakePlaceholder} from "./FakePlaceholder.jsx";
|
|
import {FillExtData} from "./options/utils";
|
|
import {hp_to_slots, resource_counters} from "./count_resources";
|
|
import {useShopStore} from "./shop_store";
|
|
|
|
/**
|
|
* Component that displays a list of <ProductCartItem>
|
|
*/
|
|
export function Cart({crate_index}) {
|
|
const {crate, crateParams} = useShopStore(state => ({
|
|
crate: state.crates[crate_index],
|
|
crateParams: state.crateParams
|
|
}));
|
|
|
|
const nbrOccupied = hp_to_slots(crate.occupiedHP);
|
|
const nbrSlots = hp_to_slots(crateParams(crate.crate_mode).hp);
|
|
|
|
const products = crate.items.map((item, index) => {
|
|
const ext_data = FillExtData(crate.items, index);
|
|
return (
|
|
<ProductCartItem
|
|
card_index={index}
|
|
crate_index={crate_index}
|
|
ext_data={ext_data}
|
|
first={index === 0}
|
|
last={index === crate.items.length - 1 && nbrOccupied >= nbrSlots}
|
|
key={item.id}/>
|
|
);
|
|
});
|
|
|
|
return (
|
|
<Droppable droppableId={crate.id} direction="horizontal">
|
|
|
|
{(provided, snapshot) => (
|
|
<div
|
|
ref={provided.innerRef}
|
|
{...provided.droppableProps}
|
|
style={cartStyle(
|
|
provided.droppableProps.style,
|
|
snapshot,
|
|
)}
|
|
className="items-cart-list">
|
|
|
|
{products}
|
|
|
|
{provided.placeholder && (
|
|
<div style={{display: 'none'}}>
|
|
{provided.placeholder}
|
|
</div>
|
|
)}
|
|
|
|
<FakePlaceholder
|
|
nToDraw={nbrSlots - nbrOccupied}
|
|
isDraggingOver={snapshot.isDraggingOver}/>
|
|
</div>
|
|
)}
|
|
|
|
</Droppable>
|
|
);
|
|
} |