UI/Player/Containers/InventoryContainerSlot.razor
@using Sandbox;
@using Sandbox.UI;

@namespace Opium.UI
@inherits Panel

<root class="@( SlotBased ? "grid" : "no-grid" ) @( EmptyItem ? "empty" : "" )" >
    @if ( SlotBased )
    {
        <div class="item">
            <div class="background">
                <div class="top left" />
                <div class="top right" />
                <div class="bottom left" />
                <div class="bottom right" />
            </div>

            @if ( Item is null || Item.ItemResource is null )
            {
                <div class="name">Empty</div>
                // Empty item slot
                return;
            }

            <div class="name">@Item.ItemResource.ItemName</div>
            <div class="quantity">@(Item.Quantity)x</div>
        </div>
    }
    else
    {
        <div class="item">
            <div class="left">
                <div class="icon" />
            </div>
            <div class="name">@Item.ItemResource.ItemName</div>
            <div class="description">@Item.ItemResource.ItemDescription</div>
        </div>
    }
</root>

@code
{
    public InventoryItem Item { get; set; }
    public InventoryContainer Container { get; set; }

    /// <summary>
    /// We're a slot based inventory if we have a slot limit.
    /// </summary>

    bool SlotBased => Container.MaxItems > 0;

    /// <summary>
    /// Is this an empty item?
    /// </summary>
    bool EmptyItem => Item is null || Item.ItemResource is null;

    protected override int BuildHash()
    {
        return HashCode.Combine( Item, Item?.ItemResource );
    }
}