TableRepeater::make('promos') ->relationship('block_promos') ->label('Promos') ->reorderable(true) ->reorderableWithButtons(true) ->reorderableWithDragAndDrop(true) ->orderColumn('order_column') ->maxItems(4) ->headers([ Header::make('Lista Promos'), Header::make('Tipo'), Header::make('Valido') ]) ->addActionLabel('Aggiungi un Promo') ->schema([ RecordFinder::make('promo_id') ->label('Promo') ->inline() ->required() ->relationship( name:'promo', modifyQueryUsing:function (Builder $query) { $query->scopes(['active', 'visibleInBlog']); } ) ->openModalActionModalWidth(MaxWidth::Full) ->slideOver() ->badge() ->tableHeaderActions([ CreateAction::make() ->form(fn () => PromoResource::formSchema()) ->icon('fluentui-square-add-20') ->slideOver() ->modalWidth(MaxWidth::Full) ]), Placeholder::make('promo_type') ->hiddenLabel() ->content(function (?ArticleblockPromo $record): HtmlString { $message = 'Non selezionato'; $color = 'slate'; if (!\is_null($record)) { $message = $record->promo->type->translation(); $color = $record->promo->type->getColor(); } return new HtmlString( Blade::render( ' {{$message}} ', ['message' => $message,'color' => $color] ) ); }), Placeholder::make('coupon_validity') ->hiddenLabel() ->content(function (?ArticleblockPromo $record): HtmlString { $message = 'Non selezionato'; $color = 'slate'; if (!\is_null($record)) { $message = 'Valido'; $color = 'sky'; if ($record->promo->type->is(PromoType::COUPON->value) && \filled($record->promo->coupon_id)) { $coupon = $record->promo->coupon; $message = $coupon?->valid ? 'Valido' : 'Scaduto'; $color = $coupon?->valid ? 'success' : 'danger'; } } return new HtmlString( Blade::render( ' {{$message}} ', ['message' => $message,'color' => $color] ) ); }), ])