working with inventory style changes - tbd

This commit is contained in:
Zach Harding
2026-04-05 11:20:26 -04:00
parent 12a42b87b8
commit 87235ab37a
2 changed files with 182 additions and 150 deletions

View File

@@ -1,4 +1,6 @@
--- ---
import { Show } from '@clerk/astro/components';
import ebay from "/vendors/ebay.svg?raw"; import ebay from "/vendors/ebay.svg?raw";
import SetIcon from '../../components/SetIcon.astro'; import SetIcon from '../../components/SetIcon.astro';
import EnergyIcon from '../../components/EnergyIcon.astro'; import EnergyIcon from '../../components/EnergyIcon.astro';
@@ -168,6 +170,7 @@ const ebaySearchUrl = (card: any) => {
const altSearchUrl = (card: any) => { const altSearchUrl = (card: any) => {
return `https://alt.xyz/browse?query=${encodeURIComponent(card?.productUrlName)}+${encodeURIComponent(card?.set?.setUrlName)}+${encodeURIComponent(card?.number)}&sortBy=newest_first`; return `https://alt.xyz/browse?query=${encodeURIComponent(card?.productUrlName)}+${encodeURIComponent(card?.set?.setUrlName)}+${encodeURIComponent(card?.number)}&sortBy=newest_first`;
}; };
--- ---
<div class="modal-dialog modal-dialog-centered modal-fullscreen-md-down modal-xl"> <div class="modal-dialog modal-dialog-centered modal-fullscreen-md-down modal-xl">
<div class="modal-content" data-card-id={card?.cardId}> <div class="modal-content" data-card-id={card?.cardId}>
@@ -248,11 +251,13 @@ const altSearchUrl = (card: any) => {
<span class="d-none">Damaged</span><span class="d-inline">DMG</span> <span class="d-none">Damaged</span><span class="d-inline">DMG</span>
</button> </button>
</li> </li>
<li class="nav-item" role="presentation"> <li class="nav-item" role="presentation">
<button class="nav-link vendor" id="vendor-tab" data-bs-toggle="tab" data-bs-target="#nav-vendor" type="button" role="tab" aria-controls="nav-vendor" aria-selected="false"> <button class="nav-link vendor" id="vendor-tab" data-bs-toggle="tab" data-bs-target="#nav-vendor" type="button" role="tab" aria-controls="nav-vendor" aria-selected="false">
<span class="d-none d-xxl-inline">Inventory</span><span class="d-xxl-none">+/-</span> <span class="d-none d-xxl-inline">Inventory</span><span class="d-xxl-none">+/-</span>
</button> </button>
</li> </li>
</ul> </ul>
<div class="tab-content" id="myTabContent"> <div class="tab-content" id="myTabContent">
@@ -339,7 +344,7 @@ const altSearchUrl = (card: any) => {
<div class="tab-pane fade" id="nav-vendor" role="tabpanel" aria-labelledby="nav-vendor" tabindex="0"> <div class="tab-pane fade" id="nav-vendor" role="tabpanel" aria-labelledby="nav-vendor" tabindex="0">
<div class="row g-3"> <div class="row g-3">
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<h5 class="my-3">Add {card?.productName} to inventory</h5> <h5 class="mt-1 mb-2">Add {card?.productName} to inventory</h5>
<form id="inventoryForm" data-inventory-form novalidate> <form id="inventoryForm" data-inventory-form novalidate>
<div class="row g-3"> <div class="row g-3">
@@ -360,7 +365,7 @@ const altSearchUrl = (card: any) => {
<div class="col-8"> <div class="col-8">
<div class="d-flex justify-content-between align-items-start gap-2 flex-wrap"> <div class="d-flex justify-content-between align-items-start gap-2 flex-wrap">
<label for="purchasePrice" class="form-label fw-medium mb-0 mt-1"> <label for="purchasePrice" class="form-label fw-medium">
Purchase price Purchase price
</label> </label>
@@ -463,7 +468,28 @@ const altSearchUrl = (card: any) => {
<label class="btn btn-cond-dmg" for="cond-dmg">DMG</label> <label class="btn btn-cond-dmg" for="cond-dmg">DMG</label>
</div> </div>
</div> </div>
<div class="col-12">
<label for="catalogName" class="form-label fw-medium">
Catalog
<span class="text-body-tertiary fw-normal ms-1 small">optional</span>
</label>
<input
type="text"
class="form-control"
id="catalogName"
name="catalogName"
list="catalogSuggestions"
placeholder="Default"
autocomplete="off"
maxlength="100"
/>
<datalist id="catalogSuggestions">
</datalist>
<div class="form-text">
Type a name or pick an existing catalog.
</div>
</div>
<div class="col-12"> <div class="col-12">
<label for="note" class="form-label fw-medium"> <label for="note" class="form-label fw-medium">
Note Note
@@ -489,7 +515,7 @@ const altSearchUrl = (card: any) => {
</div> </div>
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<h5 class="my-3">Inventory entries for {card?.productName}</h5> <h5 class="mt-1 mb-2">Inventory entries for {card?.productName}</h5>
<!-- Empty state --> <!-- Empty state -->
<div class="alert alert-dark border-0 rounded-4 d-none" id="inventoryEmptyState"> <div class="alert alert-dark border-0 rounded-4 d-none" id="inventoryEmptyState">
@@ -506,6 +532,7 @@ const altSearchUrl = (card: any) => {
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- Chart lives permanently outside tab-content so Bootstrap never hides it. --> <!-- Chart lives permanently outside tab-content so Bootstrap never hides it. -->

View File

@@ -1,5 +1,8 @@
--- ---
import { client } from '../../db/typesense'; import { client } from '../../db/typesense';
import { Show } from '@clerk/astro/components';
import RarityIcon from '../../components/RarityIcon.astro'; import RarityIcon from '../../components/RarityIcon.astro';
import FirstEditionIcon from "../../components/FirstEditionIcon.astro"; import FirstEditionIcon from "../../components/FirstEditionIcon.astro";
export const prerender = false; export const prerender = false;
@@ -283,9 +286,11 @@ const facets = searchResults.results.slice(1).map((result: any) => {
{pokemon.map((card:any) => ( {pokemon.map((card:any) => (
<div class="col"> <div class="col">
<button type="button" class="btn btn-sm inventory-button position-relative float-end shadow-filter text-center p-2" data-card-id={card.cardId} hx-get={`/partials/card-modal?cardId=${card.cardId}`} hx-target="#cardModal" hx-trigger="click" data-bs-toggle="modal" data-bs-target="#cardModal" onclick="event.stopPropagation(); sessionStorage.setItem('openModalTab', 'nav-vendor');"> <button type="button" class="btn btn-sm inventory-button position-relative float-end shadow-filter text-center p-2" data-card-id={card.cardId} hx-get={`/partials/card-modal?cardId=${card.cardId}`} hx-target="#cardModal" hx-trigger="click" data-bs-toggle="modal" data-bs-target="#cardModal" onclick="event.stopPropagation(); sessionStorage.setItem('openModalTab', 'nav-vendor');">
<b>+/</b> <b>+/</b>
</button> </button>
<div class="card-trigger position-relative" data-card-id={card.cardId} hx-get={`/partials/card-modal?cardId=${card.cardId}`} hx-target="#cardModal" hx-trigger="click" data-bs-toggle="modal" data-bs-target="#cardModal" onclick="const cardTitle = this.querySelector('#cardImage').getAttribute('alt'); dataLayer.push({'event': 'virtualPageview', 'pageUrl': this.getAttribute('hx-get'), 'pageTitle': cardTitle, 'previousUrl': '/pokemon'});"> <div class="card-trigger position-relative" data-card-id={card.cardId} hx-get={`/partials/card-modal?cardId=${card.cardId}`} hx-target="#cardModal" hx-trigger="click" data-bs-toggle="modal" data-bs-target="#cardModal" onclick="const cardTitle = this.querySelector('#cardImage').getAttribute('alt'); dataLayer.push({'event': 'virtualPageview', 'pageUrl': this.getAttribute('hx-get'), 'pageTitle': cardTitle, 'previousUrl': '/pokemon'});">
<div class="image-grow rounded-4 card-image" data-energy={card.energyType} data-rarity={card.rarityName} data-variant={card.variant} data-name={card.productName}><img src={`/static/cards/${card.productId}.jpg`} alt={card.productName} id="cardImage" loading="lazy" decoding="async" class="img-fluid rounded-4 mb-2 w-100" onerror="this.onerror=null; this.src='/static/cards/default.jpg'; this.closest('.image-grow')?.setAttribute('data-default','true')"/><span class="position-absolute top-50 start-0 d-inline medium-icon"><FirstEditionIcon edition={card?.variant} /></span> <div class="image-grow rounded-4 card-image" data-energy={card.energyType} data-rarity={card.rarityName} data-variant={card.variant} data-name={card.productName}><img src={`/static/cards/${card.productId}.jpg`} alt={card.productName} id="cardImage" loading="lazy" decoding="async" class="img-fluid rounded-4 mb-2 w-100" onerror="this.onerror=null; this.src='/static/cards/default.jpg'; this.closest('.image-grow')?.setAttribute('data-default','true')"/><span class="position-absolute top-50 start-0 d-inline medium-icon"><FirstEditionIcon edition={card?.variant} /></span>
<div class="holo-shine"></div> <div class="holo-shine"></div>