2020-02-14 22:31:33 +02:00
|
|
|
import { EntryField } from '../types/redux';
|
|
|
|
|
2019-12-18 18:16:02 +02:00
|
|
|
interface AssetProxyArgs {
|
|
|
|
path: string;
|
|
|
|
url?: string;
|
|
|
|
file?: File;
|
2020-02-14 22:31:33 +02:00
|
|
|
field?: EntryField;
|
2019-12-18 18:16:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export default class AssetProxy {
|
|
|
|
url: string;
|
|
|
|
fileObj?: File;
|
|
|
|
path: string;
|
2020-02-14 22:31:33 +02:00
|
|
|
field?: EntryField;
|
2019-12-18 18:16:02 +02:00
|
|
|
|
2020-02-14 22:31:33 +02:00
|
|
|
constructor({ url, file, path, field }: AssetProxyArgs) {
|
2019-12-18 18:16:02 +02:00
|
|
|
this.url = url ? url : window.URL.createObjectURL(file);
|
|
|
|
this.fileObj = file;
|
|
|
|
this.path = path;
|
2020-02-14 22:31:33 +02:00
|
|
|
this.field = field;
|
2019-12-18 18:16:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
toString(): string {
|
|
|
|
return this.url;
|
|
|
|
}
|
|
|
|
|
|
|
|
async toBase64(): Promise<string> {
|
|
|
|
const blob = await fetch(this.url).then(response => response.blob());
|
2020-06-18 10:11:37 +03:00
|
|
|
if (blob.size <= 0) {
|
|
|
|
return '';
|
|
|
|
}
|
2019-12-18 18:16:02 +02:00
|
|
|
const result = await new Promise<string>(resolve => {
|
|
|
|
const fr = new FileReader();
|
|
|
|
fr.onload = (readerEvt): void => {
|
|
|
|
const binaryString = readerEvt.target?.result || '';
|
|
|
|
|
|
|
|
resolve(binaryString.toString().split('base64,')[1]);
|
|
|
|
};
|
|
|
|
fr.readAsDataURL(blob);
|
|
|
|
});
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-14 22:31:33 +02:00
|
|
|
export function createAssetProxy({ url, file, path, field }: AssetProxyArgs): AssetProxy {
|
|
|
|
return new AssetProxy({ url, file, path, field });
|
2019-12-18 18:16:02 +02:00
|
|
|
}
|