UNPKG

caribbean-reservation-react

Version:

Basically a modular grid which allows you to place tags over it. Created in order to manage reservations for a hotel in the caribbean

164 lines (114 loc) 4.42 kB
import React, { useEffect, useState, useRef } from 'react'; import CaribbeanReservation, { Bar, actionTypes, useReserver, reserverReducer, getPosition, evaluatePosition, createBar, resizeBar } from './CaribbeanReservation' import { bars as testBars } from './testData' import moment from 'moment'; import './App.css'; function App() { const [headRow, setHeadRow] = useState([123, 1, 2, null, null, 123]); const [content, setContent] = useState({ "r0c0": <span style={{ background: "green", width: "20px", height: "20px", display: "block" }}></span>, "r2c1": <span style={{ fontSize: "10px" }}>150</span> }); const [titles, setTitles] = useState(["Golf Cart 1", null, "Golf Cart 2",]); const [resWidth, setResWidth] = useState(600); const { addBar, editBar, doneEditing, deleteBar, bars } = useReserver(rReducer, testBars); const [widthtitle, setWidthtitle] = useState(80) const [height, setHeight] = useState(500) const [dimension, setDimension] = useState(25); const gDate = useRef(new Date()); function changeHead() { var newHead = [...headRow]; newHead[0] = <div>James</div>; setHeadRow(newHead); } /* function evaluatePosition(editingRes, column) { editingRes.length = Math.abs(column - editingRes.column + 1); if (editingRes.column > column) { editingRes.column = column; } } */ function rReducer(state, action) { return reserverReducer(state, action) } function moveBar(newLocation) { let editing = bars.filter((bar) => { return bar.editing; }) editing.forEach((bar) => { console.log("move", newLocation) let n = { ...bar, ...newLocation, editing: false }; console.log("n", n) editBar(n) }) } return ( <div id="main-app" className="App"> <button onClick={() => { setDimension(dimension + 1) }} >+</button> <button onClick={() => { setDimension(dimension - 1) }} >-</button> <CaribbeanReservation style={{ display: "inline-block" }} rowTitles={() => { return titles.map((c, i) => { if (c === null) { return null; } return <button onClick={() => { let ntitles = [...titles]; ntitles.push("asd") setTitles(ntitles) }} style={{ background: "orange" }}>{i + 1}{c}</button> }) }} rowTitleWidth={widthtitle} headRow={(columnCount) => { var z = []; var x = new Date(); for (var i = 0; i < 10; i++) { var y = x.getDate(); z.push(y); x.setDate(y + 1) } return z; return headRow.map((r) => { return <div onClick={() => { setWidthtitle(widthtitle + 10) }}>{r}</div> }) }} mouseLeaveGrid={() => { doneEditing() }} mouseUpCell={(props) => { let tcontent = { ...content } tcontent[`r${props.cell.row}c${props.cell.column}`] = <div style={{ background: "purple" }}>test</div>; setContent(tcontent) doneEditing() }} mouseEnterCell={(props) => { resizeBar(editBar, bars, props) }} mouseDownCell={(props) => { console.log(gDate.current.getUTCDate()); console.log(props) let newbar = createBar(props.dimension, props.cell); addBar(newbar) } } mouseCellDrop={(props) => { moveBar(props.cell) }} width={document.documentElement.clientWidth} height={height} content={content} dimension={dimension} > {({ rowCount, rowTitleWidth, dimension }) => { return bars.map((bar) => { return (rowCount > bar.row) && <Bar key={bar.id} dimension={dimension} onDragStart={() => { editBar({ ...bar, editing: true }) }} onClick={() => { console.log("delete", bar); deleteBar({ id: bar.id }) }} onMouseOver={() => { }} {...bar} {...getPosition(rowTitleWidth, bar.row, bar.column, dimension)} > <span style={{ position: "absolute" }}>{bar.children}</span> </Bar> }) }} </CaribbeanReservation> </div > ); } export default App;