images are now saved locally

This commit is contained in:
NilsUeter
2023-10-13 14:50:30 +02:00
parent f6b45bcaac
commit 9532a6edd5
2 changed files with 77 additions and 11 deletions
+30 -11
View File
@@ -4,6 +4,7 @@ import adeptusAstartesIcon from "../assets/adeptusAstartesIcon.png";
import rangedIcon from "../assets/rangedIcon.png"; import rangedIcon from "../assets/rangedIcon.png";
import { Arrow, wavyLine } from "../assets/icons"; import { Arrow, wavyLine } from "../assets/icons";
import { Weapons, hasDifferentProfiles } from "./Weapons"; import { Weapons, hasDifferentProfiles } from "./Weapons";
import { useLocalStorage } from "../helpers/useLocalStorage";
export const Roster = ({ roster, onePerPage }) => { export const Roster = ({ roster, onePerPage }) => {
if (!roster) { if (!roster) {
@@ -64,7 +65,6 @@ const Force = ({ force, onePerPage }) => {
const Unit = ({ unit, index, catalog, onePerPage, forceRules }) => { const Unit = ({ unit, index, catalog, onePerPage, forceRules }) => {
const [hide, setHide] = useState(false); const [hide, setHide] = useState(false);
const uploadRef = useRef(); const uploadRef = useRef();
const [image, setImage] = useState(null);
let { let {
name, name,
meleeWeapons, meleeWeapons,
@@ -77,6 +77,8 @@ const Unit = ({ unit, index, catalog, onePerPage, forceRules }) => {
modelList, modelList,
cost, cost,
} = unit; } = unit;
const [image, setImage] = useLocalStorage("image" + name);
const hasImage = image && image !== "undefined";
const weapons = [...meleeWeapons, ...rangedWeapons]; const weapons = [...meleeWeapons, ...rangedWeapons];
@@ -156,7 +158,7 @@ const Unit = ({ unit, index, catalog, onePerPage, forceRules }) => {
: "", : "",
}} }}
> >
<div <label
className="print-display-none" className="print-display-none"
style={{ style={{
display: "flex", display: "flex",
@@ -164,11 +166,9 @@ const Unit = ({ unit, index, catalog, onePerPage, forceRules }) => {
justifyContent: "flex-end", justifyContent: "flex-end",
}} }}
> >
<label className="print-display-none"> <input type="checkbox" onChange={() => setHide(!hide)} />
<input type="checkbox" onChange={() => setHide(!hide)} /> <span className="print-display-none">Don't print this card.</span>
Don't print this card. </label>
</label>
</div>
<div <div
style={{ style={{
padding: "24px 0", padding: "24px 0",
@@ -276,10 +276,10 @@ const Unit = ({ unit, index, catalog, onePerPage, forceRules }) => {
top: 0, top: 0,
height: "100%", height: "100%",
bottom: 0, bottom: 0,
width: "50%", width: "45%",
}} }}
> >
{image && ( {hasImage && (
<img <img
src={image} src={image}
alt="" alt=""
@@ -291,7 +291,7 @@ const Unit = ({ unit, index, catalog, onePerPage, forceRules }) => {
style={{ style={{
position: "absolute", position: "absolute",
border: "1px solid #999", border: "1px solid #999",
top: 1, top: 2,
right: 1, right: 1,
padding: "1px 4px", padding: "1px 4px",
fontSize: "0.8rem", fontSize: "0.8rem",
@@ -316,8 +316,27 @@ const Unit = ({ unit, index, catalog, onePerPage, forceRules }) => {
display: "none", display: "none",
}} }}
/> />
Upload image {hasImage ? "Change image" : "Upload image "}
</label> </label>
{hasImage && (
<button
className="button print-display-none"
style={{
position: "absolute",
border: "1px solid #999",
top: 2,
right: 84,
padding: "2px 4px",
fontSize: "0.8rem",
backgroundColor: "#f0f0f0",
}}
onClick={() => {
setImage(undefined);
}}
>
Clear image
</button>
)}
</div> </div>
</div> </div>
<div <div
+47
View File
@@ -0,0 +1,47 @@
import { useEffect, useState } from "react";
export function useLocalStorage(key, initValue) {
const [state, setState] = useState(() => {
const value = localStorage.getItem(key);
if (value) {
return value;
}
if (initValue) {
localStorage.setItem(key, initValue);
window.dispatchEvent(new Event("storage"));
}
return initValue;
});
useEffect(() => {
console.log(state);
if (!state || state === "undefined") {
localStorage.removeItem(key);
} else {
localStorage.setItem(key, state);
}
window.dispatchEvent(new Event("storage"));
}, [key, state]);
useEffect(() => {
const listenStorageChange = () => {
setState(() => {
const value = localStorage.getItem(key);
if (value) {
return value;
}
if (initValue) {
localStorage.setItem(key, initValue);
window.dispatchEvent(new Event("storage"));
}
return initValue;
});
};
window.addEventListener("storage", listenStorageChange);
return () => window.removeEventListener("storage", listenStorageChange);
}, []);
return [state, setState];
}