import { TomTomConfig } from '@tomtom-org/maps-sdk/core';
import {
BaseMapLayerGroupName,
BaseMapLayerGroups,
BaseMapModule,
baseMapLayerGroupNames,
POIsModule,
StandardStyleID,
standardStyleIDs,
TomTomMap,
} from '@tomtom-org/maps-sdk/map';
import './style.css';
import { API_KEY } from './config';
import { initTogglePanel } from './togglePanel';
const humanizeGroupName = (name: string): string => {
const spaced = name.replace(/([A-Z])/g, ' $1').toLowerCase();
return spaced.charAt(0).toUpperCase() + spaced.slice(1);
};
const addToggleRow = (container: HTMLElement, group: BaseMapLayerGroupName): HTMLInputElement => {
const label = document.createElement('label');
label.className = 'ui-toggle-label';
label.innerHTML = `
<input type="checkbox" class="ui-toggle-input" id="ui-toggle-${group}">
<span class="ui-toggle-switch"></span>
${humanizeGroupName(group)}`;
container.appendChild(label);
return label.querySelector('input') as HTMLInputElement;
};
TomTomConfig.instance.put({ apiKey: API_KEY, language: 'en-GB' });
(async () => {
const map = new TomTomMap({
mapLibre: {
container: 'sdk-map',
center: [-74.06332, 40.72732],
zoom: 12,
},
});
const baseMap = await BaseMapModule.get(map);
const togglesContainer = document.querySelector('#ui-baseMapToggles') as HTMLElement;
for (const layerGroup of baseMapLayerGroupNames) {
const layerGroups: BaseMapLayerGroups = { mode: 'include', names: [layerGroup] };
const checkbox = addToggleRow(togglesContainer, layerGroup);
checkbox.checked = baseMap.isVisible({ layerGroups });
checkbox.addEventListener('change', () => baseMap.setVisible(checkbox.checked, { layerGroups }));
}
const poisModule = await POIsModule.get(map);
document.querySelector('#ui-togglePOIs')?.addEventListener('change', (event) => {
poisModule.setVisible((event.target as HTMLInputElement).checked);
});
const stylesSelector = document.querySelector('#ui-mapStyles') as HTMLSelectElement;
for (const id of standardStyleIDs) {
stylesSelector.add(new Option(id));
}
stylesSelector.addEventListener('change', (event) =>
map.setStyle((event.target as HTMLOptionElement).value as StandardStyleID),
);
initTogglePanel();
})();