Inline SVG Upload and Preview for Sanity
In your Sanity studio folder, run:
sanity install sanity-plugin-inline-svg
- Upload SVG as string that gets injected as HTML into a preview container
- Use on arrays to build a group of inline SVGs
TL;DR: Just use type: 'svgUploadPreview'
on a field in your schema
NOTE Don't forget to import into your schema.js
file:
import svgUploadPreview from 'sanity-plugin-inline-svg';
Long version: In your schema definitions (think schemas/clientList.js
):
export default {
name: 'clientList',
title: 'My Past Clients',
type: 'document',
fields: [
// ... other fields ...
{
name: 'svgUpload',
title: 'Upload SVG File',
type: 'svgUploadPreview',
}
]
}
Within Array:
- Create an object schema something like
schemas/svgUploadArray.js
import SvgPreviewComponent from './svgPreviewComponent';
export default {
type: 'object',
name: 'svgUpload',
title: 'Client Image Upload',
fields: [
{
type: '',
name: 'source',
title: 'Client SVG Logo',
},
],
preview: {
select: {
svgHtml: 'source',
},
component: SvgPreviewComponent,
},
};
- Create a preview component for the array items
schemas/svgPreviewComponent.js
import React from 'react';
function SvgPreviewComponent({ value }) {
if (!value) {
return <pre>Please upload an svg image</pre>;
}
return (
<>
<div dangerouslySetInnerHTML={{ __html: value.svgHtml }} />
</>
);
}
export default SvgPreviewComponent;
- In your schema definitions (think
schemas/clientList.js
):
export default {
name: 'clientList',
title: 'My Past Clients',
type: 'document',
fields: [
// ... other fields ...
{
name: 'clientLogos',
type: 'array',
title: 'Client Logos',
description: 'Client Logo Upload',
options: {
layout: 'grid',
},
of: [
{
title: 'Client Logos',
type: 'svgUpload',
},
],
}
]
}
Clone down this repository and run the following commands at the root of this repository.
npm i
npm link
Now you can start developing the plugin.
To include it in your Sanity test site, navigate to the root folder of your cms project and run npm link sanity-plugin-inline-svg
. You will now reference the local version of the when using import svgUploadPreview from 'sanity-plugin-inline-svg'
in your schemas.
To debug the plugin files in you then need to run sanity start --preserve-symlinks
in your cms project, and npm run dev
in your sanity-plugin-inline-svg-upload-preview repository folder.
- Allow styles to override
- Move
Upload SVG
CTA to react component from css -
Clean up some syntaxsanitized svg on upload