import React, { useState } from 'react'; import Box from '@mui/material/Box'; import Modal from '@mui/material/Modal'; import TextField from '@mui/material/TextField'; import Button from '@mui/material/Button'; import client from "../client"; import PlusIcon from '../assets/PlusIcon'; const style = { position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', width: 600, bgcolor: 'background.paper', border: '5px solid #000', boxShadow: 24, p: 4, }; export default function ModalComponent({button_styling}) { const [open, setOpen] = React.useState(false); const handleOpen = () => setOpen(true); const handleClose = () => setOpen(false); const [files, setFiles] = useState({ model: null, x_test: null, x_train: null, y_test: null, y_train: null, pred: null, }); const handleFileChange = (e, label) => { const selectedFile = e.target.files[0]; setFiles((prevFiles) => ({ ...prevFiles, [label]: selectedFile, })); }; const uploadFiles = async (model_id, datacatalog_id) => { try { const entries = Object.entries(files); for (const [label, file] of entries) { if (!file) { console.log("Not uploading file for label:", label, "because no file was selected"); continue; // Skip if no file is selected for the label } const formData = new FormData(); formData.append('file', file); await new Promise((resolve) => setTimeout(resolve, 100)); // Introduce 100ms delay await client.post( `/upload?param_name=${label}&model_id=${model_id}&datacatalog_id=${datacatalog_id}`, formData, {headers: {'Content-Type': 'multipart/form-data'}} ); } console.log('File uploads successful'); } catch (error) { console.error('File uploads failed:', error); } }; const handleSubmit = (e) => { e.preventDefault(); const modelName = e.target.elements.modelName.value; const modelDesc = e.target.elements.modelDesc.value; client.get("/tenants") .then(response => { // Get tenant ID return response.data[0].id }) .then((response_tenant_id) => { // 1) Create Model console.log(response_tenant_id) const createModelReqBody = { "name": modelName, "model_type": "MDL.001", "date_posted": new Date().toISOString(), "tenant_id": response_tenant_id, "description": modelDesc } return client.post("/model", createModelReqBody).then((response) => [response_tenant_id, response.data.id]) }) .then((id_array) => { // 2) Create Data Catalog console.log("ID of newly created model used in new datacatalog:", id_array[1]) const dataCatalogReqBody = { "dataset_type": "training", "description": "description of the catalog", "is_generated_data": true, "tenant_id": id_array[0], "model_id": id_array[1], "name": "some catalog model name", "dataset_url": "https://www.example.com/dataset/data.csv", "model_type": "Classification", "name": "catalog model name", "parameters": { "additionalProp1": "string", "additionalProp2": "string", "model_name": "2/Model Name/MDL.001/training/dt_model-dac001e0-a852-4fa7-8d98-4c7c3e1d2bf1.joblib" } } return client.post("/datacatalog", dataCatalogReqBody).then((response) => [id_array[1], response.data.id]) }) .then((ids) => {return uploadFiles(ids[0], ids[1]);}) .then(() => window.location.reload()) .catch((error) => console.log(error)) console.log('Model Name:', modelName); console.log('Description:', modelDesc); }; return (
{Object.entries(files).map(([label, file]) => (
handleFileChange(e, label)} />
))}
); }