getList([]); // Render gender links HTML $genderHtml = ''; $currentGenderId = $request->input('current_gender'); foreach ($genders as $gender) { $isActive = $currentGenderId == $gender->id; $genderHtml .= ''; } return response()->json([ 'success' => true, 'genders' => $genderHtml ]); } public function categories(Request $request) { $categoryRepository = new CategoryRepository; $categories = $categoryRepository->getList([]); // Render category links HTML $categoryHtml = ''; $currentCategoryId = $request->input('current_category'); foreach ($categories as $category) { $isActive = $currentCategoryId == $category->id; $categoryHtml .= ''; } return response()->json([ 'success' => true, 'categories' => $categoryHtml ]); } public function ajax(Request $request) { $limit = 20; $page = $request->page ?? 1; $search = $request->search; $filter = $request->filter ?? []; $sortBy = $request->sort_by ?? 'relevance'; $price_range_start = $request->price_range_start ?? null; $price_range_end = $request->price_range_end ?? null; $user = auth()->user(); $userId = $user ? $user->id : 0; [$location_id, $is_consignment] = Cache::remember('employee_user_'.$userId, 60 * 60 * 24, function () use ($user) { if ($user == null) { return [10, false]; } $employee = @$user->employee; $location_id = @$employee->location_id; $location = @$employee->location; $is_consignment = (bool) @$location->is_consignment; return [$location_id, $is_consignment]; }); $productRepository = new ProductRepository; $products = $productRepository->getList([ 'limit' => $page * $limit, 'sort' => $sortBy, 'category_id' => $filter['category'] ?? null, 'gender_id' => $filter['gender'] ?? null, 'search' => $search, 'location_id' => $location_id, 'is_consignment' => $is_consignment, 'price_range_start' => $price_range_start, 'price_range_end' => $price_range_end, ]); // Check if there are more products $hasMore = count($products) >= $limit; // Render product cards HTML $productHtml = ''; if (count($products) == 0) { $productHtml = '
'; $productHtml .= 'Pencarian tidak ditemukan'; $productHtml .= '
'; } else { foreach ($products as $product) { $productHtml .= '
'; $productHtml .= view('components.home.product-card', ['product' => $product])->render(); $productHtml .= '
'; } } // filter $filter = $request->filter ?? []; if (isset($filter['category']) && $filter['category']){ $category = StoreCategory::find($filter['category']); if ($category) { $filter['category'] = $category->name; } else { unset($filter); } } if (isset($filter['gender']) && $filter['gender']) { $gender = Gender::find($filter['gender']); if ($gender) { $filter['gender'] = $gender->name; } else { unset($filter); } } $filters = $filter; return response()->json([ 'success' => true, 'filters' => $filters, 'products' => $productHtml, 'count' => count($products), 'has_more' => $hasMore, 'current_page' => $page ]); } public function index(Request $request) { $productRepository = new ProductRepository; $products = []; $filters = []; $min_max_price = $productRepository->getMinMaxPrice(); return view('shop.catalog-fashion', [ 'products' => $products, 'min_max_price' => $min_max_price, ]); } public function detail($slug, Request $request, ProductRepository $productRepository) { $product = $productRepository->show($slug); $complete_look_products_data = $productRepository->getList([ 'category_id' => $product->category1_id, 'limit' => 4, ]); $complete_look_products = collect($complete_look_products_data->items())->chunk(2); return view('shop.product-fashion', [ 'product' => $product, 'complete_look_products' => $complete_look_products, ]); } }