fix(mark): scroll into marks, add scroll margin and forwardRef
Closes #172
This commit is contained in:
parent
3e075754e5
commit
82b7b9f7ce
@ -141,6 +141,8 @@ li {
|
|||||||
color: black;
|
color: black;
|
||||||
letter-spacing: normal;
|
letter-spacing: normal;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
|
|
||||||
|
scroll-margin-top: $header-height + $body-vertical-padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-dev='true'] {
|
[data-dev='true'] {
|
||||||
|
@ -2,6 +2,8 @@ import { CurrentUserMark } from '../../types/mark.ts'
|
|||||||
import styles from '../DrawPDFFields/style.module.scss'
|
import styles from '../DrawPDFFields/style.module.scss'
|
||||||
import { FONT_SIZE, FONT_TYPE, inPx } from '../../utils/pdf.ts'
|
import { FONT_SIZE, FONT_TYPE, inPx } from '../../utils/pdf.ts'
|
||||||
import { useScale } from '../../hooks/useScale.tsx'
|
import { useScale } from '../../hooks/useScale.tsx'
|
||||||
|
import { forwardRef } from 'react'
|
||||||
|
import { npubToHex } from '../../utils/nostr.ts'
|
||||||
|
|
||||||
interface PdfMarkItemProps {
|
interface PdfMarkItemProps {
|
||||||
userMark: CurrentUserMark
|
userMark: CurrentUserMark
|
||||||
@ -14,13 +16,11 @@ interface PdfMarkItemProps {
|
|||||||
/**
|
/**
|
||||||
* Responsible for display an individual Pdf Mark.
|
* Responsible for display an individual Pdf Mark.
|
||||||
*/
|
*/
|
||||||
const PdfMarkItem = ({
|
const PdfMarkItem = forwardRef<HTMLDivElement, PdfMarkItemProps>(
|
||||||
selectedMark,
|
(
|
||||||
handleMarkClick,
|
{ selectedMark, handleMarkClick, selectedMarkValue, userMark, pageWidth },
|
||||||
selectedMarkValue,
|
ref
|
||||||
userMark,
|
) => {
|
||||||
pageWidth
|
|
||||||
}: PdfMarkItemProps) => {
|
|
||||||
const { location } = userMark.mark
|
const { location } = userMark.mark
|
||||||
const handleClick = () => handleMarkClick(userMark.mark.id)
|
const handleClick = () => handleMarkClick(userMark.mark.id)
|
||||||
const isEdited = () => selectedMark?.mark.id === userMark.mark.id
|
const isEdited = () => selectedMark?.mark.id === userMark.mark.id
|
||||||
@ -29,9 +29,16 @@ const PdfMarkItem = ({
|
|||||||
const { from } = useScale()
|
const { from } = useScale()
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
ref={ref}
|
||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
className={`file-mark ${styles.drawingRectangle} ${isEdited() && styles.edited}`}
|
className={`file-mark ${styles.drawingRectangle} ${isEdited() && styles.edited}`}
|
||||||
style={{
|
style={{
|
||||||
|
backgroundColor: selectedMark?.mark.npub
|
||||||
|
? `#${npubToHex(selectedMark?.mark.npub)?.substring(0, 6)}4b`
|
||||||
|
: undefined,
|
||||||
|
borderColor: selectedMark?.mark.npub
|
||||||
|
? `#${npubToHex(selectedMark?.mark.npub)?.substring(0, 6)}`
|
||||||
|
: undefined,
|
||||||
left: inPx(from(pageWidth, location.left)),
|
left: inPx(from(pageWidth, location.left)),
|
||||||
top: inPx(from(pageWidth, location.top)),
|
top: inPx(from(pageWidth, location.top)),
|
||||||
width: inPx(from(pageWidth, location.width)),
|
width: inPx(from(pageWidth, location.width)),
|
||||||
@ -44,5 +51,6 @@ const PdfMarkItem = ({
|
|||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
)
|
||||||
|
|
||||||
export default PdfMarkItem
|
export default PdfMarkItem
|
||||||
|
@ -48,16 +48,15 @@ const PdfPageItem = ({
|
|||||||
alt={`page ${pageIndex + 1} of ${fileName}`}
|
alt={`page ${pageIndex + 1} of ${fileName}`}
|
||||||
/>
|
/>
|
||||||
{currentUserMarks.map((m, i) => (
|
{currentUserMarks.map((m, i) => (
|
||||||
<div key={i} ref={(el) => (markRefs.current[m.id] = el)}>
|
|
||||||
<PdfMarkItem
|
<PdfMarkItem
|
||||||
key={i}
|
key={i}
|
||||||
|
ref={(el) => (markRefs.current[m.id] = el)}
|
||||||
handleMarkClick={handleMarkClick}
|
handleMarkClick={handleMarkClick}
|
||||||
selectedMarkValue={selectedMarkValue}
|
selectedMarkValue={selectedMarkValue}
|
||||||
userMark={m}
|
userMark={m}
|
||||||
selectedMark={selectedMark}
|
selectedMark={selectedMark}
|
||||||
pageWidth={page.width}
|
pageWidth={page.width}
|
||||||
/>
|
/>
|
||||||
</div>
|
|
||||||
))}
|
))}
|
||||||
{otherUserMarks.map((m, i) => {
|
{otherUserMarks.map((m, i) => {
|
||||||
return (
|
return (
|
||||||
|
Loading…
Reference in New Issue
Block a user