dont render table without items

This commit is contained in:
Dan Harrin
2025-05-16 13:33:10 +01:00
parent e443691a18
commit ec90989f8d
3 changed files with 152 additions and 148 deletions
@@ -145,6 +145,8 @@
}
.fi-fo-table-repeater {
@apply grid gap-3;
& > table {
@apply block w-full divide-y divide-gray-200 rounded-xl bg-white shadow-sm ring-1 ring-gray-950/5 dark:divide-white/10 dark:bg-gray-900 dark:ring-white/10;
@@ -282,7 +284,7 @@
}
& .fi-fo-table-repeater-add {
@apply mt-3 flex w-full justify-center;
@apply flex w-full justify-center;
&.fi-align-start,
&.fi-align-left {
@@ -37,159 +37,161 @@
->class(['fi-fo-table-repeater'])
}}
>
<table>
<thead>
<tr>
@if ((count($items) > 1) && ($isReorderableWithButtons || $isReorderableWithDragAndDrop))
<th></th>
@endif
@if (count($items))
<table>
<thead>
<tr>
@if ((count($items) > 1) && ($isReorderableWithButtons || $isReorderableWithDragAndDrop))
<th></th>
@endif
@foreach ($tableColumns as $column)
<th
@class([
'fi-wrapped' => $column->isHeaderWrapped(),
(($columnAlignment = $column->getAlignment()) instanceof Alignment) ? ('fi-align-' . $columnAlignment->value) : $columnAlignment,
])
@style([
('width: ' . ($columnWidth = $column->getWidth())) => filled($columnWidth),
])
>
@if (! $column->isHeaderLabelHidden())
{{ $column->getLabel() }}
@else
<span class="fi-sr-only">
@foreach ($tableColumns as $column)
<th
@class([
'fi-wrapped' => $column->isHeaderWrapped(),
(($columnAlignment = $column->getAlignment()) instanceof Alignment) ? ('fi-align-' . $columnAlignment->value) : $columnAlignment,
])
@style([
('width: ' . ($columnWidth = $column->getWidth())) => filled($columnWidth),
])
>
@if (! $column->isHeaderLabelHidden())
{{ $column->getLabel() }}
</span>
@endif
@if ($column->isMarkedAsRequired())
<sup
class="fi-fo-table-repeater-header-required-mark"
>
*
</sup>
@endif
</th>
@endforeach
@if (count($extraItemActions) || $isCloneable || $isDeletable)
<th></th>
@endif
</tr>
</thead>
@if (count($items))
<tbody
x-sortable
{{
(new ComponentAttributeBag)
->merge([
'data-sortable-animation-duration' => $getReorderAnimationDuration(),
'wire:end.stop' => 'mountAction(\'reorder\', { items: $event.target.sortable.toArray() }, { schemaComponent: \'' . $key . '\' })',
], escape: false)
}}
>
@foreach ($items as $itemKey => $item)
@php
$visibleExtraItemActions = array_filter(
$extraItemActions,
fn (Action $action): bool => $action(['item' => $itemKey])->isVisible(),
);
$cloneAction = $cloneAction(['item' => $itemKey]);
$cloneActionIsVisible = $isCloneable && $cloneAction->isVisible();
$deleteAction = $deleteAction(['item' => $itemKey]);
$deleteActionIsVisible = $isDeletable && $deleteAction->isVisible();
$moveDownAction = $moveDownAction(['item' => $itemKey])->disabled($loop->last);
$moveDownActionIsVisible = $isReorderableWithButtons && $moveDownAction->isVisible();
$moveUpAction = $moveUpAction(['item' => $itemKey])->disabled($loop->first);
$moveUpActionIsVisible = $isReorderableWithButtons && $moveUpAction->isVisible();
$reorderActionIsVisible = $isReorderableWithDragAndDrop && $reorderAction->isVisible();
@endphp
<tr
wire:key="{{ $item->getLivewireKey() }}.item"
x-sortable-item="{{ $itemKey }}"
>
@if ((count($items) > 1) && ($isReorderableWithButtons || $isReorderableWithDragAndDrop))
<td>
@if ($reorderActionIsVisible || $moveUpActionIsVisible || $moveDownActionIsVisible)
<div
class="fi-fo-table-repeater-actions"
>
@if ($reorderActionIsVisible)
<div
x-sortable-handle
x-on:click.stop
>
{{ $reorderAction }}
</div>
@endif
@if ($moveUpActionIsVisible || $moveDownActionIsVisible)
<div x-on:click.stop>
{{ $moveUpAction }}
</div>
<div x-on:click.stop>
{{ $moveDownAction }}
</div>
@endif
</div>
@endif
</td>
@endif
@foreach ($item->getComponents(withHidden: true) as $component)
@php
throw_unless(
$component instanceof \Filament\Forms\Components\Field || $component instanceof \Filament\Infolists\Components\Entry,
new \Exception('Table repeaters must only contain form fields and infolist entries, but [' . $component::class . '] was used.'),
);
@endphp
@if (count($tableColumns) > $loop->index)
@if ($component->isVisible())
<td>
{{ $component }}
</td>
@else
<td class="fi-hidden"></td>
@endif
@else
<span class="fi-sr-only">
{{ $column->getLabel() }}
</span>
@endif
@endforeach
@if (count($extraItemActions) || $isCloneable || $isDeletable)
<td>
@if ($visibleExtraItemActions || $cloneActionIsVisible || $deleteActionIsVisible)
<div
class="fi-fo-table-repeater-actions"
>
@foreach ($visibleExtraItemActions as $extraItemAction)
<div x-on:click.stop>
{{ $extraItemAction(['item' => $itemKey]) }}
</div>
@endforeach
@if ($column->isMarkedAsRequired())
<sup
class="fi-fo-table-repeater-header-required-mark"
>
*
</sup>
@endif
</th>
@endforeach
@if ($cloneActionIsVisible)
<div x-on:click.stop>
{{ $cloneAction }}
</div>
@endif
@if (count($extraItemActions) || $isCloneable || $isDeletable)
<th></th>
@endif
</tr>
</thead>
@if ($deleteActionIsVisible)
<div x-on:click.stop>
{{ $deleteAction }}
</div>
@endif
</div>
@if (count($items))
<tbody
x-sortable
{{
(new ComponentAttributeBag)
->merge([
'data-sortable-animation-duration' => $getReorderAnimationDuration(),
'wire:end.stop' => 'mountAction(\'reorder\', { items: $event.target.sortable.toArray() }, { schemaComponent: \'' . $key . '\' })',
], escape: false)
}}
>
@foreach ($items as $itemKey => $item)
@php
$visibleExtraItemActions = array_filter(
$extraItemActions,
fn (Action $action): bool => $action(['item' => $itemKey])->isVisible(),
);
$cloneAction = $cloneAction(['item' => $itemKey]);
$cloneActionIsVisible = $isCloneable && $cloneAction->isVisible();
$deleteAction = $deleteAction(['item' => $itemKey]);
$deleteActionIsVisible = $isDeletable && $deleteAction->isVisible();
$moveDownAction = $moveDownAction(['item' => $itemKey])->disabled($loop->last);
$moveDownActionIsVisible = $isReorderableWithButtons && $moveDownAction->isVisible();
$moveUpAction = $moveUpAction(['item' => $itemKey])->disabled($loop->first);
$moveUpActionIsVisible = $isReorderableWithButtons && $moveUpAction->isVisible();
$reorderActionIsVisible = $isReorderableWithDragAndDrop && $reorderAction->isVisible();
@endphp
<tr
wire:key="{{ $item->getLivewireKey() }}.item"
x-sortable-item="{{ $itemKey }}"
>
@if ((count($items) > 1) && ($isReorderableWithButtons || $isReorderableWithDragAndDrop))
<td>
@if ($reorderActionIsVisible || $moveUpActionIsVisible || $moveDownActionIsVisible)
<div
class="fi-fo-table-repeater-actions"
>
@if ($reorderActionIsVisible)
<div
x-sortable-handle
x-on:click.stop
>
{{ $reorderAction }}
</div>
@endif
@if ($moveUpActionIsVisible || $moveDownActionIsVisible)
<div x-on:click.stop>
{{ $moveUpAction }}
</div>
<div x-on:click.stop>
{{ $moveDownAction }}
</div>
@endif
</div>
@endif
</td>
@endif
@foreach ($item->getComponents(withHidden: true) as $component)
@php
throw_unless(
$component instanceof \Filament\Forms\Components\Field || $component instanceof \Filament\Infolists\Components\Entry,
new \Exception('Table repeaters must only contain form fields and infolist entries, but [' . $component::class . '] was used.'),
);
@endphp
@if (count($tableColumns) > $loop->index)
@if ($component->isVisible())
<td>
{{ $component }}
</td>
@else
<td class="fi-hidden"></td>
@endif
@endif
</td>
@endif
</tr>
@endforeach
</tbody>
@endif
</table>
@endforeach
@if (count($extraItemActions) || $isCloneable || $isDeletable)
<td>
@if ($visibleExtraItemActions || $cloneActionIsVisible || $deleteActionIsVisible)
<div
class="fi-fo-table-repeater-actions"
>
@foreach ($visibleExtraItemActions as $extraItemAction)
<div x-on:click.stop>
{{ $extraItemAction(['item' => $itemKey]) }}
</div>
@endforeach
@if ($cloneActionIsVisible)
<div x-on:click.stop>
{{ $cloneAction }}
</div>
@endif
@if ($deleteActionIsVisible)
<div x-on:click.stop>
{{ $deleteAction }}
</div>
@endif
</div>
@endif
</td>
@endif
</tr>
@endforeach
</tbody>
@endif
</table>
@endif
@if ($isAddable && $addAction->isVisible())
<div
+1 -1
View File
File diff suppressed because one or more lines are too long