diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml index 6c5d6f4135..86b66bf9df 100644 --- a/.github/workflows/style.yml +++ b/.github/workflows/style.yml @@ -65,6 +65,9 @@ jobs: defaults: run: working-directory: ./web + permissions: + checks: write + pull-requests: read steps: - name: Checkout code @@ -103,7 +106,15 @@ jobs: if: steps.changed-files.outputs.any_changed == 'true' working-directory: ./web run: | - pnpm run lint + pnpm run lint:report + continue-on-error: true + + # - name: Annotate Code + # if: steps.changed-files.outputs.any_changed == 'true' && github.event_name == 'pull_request' + # uses: DerLev/eslint-annotations@51347b3a0abfb503fc8734d5ae31c4b151297fae + # with: + # eslint-report: web/eslint_report.json + # github-token: ${{ secrets.GITHUB_TOKEN }} - name: Web type check if: steps.changed-files.outputs.any_changed == 'true' diff --git a/web/app/components/plugins/marketplace/atoms.ts b/web/app/components/plugins/marketplace/atoms.ts index 6ca9bd1c05..b13d30407e 100644 --- a/web/app/components/plugins/marketplace/atoms.ts +++ b/web/app/components/plugins/marketplace/atoms.ts @@ -1,4 +1,3 @@ -import type { ActivePluginType } from './constants' import type { PluginsSort, SearchParamsFromCollection } from './types' import { atom, useAtom, useAtomValue, useSetAtom } from 'jotai' import { useQueryState } from 'nuqs' @@ -17,32 +16,14 @@ export function useSetMarketplaceSort() { return useSetAtom(marketplaceSortAtom) } -/** - * Preserve the state for marketplace - */ -export const preserveSearchStateInQueryAtom = atom(false) - -const searchPluginTextAtom = atom('') -const activePluginTypeAtom = atom('all') -const filterPluginTagsAtom = atom([]) - export function useSearchPluginText() { - const preserveSearchStateInQuery = useAtomValue(preserveSearchStateInQueryAtom) - const queryState = useQueryState('q', marketplaceSearchParamsParsers.q) - const atomState = useAtom(searchPluginTextAtom) - return preserveSearchStateInQuery ? queryState : atomState + return useQueryState('q', marketplaceSearchParamsParsers.q) } export function useActivePluginType() { - const preserveSearchStateInQuery = useAtomValue(preserveSearchStateInQueryAtom) - const queryState = useQueryState('category', marketplaceSearchParamsParsers.category) - const atomState = useAtom(activePluginTypeAtom) - return preserveSearchStateInQuery ? queryState : atomState + return useQueryState('category', marketplaceSearchParamsParsers.category) } export function useFilterPluginTags() { - const preserveSearchStateInQuery = useAtomValue(preserveSearchStateInQueryAtom) - const queryState = useQueryState('tags', marketplaceSearchParamsParsers.tags) - const atomState = useAtom(filterPluginTagsAtom) - return preserveSearchStateInQuery ? queryState : atomState + return useQueryState('tags', marketplaceSearchParamsParsers.tags) } /** diff --git a/web/app/components/plugins/marketplace/hydration-client.tsx b/web/app/components/plugins/marketplace/hydration-client.tsx deleted file mode 100644 index 5698db711f..0000000000 --- a/web/app/components/plugins/marketplace/hydration-client.tsx +++ /dev/null @@ -1,15 +0,0 @@ -'use client' - -import { useHydrateAtoms } from 'jotai/utils' -import { preserveSearchStateInQueryAtom } from './atoms' - -export function HydrateMarketplaceAtoms({ - preserveSearchStateInQuery, - children, -}: { - preserveSearchStateInQuery: boolean - children: React.ReactNode -}) { - useHydrateAtoms([[preserveSearchStateInQueryAtom, preserveSearchStateInQuery]]) - return <>{children} -} diff --git a/web/app/components/plugins/marketplace/index.tsx b/web/app/components/plugins/marketplace/index.tsx index 1f32ee4d29..0eb2488cef 100644 --- a/web/app/components/plugins/marketplace/index.tsx +++ b/web/app/components/plugins/marketplace/index.tsx @@ -1,7 +1,6 @@ import type { SearchParams } from 'nuqs' import { TanstackQueryInitializer } from '@/context/query-client' import Description from './description' -import { HydrateMarketplaceAtoms } from './hydration-client' import { HydrateQueryClient } from './hydration-server' import ListWrapper from './list/list-wrapper' import StickySearchAndSwitchWrapper from './sticky-search-and-switch-wrapper' @@ -10,8 +9,7 @@ type MarketplaceProps = { showInstallButton?: boolean pluginTypeSwitchClassName?: string /** - * Pass the search params from the request to prefetch data on the server - * and preserve the search params in the URL. + * Pass the search params from the request to prefetch data on the server. */ searchParams?: Promise } @@ -24,15 +22,13 @@ const Marketplace = async ({ return ( - - - - - + + + ) diff --git a/web/app/components/plugins/plugin-page/context.tsx b/web/app/components/plugins/plugin-page/context.tsx index fea78ae181..abc4408d62 100644 --- a/web/app/components/plugins/plugin-page/context.tsx +++ b/web/app/components/plugins/plugin-page/context.tsx @@ -68,7 +68,7 @@ export const PluginPageContextProvider = ({ const options = useMemo(() => { return enable_marketplace ? tabs : tabs.filter(tab => tab.value !== PLUGIN_PAGE_TABS_MAP.marketplace) }, [tabs, enable_marketplace]) - const [activeTab, setActiveTab] = useQueryState('category', { + const [activeTab, setActiveTab] = useQueryState('tab', { defaultValue: options[0].value, }) diff --git a/web/package.json b/web/package.json index 42b4eeb107..605dcaf680 100644 --- a/web/package.json +++ b/web/package.json @@ -28,9 +28,10 @@ "build:docker": "next build && node scripts/optimize-standalone.js", "start": "node ./scripts/copy-and-start.mjs", "lint": "eslint --cache --cache-location node_modules/.cache/eslint/.eslint-cache", - "lint:fix": "eslint --cache --cache-location node_modules/.cache/eslint/.eslint-cache --fix", - "lint:quiet": "eslint --cache --cache-location node_modules/.cache/eslint/.eslint-cache --quiet", - "lint:complexity": "eslint --cache --cache-location node_modules/.cache/eslint/.eslint-cache --rule 'complexity: [error, {max: 15}]' --quiet", + "lint:fix": "pnpm lint --fix", + "lint:quiet": "pnpm lint --quiet", + "lint:complexity": "pnpm lint --rule 'complexity: [error, {max: 15}]' --quiet", + "lint:report": "pnpm lint --output-file eslint_report.json --format json", "type-check": "tsc --noEmit", "type-check:tsgo": "tsgo --noEmit", "prepare": "cd ../ && node -e \"if (process.env.NODE_ENV !== 'production'){process.exit(1)} \" || husky ./web/.husky",