mirror of
https://github.com/umap-project/umap.git
synced 2025-04-28 19:42:36 +02:00
feat: use Last-Modified header from remote data when available
fix #2589
This commit is contained in:
parent
fea0f02b80
commit
2baeaace24
3 changed files with 24 additions and 3 deletions
|
@ -74,10 +74,10 @@ export default class Caption extends Utils.WithTemplate {
|
||||||
this.addCredits()
|
this.addCredits()
|
||||||
if (this._umap.properties.created_at) {
|
if (this._umap.properties.created_at) {
|
||||||
const created_at = translate('created at {date}', {
|
const created_at = translate('created at {date}', {
|
||||||
date: new Date(this._umap.properties.created_at).toLocaleDateString(),
|
date: this._umap.createdAt.toLocaleDateString(),
|
||||||
})
|
})
|
||||||
const modified_at = translate('modified at {date}', {
|
const modified_at = translate('modified at {date}', {
|
||||||
date: new Date(this._umap.properties.modified_at).toLocaleDateString(),
|
date: this._umap.modifiedAt.toLocaleDateString(),
|
||||||
})
|
})
|
||||||
this.elements.dates.innerHTML = `${created_at} - ${modified_at}`
|
this.elements.dates.innerHTML = `${created_at} - ${modified_at}`
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -220,6 +220,7 @@ export class DataLayer {
|
||||||
this._loading = true
|
this._loading = true
|
||||||
const [geojson, response, error] = await this._umap.server.get(this._dataUrl())
|
const [geojson, response, error] = await this._umap.server.get(this._dataUrl())
|
||||||
if (!error) {
|
if (!error) {
|
||||||
|
this._umap.modifiedAt = response.headers.get('last-modified')
|
||||||
this.setReferenceVersion({ response, sync: false })
|
this.setReferenceVersion({ response, sync: false })
|
||||||
// FIXME: for now the _umap_options property is set dynamically from backend
|
// FIXME: for now the _umap_options property is set dynamically from backend
|
||||||
// And thus it's not in the geojson file in the server
|
// And thus it's not in the geojson file in the server
|
||||||
|
@ -303,7 +304,10 @@ export class DataLayer {
|
||||||
async getUrl(url, initialUrl) {
|
async getUrl(url, initialUrl) {
|
||||||
const response = await this._umap.request.get(url)
|
const response = await this._umap.request.get(url)
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
if (response?.ok) return resolve(response.text())
|
if (response?.ok) {
|
||||||
|
this._umap.modifiedAt = response.headers.get('last-modified')
|
||||||
|
return resolve(response.text())
|
||||||
|
}
|
||||||
Alert.error(
|
Alert.error(
|
||||||
translate('Cannot load remote data for layer "{layer}" with url "{url}"', {
|
translate('Cannot load remote data for layer "{layer}" with url "{url}"', {
|
||||||
layer: this.getName(),
|
layer: this.getName(),
|
||||||
|
|
|
@ -57,6 +57,8 @@ export default class Umap {
|
||||||
},
|
},
|
||||||
geojson.properties
|
geojson.properties
|
||||||
)
|
)
|
||||||
|
this.createdAt = new Date(this.properties.created_at)
|
||||||
|
this.modifiedAt = this.properties.modified_at
|
||||||
this.searchParams = new URLSearchParams(window.location.search)
|
this.searchParams = new URLSearchParams(window.location.search)
|
||||||
|
|
||||||
// Locale name (pt_PT, en_US…)
|
// Locale name (pt_PT, en_US…)
|
||||||
|
@ -237,6 +239,21 @@ export default class Umap {
|
||||||
this._activeFeature = feature
|
this._activeFeature = feature
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get modifiedAt() {
|
||||||
|
return this._modifiedAt
|
||||||
|
}
|
||||||
|
|
||||||
|
set modifiedAt(at) {
|
||||||
|
if (!at) return
|
||||||
|
if (typeof at === 'string') {
|
||||||
|
at = new Date(at)
|
||||||
|
}
|
||||||
|
if (!this._modifiedAt || at > this._modifiedAt) {
|
||||||
|
console.log('set modifiedAt to', at)
|
||||||
|
this._modifiedAt = at
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setPropertiesFromQueryString() {
|
setPropertiesFromQueryString() {
|
||||||
const asBoolean = (key) => {
|
const asBoolean = (key) => {
|
||||||
const value = this.searchParams.get(key)
|
const value = this.searchParams.get(key)
|
||||||
|
|
Loading…
Reference in a new issue