@@ -210,6 +228,7 @@ class="flex justify-center items-center absolute inset-0"
@endif
+ @endif
@else
diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php
index 0156ca2..b2b2a5f 100755
--- a/src/QueryBuilder.php
+++ b/src/QueryBuilder.php
@@ -9,6 +9,7 @@
use ACTTraining\QueryBuilder\Support\Collection\CriteriaCollection;
use ACTTraining\QueryBuilder\Support\Concerns\WithActions;
use ACTTraining\QueryBuilder\Support\Concerns\WithCaching;
+use ACTTraining\QueryBuilder\Support\Concerns\WithCardView;
use ACTTraining\QueryBuilder\Support\Concerns\WithColumns;
use ACTTraining\QueryBuilder\Support\Concerns\WithFilters;
use ACTTraining\QueryBuilder\Support\Concerns\WithIdentifier;
@@ -36,6 +37,7 @@ abstract class QueryBuilder extends Component
{
use WithActions;
use WithCaching;
+ use WithCardView;
use WithColumns;
use WithFilters;
use WithIdentifier;
diff --git a/src/Support/CardLayout.php b/src/Support/CardLayout.php
new file mode 100644
index 0000000..70c5383
--- /dev/null
+++ b/src/Support/CardLayout.php
@@ -0,0 +1,76 @@
+imageKey = $key;
+
+ return $this;
+ }
+
+ public function placeholder(string $url): static
+ {
+ $this->placeholderImage = $url;
+
+ return $this;
+ }
+
+ public function columns(int $columns): static
+ {
+ $this->gridColumns = $columns;
+
+ return $this;
+ }
+
+ public function view(string $view): static
+ {
+ $this->cardView = $view;
+
+ return $this;
+ }
+
+ public function getImageKey(): ?string
+ {
+ return $this->imageKey;
+ }
+
+ public function getPlaceholderImage(): ?string
+ {
+ return $this->placeholderImage;
+ }
+
+ public function getGridColumns(): int
+ {
+ return $this->gridColumns;
+ }
+
+ public function getCardView(): string
+ {
+ return $this->cardView;
+ }
+
+ public function getImageUrl(mixed $row): ?string
+ {
+ if (! $this->imageKey) {
+ return null;
+ }
+
+ return data_get($row, $this->imageKey) ?? $this->placeholderImage;
+ }
+}
diff --git a/src/Support/Concerns/WithCardView.php b/src/Support/Concerns/WithCardView.php
new file mode 100644
index 0000000..bc79ea8
--- /dev/null
+++ b/src/Support/Concerns/WithCardView.php
@@ -0,0 +1,30 @@
+viewMode = $this->viewMode === 'table' ? 'cards' : 'table';
+ }
+
+ public function isCardViewEnabled(): bool
+ {
+ return $this->cardLayout() !== null;
+ }
+
+ public function isCardMode(): bool
+ {
+ return $this->isCardViewEnabled() && $this->viewMode === 'cards';
+ }
+}
diff --git a/src/TableBuilder.php b/src/TableBuilder.php
index 6b5cf8b..30e228f 100755
--- a/src/TableBuilder.php
+++ b/src/TableBuilder.php
@@ -5,6 +5,7 @@
namespace ACTTraining\QueryBuilder;
use ACTTraining\QueryBuilder\Support\Concerns\WithActions;
+use ACTTraining\QueryBuilder\Support\Concerns\WithCardView;
use ACTTraining\QueryBuilder\Support\Concerns\WithColumns;
use ACTTraining\QueryBuilder\Support\Concerns\WithFilters;
use ACTTraining\QueryBuilder\Support\Concerns\WithIdentifier;
@@ -31,6 +32,7 @@
abstract class TableBuilder extends Component
{
use WithActions;
+ use WithCardView;
use WithColumns;
use WithFilters;
use WithIdentifier;