Skip to content
Snippets Groups Projects
App.tsx 3.63 KiB
Newer Older
import * as React from "react";
import {
  Admin,
  Create,
  CreateProps,
  Filter,
  FilterProps,
  SearchInput,
  Edit,
  SimpleForm,
  TextInput,
  NumberInput,
  ReferenceInput,
  AutocompleteInput,
  Show,
  SimpleShowLayout,
Frank Bessou's avatar
Frank Bessou committed
  DataProvider,
  ReferenceArrayField,
import { client } from "@logilab/cwclientlibjs";
Frank Bessou's avatar
Frank Bessou committed
import { createDataProvider } from "ra-cubicweb/dist";
Frank Bessou's avatar
Frank Bessou committed
import { schema } from "./schema";
Frank Bessou's avatar
Frank Bessou committed
const MuseumShow = (props: ShowProps) => (
  <Show {...props}>
    <SimpleShowLayout>
      <TextField source="id" />
      <TextField source="name" />
      <TextField source="postal_address" />
      <ReferenceField label="City" link="show" reference="City" source="is_in">
        <TextField source="name" />
      </ReferenceField>
      <NumberField source="longitude" />
      <NumberField source="latitude" />
    </SimpleShowLayout>
  </Show>
);

Frank Bessou's avatar
Frank Bessou committed
const MuseumEdit = (props: EditProps) => (
  <Edit {...props}>
    <SimpleForm>
Frank Bessou's avatar
Frank Bessou committed
      <NumberInput source="id" />
      <TextInput source="name" />
      <NumberInput source="latitude" />
      <NumberInput source="longitude" />
      <TextInput source="postal_address" />
const MuseumCreate = (props: CreateProps) => (
  <Create {...props}>
    <SimpleForm>
      <TextInput source="name" />
      <NumberInput source="latitude" />
      <NumberInput source="longitude" />
      <TextInput source="postal_address" />
      <ReferenceInput
        label="City"
        source="is_in"
        reference="City"
        sort={{ field: "name", order: "ASC" }}
        filterToQuery={(text: string) => ({ name: text })}
      >
        <AutocompleteInput optionText="name" />
      </ReferenceInput>
    </SimpleForm>
  </Create>
);

const MuseumFilter = (props: Omit<FilterProps, "children">) => (
  <Filter {...props}>
    <SearchInput source="name" alwaysOn />
  </Filter>
);

Frank Bessou's avatar
Frank Bessou committed
const MuseumList = (props: ListProps) => (
  <List {...props} filters={<MuseumFilter />}>
    <Datagrid rowClick="show">
      <NumberField source="id" />
Frank Bessou's avatar
Frank Bessou committed
      <TextField source="name" />
      <NumberField source="latitude" />
      <NumberField source="longitude" />
      <TextField source="postal_address" />
Frank Bessou's avatar
Frank Bessou committed
const CityList = (props: ListProps) => (
  <List {...props}>
    <Datagrid rowClick="show">
      <TextField source="id" />
      <TextField source="name" />
      <NumberField source="zip_code" />
Frank Bessou's avatar
Frank Bessou committed
const CityShow = (props: ShowProps) => (
  <Show {...props}>
    <SimpleShowLayout>
      <TextField source="id" />
      <TextField source="name" />
      <NumberField source="zip_code" />
Frank Bessou's avatar
Frank Bessou committed
      <ReferenceArrayField
        label="Museum"
        reference="Museum"
        source="reverse_is_in"
      >
        <Datagrid rowClick="show">
Frank Bessou's avatar
Frank Bessou committed
          <TextField source="name" />
        </Datagrid>
      </ReferenceArrayField>
const httpClient = new client.CwSimpleHttpClient("http://localhost:8080", true);
const rqlClient = new client.CwRqlClient(httpClient);

const dataProvider = createDataProvider(rqlClient, schema);
Frank Bessou's avatar
Frank Bessou committed

const App = (): JSX.Element => (
Frank Bessou's avatar
Frank Bessou committed
  <Admin dataProvider={dataProvider as DataProvider}>
    {
      // authProvider={authProvider}
      // use cwclientlibjs to get list of CWETypes
      // and add one <Resource  per type
    }
Frank Bessou's avatar
Frank Bessou committed
    <Resource
      name="Museum"
      list={MuseumList}
Frank Bessou's avatar
Frank Bessou committed
      edit={MuseumEdit}
      create={MuseumCreate}
Frank Bessou's avatar
Frank Bessou committed
    />
    <Resource name="City" list={CityList} show={CityShow} />