Compare commits
6 Commits
79fe625ae7
...
62cebf7c71
| Author | SHA1 | Date | |
|---|---|---|---|
| 62cebf7c71 | |||
| 8f336a06fb | |||
| 7fd4411643 | |||
| 5a31062b21 | |||
| c4cd110fd2 | |||
| bed2e2f264 |
@@ -1,7 +1,3 @@
|
|||||||
.imageOpener{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.imageOpenerImage{
|
.imageOpenerImage{
|
||||||
display: block;
|
display: block;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
|
|||||||
29
src/components/AudioOpener.tsx
Normal file
29
src/components/AudioOpener.tsx
Normal 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
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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{
|
||||||
|
|||||||
6
src/types/FileOpenerProps.ts
Normal file
6
src/types/FileOpenerProps.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import { File } from "../generated/graphql"
|
||||||
|
|
||||||
|
export interface FileOpenerProps{
|
||||||
|
file: File
|
||||||
|
active: boolean
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user