Skip to content

Commit

Permalink
add cloud run next.js minimal server actions example (#68)
Browse files Browse the repository at this point in the history
  • Loading branch information
LukeSchlangen authored May 30, 2024
1 parent 96cc80a commit 2ff9fa3
Show file tree
Hide file tree
Showing 16 changed files with 5,159 additions and 0 deletions.
3 changes: 3 additions & 0 deletions nextjs-cloud-run/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"extends": "next/core-web-vitals"
}
36 changes: 36 additions & 0 deletions nextjs-cloud-run/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env*.local

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts
36 changes: 36 additions & 0 deletions nextjs-cloud-run/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).

## Getting Started

First, run the development server:

```bash
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
```

Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.

You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.

This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.

## Learn More

To learn more about Next.js, take a look at the following resources:

- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.

You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!

## Deploy on Vercel

The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.

Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
17 changes: 17 additions & 0 deletions nextjs-cloud-run/app/actions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
'use server'

const favoriteThings = [
'Chocolate',
'Football',
'JavaScript',
'Volleyball',
];

export async function getFavoriteThings() {
return favoriteThings;
}

export async function addFavoriteThing(newThing: string) {
favoriteThings.push(newThing);
return;
}
Binary file added nextjs-cloud-run/app/favicon.ico
Binary file not shown.
23 changes: 23 additions & 0 deletions nextjs-cloud-run/app/globals.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

:root {
--foreground-rgb: 0, 0, 0;
--background-start-rgb: 214, 219, 220;
--background-end-rgb: 255, 255, 255;
}

@media (prefers-color-scheme: dark) {
:root {
--foreground-rgb: 255, 255, 255;
--background-start-rgb: 0, 0, 0;
--background-end-rgb: 0, 0, 0;
}
}

@layer utilities {
.text-balance {
text-wrap: balance;
}
}
22 changes: 22 additions & 0 deletions nextjs-cloud-run/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";

const inter = Inter({ subsets: ["latin"] });

export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
};

export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body className={inter.className}>{children}</body>
</html>
);
}
40 changes: 40 additions & 0 deletions nextjs-cloud-run/app/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
'use client'
import { useEffect, useState } from "react";
import { addFavoriteThing, getFavoriteThings } from "./actions";

export default function Home() {
const [newFavoriteThing, setNewFavoriteThing] = useState('');
const [favoriteThings, setFavoriteThings] = useState<string[]>([]);
async function getThings() {
const updatedListOfThings = await getFavoriteThings();
setFavoriteThings(updatedListOfThings);
}
useEffect(() => {
getThings();
}, []);
async function addThing() {
await addFavoriteThing(newFavoriteThing);
setNewFavoriteThing('');
await getThings();
}
return (
<main>
<h1>Hello Martin!</h1>
<h2>Luke&apos;s Favorite Things</h2>
<input
placeholder="New Favorite Thing"
value={newFavoriteThing}
onChange={(e) => setNewFavoriteThing(e.target.value)}
className="border-black border-2"
/>
<button onClick={addThing} className="border-black border-2 hover:text-white hover:bg-black rounded">
Add Favorite Thing
</button>
<ul className="list-disc list-inside">
{favoriteThings.map(function (thing) {
return <li key={thing}>{thing}</li>
})}
</ul>
</main>
);
}
4 changes: 4 additions & 0 deletions nextjs-cloud-run/next.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/** @type {import('next').NextConfig} */
const nextConfig = {};

export default nextConfig;
Loading

0 comments on commit 2ff9fa3

Please sign in to comment.