This is the heart of entire AdminJS - all options resides here.
Usage with regular javascript
const AdminJS = require('adminjs')
//...
const adminJS = new AdminJS({
rootPath: '/xyz-admin',
logoutPath: '/xyz-admin/exit',
loginPath: '/xyz-admin/sign-in',
databases: [mongooseConnection],
resources: [{ resource: ArticleModel, options: {...}}],
branding: {
companyName: 'XYZ c.o.',
},
})
TypeScript
import { AdminJSOptions } from 'adminjs'
const options: AdminJSOptions = {
rootPath: '/xyz-admin',
logoutPath: '/xyz-admin/exit',
loginPath: '/xyz-admin/sign-in',
databases: [mongooseConnection],
resources: [{ resource: ArticleModel, options: {...}}],
branding: {
companyName: 'XYZ c.o.',
},
}
const adminJs = new AdminJS(options)
Members
string
# assetsCDN Optional
- components.bundle.js
- global.bundle.js
- design-system.bundle.js
- app.bundle.js should be taken from the same server as other AdminJS routes (default) or should be taken from an external CDN.
If set - bundles will go from given CDN if unset - from the same server.
When you can use this option? So let's say you want to deploy the app on serverless environment like Firebase Cloud Functions. In that case you don't want to serve static files with the same app because your function will be invoked every time frontend asks for static assets.
Solution would be to:
- create
public
folder in your app - generate
bundle.js
file to.adminjs/
folder by using AdminJS#initialize function (with process.env.NODE_ENV set to 'production'). - copy the before mentioned file to
public
folder and rename it to components.bundle.js - copy './node_modules/adminjs/lib/frontend/assets/scripts/app-bundle.production.js' to './public/app.bundle.js',
- copy './node_modules/adminjs/lib/frontend/assets/scripts/global-bundle.production.js' to './public/global.bundle.js'
-
- copy './node_modules/adminjs/node_modules/@adminjs/design-system/bundle.production.js' to './public/design-system.bundle.js'
- host entire public folder under some domain (if you use firebase - you can host them with firebase hosting)
- point AdminJS.assetsCDN to this domain
BrandingOptions
|
BrandingOptionsFunction
# branding Optional
object
# dashboard Optional
Properties:
Name | Type | Attributes | Description |
---|---|---|---|
handler |
PageHandler
|
<optional> |
Handler function which can be triggered using ApiClient#getDashboard. |
component |
string
|
<optional> |
Bundled component name which should be rendered when user opens the dashboard |
Record.<string, string>
# env Optional
So let say you want to pass some GOOGLE_MAP_API_TOKEN to the frontend. You can do this by adding it here:
new AdminJS({env: {
GOOGLE_MAP_API_TOKEN: 'my-token',
}})
and this token will be available on the frontend by using:
AdminJS.env.GOOGLE_MAP_API_TOKEN
Locale
# locale Optional
- localize admin panel
- change any arbitrary text in the UI
This is the example for changing name of a couple of resources along with some properties to Polish
{
...
locale: {
language: 'pl',
translations: {
labels: {
Comments: 'Komentarze',
}
resources: {
Comments: {
properties: {
name: 'Nazwa Komentarza',
content: 'Zawartość',
}
}
}
}
}
}
As I mentioned you can use this technic to change any text even in english. So to change button label for a "new action" from default "Create new" to "Create new Comment" only for Comment resource you can do:
{
...
locale: {
translations: {
resources: {
Comments: {
actions: {
new: 'Create new Comment',
}
}
}
}
}
}
Check out the i18n tutorial to see how internationalization in AdminJS works.
AdminPages
# pages Optional
Example
pages: {
customPage: {
label: "Custom page",
handler: async (request, response, context) => {
return {
text: 'I am fetched from the backend',
}
},
component: AdminJS.bundle('./components/some-stats'),
},
anotherPage: {
label: "TypeScript page",
component: AdminJS.bundle('./components/test-component'),
},
}
Array.<(ResourceWithOptions|any)>
# resources Optional
You can pass either resource or resource with an options and thus modify it.
Properties:
Name | Type | Description |
---|---|---|
resources[].resource |
any
|
|
resources[].options |
ResourceOptions
|
|
resources[].features |
Array.<FeatureType>
|
VersionSettings
# version Optional
Type Definitions
object
# AdminPage
Properties:
Name | Type | Attributes | Description |
---|---|---|---|
handler |
PageHandler
|
<optional> |
Handler function |
component |
string
|
Component defined by using AdminJS.bundle |
|
icon |
string
|
<optional> |
Page icon |
object
# Assets
Properties:
Name | Type | Attributes | Description |
---|---|---|---|
styles |
Array.<string>
|
<optional> |
List to urls of custom stylesheets. You can pass your font - icons here (as an example) |
scripts |
Array.<string>
|
<optional> |
List of urls to custom scripts. If you use some particular js, library - you can pass its url here. |
coreScripts |
CoreScripts
|
<optional> |
Mapping of core scripts in case you want to version your assets |
# AssetsFunction(adminopt) → {Assets|Promise.<Assets>}
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
admin |
CurrentAdmin
|
<optional> |
object
# BrandingOptions
You can use them to change how AdminJS looks. For instance to change name and colors (dark theme) run:
new AdminJS({
branding: {
companyName: 'John Doe Family Business',
theme,
}
})
Properties:
Name | Type | Attributes | Description |
---|---|---|---|
logo |
string
|
false
|
<optional> |
URL to a logo, or |
companyName |
string
|
<optional> |
Name of your company, which will replace "AdminJS". |
theme |
Partial.<ThemeOverride>
|
<optional> |
CSS theme. |
softwareBrothers |
boolean
|
<optional> |
Flag indicates if |
favicon |
string
|
<optional> |
URL to a favicon |
# BrandingOptionsFunction(adminopt) → {BrandingOptions|Promise.<BrandingOptions>}
function returning BrandingOptions.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
admin |
CurrentAdmin
|
<optional> |
BrandingOptions
|
Promise.<BrandingOptions>
object
# BundlerOptions
Properties:
Name | Type | Attributes | Description |
---|---|---|---|
babelConfig |
BabelConfig
|
string
|
<optional> |
The file path to babel config file or json object of babel config. |
Example
const adminJS = new AdminJS({
resources: [],
rootPath: '/admin',
babelConfig: './.adminJS.babelrc'
})
# FeatureType(options) → {ResourceOptions}
Parameters:
Name | Type | Description |
---|---|---|
options |
ResourceOptions
|
Options returned by the feature added before |
object
# Locale
Properties:
Name | Type | Description |
---|---|---|
language |
string
|
Language ISO string like: 'en' 'pl' or 'de' |
translations |
Partial.<LocaleTranslations>
|
All the translations. |
Object
# LocaleTranslations
sections/blocks like actions, properties, buttons, labels and messages, but also the same sections can can be nested under 'resources' property.
This allows you to define translations either for entire UI or for a specific resource. Take a look at this example:
{
translations: {
buttons: {
save: 'Save it',
},
resources: {
Comments: {
buttons: {
save: 'Save this comment'
}
}
}
}
}
In the example above all save buttons will be named: 'Save it'. All but save button in Comments resource. Where the button name will be: Save this comment.
Properties:
Name | Type | Attributes | Description |
---|---|---|---|
actions |
Record.<string, string>
|
<optional> |
translated action labels |
properties |
Record.<string, string>
|
<optional> |
translated resource properties |
messages |
Record.<string, string>
|
<optional> |
translated messages |
buttons |
Record.<string, string>
|
<optional> |
translated button labels |
labels |
Record.<string, string>
|
<optional> |
translated labels |
resources |
Record.<string, object>
|
<optional> |
optional resources sub-translations |
resourceId |
Record.<string, object>
|
Id of a resource from the database. i.e. Comments for comments mongoose collection |
|
resourceId.actions |
Record.<string, string>
|
<optional> |
|
resourceId.properties |
Record.<string, string>
|
<optional> |
|
resourceId.messages |
Record.<string, string>
|
<optional> |
|
resourceId.buttons |
Record.<string, string>
|
<optional> |
|
resourceId.labels |
Record.<string, string>
|
<optional> |
object
# PageContext
Properties:
Name | Type | Attributes | Description |
---|---|---|---|
_admin |
AdminJS
|
current instance of AdminJS. You may use it to fetch other Resources by their names: |
|
currentAdmin |
CurrentAdmin
|
<optional> |
Currently logged in admin |
h |
ViewHelpers
|
view helpers |
# PageHandler(request, response, context)
Parameters:
Name | Type | Description |
---|---|---|
request |
any
|
|
response |
any
|
|
context |
PageContext
|
object
# ResourceWithOptions
Properties:
Name | Type | Attributes | Description |
---|---|---|---|
resource |
any
|
||
options |
ResourceOptions
|
||
features |
Array.<FeatureType>
|
<optional> |
object
# VersionSettings
Properties:
Name | Type | Attributes | Description |
---|---|---|---|
admin |
boolean
|
<optional> |
if set to true - current admin version will be visible |
app |
string
|
<optional> |
Here you can pass any arbitrary version text which will be seen in the US., You can pass here your current API version. |