From 83df0355382e62b4a28ce3468f1b0e56f811715d Mon Sep 17 00:00:00 2001 From: Mike Decker Date: Thu, 8 Feb 2024 19:13:04 -0800 Subject: [PATCH] Add ESLint deprecation linting --- .eslintrc.json | 9 +- .storybook/main.ts | 7 +- .../stories/paragraphs/Banner.stories.tsx | 16 +- .../stories/paragraphs/Card.stories.tsx | 8 +- app/api/draft/route.tsx | 8 - app/layout.tsx | 4 +- next.config.js | 25 +- package.json | 13 +- src/components/elements/ombed.tsx | 7 +- .../banner-paragraph-display.tsx | 15 +- .../stanford-banner/banner-paragraph.tsx | 8 +- .../stanford-card/card-paragraph-display.tsx | 18 +- .../stanford-card/card-paragraph.tsx | 5 +- src/components/tools/google-analytics.tsx | 8 - yarn.lock | 308 +++++++++++------- 15 files changed, 251 insertions(+), 208 deletions(-) delete mode 100644 src/components/tools/google-analytics.tsx diff --git a/.eslintrc.json b/.eslintrc.json index a28e49d0..de9a52ec 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,7 +1,14 @@ { + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "./tsconfig.json" + }, "extends": [ "next/core-web-vitals", - "plugin:storybook/recommended" + "plugin:storybook/recommended", + "plugin:deprecation/recommended" ], "rules": { "@typescript-eslint/no-unused-vars": "off", diff --git a/.storybook/main.ts b/.storybook/main.ts index 27d6f399..882c6fe4 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -1,8 +1,6 @@ -// @ts-nocheck +import { TsconfigPathsPlugin } from "tsconfig-paths-webpack-plugin"; import type {StorybookConfig} from "@storybook/nextjs"; -const path = require("path"); - const config: StorybookConfig = { framework: { name: "@storybook/nextjs", @@ -38,8 +36,7 @@ const config: StorybookConfig = { autodocs: "tag", }, webpackFinal: async (config) => { - config.resolve.alias['@components'] = path.resolve(__dirname, '../src/components') - config.resolve.alias['@lib'] = path.resolve(__dirname, '../src/lib') + if (config.resolve) config.resolve.plugins = [new TsconfigPathsPlugin()]; return config }, }; diff --git a/.storybook/stories/paragraphs/Banner.stories.tsx b/.storybook/stories/paragraphs/Banner.stories.tsx index 7a3af754..3fb882ea 100644 --- a/.storybook/stories/paragraphs/Banner.stories.tsx +++ b/.storybook/stories/paragraphs/Banner.stories.tsx @@ -1,12 +1,11 @@ import type {Meta, StoryObj} from '@storybook/react'; import BannerParagraphDisplay from "@components/paragraphs/stanford-banner/banner-paragraph-display"; import {ComponentProps} from "react"; -import {getStoryBookImage} from "../storybook-entities"; type ComponentStoryProps = ComponentProps & { linkUrl?: string linkTitle?: string - mediaChoice?: string + imageUrl?: string } // More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction @@ -15,10 +14,6 @@ const meta: Meta = { component: BannerParagraphDisplay, tags: ['autodocs'], argTypes: { - mediaChoice: { - options: ["image", "none"], - control: {type: "select"} - } } }; @@ -27,12 +22,7 @@ type Story = StoryObj; // More on writing stories with args: https://storybook.js.org/docs/react/writing-stories/args export const Banner: Story = { - render: ({linkUrl, linkTitle, mediaChoice, ...args}) => { - const image = getStoryBookImage(); - args.media = mediaChoice === 'image' ? { - imageUrl: image.mediaImage.url, - imageAlt: image.mediaImage.alt - } : undefined; + render: ({linkUrl, linkTitle, imageUrl, ...args}) => { args.link = { url: linkUrl, title: linkTitle, @@ -41,7 +31,7 @@ export const Banner: Story = { return }, args: { - mediaChoice: "image", + imageUrl: "image", header: "header", supHeader: "supHeader", body: "body", diff --git a/.storybook/stories/paragraphs/Card.stories.tsx b/.storybook/stories/paragraphs/Card.stories.tsx index 03473077..de9bcc0f 100644 --- a/.storybook/stories/paragraphs/Card.stories.tsx +++ b/.storybook/stories/paragraphs/Card.stories.tsx @@ -35,13 +35,13 @@ export const Card: Story = { render: ({mediaChoice, ...args}) => { if (mediaChoice === 'image') { const image = getStoryBookImage(); - args.media = { - imageUrl: image.mediaImage.url, - imageAlt: image.mediaImage.alt, + args.image = { + url: image.mediaImage.url, + alt: image.mediaImage.alt, } } if (mediaChoice === 'video') { - args.media = {videoUrl: getStoryBookVideo().mediaOembedVideo}; + args.videoUrl = getStoryBookVideo().mediaOembedVideo; } args.link = { url: args.linkUrl, diff --git a/app/api/draft/route.tsx b/app/api/draft/route.tsx index 1c11b744..2b9c4fe1 100644 --- a/app/api/draft/route.tsx +++ b/app/api/draft/route.tsx @@ -1,6 +1,5 @@ import {draftMode} from 'next/headers' import {redirect} from 'next/navigation' -import {getEntityFromPath} from "@lib/gql/fetcher"; import {NextRequest, NextResponse} from "next/server"; export const revalidate = 0; @@ -20,13 +19,6 @@ export async function GET(request: NextRequest) { return NextResponse.json({message: 'Invalid slug path'}, {status: 401}) } - const routeInfo = await getEntityFromPath(slug, true) - - // If the slug doesn't exist prevent disable draft mode and return - if (!routeInfo?.entity) { - return NextResponse.json({message: 'Invalid slug'}, {status: 401}) - } - draftMode().enable() // Redirect to the path from the fetched post diff --git a/app/layout.tsx b/app/layout.tsx index 20819de9..32aeda01 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -4,12 +4,12 @@ import PageHeader from "@components/global/page-header"; import PageFooter from "@components/global/page-footer"; import Editori11y from "@components/tools/editorially"; import Script from "next/script"; -import GoogleAnalytics from "@components/tools/google-analytics"; import {isDraftMode} from "@lib/drupal/utils"; import BackToTop from "@components/elements/back-to-top"; import Link from "@components/elements/link"; import {getConfigPage} from "@lib/gql/fetcher"; import {StanfordBasicSiteSetting} from "@lib/gql/__generated__/drupal"; +import {GoogleAnalytics} from "@next/third-parties/google"; export const metadata = { // Update the metadataBase to the production domain. @@ -32,7 +32,7 @@ const RootLayout = async ({children, modal}: { children: React.ReactNode, modal: {(!draftMode && siteSettingsConfig?.suGoogleAnalytics) && <>