Connect this channel to start managing listings.
@endif @if ($connected) @else Connect Channel @endifSelect a warehouse above to filter by stock level.
@endifNo products found
@if ($this->search !== '') No products match "{{ $this->search }}" @else No products with status "{{ $this->statusFilter === 'not_synced' ? 'awaiting sync' : str_replace('_', ' ', $this->statusFilter) }}" @endif
| Product | Brand | {{ $isShopify ? 'Shopify SKU' : ($isEbay ? 'eBay Offer ID' : 'Platform SKU') }} | @if ($isAmazon)ASIN | @endif @if ($isAmazon || $isEbay)Configurator | @endif @if ($isEbay)eBay Category | @endif @if ($isEbay || $isAmazon || $isShopify)Qty to Push | @endifPrice | @if ($this->warehouseFilter)Stock | @endifStatus | @if ($showReasonCol)Reason | @endifLast Synced | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@if ($row['thumbnail'])
|
@php
$displayTitle = $row['attributes']['title'] ?? $row['product_name'];
$titleLen = $isEbay ? mb_strlen($displayTitle) : null;
$titleOver = $titleLen !== null && $titleLen > 80;
@endphp
{{ $displayTitle }}
@if ($isEbay)
{{ $titleLen }}/80 @if ($titleOver) — over by {{ $titleLen - 80 }} @endif @endif @if ($restrictedTerms && empty($row['amazon_asin'])) @php $termHits = \Webkul\Channel\Services\RestrictedTermChecker::find($displayTitle, $restrictedTerms); @endphp @if ($termHits) Restricted term in title: {{ implode(', ', $termHits) }} @endif @endif @if (!empty($row['attributes']['title']) && $row['attributes']['title'] !== $row['product_name']) {{ $row['product_name'] }} @endif @if ($row['product_sku']) {{ $row['product_sku'] }} @endif @if ($isError && $row['last_error']) {{ $row['last_error'] }} @endif |
@if ($row['product_vendor']) {{ $row['product_vendor'] }} @else — @endif | @if ($isAmazon) @if (! empty($row['amazon_seller_sku']) && ! empty($row['amazon_asin'])) {{ $row['amazon_seller_sku'] }} @elseif (! empty($row['amazon_seller_sku'])) {{ $row['amazon_seller_sku'] }} @else — @endif @elseif ($isEbay) @php $ebayOfferId = $row['ebay_offer_id'] ?? null; $ebayListingId = $row['ebay_listing_id'] ?? null; $ebayItemUrl = $ebayListingId ? 'https://www.ebay.co.uk/itm/' . $ebayListingId : null; @endphp @if ($ebayItemUrl) {{ $ebayOfferId }} @elseif ($ebayOfferId) {{ $ebayOfferId }} @else — @endif @else @if ($storefrontUrl) {{ $row['shopify_sku'] }} @elseif ($row['shopify_sku']) {{ $row['shopify_sku'] }} @else — @endif @endif | @if ($isAmazon)@endif @if ($isAmazon || $isEbay) @php $configuratorName = $isAmazon ? $row['amazon_configurator_name'] : $row['ebay_configurator_name']; @endphp | @if ($configuratorName) {{ $configuratorName }} @else — @endif | @endif @if ($isEbay) @php $catName = $row['ebay_category_name'] ?? null; $catSource = $row['ebay_category_source'] ?? null; $catBadge = match ($catSource) { 'override' => ['Override', '#dbeafe', '#1e40af'], 'map' => ['Mapped', '#d1fae5', '#065f46'], 'default' => ['Default', '#fef3c7', '#92400e'], default => ['Unmapped', '#fee2e2', '#991b1b'], }; @endphp@if ($catName) {{ $catName }} @else — @endif {{ $catBadge[0] }} | @endif @if ($isEbay || $isAmazon)@php $qtyToPush = $isEbay ? ($row['ebay_qty_to_push'] ?? null) : ($row['amazon_qty_to_push'] ?? null); $qtyCap = $isEbay ? $row['ebay_qty_cap'] : $row['amazon_qty_cap']; @endphp @if ($qtyToPush === null) — @else {{ $qtyToPush }} @if ($qtyCap !== null) (cap {{ $qtyCap }}) @endif @endif | @elseif ($isShopify)@php $qtyToPush = $row['shopify_qty_to_push'] ?? null; $perLocation = $row['shopify_qty_per_location'] ?? []; $tooltip = collect($perLocation)->map(fn ($q, $name) => "{$name}: {$q}")->implode(' · '); @endphp @if ($qtyToPush === null) — @else {{ $qtyToPush }} @endif | @endif£{{ $row['price'] }} | @if ($this->warehouseFilter)@php $qty = $row['available_qty'] ?? 0; @endphp {{ $qty }} | @endif
@if ($row['listing_status'] === 'needs_update' && !empty($row['ebay_offer_id']))
{{-- Product IS live on eBay but has a pending update it can't push --}}
Listed
Needs Update
@else
{{ $statusLabel }}
@endif
|
@if ($showReasonCol)
@if (!empty($row['update_reason'])) {{ $row['update_reason'] }} @else — @endif | @endif{{ $row['last_synced_at'] ?? '—' }} |
@if (! $isMapped)
@else
@if ($isError)
@if ($isEbay)
{{-- Retry Create for eBay errors is bulk-only now: tick the row(s) and use
the sticky bulk action bar's "Retry Create" button (bulkRetryEbayCreate)
instead of a redundant per-row button here. --}}
@elseif ($isAmazon)
@php $isUnconfirmed = str_starts_with($row['last_error'] ?? '', 'Unconfirmed after'); @endphp
@if ($isUnconfirmed)
@else
@endif
@else
@endif
@endif
@if ($isAmazon && in_array($row['listing_status'] ?? '', ['listed', 'verifying']))
@endif
@if ($isAmazon)
@endif
@endif
|
This will mark every currently Listed product as needing a sync. The update reason will be set to "Manual mark-all" so you can see why in the Needs Update tab.
{{ $activeChannel?->name }}
This will update the images only for every product with an active Shopify mapping — skipping price, stock, and metafield updates for speed.
This will call Withdraw Offer on eBay and remove {{ count($selectedIds) === 1 ? 'the listing' : 'these listings' }} from the eBay marketplace.
The eBay mapping will be removed. Products remain in Cydekick and can be re-listed via Not Linked when needed.
The {{ $platformLabel }} link will be removed. {{ count($selectedIds) === 1 ? 'The product' : 'The products' }} will remain in Cydekick and can be re-listed from Not Linked.
This calls Amazon's Listings API directly to remove the live listing — not just unlink it here. This cannot be undone.
for "{{ $asinSearchProductName }}" — review carefully before confirming, this is a best-effort search.
@if (empty($asinSearchResults) && $asinSearchRan){{ count($orphanList) }} collections exist in Shopify but not in the Cydekick category tree.
This fetches the full product and variant list from Shopify and refreshes the local cache that Cydekick uses for SKU linking.
This rebuilds Shopify vehicle collections and navigation menus from the Cydekick category tree. It runs in two phases in the background.
@if ($isUpdate) This will sync all {{ number_format($pushCount) }} products marked as needing an update to Shopify. @else This will push {{ number_format($pushCount) }} unlisted or pending products to Shopify. @endif A single background batch job will be dispatched using the Shopify Bulk Operations API.
This will remove all queued sync jobs and reset those products back to Needs Update.
Create on eBay
Choose the listing template (configurator) to use.
Configure templates in eBay Configurators. The selected template defines the category, policies, and listing format.
{{ $amazonModalContext === 'single' ? 'Retry on Amazon' : 'Create on Amazon' }}
{{ $amazonModalContext === 'single' ? "Pick the configurator to retry this listing under — change it if it errored because it's mapped to the wrong one." : 'Choose the listing template (configurator) to use.' }}
Configure templates in Amazon Configurators. The selected template defines the product type and attribute mapping.