English | [简体中文](/docs/zh/develop/3-13-Route-introduction.md)

# Usage

- Pages that need to display independently should configure route
  - According to the needs of the product, the page under submenu needs to display in page, for example `compute - instance`.
    - Resource list page
      - For example, instance list page.
      - Note that the relevant resource listings under the details page does not need to be configured
    - Resource detail page
      - For example, instance detail page.
    - Form that need whole page to show
      - For example, create instance page.
  - Some menus have only first-level page, such as `Home`, you also need to configure routing

# How to use

## The submenu corresponds to the route

- According to the requirements in the [catalog introduction](2-catalog-introduction.md), each first-level menu page has a separate folder under `pages`, the `containers` folder in it is used to place the submenu page code, `routes` folder is used to configure the route.
- Configuration is in `pages/xxxx/routes/index.js`
- The route configuration needs to follow a fixed format, see `src/pages/compute/routes/index.js`
  - List
  - Each child in the list, should follow:
    - `path`, first-level menu corresponding name, for example nova compute use `compute`.
    - `component`, layout components
      - Pages about `auth`, for example `login`, use `src/layouts/User/index.jsx`
      - Pages show after login, for example `instance`, use `src/layouts/Base/index.jsx`
        - The layout automatically handles the display of the `menu item`, the right side of the content `header`, `breadcrumber`, etc.
    - `routes`, The main content of the configuration is an array.
      - Take compute route as an example `src/pages/compute/routes/index.js` :

        ```javascript
        { path: `${PATH}/instance`, component: Instance, exact: true },
        ```

      - `path`, Path corresponding to each full page, for example `compute/instance`
      - `component`, the component corresponding to page, such as component under `containers`

- For resource-type pages, generally configured
  - List page, details page, complex creat page in console platform (simple creation generally uses modal)
  - List page, detail page in management platform (with `-admin`/`_admin` in path)
  - For detail page, we recommend using `id`
  - Take instance as an example `src/pages/compute/routes/index.js`

    ```javascript
    { path: `${PATH}/instance`, component: Instance, exact: true },
    { path: `${PATH}/instance-admin`, component: Instance, exact: true },
    {
      path: `${PATH}/instance/detail/:id`,
      component: InstanceDetail,
      exact: true,
    },
    {
      path: `${PATH}/instance-admin/detail/:id`,
      component: InstanceDetail,
      exact: true,
    },
    { path: `${PATH}/instance/create`, component: StepCreate, exact: true },
    ```

## The route corresponding to the first-level menu

- First-level menu should add in `src/core/routes.js`
- Take compute as an example

  ```javascript
  {
      path: '/compute',
      component: Compute,
    },
  ```
