import React, { useState, useEffect } from 'react';
import './AddFilePopup.css';
import { FaFile, FaFolder } from 'react-icons/fa';
import { processSwagger } from 'translation-to-graphql';
export default function AddFilePopup({
selected,
close,
newSwaggerFile,
newTranslationFile,
}) {
const [activeMenuItem, setActiveMenuItem] = useState(selected);
const [translationName, setTranslationName] = useState('');
useEffect(() => {
setActiveMenuItem(selected);
}, [selected]);
const handleCreate = () => {
newTranslationFile(translationName);
close();
};
const handleCancel = () => {
close();
};
const handleMenuClick = (event) => {
setActiveMenuItem(event.target.innerText.trim());
};
const handleTranslationName = (event) => {
setTranslationName(event.target.value);
};
/**
* Handling opening of swagger file button
* @method
* @param {ChangeEvent<HTMLInputElement>} event - event containing name of the swagger file
*/
const handleOpenSwagger = (event) => {
((swagger) => {
const fileReader = new FileReader();
fileReader.addEventListener('load', () => {
// parse JSON file
const result = JSON.parse(fileReader.result);
newSwaggerFile(processSwagger(result), swagger.name);
});
fileReader.readAsText(swagger);
})(event.target.files[0]);
close();
};
return (
<div className="modal">
<div className="header"> Add Files </div>
<div className="content">
<div className="menu">
<div
className="menu-item"
onClick={handleMenuClick}
style={{
background: `${
activeMenuItem === 'New Translation File'
? 'lightsalmon'
: 'lightgrey'
}`,
}}
>
<FaFile /> New Translation File
</div>
<div
className="menu-item"
onClick={handleMenuClick}
style={{
background: `${
activeMenuItem === 'New Translation File'
? 'lightgrey'
: 'lightsalmon'
}`,
}}
>
<FaFolder /> Upload Swagger File
</div>
</div>
<div className="form-data">
{activeMenuItem === 'New Translation File' ? (
<div className="new-file">
<span className="file-name">File Name</span>
<div className="file-input">
<input
type="text"
name="translationName"
value={translationName}
onChange={handleTranslationName}
/>{' '}
.json
</div>
</div>
) : (
<div className="new-file">
<div className="file-input">
<input
id="swagger"
type="file"
name="file"
onChange={handleOpenSwagger}
accept="application/JSON"
/>
<label htmlFor="swagger" className="custom-file-action">
Upload Swagger
</label>
</div>
</div>
)}
</div>
</div>
<div className="actions">
<button className="btn-create" onClick={handleCreate}>
Create
</button>
<button className="btn-cancel" onClick={handleCancel}>
Cancel
</button>
</div>
</div>
);
}