import React, { MouseEventHandler, useState } from 'react' import { Link } from 'react-router-dom'; import { DogT } from '../context/UserContext'; import {getDog, updateQR} from '../services/PhpApi'; import Img from './Img'; import './Qr.css'; import './InputForm.css'; import useSWR from 'swr'; import { NumberInput, Stack, Checkbox, MantineProvider } from '@mantine/core'; import {DndList, DndListProps, TDataItem} from './DndList'; import { notificationError, notificationSuccess } from '../services/Notifications'; export default function Qr() { const { data, error, isLoading, mutate } = useSWR( ['Qr', 'SESS'], getDog); // data ist dogdata, logindata holt sich getDog.php aus $_SESSION const [dogRender, setDogRender] = useState( { id: 0, qr_id: '', email: '', name: '', phone: '', qr_width_cm: 0, qr_height_cm: 0, qr_fontsize: 0, qr_visible_items: 0, qr_item_sequence: 0, qr_code: '', picture: '' }); //save reference for dragItem and dragOverItem const dndListInit: DndListProps = { data: [ {id: '0', name:'Name', ordernum: 1}, {id: '1', name:'Telefon', ordernum: 2}, {id: '2', name:'Email', ordernum: 3} ] }; const dndList = React.useRef(dndListInit); if (error) return (
failed to load
); if (isLoading) return (
loading...
); // local dog let dog: DogT = { id: 0, qr_id: '', email: '', name: '', phone: '', qr_width_cm: 0, qr_height_cm: 0, qr_fontsize: 0, qr_visible_items: 0, qr_item_sequence: 0, qr_code: '', picture: '' }; function setBitField(val: number, checked: boolean, bit: number) : number { if(checked) { val |= bit; } else { val ^= bit; } return val; } function checkBoxChange(e: HTMLInputElement) { let value = dog.qr_visible_items; console.log(value); console.log(e); if(e.id==="name") { value = setBitField(value, (e.checked), 0b100); } if(e.id==="phone") { value = setBitField(value, (e.checked), 0b010); } if(e.id==="email") { value = setBitField(value, (e.checked), 0b001); } console.log(value); dog.qr_visible_items = value; setDogRender(dog); } function getItemOrderNumber(digit: number) { let ordernum = dog.qr_item_sequence; // 123 ordernum = ordernum % (digit*10); // 123 ordernum = Math.trunc(ordernum / digit); return ordernum; } function oneQrBlock() { return(
SCAN ME
{((dog.qr_visible_items & 0b100) > 0) &&
{dog.name}
} {((dog.qr_visible_items & 0b010) > 0) &&
{dog.phone}
} {((dog.qr_visible_items & 0b001) > 0) &&
{dog.email}
}
); } const saveHandler = (event: React.MouseEvent): MouseEventHandler | undefined => { event.preventDefault(); console.log("saveHandler \n"); console.log(event); updateQR( { qr_width_cm: dog.qr_width_cm, qr_height_cm: dog.qr_height_cm, qr_fontsize: dog.qr_fontsize, qr_visible_items: dog.qr_visible_items, qr_item_sequence: dog.qr_item_sequence } ).then((resQR) => { if(resQR.success) { notificationSuccess('Daten gesichert!'); mutate(); } else if(!resQR.success && resQR.message) { notificationError(resQR.message); } }) .catch((err) => console.error(err)); return; } const printHandler = (event: React.MouseEvent): MouseEventHandler | undefined => { event.preventDefault(); console.log("printHandler \n"); console.log(event); window.print(); return; } function getItemOrderNumber_(order: number, digit: number) { let ordernum = order; // 123 ordernum = ordernum % (digit*10); // 123 ordernum = Math.trunc(ordernum / digit); return ordernum; } /** * order the list from order * * @param order * normal order is 123 mean name phone email * 231 mean name get ordernumber 2 * phone get ordernumber 3 * email get ordernumber 1 * new order is email name phone * * * */ function OrderItemList(order: number) { let _itemList: TDataItem[] = []; let oNum = getItemOrderNumber_(order, 100); _itemList[oNum-1] = dndListInit.data[0]; oNum = getItemOrderNumber_(order, 10); _itemList[oNum-1] = dndListInit.data[1]; oNum = getItemOrderNumber_(order, 1); _itemList[oNum-1] = dndListInit.data[2]; dndList.current.data = _itemList; } const onChangeWidth = (val: number) => { dog.qr_width_cm = val/10; setDogRender(dog); } const onChangeHeight = (val: number) => { dog.qr_height_cm = val/10; setDogRender(dog); } const onChangeFontSize = (val: number) => { dog.qr_fontsize = val; setDogRender(dog); } function callBackDragEnd(state: { id: string; name: string; ordernum: number; }[]) { console.log('callBackDragEnd'); console.log(state); // set new itemorder let newItemOrder = 0; let digit = 100; // name 1 // telefon 2 // email 3 // email // name // telefon // email is first 1 -> 3 // name is second 2 -> 1 // telefon third 3 -> 2 // name telefon email // 2 3 1 ordernum state.map((item, index) => { digit = 10**(3-item.ordernum); newItemOrder += (index+1) * digit; }); dog.qr_item_sequence = newItemOrder; setDogRender(dog); } console.log('dogRender'); console.log(dogRender); console.log('data'); console.log(data); if (dogRender.email) { Object.assign(dog, dogRender); } else { Object.assign(dog, data.data); } OrderItemList(dog.qr_item_sequence); console.log(dog); console.log(dndList); return (

Qr-Code Druck

Zurück zum Profil
Anhänger
Sichtbare Elemente
0} // changeEvent={checkBoxChange} onChange={(e) => {checkBoxChange(e.currentTarget)}} /> 0} //changeEvent={checkBoxChange} onChange={(e) => {checkBoxChange(e.currentTarget)}} /> 0} //changeEvent={checkBoxChange} onChange={(e) => {checkBoxChange(e.currentTarget)}} />
Reihenfolge
Ändern durch Drag'n Drop
{oneQrBlock()} {oneQrBlock()} {oneQrBlock()} {oneQrBlock()} {oneQrBlock()} {oneQrBlock()}
); }