Adonis Cockpit has been build with extensibility in mind by giving you a BaseResource
abstract class to connect with any kind of datasource.
// title: app/cockpit/custom_resource.ts
import { BaseResource } from 'adonis-cockpit'
type Record = {
id : string
name : string
}
export default class CustomResource < Record > extends BaseResource {
name () {
return 'custom'
}
// ...
}
// title: start/cockpit.ts
import cockpit from 'adonis-cockpit/services/main'
import CustomResource from '#cockpit/custom_resource'
cockpit. register (CustomResource)
The idKey
correspond to the propertyKey of your record identifier.
export default class CustomResource < Record > extends BaseResource {
idKey () {
return 'id'
}
}
The titleKey
is used to display the title/name of a record.
export default class CustomResource < Record > extends BaseResource {
titleKey () {
return 'name'
}
}
The slug is used to generate the different routes in your Cockpit panel. It is optional as it defaults to the pluralized name of your resource.
export default class CustomResource < Record > extends BaseResource {
slug () {
return 'customs'
}
}
The labels are the friendly name of your resource. It is optional as it defaults to the capitalized name of your resource.
export default class CustomResource < Record > extends BaseResource {
name () {
return 'Custom'
}
namePlural () {
return 'Customs'
}
}
The retrieve
method is used to retrieve a single record using the idKey
.
export default class CustomResource < Record > extends BaseResource {
retrieve ( id : RecordId ) : Promise < Record > {
return customApi. find (id)
}
}
The create
method is used to create a single record.
export default class CustomResource < Record > extends BaseResource {
create ( data : any ) : Promise < Record > {
return customApi. create (data)
}
}
The list
method is used to list records. It must return a SimplePaginator
containing your records.
export default class CustomResource < Record > extends BaseResource {
list ( params : ApiIndexParams ) : Promise < SimplePaginator < Record >> {
const result = customApi. list (params)
return new SimplePaginator (result.total, result.perPage, result.page, ... result.items)
}
}
The delete
method is used to delete one or multiple records with their ids.
export default class CustomResource < Record > extends BaseResource {
delete ( ... ids : RecordId []) : Promise < void > {
const promises = ids. map (( id ) => customApi. delete (id))
return promises. all ()
}
}