{"version":3,"file":"index.mjs","names":[],"sources":["../src/main/util.ts","../src/main/Embeddable.tsx","../src/main/SeatsioDesigner.tsx","../src/main/SeatsioEventManager.tsx","../src/main/SeatsioSeatingChart.tsx"],"sourcesContent":["import {Booth, GeneralAdmissionArea, InteractiveSection, Seat, SelectableObject, Table} from \"@seatsio/seatsio-types\"\n\nexport const didPropsChange = <P extends { [key: string]: any}>(prevProps: P, nextProps: P): boolean => {\n    if (Object.keys(prevProps).length !== Object.keys(nextProps).length) {\n        return true\n    }\n    return Object.keys(nextProps).some((propName: string) => {\n        let prevValue = prevProps[propName]\n        let nextValue = nextProps[propName]\n        if (prevValue && nextValue) {\n            if (typeof prevValue === 'function' && typeof nextValue === 'function') {\n                return prevValue.toString() !== nextValue.toString()\n            }\n            if (typeof prevValue === 'object' && typeof nextValue === 'object') {\n                return didPropsChange(prevValue, nextValue)\n            }\n        }\n        return prevValue !== nextValue\n    })\n}\n","import { ChartDesigner, CommonConfigOptions, EventManager, Region, SeatingChart, Seatsio } from '@seatsio/seatsio-types'\nimport * as React from 'react'\nimport { didPropsChange } from './util'\n\nexport type EmbeddableProps<T> = {\n    onRenderStarted?: (chart: SeatingChart | EventManager) => void\n    chartJsUrl?: string\n    region: Region\n} & T\n\nexport default abstract class Embeddable<T extends CommonConfigOptions> extends React.Component<EmbeddableProps<T>> {\n    private container: React.RefObject<HTMLDivElement>\n    private chart!: SeatingChart\n    private mountId: number = 0\n\n    private static seatsioBundles: { [key: string]: Promise<Seatsio> } = {}\n\n    static defaultProps = {\n        chartJsUrl: 'https://cdn-{region}.seatsio.net/chart.js'\n    }\n\n    constructor(props: EmbeddableProps<T>) {\n        super(props);\n        this.container = React.createRef()\n    }\n\n    abstract createChart (seatsio: Seatsio, config: T): SeatingChart | EventManager | ChartDesigner\n\n    componentDidMount () {\n        this.createAndRenderChart(this.mountId)\n    }\n\n    componentDidUpdate (prevProps: EmbeddableProps<T>) {\n        if(this.chart) {\n            // @ts-ignore\n            this.chart.config = this.extractConfigFromProps()\n            if (didPropsChange(this.props, prevProps)) {\n                this.destroyChart()\n                this.createAndRenderChart(this.mountId)\n            }\n        }\n    }\n\n    getChartUrl () {\n        return this.props.chartJsUrl!.replace('{region}', this.props.region)\n    }\n\n    async createAndRenderChart (currentMountId: number) {\n        const seatsio = await this.loadSeatsio()\n        if (currentMountId !== this.mountId) return\n        const config = this.extractConfigFromProps()\n        this.chart = this.createChart(seatsio, config).render()\n        if (this.props.onRenderStarted) {\n            this.props.onRenderStarted(this.chart)\n        }\n    }\n\n    extractConfigFromProps (): any {\n        let { chartJsUrl, divId, onRenderStarted, region, ...config } = this.props\n        // @ts-ignore\n        config.container = this.container.current\n        return config\n    }\n\n    componentWillUnmount () {\n        this.mountId++\n        this.destroyChart()\n    }\n\n    destroyChart () {\n        if (this.chart && (this.chart as any).state !== 'DESTROYED') {\n            this.chart.destroy()\n        }\n    }\n\n    loadSeatsio (): Promise<Seatsio> {\n        const chartUrl = this.getChartUrl()\n        if (!Embeddable.seatsioBundles[chartUrl]) {\n            Embeddable.seatsioBundles[chartUrl] = new Promise<Seatsio>((resolve, reject) => {\n                const script = document.head.appendChild(document.createElement('script'))\n                // Seatsio global is not replaced if already present, which would cause the wrong region bundle to resolve when changing region\n                // @ts-ignore\n                window.seatsio = undefined\n                script.onload = () => {\n                    resolve(seatsio)\n                }\n                script.onerror = () => reject(`Could not load ${script.src}`)\n                script.src = chartUrl\n            })\n        }\n\n        return Embeddable.seatsioBundles[chartUrl]\n    }\n\n    render (): React.ReactNode {\n        return (\n            <div ref={this.container as unknown as React.RefObject<HTMLDivElement>} style={{'height': '100%', 'width': '100%'}} />\n        )\n    }\n}\n","import Embeddable from './Embeddable'\nimport { ChartDesignerConfigOptions, Seatsio } from '@seatsio/seatsio-types'\n\nexport default class SeatsioDesigner extends Embeddable<ChartDesignerConfigOptions> {\n    createChart (seatsio: Seatsio, config: ChartDesignerConfigOptions) {\n        return new seatsio.SeatingChartDesigner(config)\n    }\n}","import { EventManagerConfigOptions, Seatsio } from '@seatsio/seatsio-types'\nimport Embeddable from './Embeddable'\n\nexport default class SeatsioEventManager extends Embeddable<EventManagerConfigOptions> {\n    createChart (seatsio: Seatsio, config: EventManagerConfigOptions) {\n        return new seatsio.EventManager(config)\n    }\n}","import { ChartRendererConfigOptions, Seatsio } from '@seatsio/seatsio-types'\nimport Embeddable from './Embeddable'\n\nexport default class SeatsioSeatingChart extends Embeddable<ChartRendererConfigOptions> {\n    createChart (seatsio: Seatsio, config: ChartRendererConfigOptions) {\n        return new seatsio.SeatingChart(config)\n    }\n}"],"mappings":"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"}