adminjs-typeorm-relations
v4.0.7
Published
TypeORM adapter for AdminJS fix custom fix for filter by relations
Downloads
136
Maintainers
Readme
adminjs-typeorm
This is an official AdminJS adapter which integrates TypeORM into AdminJS. (originally forked from Arteha/admin-bro-typeorm)
Installation: yarn add @adminjs/typeorm
Usage
The plugin can be registered using standard AdminJS.registerAdapter
method.
import { Database, Resource } from '@adminjs/typeorm'
import AdminJS from 'adminjs'
AdminJS.registerAdapter({ Database, Resource });
// Optional: if you use class-validator you have to inject this to resource.
import { validate } from 'class-validator'
Resource.validate = validate
Example
import {
BaseEntity,
Entity, PrimaryGeneratedColumn, Column,
ManyToOne,
RelationId
} from 'typeorm'
import { MyDataSource } from './my-data-source'
import * as express from 'express'
import { Database, Resource } from '@adminjs/typeorm'
import { validate } from 'class-validator'
import AdminJS from 'adminjs'
import * as AdminJSExpress from '@adminjs/express'
Resource.validate = validate
AdminJS.registerAdapter({ Database, Resource })
@Entity()
export class Person extends BaseEntity
{
@PrimaryGeneratedColumn()
public id: number;
@Column({type: 'varchar'})
public firstName: string;
@Column({type: 'varchar'})
public lastName: string;
@ManyToOne(type => CarDealer, carDealer => carDealer.cars)
organization: Organization;
// in order be able to fetch resources in adminjs - we have to have id available
@RelationId((person: Person) => person.organization)
organizationId: number;
// For fancy clickable relation links:
public toString(): string
{
return `${firstName} ${lastName}`;
}
}
( async () =>
{
await MyDataSource.initialize();
const adminJs = new AdminJS({
// databases: [MyDataSource],
resources: [
{ resource: Person, options: { parent: { name: 'foobar' } } }
],
rootPath: '/admin',
})
const app = express()
const router = AdminJSExpress.buildRouter(adminJs)
app.use(adminJs.options.rootPath, router)
app.listen(3000)
})()
ManyToOne
Admin supports ManyToOne relationship but you also have to define @RealationId as stated in the example above.
Contribution
Running the example app
If you want to set this up locally this is the suggested process:
- fork the repo
- Install dependencies
yarn install
- register this package as a (linked package)[https://classic.yarnpkg.com/en/docs/cli/link/]
yarn link
- Setup example app
Install all dependencies and use previously linked version of @adminjs/typeorm
.
cd example-app
yarn install
yarn link @adminjs/typeorm
Optionally you might want to link your local version of adminjs
package
Make sure you have all the envs set (which are defined in
example-app/ormconfig.js
)Build the package in watch mode
(in the root folder)
yarn dev
- run the app in the dev mode
cd example-app
yarn dev
Pull request
Before you make a PR make sure all tests pass and your code wont causes linter errors. You can do this by running:
yarn lint
yarn test
or with proper envs: POSTGRES_USER=yourtestuser POSTGRES_DATABASE="database_test" yarn test