@php $channel = $this->getActiveChannel(); $data = $this->getOrphanData(); $rows = $data['rows']; $total = $data['total']; $notSynced = $data['not_synced'] ?? false; $totalPages = $total > 0 ? (int) ceil($total / $this->perPage) : 1; $from = $total > 0 ? (($this->page - 1) * $this->perPage) + 1 : 0; $to = min($this->page * $this->perPage, $total); $v2Url = '/admin/channel-listings-v2' . ($this->channelId ? '?channel=' . $this->channelId : ''); @endphp
{{-- Header --}}
{{ $channel?->name ?? 'Channel' }}
Shopify Orphan Products @if ($total > 0) {{ number_format($total) }} products @endif
Products that exist in Shopify but are not linked to any Cydekick product.
{{-- No catalogue synced --}} @if ($notSynced)
Shopify catalogue not synced yet.
Go back to the channel view and click Sync Shopify Catalogue first. The orphan list is built from the local variant cache — it must be populated before orphans can be detected.
{{-- No orphans --}} @elseif ($total === 0 && $this->search === '')
No orphan products found.
Every product in the Shopify catalogue is linked to a Cydekick product.
{{-- Table --}} @else
{{ number_format($total) }} Shopify {{ $total === 1 ? 'product' : 'products' }} in this channel's catalogue have no Cydekick link. Use Link to connect them to an existing product, or Delete to remove them from Shopify.
@if ($this->search !== '' && $total === 0) No results for "{{ $this->search }}" @endif
@if (count($rows) > 0)
@foreach ($rows as $row) @endforeach
Shopify Product SKUs Variants Price
{{ $row['product_title'] }}
ID: {{ $row['shopify_product_id'] }}
@foreach (array_slice(explode(', ', $row['skus']), 0, 5) as $sku) {{ $sku }} @endforeach @if (substr_count($row['skus'], ', ') >= 5) +{{ substr_count($row['skus'], ', ') - 4 }} more @endif
{{ $row['variant_count'] }} {{ $row['price_display'] }}
@if ($total > $this->perPage)
Showing {{ number_format($from) }}–{{ number_format($to) }} of {{ number_format($total) }}
@for ($p = max(1, $this->page - 2); $p <= min($totalPages, $this->page + 2); $p++) @endfor
@endif
@endif @endif
{{-- ─── Delete confirmation modal ─────────────────────────────────────────── --}} @if ($showDeleteConfirm)

Delete from Shopify?

This will permanently delete the product from Shopify and remove it from the local variant cache. This cannot be undone.

"{{ $deletingProductTitle }}"
ID: {{ $deletingProductId }}
@endif {{-- ─── Link modal ─────────────────────────────────────────────────────────── --}} @if ($showLinkModal)

Link to Cydekick Product

Linking "{{ $linkingProductTitle }}" from Shopify to a Cydekick product creates a SKU mapping so it appears in the listings and can be synced.

{{-- Variant summary --}}
Shopify variant{{ count($linkingVariants) !== 1 ? 's' : '' }} ({{ count($linkingVariants) }})
@foreach (array_slice($linkingVariants, 0, 5) as $v)
{{ $v['sku'] }} @if ($v['variant_title']) {{ $v['variant_title'] }} @endif @if ($v['price']) £{{ number_format((float)$v['price'], 2) }} @endif
@endforeach @if (count($linkingVariants) > 5)
+{{ count($linkingVariants) - 5 }} more variants
@endif @if (count($linkingVariants) > 1)
⚠ This product has multiple variants. Only the first variant ({{ $linkingVariants[0]['sku'] }}) will be linked here. Use the channel listings view to link additional variants to their respective Cydekick products.
@endif
Search Cydekick products
@if (mb_strlen($linkSearch) >= 2 && empty($linkResults))
No Cydekick products found for "{{ $linkSearch }}".
@elseif (!empty($linkResults))
    @foreach ($linkResults as $r)
  • {{ $r['name'] }}
    {{ $r['sku'] }}
    @if ($r['already_mapped']) Linked → {{ $r['existing_shopify_sku'] }} @else @endif
  • @endforeach
@endif
@endif