Skip to content

Instantly share code, notes, and snippets.

View SimeonGriggs's full-sized avatar

Simeon Griggs SimeonGriggs

View GitHub Profile
@SimeonGriggs
SimeonGriggs / i18n-duplicate.ts
Last active July 16, 2024 08:44
This migration will duplicate a "base document" and all its translations
import {uuid} from '@sanity/uuid'
import {SanityDocumentLike} from 'sanity'
import {defineMigration, create} from 'sanity/migrate'
// Update these constants to match your Document Internationalization Plugin configuration
const BASE_FIELD = `__i18n_base`
const REFS_FIELD = `__i18n_refs`
const LANGUAGE_FIELD = `_lang`
const ID_SUFFIX = '__i18n'
@SimeonGriggs
SimeonGriggs / settings.json
Created June 20, 2024 20:11
My VS Code "Screencasting Mode" settings
"editor.padding.top": 10,
"editor.lineDecorationsWidth": 20,
"breadcrumbs.enabled": false,
"github.copilot.editor.enableCodeActions": false,
"github.copilot.editor.enableAutoCompletions": true,
"editor.cursorBlinking": "solid",
"editor.cursorSmoothCaretAnimation": "on",
"editor.cursorStyle": "line",
"editor.cursorWidth": 18,
"editor.fontSize": 20,
@SimeonGriggs
SimeonGriggs / import-wp-json-data.ts
Created June 14, 2024 12:50
Sanity Migration Tooling example for scripting new content from an API
import {
createIfNotExists,
defineMigration,
} from 'sanity/migrate'
type WordPressDataType =
| 'categories'
| 'posts'
| 'tags'
| 'users'
/**
* ---------------------------------------------------------------------------------
* This file has been generated by Sanity TypeGen.
* Command: `sanity typegen generate`
*
* Any modifications made directly to this file will be overwritten the next time
* the TypeScript definitions are generated. Please make changes to the Sanity
* schema definitions and/or GROQ queries if you need to update these types.
*
* For more information on how to use Sanity TypeGen, visit the official documentation:
@SimeonGriggs
SimeonGriggs / PageBuilder.tsx
Last active March 19, 2024 12:54
Rendering blocks from a "page builder" array in Sanity
import type { KeyedObject, TypedObject } from "sanity";
import PageBuilderContent from "./pageBuilderContent";
import PageBuilderColumns from "./pageBuilderColumns";
const Components = {
pageBuilderContent: PageBuilderContent,
pageBuilderColumns: PageBuilderColumns,
};
@SimeonGriggs
SimeonGriggs / ImageExtendedInput.tsx
Created September 11, 2023 17:16
An extended image asset schema with a custom input to watch the value and update the image's fields with values from the asset itself
import {useEffect, useState} from 'react'
import {ImageAsset, ObjectInputProps, Reference, set, unset, useClient} from 'sanity'
type ExtendedImageValue = {
asset: Reference
lqip?: string
blurHash?: string
}
export default function ImageExtendedInput(props: ObjectInputProps<ExtendedImageValue>) {
@SimeonGriggs
SimeonGriggs / Dereference.tsx
Created December 16, 2022 15:42
Sanity Studio v3 Document Action to "de-reference" a document by patching all documents that reference the current one. Incredibly dangerous.
import {useState, useEffect, useCallback} from 'react'
import {useToast, Card, Button, Stack, Text, Code} from '@sanity/ui'
import {extractWithPath} from '@sanity/mutator'
import {
Preview,
DocumentActionProps,
SanityDocument,
useClient,
useSchema,
pathToString,
@SimeonGriggs
SimeonGriggs / createAndScheduleArticle.js
Created July 29, 2022 12:37
Create a single `article` document as a draft and Schedule it to be published in 2025
/**
* Create a single `article` document as a draft
* and Schedule it to be published in 2025
*
* Save this file to the root of your Studio and run with:
* sanity exec createAndScheduleArticle.js --with-user-token
*/
import sanityClient from 'part:@sanity/base/client'
import {uuid} from '@sanity/uuid'
@SimeonGriggs
SimeonGriggs / getUniqueFieldPaths.ts
Created July 20, 2022 18:12
Takes in a Sanity schema.get(`type`) to return a flat list of every possible field path
function getInnerFieldTypeNames(of = []) {
if (!of?.find((field) => field.fields)) {
return ``
}
const arrayObjectTypeNames = of.map((field) => field.name)
return arrayObjectTypeNames.join(`|`)
}
@SimeonGriggs
SimeonGriggs / TemplatePopulator.tsx
Created June 16, 2022 06:36
A component to write predefined into an Array field
// Add to your schema like...
// {name: `pageBuilderTemplatePopulator`, type: `string`, inputComponent: TemplatePopulator},
import {Button, Grid} from '@sanity/ui'
import React, {useCallback, useState} from 'react'
import sanityClient from 'part:@sanity/base/client'
const client = sanityClient.withConfig({apiVersion: `2021-05-19`})
const contentData = [