WIP - Added my orders page

This commit is contained in:
Gilbert Kimutai 2019-04-23 06:21:32 +03:00
parent 3b08a0541c
commit ceda450bb8
11 changed files with 239 additions and 19 deletions

View File

@ -16,7 +16,7 @@ class OrderViewHolder(val context: Context, itemView: View) :
fun renderView(order: Order) {
val tvTitle = itemView.findViewById<TextView>(R.id.tvTitle)
tvTitle.text = order.orderNumber
tvTitle.text = "#" + order.orderNumber
}

View File

@ -12,6 +12,7 @@ import me.gilo.wc.ui.customer.ProfileActivity;
import me.gilo.wc.ui.customer.ShippingAddressActivity;
import me.gilo.wc.ui.home.HomeActivity;
import me.gilo.wc.ui.onboarding.AnonymousSignInActivity;
import me.gilo.wc.ui.order.MyOrdersActivity;
import me.gilo.wc.ui.product.CartActivity;
import me.gilo.wc.ui.product.ProductActivity;
import me.gilo.wc.ui.product.ShopActivity;
@ -55,4 +56,7 @@ abstract class ActivitiesModule {
@ContributesAndroidInjector
abstract AnonymousSignInActivity contributesAnonymousSignInActivity();
@ContributesAndroidInjector
abstract MyOrdersActivity contributesMyOrdersActivity();
}

View File

@ -7,6 +7,7 @@ import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import me.gilo.wc.ui.order.MyOrdersActivity;
import me.gilo.wc.utils.ViewModelFactory;
import me.gilo.wc.viewmodels.*;
@ -44,7 +45,10 @@ public abstract class ViewModelModule {
@ViewModelKey(CartViewModel.class)
abstract ViewModel bindCartViewModel(CartViewModel viewModel);
@Binds
@IntoMap
@ViewModelKey(OrderViewModel.class)
abstract ViewModel bindOrderViewModel(OrderViewModel viewModel);
@Binds
@IntoMap

View File

@ -11,6 +11,7 @@ import kotlinx.android.synthetic.main.fragment_profile.*
import me.gilo.raison.ui.user.onboarding.SignUpActivity
import me.gilo.wc.R
import me.gilo.wc.ui.customer.ProfileActivity
import me.gilo.wc.ui.order.MyOrdersActivity
import me.gilo.wc.viewmodels.ProductViewModel
import me.gilo.wc.viewmodels.UserViewModel
@ -53,6 +54,10 @@ class ProfileFragment : Fragment() {
startActivity(Intent(activity, SignUpActivity::class.java))
}
llMyOrders.setOnClickListener{
startActivity(Intent(activity, MyOrdersActivity::class.java))
}
}

View File

@ -1,19 +1,100 @@
package me.gilo.wc.ui.order
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import me.gilo.wc.R
import android.support.v7.widget.LinearLayoutManager
import android.view.View
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import kotlinx.android.synthetic.main.activity_my_orders.*
import kotlinx.android.synthetic.main.content_my_orders.*
import kotlinx.android.synthetic.main.state_empty.*
import me.gilo.wc.R
import me.gilo.wc.adapter.OrderAdapter
import me.gilo.wc.common.Status
import me.gilo.wc.ui.WooDroidActivity
import me.gilo.wc.ui.home.HomeActivity
import me.gilo.wc.viewmodels.OrderViewModel
import me.gilo.woodroid.models.Order
class MyOrdersActivity : AppCompatActivity() {
class MyOrdersActivity : WooDroidActivity<OrderViewModel>() {
override lateinit var viewModel: OrderViewModel
var orders: ArrayList<Order> = ArrayList()
lateinit var adapter: OrderAdapter
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my_orders)
setSupportActionBar(toolbar)
viewModel = getViewModel(OrderViewModel::class.java)
title = "My Orders"
val layoutManager = LinearLayoutManager(baseContext, LinearLayoutManager.VERTICAL, false)
rvOrders.layoutManager = layoutManager
rvOrders.isNestedScrollingEnabled = false
orders = ArrayList()
adapter = OrderAdapter(orders)
rvOrders.adapter = adapter
orders()
llEmptyState_layout.visibility = View.GONE
}
private fun showEmpty(title : String, description : String) {
tvEmptyState_title.text = title
tvEmptyState_description.text = description
llEmptyState_layout.visibility = View.VISIBLE
bEmptyState_action.setOnClickListener{
startActivity(Intent(baseContext, HomeActivity::class.java))
}
}
private fun orders() {
viewModel.orders().observe(this, android.arch.lifecycle.Observer { response ->
when (response!!.status()) {
Status.LOADING -> {
showLoading()
}
Status.SUCCESS -> {
orders.clear()
stopShowingLoading()
for (order in response.data()) {
orders.add(order)
}
adapter.notifyDataSetChanged()
}
Status.ERROR -> {
stopShowingLoading()
}
Status.EMPTY -> {
stopShowingLoading()
showEmpty("No orders", "Seems like you haven't ordered anything yet!")
}
}
})
}
}

View File

@ -0,0 +1,57 @@
package me.gilo.wc.viewmodels;
import android.arch.lifecycle.ViewModel;
import me.gilo.wc.common.WooLiveData;
import me.gilo.wc.repo.OrderRepository;
import me.gilo.wc.repo.ReviewRepository;
import me.gilo.woodroid.models.Order;
import me.gilo.woodroid.models.ProductReview;
import me.gilo.woodroid.models.filters.OrderFilter;
import javax.inject.Inject;
import java.util.List;
public final class OrderViewModel extends ViewModel {
private final OrderRepository orderRepository;
@Inject
OrderViewModel(OrderRepository orderRepository) {
this.orderRepository = orderRepository;
}
public WooLiveData<Order> addToCart(int productId) {
return orderRepository.addToCart(productId);
}
public WooLiveData<Order> create(Order order) {
return orderRepository.create(order);
}
public WooLiveData<Order> order(int id) {
return orderRepository.order(id);
}
public WooLiveData<List<Order>> orders() {
return orderRepository.orders();
}
public WooLiveData<List<Order>> orders(OrderFilter orderFilter) {
return orderRepository.orders(orderFilter);
}
public WooLiveData<Order> update(int id, Order order) {
return orderRepository.update(id, order);
}
public WooLiveData<Order> delete(int id) {
return orderRepository.delete(id);
}
public WooLiveData<Order> delete(int id, boolean force) {
return orderRepository.delete(id, force);
}
}

View File

@ -23,12 +23,48 @@
<include layout="@layout/content_my_orders"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
<include layout="@layout/state_empty"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_dialog_email"/>
android:background="@color/colorPrimary"
android:orientation="horizontal"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:paddingRight="16dp"
android:layout_margin="16dp"
android:gravity="center"
android:layout_gravity="bottom"
android:elevation="2dp"
android:id="@+id/flSave"
>
<TextView
android:id="@+id/bNext"
fontPath="@string/font_regular"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@color/colorPrimary"
android:text="Done"
android:padding="12dp"
android:gravity="center"
android:textAllCaps="false"
android:textColor="#ffffff"
android:textSize="16sp"
tools:ignore="MissingPrefix"/>
<ImageView
android:layout_width="32dp"
android:layout_height="32dp"
android:src="@drawable/ic_action_navigation_arrow_back_inverted"
android:tint="#ffffff"
android:layout_gravity="right|center"
android:rotation="180"
/>
</FrameLayout>
</android.support.design.widget.CoordinatorLayout>

View File

@ -1,12 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
<android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg"
android:orientation="vertical"
tools:ignore="MissingPrefix"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_my_orders"
tools:context=".ui.order.MyOrdersActivity">
>
</android.support.constraint.ConstraintLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg"
android:orientation="vertical"
android:paddingBottom="80dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:id="@+id/rvOrders"
android:elevation="2dp"
android:background="@drawable/rect_white"
>
</android.support.v7.widget.RecyclerView>
</LinearLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>

View File

@ -124,6 +124,7 @@
<LinearLayout
android:id="@+id/llMyOrders"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"

View File

@ -13,7 +13,8 @@
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:gravity="left"
android:textColor="@color/text_black_4"
android:text="Hey"
android:textColor="@color/colorPrimary"
android:textSize="16sp"/>
<View

View File

@ -8,7 +8,7 @@ import java.util.List;
public class Order {
public int id;
@SerializedName("order_number")
@SerializedName("number")
public String orderNumber;
@SerializedName("created_at")
public String createdAt;