added spectre css

This commit is contained in:
Djeeberjr 2021-07-27 19:24:52 +02:00
parent 2aea95c6ab
commit abbcaf9166
9 changed files with 93 additions and 37 deletions

View File

@ -17,6 +17,7 @@
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-scripts": "4.0.3",
"spectre.css": "^0.5.9",
"typescript": "^4.1.2",
"web-vitals": "^1.0.1"
},
@ -57,5 +58,6 @@
"apollo": "^2.33.4",
"eslint": "^7.31.0",
"eslint-plugin-react": "^7.24.0"
}
},
"proxy": "http://localhost:8080"
}

View File

@ -4,8 +4,8 @@ import FileBrowser from "./components/FileBrowser"
const App: React.FC = () => {
return (
<div className="App">
<FileBrowser></FileBrowser>
<div className="container">
<FileBrowser/>
</div>
)
}

View File

@ -0,0 +1,36 @@
import React from "react"
import PropTypes from "prop-types"
interface Props{
path: string
onDirClick?: (path: string) => void
}
const Breadcrum: React.FC<Props> = (props) => {
const parts = props.path.split("/").filter(e=>e.length > 0)
return (
<ul className="breadcrumb">
<li className="breadcrumb-item">
<a onClick={()=>{
props.onDirClick?.("/")
}}>
Root
</a>
</li>
{parts.map((e,i,arr)=>(
<li key={e} className="breadcrumb-item">
<a onClick={()=>{
props.onDirClick?.("/"+arr.slice(0,i-1).join("/"))
}}>{e}</a>
</li>))}
</ul>
)
}
Breadcrum.propTypes = {
path: PropTypes.string.isRequired,
onDirClick: PropTypes.func
}
export default Breadcrum

View File

@ -8,9 +8,14 @@ interface Props {
const DirectoryElement: React.FC<Props> = (props) => {
return (
<div>
📂 {props.dir.name}
</div>
<>
<td>
📂
</td>
<td>
{props.dir.name}
</td>
</>
)
}

View File

@ -1,17 +1,9 @@
import React from "react"
import { useState } from "react"
import { useOpenDirQuery } from "../generated/graphql"
import Breadcrum from "./Breadcrum"
import FileBrowserElement from "./FileBrowserElement"
function parentDir(path:string): string {
if(path.endsWith("/")){
path = path.substr(0,path.length - 1)
}
const paths = path.split("/")
paths.pop()
return paths.join("/")
}
const FileBrowser: React.FC = () => {
const [path,setPath] = useState("/")
@ -23,24 +15,34 @@ const FileBrowser: React.FC = () => {
return (
<div>
<div onClick={()=>{
setPath(parentDir(path))
}}>
..
</div>
<Breadcrum path={path} onDirClick={(newPath)=>{
console.debug(newPath)
setPath(newPath)
}}/>
<div>
{ data?.files.map(v => (<FileBrowserElement
key={v?.id}
file={v}
/>))}
<table className="table table-striped table-hover">
<thead>
<tr>
<th>Icon</th>
<th>Name</th>
</tr>
</thead>
<tbody>
{ data?.directorys.map(v => (<FileBrowserElement
key={v?.id}
dir={v}
onClick={(data)=>{
setPath(data.id)
}}
/>))}
{ data?.directorys.map(v => (<FileBrowserElement
key={v?.id}
dir={v}
onClick={(data)=>{
setPath(data.id)
}}
/>))}
{ data?.files.map(v => (<FileBrowserElement
key={v?.id}
file={v}
/>))}
</tbody>
</table>
</div>
</div>
)

View File

@ -12,7 +12,7 @@ interface Props {
const FileBrowserElement: React.FC<Props> = (props) => {
return (
<div onClick={()=>{
<tr onClick={()=>{
if(props.file){
props.onClick?.(props.file)
}else if(props.dir){
@ -20,7 +20,7 @@ const FileBrowserElement: React.FC<Props> = (props) => {
}
}}>
{(props.file) ? <FileElement file={props.file}/>:(props.dir)?<DirectoryComponent dir={props.dir} />:<></>}
</div>
</tr>
)
}

View File

@ -8,9 +8,14 @@ interface Props {
const FileElement: React.FC<Props> = (props) => {
return (
<div>
📄 {props.file.name}
</div>
<>
<td>
📄
</td>
<td>
{props.file.name}
</td>
</>
)
}

View File

@ -3,9 +3,10 @@ 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: "http://localhost:8080/graphql",
uri: "/graphql",
cache: new InMemoryCache()
})

View File

@ -12959,6 +12959,11 @@ spdy@^4.0.2:
select-hose "^2.0.0"
spdy-transport "^3.0.0"
spectre.css@^0.5.9:
version "0.5.9"
resolved "https://registry.yarnpkg.com/spectre.css/-/spectre.css-0.5.9.tgz#86c732d093036d9fdc0a2ba570f005e4023ae6ca"
integrity sha512-9jUqwZmCnvflrxFGcK+ize43TvjwDjqMwZPVubEtSIHzvinH0TBUESm1LcOJx3Ur7bdPaeOHQIjOqBl1Y5kLFw==
split-on-first@^1.0.0:
version "1.1.0"
resolved "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz"