// /actions/events.ts
'use server'
import { db } from '@/db/db'
import { events } from '@/db/schema'
import { delay } from '@/utils/delay'
import { getCurrentUser } from '@/utils/users'
import randomName from '@scaleway/random-name'
export const createNewEvent = async () => {
await delay(1000)
const user = await getCurrentUser()
await db.insert(events).values({
startOn: new Date().toUTCString(),
createdById: user.id,
isPrivate: false,
name: randomName('event', ' '),
})
}
// /components/Nav.tsx
'use client'
import { Input } from '@nextui-org/react'
import { createNewEvent } from '@/actions/events'
import { Button, Tooltip } from '@nextui-org/react'
import { CirclePlus } from 'lucide-react'
import { useTransition } from 'react'
const Nav = () => {
const [isPending, startTransition] = useTransition()
const handleClick = () => {
startTransition(() => {
createNewEvent()
})
}
return (
<nav className="h-[65px] border-b border-default-50 flex items-center px-6 gap-4">
<div>
<Tooltip content="New Event">
<Button
isIconOnly
variant="ghost"
size="sm"
isLoading={isPending}
onClick={handleClick}
>
<CirclePlus size={16} />
</Button>
</Tooltip>
</div>
<div className="w-1/2">
<Input size="sm" variant="faded" placeholder="search" />
</div>
</nav>
)
}
export default Nav
// /actions/signout.ts
'use server'
import { COOKIE_NAME } from '@/utils/constants'
import { cookies } from 'next/headers'
import { redirect } from 'next/navigation'
export const signout = () => {
cookies().delete(COOKIE_NAME)
redirect('/signin')
}
import { signout } from '@/actions/signout'
const Side = () => {
//...
return (
//..
<div className="absolute bottom-0 w-full left-0 px-4">
<Button onClick={() => signout()} fullWidth variant="ghost">
Sign Out
</Button>
</div>
)
}