From 0008e9814681de43068235f61c7bd88e7a1f3510 Mon Sep 17 00:00:00 2001 From: Stixx Date: Mon, 4 Nov 2024 13:35:06 +0100 Subject: [PATCH 1/2] feat: Add Sigit ID as a Path Param to /verify --- package-lock.json | 4 +-- src/App.tsx | 4 ++- src/components/DisplaySigit/index.tsx | 3 +- src/controllers/AuthController.ts | 41 +++++++++++++++++---------- src/pages/verify/index.tsx | 26 ++++++++++++++--- src/routes/index.tsx | 2 +- 6 files changed, 55 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index a9fb01a..c1a460a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sigit", - "version": "0.0.0", + "version": "0.0.0-beta", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sigit", - "version": "0.0.0", + "version": "0.0.0-beta", "hasInstallScript": true, "license": "AGPL-3.0-or-later ", "dependencies": { diff --git a/src/App.tsx b/src/App.tsx index 5dbb867..f25b23f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,5 +1,5 @@ import { useEffect } from 'react' -import { useAppSelector } from './hooks/store' +import { useAppSelector } from './hooks' import { Navigate, Route, Routes } from 'react-router-dom' import { AuthController } from './controllers' import { MainLayout } from './layouts/Main' @@ -29,9 +29,11 @@ const App = () => { const handleRootRedirect = () => { if (authState.loggedIn) return appPrivateRoutes.homePage + const callbackPathEncoded = btoa( window.location.href.split(`${window.location.origin}/#`)[1] ) + return `${appPublicRoutes.login}?callbackPath=${callbackPathEncoded}` } diff --git a/src/components/DisplaySigit/index.tsx b/src/components/DisplaySigit/index.tsx index ab36851..f8e890d 100644 --- a/src/components/DisplaySigit/index.tsx +++ b/src/components/DisplaySigit/index.tsx @@ -42,8 +42,7 @@ export const DisplaySigit = ({
{signedStatus === SigitStatus.Complete && ( )} diff --git a/src/controllers/AuthController.ts b/src/controllers/AuthController.ts index 6536e19..9cdf85a 100644 --- a/src/controllers/AuthController.ts +++ b/src/controllers/AuthController.ts @@ -14,7 +14,6 @@ import { compareObjects, getAuthToken, getRelayMap, - getVisitedLink, saveAuthToken, unixNow } from '../utils' @@ -91,21 +90,33 @@ export class AuthController { store.dispatch(setRelayMapAction(relayMap.map)) } - const currentLocation = window.location.hash.replace('#', '') + /** + * This block was added before we started using the `nostr-login` package + * At this point it seems it's not needed anymore and it's even blocking the flow (reloading on /verify) + * TODO to remove this if app works fine + */ + // const currentLocation = window.location.hash.replace('#', '') - if (!Object.values(appPrivateRoutes).includes(currentLocation)) { - // User did change the location to one of the private routes - const visitedLink = getVisitedLink() - - if (visitedLink) { - const { pathname, search } = visitedLink - - return Promise.resolve(`${pathname}${search}`) - } else { - // Navigate user in - return Promise.resolve(appPrivateRoutes.homePage) - } - } + // if (!Object.values(appPrivateRoutes).includes(currentLocation)) { + // // Since verify is both public and private route, we don't use the `visitedLink` + // // value for it. Otherwise, when linking to /verify/:id we get redirected + // // to the root `/` + // if (currentLocation.includes(appPublicRoutes.verify)) { + // return Promise.resolve(currentLocation) + // } + // + // // User did change the location to one of the private routes + // const visitedLink = getVisitedLink() + // + // if (visitedLink) { + // const { pathname, search } = visitedLink + // + // return Promise.resolve(`${pathname}${search}`) + // } else { + // // Navigate user in + // return Promise.resolve(appPrivateRoutes.homePage) + // } + // } } checkSession() { diff --git a/src/pages/verify/index.tsx b/src/pages/verify/index.tsx index 000341e..5e8eafa 100644 --- a/src/pages/verify/index.tsx +++ b/src/pages/verify/index.tsx @@ -17,16 +17,16 @@ import { getCurrentUserFiles } from '../../utils' import styles from './style.module.scss' -import { useLocation } from 'react-router-dom' +import { useLocation, useParams } from 'react-router-dom' import axios from 'axios' import { FONT_SIZE, FONT_TYPE, inPx } from '../../utils/pdf.ts' -import { useAppSelector } from '../../hooks/store' +import { useAppSelector } from '../../hooks' import { getLastSignersSig } from '../../utils/sign.ts' import { saveAs } from 'file-saver' import { Container } from '../../components/Container' import { useSigitMeta } from '../../hooks/useSigitMeta.tsx' import { StickySideColumns } from '../../layouts/StickySideColumns.tsx' -import { UsersDetails } from '../../components/UsersDetails.tsx/index.tsx' +import { UsersDetails } from '../../components/UsersDetails.tsx' import FileList from '../../components/FileList' import { CurrentUserFile } from '../../types/file.ts' import { Mark } from '../../types/mark.ts' @@ -149,6 +149,9 @@ const SlimPdfView = ({ export const VerifyPage = () => { const location = useLocation() + const params = useParams() + + const usersAppData = useAppSelector((state) => state.userAppData) const usersPubkey = useAppSelector((state) => state.auth.usersPubkey) const nostrController = NostrController.getInstance() @@ -160,8 +163,22 @@ export const VerifyPage = () => { * uploadedZip will be received from home page when a user uploads a sigit zip wrapper that contains meta.json * meta will be received in navigation from create & home page in online mode */ - const { uploadedZip, meta: metaInNavState } = location.state || {} + let metaInNavState = location?.state?.meta || undefined + const { uploadedZip } = location.state || {} const [selectedFile, setSelectedFile] = useState(null) + + if (usersAppData) { + const sigitCreateId = params.id + + if (sigitCreateId) { + const sigit = usersAppData.sigits[sigitCreateId] + + if (sigit) { + metaInNavState = sigit + } + } + } + useEffect(() => { if (uploadedZip) { setSelectedFile(uploadedZip) @@ -169,6 +186,7 @@ export const VerifyPage = () => { }, [uploadedZip]) const [meta, setMeta] = useState(metaInNavState) + const { submittedBy, zipUrl, diff --git a/src/routes/index.tsx b/src/routes/index.tsx index 97d66c3..be7e43b 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -90,7 +90,7 @@ export const publicRoutes: PublicRouteProps[] = [ element: }, { - path: appPublicRoutes.verify, + path: `${appPublicRoutes.verify}/:id?`, element: } ] -- 2.34.1 From c89e96b824047db9513627f60f76dcdaf78d2cc7 Mon Sep 17 00:00:00 2001 From: Stixx Date: Mon, 4 Nov 2024 22:04:27 +0100 Subject: [PATCH 2/2] chore: added comment --- src/pages/verify/index.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pages/verify/index.tsx b/src/pages/verify/index.tsx index 05e9c8f..2d341c1 100644 --- a/src/pages/verify/index.tsx +++ b/src/pages/verify/index.tsx @@ -183,6 +183,11 @@ export const VerifyPage = () => { const { uploadedZip } = location.state || {} const [selectedFile, setSelectedFile] = useState(null) + /** + * If `userAppData` is present it means user is logged in and we can extract list of `sigits` from the store. + * If ID is present in the URL we search in the `sigits` list + * Otherwise sigit is set from the `location.state.meta` + */ if (usersAppData) { const sigitCreateId = params.id -- 2.34.1