diff --git a/app/Http/Controllers/ModuleGeneratorController.php b/app/Http/Controllers/ModuleGeneratorController.php index 5b9f250..a94d907 100644 --- a/app/Http/Controllers/ModuleGeneratorController.php +++ b/app/Http/Controllers/ModuleGeneratorController.php @@ -28,8 +28,6 @@ class ModuleGeneratorController extends Controller $request->validate([ 'title' => 'required|string|max:255', 'columns' => 'required|array', - 'columns.*.name' => 'required|string', - 'columns.*.type' => 'required|string', ]); $title = $request->title; @@ -45,8 +43,10 @@ class ModuleGeneratorController extends Controller $migrationContent = "id();\n"; foreach ($request->columns as $column) { - $colName = Str::snake($column['name']); $uiType = $column['type']; + if ($uiType === 'separator') continue; // No column for separator + + $colName = Str::snake($column['name']); $dbType = 'string'; switch ($uiType) { @@ -57,6 +57,7 @@ class ModuleGeneratorController extends Controller case 'time': $dbType = 'time'; break; case 'long-text': $dbType = 'longText'; break; case 'boolean': $dbType = 'boolean'; break; + case 'multiple-choice': $dbType = 'text'; break; // Use text for multiple selection default: $dbType = 'string'; break; } @@ -99,9 +100,40 @@ class ModuleGeneratorController extends Controller // Generate relationDatas $relationDatasCode = "[\n"; foreach ($request->columns as $column) { + $uiType = $column['type']; + if ($uiType === 'separator') { + $label = $column['label'] ?? 'Separator'; + $relationDatasCode .= " 'separator_" . rand(100, 999) . "' => [\n 'type' => 'separator',\n 'label' => '{$label}',\n ],\n"; + continue; + } + $colName = Str::snake($column['name']); - $colType = $column['type']; - $relationDatasCode .= " '{$colName}' => [\n 'type' => '{$colType}',\n ],\n"; + $relationDatasCode .= " '{$colName}' => [\n 'type' => '{$uiType}',\n"; + + if ($uiType === 'select' || $uiType === 'multiple-choice') { + $optionsStr = $column['options'] ?? ''; + $optionsArr = array_map('trim', explode(',', $optionsStr)); + $relationDatasCode .= " 'datas' => [\n"; + foreach ($optionsArr as $opt) { + if (empty($opt)) continue; + $relationDatasCode .= " ['id' => '{$opt}', 'name' => '{$opt}'],\n"; + } + $relationDatasCode .= " ],\n"; + if ($uiType === 'select') { + $relationDatasCode .= " 'value' => 'id',\n"; + } + if ($uiType === 'multiple-choice') { + $relationDatasCode .= " 'pattern' => '{name}',\n"; + $relationDatasCode .= " 'seperator' => ',',\n"; + } + } elseif ($uiType === 'select-dropdown') { + $source = $column['source'] ?? ''; + $relationDatasCode .= " 'dataSource' => '{$source}',\n"; + $relationDatasCode .= " 'datas' => [],\n"; + $relationDatasCode .= " 'pattern' => '{name}',\n"; + } + + $relationDatasCode .= " ],\n"; } $relationDatasCode .= "]"; @@ -125,7 +157,7 @@ class ModuleGeneratorController extends Controller $type->slug = $slug; $type->icon = $iconName; $type->enabled = 1; - $type->full_control = "1"; // Default admin level + $type->full_control = "1"; $type->write = "1"; $type->read = "1"; $type->modify = "1"; diff --git a/resources/views/admin/module-generator.blade.php b/resources/views/admin/module-generator.blade.php index 9b3c5f0..658a76d 100644 --- a/resources/views/admin/module-generator.blade.php +++ b/resources/views/admin/module-generator.blade.php @@ -1,123 +1,231 @@ @extends('admin.master') -@section("title", e2("Module Generator")) -@section("desc", e2("Create a new module with model, migration and view automatically.")) +@section("title", e2("Module Generator Wizard")) +@section("desc", e2("Follow the steps to create a complex module.")) @section('content')