# HG changeset patch # User Luka Sitas # Date 1755656150 14400 # Node ID 45f384a245539a6b1869b124cfb2d69bc9af097a # Parent 8dd66802031045a5ed25e826f5ac2afcd7717956 Support for server side tables diff -r 8dd668020310 -r 45f384a24553 src/Generator/Controller/stubs/controller.stub --- a/src/Generator/Controller/stubs/controller.stub Tue Aug 19 20:34:53 2025 -0400 +++ b/src/Generator/Controller/stubs/controller.stub Tue Aug 19 22:15:50 2025 -0400 @@ -24,6 +24,15 @@ return view('{{ tableName }}.index', $data); } + public function get_data() + { + $data = []; + $data['records'] = {{ model }}::get_data([]); + $data['total_records'] = count($data['records']); + + return $data; + } + /** * Show the form for creating a new resource. * diff -r 8dd668020310 -r 45f384a24553 src/Generator/Route/stubs/routes.stub --- a/src/Generator/Route/stubs/routes.stub Tue Aug 19 20:34:53 2025 -0400 +++ b/src/Generator/Route/stubs/routes.stub Tue Aug 19 22:15:50 2025 -0400 @@ -6,7 +6,8 @@ ->prefix('{{ tableName }}') ->as('{{ tableName }}.') ->group( function () { - Route::get('/', 'index')->name('index'); + Route::get('/', 'index')->name('index'); + Route::post('/get_data', 'get_data')->name('get_data'); Route::get('/create', 'create')->name('create'); Route::get('/{{{ modelVariable }}}/edit', 'edit')->name('edit'); Route::get('/{{{ modelVariable }}}', 'show')->name('show'); diff -r 8dd668020310 -r 45f384a24553 src/Generator/View/IndexViewGenerator.php --- a/src/Generator/View/IndexViewGenerator.php Tue Aug 19 20:34:53 2025 -0400 +++ b/src/Generator/View/IndexViewGenerator.php Tue Aug 19 22:15:50 2025 -0400 @@ -2,10 +2,10 @@ namespace Wizard\MagicForger\Generator\View; +use Illuminate\Support\Str; use Symfony\Component\Console\Attribute\AsCommand; +use Wizard\MagicForger\Generator\BaseGenerator; use Wizard\MagicForger\Helpers\RelationshipNavigator; -use Wizard\MagicForger\Generator\BaseGenerator; -use Illuminate\Support\Str; #[AsCommand(name: 'mf:index_view')] class IndexViewGenerator extends BaseGenerator @@ -76,91 +76,77 @@ { return str_replace(['Resources\\', '\\'], ['resources/', '/'], $this->getViewNamespace($this->getTableInput()).'index.blade.php'); } - + + protected function renderColumns() + { + $renders = []; + $values = []; - protected function renderColumns() { - $renders = []; - $headers = []; - $values = []; - $colCount = 0; + $columns = $this->getTableColumns($this->getCurrentTable()); + $relations = RelationshipNavigator::getRelations($this->getCurrentTable()); + // gether the select columns based on the relations + $selects = []; - $columns = $this->getTableColumns($this->getCurrentTable()); - $relations = RelationshipNavigator::getRelations($this->getCurrentTable()); - //gether the select columns based on the relations - $selects = []; + foreach ($relations['belongsTo'] as $relation) { + $selects[$relation['column']] = $relation['table']; + } - foreach($relations['belongsTo'] as $relation) { - $selects[$relation['column']] = $relation['table']; - } - - foreach($columns as $column) { - $name = $column['name']; - if(in_array($name, $this->columns_to_ignore)) continue; - + foreach ($columns as $column) { + $name = $column['name']; + if (in_array($name, $this->columns_to_ignore)) { + continue; + } - //Get the expected header name - $replacements = [ - '{{header}}' => Str::headline($name), - '{{headerClass}}' => 'p-2', - '{{value}}' => '{{ $item->' . $name . ' ?? "" }}', - '{{valueClass}}' => 'p-2', - ]; + // Get the expected header name + $replacements = [ + '{{header}}' => Str::headline($name), + '{{column_name}}' => $name, + '{{valueClass}}' => 'p-2', + ]; - $type = $column['type_name']; - + $type = $column['type_name']; - //date - if(in_array($type, ['date'])) { - $replacements['{{value}}'] = '{{ $item->'.$name.'?->format(\'Y-m-d\') ?? "" }}'; - } - //time - if(in_array($type, ['timestamp'])) { - $replacements['{{value}}'] = '{{ $item->'.$name.'?->format(\'Y-m-d H:i\') ?? "" }}'; - } - //checkbox - if(in_array($type, ['tinyint'])) { - $replacements['{{valueClass}}'] .= ' text-center'; - $replacements['{{value}}'] = '{{ $item->' . $name . ' ?? "0" }}'; - } - //select - elseif(in_array($type, ['bigint']) && array_key_exists($name, $selects)) { - $replacements['{{header}}'] = Str::headline(Str::singular($selects[$name])); - $replacements['{{value}}'] = '{{ $item->'.Str::singular($selects[$name]) . '?->name ?? "" }}'; - } - // bigint, float - elseif(in_array($type, ['bigint', 'float', 'int'])) { - $replacements['{{valueClass}}'] .= ' text-start'; - } - else { - //text area - //varchar, , etc - } + // date + if (in_array($type, ['date'])) { + $replacements['{{value}}'] = '{{ $item->'.$name.'?->format(\'Y-m-d\') ?? "" }}'; + } + // time + if (in_array($type, ['timestamp'])) { + $replacements['{{value}}'] = '{{ $item->'.$name.'?->format(\'Y-m-d H:i\') ?? "" }}'; + } + // checkbox + if (in_array($type, ['tinyint'])) { + $replacements['{{valueClass}}'] .= ' text-center'; + $replacements['{{value}}'] = '{{ $item->'.$name.' ?? "0" }}'; + } + // select + elseif (in_array($type, ['bigint']) && array_key_exists($name, $selects)) { + $replacements['{{header}}'] = Str::headline(Str::singular($selects[$name])); + $replacements['{{value}}'] = '{{ $item->'.Str::singular($selects[$name]).'?->name ?? "" }}'; + } + // bigint, float + elseif (in_array($type, ['bigint', 'float', 'int'])) { + $replacements['{{valueClass}}'] .= ' text-start'; + } else { + // text area + // varchar, , etc + } - $snippet = $this->getSnippet('index/value'); - // Replace placeholders with actual values - $values[] = str_replace( - array_keys($replacements), - $replacements, - $snippet - ); + $snippet = $this->getSnippet('index/value'); + // Replace placeholders with actual values + $values[] = str_replace( + array_keys($replacements), + $replacements, + $snippet + ); - $snippet = $this->getSnippet('index/header'); - // Replace placeholders with actual values - $headers[] = str_replace( - array_keys($replacements), - $replacements, - $snippet - ); - $colCount++; - } + } - return ['headers' => $headers, 'values' => $values, 'colCount' => $colCount]; - } + return ['values' => $values]; + } /** * Get available insertions including model relationships. - * - * @return array */ public function get_available_inserts(): array { @@ -171,20 +157,16 @@ $rendered = $this->renderColumns(); // Build code blocks for each relation type - $headers = ''; - $values = ''; - $colCount = ''; - - if(!empty($rendered)) { - $headers = !empty($rendered['headers']) ? implode("\n ", $rendered['headers']) : ''; - $values = !empty($rendered['values']) ? implode("\n ", $rendered['values']) : ''; - $colCount = isset($rendered['colCount']) ? $rendered['colCount'] : ''; - } + $headers = ''; + $values = ''; + $colCount = ''; + + if (! empty($rendered)) { + $values = ! empty($rendered['values']) ? implode("\n ", $rendered['values']) : ''; + } // Assign to stub placeholders - $inserts['{{ headerInsertPoint }}'] = $headers; - $inserts['{{ valueInsertPoint }}'] = $values; - $inserts['{{ colCount }}'] = $colCount; + $inserts['{{ columnInsertPoint }}'] = $values; return $inserts; } diff -r 8dd668020310 -r 45f384a24553 src/Generator/View/snippets/index/value.stub --- a/src/Generator/View/snippets/index/value.stub Tue Aug 19 20:34:53 2025 -0400 +++ b/src/Generator/View/snippets/index/value.stub Tue Aug 19 22:15:50 2025 -0400 @@ -1,1 +1,5 @@ -{{value}} +{ + name: '{{column_name}}', + label: '{{header}}', + class: '{{valueClass}}' +}, diff -r 8dd668020310 -r 45f384a24553 src/Generator/View/stubs/index.stub --- a/src/Generator/View/stubs/index.stub Tue Aug 19 20:34:53 2025 -0400 +++ b/src/Generator/View/stubs/index.stub Tue Aug 19 22:15:50 2025 -0400 @@ -8,43 +8,76 @@
- - - - - {{ headerInsertPoint }} - - - - - @forelse ($items as $item) - - {{ valueInsertPoint }} - - - @empty - - - - @endforelse - -
Actions
-
- View - Edit -
- @csrf - @method('DELETE') - -
-
-
No {{ tableName }} found.
+ +
+
+ + @include('includes.ServerTable') + @pushOnce('scripts') + + @endpushOnce +