diff --git a/src/App.tsx b/src/App.tsx index b2baf5e..dc074fb 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -70,6 +70,7 @@ function App() { }, [dispatch]) useEffect(() => { + console.log('NDK is ' + isConnected) if (isConnected) { load() } diff --git a/src/components/Modal/ModalConfirmConnect/ModalConfirmConnect.tsx b/src/components/Modal/ModalConfirmConnect/ModalConfirmConnect.tsx index b341985..885152a 100644 --- a/src/components/Modal/ModalConfirmConnect/ModalConfirmConnect.tsx +++ b/src/components/Modal/ModalConfirmConnect/ModalConfirmConnect.tsx @@ -36,8 +36,9 @@ export const ModalConfirmConnect = () => { const { name, icon = '' } = triggerApp || {} const appName = name || getShortenNpub(appNpub) - const handleActionTypeChange = (_: any, value: ACTION_TYPE) => { - setSelectedActionType(value) + const handleActionTypeChange = (_: any, value: ACTION_TYPE | null) => { + if (!value) return undefined + return setSelectedActionType(value) } const handleCloseModal = handleClose( @@ -48,6 +49,13 @@ export const ModalConfirmConnect = () => { await swicCall('confirm', pendingReqId, false, false) }, ) + const closeModalAfterRequest = handleClose( + MODAL_PARAMS_KEYS.CONFIRM_CONNECT, + (sp) => { + sp.delete('appNpub') + sp.delete('reqId') + }, + ) async function confirmPending( id: string, @@ -57,10 +65,7 @@ export const ModalConfirmConnect = () => { call(async () => { await swicCall('confirm', id, allow, remember) console.log('confirmed', id, allow, remember) - }) - handleClose(MODAL_PARAMS_KEYS.CONFIRM_CONNECT, async (sp) => { - sp.delete('appNpub') - sp.delete('reqId') + closeModalAfterRequest() }) } @@ -122,9 +127,7 @@ export const ModalConfirmConnect = () => { - confirmPending(pendingReqId, true, false) - } + onClick={() => confirmPending(pendingReqId, true, true)} > Allow {selectedActionType} actions diff --git a/src/components/Modal/ModalConfirmEvent/ModalConfirmEvent.tsx b/src/components/Modal/ModalConfirmEvent/ModalConfirmEvent.tsx index 93e62db..0d2231d 100644 --- a/src/components/Modal/ModalConfirmEvent/ModalConfirmEvent.tsx +++ b/src/components/Modal/ModalConfirmEvent/ModalConfirmEvent.tsx @@ -59,7 +59,6 @@ export const ModalConfirmEvent: FC = ({ const [searchParams] = useSearchParams() const appNpub = searchParams.get('appNpub') || '' - const pendingReqId = searchParams.get('reqId') || '' const { npub = '' } = useParams<{ npub: string }>() const apps = useAppSelector((state) => selectAppsByNpub(state, npub)) @@ -84,8 +83,9 @@ export const ModalConfirmEvent: FC = ({ const { name, icon = '' } = triggerApp || {} const appName = name || getShortenNpub(appNpub) - const handleActionTypeChange = (_: any, value: ACTION_TYPE) => { - setSelectedActionType(value) + const handleActionTypeChange = (_: any, value: ACTION_TYPE | null) => { + if (!value) return undefined + return setSelectedActionType(value) } const selectedPendingRequests = pendingRequests.filter((pr) => pr.checked) @@ -101,7 +101,15 @@ export const ModalConfirmEvent: FC = ({ }, ) - async function confirmPending(id: string) { + const closeModalAfterRequest = handleClose( + MODAL_PARAMS_KEYS.CONFIRM_EVENT, + (sp) => { + sp.delete('appNpub') + sp.delete('reqId') + }, + ) + + async function confirmPending() { selectedPendingRequests.forEach((req) => { call(async () => { if (selectedActionType === ACTION_TYPE.ONCE) { @@ -109,14 +117,10 @@ export const ModalConfirmEvent: FC = ({ } else { await swicCall('confirm', req.id, true, true) } - console.log('confirmed', req.id, id, selectedActionType) + console.log('confirmed', req.id, selectedActionType) }) }) - - handleClose(MODAL_PARAMS_KEYS.CONFIRM_EVENT, (sp) => { - sp.delete('appNpub') - sp.delete('reqId') - }) + closeModalAfterRequest() } const handleChangeCheckbox = (reqId: string) => () => { @@ -204,10 +208,7 @@ export const ModalConfirmEvent: FC = ({ > Cancel - confirmPending(pendingReqId)} - > + Allow {ACTION_LABELS[selectedActionType]} diff --git a/src/components/Modal/ModalSettings/ModalSettings.tsx b/src/components/Modal/ModalSettings/ModalSettings.tsx index 4b69aba..58925e9 100644 --- a/src/components/Modal/ModalSettings/ModalSettings.tsx +++ b/src/components/Modal/ModalSettings/ModalSettings.tsx @@ -86,6 +86,7 @@ export const ModalSettings = () => { onChange={handlePasswordChange} value={enteredPassword} helperText={isPasswordInvalid ? 'Invalid password' : ''} + placeholder='Enter a password' helperTextProps={{ sx: { '&.helper_text': { diff --git a/src/modules/swic.ts b/src/modules/swic.ts index b940b50..6b429bc 100644 --- a/src/modules/swic.ts +++ b/src/modules/swic.ts @@ -60,7 +60,7 @@ export async function swicCall(method: string, ...args: any[]) { method, args: [...args], } - //console.log("sending to SW", msg) + console.log('sending to SW', msg) swr.active.postMessage(msg) }) } diff --git a/src/pages/KeyPage/Key.Page.tsx b/src/pages/KeyPage/Key.Page.tsx index 06a5b27..522fb22 100644 --- a/src/pages/KeyPage/Key.Page.tsx +++ b/src/pages/KeyPage/Key.Page.tsx @@ -5,7 +5,7 @@ import { askNotificationPermission, getShortenNpub } from '../../utils/helpers' import { useParams } from 'react-router-dom' import { fetchProfile } from '../../modules/nostr' import { nip19 } from 'nostr-tools' -import { Badge, Box, Stack } from '@mui/material' +import { Badge, Box, CircularProgress, Stack } from '@mui/material' import { StyledIconButton } from './styled' import { SettingsIcon, ShareIcon } from '@/assets' import { AppLink } from '@/shared/AppLink/AppLink' @@ -56,6 +56,7 @@ const KeyPage = () => { const userNameWithPrefix = userName + '@nsec.app' const [showWarning, setShowWarning] = useState(false) + const [isLoading, setIsLoading] = useState(false) const filteredApps = apps.filter((a) => a.npub === npub) const filteredPendingReqs = pending.filter((p) => p.npub === npub) @@ -64,12 +65,15 @@ const KeyPage = () => { const npubConnectPerms = filteredPerms.filter( (perm) => perm.perm === 'connect', ) - const excludeConnectPeqs = filteredPendingReqs.filter( + const excludeConnectPendings = filteredPendingReqs.filter( (pr) => pr.method !== 'connect', ) + const connectPendings = filteredPendingReqs.filter( + (pr) => pr.method === 'connect', + ) - const prepareEventPendings = excludeConnectPeqs.reduce( - (acc, current) => { + const prepareEventPendings = + excludeConnectPendings.reduce((acc, current) => { const isConnected = npubConnectPerms.some( (cp) => cp.appNpub === current.appNpub, ) @@ -83,9 +87,7 @@ const KeyPage = () => { acc[current.appNpub].pending.push(current) acc[current.appNpub].isConnected = isConnected return acc - }, - {}, - ) + }, {}) const load = useCallback(async () => { try { @@ -131,14 +133,17 @@ const KeyPage = () => { }, [checkBackgroundSigning]) const handleEnableBackground = async () => { - await askNotificationPermission() try { + setIsLoading(true) + await askNotificationPermission() const r = await swicCall('enablePush') if (!r) return nofity(`Failed to enable push subscription`, 'error') nofity('Enabled!', 'success') checkBackgroundSigning() + setIsLoading(false) } catch (e) { nofity(`Failed to enable push subscription`, 'error') + setIsLoading(false) } } @@ -153,10 +158,6 @@ const KeyPage = () => { } }, [npub, pending.length]) - const connectPendings = filteredPendingReqs.filter( - (pr) => pr.method === 'connect', - ) - const handleOpenConfirmConnectModal = useCallback(() => { if ( !filteredPendingReqs.length || @@ -261,9 +262,20 @@ const KeyPage = () => { {showWarning && ( + Please enable push notifications{' '} + {isLoading ? ( + + ) : null} + + } Icon={} - onClick={handleEnableBackground} + onClick={isLoading ? undefined : handleEnableBackground} /> )} {renderUserValueSection( diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 0c067f5..4de4f45 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -10,23 +10,10 @@ export async function call(cb: () => any) { try { return await cb() } catch (e) { - log(`Error: ${e}`) + console.log(`Error: ${e}`) } } -// export const getDefaultUserName = (npub: string) => { -// try { -// const npubToken = npub.includes('#') ? npub.split('#')[0] : npub -// const { type, data: pubkey } = nip19.decode(npubToken) -// if (type !== 'npub') return '' - -// return getShortenNpub(nip19.npubEncode(pubkey)) -// } catch (error) { -// console.error(error) -// return '' -// } -// } - export const getShortenNpub = (npub = '') => { return npub.substring(0, 10) + '...' + npub.slice(-6) }