From e37f90d6db713434912530988a80af3390ed8a92 Mon Sep 17 00:00:00 2001 From: NostrDev Date: Fri, 1 Nov 2024 11:22:31 +0300 Subject: [PATCH] feat(pdf-fields): add logic to hide signers on ESC --- src/components/DrawPDFFields/index.tsx | 145 +++++++++++++++---------- src/types/event.ts | 5 + src/types/index.ts | 1 + 3 files changed, 95 insertions(+), 56 deletions(-) create mode 100644 src/types/event.ts diff --git a/src/components/DrawPDFFields/index.tsx b/src/components/DrawPDFFields/index.tsx index 076c6fb..accce90 100644 --- a/src/components/DrawPDFFields/index.tsx +++ b/src/components/DrawPDFFields/index.tsx @@ -9,7 +9,7 @@ import { } from '@mui/material' import styles from './style.module.scss' import React, { useEffect, useState } from 'react' -import { ProfileMetadata, User, UserRole } from '../../types' +import { ProfileMetadata, User, UserRole, KeyboardCode } from '../../types' import { MouseState, PdfPage, DrawnField, DrawTool } from '../../types/drawing' import { hexToNpub, npubToHex, getProfileUsername } from '../../utils' import { SigitFile } from '../../utils/file' @@ -41,6 +41,10 @@ export const DrawPDFFields = (props: Props) => { const signers = users.filter((u) => u.role === UserRole.signer) const defaultSignerNpub = signers.length ? hexToNpub(signers[0].pubkey) : '' const [lastSigner, setLastSigner] = useState(defaultSignerNpub) + const [hideSignersForDrawnField, setHideSignersForDrawnField] = useState<{ + [key: number]: boolean + } | null>() + /** * Return first pubkey that is present in the signers list * @param pubkeys @@ -361,6 +365,7 @@ export const DrawPDFFields = (props: Props) => { rect } } + /** * Renders the pdf pages and drawing elements */ @@ -492,62 +497,90 @@ export const DrawPDFFields = (props: Props) => { fileIndex, pageIndex, drawnFieldIndex - ) && ( -
- - Counterpart - { + drawnField.counterpart = event.target.value + setLastSigner(event.target.value) + refreshPdfFiles() + }} + labelId="counterparts" + label="Counterparts" + sx={{ + background: 'white' + }} + renderValue={(value) => + renderCounterpartValue(value) + } + onClose={(event: React.SyntheticEvent) => { + // get native event + const { nativeEvent } = event - return ( - - - img': { - width: '30px', - height: '30px' - } - }} - /> - - {displayValue} - - ) - })} - - -
- )} + // check if event is a keyboard event + if (nativeEvent instanceof KeyboardEvent) { + // check if event code is Escape + if ( + nativeEvent.code === KeyboardCode.Escape + ) { + // set hide signers for this DrawnField + if (hideSignersForDrawnField) { + setHideSignersForDrawnField((prev) => ({ + ...prev, + [drawnFieldIndex]: true + })) + } else { + setHideSignersForDrawnField({ + [drawnFieldIndex]: true + }) + } + } + } + }} + > + {signers.map((signer, index) => { + const npub = hexToNpub(signer.pubkey) + const metadata = props.metadata[signer.pubkey] + const displayValue = getProfileUsername( + npub, + metadata + ) + + return ( + + + img': { + width: '30px', + height: '30px' + } + }} + /> + + {displayValue} + + ) + })} + + + + )} ) })} diff --git a/src/types/event.ts b/src/types/event.ts new file mode 100644 index 0000000..72c171c --- /dev/null +++ b/src/types/event.ts @@ -0,0 +1,5 @@ +export enum KeyboardCode { + Escape = 'Escape', + Enter = 'Enter', + NumpadEnter = 'NumpadEnter' +} diff --git a/src/types/index.ts b/src/types/index.ts index 6c9f259..fd242b2 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -4,3 +4,4 @@ export * from './nostr' export * from './profile' export * from './relay' export * from './zip' +export * from './event'