1.2.0 • Published 1 year ago

adminjs-adonis v1.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Admin Js Adonis

Adapter & Plugin package to use AdminJS with AdonisJS.

Getting Started

Installation

# using npm:

npm install --save adminjs-adonis adminjs

# or using yarn:
yarn add adminjs-adonis adminjs

After this, run:

node ace configure adminjs-adonis

Configuration

The configuration for this package resides in config/adminjs.ts. Checkout templates/config.txt for configuration options.

Model Customization

This package aims to auto-detect correct types of most of model columns but there are still some cases where it fails (for example: Enums, Attachments, nullable types etc) due to limitations of reflect-metadata package.

For this purpose, there is a @adminColumn decorator which you can use to inform the adapter how exactly you want a particular column to be displayed (or not displayed at all).

// User.ts
import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm'
import { adminColumn } from '@ioc:Adonis/Addons/AdminJS'

export enum UserType {
    STUDENT = 1,
    TEACHER = 2,
}

export class User extends BaseModel {
    @column({ isPrimary: true })
    public id: number

    @column()
    public username: string

    @column()
    @adminColumn({
        // password won't be visible on the list or show page
        visible: false
    })
    public password: string

    @column()
    @adminColumn({
        enum: UserType 
        // type will now be rendered as a select box
        // and will display the choices as text rather than numbers
    })
    public type: UserType

    @column()
    @adminColumn({
        // By default, `number | null` type is parsed as string
        type: "number",
        // By default, every field is required except the primary key
        optional: true,
    })
    public teachingNumber: number | null
}

For full options provided by adminColumn decorator, visit here

Hooks

This package also provides hooks for lifecycle management. These hooks are:

  • beforeCreate
  • beforeUpdate
  • beforeDelete
  • beforeFind
  • beforeFetch
  • afterCreate
  • afterUpdate
  • afterDelete
  • afterFind
  • afterFetch

They work the same as AdonisJS' hooks and when these hooks are called, corresponding AdonisJS hooks are also executed. For example: when user is creating a new object, then the order of hooks is: 1. beforeCreate (of admin) 2. beforeCreate (of AdonisJS) 3. beforeSave (of AdonisJS) 4. afterCreate (of AdonisJS) 5. afterSave (of AdonisJS) 6. afterCreate (of admin)

Note: There is no beforeSave or afterSave hook in this package

Example:

// User.ts
import { beforeCreate, beforeUpdate } from '@ioc:Adonis/Addons/AdminJS'
import Hash from '@ioc:Adonis/Core/Hash'
import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm'

export class User extends BaseModel {
    @column({ isPrimary: true })
    public id: number

    @column()
    public username: string

    @column()
    public password: string

    @beforeCreate()
    @beforeUpdate()
    public static async setPasswordIfDirty(instance: User) {
        if (instance.$dirty.password) {
            instance.password = await Hash.make(instance.password)
        }
    }
}
1.2.0

1 year ago

1.1.1

1 year ago

1.1.0

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago