Restore compressor settings after load via API

This commit is contained in:
Surma
2018-11-29 00:19:59 +00:00
parent 4df3a7df83
commit bb3bd2d46a
7 changed files with 18 additions and 71 deletions

View File

@@ -107,11 +107,25 @@ export default class App extends Component<Props, State> {
private exposeAPI() {
const api = {
setFile: (blob: Blob, name: string) => {
return new Promise((resolve) => {
this.setState({ file: new File([blob], name) });
document.addEventListener('squooshingdone', () => resolve(), { once: true });
setFile: async (blob: Blob, name: string) => {
let oldCompressorState = this.compressInstance && this.compressInstance.state;
await new Promise((resolve) => {
this.setState({ file: new File([blob], name) }, resolve);
});
await new Promise((resolve) => {
document.addEventListener('squooshingdone', resolve, { once: true });
});
if (oldCompressorState) {
let newState = this.compressInstance!.state;
[0, 1].forEach((index) => {
oldCompressorState = cleanMerge(oldCompressorState!, `images.${index}`, {
loading: false,
data: undefined,
});
newState = cleanSet(newState, `images.${index}`, oldCompressorState.images[index]);
});
this.compressInstance!.setState(newState);
}
},
getBlob: async (side: 0 | 1) => {
if (!this.state.file || !this.compressInstance) {