@theapexlab/ra-data-blitz
TypeScript icon, indicating that this package has built-in type declarations

0.0.13 • Public • Published

Blitz-js data provider for react-admin

Easily build fullstack backoffice apps with blitz-js and react-admin!

Check-out our official Demo app

Installation

npm install --save @theapexlab/ra-data-blitz

or

yarn add @theapexlab/ra-data-blitz

Usage

Add a new data model to your blitzjs project's prisma schema:

// in schema.prisma
model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String
}

Generate CRUD resolvers for the model by running the following command:

blitz generate crud post

Import blitzDataProvider from @theapexlab/ra-data-blitz and optionally define a searchEntities function:

// in App.js
import React from 'react';
import { Admin, Resource } from 'react-admin';
import blitzDataProvider from '@theapexlab/ra-data-blitz';
import { PostList } from './PostList';
import { PostEdit } from './PostEdit';
import { PostCreate } from './PostCreate';
import { invoke } from 'blitz';
import { Prisma } from 'db';

// specifies search functionality of postFilters
const searchEntities = (q: string): { user: Prisma.PostWhereInput } => ({
  // / NOTE: you can provide [prismaEnitityName]:  PrismaWhereInput pairs here
  post: {
    title: {
      contains: q,
    },
  },
});

// invoke is neccasary to call blitzjs RPC api
const dataProvider = blitzDataProvider({ invoke, searchEntities });

const ReactAdmin = () => {
  return (
    <Admin dataProvider={dataProvider}>
      <Resource name="posts" list={PostList} edit={PostEdit} create={PostCreate} />
    </Admin>
  );
};

export default ReactAdmin;
// in PostList.tsx
import { List, Datagrid, TextField, TextInput } from 'react-admin';

// NOTE: source must be "q" inorder to make search functionality work
const postFilters = [<TextInput key="search" source="q" label="Search" alwaysOn />];

export const PostList = props => (
  <List filters={postFilters} {...props} exporter={false}>
    <Datagrid rowClick="edit">
      <TextField source="id" />
      <TextField source="title" />
      <TextField source="content" />
    </Datagrid>
  </List>
);

Options

Customize root path of the resource

The default is to target resources under the app/ directory. if there is a program for the server, such as an API root, specify handlerRoot to avoid it.

// Change the default directory of handlerRoot from `app/` to `app/reactAdmin/`
const dataProvider = blitzDataProvider({ invoke, searchEntities, handlerRoot: 'reactAdmin' });

License

This data provider is licensed under the MIT License.

Package Sidebar

Install

npm i @theapexlab/ra-data-blitz

Weekly Downloads

9

Version

0.0.13

License

MIT

Unpacked Size

122 kB

Total Files

54

Last publish

Collaborators

  • zoll-e
  • attila-zsolt-danku
  • fidym
  • m4tty_d
  • barczag