Skip to content

Commit

Permalink
feat(import-export): EPSG not mandatory and fix encoding issue (#428)
Browse files Browse the repository at this point in the history
  • Loading branch information
cbourget authored and mbarbeau committed Sep 25, 2019
1 parent d9cdc7d commit ee37eb3
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ export class ImportExportComponent implements OnDestroy, OnInit {

private layers$$: Subscription;

private espgCodeRegex = new RegExp('^\\d{4,6}');

@Input() map: IgoMap;

constructor(
Expand All @@ -58,9 +60,14 @@ export class ImportExportComponent implements OnDestroy, OnInit {
}

importFiles(files: File[]) {
let inputProj = this.inputProj;
if (this.espgCodeRegex.test(inputProj)) {
inputProj =`EPSG:${inputProj}`;
}

this.loading$.next(true);
for (const file of files) {
this.importService.import(file, this.inputProj).subscribe(
this.importService.import(file, inputProj).subscribe(
(features: Feature[]) => this.onFileImportSuccess(file, features),
(error: Error) => this.onFileImportError(file, error),
() => {
Expand Down
4 changes: 3 additions & 1 deletion packages/geo/src/lib/import-export/shared/export.service.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { Injectable } from '@angular/core';

import { ConfigService } from '@igo2/core';
import { downloadContent } from '@igo2/utils';

import { Observable, Observer } from 'rxjs';

import * as olformat from 'ol/format';
import OlFeature from 'ol/Feature';

import { downloadContent } from './export.utils';
import { ExportFormat } from './export.type';
import {
ExportInvalidFileError,
Expand Down Expand Up @@ -159,6 +159,8 @@ export class ExportService {
form.setAttribute('method', 'post');
form.setAttribute('target', '_blank');
form.setAttribute('action', url);
form.acceptCharset = 'UTF-8';
form.enctype = 'application/x-www-form-urlencoded; charset=utf-8;';

const geojsonField = document.createElement('input');
geojsonField.setAttribute('type', 'hidden');
Expand Down
76 changes: 27 additions & 49 deletions packages/geo/src/lib/import-export/shared/export.utils.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,38 @@
import { MessageService, LanguageService } from '@igo2/core';

import {
getEntityProperty,
EntityTableColumn,
EntityTableColumnRenderer
} from '@igo2/common';
import { MessageService, LanguageService } from '@igo2/core';
import { downloadContent } from '@igo2/utils';

import { ExportNothingToExportError } from './export.errors';

export function handleFileExportError(
error: Error,
messageService: MessageService,
languageService: LanguageService
) {
if (error instanceof ExportNothingToExportError) {
handleNothingToExportError(messageService, languageService);
return;
}
const translate = languageService.translate;
const title = translate.instant('igo.geo.export.failed.title');
const message = translate.instant('igo.geo.export.failed.text');
messageService.error(message, title);
}

export function handleNothingToExportError(
messageService: MessageService,
languageService: LanguageService
) {
const translate = languageService.translate;
const title = translate.instant('igo.geo.export.nothing.title');
const message = translate.instant('igo.geo.export.nothing.text');
messageService.error(message, title);
}

/**
* Export array to CSV
*
Expand Down Expand Up @@ -38,50 +63,3 @@ export function entitiesToRowData(entities: object[], columns: EntityTableColumn
});
});
}

/**
* Trigger download of a file
*
* @param content File content
* @param mimeType File mime type
* @param fileName File name
*/
export function downloadContent(content: string, mimeType: string, fileName: string) {
const element = document.createElement('a');
element.setAttribute(
'href',
`data:${mimeType},${encodeURIComponent(content)}`
);
element.setAttribute('download', fileName);
element.style.display = 'none';
document.body.appendChild(element);

element.click();

document.body.removeChild(element);
}

export function handleFileExportError(
error: Error,
messageService: MessageService,
languageService: LanguageService
) {
if (error instanceof ExportNothingToExportError) {
handleNothingToExportError(messageService, languageService);
return;
}
const translate = languageService.translate;
const title = translate.instant('igo.geo.export.failed.title');
const message = translate.instant('igo.geo.export.failed.text');
messageService.error(message, title);
}

export function handleNothingToExportError(
messageService: MessageService,
languageService: LanguageService
) {
const translate = languageService.translate;
const title = translate.instant('igo.geo.export.nothing.title');
const message = translate.instant('igo.geo.export.nothing.text');
messageService.error(message, title);
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ export class ImportService {
return undefined;
} else if (
mimeType === 'application/json' ||
['json', 'geojson', 'kml'].indexOf(extension) >= 0
['json', 'geojson', 'kml', 'gpx'].indexOf(extension) >= 0
) {
return this.importFile;
} else if (this.ogreUrl !== undefined) {
Expand Down
30 changes: 30 additions & 0 deletions packages/utils/src/lib/file.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* Trigger download of a file
*
* @param content File content
* @param mimeType File mime type
* @param fileName File name
*/
export function downloadContent(content: string, mimeType: string, fileName: string) {
const uri = `data:${mimeType},${encodeURIComponent(content)}`;
downloadFromUri(uri, fileName);
}

/**
* Trigger download of a file
*
* @param content File content
* @param mimeType File mime type
* @param fileName File name
*/
export function downloadFromUri(uri: string, fileName: string) {
const element = document.createElement('a');
element.setAttribute('href', uri);
element.setAttribute('download', fileName);
element.style.display = 'none';
document.body.appendChild(element);

element.click();

document.body.removeChild(element);
}
1 change: 1 addition & 0 deletions packages/utils/src/lib/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ export * from './base64';
export * from './clipboard';
export * from './change';
export * from './change.interface';
export * from './file';
export * from './object-utils';
export * from './strenum';
export * from './string-utils';
Expand Down

0 comments on commit ee37eb3

Please sign in to comment.