feat: wire shop LiveViews to real product data
PreviewData now queries the Products context when real products exist,
falling back to mock data otherwise. Shop pages automatically display
synced Printify products.
Fixes:
- Printify image position was string ("front"), now uses index
- Category extraction improved to match more Printify tags
- ProductShow finds products by slug for real data
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -200,10 +200,12 @@ defmodule SimpleshopTheme.Providers.Printify do
|
||||
images
|
||||
|> Enum.with_index()
|
||||
|> Enum.map(fn {img, index} ->
|
||||
# Printify returns position as a label string (e.g., "front", "back")
|
||||
# We use the index as the numeric position instead
|
||||
%{
|
||||
src: img["src"],
|
||||
position: img["position"] || index,
|
||||
alt: nil
|
||||
position: index,
|
||||
alt: img["position"]
|
||||
}
|
||||
end)
|
||||
end
|
||||
@@ -243,18 +245,27 @@ defmodule SimpleshopTheme.Providers.Printify do
|
||||
end
|
||||
|
||||
defp extract_category(raw) do
|
||||
# Try to extract category from tags
|
||||
tags = raw["tags"] || []
|
||||
# Try to extract category from tags (case-insensitive)
|
||||
tags =
|
||||
(raw["tags"] || [])
|
||||
|> Enum.map(&String.downcase/1)
|
||||
|
||||
cond do
|
||||
"apparel" in tags or "clothing" in tags -> "Apparel"
|
||||
"homeware" in tags or "home" in tags -> "Homewares"
|
||||
"accessories" in tags -> "Accessories"
|
||||
"art" in tags or "print" in tags -> "Art Prints"
|
||||
true -> nil
|
||||
has_tag?(tags, ~w[t-shirt tshirt shirt hoodie sweatshirt apparel clothing]) -> "Apparel"
|
||||
has_tag?(tags, ~w[mug cup blanket pillow cushion homeware homewares home]) -> "Homewares"
|
||||
has_tag?(tags, ~w[notebook journal stationery]) -> "Stationery"
|
||||
has_tag?(tags, ~w[phone case bag tote accessories]) -> "Accessories"
|
||||
has_tag?(tags, ~w[art print poster canvas wall]) -> "Art Prints"
|
||||
true -> List.first(raw["tags"])
|
||||
end
|
||||
end
|
||||
|
||||
defp has_tag?(tags, keywords) do
|
||||
Enum.any?(tags, fn tag ->
|
||||
Enum.any?(keywords, fn keyword -> String.contains?(tag, keyword) end)
|
||||
end)
|
||||
end
|
||||
|
||||
defp normalize_order_status(raw) do
|
||||
%{
|
||||
status: map_order_status(raw["status"]),
|
||||
|
||||
Reference in New Issue
Block a user