Nesta aula iremos adicionar a funcionalidade de upload. Como já temos o @adminjs/upload instalado em nosso projeto passaremos diretamente para sua configuração e inclusão.
No arquivo episode.ts da pasta resources adicionaremos as configuração da feature de upload. Adicione no arquivo o código mostrado abaixo:
Vale destacar que:
Também é necessário verificar o campo de upload nas propriedades dos formulário dentro do objeto de opções do recurso. Onde colocaríamos a propriedade “videoUrl” agora deve ser a propriedade “uploadVideo” como especificamos nas opções da feature. Essa propriedade virtual permitirá utilizar o componente DropZone para upload de arquivos.
// src/adminjs/resources/episode.ts
import path from 'path'
import uploadFileFeature from '@adminjs/upload'
import { FeatureType, ResourceOptions } from 'adminjs'
export const episodeResourceOptions: ResourceOptions = {
navigation: 'Catálogo',
editProperties: ['name', 'synopsis', 'courseId', 'order', 'uploadVideo', 'secondsLong' ],
filterProperties: ['name', 'synopsis', 'courseId', 'secondsLong', 'createdAt', 'updatedAt'],
listProperties: ['id', 'name', 'courseId', 'order', 'secondsLong'],
showProperties: ['id', 'name', 'synopsis', 'courseId', 'order', 'videoUrl', 'secondsLong', 'createdAt', 'updatedAt']
}
export const episodeResourceFeatures: FeatureType[] = [
uploadFileFeature({
provider: {
local: {
bucket: path.join(__dirname, '../../../uploads')
}
},
properties: {
key: 'videoUrl',
file: 'uploadVideo'
},
uploadPath: (record, filename) => `videos/course-${record.get('courseId')}/${filename}`
})
]
// src/adminjs/resources/index.ts
// ...
import { episodeResourceFeatures, episodeResourceOptions } from './episode'
// ...
},
{
resource: Episode,
options: episodeResourceOptions,
features: episodeResourceFeatures
},
{
//...
node_modules
uploads/videos