123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- @php
- use Filament\Forms\Components\Actions\Action;
- use Filament\Support\Enums\Alignment;
-
- $containers = $getChildComponentContainers();
- $blockPickerBlocks = $getBlockPickerBlocks();
- $blockPickerColumns = $getBlockPickerColumns();
- $blockPickerWidth = $getBlockPickerWidth();
- $hasBlockPreviews = $hasBlockPreviews();
- $hasInteractiveBlockPreviews = $hasInteractiveBlockPreviews();
-
- $addAction = $getAction($getAddActionName());
- $addBetweenAction = $getAction($getAddBetweenActionName());
- $cloneAction = $getAction($getCloneActionName());
- $collapseAllAction = $getAction($getCollapseAllActionName());
- $editAction = $getAction($getEditActionName());
- $expandAllAction = $getAction($getExpandAllActionName());
- $deleteAction = $getAction($getDeleteActionName());
- $moveDownAction = $getAction($getMoveDownActionName());
- $moveUpAction = $getAction($getMoveUpActionName());
- $reorderAction = $getAction($getReorderActionName());
- $extraItemActions = $getExtraItemActions();
-
- $isAddable = $isAddable();
- $isCloneable = $isCloneable();
- $isCollapsible = $isCollapsible();
- $isDeletable = $isDeletable();
- $isReorderableWithButtons = $isReorderableWithButtons();
- $isReorderableWithDragAndDrop = $isReorderableWithDragAndDrop();
-
- $collapseAllActionIsVisible = $isCollapsible && $collapseAllAction->isVisible();
- $expandAllActionIsVisible = $isCollapsible && $expandAllAction->isVisible();
-
- $statePath = $getStatePath();
- @endphp
-
- <x-dynamic-component :component="$getFieldWrapperView()" :field="$field">
- <div
- x-data="{}"
- {{
- $attributes
- ->merge($getExtraAttributes(), escape: false)
- ->class(['fi-fo-builder grid gap-y-4'])
- }}
- >
- @if ($collapseAllActionIsVisible || $expandAllActionIsVisible)
- <div
- @class([
- 'flex gap-x-3',
- 'hidden' => count($containers) < 2,
- ])
- >
- @if ($collapseAllActionIsVisible)
- <span
- x-on:click="$dispatch('builder-collapse', '{{ $statePath }}')"
- >
- {{ $collapseAllAction }}
- </span>
- @endif
-
- @if ($expandAllActionIsVisible)
- <span
- x-on:click="$dispatch('builder-expand', '{{ $statePath }}')"
- >
- {{ $expandAllAction }}
- </span>
- @endif
- </div>
- @endif
-
- @if (count($containers))
- <ul
- x-sortable
- data-sortable-animation-duration="{{ $getReorderAnimationDuration() }}"
- wire:end.stop="{{ 'mountFormComponentAction(\'' . $statePath . '\', \'reorder\', { items: $event.target.sortable.toArray() })' }}"
- class="space-y-6"
- >
- @php
- $hasBlockLabels = $hasBlockLabels();
- $hasBlockIcons = $hasBlockIcons();
- $hasBlockNumbers = $hasBlockNumbers();
- @endphp
-
- @foreach ($containers as $uuid => $item)
- @php
- $visibleExtraItemActions = array_filter(
- $extraItemActions,
- fn (Action $action): bool => $action(['item' => $uuid])->isVisible(),
- );
- $cloneAction = $cloneAction(['item' => $uuid]);
- $cloneActionIsVisible = $isCloneable && $cloneAction->isVisible();
- $deleteAction = $deleteAction(['item' => $uuid]);
- $deleteActionIsVisible = $isDeletable && $deleteAction->isVisible();
- $editAction = $editAction(['item' => $uuid]);
- $editActionIsVisible = $hasBlockPreviews && $editAction->isVisible();
- $moveDownAction = $moveDownAction(['item' => $uuid])->disabled($loop->last);
- $moveDownActionIsVisible = $isReorderableWithButtons && $moveDownAction->isVisible();
- $moveUpAction = $moveUpAction(['item' => $uuid])->disabled($loop->first);
- $moveUpActionIsVisible = $isReorderableWithButtons && $moveUpAction->isVisible();
- $reorderActionIsVisible = $isReorderableWithDragAndDrop && $reorderAction->isVisible();
- @endphp
-
- <li
- wire:key="{{ $this->getId() }}.{{ $item->getStatePath() }}.{{ $field::class }}.item"
- x-sortable-item="{{ $uuid }}"
- class="flex items-center gap-x-4"
- >
- <!-- Input Field -->
- <div class="w-full">
- {{ $item }}
- </div>
-
- <!-- Delete Action -->
- @if ($deleteActionIsVisible)
- <div class="mt-6">
- {{ $deleteAction }}
- </div>
- @endif
- </li>
-
-
- @if (! $loop->last)
- @if ($isAddable && $addBetweenAction(['afterItem' => $uuid])->isVisible())
- <li class="relative -top-2 !mt-0 h-0">
- <div
- class="flex w-full justify-center opacity-0 transition duration-75 hover:opacity-100"
- >
- <div
- class="fi-fo-builder-block-picker-ctn rounded-lg bg-white dark:bg-gray-900"
- >
- <x-filament-forms::builder.block-picker
- :action="$addBetweenAction"
- :after-item="$uuid"
- :columns="$blockPickerColumns"
- :blocks="$blockPickerBlocks"
- :state-path="$statePath"
- :width="$blockPickerWidth"
- >
- <x-slot name="trigger">
- {{ $addBetweenAction(['afterItem' => $uuid]) }}
- </x-slot>
- </x-filament-forms::builder.block-picker>
- </div>
- </div>
- </li>
- @elseif (filled($labelBetweenItems = $getLabelBetweenItems()))
- <li
- class="relative border-t border-gray-200 dark:border-white/10"
- >
- <span
- class="absolute -top-3 left-3 px-1 text-sm font-medium"
- >
- {{ $labelBetweenItems }}
- </span>
- </li>
- @endif
- @endif
- @endforeach
- </ul>
- @endif
-
- @if ($isAddable && $addAction->isVisible())
- <x-filament-forms::builder.block-picker
- :action="$addAction"
- :blocks="$blockPickerBlocks"
- :columns="$blockPickerColumns"
- :state-path="$statePath"
- :width="$blockPickerWidth"
- @class([
- 'flex',
- match ($getAddActionAlignment()) {
- Alignment::Start, Alignment::Left => 'justify-start',
- Alignment::Center, null => 'justify-center',
- Alignment::End, Alignment::Right => 'justify-end',
- default => $alignment,
- },
- ])
- >
- <x-slot name="trigger">
- {{ $addAction }}
- </x-slot>
- </x-filament-forms::builder.block-picker>
- @endif
- </div>
- </x-dynamic-component>
|