//- -var variable =  {name: 'SaleOrderDetailStateMachine', ngStates: [{name: 'viewState', initialState: true}, {name: 'addState'}, {name: 'editState'}], ngRenderStates: [{name: 'canAdd', render: '(context) => context.state === \'viewState\''}, {name: 'canEdit', render: '(context) => context.state === \'viewState\''}, {name: 'canCancel', render: '(context) => context.state === \'addState\' || context.state === \'editState\''}], ngActions: [{name: 'add', transitTo: 'addState'}, {name: 'edit', transitTo: 'editState'}, {name: 'view', transitTo: 'viewState'}]};

| import { Injectable } from '@angular/core';
| import { StateMachine, State, NgState, RenderState,  NgRenderState, Action, NgAction } from '@farris/devkit';
= '\n'
= '\n'
| @Injectable()
| export class #{variable.externalPrefix}#{variable.name} extends StateMachine {
= '\n'
if variable.ngStates && variable.ngStates.length
  each ngState in variable.ngStates
    if ngState.initialState
      |   @NgState({
      |      initialState: true
      |   })
    else
      |   @NgState()
    = '\n'   
    |   #{ngState.name}: State;
    = '\n'
    = '\n'
if variable.ngRenderStates && variable.ngRenderStates.length
  each ngRenderState in variable.ngRenderStates
    |   @NgRenderState({
    |      render: !{ngRenderState.render}
    |   })
    |   #{ngRenderState.name}: RenderState;
    = '\n'
    = '\n'
if variable.ngActions && variable.ngActions.length
  each ngAction in variable.ngActions
    |   @NgAction({
    = '\n'
    if ngAction.precondition
      |      precondition: #{ngAction.precondition},
      = '\n'
    if ngAction.transitTo
      |      transitTo: '#{ngAction.transitTo}'
      = '\n'
    |   })
    |   #{ngAction.name}: Action;
    = '\n'
    = '\n'
|}
= '\n'
= '\n'