const states = [
{ key: 'CA', value: 82 }, { key: 'OR', value: 44 }, { key: 'WA', value: 61 },
{ key: 'NV', value: 29 }, { key: 'AZ', value: 53 }, { key: 'TX', value: 74 },
{ key: 'CO', value: 47 }, { key: 'NY', value: 88 }, { key: 'FL', value: 66 },
{ key: 'GA', value: 39 }, { key: 'IL', value: 58 }, { key: 'OH', value: 42 },
{ key: 'MA', value: 71 }, { key: 'PA', value: 50 }, { key: 'MI', value: 35 },
{ key: 'NC', value: 46 }, { key: 'VA', value: 63 }, { key: 'WI', value: 31 },
]
function slot(id) {
let el = document.getElementById(id)
if (!el) {
el = document.createElement('div')
el.id = id
document.body.appendChild(el)
}
return el
}
const linked = (id, palette) =>
new ApexMaps(slot(id), {
chart: { height: 300 },
geo: { map: 'us' },
legend: { show: false },
interaction: { selection: { multiple: true, rectangle: true, modifier: 'shift' } },
states: { muted: { opacity: 0.25 } },
link: { group: 'us-dashboard', filter: 'bidirectional' },
series: [{ name: 'Value', joinBy: ['abbr', 'key'], data: states, scale: { palette } }],
})
const a = linked('a', 'blues')
const b = linked('b', 'oranges')
a.on('selectionChange', ({ ids, source }) => {
const from = source === a.getInstanceId() ? 'left' : 'right'
console.log(ids.length ? `${ids.length} selected from the ${from} map` : 'nothing selected')
})
Promise.all([a.render(), b.render()])
document.getElementById('west').addEventListener('click', () => {
a.setSelection(['CA', 'OR', 'WA', 'NV', 'AZ'])
})
document.getElementById('clear').addEventListener('click', () => a.clearSelection())