parseDataTableQuery($request); $isActive = $request->string('is_active')->toString(); return Inertia::render('admin/master/products/Index', [ 'products' => $this->productService->paginateForIndex($tableQuery, $isActive), 'outOfStockGroups' => $this->productService->outOfStockGroups(), 'stockWarningGroups' => $this->productService->stockWarningGroups(), 'filters' => $this->dataTableFilters($tableQuery, [ 'is_active' => $isActive, ]), ]); } public function create(): Response { return Inertia::render('admin/master/products/Create', [ 'categories' => $this->productService->categoryOptions(), 'priceTypes' => PriceType::selectOptions(), ]); } public function store(ProductRequest $request): RedirectResponse { $this->productService->create($request->validated()); $this->flashCreated('Produk'); return redirect()->route('admin.master.products.index'); } public function edit(Product $product): Response { $product->load([ 'categories', 'variants' => fn ($query) => $query ->with(['prices' => fn ($query) => $query->orderBy('type'), 'media']) ->orderBy('created_at'), ]); $product->variants->each(function (ProductVariant $variant): void { $variant->setAttribute('images', MediaPresenter::collection($variant, 'images')); }); return Inertia::render('admin/master/products/Edit', [ 'categories' => $this->productService->categoryOptions(), 'priceTypes' => PriceType::selectOptions(), 'product' => $product, ]); } public function update(ProductRequest $request, Product $product): RedirectResponse { $this->productService->update($product, $request->validated()); $this->flashUpdated('Produk'); return redirect()->route('admin.master.products.index'); } public function toggleStatus(Request $request, Product $product): RedirectResponse { $validated = $request->validate([ 'is_active' => ['required', 'boolean'], ]); $this->productService->toggleStatus($product, $validated['is_active']); $this->flashStatusUpdated('produk'); return back(); } public function destroy(Product $product): RedirectResponse { $this->productService->delete($product); $this->flashDeleted('Produk'); return redirect()->route('admin.master.products.index'); } }