npm package: @frctl/fractal-extension-statuses
Description: Configurable workflow statuses for your Fractal components
Latest version: 0.1.4

# Fractal statuses extension

Configurable workflow statuses for your Fractal components :vertical_traffic_light:

[![Build Status](https://img.shields.io/travis/frctl/fractal-extension-statuses/master.svg?style=flat-square)](https://travis-ci.org/frctl/fractal-extension-statuses) [![NPM Version](https://img.shields.io/npm/v/@frctl/fractal-extension-statuses.svg?style=flat-square)](https://www.npmjs.com/package/@frctl/fractal-extension-statuses)

> This plugin is for use with the **work-in-progress Fractal v2 release** and will not work with earlier versions.

## Overview

This extension lets you define a set of statuses which can be applied to your components via their config files.

```javascript
const statuses = require('@frctl/fractal-extension-statuses');
const fractal = require('@frctl/fractal')({
  src: 'path/to/components'
});

fractal.addExtension(statuses({
  default: 'wip',
  options: [
    {
      name: 'wip',
      label: 'In progress',
      color: 'red'
    },
    {
      name: 'ready',
      label: 'Ready',
      color: 'green'
    }
  ]
}));

fractal.parse((err, components) => {
  if (err) {
    return console.log(err);
  }

  const button = components.find('button');
  console.log(button.status); // {name: 'ready', label: 'Ready', color: 'green' }

  for (const status of components.getStatuses()) {
    //... do something with `status`
  }

  for (const component of components.filterByStatus('ready')) {
    //... do something with `component`
  }

});
```

## Installation

```bash
npm i @frctl/fractal-extension-statuses --save
```

## Usage

To give a component a status, add a `status` property to it's configuration file with the `name` of the appropriate status:

```
// @component/config.json
{
  "status": "ready"
}
```

### Default statuses

The following default statuses are defined:

```
{
  name: 'prototype',
  label: 'Prototype',
  color: 'red'
},
{
  name: 'wip',
  label: 'In progress',
  color: 'orange'
},
{
  name: 'ready',
  label: 'Ready',
  color: 'green'
}
```

Unless otherwise specified, the default status is `prototype`.

### Custom statuses

To add your own set of statuses, pass a set of status objects as an `options` array when initialising the extension:

```js
const statusesExtension = require('@frctl/fractal-extension-statuses');
const myStatuses = statusesExtension({
  options: [
    // custom set of statuses
  ]
});

fractal.addExtension(myStatuses);
```

Each status object should have `name`, `label` and `color` properties, and can optionally have any other additional properties that you require.

### API

#### Properties:

The extension adds a `.status` property to each component.

The value of this property will be a status object that matches the one specified in the component's config file. If no status is specified, the default status will be used.

### API methods:

The extension provides the following API methods:

* `components.getStatuses()` - Returns an array of all possible statuses
* `components.filterByStatus(status)` - Returns an array of components that have been assigned the specified status

## Requirements

Node >= v6.0 is required.