rasa-nlu-trainer
Version:
This is a tool to edit your training examples for [rasa NLU](https://github.com/golastmile/rasa_nlu)
151 lines (139 loc) • 3.37 kB
JavaScript
// @flow
import immutable from 'object-path-immutable'
import testData from './testData.json'
import isOnline from '../utils/isOnline'
import pick from 'lodash/pick'
import {
EDIT,
DELETE_EXAMPLE,
SET_SELECTION,
FETCH_DATA,
SAVING_DONE,
EXPAND,
COLLAPSE,
OPEN_ADD_MODAL,
CLOSE_ADD_MODAL,
SAVE_AND_CLOSE_ADD_MODAL,
RESET,
} from './actions'
let exampleIDCounter = 0
function createExample({text='', intent='', entities=[]}) {
return {
text,
intent,
entities,
updatedAt: Date.now(),
isExpanded: false,
id: (++exampleIDCounter).toString(),
}
}
function prepareExamples(examples = []) {
return examples.map(example => createExample(example))
}
const INITIAL_STATE = {
filename: 'testData.json',
originalSource: isOnline ? testData : null,
examples: isOnline
? testData.rasa_nlu_data.common_examples.map(e => createExample(e))
: null,
isUnsaved: false,
selection: null,
idExampleInModal: null,
}
export default function reducer (
state: Object = INITIAL_STATE,
action: Object
): Object {
const { type, payload } = action
function getExampleIndex(_id: string) {
return state.examples.findIndex(({id}) => id === _id)
}
switch (type) {
case RESET: {
return {
...state,
examples: [],
isUnsaved: false,
selection: null,
idExampleInModal: null,
}
}
case EDIT: {
const { id, value } = payload
const update = pick(value, ['text', 'intent', 'entities'])
state = immutable.assign(
state,
`examples.${getExampleIndex(id)}`,
{ ...update, updatedAt: Date.now() },
)
return { ...state, isUnsaved: true }
}
case DELETE_EXAMPLE: {
const { id } = payload
state = immutable.del(
state,
`examples.${getExampleIndex(id)}`,
)
return { ...state, isUnsaved: true }
}
case SET_SELECTION: {
const { id, start, end } = payload
if (start === end) {
return state
}
return immutable.set(state, `selection`, { idExample: id, start, end })
}
case FETCH_DATA: {
const { data, path } = payload
return {
...state,
examples: prepareExamples(data.rasa_nlu_data.common_examples),
originalSource: data,
filename: path,
}
}
case SAVING_DONE: {
return {
...state,
isUnsaved: false,
}
}
case EXPAND: {
const { id } = payload
return immutable.set(
state,
`examples.${getExampleIndex(id)}.isExpanded`,
true,
)
}
case COLLAPSE: {
const { id } = payload
return immutable.set(
state,
`examples.${getExampleIndex(id)}.isExpanded`,
false,
)
}
case OPEN_ADD_MODAL: {
const example = createExample({})
state = immutable.push(
state,
`examples`,
example,
)
return immutable.set(state, `idExampleInModal`, example.id)
}
case CLOSE_ADD_MODAL: {
state = immutable.del(
state,
`examples.${getExampleIndex(state.idExampleInModal)}`,
)
return immutable.set(state, `idExampleInModal`, null)
}
case SAVE_AND_CLOSE_ADD_MODAL: {
return immutable.set(state, `idExampleInModal`, null)
}
default:
return state
}
}