566 lines
15 KiB
JavaScript
Executable File
566 lines
15 KiB
JavaScript
Executable File
import { observable, transaction, action, computed } from "mobx";
|
|
import api from "./api";
|
|
import axios from "axios";
|
|
import Toast, { DURATION } from "react-native-easy-toast";
|
|
import AsyncStorageHelper from "../config/asyncStorageHelper";
|
|
import moment from "moment";
|
|
import language from '../config/language'
|
|
import { Alert,Platform } from "react-native";
|
|
const asyncStorageHelper = new AsyncStorageHelper();
|
|
class menu_store {
|
|
@observable menu = [];
|
|
@observable
|
|
date = {
|
|
days: 0,
|
|
hours: 0,
|
|
min: 0,
|
|
sec: 0
|
|
};
|
|
@observable errorMessage = "";
|
|
@observable loading = false;
|
|
@observable flatListWidth = 0;
|
|
@observable selected = false;
|
|
@observable orderHistory = { data: { content: [] } };
|
|
@observable currentOrder = [];
|
|
@observable passOrder = [];
|
|
@observable coupons = {};
|
|
@observable
|
|
cutoffDateTime = new Date();
|
|
@observable
|
|
timestamp = new Date();
|
|
@observable
|
|
menuDetails = {
|
|
id: 0,
|
|
tel: "",
|
|
count: 0,
|
|
price: 0,
|
|
tags: [],
|
|
name: "",
|
|
nameEn: "",
|
|
imageURL: "",
|
|
intro_ch: "",
|
|
intro_en: "",
|
|
restaurant: {
|
|
name: "",
|
|
nameEn: "",
|
|
addrEn: "",
|
|
addr: ""
|
|
}
|
|
};
|
|
orderList = [];
|
|
items = [];
|
|
orderReturn = {};
|
|
pageNo = 1;
|
|
totalPage = 0;
|
|
@observable
|
|
pickupPointId = null;
|
|
@observable
|
|
sharemessage = {}
|
|
couponLabel = []
|
|
//for test
|
|
date1 = new Date(Date.UTC(2018, 9, 31, 3, 0, 0));
|
|
pickupDate = "?date=today";
|
|
constructor() {}
|
|
|
|
@action
|
|
async getMenuItem(self) {
|
|
this.selected = false;
|
|
this.loading = true;
|
|
this.pageNo = 1;
|
|
var requestURL = api.getMenu;
|
|
asyncStorageHelper.getData("pickupPointId", pickupPointId => {
|
|
let num = parseInt(pickupPointId);
|
|
this.pickupPointId = num;
|
|
pickupPointId = num.toString();
|
|
requestURL =
|
|
requestURL +
|
|
this.pickupDate +
|
|
"&pick-up-location-id=" +
|
|
pickupPointId.toString();
|
|
console.log("request:" + pickupPointId);
|
|
this.getMenu(self, requestURL, pickupPointId);
|
|
});
|
|
}
|
|
|
|
async updateMenu() {
|
|
this.selected = false;
|
|
this.loading = true;
|
|
this.pageNo = 1;
|
|
var requestURL = api.getMenu;
|
|
requestURL =
|
|
requestURL +
|
|
this.pickupDate +
|
|
"&pick-up-location-id=" +
|
|
this.pickupPointId.toString();
|
|
this.getMenuByUpdate(requestURL, this.pickupPointId);
|
|
}
|
|
|
|
@action
|
|
async updateMenuByMap(self, id) {
|
|
this.selected = false;
|
|
this.loading = true;
|
|
this.pageNo = 1;
|
|
var requestURL = api.getMenu;
|
|
let num = parseInt(id);
|
|
pickupPointId = num.toString();
|
|
requestURL =
|
|
requestURL +
|
|
this.pickupDate +
|
|
"&pick-up-location-id=" +
|
|
pickupPointId.toString();
|
|
console.log("request:" + pickupPointId);
|
|
self.autoPlaceFocus = false;
|
|
this.getMenu(self, requestURL, num);
|
|
}
|
|
@action
|
|
async getOrder(self, token) {
|
|
try {
|
|
var passOrder = [];
|
|
var currentOrder = [];
|
|
this.loading = true;
|
|
var nowDate = new Date();
|
|
nowDate.setDate(nowDate.getDate()-30)
|
|
//nowDate.format('yyyy-mm-dd')
|
|
console.log(nowDate.toISOString().substring(0, 10))
|
|
apiLink = api.order+'created-start='+nowDate.toISOString().substring(0, 10)
|
|
const response = await axios.get(api.order, {
|
|
headers: {
|
|
Authorization: token,
|
|
"Content-Type": "application/json"
|
|
},
|
|
timeout: 5000
|
|
});
|
|
console.log(response);
|
|
response.data.content.reverse();
|
|
response.data.content.forEach(e => console.log(e.status));
|
|
var content = response.data.content;
|
|
for (var i = 0; i < content.length; i++) {
|
|
if (content[i].status == "P" || content[i].status == "D") {
|
|
currentOrder.push(content[i]);
|
|
} else if (content[i].status == "F" || content[i].status == "V") {
|
|
passOrder.push(content[i]);
|
|
}
|
|
}
|
|
transaction(() => {
|
|
this.passOrder = passOrder;
|
|
this.currentOrder = currentOrder;
|
|
this.loading = false;
|
|
this.orderHistory = response;
|
|
});
|
|
} catch (error) {
|
|
this.loading = false;
|
|
console.log(error.response);
|
|
}
|
|
}
|
|
|
|
@action
|
|
async goOrderDetail(data, self) {
|
|
this.loading = true;
|
|
try {
|
|
this.loading = false;
|
|
const response = await axios.get(api.sysTime, { timeout: 5000 });
|
|
console.log(response);
|
|
var momentDate = moment(response.data.timestamp);
|
|
var timestamp = momentDate.toDate();
|
|
|
|
var momentCancelDate = moment(data.items[0].cancellation)
|
|
var cancelDate = momentCancelDate.toDate();
|
|
console.log(timestamp)
|
|
console.log(cancelDate);
|
|
|
|
if (timestamp >= cancelDate) {
|
|
self.go(data, true);
|
|
} else {
|
|
console.log("false");
|
|
self.go(data, false);
|
|
}
|
|
} catch (error) {
|
|
this.loading = false;
|
|
console.log(error);
|
|
|
|
Alert.alert("", error.response.data, [
|
|
{ text: "Ok", onPress: () => console.log("Cancel") }
|
|
]);
|
|
}
|
|
}
|
|
|
|
@action
|
|
async getMenuByUpdate(requestURL, id) {
|
|
this.loading = true;
|
|
try {
|
|
console.log("request:" + requestURL);
|
|
const response = await axios.get(requestURL, { timeout: 5000 });
|
|
response.data.content.forEach(e => (e.count = 0));
|
|
var newMenu = this.menuHandler(response, id);
|
|
transaction(() => {
|
|
this.menu = newMenu;
|
|
this.totalPage = response.totalPages;
|
|
this.loading = false;
|
|
});
|
|
// self.navigatieAction('menu')
|
|
console.log(this.menu);
|
|
} catch (error) {
|
|
this.loading = false;
|
|
console.log(error.response);
|
|
// self.refs.toast.show(error);
|
|
}
|
|
}
|
|
|
|
@action
|
|
async getMenu(self, requestURL, id) {
|
|
try {
|
|
console.log("request:" + requestURL);
|
|
const response = await axios.get(requestURL, { timeout: 5000 });
|
|
this.sharemessage = response.data.promotions;
|
|
//language.en.referFriendContent = response.data.promotions[0].contentEn
|
|
// language.zh.referFriendContent = response.data.promotions[0].content
|
|
//console.log(language.en.referFriendContent)
|
|
response.data.content.forEach(e => (e.count = 0));
|
|
console.log(response);
|
|
var newMenu = this.menuHandler(response, id);
|
|
transaction(() => {
|
|
this.menu = newMenu;
|
|
this.totalPage = response.totalPages;
|
|
this.loading = false;
|
|
});
|
|
self.navigatieAction("menu");
|
|
console.log(response);
|
|
} catch (error) {
|
|
this.loading = false;
|
|
console.log(error);
|
|
self.refs.toast.show(error);
|
|
}
|
|
}
|
|
@action
|
|
menuHandler(menu, id) {
|
|
console.log(menu.data.content);
|
|
var momentDate = moment(menu.data.timestamp);
|
|
var timestamp = momentDate.toDate();
|
|
this.timestamp = timestamp;
|
|
var newContent = [];
|
|
if (menu.data.content.length <= 0) {
|
|
return menu;
|
|
} else {
|
|
for (var i = 0; i < menu.data.content.length; i++) {
|
|
var index = menu.data.content[i].locations.findIndex(
|
|
x => x.location.id == id
|
|
);
|
|
var momentOrderEndDate = moment(
|
|
menu.data.content[i].locations[index].orderEnd
|
|
);
|
|
var orderEndDate = momentOrderEndDate.toDate();
|
|
console.log(timestamp.getDate() + " " + orderEndDate.getDate());
|
|
if (timestamp < orderEndDate) {
|
|
if (timestamp.getHours() < orderEndDate.getHours()) {
|
|
console.log(timestamp.getUTCDate()+" "+orderEndDate.getUTCDate())
|
|
if (timestamp.getDate() == orderEndDate.getDate()) {
|
|
newContent.push(menu.data.content[i]);
|
|
}
|
|
} else {
|
|
if (timestamp.getDate() < orderEndDate.getDate()) {
|
|
newContent.push(menu.data.content[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
console.log(newContent);
|
|
if (newContent.length > 0) {
|
|
menu.data.content = newContent;
|
|
var indexOfLocation = newContent[0].locations.findIndex(
|
|
x => x.location.id == id
|
|
);
|
|
var momentCutoffDateTime = moment(
|
|
newContent[0].locations[indexOfLocation].orderEnd
|
|
);
|
|
this.cutoffDateTime = momentCutoffDateTime.toDate();
|
|
console.log(this.cutoffDateTime);
|
|
} else {
|
|
var indexOfLocation = menu.data.content[0].locations.findIndex(
|
|
x => x.location.id == id
|
|
);
|
|
var momentCutoffDateTime = moment(
|
|
menu.data.content[0].locations[indexOfLocation].orderEnd
|
|
);
|
|
this.cutoffDateTime = momentCutoffDateTime.toDate();
|
|
menu.data.content = newContent;
|
|
console.log(this.cutoffDateTime);
|
|
}
|
|
|
|
// console.log(this.cutoffDateTime)
|
|
return menu;
|
|
}
|
|
}
|
|
@action
|
|
async menuloadmore(self) {
|
|
this.loading = true;
|
|
try {
|
|
const requestURL =
|
|
api.getMenu + "?page_no=" + toString(this.pageNo) + "&page_size=10";
|
|
const response = await axios.get(requestURL, { timeout: 5000 });
|
|
response.data.content.forEach(e => (e.count = 0));
|
|
transaction(() => {
|
|
//this.menu.content = this.menu.content.concat(response.content);
|
|
this.loading = false;
|
|
});
|
|
|
|
console.log(response);
|
|
} catch (error) {
|
|
this.loading = false;
|
|
console.log(error);
|
|
self.refs.toast.show(error);
|
|
}
|
|
}
|
|
|
|
@action
|
|
async order(token, data, self) {
|
|
this.loading = true;
|
|
var requestURL = api.order;
|
|
try {
|
|
const response = await axios.post(requestURL, data, {
|
|
headers: {
|
|
Authorization: token,
|
|
"Content-Type": "application/json"
|
|
},
|
|
timeout: 5000
|
|
});
|
|
this.loading = false;
|
|
console.log(this.loading);
|
|
console.log(response);
|
|
this.orderReturn = response;
|
|
setTimeout(function() {
|
|
self.pay();
|
|
}, 200);
|
|
} catch (e) {
|
|
this.loading = false;
|
|
self.refs.toast.show(e.response.data);
|
|
console.log(e)
|
|
}
|
|
}
|
|
|
|
@action
|
|
async cancelOrder(token) {
|
|
console.log(token);
|
|
var requestURL =
|
|
"http://takeawayapp.nirons.com:8080/order/" +
|
|
this.orderReturn.data.id +
|
|
"/cancel/";
|
|
try {
|
|
const response = await axios.put(requestURL, null, {
|
|
headers: {
|
|
Authorization: token,
|
|
"Content-Type": "application/json"
|
|
},
|
|
timeout: 5000
|
|
});
|
|
console.log(response);
|
|
} catch (e) {
|
|
console.log(e.response);
|
|
}
|
|
}
|
|
|
|
@action
|
|
async voidOrder(token, id, self) {
|
|
this.loading = true;
|
|
var requestURL =
|
|
"http://takeawayapp.nirons.com:8080/order/" + id + "/void/";
|
|
console.log(requestURL);
|
|
console.log(token);
|
|
try {
|
|
const response = await axios.put(requestURL, null, {
|
|
headers: {
|
|
Authorization: token,
|
|
"Content-Type": "application/json"
|
|
},
|
|
timeout: 5000
|
|
});
|
|
this.loading = false;
|
|
console.log(response);
|
|
self.back();
|
|
} catch (e) {
|
|
this.loading = false;
|
|
console.log(e.response);
|
|
self.refs.toast.show(e.response.data[0]);
|
|
}
|
|
}
|
|
|
|
@action
|
|
async userCoupon(self,token,check){
|
|
this.loading = true
|
|
var requestURL = api.coupon
|
|
try {
|
|
const response = await axios.get(requestURL, {
|
|
headers: {
|
|
Authorization: token,
|
|
"Content-Type": "application/json"
|
|
},
|
|
timeout: 5000
|
|
});
|
|
this.loading = false
|
|
this.couponLabel = []
|
|
response.data.content.forEach(item => {
|
|
if (item.used) {
|
|
var value = {value:item.id}
|
|
// this.couponLabel.push(value)
|
|
} else {
|
|
if (item.hasOwnProperty("expiry")) {
|
|
var nowDatemoment = moment(response.data.timestamp);
|
|
var nowDate = nowDatemoment.toDate();
|
|
var expiryDatemoment = moment(item.expiry);
|
|
var expiryDate = expiryDatemoment.toDate();
|
|
if (nowDate < expiryDate) {
|
|
var value = {value:item.id}
|
|
this.couponLabel.push(value)
|
|
} else {
|
|
|
|
}
|
|
} else {
|
|
|
|
}
|
|
}
|
|
});
|
|
this.coupons = response
|
|
console.log('userCoupon')
|
|
if(!check){
|
|
self.navigatieAction("ConfirmOrder");
|
|
}else{
|
|
self.navigatieAction("myCoupons");
|
|
}
|
|
console.log(response);
|
|
} catch (e) {
|
|
this.loading = false
|
|
console.log(e.response);
|
|
// self.refs.toast.show(e.response.data)
|
|
}
|
|
}
|
|
|
|
@action
|
|
async coupon(token, self, coupon) {
|
|
var requestURL = api.coupon + coupon;
|
|
console.log("token: " + token + " coupon: " + coupon);
|
|
var data = {};
|
|
try {
|
|
const response = await axios.get(requestURL, {
|
|
headers: {
|
|
Authorization: token,
|
|
"Content-Type": "application/json"
|
|
},
|
|
timeout: 5000
|
|
});
|
|
console.log(response);
|
|
self.discountAction(response.data);
|
|
} catch (e) {
|
|
console.log(e.response);
|
|
// self.refs.toast.show(e.response.data)
|
|
}
|
|
}
|
|
|
|
@action
|
|
async pay(token, self, creditCardId) {
|
|
this.loading = true;
|
|
let data = { creditCardId: creditCardId };
|
|
console.log(data);
|
|
var requestURL =
|
|
"http://takeawayapp.nirons.com:8080/order/" +
|
|
this.orderReturn.data.id +
|
|
"/pay/";
|
|
try {
|
|
const response = await axios.put(requestURL, data, {
|
|
headers: {
|
|
Authorization: token,
|
|
"Content-Type": "application/json"
|
|
},
|
|
timeout: 5000
|
|
});
|
|
this.loading = false;
|
|
console.log(response);
|
|
if(Platform.OS === 'ios'){
|
|
self.navigatieAction("myOrders");
|
|
}else{
|
|
self.navigatieAction("menu");
|
|
}
|
|
} catch (e) {
|
|
this.loading = false;
|
|
console.log(e.response);
|
|
self.refs.toast.show(e.response.data);
|
|
}
|
|
}
|
|
|
|
@action
|
|
getCount(id) {
|
|
index = this.menu.data.content.findIndex(obj => obj.id == id);
|
|
return this.menu.data.content[index].count;
|
|
}
|
|
|
|
@action
|
|
addCount(id) {
|
|
index = this.menu.data.content.findIndex(obj => obj.id == id);
|
|
this.menu.data.content[index].count += 1;
|
|
this.check();
|
|
}
|
|
|
|
@action
|
|
sumCount(id) {
|
|
index = this.menu.data.content.findIndex(obj => obj.id == id);
|
|
if (this.menu.data.content[index].count > 0)
|
|
this.menu.data.content[index].count -= 1;
|
|
this.check();
|
|
}
|
|
|
|
@action
|
|
check() {
|
|
var index = this.menu.data.content.findIndex(obj => obj.count > 0);
|
|
if (index != -1) {
|
|
this.selected = true;
|
|
} else {
|
|
this.selected = false;
|
|
}
|
|
}
|
|
|
|
@action
|
|
cancel() {
|
|
this.menu.data.content.forEach(e => (e.count = 0));
|
|
this.selected = false;
|
|
}
|
|
|
|
|
|
|
|
@action
|
|
getOrderedItems(self,token) {
|
|
this.orderList = [];
|
|
this.items = [];
|
|
for (var i = 0; i < this.menu.data.content.length; i++) {
|
|
if (this.menu.data.content[i].count > 0) {
|
|
this.orderList.push(this.menu.data.content[i]);
|
|
var data = {
|
|
menu: {
|
|
id: this.menu.data.content[i].id
|
|
},
|
|
qty: this.menu.data.content[i].count
|
|
};
|
|
this.items.push(data);
|
|
}
|
|
}
|
|
this.userCoupon(self,token,false)
|
|
// self.navigatieAction("ConfirmOrder");
|
|
console.log(this.orderList);
|
|
}
|
|
|
|
@action
|
|
cleanAll() {
|
|
transaction(() => {
|
|
this.menu.data.content.forEach(e => (e.count = 0));
|
|
this.selected = false;
|
|
});
|
|
}
|
|
|
|
@computed get totalMoney() {
|
|
let money = 0;
|
|
this.menu.data.content.forEach(e => (money += e.price * e.count));
|
|
return money;
|
|
}
|
|
}
|
|
|
|
const menuStore = new menu_store();
|
|
|
|
export default menuStore;
|