From 1d00a3b55c9240fdbbd41e156a094db242615153 Mon Sep 17 00:00:00 2001 From: Alex <78383757+Lextical@users.noreply.github.com> Date: Tue, 7 Apr 2026 04:19:51 -0600 Subject: [PATCH] updated search to call api for supplier --- .../petstoremobile/api/SupplierApi.java | 4 +- .../listfragments/SupplierFragment.java | 55 ++++++++-------- .../ProductSupplierDetailFragment.java | 2 +- .../repositories/SupplierRepository.java | 4 +- .../viewmodels/SupplierViewModel.java | 4 +- .../src/main/res/layout/fragment_supplier.xml | 66 +++++++++++++++---- 6 files changed, 90 insertions(+), 45 deletions(-) diff --git a/android/app/src/main/java/com/example/petstoremobile/api/SupplierApi.java b/android/app/src/main/java/com/example/petstoremobile/api/SupplierApi.java index 47d4e1e3..9f870a51 100644 --- a/android/app/src/main/java/com/example/petstoremobile/api/SupplierApi.java +++ b/android/app/src/main/java/com/example/petstoremobile/api/SupplierApi.java @@ -18,7 +18,9 @@ public interface SupplierApi { @GET("api/v1/suppliers") Call> getAllSuppliers( @Query("page") int page, - @Query("size") int size + @Query("size") int size, + @Query("q") String query, + @Query("sort") String sort ); // Get supplier by id diff --git a/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/SupplierFragment.java b/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/SupplierFragment.java index e3a0c131..3d2e038d 100644 --- a/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/SupplierFragment.java +++ b/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/SupplierFragment.java @@ -34,7 +34,6 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp private FragmentSupplierBinding binding; private List supplierList = new ArrayList<>(); - private List filteredList = new ArrayList<>(); private SupplierAdapter adapter; private SupplierViewModel viewModel; @@ -58,6 +57,7 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp setupRecyclerView(); setupSearch(); setupSwipeRefresh(); + setupFilterToggle(); loadSupplierData(); //Add button to opens the add dialog @@ -83,6 +83,24 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp binding = null; } + /** + * Sets up the filter toggle button to show/hide the filter layout. + */ + private void setupFilterToggle() { + binding.btnToggleFilter.setOnClickListener(v -> { + if (binding.layoutFilter.getVisibility() == View.GONE) { + binding.layoutFilter.setVisibility(View.VISIBLE); + binding.btnToggleFilter.setImageResource(android.R.drawable.ic_menu_close_clear_cancel); + } else { + binding.layoutFilter.setVisibility(View.GONE); + binding.btnToggleFilter.setImageResource(android.R.drawable.ic_menu_search); + + // Reset search when closing + binding.etSearchSupplier.setText(""); + } + }); + } + /** * Configures the search bar for filtering. */ @@ -90,32 +108,12 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp binding.etSearchSupplier.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - filterSuppliers(s.toString()); + loadSupplierData(); } @Override public void afterTextChanged(Editable s) {} }); } - /** - * Filters the supplier list based on the search query across company name and contact person. - */ - private void filterSuppliers(String query) { - filteredList.clear(); - if (query.isEmpty()) { - filteredList.addAll(supplierList); - } else { - String lower = query.toLowerCase(); - for (SupplierDTO s : supplierList) { - if ((s.getSupCompany() != null && s.getSupCompany().toLowerCase().contains(lower)) - || (s.getSupContactFirstName() != null && s.getSupContactFirstName().toLowerCase().contains(lower)) - || (s.getSupContactLastName() != null && s.getSupContactLastName().toLowerCase().contains(lower))) { - filteredList.add(s); - } - } - } - adapter.notifyDataSetChanged(); - } - /** * Sets up the SwipeRefreshLayout to allow manual reloading of supplier data. */ @@ -132,7 +130,7 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp //if editing a supplier, add the supplier id to the bundle if (position != -1) { - SupplierDTO supplier = filteredList.get(position); + SupplierDTO supplier = supplierList.get(position); args.putLong("supId", supplier.getSupId()); } @@ -152,8 +150,11 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp * Fetches all supplier data from the server through the ViewModel and updates the UI. */ private void loadSupplierData() { - //Load all suppliers from the backend using viewModel - viewModel.getAllSuppliers(0, 100).observe(getViewLifecycleOwner(), resource -> { + String query = binding.etSearchSupplier != null ? binding.etSearchSupplier.getText().toString().trim() : ""; + if (query.isEmpty()) query = null; + + //Load suppliers from the backend with query and default sort + viewModel.getAllSuppliers(0, 100, query, "supCompany").observe(getViewLifecycleOwner(), resource -> { if (resource == null) return; // Check the status to see if the resource is loaded and display the data @@ -168,7 +169,7 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp if (resource.data != null) { supplierList.clear(); supplierList.addAll(resource.data.getContent()); - filterSuppliers(binding.etSearchSupplier.getText().toString()); + adapter.notifyDataSetChanged(); } break; case ERROR: @@ -187,7 +188,7 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp * Initializes the RecyclerView with a layout manager and adapter for displaying suppliers. */ private void setupRecyclerView() { - adapter = new SupplierAdapter(filteredList, this); + adapter = new SupplierAdapter(supplierList, this); binding.recyclerViewSuppliers.setLayoutManager(new LinearLayoutManager(getContext())); binding.recyclerViewSuppliers.setAdapter(adapter); } diff --git a/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/ProductSupplierDetailFragment.java b/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/ProductSupplierDetailFragment.java index 495c0f6d..0674c458 100644 --- a/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/ProductSupplierDetailFragment.java +++ b/android/app/src/main/java/com/example/petstoremobile/fragments/listfragments/detailfragments/ProductSupplierDetailFragment.java @@ -107,7 +107,7 @@ public class ProductSupplierDetailFragment extends Fragment { * Loads the list of suppliers from the API. */ private void loadSuppliers() { - supplierViewModel.getAllSuppliers(0, 200).observe(getViewLifecycleOwner(), resource -> { + supplierViewModel.getAllSuppliers(0, 200, null, "supCompany").observe(getViewLifecycleOwner(), resource -> { if (resource.status == Resource.Status.SUCCESS && resource.data != null) { supplierList = resource.data.getContent(); refreshSupplierSpinner(); diff --git a/android/app/src/main/java/com/example/petstoremobile/repositories/SupplierRepository.java b/android/app/src/main/java/com/example/petstoremobile/repositories/SupplierRepository.java index ec0489ca..e4eb4c0c 100644 --- a/android/app/src/main/java/com/example/petstoremobile/repositories/SupplierRepository.java +++ b/android/app/src/main/java/com/example/petstoremobile/repositories/SupplierRepository.java @@ -23,8 +23,8 @@ public class SupplierRepository extends BaseRepository { /** * Retrieves a paginated list of all suppliers from the API. */ - public LiveData>> getAllSuppliers(int page, int size) { - return executeCall(supplierApi.getAllSuppliers(page, size)); + public LiveData>> getAllSuppliers(int page, int size, String query, String sort) { + return executeCall(supplierApi.getAllSuppliers(page, size, query, sort)); } /** diff --git a/android/app/src/main/java/com/example/petstoremobile/viewmodels/SupplierViewModel.java b/android/app/src/main/java/com/example/petstoremobile/viewmodels/SupplierViewModel.java index 7885c898..a89426de 100644 --- a/android/app/src/main/java/com/example/petstoremobile/viewmodels/SupplierViewModel.java +++ b/android/app/src/main/java/com/example/petstoremobile/viewmodels/SupplierViewModel.java @@ -24,8 +24,8 @@ public class SupplierViewModel extends ViewModel { /** * Fetches a paginated list of all suppliers. */ - public LiveData>> getAllSuppliers(int page, int size) { - return repository.getAllSuppliers(page, size); + public LiveData>> getAllSuppliers(int page, int size, String query, String sort) { + return repository.getAllSuppliers(page, size, query, sort); } /** diff --git a/android/app/src/main/res/layout/fragment_supplier.xml b/android/app/src/main/res/layout/fragment_supplier.xml index 9036b6ea..197367d1 100644 --- a/android/app/src/main/res/layout/fragment_supplier.xml +++ b/android/app/src/main/res/layout/fragment_supplier.xml @@ -29,27 +29,69 @@ android:contentDescription="Open menu"/> + android:textStyle="bold" + android:layout_marginStart="8dp"/> + + - + android:orientation="vertical" + android:paddingStart="12dp" + android:paddingEnd="12dp" + android:paddingTop="10dp" + android:paddingBottom="10dp" + android:visibility="gone" + android:background="@color/primary_dark" + android:elevation="4dp"> + + + + + + + + + +