sanity-plugin-s3-files
Version:
Store Sanity media files in AWS S3
64 lines (63 loc) • 2.77 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { definePlugin } from 'sanity';
import { StudioTool, ToolIcon, createInput, getCustomDataSchema, getDimensionsSchema, getStoredFileSchema, } from 'sanity-plugin-external-files';
import deleteFile from './deleteFile';
import { credentialsFields, schemaConfig } from './schema.config';
import uploadFile from './uploadFile';
const VENDOR_ID = 's3-files';
export const s3Files = definePlugin((userConfig) => {
const config = buildConfig(userConfig);
return {
name: config.schemaPrefix,
schema: {
types: [
// s3-files.custom-data
getCustomDataSchema(config, schemaConfig),
// s3-files.dimensions
getDimensionsSchema(config),
// s3-files.storedFile
getStoredFileSchema(config, schemaConfig),
{
name: `${config.schemaPrefix}.media`,
title: 'S3 media',
type: 'object',
components: {
input: createInput(config),
},
fields: [
{
name: 'asset',
title: 'Asset',
type: 'reference',
to: [{ type: `${config.schemaPrefix}.storedFile` }],
},
],
},
],
},
tools: [
{
name: config.schemaPrefix,
title: config.toolTitle,
component: () => _jsx(StudioTool, Object.assign({}, config)),
icon: ToolIcon,
},
],
};
});
function buildConfig(userConfig = {}) {
var _a;
const userCredentials = (userConfig === null || userConfig === void 0 ? void 0 : userConfig.credentials) || {};
return {
id: VENDOR_ID,
customDataFieldName: 's3',
defaultAccept: userConfig.defaultAccept,
schemaPrefix: userConfig.schemaPrefix || VENDOR_ID,
toolTitle: (_a = userConfig.toolTitle) !== null && _a !== void 0 ? _a : 'Media Library (S3)',
credentialsFields: credentialsFields.filter(
// Credentials already provided by the
(field) => !userCredentials[field.name] && !(field.name in userCredentials)),
deleteFile: (props) => deleteFile(Object.assign(Object.assign({}, props), { credentials: Object.assign(Object.assign({}, userCredentials), (props.credentials || {})) })),
uploadFile: (props) => uploadFile(Object.assign(Object.assign({}, props), { credentials: Object.assign(Object.assign({}, userCredentials), (props.credentials || {})) })),
};
}