UNPKG

sanity-plugin-r2-files

Version:
65 lines (64 loc) 2.88 kB
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 = 'r2-files'; export const cloudflareR2Files = definePlugin((userConfig) => { const config = buildConfig(userConfig); return { name: config.schemaPrefix, schema: { types: [ // r2-files.custom-data getCustomDataSchema(config, schemaConfig), // r2-files.dimensions getDimensionsSchema(config), // r2-files.storedFile getStoredFileSchema(config, schemaConfig), { name: `${config.schemaPrefix}.media`, title: 'Cloudflare R2 Media', type: 'object', components: { input: createInput(config), }, fields: [ { name: 'asset', title: 'Asset', type: 'reference', to: [{ type: `${config.schemaPrefix}.storedFile` }], validation: (Rule) => Rule.required(), }, ], }, ], }, 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: 'cloudflareR2', defaultAccept: userConfig.defaultAccept, schemaPrefix: userConfig.schemaPrefix || VENDOR_ID, toolTitle: (_a = userConfig.toolTitle) !== null && _a !== void 0 ? _a : 'Media Library (Cloudflare R2)', 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 || {})) })), }; }