Usage
Create a repo.ts
and add it to your list of schemaTypes
// repo.ts
import {defineField, defineType} from 'sanity'
export default defineType({
name: 'repo',
title: 'Repo',
type: 'document',
fields: [
defineField({
name: 'preview',
title: 'Preview',
type: 'image',
description: 'Preview of the live site',
}),
defineField({
name: 'repo_name',
title: 'Reposityory Name',
type: 'string',
description: 'please use the name of the reposityory from github',
}),
defineField({
name: 'repo_url',
title: 'URL',
type: 'string',
description: 'This is the link to your repository',
}),
defineField({
name: 'live_url',
title: 'Live',
type: 'string',
description: 'This is the link to your repository',
}),
defineField({
name: 'tags',
title: 'Tags',
type: 'array',
of: [{type: 'string'}],
description: 'This is where the tags go',
}),
defineField({
name: 'languages',
title: 'Languages',
type: 'array',
of: [{type: 'string'}],
description: 'Ex: JavaScript, Python, Go',
}),
],
})
// index.ts
import repo from 'repo.ts'
export const schemaTypes = [
...,
repo
]
Note: Be careful with your environment variables as
SANITY_STUDIO
prefix may expose them in the client side. Please refer to sanity docsCopy into
utils.ts
to initialize necessary clients
//utils.ts
import {createClient} from '@sanity/client'
import {graphql} from '@octokit/graphql'
// sanity client
export const sanityClient = createClient({
projectId: process.env.SANITY_STUDIO_PROJECT_ID,
dataset: process.env.SANITY_STUDIO_.DATASET,
useCdn: false, // set to `false` to bypass the edge cache
apiVersion: '2023-05-03', // use current date (YYYY-MM-DD) to target the latest API version
token: process.env.SANITY_STUDIO_.SANITY_SECRET_TOKEN
})
// github graphql with auth
export const graphqlWithAuth = graphql.defaults({
headers: {
authorization: 'bearer ' + process.env.SANITY_STUDIO_GITHUB_TOKEN,
},
})
Add it as a widget within dashboard
in sanity.config.ts
(or .js):
import {defineConfig} from 'sanity'
import {sanityClient,graphqlWithAuth } from '@/utils.ts'
import {
dashboardTool,
} from '@sanity/dashboard'
import {GithubReposListWidget} from 'repos-to-sanity'
export default defineConfig({
//...
plugins: [
...,
dashboardTool({
widgets: [
...,
// Example Here
GithubReposListWidget({
sanityClient,
graphqlWithAuth,
login: "GITHUB_USERNAME",
first: 5,
layout: {
width: "auto",
height: "auto"
}
}),
],
}),
],
})