Commit 0e19e34e authored by Wahyu Wibowo's avatar Wahyu Wibowo

add fitur filter transaksi by status

parent 3a23705a
......@@ -8,6 +8,8 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.PopupMenu;
import com.example.yourcashiertest.R;
import com.example.yourcashiertest.adapters.OrderAdapter;
......@@ -29,9 +31,29 @@ public class OrderActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_order);
adapter = new OrderAdapter();
viewModel = new ViewModelProvider(this).get(TransaksiViewModel.class);
binding.btnFilter.setOnClickListener(view -> {
PopupMenu popupMenu = new PopupMenu(getApplicationContext(), binding.btnFilter);
popupMenu.inflate(R.menu.menu_filter_transaction);
popupMenu.setOnMenuItemClickListener(menuItem -> {
switch (menuItem.getItemId()){
case R.id.all:
viewModel.filter("");
break;
case R.id.pending:
viewModel.filter("Pending");
break;
case R.id.success:
viewModel.filter("Success");
break;
}
return false;
});
popupMenu.show();
});
adapter = new OrderAdapter();
binding.rvListOrder.setLayoutManager(new LinearLayoutManager(this));
binding.rvListOrder.setAdapter(adapter);
viewModel.getList().observe(this, transaksi -> adapter.setTransaksiList(transaksi));
......
......@@ -21,6 +21,9 @@ public interface TransaksiDao {
@Query("SELECT * FROM Transaksi ORDER BY orderId ASC")
LiveData<List<Transaksi>> getAll();
@Query("SELECT * FROM Transaksi WHERE status LIKE :query ORDER BY orderId ASC")
LiveData<List<Transaksi>> getFilteredTransaksi(String query);
@Insert(onConflict = OnConflictStrategy.IGNORE)
void insertTransaksi(Transaksi transaksi);
......
......@@ -36,4 +36,8 @@ public class TransaksiRepository {
public void delete(Transaksi transaksi){
LocalDatabase.databaseWriteExecutor.execute(() -> dao.deleteTransaksi(transaksi));
}
public LiveData<List<Transaksi>> filterTransaksi(String s){
return dao.getFilteredTransaksi(s);
}
}
......@@ -2,10 +2,13 @@ package com.example.yourcashiertest.viewmodels;
import android.app.Application;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Transformations;
import com.example.yourcashiertest.entities.Transaksi;
import com.example.yourcashiertest.repositories.TransaksiRepository;
......@@ -14,12 +17,13 @@ import java.util.List;
public class TransaksiViewModel extends AndroidViewModel {
private LiveData<List<Transaksi>> list;
private MutableLiveData<String> query = new MutableLiveData<>("%");
private TransaksiRepository repository;
public TransaksiViewModel(@NonNull Application application) {
super(application);
repository = new TransaksiRepository(application);
list = repository.getAllTransaksi();
list = Transformations.switchMap(query, s -> repository.filterTransaksi(s));
}
public LiveData<List<Transaksi>> getList() {
......@@ -38,4 +42,9 @@ public class TransaksiViewModel extends AndroidViewModel {
public void deleteTransaksi(Transaksi transaksi){
repository.delete(transaksi);
}
public void filter(String s) {
String query = TextUtils.isEmpty(s) ? "%" : "%" + s + "%";
this.query.postValue(query);
}
}
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="18"
android:viewportHeight="18">
<path
android:fillColor="#FF000000"
android:pathData="M0,14L0,16L6,16L6,14L0,14ZM0,2L0,4L10,4L10,2L0,2ZM10,18L10,16L18,16L18,14L10,14L10,12L8,12L8,18L10,18ZM4,6L4,8L0,8L0,10L4,10L4,12L6,12L6,6L4,6ZM18,10L18,8L8,8L8,10L18,10ZM12,6L14,6L14,4L18,4L18,2L14,2L14,0L12,0L12,6Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
......@@ -21,50 +21,63 @@
android:layout_marginBottom="4dp"
android:text="TRANSACTION LIST"
android:textAppearance="@style/payment"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.105" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnPending"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:text="PENDING"
android:textSize="10dp"
android:backgroundTint="@color/colorPending"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btnSuccess"
app:layout_constraintTop_toBottomOf="@id/tvListOrder"
app:layout_constraintBottom_toTopOf="@id/rvListOrder"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="654dp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnSuccess"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="SUCCESS"
android:textSize="10dp"
app:layout_constraintStart_toEndOf="@+id/btnPending"
app:layout_constraintBottom_toTopOf="@id/rvListOrder"
<ImageButton
android:id="@+id/btnFilter"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_marginEnd="10dp"
android:background="@drawable/shr_filter"
app:layout_constraintBottom_toBottomOf="@+id/tvListOrder"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvListOrder"
app:layout_constraintVertical_bias="0.0" />
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toEndOf="@+id/tvListOrder"
app:layout_constraintTop_toTopOf="@+id/tvListOrder" />
<!-- <com.google.android.material.button.MaterialButton-->
<!-- android:id="@+id/btnPending"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginEnd="5dp"-->
<!-- android:text="PENDING"-->
<!-- android:textSize="10dp"-->
<!-- android:backgroundTint="@color/colorPending"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintEnd_toStartOf="@+id/btnSuccess"-->
<!-- app:layout_constraintTop_toBottomOf="@id/tvListOrder"-->
<!-- app:layout_constraintBottom_toTopOf="@id/rvListOrder"-->
<!-- tools:layout_editor_absoluteX="16dp"-->
<!-- tools:layout_editor_absoluteY="654dp" />-->
<!-- <com.google.android.material.button.MaterialButton-->
<!-- android:id="@+id/btnSuccess"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginStart="5dp"-->
<!-- android:text="SUCCESS"-->
<!-- android:textSize="10dp"-->
<!-- app:layout_constraintStart_toEndOf="@+id/btnPending"-->
<!-- app:layout_constraintBottom_toTopOf="@id/rvListOrder"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintTop_toBottomOf="@id/tvListOrder"-->
<!-- app:layout_constraintVertical_bias="0.0" />-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvListOrder"
android:layout_width="match_parent"
android:layout_height="0dp"
android:padding="@dimen/space_small"
android:layout_marginTop="10dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnPending"
app:layout_constraintTop_toBottomOf="@id/tvListOrder"
tools:listitem="@layout/item_order" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/all"
android:title="All"/>
<item
android:id="@+id/pending"
android:title="Pending"/>
<item
android:id="@+id/success"
android:title="Success"/>
</menu>
\ No newline at end of file
......@@ -66,7 +66,7 @@
<style name="payment">
<item name="android:textSize">
27sp
25sp
</item>
<item name="android:textColor">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment