FileOpenerProps
This commit is contained in:
		
							parent
							
								
									c4cd110fd2
								
							
						
					
					
						commit
						5a31062b21
					
				
							
								
								
									
										41
									
								
								src/components/AudioOpener.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/components/AudioOpener.tsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
			
		||||
import React from "react"
 | 
			
		||||
import { useEffect } from "react"
 | 
			
		||||
import genDownloadLink from "../functions/genDownloadLink"
 | 
			
		||||
import { FileOpenerProps } from "../types/FileOpenerProps"
 | 
			
		||||
 | 
			
		||||
const AudioOpener: React.FC<FileOpenerProps> = (props) => {
 | 
			
		||||
 | 
			
		||||
	let audio: HTMLAudioElement
 | 
			
		||||
 | 
			
		||||
	useEffect(()=>{
 | 
			
		||||
		if (audio){
 | 
			
		||||
			audio.pause()
 | 
			
		||||
			audio.remove()
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		audio = new Audio(genDownloadLink(props.file.id))
 | 
			
		||||
		audio.volume = 0.1
 | 
			
		||||
	},[props.file])
 | 
			
		||||
 | 
			
		||||
	useEffect(()=>{
 | 
			
		||||
		if(!props.active){
 | 
			
		||||
			audio.pause
 | 
			
		||||
			console.debug("Pause")
 | 
			
		||||
		}
 | 
			
		||||
		console.debug("active",props.active)
 | 
			
		||||
	},[props.active])
 | 
			
		||||
 | 
			
		||||
	return (
 | 
			
		||||
		<div>
 | 
			
		||||
			<button onClick={()=>{
 | 
			
		||||
				if (audio){
 | 
			
		||||
					(audio.paused && audio.play()) || audio.pause()
 | 
			
		||||
				}
 | 
			
		||||
			}}>
 | 
			
		||||
				Play/Pause
 | 
			
		||||
			</button>
 | 
			
		||||
		</div>
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default AudioOpener
 | 
			
		||||
@ -4,6 +4,7 @@ import { useGetFileQuery } from "../generated/graphql"
 | 
			
		||||
import ImageOpener from "./ImageOpener"
 | 
			
		||||
import TextOpener from "./TextOpener"
 | 
			
		||||
import Modal from "./Modal"
 | 
			
		||||
import AudioOpener from "./AudioOpener"
 | 
			
		||||
 | 
			
		||||
interface Props {
 | 
			
		||||
    id: string
 | 
			
		||||
@ -28,9 +29,9 @@ const FileOpen: React.FC<Props> = (props) => {
 | 
			
		||||
	if(data?.file != null){
 | 
			
		||||
		// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
 | 
			
		||||
		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/")){
 | 
			
		||||
			opener = <TextOpener file={data.file} />
 | 
			
		||||
			opener = <TextOpener file={data.file} active={props.show} />
 | 
			
		||||
		}else{
 | 
			
		||||
			// Get Opener bases on file extension
 | 
			
		||||
			const ext = data.file.name?.split(".").pop()
 | 
			
		||||
@ -40,14 +41,17 @@ const FileOpen: React.FC<Props> = (props) => {
 | 
			
		||||
			case "jpeg":
 | 
			
		||||
			case "gif":
 | 
			
		||||
				// TODO: more ext
 | 
			
		||||
				opener = <ImageOpener file={data.file} />
 | 
			
		||||
				opener = <ImageOpener file={data.file} active={props.show} />
 | 
			
		||||
				break
 | 
			
		||||
			case "txt":
 | 
			
		||||
			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
 | 
			
		||||
			default:
 | 
			
		||||
				opener = <ImageOpener file={data?.file} />
 | 
			
		||||
				opener = <ImageOpener file={data?.file} active={props.show} />
 | 
			
		||||
				break
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -1,18 +1,12 @@
 | 
			
		||||
import React from "react"
 | 
			
		||||
import PropTypes from "prop-types"
 | 
			
		||||
import { File } from "../generated/graphql"
 | 
			
		||||
import genDownloadLink from "../functions/genDownloadLink"
 | 
			
		||||
import style from "./../App.module.scss"
 | 
			
		||||
import { FileOpenerProps } from "../types/FileOpenerProps"
 | 
			
		||||
 | 
			
		||||
interface Props {
 | 
			
		||||
    file: File
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const ImageOpener: React.FC<Props> = (props) => {
 | 
			
		||||
const ImageOpener: React.FC<FileOpenerProps> = (props) => {
 | 
			
		||||
	return (
 | 
			
		||||
		<div className={style.imageOpener}>
 | 
			
		||||
			<img className={`img-responsive img-fit-contain ${style.imageOpenerImage}`} src={genDownloadLink(props.file.id)}/>
 | 
			
		||||
		</div>
 | 
			
		||||
		<img className={`img-responsive img-fit-cover ${style.imageOpenerImage}`} src={genDownloadLink(props.file.id)}/>
 | 
			
		||||
	)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,12 +1,8 @@
 | 
			
		||||
import React from "react"
 | 
			
		||||
import PropTypes from "prop-types"
 | 
			
		||||
import { File } from "../generated/graphql"
 | 
			
		||||
import { FileOpenerProps } from "../types/FileOpenerProps"
 | 
			
		||||
 | 
			
		||||
interface Props {
 | 
			
		||||
    file: File
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const TextOpener: React.FC<Props> = (props) => {
 | 
			
		||||
const TextOpener: React.FC<FileOpenerProps> = (props) => {
 | 
			
		||||
	return (
 | 
			
		||||
		<div>
 | 
			
		||||
			<textarea>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user