Skip to content

Instantly share code, notes, and snippets.

@brandonchadlange
brandonchadlange / next-js-api-route.ts
Created September 20, 2022 06:08
Next.js API route
import type { NextApiRequest, NextApiResponse } from 'next'
type Data = {
name: string
}
export default function handler(
req: NextApiRequest,
res: NextApiResponse<Data>
) {
@brandonchadlange
brandonchadlange / route-handler.ts
Created September 20, 2022 06:44
Next.js route handler extraction
import type { NextApiRequest, NextApiResponse } from "next";
type HttpMethod = "GET" | "POST" | "PUT" | "DELETE";
type HttpHandler = (request: NextApiRequest, response: NextApiResponse) => void;
interface RouteHandlerParams {
GET?: HttpHandler;
POST?: HttpHandler;
PUT?: HttpHandler;
DELETE?: HttpHandler;
@brandonchadlange
brandonchadlange / route-handler-simple-get.ts
Created September 20, 2022 19:06
route handler simple get request
import { NextApiRequest, NextApiResponse } from "next";
import { PrismaClient } from "@prisma/client";
import config from "../config";
export const SimpleGet = async (
req: NextApiRequest,
res: NextApiResponse
) => {
return res.status(200).json({ message: "Hello World!" });
};
@brandonchadlange
brandonchadlange / custom-next-js-api-route-handler.ts
Created September 20, 2022 19:09
Custom next.js api route handler
import { RouteHandler, SimpleGet } from "handlers";
import type { NextApiRequest, NextApiResponse } from "next";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
await RouteHandler(req, res, {
GET: SimpleGet
});
@brandonchadlange
brandonchadlange / messy-routing.tsx
Created September 22, 2022 20:46
Messy next.js routing example
import { useRouter } from "next/router";
const MessyRouter = () => {
const router = useRouter();
const { organisation, workspace } = router.query;
const route1 = `/${organisation}/${workspace}/route-1`
const route2 = `/${organisation}/${workspace}/route-2`;
return (
@brandonchadlange
brandonchadlange / custom-router-hook.ts
Last active September 22, 2022 21:10
Next.js custom router hook
import { useRouter } from "next/router";
import { useEffect, useState } from "react";
const PATH = "discovery";
const useDiscoveryRouter = () => {
const [organisation, setOrganisation] = useState<string>("");
const [workspace, setWorkspace] = useState<string>("");
const router = useRouter();
@brandonchadlange
brandonchadlange / clean-routing.tsx
Created September 22, 2022 21:18
Clean next.js routing example
import useDiscoveryRouter from "@/utils/routers/useDiscoveryRouter";
const CleanRouter = () => {
const discoverRouter = useDiscoveryRouter();
const extraLinks = ["discovery-1", "discovery-2", "discovery-3"].map(
(link) => (
<li>
<a href={discoverRouter.editDiscovery(link)}></a>
</li>
@brandonchadlange
brandonchadlange / modal-with-depandancies.tsx
Last active September 26, 2022 19:13
Modal with dependancies
interface ModalProps {
opened: boolean;
close: () => void;
}
const AppModal = (props: ModalProps) => {
return (
<Modal opened={props.opened}>
{/* Modal content goes here */}
<button onClick={close}>close</button>
@brandonchadlange
brandonchadlange / modal-with-no-dependancies.tsx
Created September 26, 2022 19:41
Modal with no dependancies
import { useState } from "react";
export interface BodyProps {
close: () => void;
}
interface UseModalProps {
Body: (props: BodyProps) => JSX.Element;
}
@brandonchadlange
brandonchadlange / loosely-coupled-modal-imp.tsx
Created September 26, 2022 20:07
Loosely coupled modal implementation
import useModal from "@/components/modal";
const App = () => {
const AppModal = useModal({
Body: (props) => (
<>
<h1>Hello from my modal!</h1>
<button onClick={props.close}>Close</button>
</>
),