use key props to reload workspace when upload new file
This commit is contained in:
parent
689d61968c
commit
0daa27e11a
@ -18,6 +18,7 @@
|
|||||||
"@types/react": "^17.0.30",
|
"@types/react": "^17.0.30",
|
||||||
"@types/react-dom": "^17.0.9",
|
"@types/react-dom": "^17.0.9",
|
||||||
"cross-env": "7.x",
|
"cross-env": "7.x",
|
||||||
|
"nanoid": "^4.0.0",
|
||||||
"npm-run-all": "4.x",
|
"npm-run-all": "4.x",
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
"react-dom": "^17.0.2",
|
"react-dom": "^17.0.2",
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import React, { useEffect } from 'react'
|
import React, { useCallback, useEffect, useState } from 'react'
|
||||||
import { useKeyPressEvent } from 'react-use'
|
import { useKeyPressEvent } from 'react-use'
|
||||||
import { useRecoilState } from 'recoil'
|
import { useRecoilState } from 'recoil'
|
||||||
|
import { nanoid } from 'nanoid'
|
||||||
import useInputImage from './hooks/useInputImage'
|
import useInputImage from './hooks/useInputImage'
|
||||||
import LandingPage from './components/LandingPage/LandingPage'
|
import LandingPage from './components/LandingPage/LandingPage'
|
||||||
import { themeState } from './components/Header/ThemeChanger'
|
import { themeState } from './components/Header/ThemeChanger'
|
||||||
@ -33,10 +34,18 @@ function App() {
|
|||||||
document.body.setAttribute('data-theme', theme)
|
document.body.setAttribute('data-theme', theme)
|
||||||
}, [theme])
|
}, [theme])
|
||||||
|
|
||||||
|
const getWorkspaceKey = useCallback(() => {
|
||||||
|
return nanoid()
|
||||||
|
}, [file])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="lama-cleaner">
|
<div className="lama-cleaner">
|
||||||
<Header />
|
<Header />
|
||||||
{file ? <Workspace file={file} /> : <LandingPage />}
|
{file ? (
|
||||||
|
<Workspace file={file} key={getWorkspaceKey()} />
|
||||||
|
) : (
|
||||||
|
<LandingPage />
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -295,7 +295,7 @@ export default function Editor(props: EditorProps) {
|
|||||||
|
|
||||||
// Zoom reset
|
// Zoom reset
|
||||||
const resetZoom = useCallback(() => {
|
const resetZoom = useCallback(() => {
|
||||||
if (!minScale) {
|
if (!minScale || !original || !windowSize) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const viewport = viewportRef.current
|
const viewport = viewportRef.current
|
||||||
@ -304,12 +304,19 @@ export default function Editor(props: EditorProps) {
|
|||||||
}
|
}
|
||||||
const offsetX = (windowSize.width - original.width * minScale) / 2
|
const offsetX = (windowSize.width - original.width * minScale) / 2
|
||||||
const offsetY = (windowSize.height - original.height * minScale) / 2
|
const offsetY = (windowSize.height - original.height * minScale) / 2
|
||||||
viewport.setTransform(offsetX, offsetY, minScale, 0, 'easeOutQuad')
|
viewport.setTransform(offsetX, offsetY, minScale, 200, 'easeOutQuad')
|
||||||
viewport.state.scale = minScale
|
viewport.state.scale = minScale
|
||||||
|
|
||||||
setScale(minScale)
|
setScale(minScale)
|
||||||
setPanned(false)
|
setPanned(false)
|
||||||
}, [viewportRef, windowSize, original.width, windowSize.height, minScale])
|
}, [
|
||||||
|
viewportRef,
|
||||||
|
windowSize,
|
||||||
|
original,
|
||||||
|
original.width,
|
||||||
|
windowSize.height,
|
||||||
|
minScale,
|
||||||
|
])
|
||||||
|
|
||||||
const resetRedoState = () => {
|
const resetRedoState = () => {
|
||||||
setRedoCurLines([])
|
setRedoCurLines([])
|
||||||
@ -317,18 +324,6 @@ export default function Editor(props: EditorProps) {
|
|||||||
setRedoRenders([])
|
setRedoRenders([])
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
setLineGroups([])
|
|
||||||
setCurLineGroup([])
|
|
||||||
setRenders([])
|
|
||||||
|
|
||||||
resetRedoState()
|
|
||||||
|
|
||||||
resetZoom()
|
|
||||||
const imageSizeLimit = Math.max(original.width, original.height)
|
|
||||||
setSizeLimit(imageSizeLimit)
|
|
||||||
}, [resetZoom, file, original])
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
window.addEventListener('resize', () => {
|
window.addEventListener('resize', () => {
|
||||||
resetZoom()
|
resetZoom()
|
||||||
|
@ -14,10 +14,6 @@ export default function SizeSelector(props: SizeSelectorProps) {
|
|||||||
const [activeSize, setActiveSize] = useState<string>('Original')
|
const [activeSize, setActiveSize] = useState<string>('Original')
|
||||||
const longSide: number = Math.max(originalWidth, originalHeight)
|
const longSide: number = Math.max(originalWidth, originalHeight)
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
setActiveSize('Original')
|
|
||||||
}, [originalHeight, originalWidth])
|
|
||||||
|
|
||||||
const getSizeShowName = useCallback(
|
const getSizeShowName = useCallback(
|
||||||
(size: string) => {
|
(size: string) => {
|
||||||
if (size === 'Original') {
|
if (size === 'Original') {
|
||||||
|
@ -8174,6 +8174,11 @@ nanoid@^3.1.28:
|
|||||||
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz"
|
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz"
|
||||||
integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==
|
integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==
|
||||||
|
|
||||||
|
nanoid@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-4.0.0.tgz#6e144dee117609232c3f415c34b0e550e64999a5"
|
||||||
|
integrity sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==
|
||||||
|
|
||||||
nanomatch@^1.2.9:
|
nanomatch@^1.2.9:
|
||||||
version "1.2.13"
|
version "1.2.13"
|
||||||
resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz"
|
resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz"
|
||||||
|
Loading…
Reference in New Issue
Block a user