/**
* Copyright 2022 Design Barn Inc.
*/
import { useTracker } from '@context/tracker-provider';
import { Transition } from '@headlessui/react';
import { eventEnums, eventsConst } from '@lottiefiles/plugin-tracker';
import { Appearance, Input, InputAppearance, Size } from '@lottiefiles/react-ui-kit';
import { useEffect, useState, useContext } from '@wordpress/element';
import * as React from 'react';
import { useNavigate } from 'react-router-dom';
import { DragDrop, Button } from '../../../../_components';
import { LottieContext } from '../../../../context/lottie-provider';
import { withBase } from '../../../../hoc';
import { createJsonFile } from '../../../../utility';
import { DotLottieUtils, ExtractionType } from '@lottiefiles/dotlottie-js';
export const ImportSidebar: React.FC = () => {
const navigate = useNavigate();
const { previewFile, setPreviewFile } = useContext(LottieContext);
const isLocalUpload = Boolean(previewFile.json && previewFile.file);
const handleSubmit = (event: React.FormEvent): void => {
event.preventDefault();
navigate('/preview');
};
// returns true if invalid link
const isInvalidLink = (link: string): boolean => !link;
const isDisabled = isInvalidLink(previewFile.path) || isLocalUpload;
return (
);
};
const Import: React.FC = () => {
const tracker = useTracker();
const navigate = useNavigate();
const { appData, setPreviewFile } = useContext(LottieContext);
const [show, setShow] = useState(false);
useEffect(() => {
setShow(true);
// setPreviewFile({ path: '' });
return (): void => setShow(false);
}, []);
const handleFileChosen = (file: File): void => {
const fileReader = new FileReader();
fileReader.onloadend = async (): Promise => {
// eslint-disable-next-line node/no-unsupported-features/node-builtins
const decoder = new TextDecoder();
const fileReaderResult = fileReader.result;
if (file && file.name.endsWith('.lottie')) {
if (fileReaderResult) {
const url = URL.createObjectURL(file);
const dotlottie = await DotLottieUtils.build(url);
try {
const dotLottieId = dotlottie.getManifest()['animations'][0].id;
const dLottie = dotlottie.extract(dotLottieId, ExtractionType.String, true);
if (dLottie && typeof dLottie === 'string') {
const blobPart = new Blob([dLottie], { type: 'application/json' });
const newFile = createJsonFile(blobPart);
setPreviewFile({ json: dLottie, path: `${newFile.name}`, file: newFile });
navigate('/preview');
}
} catch (ex) {
console.error(ex);
}
}
} else {
const json = JSON.parse(decoder.decode(fileReaderResult as ArrayBuffer));
setPreviewFile({ json: JSON.stringify(json), path: file.name, file });
navigate('/preview');
}
};
fileReader.readAsArrayBuffer(file);
};
return (
{
if (event.dataTransfer) {
event.dataTransfer.dropEffect = 'copy';
}
}}
onDragIn={(event: DragEvent): void => {
if (event.dataTransfer) {
event.dataTransfer.setData('text', 'data');
event.dataTransfer.dropEffect = 'move';
}
}}
onDragOut={(): void => {
/** */
}}
onDragDrop={(files: FileList): void => {
tracker.pluginTracking({
eventType: eventsConst.import,
userId: appData.userData.id,
eventProperties: { type: eventEnums.importType.json },
});
handleFileChosen(files[0]);
}}
handleFileChosen={(files: FileList): void => {
tracker.pluginTracking({
eventType: eventsConst.import,
userId: appData.userData.id,
eventProperties: { type: eventEnums.importType.json },
});
handleFileChosen(files[0]);
}}
bordered
/>
);
};
export default withBase({ SidebarContent: ImportSidebar })(Import);