71 lines
1.7 KiB
JavaScript
71 lines
1.7 KiB
JavaScript
import { defineComponent, createVNode as _createVNode } from "vue";
|
|
import { isDef, truthProp, makeArrayProp, makeStringProp, createNamespace } from "../utils/index.mjs";
|
|
import { Cell } from "../cell/index.mjs";
|
|
const [name, bem, t] = createNamespace("coupon-cell");
|
|
const couponCellProps = {
|
|
title: String,
|
|
border: truthProp,
|
|
editable: truthProp,
|
|
coupons: makeArrayProp(),
|
|
currency: makeStringProp("\xA5"),
|
|
chosenCoupon: {
|
|
type: [Number, Array],
|
|
default: -1
|
|
}
|
|
};
|
|
const getValue = (coupon) => {
|
|
const {
|
|
value,
|
|
denominations
|
|
} = coupon;
|
|
if (isDef(value)) {
|
|
return value;
|
|
}
|
|
if (isDef(denominations)) {
|
|
return denominations;
|
|
}
|
|
return 0;
|
|
};
|
|
function formatValue({
|
|
coupons,
|
|
chosenCoupon,
|
|
currency
|
|
}) {
|
|
let value = 0;
|
|
let isExist = false;
|
|
(Array.isArray(chosenCoupon) ? chosenCoupon : [chosenCoupon]).forEach((i) => {
|
|
const coupon = coupons[+i];
|
|
if (coupon) {
|
|
isExist = true;
|
|
value += getValue(coupon);
|
|
}
|
|
});
|
|
if (isExist) {
|
|
return `-${currency} ${(value / 100).toFixed(2)}`;
|
|
}
|
|
return coupons.length === 0 ? t("noCoupon") : t("count", coupons.length);
|
|
}
|
|
var stdin_default = defineComponent({
|
|
name,
|
|
props: couponCellProps,
|
|
setup(props) {
|
|
return () => {
|
|
const selected = Array.isArray(props.chosenCoupon) ? props.chosenCoupon.length : props.coupons[+props.chosenCoupon];
|
|
return _createVNode(Cell, {
|
|
"class": bem(),
|
|
"value": formatValue(props),
|
|
"title": props.title || t("title"),
|
|
"border": props.border,
|
|
"isLink": props.editable,
|
|
"valueClass": bem("value", {
|
|
selected
|
|
})
|
|
}, null);
|
|
};
|
|
}
|
|
});
|
|
export {
|
|
couponCellProps,
|
|
stdin_default as default
|
|
};
|