diff --git a/src/chunkSplit.js b/src/chunkSplit.js new file mode 100644 index 00000000..c850b879 --- /dev/null +++ b/src/chunkSplit.js @@ -0,0 +1,9 @@ +module.exports = function chunkSplit (data, size=1000) { + let result = [] + + for (let i = 0; i < data.length; i += size) { + result.push(data.slice(i, i + size)) + } + + return result +} diff --git a/src/exportAll.js b/src/exportAll.js index 3332f9cb..a0c9693f 100644 --- a/src/exportAll.js +++ b/src/exportAll.js @@ -1,9 +1,52 @@ const tabs = require('modulekit-tabs') +const async = require('async') +const chunkSplit = require('./chunkSplit') let tab let formExport -function prepareDownload () { +function prepareDownload (callback) { + let conf = formExport.get_data() + let result = [] + + global.baseCategory.allMapFeatures((err, data) => { + console.log(data) + + let chunks = chunkSplit(data, 1000) + + async.eachLimit( + chunks, + 1, + (chunk, done) => { + result = result.concat(chunk.map(ob => { + switch (conf.type) { + case 'geojson': + return ob.object.GeoJSON(conf) + } + })) + + global.setTimeout(done, 0) + }, + (err) => { + if (err) { + return callback(err) + } + + switch (conf.type) { + case 'geojson': + result = { + type: 'FeatureCollection', + features: result + } + result = JSON.stringify(result, null, ' ') + } + + console.log(result) + + callback() + } + ) + }) } register_hook('init', function () { @@ -35,8 +78,13 @@ register_hook('init', function () { submit.value = lang('export-prepare') submit.onclick = () => { submit.setAttribute('disabled', 'disabled') - alert('Download') - submit.removeAttribute('disabled') + prepareDownload((err) => { + if (err) { + alert(err) + } + + submit.removeAttribute('disabled') + }) } tab.content.appendChild(submit)