diff --git a/src/App.jsx b/src/App.jsx index d79af23..822dde9 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,6 +1,6 @@ import JSZip from "jszip"; import { Create40kRoster } from "./roster40k"; -import { useState } from "react"; +import { useEffect, useState, useRef } from "react"; import { Roster } from "./Roster"; import Demo0 from "./assets/Demo0.png"; import Demo1 from "./assets/Demo1.png"; @@ -8,6 +8,7 @@ import Demo1 from "./assets/Demo1.png"; function App() { const [error, setError] = useState(); const [roster, setRoster] = useState(); + const uploadRef = useRef(); async function handleFileSelect(event) { const files = event?.target?.files; @@ -74,6 +75,20 @@ function App() { } } + useEffect(() => { + // Check if the browser is Safari, and if so, remove the accept attribute + // from the file input element. This is because Safari doesn't support + // extensions on the accept attribute for input type=file + // (https://caniuse.com/input-file-accept). If set, they will not allow any + // file to be selected. + if ( + navigator.userAgent.match(/AppleWebKit.*Safari/) && + !navigator.userAgent.includes("Chrome") + ) { + uploadRef.current?.removeAttribute("accept"); + } + }, []); + return (
@@ -90,6 +105,7 @@ function App() { >