revised state
This commit is contained in:
@@ -3,41 +3,43 @@ import * as I from "../types/types";
|
|||||||
import * as XMLHelper from "./xmlhelper";
|
import * as XMLHelper from "./xmlhelper";
|
||||||
import * as UI from "./ui";
|
import * as UI from "./ui";
|
||||||
|
|
||||||
export function addSeatToState(inSelectedSeat: I.JSCSelectedSeat) {
|
export function addSeatToState(inSelectedSeat: I.JSCSelectedSeat): void {
|
||||||
|
addSeatObjToState(inSelectedSeat);
|
||||||
|
const pricescaleID: string = config.state.selectedSeatsObj[inSelectedSeat.id].data.seatsObj.id[0];
|
||||||
|
const pricescaleObj: I.Pricescale5 | undefined = XMLHelper.getVenuePriceStructurePropertyByPricescaleID(pricescaleID);
|
||||||
|
|
||||||
|
if (pricescaleObj) {
|
||||||
|
const firstBuyerTypeID: string = pricescaleObj.buyer_type[0].id[0];
|
||||||
|
const buyerTypeCode: string | undefined = XMLHelper.getBuyerTypeCodeByBuyerTypeID(firstBuyerTypeID);
|
||||||
|
const selectedSeatsArrItem: (string | undefined)[] = [inSelectedSeat.id, firstBuyerTypeID, buyerTypeCode];
|
||||||
|
addSeatsItemToState(selectedSeatsArrItem);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
console.warn(`Cannot find corresponding venueXML pricescaleObj for pricescale with ID ${pricescaleID}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addSeatsItemToState(inItem: (string | undefined)[]): void {
|
||||||
|
if (inItem.every(v => v !== ("" || undefined || null))) {
|
||||||
|
config.state.selectedSeatsArr.push(<string[]>inItem);
|
||||||
|
config.state.cartChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function addSeatObjToState(inSelectedSeat: I.JSCSelectedSeat): void {
|
||||||
const seatID: string = inSelectedSeat.id;
|
const seatID: string = inSelectedSeat.id;
|
||||||
const seatObj: I.StateJSCSelectedSeats = {
|
const seatObj: I.StateJSCSelectedSeats = {
|
||||||
[seatID]: inSelectedSeat
|
[seatID]: inSelectedSeat
|
||||||
}
|
}
|
||||||
|
|
||||||
config.state.selectedSeatsObj = { ...config.state.selectedSeatsObj, ...seatObj };
|
config.state.selectedSeatsObj = { ...config.state.selectedSeatsObj, ...seatObj }
|
||||||
|
|
||||||
const pricescaleID: string = config.state.selectedSeatsObj[seatID].data.seatsObj.id[0];
|
|
||||||
const pricescaleObj: I.Pricescale5 | undefined = XMLHelper.getVenuePriceStructurePropertyByPricescaleID(pricescaleID);
|
|
||||||
console.log(pricescaleObj);
|
|
||||||
|
|
||||||
if (!pricescaleObj) {
|
|
||||||
console.warn(`Cannot find corresponding venueXML pricescaleObj for pricescale with ID ${pricescaleID}`);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// get id and code of first buyer type
|
export function removeSeatFromState(inSelectedSeat: I.JSCSelectedSeat): void {
|
||||||
const firstBuyerTypeID: string = pricescaleObj.buyer_type[0].id[0];
|
delete config.state.selectedSeatsObj[inSelectedSeat.id];
|
||||||
// const firstPriceStructureCode: string = inVenueXML.price_structure[0].code[0]; // todo: code of first price_structure always correct? what about multiple schablonen?
|
|
||||||
const buyerTypeCode: string | undefined = XMLHelper.getBuyerTypeCodeByBuyerTypeID(firstBuyerTypeID);
|
|
||||||
|
|
||||||
if (buyerTypeCode) {
|
const index: number = config.state.selectedSeatsArr.findIndex(arr => arr[0] === inSelectedSeat.id);
|
||||||
config.state.selectedSeatsArr.push([seatID, firstBuyerTypeID, buyerTypeCode]);
|
|
||||||
config.state.cartChanged = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function removeSeatFromState(inSelectedSeat: I.JSCSelectedSeat) {
|
|
||||||
const seatID: string = inSelectedSeat.id;
|
|
||||||
delete config.state.selectedSeatsObj[seatID];
|
|
||||||
const index = config.state.selectedSeatsArr.findIndex(arr => {
|
|
||||||
return arr[0] === inSelectedSeat.id;
|
|
||||||
});
|
|
||||||
config.state.selectedSeatsArr.splice(index, 1);
|
config.state.selectedSeatsArr.splice(index, 1);
|
||||||
|
|
||||||
config.state.cartChanged = true;
|
config.state.cartChanged = true;
|
||||||
|
|
||||||
if (!config.state.selectedSeatsArr.length)
|
if (!config.state.selectedSeatsArr.length)
|
||||||
@@ -45,7 +47,8 @@ export function removeSeatFromState(inSelectedSeat: I.JSCSelectedSeat) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function maximumSelectedSeatsReached(inSeatObj: I.JSCSelectedSeat): boolean {
|
export function maximumSelectedSeatsReached(inSeatObj: I.JSCSelectedSeat): boolean {
|
||||||
const seatmap = config.state.seatmap;
|
const seatmap: any = config.state.seatmap;
|
||||||
|
|
||||||
if (config.state.selectedSeatsArr.length >= config.maxSelectedSeats) {
|
if (config.state.selectedSeatsArr.length >= config.maxSelectedSeats) {
|
||||||
UI.showJBoxNotice(`Sie können maximal ${config.maxSelectedSeats} Plätze auswählen.`);
|
UI.showJBoxNotice(`Sie können maximal ${config.maxSelectedSeats} Plätze auswählen.`);
|
||||||
seatmap.status(inSeatObj.id, "available");
|
seatmap.status(inSeatObj.id, "available");
|
||||||
|
|||||||
Reference in New Issue
Block a user