// public/js/map/activities/activitySource.js // =================================== // ACTIVITY SOURCE // =================================== (() => { "use strict"; const SOURCE_ID = "activities"; // =================================== // CREA SOURCE // =================================== function createActivitySource(map, features = []) { if (!map) { return null; } const data = { type: "FeatureCollection", features, }; const existingSource = map.getSource(SOURCE_ID); if (existingSource) { existingSource.setData(data); return existingSource; } map.addSource(SOURCE_ID, { type: "geojson", data, cluster: true, clusterRadius: 80, }); return map.getSource(SOURCE_ID); } // =================================== // AGGIORNA SOURCE // =================================== function updateActivitySource(map, features = []) { if (!map) { return; } if (!map.isStyleLoaded()) { return; } const data = { type: "FeatureCollection", features, }; const source = map.getSource(SOURCE_ID); if (source) { source.setData(data); return; } createActivitySource(map, features); } // =================================== // GET SOURCE // =================================== function getActivitySource(map) { if (!map) { return null; } return map.getSource(SOURCE_ID) || null; } // =================================== // GET FEATURES // =================================== function getActivitySourceFeatures(map) { const source = getActivitySource(map); if (!source) { return []; } return source._data?.features || []; } // =================================== // GET CLUSTER // =================================== function getActivitySourceClusters(map) { if (!map) { return []; } if (!map.getSource(SOURCE_ID)) { return []; } return map.querySourceFeatures(SOURCE_ID, { filter: ["has", "point_count"], }); } // =================================== // GET PUNTI // =================================== function getActivitySourcePoints(map) { if (!map) { return []; } if (!map.getSource(SOURCE_ID)) { return []; } return map.querySourceFeatures(SOURCE_ID, { filter: ["!", ["has", "point_count"]], }); } // =================================== // API PUBBLICA // =================================== window.ActivitySource = { create: createActivitySource, update: updateActivitySource, get: getActivitySource, getFeatures: getActivitySourceFeatures, getClusters: getActivitySourceClusters, getPoints: getActivitySourcePoints, }; })();