From eb0d17154c19c179a7e4be09bd389f5b191b0ed3 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Thu, 18 Apr 2024 16:22:00 +0200 Subject: [PATCH] chore: add facets.getParser method --- umap/static/umap/js/modules/facets.js | 21 +++++++++++++++++++-- umap/static/umap/js/umap.features.js | 11 ++++------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/umap/static/umap/js/modules/facets.js b/umap/static/umap/js/modules/facets.js index c0b57086..74ae3d2c 100644 --- a/umap/static/umap/js/modules/facets.js +++ b/umap/static/umap/js/modules/facets.js @@ -25,11 +25,12 @@ export default class Facets { names.forEach((name) => { let value = feature.properties[name] const type = defined[name]['type'] + const parser = this.getParser(type) + value = parser(value) switch (type) { case 'date': case 'datetime': case 'number': - value = type === 'number' ? parseFloat(value) : new Date(value) if (!isNaN(value)) { if (isNaN(properties[name].min) || properties[name].min > value) { properties[name].min = value @@ -40,7 +41,7 @@ export default class Facets { } break default: - value = String(value || '') || L._('') + value = value || L._('') if (!properties[name].choices.includes(value)) { properties[name].choices.push(value) } @@ -130,4 +131,20 @@ export default class Facets { return acc }, {}) } + + getParser(type) { + switch(type) { + case 'number': + return parseFloat + case 'datetime': + return (v) => new Date(v) + case 'date': + return (v) => new Date(new Date(v).toDateString()) // Without time + default: + return (v) => String(v || '') + + } + } + + } diff --git a/umap/static/umap/js/umap.features.js b/umap/static/umap/js/umap.features.js index 9e68deeb..f8411ab3 100644 --- a/umap/static/umap/js/umap.features.js +++ b/umap/static/umap/js/umap.features.js @@ -496,15 +496,12 @@ U.FeatureMixin = { const selected = this.map.facets.selected for (let [name, { type, min, max, choices }] of Object.entries(selected)) { let value = this.properties[name] - let parser + let parser = this.map.facets.getParser(type) + value = parser(value) switch (type) { case 'date': case 'datetime': case 'number': - if (type === 'number') parser = parseFloat - else if (type == 'datetime') parser = (v) => new Date(v) - else parser = (v) => new Date(new Date(v).toDateString()) // Without time - value = value != null ? value : undefined min = parser(min) max = parser(max) value = parser(value) @@ -512,8 +509,8 @@ U.FeatureMixin = { if (!isNaN(max) && !isNaN(value) && max < value) return false break default: - value = String(value || '') || L._('') - if (choices?.length && (!value || !choices.includes(value))) return false + value = value || L._('') + if (choices?.length && !choices.includes(value)) return false break } }