bootstrap-styled/ra-ui

Codesandbox template for reporting bug

Opened this issue · 0 comments

kopax commented

Problem to solve

In order to improve the debugging and issues experience, it would be efficient to have the equivalent of the test application of ra-ui, available in a codesandbox.io

Target audience

Developers that use @bootstrap-styled/ra-ui

Further details

Goals:

  • Show error/warning and test bug between versions using live editor.

Proposal

By creating a boilerplate link that people can fork on codesandbox. It will be exactly as the demo of this project, a create-react-app application that use a fake data provider to serve the data.

What does success look like, and how can we measure that?

People should be able to purpose a source such as this without writting a lot of boilerplate code:

import React from 'react';
import {
  ShowButton,
  EditButton,
  DeleteButton,
  List,
  Datagrid,
  Filter,
  TextField,
  DateField,
  BooleanField,
  TextInput,
  DisabledInput,
  BooleanInput,
  Edit,
  Show,
  Create,
  ReferenceInput,
  SelectInput,
  SimpleForm,
  SimpleShowLayout,
  ReferenceField,
  ReferenceArrayField,
  SingleFieldList,
  ChipField,
} from '@bootstrap-styled/ra-ui';

export const ProjectCreate = (props) => (
  <Create {...props}>
    <SimpleForm>
      <TextInput source="name" />
      <ReferenceInput source="visibility.id" reference="projectVisibilities" allowEmpty>
        <SelectInput optionText="visibility" />
      </ReferenceInput>
      <ReferenceInput source="companyId" reference="companies" allowEmpty>
        <SelectInput optionText="name" />
      </ReferenceInput>
    </SimpleForm>
  </Create>
);


export const ProjectFilter = (props) => (
  <Filter {...props}>
    <TextInput source="id" />
    <TextInput source="name" />
  </Filter>
);

export const ProjectList = (props) => (
  <List
    {...props}
    sort={{ field: 'id', order: 'DESC' }}
    filters={<ProjectFilter />}
  >
    <Datagrid striped hover>
      <TextField source="name" />
      {/*<ReferenceField source="companyId" reference="companies" allowEmpty>*/}
        {/*<TextField source="name" />*/}
      {/*</ReferenceField>*/}
      <ShowButton size="sm" />
    </Datagrid>
  </List>
);

export const ProjectTitle = ({ record }) => {
  return <span>{record ? `#${record.id} ${record.name}` : ''}</span>;
};

export const ProjectEdit = (props) => {
  return (
    <Edit title={<ProjectTitle />} {...props}>
      <SimpleForm>
        <DisabledInput source="id" />
        <TextInput source="name" />
        <ReferenceInput source="visibility.visibilityId" reference="projectVisibilities" allowEmpty>
          <SelectInput optionText="visibility" />
        </ReferenceInput>
        <ReferenceInput source="companyId" reference="companies" allowEmpty>
          <SelectInput optionText="name" />
        </ReferenceInput>
      </SimpleForm>
    </Edit>
  );
};


export const ProjectShow = (props) => (
  <Show {...props}>
    <SimpleShowLayout>
      <TextField source="id" />
      <TextField source="name" />
      <TextField source="visibility.visibilityId" />
      <ReferenceArrayField
        source="projectServiceIdList"
        reference="projectServices"
      >
        <SingleFieldList>
          <ChipField source="name" />
        </SingleFieldList>
      </ReferenceArrayField>
    </SimpleShowLayout>
  </Show>
);

Links / references