Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jennifer/scan updates #1661

Merged
merged 17 commits into from
Nov 29, 2023
Merged

Jennifer/scan updates #1661

merged 17 commits into from
Nov 29, 2023

Conversation

Jennievon
Copy link
Contributor

@Jennievon Jennievon commented Nov 23, 2023

Why this change is needed

Please provide a description and a link to the underlying ticket

  • A dynamic page for docs (e.g., Terms of Service, Privacy Policy)
  • Add custom error pages
  • Add SEO tags to the base page
  • Update pagination feature for data table

What changes were made as part of this PR

Please provide a high level list of the changes made

PR checks pre-merging

Please indicate below by ticking the checkbox that you have read and performed the required
PR checks

  • PR checks reviewed and performed

- add custom error pages
- add SEO tags to main page
Copy link

coderabbitai bot commented Nov 23, 2023

Walkthrough

The updates across the ObscuroScan v3 frontend involve enhancing error handling with custom components for 404 and 500 errors, improving SEO with a new HeadSeo component, and integrating Google Analytics. The data fetching components now include refetching capabilities and no polling options. Pagination in data tables has been made more flexible, and the site metadata has been enriched with additional company and social media information. These changes aim to improve user experience, site maintainability, and performance.

Changes

File(s) Change Summary
404.tsx, 500.tsx Introduced custom error components for 404 and 500 pages, allowing for tailored error messages and UI.
_app.tsx, _error.tsx Added SEO and Google Analytics integration, and a new custom error handling component.
docs/[id].tsx Created a new component for fetching and displaying document content based on an ID.
head-seo.tsx Added a new HeadSeo component for managing SEO-related metadata.
layouts/footer.tsx Updated footer links to point to the documentation pages.
modules/dashboard/index.tsx Updated dashboard data display with currency formatting and fallback text.
ui/spinner.tsx Introduced a new Spinner component for loading indicators.
lib/constants.ts, lib/siteMetadata.ts Added new constants and updated site metadata with additional company and social media information.
types/interfaces/index.ts Introduced a new SeoProps interface for SEO component props.
styles/globals.css Added styles for documentation components.
batches/index.tsx, blocks/index.tsx, transactions/index.tsx Enhanced data components with refetching and no polling capabilities, and updated UI to reflect new data structures.
modules/batches/batch-details.tsx Renamed BatchDetails to BatchDetailsComponent and updated parameter handling.
modules/common/data-table/... Updated data table components with new pagination options, a refresh button, and query parameter updates.
services/useBatchesService.ts, services/useBlocksService.ts, services/useTransactionsService.ts Modified service hooks to include no polling state, dynamic query options, and refetching functions.

Tips

Chat with CodeRabbit Bot (@coderabbitai)

  • If you reply to a review comment from CodeRabbit, the bot will automatically respond.
  • To engage with CodeRabbit bot directly around the specific lines of code in the PR, mention @coderabbitai in your review comment
  • Note: Review comments are made on code diffs or files, not on the PR overview.
  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai help to get help.

Note: For conversation with the bot, please use the review comments on code diffs or files.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • The JSON schema for the configuration file is available here.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/coderabbit-overrides.v2.json

Base automatically changed from jennifer/new-scan-config-setup to main November 23, 2023 17:08
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Review Status

Actionable comments generated: 6

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 8712e26 and ac8ea14.
Files ignored due to filter (1)
  • tools/obscuroscan_v3/frontend/public/docs/terms.json
Files selected for processing (13)
  • tools/obscuroscan_v3/frontend/pages/404.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/pages/500.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/pages/_app.tsx (2 hunks)
  • tools/obscuroscan_v3/frontend/pages/_error.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/pages/docs/[id].tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/src/components/head-seo.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/src/components/layouts/footer.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/src/components/modules/dashboard/index.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/src/components/ui/spinner.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/src/lib/constants.ts (1 hunks)
  • tools/obscuroscan_v3/frontend/src/lib/siteMetadata.ts (1 hunks)
  • tools/obscuroscan_v3/frontend/src/types/interfaces/index.ts (1 hunks)
  • tools/obscuroscan_v3/frontend/styles/globals.css (1 hunks)
Files skipped from review due to trivial changes (3)
  • tools/obscuroscan_v3/frontend/src/components/modules/dashboard/index.tsx
  • tools/obscuroscan_v3/frontend/src/lib/constants.ts
  • tools/obscuroscan_v3/frontend/styles/globals.css
Additional comments: 13
tools/obscuroscan_v3/frontend/pages/404.tsx (1)
  • 4-39:
    The implementation of Custom404Error correctly uses the Error component and provides sensible defaults and customization options for a 404 error page. The use of template literals and conditional rendering is appropriate for dynamic content.
tools/obscuroscan_v3/frontend/src/components/ui/spinner.tsx (1)
  • 1-11:
    The implementation of the Spinner component looks correct and follows best practices for functional components in React. It is properly styled using Tailwind CSS classes.
tools/obscuroscan_v3/frontend/src/lib/siteMetadata.ts (2)
  • 1-15: - The siteLogo and siteLogoSquare properties in the siteMetadata object are assigned empty template literals, which could lead to issues if the values are expected to be URLs or paths to image assets. Verify that these properties are intentionally left empty and if not, provide the correct values.

  • 1-15: - The socialLinks import is used to populate the twitter and github properties in the siteMetadata object. Ensure that the constants file exists and contains the socialLinks export with the appropriate structure and values.

tools/obscuroscan_v3/frontend/pages/500.tsx (1)
  • 1-32:
    The implementation of the Custom500Error component aligns with the change summary, correctly handling the rendering of a 500 error page with customizable options.
tools/obscuroscan_v3/frontend/src/components/layouts/footer.tsx (2)
  • 34-36: The href attribute for the "Privacy" link has been correctly updated to point to the new dynamic documentation route. Ensure that the dynamic route /docs/privacy is properly configured in the routing system to serve the Privacy Policy content.

  • 40-42: The href attribute for the "Terms" link has been correctly updated to point to the new dynamic documentation route. Ensure that the dynamic route /docs/terms is properly configured in the routing system to serve the Terms of Service content.

tools/obscuroscan_v3/frontend/src/types/interfaces/index.ts (2)
  • 3-11:
    The SeoProps interface is well-defined and aligns with the pull request's goal to improve SEO. Ensure that all properties are being used where the HeadSeo component is implemented.

  • 13-15:
    No changes have been made to the ErrorType interface in this hunk, which is consistent with the summary stating there are no alterations to existing interfaces.

tools/obscuroscan_v3/frontend/pages/_app.tsx (2)
  • 12-18:
    The new imports are correctly placed and relevant to the functionality being added to the _app.tsx file.

  • 69-80:
    The HeadSeo component is correctly implemented with appropriate properties from siteMetadata.

tools/obscuroscan_v3/frontend/pages/docs/[id].tsx (2)
  • 80-82:
    Ensure that the content passed to dangerouslySetInnerHTML is sanitized to prevent XSS attacks.

  • 56-60:
    Verify that the id used in the useEffect hook is validated to ensure it's a proper document identifier before fetching the document.

<title>{title}</title>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name={siteMetadata.metaTitle} content={siteMetadata.companyName} />
Copy link

Choose a reason for hiding this comment

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

The meta tag for the site title is incorrect.

- <meta name={siteMetadata.metaTitle} content={siteMetadata.companyName} />
+ <meta name="title" content={title} />

Commitable suggestion

IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
<meta name={siteMetadata.metaTitle} content={siteMetadata.companyName} />
<meta name="title" content={title} />

<>
<Script
strategy="lazyOnload"
src={`https://www.googletagmanager.com/gtag/js?id='${GOOGLE_ANALYTICS_ID}'`}
Copy link

Choose a reason for hiding this comment

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

The script URL contains extra quotes that may prevent the correct loading of the Google Analytics script.

- src={`https://www.googletagmanager.com/gtag/js?id='${GOOGLE_ANALYTICS_ID}'`}
+ src={`https://www.googletagmanager.com/gtag/js?id=${GOOGLE_ANALYTICS_ID}`}

Commitable suggestion

IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
src={`https://www.googletagmanager.com/gtag/js?id='${GOOGLE_ANALYTICS_ID}'`}
src={`https://www.googletagmanager.com/gtag/js?id=${GOOGLE_ANALYTICS_ID}`}

const { query } = useRouter();
const { id } = query;

const [document, setDocument] = React.useState<Document>({} as Document);
Copy link

Choose a reason for hiding this comment

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

Consider initializing the document state with null or a more appropriate default value that reflects the absence of data until it's fetched.

- const [document, setDocument] = React.useState<Document>({} as Document);
+ const [document, setDocument] = React.useState<Document | null>(null);

Commitable suggestion

IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
const [document, setDocument] = React.useState<Document>({} as Document);
const [document, setDocument] = React.useState<Document | null>(null);

Comment on lines +33 to +41
content: data.content.map((item: any) => {
return {
heading: item.heading,
content: item.content.map((paragraph: any) => {
return paragraph.replace(
/siteMetadata.email/g,
siteMetadata.email
);
}),
Copy link

Choose a reason for hiding this comment

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

The placeholder replacement logic is incorrect. Use a regular expression to replace 'siteMetadata.email' with the actual email from siteMetadata.

- return paragraph.replace(/siteMetadata.email/g, siteMetadata.email);
+ return paragraph.replace(/\[email\]/g, siteMetadata.email);

Commitable suggestion

IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
content: data.content.map((item: any) => {
return {
heading: item.heading,
content: item.content.map((paragraph: any) => {
return paragraph.replace(
/siteMetadata.email/g,
siteMetadata.email
);
}),
content: data.content.map((item: any) => {
return {
heading: item.heading,
content: item.content.map((paragraph: any) => {
return paragraph.replace(
/\[email\]/g,
siteMetadata.email
);
}),

Comment on lines +7 to +21
function ErrorMessage({
statusText,
message,
showMessage,
showStatusText,
}: any) {
return (
<div className="error-message">
{showStatusText && <h3>{statusText}</h3>}
{message && showMessage && (
<p className="text-muted-foreground">{message}</p>
)}
</div>
);
}
Copy link

Choose a reason for hiding this comment

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

The ErrorMessage component should have a defined prop type for better type safety and to prevent potential bugs.

- function ErrorMessage({
-   statusText,
-   message,
-   showMessage,
-   showStatusText,
- }: any) {
+ interface ErrorMessageProps {
+   statusText: string;
+   message: string;
+   showMessage: boolean;
+   showStatusText: boolean;
+ }
+ function ErrorMessage({
+   statusText,
+   message,
+   showMessage,
+   showStatusText,
+ }: ErrorMessageProps) {

Commitable suggestion

IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
function ErrorMessage({
statusText,
message,
showMessage,
showStatusText,
}: any) {
return (
<div className="error-message">
{showStatusText && <h3>{statusText}</h3>}
{message && showMessage && (
<p className="text-muted-foreground">{message}</p>
)}
</div>
);
}
interface ErrorMessageProps {
statusText: string;
message: string;
showMessage: boolean;
showStatusText: boolean;
}
function ErrorMessage({
statusText,
message,
showMessage,
showStatusText,
}: ErrorMessageProps) {
return (
<div className="error-message">
{showStatusText && <h3>{statusText}</h3>}
{message && showMessage && (
<p className="text-muted-foreground">{message}</p>
)}
</div>
);
}

Comment on lines +75 to +85
CustomError.getInitialProps = async ({ res, err }: any) => {
const statusCode = res ? res.statusCode : err?.statusCode || 404;
const errorInitialProps = await NextErrorComponent.getInitialProps({
res,
err,
} as any);
errorInitialProps.statusCode = statusCode;

return statusCode < 500
? errorInitialProps
: { ...errorInitialProps, statusCode };
Copy link

Choose a reason for hiding this comment

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

The getInitialProps method should use proper types for its parameters instead of any to ensure type safety.

- CustomError.getInitialProps = async ({ res, err }: any) => {
+ CustomError.getInitialProps = async ({ res, err }: { res?: NextApiResponse, err?: Error }) => {

Commitable suggestion

IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
CustomError.getInitialProps = async ({ res, err }: any) => {
const statusCode = res ? res.statusCode : err?.statusCode || 404;
const errorInitialProps = await NextErrorComponent.getInitialProps({
res,
err,
} as any);
errorInitialProps.statusCode = statusCode;
return statusCode < 500
? errorInitialProps
: { ...errorInitialProps, statusCode };
CustomError.getInitialProps = async ({ res, err }: { res?: NextApiResponse, err?: Error }) => {
const statusCode = res ? res.statusCode : err?.statusCode || 404;
const errorInitialProps = await NextErrorComponent.getInitialProps({
res,
err,
} as any);
errorInitialProps.statusCode = statusCode;
return statusCode < 500
? errorInitialProps
: { ...errorInitialProps, statusCode };

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Review Status

Actionable comments generated: 16

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between ac8ea14 and a4ffe1d.
Files selected for processing (13)
  • tools/obscuroscan_v3/frontend/pages/batches/index.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/pages/blocks/index.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/pages/docs/[id].tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/pages/transactions/index.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/src/components/modules/batches/batch-details.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-pagination.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-toolbar.tsx (4 hunks)
  • tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table.tsx (5 hunks)
  • tools/obscuroscan_v3/frontend/src/lib/constants.ts (2 hunks)
  • tools/obscuroscan_v3/frontend/src/lib/siteMetadata.ts (1 hunks)
  • tools/obscuroscan_v3/frontend/src/services/useBatchesService.ts (1 hunks)
  • tools/obscuroscan_v3/frontend/src/services/useBlocksService.ts (1 hunks)
  • tools/obscuroscan_v3/frontend/src/services/useTransactionsService.ts (3 hunks)
Files skipped from review due to trivial changes (1)
  • tools/obscuroscan_v3/frontend/src/components/modules/batches/batch-details.tsx
Additional comments: 14
tools/obscuroscan_v3/frontend/pages/batches/index.tsx (2)
  • 20-23: The useEffect hook correctly sets NoPolling to true, but ensure that this behavior is intended and that there are no side effects or scenarios where polling should continue.

  • 36-41: The DataTable component is correctly using the BatchesData and Total variables, and the refetch and total props are added. Ensure that the DataTable component is designed to handle these props correctly.

tools/obscuroscan_v3/frontend/src/components/modules/common/data-table/data-table-pagination.tsx (1)
  • 41-47: The update to the page size options in the DataTablePagination component from a range of 10 to 50 to a range of 5 to 100 is a positive change for flexibility. Ensure that the table.setPageSize function and any related pagination logic can handle the new range of values without issues.
tools/obscuroscan_v3/frontend/src/lib/constants.ts (2)
  • 2-4: Ensure that the updated social links are correctly reflected in all parts of the application where they are used.

  • 17-17: Verify that the GOOGLE_ANALYTICS_ID is being utilized correctly in the application for Google Analytics integration.

tools/obscuroscan_v3/frontend/src/lib/siteMetadata.ts (1)
  • 10-11: The siteLogo and siteLogoSquare fields are empty. If this is not intentional, they should be populated with appropriate URLs or paths to the logo images.
tools/obscuroscan_v3/frontend/src/services/useBatchesService.ts (3)
  • 4-5: The addition of useState and useRouter imports aligns with the new state management and routing requirements.

  • 10-10: The introduction of the noPolling state variable is a good approach to control the polling behavior dynamically.

  • 38-39: Exposing setNoPolling and refetchBatches in the return object allows for external control over polling and data refetching, which is a good enhancement.

tools/obscuroscan_v3/frontend/src/services/useTransactionsService.ts (5)
  • 9-12: The addition of useRouter is appropriate for accessing query parameters for pagination and other options.

  • 28-28: The introduction of noPolling state variable and its setter function setNoPolling is a good practice for controlling polling behavior.

  • 38-46: The modification of the useQuery hook to include dynamic options and a refetch function is a good enhancement for flexibility and control over data fetching.

  • 43-44: The update to fetchTransactions to accept options as a parameter aligns with the dynamic nature of the query parameters.

  • 87-91: Exposing refetchTransactions and setNoPolling in the return object allows for external control over data fetching and polling, which is a good practice for component reusability.

Comment on lines +21 to +24
React.useEffect(() => {
setNoPolling(true);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
Copy link

Choose a reason for hiding this comment

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

Consider adding a cleanup function in the useEffect hook to reset the noPolling state when the component unmounts to prevent potential side effects in other components or instances that might rely on the same state.

  React.useEffect(() => {
    setNoPolling(true);
+   return () => setNoPolling(false);
  }, []);

Committable suggestion

IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
React.useEffect(() => {
setNoPolling(true);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
React.useEffect(() => {
setNoPolling(true);
return () => setNoPolling(false);
}, []);

Comment on lines +37 to 45
{TransactionsData ? (
<DataTable
columns={columns}
data={transactions?.result?.TransactionsData}
data={TransactionsData}
refetch={refetchTransactions}
total={+Total}
/>
) : (
<p>Loading...</p>
Copy link

Choose a reason for hiding this comment

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

The conditional rendering logic to display the loading message is incorrect. Since TransactionsData is initialized to an empty array, the condition will always evaluate to true, and the loading message will never be shown. Consider checking if the array is empty instead.

-        {TransactionsData ? (
+        {TransactionsData.length > 0 ? (

Committable suggestion

IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
{TransactionsData ? (
<DataTable
columns={columns}
data={transactions?.result?.TransactionsData}
data={TransactionsData}
refetch={refetchTransactions}
total={+Total}
/>
) : (
<p>Loading...</p>
{TransactionsData.length > 0 ? (
<DataTable
columns={columns}
data={TransactionsData}
refetch={refetchTransactions}
total={+Total}
/>
) : (
<p>Loading...</p>

Comment on lines +60 to +61
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [id]);
Copy link

Choose a reason for hiding this comment

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

Consider explaining why the react-hooks/exhaustive-deps rule is disabled or include all necessary dependencies in the dependency array of useEffect.

Comment on lines +46 to +50
} catch (error) {
toast({
variant: "destructive",
description: "Error fetching document",
});
Copy link

Choose a reason for hiding this comment

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

Consider adding more robust error handling, such as logging the error or providing a more detailed error message to the user.

Comment on lines 43 to 44
) : (
<p>Loading...</p>
Copy link

Choose a reason for hiding this comment

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

Consider using a more robust loading indicator, such as a spinner or progress bar, to improve user experience.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Review Status

Actionable comments generated: 0

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between a4ffe1d and 1897b5b.
Files selected for processing (4)
  • tools/obscuroscan_v3/frontend/pages/batches/[hash].tsx (2 hunks)
  • tools/obscuroscan_v3/frontend/src/components/layouts/footer.tsx (2 hunks)
  • tools/obscuroscan_v3/frontend/src/components/modules/batches/batch-details.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/src/components/modules/personal/index.tsx (1 hunks)
Files skipped from review due to trivial changes (2)
  • tools/obscuroscan_v3/frontend/pages/batches/[hash].tsx
  • tools/obscuroscan_v3/frontend/src/components/modules/personal/index.tsx
Additional comments: 3
tools/obscuroscan_v3/frontend/src/components/layouts/footer.tsx (2)
  • 47-47: The version variable is used here but it's not clear where it's defined. Ensure that version is imported or defined within the scope to avoid reference errors.

  • 34-45: The use of Link components from "next/link" is appropriate for client-side navigation and is consistent with the summary provided.

tools/obscuroscan_v3/frontend/src/components/modules/batches/batch-details.tsx (1)
  • 8-12: Ensure that all references to the BatchDetails function have been updated to BatchDetailsComponent throughout the codebase to prevent any import errors.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Review Status

Actionable comments generated: 0

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 1897b5b and f7f0956.
Files ignored due to filter (1)
  • tools/obscuroscan_v3/frontend/public/docs/privacy.json
Files selected for processing (4)
  • tools/obscuroscan_v3/frontend/pages/404.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/pages/_error.tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/pages/docs/[id].tsx (1 hunks)
  • tools/obscuroscan_v3/frontend/styles/globals.css (1 hunks)
Files skipped from review due to trivial changes (1)
  • tools/obscuroscan_v3/frontend/styles/globals.css
Additional comments: 2
tools/obscuroscan_v3/frontend/pages/404.tsx (1)
  • 4-38: The implementation of Custom404Error function is consistent with the summary and follows good practices for optional parameters and default values. The use of the Error component for rendering the error message is appropriate and the function is correctly exported as the default export of the file.
tools/obscuroscan_v3/frontend/pages/_error.tsx (1)
  • 23-91: The summary states that the type of parameter props was changed to accept any type, but the hunk does not reflect this change. Please verify if this change is implemented elsewhere or if the summary is incorrect.

@Jennievon Jennievon requested a review from otherview November 29, 2023 14:19
Copy link
Contributor

@otherview otherview left a comment

Choose a reason for hiding this comment

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

lgtm - let's merge main first !

@Jennievon
Copy link
Contributor Author

lgtm - let's merge main first !

Done!

@Jennievon Jennievon merged commit 1433e41 into main Nov 29, 2023
1 of 2 checks passed
@Jennievon Jennievon deleted the jennifer/scan-updates branch November 29, 2023 18:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants