modal and openers
This commit is contained in:
		
							parent
							
								
									baa04685be
								
							
						
					
					
						commit
						ab20c0693c
					
				@ -1,3 +1,9 @@
 | 
			
		||||
.imageOpener{
 | 
			
		||||
    width: 90%;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.imageOpenerImage{
 | 
			
		||||
    display: block;
 | 
			
		||||
    margin-left: auto;
 | 
			
		||||
    margin-right: auto;
 | 
			
		||||
}
 | 
			
		||||
@ -10,7 +10,7 @@ const FileBrowser: React.FC = () => {
 | 
			
		||||
	const [openFileId, setOpenFileId] = useState("")
 | 
			
		||||
	const [showFile, setShowFile] = useState(false)
 | 
			
		||||
 | 
			
		||||
	const { data } = useOpenDirQuery({
 | 
			
		||||
	const { data, loading } = useOpenDirQuery({
 | 
			
		||||
		variables:{
 | 
			
		||||
			path
 | 
			
		||||
		}
 | 
			
		||||
@ -22,6 +22,9 @@ const FileBrowser: React.FC = () => {
 | 
			
		||||
				setPath(newPath)
 | 
			
		||||
			}}/>
 | 
			
		||||
			<div>
 | 
			
		||||
				{loading && 
 | 
			
		||||
					<div className="loading loading-lg"></div> // TODO: center
 | 
			
		||||
				}
 | 
			
		||||
				<table className="table table-striped table-hover">
 | 
			
		||||
					<thead>
 | 
			
		||||
						<tr>
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,8 @@ import PropTypes from "prop-types"
 | 
			
		||||
import { useGetFileQuery } from "../generated/graphql"
 | 
			
		||||
import ImageOpener from "./ImageOpener"
 | 
			
		||||
import TextOpener from "./TextOpener"
 | 
			
		||||
import Modal from "./Modal"
 | 
			
		||||
import { useState } from "react"
 | 
			
		||||
 | 
			
		||||
interface Props {
 | 
			
		||||
    id: string
 | 
			
		||||
@ -49,14 +51,11 @@ const FileOpen: React.FC<Props> = (props) => {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (
 | 
			
		||||
		<div className={`modal modal-sm ${props.show ? "active":""}`}>
 | 
			
		||||
			<a className="modal-overlay" onClick={()=>{
 | 
			
		||||
				props.onCloseClick?.()
 | 
			
		||||
			}}>❌</a>
 | 
			
		||||
			<div className="modal-container">
 | 
			
		||||
				{opener}
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
		<Modal onCloseClick={()=>{
 | 
			
		||||
			props.onCloseClick?.()
 | 
			
		||||
		}} show={props.show} >
 | 
			
		||||
			{opener}
 | 
			
		||||
		</Modal>
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ interface Props {
 | 
			
		||||
const ImageOpener: React.FC<Props> = (props) => {
 | 
			
		||||
	return (
 | 
			
		||||
		<div className={style.imageOpener}>
 | 
			
		||||
			<img className="img-responsive img-fit-cover" src={genDownloadLink(props.file.id)}/>
 | 
			
		||||
			<img className={`img-responsive img-fit-contain ${style.imageOpenerImage}`} src={genDownloadLink(props.file.id)}/>
 | 
			
		||||
		</div>
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										21
									
								
								src/components/Modal.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/components/Modal.tsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
import React from "react"
 | 
			
		||||
import style from "./../style/Modal.module.scss"
 | 
			
		||||
 | 
			
		||||
interface Props {
 | 
			
		||||
	show: boolean
 | 
			
		||||
	onCloseClick?: ()=>void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const Modal: React.FC<Props> = (props) => {
 | 
			
		||||
	return (
 | 
			
		||||
		<div className={`${style.overlay} ${!props.show && style.hidden}`} onClick={()=>{
 | 
			
		||||
			props.onCloseClick?.()
 | 
			
		||||
		}}>
 | 
			
		||||
			<div className={style.body}>
 | 
			
		||||
				{props.children}
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default Modal
 | 
			
		||||
@ -0,0 +1,2 @@
 | 
			
		||||
 | 
			
		||||
@import "node_modules/spectre.css/src/spectre";
 | 
			
		||||
@ -3,7 +3,6 @@ import ReactDOM from "react-dom"
 | 
			
		||||
import "./index.scss"
 | 
			
		||||
import App from "./App"
 | 
			
		||||
import { ApolloClient, ApolloProvider, InMemoryCache } from "@apollo/client"
 | 
			
		||||
import "spectre.css"
 | 
			
		||||
 | 
			
		||||
const client = new ApolloClient({
 | 
			
		||||
	uri: "/graphql",
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										21
									
								
								src/style/Modal.module.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/style/Modal.module.scss
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
.overlay{
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    z-index: 1;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    width: 100%; 
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    background-color: rgba(0,0,0,0.4);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.body{
 | 
			
		||||
    background-color: #fefefe;
 | 
			
		||||
    margin: 15% auto; /* 15% from the top and centered */
 | 
			
		||||
    padding: 20px;
 | 
			
		||||
    border: 1px solid #888;
 | 
			
		||||
    width: 80%; /* Could be more or less, depending on screen size */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.hidden{
 | 
			
		||||
    display: none;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user