From 6786d5f8f697fdace179135febdb59e0c064227f Mon Sep 17 00:00:00 2001 From: zino Date: Mon, 17 May 2021 16:17:27 +0200 Subject: [PATCH] revised trims --- client/src/modules/state.ts | 34 ++++++++++---------- client/src/modules/trims.ts | 63 ++++++++++++++++++++----------------- client/src/types/types.d.ts | 7 +++++ 3 files changed, 58 insertions(+), 46 deletions(-) diff --git a/client/src/modules/state.ts b/client/src/modules/state.ts index 01a89d4..be8ac64 100644 --- a/client/src/modules/state.ts +++ b/client/src/modules/state.ts @@ -18,22 +18,6 @@ export function addSeatToState(inSelectedSeat: I.JSCSelectedSeat): void { 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 } -} - export function removeSeatFromState(inSelectedSeat: I.JSCSelectedSeat): void { delete config.state.selectedSeatsObj[inSelectedSeat.id]; @@ -48,7 +32,7 @@ export function removeSeatFromState(inSelectedSeat: I.JSCSelectedSeat): void { export function maximumSelectedSeatsReached(inSeatObj: I.JSCSelectedSeat): boolean { 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"); @@ -56,4 +40,20 @@ export function maximumSelectedSeatsReached(inSeatObj: I.JSCSelectedSeat): boole } return false; +} + +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 } } \ No newline at end of file diff --git a/client/src/modules/trims.ts b/client/src/modules/trims.ts index b2a4a37..2ee40b4 100644 --- a/client/src/modules/trims.ts +++ b/client/src/modules/trims.ts @@ -1,24 +1,22 @@ import { config } from "./config"; import * as I from "../types/types"; -export function addTrims() { - const seatmapXML = config.state.seatmapXML; +export function addTrims(): void { + const seatmapXML: any = config.state.seatmapXML; const trimArr: I.Trim[] = seatmapXML.seatmap[0].trims[0].trim; + trimArr.forEach(arr => { const [xTrim, yTrim] = arr.coord[0].split(",").map(Number); const textArr: string[] = arr.text[0].split(";").filter(Boolean); - const x = xTrim / 20; - const y = Math.round(yTrim / 21.25); + const x: number = xTrim / 20; + const y: number = Math.round(yTrim / 21.25); - console.log(`xTrim: ${xTrim} yTrim: ${yTrim} -> x: ${x} y: ${y}`); - - decodeAddTrims(textArr, x, y); + decodeTrim(textArr, x, y); }); } -function decodeAddTrims(textArr: string[], x: number, y: number) { - let i = 0; - const specialChar = new Map([ +function decodeTrim(textArr: string[], x: number, y: number): void { + const specialChar: Map = new Map([ ["Ž", "Ä"], ["™", "Ö"], ["š", "Ü"], @@ -28,28 +26,35 @@ function decodeAddTrims(textArr: string[], x: number, y: number) { ["á", "ß"] ]); - textArr.forEach(element => { - let character; + textArr.map((element, index) => { + const character: string | undefined = specialChar.has(element) ? specialChar.get(element) : decodeNormalTrim(element); - if (specialChar.has(element)) - character = specialChar.get(element); - else { - const charCode = element.replace(/^\&\#/, "0"); - character = String.fromCharCode(parseInt(charCode, 16)); - } - - if (character) - applyTrim(x, y, i, character); - - i++; + if (character) { + const trimPos: I.TrimPos = getJSCTrimPos(x, y, index); + applyTrim(character, trimPos); + } }); } -function applyTrim(x: number, y: number, i: number, character: string) { - if (!/[^a-zA-Z0-9äöüÄÖÜß$]/.test(character)) { - const _x = (x - 1) + i; - const _y = y - 1; - console.log(`${character} -> ${_x} ${_y}`); - jQuery(".seatCharts-row")[_y].children[_x].innerHTML = `${character}` +function decodeNormalTrim(element: string): string { + const charCode: string = element.replace(/^\&\#/, "0"); + return String.fromCharCode(parseInt(charCode, 16)); +} + +function applyTrim(inCharacter: string, inTrimPos: I.TrimPos): void { + const regex: RegExp = /[^a-zA-Z0-9äöüÄÖÜß$]/; + + if (!regex.test(inCharacter)) { + console.log(`${inCharacter} -> ${inTrimPos.xJSC} ${inTrimPos.yJSC}`); + jQuery(".seatCharts-row")[inTrimPos.yJSC].children[inTrimPos.xJSC].innerHTML = `${inCharacter}` + } +} + +function getJSCTrimPos(inX: number, inY: number, index: number): I.TrimPos { + return { + x: inX, + y: inY, + xJSC: (inX - 1) + index, + yJSC: inY - 1 } } \ No newline at end of file diff --git a/client/src/types/types.d.ts b/client/src/types/types.d.ts index 12d5203..1aad69e 100644 --- a/client/src/types/types.d.ts +++ b/client/src/types/types.d.ts @@ -417,5 +417,12 @@ export interface ImportantNote { importantNoteEncoded: string; } +export interface TrimPos { + x: number; + y: number; + xJSC: number; + yJSC: number; +} + export type TypeBuyerType = (string | undefined)[][] | undefined; export type TypeBuyerTypeArr = (string | undefined)[]; \ No newline at end of file