diff --git a/src/components/Checkbox.tsx b/src/components/Checkbox.tsx new file mode 100644 index 0000000..bb5ec27 --- /dev/null +++ b/src/components/Checkbox.tsx @@ -0,0 +1,42 @@ +import { useState } from "react"; +const Checkbox = ( + { + id, + label, + checked, + changeEvent, + ...props + }: + { + id: string, + label: string, + checked: boolean, + changeEvent: (id: string, checked: boolean) => void + }) => +{ + const defaultChecked = checked ? checked : false; + const [isChecked, setIsChecked] = useState(defaultChecked); + + return ( +
+ +
+ ); +}; +export default Checkbox; diff --git a/src/components/Qr.css b/src/components/Qr.css index a5caab7..3f7c7d2 100644 --- a/src/components/Qr.css +++ b/src/components/Qr.css @@ -62,3 +62,17 @@ img { order: 3; } + +.list-container +{ + margin-top:40px; +} + +.list-item +{ + display:flex; + align-items: center; + padding:0px 20px; + margin-top:15px; + cursor:move; +} diff --git a/src/components/Qr.tsx b/src/components/Qr.tsx index 9e8714c..d808fc2 100644 --- a/src/components/Qr.tsx +++ b/src/components/Qr.tsx @@ -1,15 +1,33 @@ import React, { useContext, useState } from 'react' import { Link } from 'react-router-dom'; import { UserCtx, UserCtxT, DogT, Axios, ResponseT, TUser } from '../context/UserContext'; +import Checkbox from './Checkbox'; import Img from './Img'; import './Qr.css'; +type ListItemT = +{ + name: string; + ordernum: number; +} + export default function Qr() { const { user } = useContext(UserCtx) as UserCtxT; const [dog, setDog] = useState({}); // local dog not the dog in UserContext const [fontSize, setFontSize] = useState(100); + const [visibleItem, setVisibleItem] = useState(0b111); // 100 name, 10 phone, 1 email + const [itemOrder, setItemOrder] = useState(123); // name first, phone second, email third + const [itemList, setItemList] = useState([ + {name:'Name', ordernum: 1}, + {name:'Telefon', ordernum: 2}, + {name:'Email', ordernum: 3} + ]); + //save reference for dragItem and dragOverItem + const dragItem = React.useRef(null); + const dragOverItem = React.useRef(null); + function incrementFontSize() { if(fontSize < 200) @@ -17,6 +35,7 @@ export default function Qr() setFontSize(fontSize + 1); } } + function decrementFontSize() { if(fontSize > 1) @@ -25,6 +44,75 @@ export default function Qr() } } + function setBitField(val: number, checked: boolean, bit: number) : number + { + if(checked) + { + val |= bit; + } + else + { + val ^= bit; + } + return val; + } + + function checkBoxChange(id: string, checked: boolean) : void + { + let value = visibleItem; + if(id==="name") + { + value = setBitField(value, checked, 0b100); + } + if(id==="phone") + { + value = setBitField(value, checked, 0b010); + } + if(id==="email") + { + value = setBitField(value, checked, 0b001); + } + setVisibleItem(value); + } + + function getItemOrderNumber(digit: number) + { + let ordernum = itemOrder; // 123 + ordernum = ordernum % (digit*10); // 123 + ordernum = Math.trunc(ordernum / digit); + + return ordernum; + } + //const handle drag sorting + function handleSort() + { + //duplicate items + let _itemList = [...itemList]; + + //remove and save the dragged item content + const draggedItemContent = _itemList.splice(dragItem.current, 1)[0]; + + //switch the position + _itemList.splice(dragOverItem.current, 0, draggedItemContent); + + //reset the position ref + dragItem.current = null; + dragOverItem.current = null; + + //update the actual array + setItemList(_itemList); + + // set new itemorder + let newItemOrder = 0; + let digit = 100; + _itemList.map((item, index) => + { + newItemOrder += item.ordernum * digit; + digit /= 10; + }); + setItemOrder(newItemOrder); + } + if(user && dog.success === undefined) { Axios.post('getDog.php', @@ -46,19 +134,45 @@ export default function Qr() Zurück zum Profil
- -
{fontSize}
- + +
{fontSize}
+
- - - - - {/*
Logged in als:
-
{user?.email}
-
{user?.qr_id}
-
{dog.data.qr_code}
*/} - +
+ 0} + changeEvent={checkBoxChange} + /> + 0} + changeEvent={checkBoxChange} + /> + 0} + changeEvent={checkBoxChange} + /> +
+
+ {itemList.map((item, index) => ( +
(dragItem.current = index)} + onDragEnter={(e) => (dragOverItem.current = index)} + onDragEnd={handleSort} + onDragOver={(e) => e.preventDefault()}> +
{item.name}
+
+ ))} +
+
@@ -66,9 +180,31 @@ export default function Qr()
-
{dog.data.name}
-
{dog.data.phone}
-
{dog.data.email}
+ {((visibleItem & 0b100) > 0) &&
{dog.data.name}
} + {((visibleItem & 0b010) > 0) &&
{dog.data.phone}
} + {((visibleItem & 0b001) > 0) &&
{dog.data.email}
} +
+
+
+
+
SCAN ME
+ +
+
+ {((visibleItem & 0b100) > 0) &&
{dog.data.name}
} + {((visibleItem & 0b010) > 0) &&
{dog.data.phone}
} + {((visibleItem & 0b001) > 0) &&
{dog.data.email}
} +
+
+
+
+
SCAN ME
+ +
+
+ {((visibleItem & 0b100) > 0) &&
{dog.data.name}
} + {((visibleItem & 0b010) > 0) &&
{dog.data.phone}
} + {((visibleItem & 0b001) > 0) &&
{dog.data.email}
}
@@ -79,9 +215,9 @@ export default function Qr()
-
{dog.data.name}
-
{dog.data.phone}
-
{dog.data.email}
+ {((visibleItem & 0b100) > 0) &&
{dog.data.name}
} + {((visibleItem & 0b010) > 0) &&
{dog.data.phone}
} + {((visibleItem & 0b001) > 0) &&
{dog.data.email}
}
@@ -90,9 +226,9 @@ export default function Qr()
-
{dog.data.name}
-
{dog.data.phone}
-
{dog.data.email}
+ {((visibleItem & 0b100) > 0) &&
{dog.data.name}
} + {((visibleItem & 0b010) > 0) &&
{dog.data.phone}
} + {((visibleItem & 0b001) > 0) &&
{dog.data.email}
}
@@ -103,33 +239,9 @@ export default function Qr()
-
{dog.data.name}
-
{dog.data.phone}
-
{dog.data.email}
-
- -
-
-
SCAN ME
- -
-
-
{dog.data.name}
-
{dog.data.phone}
-
{dog.data.email}
-
-
- - -
-
-
SCAN ME
- -
-
-
{dog.data.name}
-
{dog.data.phone}
-
{dog.data.email}
+ {((visibleItem & 0b100) > 0) &&
{dog.data.name}
} + {((visibleItem & 0b010) > 0) &&
{dog.data.phone}
} + {((visibleItem & 0b001) > 0) &&
{dog.data.email}
}