feat: add next top loader

This commit is contained in:
Stevan Freeborn
2023-09-11 20:20:52 -05:00
parent 889cd08207
commit 636cd96e8b
7 changed files with 74 additions and 10 deletions
+5
View File
@@ -3,6 +3,7 @@ import { ConvexProvider, NextThemesProvider } from '@/providers';
import { ClerkProvider } from '@clerk/nextjs';
import type { Metadata } from 'next';
import { Inter } from 'next/font/google';
import NextTopLoader from 'nextjs-toploader';
import './globals.css';
const inter = Inter({ subsets: ['latin'] });
@@ -30,6 +31,10 @@ export default function RootLayout({
>
<ConvexProvider>
<NextThemesProvider>
<NextTopLoader
color='#3743e5'
showSpinner={false}
/>
<Navbar />
<div className='p-4 w-full h-full flex flex-col'>{children}</div>
</NextThemesProvider>
+1 -2
View File
@@ -1,6 +1,6 @@
'use client';
import { useCodeMirror } from '@/hooks';
import { useCodeMirror, useRouter } from '@/hooks';
import { basicDark } from '@/lib/codemirror';
import { useUser } from '@clerk/nextjs';
import { indentWithTab } from '@codemirror/commands';
@@ -10,7 +10,6 @@ import { Compartment, EditorState, Text } from '@codemirror/state';
import { EditorView, keymap } from '@codemirror/view';
import { basicSetup } from 'codemirror';
import { useMutation } from 'convex/react';
import { useRouter } from 'next/navigation';
import { FormEvent, useState } from 'react';
import { api } from '../../convex/_generated/api';
import { Doc } from '../../convex/_generated/dataModel';
+2 -2
View File
@@ -80,7 +80,7 @@
--color-fg-muted: #57606a;
--color-fg-subtle: #6e7781;
--color-canvas-default: #ffffff;
--color-canvas-subtle: #f6f8fa;
--color-canvas-subtle: #ffffff;
--color-border-default: #d0d7de;
--color-border-muted: hsla(210, 18%, 87%, 1);
--color-neutral-muted: rgba(175, 184, 193, 0.2);
@@ -827,7 +827,7 @@
.markdown-content .highlight pre,
.markdown-content pre {
padding: 0 16px;
padding: 0;
overflow: auto;
font-size: 85%;
line-height: 1.45;
+2 -3
View File
@@ -1,12 +1,11 @@
'use client';
import { useMountedEffect } from '@/hooks';
import { useMountedEffect, useProgressEffect } from '@/hooks';
import { useTheme } from 'next-themes';
import { useEffect, useState } from 'react';
import { BsMoonStarsFill, BsSunFill } from 'react-icons/bs';
import { ImSpinner2 } from 'react-icons/im';
export default function ThemeButton() {
useProgressEffect();
const { mounted, Loader } = useMountedEffect();
const { theme, setTheme } = useTheme();
+32
View File
@@ -1,6 +1,12 @@
import SpinningLoader from '@/components/SpinningLoader';
import { EditorState, Extension, Text } from '@codemirror/state';
import { EditorView } from '@codemirror/view';
import {
useRouter as useNextRouter,
usePathname,
useSearchParams,
} from 'next/navigation';
import NProgress from 'nprogress';
import { useEffect, useRef, useState } from 'react';
export function useCodeMirror({
@@ -43,3 +49,29 @@ export function useMountedEffect() {
return { mounted, Loader: SpinningLoader };
}
export function useRouter() {
const router = useNextRouter();
const { push, back } = router;
router.push = (href, options) => {
NProgress.start();
push(href, options);
};
router.back = () => {
NProgress.start();
back();
};
return router;
}
export function useProgressEffect() {
const pathname = usePathname();
const searchParams = useSearchParams();
useEffect(() => {
NProgress.done();
}, [pathname, searchParams]);
}