You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
4.4 KiB
JavaScript

//var ItemListingEntry = require('./ItemListingEntry');
import _Cart from "./_Cart.js";
import _Item from './_Item.js';
import _User from './_User.js';
import _Modal from './_Modal.js';
import _Message from './_Message.js';
import _Image from './_Image.js';
import _DB from './_DB.js';
import ItemModalView from './ItemModalView.js';
import isUndefined from './util/isUndefined.js';
import toNumber from "./util/toNumber";
import isNumber from "./util/isNumber";
function ItemListingEntry(initialVnode) {
return {
view: function(vnode) {
var item = vnode.attrs.item;
var index = vnode.attrs.index;
var chosen_images = vnode.attrs.chosen_images;
var chosen_image = chosen_images[index];
var lineitem = _Cart.lineItemOfItem(item);
var thumbnail_path = ( chosen_image ? _Image.thumbnailPath(_DB.getRecord(chosen_image), '180') : false );
return m('.column.col-3.col-md-6.col-xs-12.mt-2', [
m(".card.c-hand", {
onclick: function(e){
_Item.getFullItemInfo(item).then(function(){
_Modal.show(ItemModalView, {item: item});
});
}
},[
m('.card-image.p-centered',[
(item.image_ids.length === 0
?
m("img.img-responsive", {src: _Image.placeholder_img_180_path })
:
[
m("img.img-responsive", {src: thumbnail_path }),
m('.form-group.text-center',
item.image_ids.map(function(image_id){
return m('label.form-radio.label-sm.form-inline', [
m('input.input-sm', {
type:'radio',
name: item.id.toString(),
value: image_id, // is this converted to string?
checked: chosen_image===image_id,
onchange: function(e){
chosen_images[index] = image_id;
e.stopPropagation();
}
}),
m('i.form-icon',{onclick:function(e){
chosen_images[index] = image_id;
e.stopPropagation(); // So a modal box doesn't open-up
return false; // I don't know why I need this in addition to stopPropagation().
}
},"")
])
})
)
]
)
]),
m('.card-header', [
m(".card-title.h6.text-ellipsis", item.name),
m(".card-subtitle.text-gray", item.color),
]),
(_User.isGuest() ? null : [
m('card-body',[
m(".price", '$'+_Item.priceOf(item)),
]),
m('card-footer', [
m("input[type=text].form-input.text-center.c-auto", {
onchange: function(e){
var new_quantity = toNumber(e.target.value);
if(new_quantity === 0){
_Cart.removeByItem(item);
}
else if(!isNumber(new_quantity)){
//console.log("Qty. is not a number.");
_Message.addError("Quantity '"+new_quantity+"' is not a number.");
}
else{
_Cart.updateQuantityOfItem(item, new_quantity);
}
},
onfocus: function(e){e.target.select();},
onclick: function(e){ e.stopPropagation(); },
value: (isUndefined(lineitem) ? 0 : lineitem.quantity)
})
])
])
])
]);
}
}
}
export default ItemListingEntry