Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 24 additions & 13 deletions webui/src/ImportExport/Import/Page.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useCallback, useContext, useMemo, useRef } from 'react'
import { useCallback, useContext, useEffect, useMemo, useRef } from 'react'
import { CButton, CCol, CRow, CFormSelect, CCallout } from '@coreui/react'
import { MyErrorBoundary } from '~/Resources/Error'
import { ButtonGridHeader, PageNumberPicker, type PageNumberOption } from '~/Buttons/ButtonGridHeader.js'
Expand Down Expand Up @@ -27,7 +27,7 @@ interface ImportPageWizardProps {
snapshot: ClientImportObject
connectionRemap: Record<string, string | undefined>
setConnectionRemap: React.Dispatch<React.SetStateAction<Record<string, string | undefined>>>
doImport: (importPageNumber: number, pageNumber: number, connectionRemap: Record<string, string | undefined>) => void
doImport: (sourcePageNumber: number, pageNumber: number, connectionRemap: Record<string, string | undefined>) => void
}

export const ImportPageWizard = observer(function ImportPageWizard({
Expand Down Expand Up @@ -66,13 +66,24 @@ export const ImportPageWizard = observer(function ImportPageWizard({
}
}, [snapshot.pages, snapshot.page, isSinglePage])

const { pageNumber, setPageNumber, changePage } = usePagePicker(pages.data.length, 1)
const {
pageNumber: importPageNumber,
setPageNumber: setImportPageNumber,
changePage: changeImportPage,
pageNumber: sourcePageNumber,
setPageNumber: setSourcePageNumber,
changePage: changeSourcePage,
} = usePagePicker(pageCount, 1)

const pageOrNew = (page: number | undefined): number =>
typeof page === 'number' && Number.isInteger(page) && page >= 1 && page <= pages.data.length ? page : -1

const validOldPage = pageOrNew(snapshot.oldPageNumber)
const defaultDestinationPage = validOldPage !== -1 ? validOldPage : pageOrNew(sourcePageNumber)
const { pageNumber, setPageNumber, changePage } = usePagePicker(pages.data.length, defaultDestinationPage)

useEffect(() => {
if (isSinglePage) return
setPageNumber(pageOrNew(sourcePageNumber))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's looking much better now, @tonypiper. One comment here: useEffect here is in inefficient since it adds a render cycle and it somewhat hides the intent, which is that it's specifically in response to a user action. Better to wrap setSourcePageNumber and changeSourcePage in useCallbacks for use by lines 136-137, which set both source and dest. (yeah, sorry my original suggestion wasn't quite right) Also, again, you don't need to protect for isSinglePage.

Another thing, which is mainly for clarity: instead of usePagePicker(pageCount, 1) online 73, determine validOldPage first and set the default page to Math.abs(validOldPage) or if that horrifies you validOldPage === -1 ? 1 : validOldPage, then you can get rid of defaultDestinationPage and just use sourcePageNumber in the second usePagePicker, which makes both of the calls clearer (to me).

Anyway, think about that second suggestion and question it, if you disagree!

}, [sourcePageNumber, pages.data.length, setPageNumber, isSinglePage])
Comment thread
tonypiper marked this conversation as resolved.

const setConnectionRemap2 = useCallback(
(fromId: string, toId: string) => {
setConnectionRemap((oldRemap) => ({
Expand All @@ -84,8 +95,8 @@ export const ImportPageWizard = observer(function ImportPageWizard({
)

const doImport2 = useCallback(() => {
doImport(importPageNumber, pageNumber, connectionRemap)
}, [doImport, importPageNumber, pageNumber, connectionRemap])
doImport(sourcePageNumber, pageNumber, connectionRemap)
}, [doImport, sourcePageNumber, pageNumber, connectionRemap])

const destinationGridSize = userConfig.properties?.gridSize

Expand All @@ -101,7 +112,7 @@ export const ImportPageWizard = observer(function ImportPageWizard({

const isRunning = false

const sourcePageInfo = isSinglePage ? snapshot.page : snapshot.pages?.[importPageNumber]
const sourcePageInfo = isSinglePage ? snapshot.page : snapshot.pages?.[sourcePageNumber]
const sourceGridSize = sourcePageInfo?.gridSize ?? destinationGridSize

const [hasBeenRendered, hasBeenRenderedRef] = useHasBeenRendered()
Expand All @@ -121,9 +132,9 @@ export const ImportPageWizard = observer(function ImportPageWizard({
<>
<CCol sm={12}>
<PageNumberPicker
pageNumber={isSinglePage ? (snapshot.oldPageNumber ?? 1) : importPageNumber}
changePage={isSinglePage ? undefined : changeImportPage}
setPage={isSinglePage ? undefined : setImportPageNumber}
pageNumber={isSinglePage ? (snapshot.oldPageNumber ?? 1) : sourcePageNumber}
changePage={isSinglePage ? undefined : changeSourcePage}
setPage={isSinglePage ? undefined : setSourcePageNumber}
pageOptions={snapshotPageOptions}
>
<CButton color="light" className="btn-right" title="Home Position" onClick={resetSourcePosition}>
Expand All @@ -135,7 +146,7 @@ export const ImportPageWizard = observer(function ImportPageWizard({
{hasBeenRendered && sourceGridSize && (
<ButtonInfiniteGrid
ref={sourceGridRef}
pageNumber={isSinglePage ? (snapshot.oldPageNumber ?? 1) : importPageNumber}
pageNumber={isSinglePage ? (snapshot.oldPageNumber ?? 1) : sourcePageNumber}
gridSize={sourceGridSize}
ButtonIconFactory={ButtonImportPreview}
drawScale={gridZoomValue / 100}
Expand Down