UNPKG

leumas-private-shared

Version:

Private React JSX Package For Leumas Shared Components, Headers, Footers, Asides, Login Pages, API Key Manager and much more. Styles and everything reusable to avoid DRY code across all of our subdomains

112 lines (100 loc) 3.52 kB
import React, { useState, useEffect } from 'react'; import axios from 'axios'; import { Container, Grid, TextField, Pagination, Dialog, DialogActions, DialogContent, DialogTitle, Button } from '@mui/material'; const SchemasComponent = () => { const [schemas, setSchemas] = useState([]); const [filteredSchemas, setFilteredSchemas] = useState([]); const [searchQuery, setSearchQuery] = useState(''); const [page, setPage] = useState(1); const [open, setOpen] = useState(false); const [selectedSchema, setSelectedSchema] = useState(null); const schemasPerPage = 10; useEffect(() => { axios.get(`${import.meta.env.VITE_REACT_APP_LEUMAS_API_ENDPOINT}/schema`) .then(response => { setSchemas(response.data); setFilteredSchemas(response.data); }) .catch(error => console.error('Error fetching schemas:', error)); }, []); useEffect(() => { setFilteredSchemas( schemas.filter(schema => schema.toLowerCase().includes(searchQuery.toLowerCase())) ); }, [searchQuery, schemas]); const handleSearchChange = (event) => { setSearchQuery(event.target.value); }; const handlePageChange = (event, value) => { setPage(value); }; const handleClickOpen = (schema) => { setSelectedSchema(schema); setOpen(true); }; const handleClose = () => { setOpen(false); setSelectedSchema(null); }; const startIndex = (page - 1) * schemasPerPage; const displayedSchemas = filteredSchemas.slice(startIndex, startIndex + schemasPerPage); return ( <Container> <TextField label="Search" variant="outlined" fullWidth margin="normal" value={searchQuery} onChange={handleSearchChange} /> <Grid container spacing={2}> {displayedSchemas.map((schema, index) => ( <Grid item xs={12} sm={6} md={4} lg={3} key={index}> <Button variant="outlined" fullWidth onClick={() => handleClickOpen(schema)} > {schema} </Button> </Grid> ))} </Grid> <Pagination count={Math.ceil(filteredSchemas.length / schemasPerPage)} page={page} onChange={handlePageChange} color="primary" style={{ marginTop: '20px', display: 'flex', justifyContent: 'center' }} /> <Dialog open={open} onClose={handleClose}> <DialogTitle>Navigate to {selectedSchema}</DialogTitle> <DialogContent> <DialogActions> <Button onClick={() => window.location.href = `/public/${selectedSchema}`}>Public</Button> <Button onClick={() => window.location.href = `/owned/${selectedSchema}`}>Owned</Button> <Button onClick={() => window.location.href = `/purchased/${selectedSchema}`}>Purchased</Button> <Button onClick={() => window.location.href = `/create/${selectedSchema}`}>Create</Button> <Button onClick={() => window.location.href = `/new/${selectedSchema}`}>New</Button> <Button onClick={() => window.location.href = `/build/new/${selectedSchema}`}>Build New</Button> </DialogActions> </DialogContent> <DialogActions> <Button onClick={handleClose}>Close</Button> </DialogActions> </Dialog> </Container> ); }; export default SchemasComponent;