style updates
This commit is contained in:
@@ -1,13 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Builder\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\Builder\Models\BuilderDocument;
|
||||
use Modules\Builder\Services\BuilderRegistry;
|
||||
use Modules\Builder\Services\BuilderRenderer;
|
||||
|
||||
final class BuilderApiController extends Controller
|
||||
{
|
||||
public function components(BuilderRegistry $registry): JsonResponse { return response()->json(['data'=>$registry->components(),'widgets'=>$registry->widgets(),'fields'=>$registry->fields()]); }
|
||||
public function show(BuilderDocument $document): JsonResponse { return response()->json(['data'=>$document]); }
|
||||
public function preview(BuilderDocument $document, BuilderRenderer $renderer): JsonResponse { return response()->json(['html'=>$renderer->render($document->document ?? [])]); }
|
||||
public function components(BuilderRegistry $registry): JsonResponse
|
||||
{
|
||||
return response()->json(['data' => $registry->components(), 'widgets' => $registry->widgets(), 'fields' => $registry->fields()]);
|
||||
}
|
||||
|
||||
public function show(BuilderDocument $document): JsonResponse
|
||||
{
|
||||
return response()->json(['data' => $document]);
|
||||
}
|
||||
|
||||
public function preview(BuilderDocument $document, BuilderRenderer $renderer): JsonResponse
|
||||
{
|
||||
return response()->json(['html' => $renderer->render($document->document ?? [])]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Builder\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
@@ -8,22 +10,52 @@ use Illuminate\View\View;
|
||||
use Modules\Builder\Models\BuilderDocument;
|
||||
use Modules\Builder\Services\BuilderDocumentService;
|
||||
use Modules\Builder\Services\BuilderRegistry;
|
||||
|
||||
final class BuilderController extends Controller
|
||||
{
|
||||
public function index(Request $request): View
|
||||
{
|
||||
$type=$request->string('type')->toString();
|
||||
$documents=BuilderDocument::query()->when($type,fn($q)=>$q->where('type',$type))->latest()->paginate(20)->withQueryString();
|
||||
return view('builder::index',compact('documents','type'));
|
||||
$type = $request->string('type')->toString();
|
||||
$documents = BuilderDocument::query()->when($type, fn ($q) => $q->where('type', $type))->latest()->paginate(20)->withQueryString();
|
||||
|
||||
return view('builder::index', compact('documents', 'type'));
|
||||
}
|
||||
public function create(BuilderRegistry $registry): View { return view('builder::editor',['document'=>new BuilderDocument(['type'=>request('type','page'),'document'=>['nodes'=>[]]]),'components'=>$registry->components()]); }
|
||||
public function edit(BuilderDocument $document, BuilderRegistry $registry): View { return view('builder::editor',['document'=>$document,'components'=>$registry->components()]); }
|
||||
public function store(Request $request, BuilderDocumentService $service): RedirectResponse { $document=$service->save(new BuilderDocument(),$this->validated($request),$request->user()?->id); return redirect()->route('administration.builder.edit',$document)->with('status','Builder document created.'); }
|
||||
public function update(Request $request, BuilderDocument $document, BuilderDocumentService $service): RedirectResponse { $service->save($document,$this->validated($request),$request->user()?->id); return back()->with('status','Builder document saved.'); }
|
||||
public function destroy(BuilderDocument $document): RedirectResponse { $document->delete(); return redirect()->route('administration.builder.index')->with('status','Builder document deleted.'); }
|
||||
|
||||
public function create(BuilderRegistry $registry): View
|
||||
{
|
||||
return view('builder::editor', ['document' => new BuilderDocument(['type' => request('type', 'page'), 'document' => ['nodes' => []]]), 'components' => $registry->components()]);
|
||||
}
|
||||
|
||||
public function edit(BuilderDocument $document, BuilderRegistry $registry): View
|
||||
{
|
||||
return view('builder::editor', ['document' => $document, 'components' => $registry->components()]);
|
||||
}
|
||||
|
||||
public function store(Request $request, BuilderDocumentService $service): RedirectResponse
|
||||
{
|
||||
$document = $service->save(new BuilderDocument, $this->validated($request), $request->user()?->id);
|
||||
|
||||
return redirect()->route('administration.builder.edit', $document)->with('status', 'Builder document created.');
|
||||
}
|
||||
|
||||
public function update(Request $request, BuilderDocument $document, BuilderDocumentService $service): RedirectResponse
|
||||
{
|
||||
$service->save($document, $this->validated($request), $request->user()?->id);
|
||||
|
||||
return back()->with('status', 'Builder document saved.');
|
||||
}
|
||||
|
||||
public function destroy(BuilderDocument $document): RedirectResponse
|
||||
{
|
||||
$document->delete();
|
||||
|
||||
return redirect()->route('administration.builder.index')->with('status', 'Builder document deleted.');
|
||||
}
|
||||
|
||||
private function validated(Request $request): array
|
||||
{
|
||||
$data=$request->validate(['type'=>['required','in:'.implode(',',config('builder.allowed_types'))],'name'=>['required','string','max:255'],'slug'=>['nullable','string','max:255'],'status'=>['required','in:draft,published,archived'],'document_json'=>['required','json'],'settings_json'=>['nullable','json']]);
|
||||
return ['type'=>$data['type'],'name'=>$data['name'],'slug'=>$data['slug'] ?: Str::slug($data['name']),'status'=>$data['status'],'document'=>json_decode($data['document_json'],true,512,JSON_THROW_ON_ERROR),'settings'=>json_decode($data['settings_json'] ?: '{}',true,512,JSON_THROW_ON_ERROR),'published_at'=>$data['status']==='published'?now():null];
|
||||
$data = $request->validate(['type' => ['required', 'in:'.implode(',', config('builder.allowed_types'))], 'name' => ['required', 'string', 'max:255'], 'slug' => ['nullable', 'string', 'max:255'], 'status' => ['required', 'in:draft,published,archived'], 'document_json' => ['required', 'json'], 'settings_json' => ['nullable', 'json']]);
|
||||
|
||||
return ['type' => $data['type'], 'name' => $data['name'], 'slug' => $data['slug'] ?: Str::slug($data['name']), 'status' => $data['status'], 'document' => json_decode($data['document_json'], true, 512, JSON_THROW_ON_ERROR), 'settings' => json_decode($data['settings_json'] ?: '{}', true, 512, JSON_THROW_ON_ERROR), 'published_at' => $data['status'] === 'published' ? now() : null];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user