From 96dd6dcfc0f973a7bb420c243623721f7bdd982e Mon Sep 17 00:00:00 2001 From: zino Date: Mon, 17 May 2021 15:55:13 +0200 Subject: [PATCH] revised state --- client/src/modules/state.ts | 59 +++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/client/src/modules/state.ts b/client/src/modules/state.ts index e1ff737..01a89d4 100644 --- a/client/src/modules/state.ts +++ b/client/src/modules/state.ts @@ -3,41 +3,43 @@ import * as I from "../types/types"; import * as XMLHelper from "./xmlhelper"; 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(inItem); + config.state.cartChanged = true; + } +} + +function addSeatObjToState(inSelectedSeat: I.JSCSelectedSeat): void { const seatID: string = inSelectedSeat.id; const seatObj: I.StateJSCSelectedSeats = { [seatID]: inSelectedSeat } - 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 - const firstBuyerTypeID: string = pricescaleObj.buyer_type[0].id[0]; - // 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) { - config.state.selectedSeatsArr.push([seatID, firstBuyerTypeID, buyerTypeCode]); - config.state.cartChanged = true; - } + config.state.selectedSeatsObj = { ...config.state.selectedSeatsObj, ...seatObj } } -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; - }); +export function removeSeatFromState(inSelectedSeat: I.JSCSelectedSeat): void { + delete config.state.selectedSeatsObj[inSelectedSeat.id]; + + const index: number = config.state.selectedSeatsArr.findIndex(arr => arr[0] === inSelectedSeat.id); config.state.selectedSeatsArr.splice(index, 1); + config.state.cartChanged = true; if (!config.state.selectedSeatsArr.length) @@ -45,7 +47,8 @@ export function removeSeatFromState(inSelectedSeat: I.JSCSelectedSeat) { } 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) { UI.showJBoxNotice(`Sie können maximal ${config.maxSelectedSeats} Plätze auswählen.`); seatmap.status(inSeatObj.id, "available");