Activation
Create API key
In the Uniform Dashboard, create an API key with the following permissions:
Uniform Canvas > Compositions > Read PublishedAdd the following values to your
.envfile. You collected these values when you created the Uniform API key:Uniform value Environment variable API Key UNIFORM_API_KEYProject ID UNIFORM_PROJECT_IDAbout this step
Technically you do not need to set these values in environment variables. You could hard-code the values into your app, but using environment variables is a "best practice".
Update front-end app
The changes needed to the front-end depends on the technology used to build the front-end.
Next.js
In order to make these instructions easier to follow, a specific
example is used. The example activates Canvas for the following
page, where the presentation logic in the <main> tag will be
controlled by a user with Canvas:
import Head from 'next/head'
export async function getStaticProps() {
return {
props: {
title: "Sample app",
message: "Hello",
}
}
}
export default function Home({ title, message }) {
return (
<div>
<Head>
<title>{title}</title>
</Head>
<main>
<h1>
{message}
</h1>
</main>
</div>
)
}
- Next.js (steps)
- Next.js (complete)
tip
This section guides you through the process of activating Canvas by explaining each step. It takes longer to go through, but it will help you understand why each line of code is needed.
Add the following packages to your app:
@uniformdev/canvas
@uniformdev/canvas-reactAdd the following code:
import Head from 'next/head'
import {
CanvasClient,
} from '@uniformdev/canvas'
...Add the following code:
export async function getStaticProps() {
const client = new CanvasClient({
apiKey: process.env.UNIFORM_API_KEY,
projectId: process.env.UNIFORM_PROJECT_ID,
})
return {
props: {
title: "Sample app",
message: "Hello",
}
}
}Add the following code:
export async function getStaticProps() {
const client = new CanvasClient({
apiKey: process.env.UNIFORM_API_KEY,
projectId: process.env.UNIFORM_PROJECT_ID,
})
const { composition } = await client.getCompositionBySlug({
slug: "/",
})
return {
props: {
title: "Sample app",
message: "Hello",
}
}
}Add the following code:
export async function getStaticProps() {
const client = new CanvasClient({
apiKey: process.env.UNIFORM_API_KEY,
projectId: process.env.UNIFORM_PROJECT_ID,
})
const { composition } = await client.getCompositionBySlug({
slug: "/",
})
return {
props: {
title: "Sample app",
message: "Hello",
composition,
}
}
}Add the following code:
import Head from 'next/head'
import {
CanvasClient,
} from '@uniformdev/canvas'
import {
Composition,
} from '@uniformdev/canvas-react';
...Add the following code:
export default function Home({ title, message, composition }) {
return (
<div>
<Head>
<title>{title}</title>
</Head>
...Add the following code:
function UnknownComponent({ component }) {
return <div>[unknown component: {component.type}]</div>
}
function resolveRenderer({ type }) {
//TODO: Add your components.
return UnknownComponent
}Add the following code:
export default function Home({ title, message, composition }) {
return (
<Composition data={composition} resolveRenderer={resolveRenderer}>
<div>
<Head>
<title>{title}</title>
</Head>
<main>
<h1>
{message}
</h1>
</main>
</div>
</Composition>
)
}Add the following code:
import Head from 'next/head'
import {
CanvasClient,
} from '@uniformdev/canvas'
import {
Composition,
Slot,
} from '@uniformdev/canvas-react';
...Add the following code:
export default function Home({ title, message, composition }) {
return (
<Composition data={composition} resolveRenderer={resolveRenderer}>
<div>
<Head>
<title>{title}</title>
</Head>
<main>
<Slot name='body' />
</main>
</div>
</Composition>
)
}About this step
You add the
Slotcomponent in the places that match where you defined slots in your composition component.
tip
This section gets you to activating Canvas as quickly as possible. It does not explain each line of code.
Add the following packages to your app:
@uniformdev/canvas
@uniformdev/canvas-reactAdd the following code:
import Head from 'next/head'
import {
CanvasClient,
} from '@uniformdev/canvas'
import {
Composition,
Slot,
} from '@uniformdev/canvas-react'
export async function getStaticProps() {
const client = new CanvasClient({
apiKey: process.env.UNIFORM_API_KEY,
projectId: process.env.UNIFORM_PROJECT_ID,
})
const { composition } = await client.getCompositionBySlug({
slug: "/",
})
return {
props: {
title: 'Sample app',
message: 'Hello',
composition,
}
}
}
function UnknownComponent({ component }) {
return <div>[unknown component: {component.type}]</div>
}
function resolveRenderer({ type }) {
//TODO: Add your components.
return UnknownComponent
}
export default function Home({ title, message, composition }) {
return (
<Composition data={composition} resolveRenderer={resolveRenderer}>
<div>
<Head>
<title>{title}</title>
</Head>
<main>
<Slot name='body' />
</main>
</div>
</Composition>
)
}