dsg
Copy This
import {
    onScanFailure,
    onScanSuccess
} from './qr-scanner.js'
import {
    handleLink,
    handleUnlink
} from './api/scanner.js'
import app from "./app.js"
import store from "./store.js"

var $ = Dom7;

var html5QrCode;
let defaultConfig = {
    qrbox: {
        width: 250,
        height: 250
    },
    fps: 60,
    showTorchButtonIfSupported: true,
    showZoomSliderIfSupported: true,
    // aspectRatio: 1.7777778
}

const renderResult = (result) => {
    const user = store.getters.user.value

    if (!result || result.status === 'error') {
        return `<h2 class="text-center">${result?.message || 'Oops, looks like you scanned an invalid QR code'}</h2>`
    }

    if (result.available) {
        return (
            `<h2 class="text-center">Congrats! This QR code is up for grabs</h2>
        <button id="link-profile">
          Link Profile
        </button>`
        )
    }

    if (!result.available) {
        return (
            `
        <h2 class="text-center">Sorry, this QR code is already linked</h2>
        ${result.data && result.data.linked_to == user?.id ? (
        `<button id="unlink-profile"
          onClick={handleUnlink}
        >
          Unlink Profile
        </button>`
      ) : '  '}
      `
        )
    }
}

// Function to create and open the modal with default content
export function openModal() {
    const myModal = app.dialog.create({
        title: 'Scan QR Code',
        content: `
      <div id="custom-modal-content">
        <div id="reader" width="600px"></div>
      </div>
    `,
        buttons: [{
            text: 'Close',
            onClick: function () {
                try {
                    if (html5QrCode) {
                        html5QrCode.stop()
                    }

                    store.dispatch('setScannedData', null)
                } catch (error) {
                    console.error('Error stopping qr code', error)
                }
            }
        }]
    })

    // Open the modal
    myModal.open()
}

// on link profile
$(document).on('click', '#link-profile', async function () {
    const result = store.getters.scannedData.value

    if (result) {
        const response = await handleLink(result)
        if (response.status === 'error') {
            store.dispatch('setScannedData', {
                status: 'error',
                message: response.text,
                available: false
            })
        }

        app.dialog.close()
        app.dialog.alert(response.message)

        // reset the scanned data
        store.dispatch('setScannedData', null)
    }
})

// unlink profile
$(document).on('click', '#unlink-profile', async function () {
    const result = store.getters.scannedData.value
    // close the modal
    app.dialog.close()

    if (result) {
        const response = await handleUnlink(result)
        if (response.type === 'success') {
            app.dialog.alert(response.text)
        }

        // reset the scanned data
        store.dispatch('setScannedData', null)
    }
})

export function openQRModal() {
    openModal()

    html5QrCode = new Html5Qrcode("reader")

    html5QrCode?.start({
            facingMode: "environment"
        },
        defaultConfig,
        onScanSuccess,
        onScanFailure
    )
}

$(document).on('click', '.open-qr-modal', function () {
    openQRModal()
})

store.getters.scannedData.onUpdated((data) => {
    if (html5QrCode) {
        html5QrCode.stop()
    }

    if (data) {
        document.getElementById('custom-modal-content').innerHTML = renderResult(data)
    }
})
Add JS Function Name