diff options
author | 2021-08-09 21:36:03 +0200 | |
---|---|---|
committer | 2021-08-09 21:37:03 +0200 | |
commit | 464e470441287572cfda8d95484f781236b9db35 (patch) | |
tree | 87177837cb6ee6ee000f0d39fa5ba7ee6bb2943e /helpers/windowActions.js | |
download | my_apps-464e470441287572cfda8d95484f781236b9db35.tar.gz my_apps-464e470441287572cfda8d95484f781236b9db35.tar.bz2 my_apps-464e470441287572cfda8d95484f781236b9db35.zip |
init commit
Diffstat (limited to 'helpers/windowActions.js')
-rw-r--r-- | helpers/windowActions.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/helpers/windowActions.js b/helpers/windowActions.js new file mode 100644 index 0000000..fda0f73 --- /dev/null +++ b/helpers/windowActions.js @@ -0,0 +1,49 @@ +export const toggleMin = (appName, apps, setApps) => setApps([ + ...apps.map(a => a.name === appName ? {...a, min: !a.min} : a ) +]) + +export const toggleMax = (appName, apps, setApps) => setApps([ + ...apps.map(a => a.name === appName ? {...a, max: !a.max} : a ) +]) + +export const close = (appName, apps, setApps) => { setApps(apps.filter(a => a.name !== appName)) } + +export const open = (appName, apps, setApps) => { + apps.some(app => app.name === appName) + ? toggleMin(appName, apps, setApps) + : setApps([...apps, {name: appName, min: false, max: false, pos: []}]) +} + +export const move = (appName, winRef, apps, setApps) => { + winRef.current.onmousedown = (event) => { + if (event.target.classList && event.target.classList.contains('window__title')) { + const shiftX = event.clientX - winRef.current.getBoundingClientRect().left + const shiftY = event.clientY - winRef.current.getBoundingClientRect().top + winRef.current.classList.add('moving') + + function moveAt(pageX, pageY, clientY) { + const x = pageX - shiftX + const y = pageY - shiftY - 32 + setApps([...apps.map(a => a.name === appName + ? {...a, pos: [x + 'px', y < 0 ? 0 : y + 'px']} + : a + )]) + } + + const onMouseMove = (event) => { + moveAt(event.pageX, event.pageY, event.clientY) + } + + document.addEventListener('mousemove', onMouseMove) + + document.onmouseup = () => { + document.removeEventListener('mousemove', onMouseMove) + winRef.current.classList.remove('moving') + document.onmouseup = null + } + } + } + + winRef.current.ondragstart = () => null +} + |