Compare commits

...

6 Commits

Author SHA1 Message Date
62cebf7c71 removed unused css 2021-08-01 13:49:17 +02:00
8f336a06fb modal height 2021-08-01 13:49:02 +02:00
7fd4411643 improved audio opener 2021-08-01 13:30:23 +02:00
5a31062b21 FileOpenerProps 2021-08-01 12:59:54 +02:00
c4cd110fd2 removed unused import 2021-07-31 20:52:53 +02:00
bed2e2f264 FileOpener dont query if ID not set 2021-07-31 20:52:26 +02:00
7 changed files with 55 additions and 25 deletions

View File

@@ -1,7 +1,3 @@
.imageOpener{
}
.imageOpenerImage{ .imageOpenerImage{
display: block; display: block;
margin-left: auto; margin-left: auto;

View File

@@ -0,0 +1,29 @@
import React from "react"
import { useEffect } from "react"
import genDownloadLink from "../functions/genDownloadLink"
import { FileOpenerProps } from "../types/FileOpenerProps"
const AudioOpener: React.FC<FileOpenerProps> = (props) => {
const audio = React.createRef<HTMLAudioElement>()
useEffect(()=>{
if(audio.current){
audio.current.volume = 0.1
}
},[audio])
useEffect(()=>{
if (!props.active && audio.current){
audio.current.pause()
}
},[props.active])
return (
<div>
<audio src={genDownloadLink(props.file.id)} controls ref={audio}></audio>
</div>
)
}
export default AudioOpener

View File

@@ -4,7 +4,7 @@ import { useGetFileQuery } from "../generated/graphql"
import ImageOpener from "./ImageOpener" import ImageOpener from "./ImageOpener"
import TextOpener from "./TextOpener" import TextOpener from "./TextOpener"
import Modal from "./Modal" import Modal from "./Modal"
import { useState } from "react" import AudioOpener from "./AudioOpener"
interface Props { interface Props {
id: string id: string
@@ -14,6 +14,10 @@ interface Props {
const FileOpen: React.FC<Props> = (props) => { const FileOpen: React.FC<Props> = (props) => {
if (!props.id) {
return <></>
}
const { data } = useGetFileQuery({ const { data } = useGetFileQuery({
variables:{ variables:{
id: props.id id: props.id
@@ -25,9 +29,9 @@ const FileOpen: React.FC<Props> = (props) => {
if(data?.file != null){ if(data?.file != null){
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
if (data.file.contentType?.startsWith("image/")){ if (data.file.contentType?.startsWith("image/")){
opener = <ImageOpener file={data?.file} /> opener = <ImageOpener file={data?.file} active={props.show} />
}else if (data.file.contentType?.startsWith("text/")){ }else if (data.file.contentType?.startsWith("text/")){
opener = <TextOpener file={data.file} /> opener = <TextOpener file={data.file} active={props.show} />
}else{ }else{
// Get Opener bases on file extension // Get Opener bases on file extension
const ext = data.file.name?.split(".").pop() const ext = data.file.name?.split(".").pop()
@@ -37,14 +41,17 @@ const FileOpen: React.FC<Props> = (props) => {
case "jpeg": case "jpeg":
case "gif": case "gif":
// TODO: more ext // TODO: more ext
opener = <ImageOpener file={data.file} /> opener = <ImageOpener file={data.file} active={props.show} />
break break
case "txt": case "txt":
case "md": case "md":
opener = <TextOpener file={data.file} /> opener = <TextOpener file={data.file} active={props.show} />
break
case "mp3":
opener = <AudioOpener file={data.file} active={props.show} />
break break
default: default:
opener = <ImageOpener file={data?.file} /> opener = <ImageOpener file={data?.file} active={props.show} />
break break
} }
} }

View File

@@ -1,18 +1,12 @@
import React from "react" import React from "react"
import PropTypes from "prop-types" import PropTypes from "prop-types"
import { File } from "../generated/graphql"
import genDownloadLink from "../functions/genDownloadLink" import genDownloadLink from "../functions/genDownloadLink"
import style from "./../App.module.scss" import style from "./../App.module.scss"
import { FileOpenerProps } from "../types/FileOpenerProps"
interface Props { const ImageOpener: React.FC<FileOpenerProps> = (props) => {
file: File
}
const ImageOpener: React.FC<Props> = (props) => {
return ( return (
<div className={style.imageOpener}> <img className={`img-responsive img-fit-cover ${style.imageOpenerImage}`} src={genDownloadLink(props.file.id)}/>
<img className={`img-responsive img-fit-contain ${style.imageOpenerImage}`} src={genDownloadLink(props.file.id)}/>
</div>
) )
} }

View File

@@ -1,12 +1,8 @@
import React from "react" import React from "react"
import PropTypes from "prop-types" import PropTypes from "prop-types"
import { File } from "../generated/graphql" import { FileOpenerProps } from "../types/FileOpenerProps"
interface Props { const TextOpener: React.FC<FileOpenerProps> = (props) => {
file: File
}
const TextOpener: React.FC<Props> = (props) => {
return ( return (
<div> <div>
<textarea> <textarea>

View File

@@ -18,6 +18,8 @@
padding: 20px; padding: 20px;
border: 1px solid #888; border: 1px solid #888;
width: 80%; width: 80%;
max-height: 99%;
overflow: hidden;
} }
.hidden{ .hidden{

View File

@@ -0,0 +1,6 @@
import { File } from "../generated/graphql"
export interface FileOpenerProps{
file: File
active: boolean
}