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}
}