npm package: @gem-mine/fish-compatible
Description: Fish Docs v3 to v4 compatible package
Latest version: 1.0.1

# Fish Docs Compatible

[![NPM version](https://img.shields.io/npm/v/@ant-design/compatible.svg?style=flat)](https://npmjs.org/package/@ant-design/compatible)
[![NPM downloads](http://img.shields.io/npm/dm/@ant-design/compatible.svg?style=flat)](https://npmjs.org/package/@ant-design/compatible)
[![CircleCI](https://circleci.com/gh/ant-design/compatible.svg?style=svg)](https://circleci.com/gh/ant-design/compatible)

## Install

```bash
yarn add @gem-mine/fish-compatible
```

## Usage

Helps you to compatible different components between v3 and v4.

Follow Component are provided compatible version:

- Form
- Icon
- Mention

```jsx
import { Form } from '@gem-mine/fish-compatible';

import '@gem-mine/fish-compatible/assets/index.css'; // If you need
```

## Introduction

### Form

Form of v3 api is different with v4:

```jsx
// V3
import { Form, Input, Button } from 'fish';

class MyForm extends React.Component {
  render() {
    const { form } = this.props;
    return (
      <Form>
        {form.getFieldDecorator('username')(<Input />)}
        <Button>Submit</Button>
      </Form>
    );
  }
}

export default Form.create()(MyForm);
```

Change to:

```jsx
// V4 with compatible
import { Form as LegacyForm } from '@gem-mine/fish-compatible';
import { Input, Button } from 'fish';
import '@gem-mine/fish-compatible/assets/index.css';

class MyForm extends React.Component {
  render() {
    const { form } = this.props;
    return (
      <LegacyForm>
        {form.getFieldDecorator('username')(<Input />)}
        <Button>Submit</Button>
      </LegacyForm>
    );
  }
}

export default Form.create()(MyForm);
```

### Icon

Just import `Icon` from package `@gem-mine/fish-compatible` and the reset is almost same as before.

```jsx
// V3
import { Icon, Button } from 'fish';

class MyIconList extends React.Component {
  render() {
    return (
      <div className="icons-list">
        <Button>hello button</Button>
        <Icon type="home" />
        <Icon type="setting" theme="filled" />
        <Icon type="smile" theme="outlined" />
        <Icon type="sync" spin />
        <Icon type="smile" rotate={180} />
        <Icon type="loading" />
      </div>
    );
  }
}

export default MyIconList;
```

Change to:

```jsx
// V4 with compatible
import { Icon as LegacyIcon } from '@gem-mine/fish-compatible';

class MyIconList extends React.Component {
  render() {
    return (
      <div className="icons-list">
        <Button>hello button</Button>
        <LegacyIcon type="home" />
        <LegacyIcon type="setting" theme="filled" />
        <LegacyIcon type="smile" theme="outlined" />
        <LegacyIcon type="sync" spin />
        <LegacyIcon type="smile" rotate={180} />
        <LegacyIcon type="loading" />
      </div>
    );
  }
}

export default MyIconList;
```

### Mention

The legacy usage in v3

```jsx
import { Mention } from 'fish';

const { toString } = Mention;

ReactDOM.render(
  <Mention
    style={{ width: '100%' }}
    onChange={onChange}
    defaultSuggestions={[
      'afc163',
      'benjycui',
      'yiminghe',
      'RaoHai',
      '中文',
      'にほんご',
    ]}
    onSelect={onSelect}
    placement="top"
  />,
  mountNode,
);
```

Compatible usage in v4

```jsx
import { Mention } from '@gem-mine/fish-compatible';
import '@gem-mine/fish-compatible/assets/index.css';

const { toString } = Mention;

ReactDOM.render(
  <Mention
    style={{ width: '100%' }}
    onChange={onChange}
    defaultSuggestions={[
      'afc163',
      'benjycui',
      'yiminghe',
      'RaoHai',
      '中文',
      'にほんご',
    ]}
    onSelect={onSelect}
    placement="top"
  />,
  mountNode,
);
```

## FAQ

### Missing `Grid` style when use `Form`.

You should import `Grid` style by youself.

```js
import 'fish/es/grid/style/css'; // By CSS
// import 'fish/es/grid/style';         // By LESS
```