mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2026-04-20 05:26:20 +00:00
Added babel plugins to support latest TS functionalities
This commit is contained in:
15
src/servers/data/index.ts
Normal file
15
src/servers/data/index.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
export interface RegularServer {
|
||||
id: string;
|
||||
name: string;
|
||||
url: string;
|
||||
apiKey: string;
|
||||
version?: string;
|
||||
printableVersion?: string;
|
||||
serverNotReachable?: boolean;
|
||||
}
|
||||
|
||||
interface NotFoundServer {
|
||||
serverNotFound: true;
|
||||
}
|
||||
|
||||
export type Server = RegularServer | NotFoundServer;
|
||||
@@ -1,23 +0,0 @@
|
||||
export default class ServersImporter {
|
||||
constructor(csvjson) {
|
||||
this.csvjson = csvjson;
|
||||
}
|
||||
|
||||
importServersFromFile = (file) => {
|
||||
if (!file || file.type !== 'text/csv') {
|
||||
return Promise.reject('No file provided or file is not a CSV');
|
||||
}
|
||||
|
||||
const reader = new FileReader();
|
||||
|
||||
return new Promise((resolve) => {
|
||||
reader.addEventListener('loadend', (e) => {
|
||||
const content = e.target.result;
|
||||
const servers = this.csvjson.toObject(content);
|
||||
|
||||
resolve(servers);
|
||||
});
|
||||
reader.readAsText(file);
|
||||
});
|
||||
};
|
||||
}
|
||||
26
src/servers/services/ServersImporter.ts
Normal file
26
src/servers/services/ServersImporter.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
import { CsvJson } from 'csvjson';
|
||||
import { RegularServer } from '../data';
|
||||
|
||||
const CSV_MIME_TYPE = 'text/csv';
|
||||
|
||||
export default class ServersImporter {
|
||||
public constructor(private readonly csvjson: CsvJson, private readonly fileReaderFactory: () => FileReader) {}
|
||||
|
||||
public importServersFromFile = async (file?: File): Promise<RegularServer[]> => {
|
||||
if (!file || file.type !== CSV_MIME_TYPE) {
|
||||
throw new Error('No file provided or file is not a CSV');
|
||||
}
|
||||
|
||||
const reader = this.fileReaderFactory();
|
||||
|
||||
return new Promise((resolve) => {
|
||||
reader.addEventListener('loadend', (e: ProgressEvent<FileReader>) => {
|
||||
const content = e.target?.result?.toString() ?? '';
|
||||
const servers = this.csvjson.toObject<RegularServer>(content);
|
||||
|
||||
resolve(servers);
|
||||
});
|
||||
reader.readAsText(file);
|
||||
});
|
||||
};
|
||||
}
|
||||
@@ -41,7 +41,8 @@ const provideServices = (bottle, connect, withRouter) => {
|
||||
|
||||
// Services
|
||||
bottle.constant('csvjson', csvjson);
|
||||
bottle.service('ServersImporter', ServersImporter, 'csvjson');
|
||||
bottle.constant('fileReaderFactory', () => new FileReader());
|
||||
bottle.service('ServersImporter', ServersImporter, 'csvjson', 'fileReaderFactory');
|
||||
bottle.service('ServersExporter', ServersExporter, 'Storage', 'window', 'csvjson');
|
||||
|
||||
// Actions
|
||||
|
||||
Reference in New Issue
Block a user