diff --git a/resources/views/livewire/projects/project-map.blade.php b/resources/views/livewire/projects/project-map.blade.php index db3d9f0..4eaf364 100644 --- a/resources/views/livewire/projects/project-map.blade.php +++ b/resources/views/livewire/projects/project-map.blade.php @@ -22,23 +22,34 @@
@foreach($phases as $phase) -
+ @php + $phaseLayerIds = $phase->layers->pluck('id')->map(fn($i) => (int) $i)->all(); + $phaseAllActive = count($phaseLayerIds) > 0 && collect($phaseLayerIds)->every(fn($i) => in_array($i, $activeLayers)); + @endphp +
+ {{-- Fase: el toggle muestra/oculta TODAS sus capas --}}
id, $activeLayers)) checked @endif - class="toggle toggle-xs toggle-primary"> + wire:change="togglePhase({{ $phase->id }})" + @if($phaseAllActive) checked @endif + class="toggle toggle-xs toggle-primary" + title="{{ __('Show/hide all layers of this phase') }}"> {{ $phase->name }} {{ $phase->progress_percent }}
- {{-- Capas de esta fase --}} + {{-- Capas de esta fase: cada una con su propio toggle independiente --}} @if($phase->layers->isNotEmpty())
@foreach($phase->layers as $layer) -
- +
+ id, $activeLayers)) checked @endif + class="toggle toggle-xs toggle-primary" + title="{{ __('Show/hide layer') }}"> + {{ $layer->name }} {{ $layer->features_count ?? $layer->features->count() }} {{ __('elem.') }}
@@ -91,11 +102,11 @@
-
- - - - + + + `; - layer.bindPopup(content); - layer.on('click', function() { selectFeature(featId); }); - } - }); - layers[{{ $phase->id }}] = phaseLayer; - @if(in_array($phase->id, $activeLayers)) - phaseLayer.addTo(map); - @endif - } - })() + @foreach($phase->layers as $layer) + @php + $fc = [ + 'type' => 'FeatureCollection', + 'features' => $layer->features->map(function($f) { + return [ + 'type' => 'Feature', + 'id' => $f->id, + 'geometry' => $f->geometry, + 'properties' => array_merge($f->properties ?? [], [ + 'name' => $f->name, + 'progress' => $f->progress, + 'responsible' => $f->responsible, + 'template_id' => $f->template_id, + '_feature_id' => $f->id, + ]) + ]; + })->values()->toArray() + ]; + @endphp + (function() { + const data = @json($fc); + if (data && data.features && data.features.length > 0) { + const layerGroup = L.geoJSON(data, { + style: { color: '{{ $layer->color ?? $phase->color }}', weight: 3, opacity: 0.8, fillOpacity: 0.3 }, + onEachFeature: function(feature, lyr) { + const props = feature.properties || {}; + const featId = props._feature_id || feature.id; + const safeName = escapeHtml(props.name || '{{ __('Feature') }}'); + const safeProgress = escapeHtml(props.progress || 0); + const safeResponsible = escapeHtml(props.responsible || '-'); + let content = `${safeName}
+ {{ __('Progress') }}: ${safeProgress}%
+ {{ __('Responsible') }}: ${safeResponsible}
+ `; + lyr.bindPopup(content); + lyr.on('click', function() { selectFeature(featId); }); + } + }); + layers[{{ $layer->id }}] = layerGroup; + @if(in_array((int) $layer->id, $activeLayers)) + layerGroup.addTo(map); + @endif + } + })() + @endforeach @endforeach // Initialize combined bounds