diff src/Generator/View/IndexViewGenerator.php @ 32:45f384a24553 codex

Support for server side tables
author Luka Sitas <sitas.luka.97@gmail.com>
date Tue, 19 Aug 2025 22:15:50 -0400
parents 8dd668020310
children
line wrap: on
line diff
--- 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;
     }