@extends('admin.layouts.admin') @section('title', 'Receta · Pasos e ingredientes') @section('content')
{{ $recipe->name }}

El proceso vive en la guía ({{ $recipe->guide?->name }}). La receta solo decide qué pasos opcionales entran y qué ingredientes lleva cada paso.

@include('admin.recetas.wizard._stepper', ['active' => 'steps']) @php $general = $recipe->ingredients->whereNull('guide_step_id'); $byStep = $recipe->ingredients->whereNotNull('guide_step_id')->groupBy('guide_step_id'); $optionals = $process->where('is_optional', true); @endphp {{-- ── Pasos opcionales: interruptor (presencia = encendido) ── --}} @if($optionals->isNotEmpty())
Pasos opcionales

Marca los que esta receta incluye. Los obligatorios van siempre.

@csrf @foreach($optionals as $opt)
id, $onOptionals) ? 'checked' : '' }}> Paso {{ $opt->step_number }} · {{ $opt->title }}
@endforeach
@endif {{-- Los ingredientes se ELIGEN del catálogo. Si falta uno (chucrut/kimchi), se crea aquí mismo sin salir de la pantalla. --}}
{{-- ── Ingredientes generales (sin paso) ── --}}
Ingredientes generales (sin paso)
@foreach($general as $ing) @include('admin.recetas.wizard._ingredient', ['ing' => $ing]) @endforeach @include('admin.recetas.wizard._ingredient_add', ['guideStepId' => ''])
{{-- ── El proceso de la guía, con sus ingredientes por paso ── --}} @foreach($process as $step) @php $skipped = $step->is_optional && ! in_array($step->id, $onOptionals); @endphp
{{ $step->step_number }}
{{ $step->title }}
@if($step->is_optional) opcional · {{ $skipped ? 'apagado' : 'encendido' }} @endif
@unless($skipped) @foreach(($byStep[$step->id] ?? collect()) as $ing) @include('admin.recetas.wizard._ingredient', ['ing' => $ing]) @endforeach @include('admin.recetas.wizard._ingredient_add', ['guideStepId' => $step->id, 'ingredients' => $ingredients]) @endunless
@endforeach
← Datos
@csrf
{{-- Crear ingrediente del catálogo en línea. Se pide el padre (el árbol es de profundidad libre) y la unidad; el perfil se hereda del padre. --}} @endsection @push('scripts') @endpush