add features hook for ease of lookup in rule decomposition
This commit is contained in:
parent
544f06d4d4
commit
4903c6b8a3
2 changed files with 20 additions and 8 deletions
|
@ -1,4 +1,4 @@
|
||||||
import React, { useState } from 'react';
|
import React, { useState, useEffect } from 'react';
|
||||||
import './PhonoChangeApplier.scss';
|
import './PhonoChangeApplier.scss';
|
||||||
import ls from 'local-storage';
|
import ls from 'local-storage';
|
||||||
|
|
||||||
|
@ -24,19 +24,30 @@ const PhonoChangeApplier = () => {
|
||||||
const [ options, setOptions ] = useState({output: 'default', save: false})
|
const [ options, setOptions ] = useState({output: 'default', save: false})
|
||||||
const [ results, setResults ] = useState([])
|
const [ results, setResults ] = useState([])
|
||||||
const [ errors, setErrors ] = useState({})
|
const [ errors, setErrors ] = useState({})
|
||||||
|
const [ features, setFeatures ] = useState([])
|
||||||
|
|
||||||
const runChanges = e => {
|
const runChanges = e => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
let ruleError = epochs.reduce((errorObject, epoch) => {
|
let ruleError = epochs.reduce((errorObject, epoch) => {
|
||||||
epoch.changes.map((change, index) => {
|
epoch.changes.map((change, index) => {
|
||||||
if (!change.match(/>.*\/.*_/)) errorObject[epoch.name]
|
if (!change.match(/>.*\/.*_/)) {
|
||||||
|
errorObject[epoch.name]
|
||||||
? errorObject[epoch.name].push(index)
|
? errorObject[epoch.name].push(index)
|
||||||
: errorObject[epoch.name] = [index]
|
: errorObject[epoch.name] = [index]
|
||||||
|
errorObject[epoch.name].ruleSyntaxError = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO validate phoneme syntax
|
||||||
|
let decomposedChange = change.split('>');
|
||||||
|
decomposedChange = [decomposedChange[0], ...decomposedChange[1].split('/')]
|
||||||
|
decomposedChange = [decomposedChange[0], decomposedChange[1], ...decomposedChange[2].split('_')];
|
||||||
|
|
||||||
})
|
})
|
||||||
return errorObject;
|
return errorObject;
|
||||||
}, {})
|
}, {})
|
||||||
|
|
||||||
|
|
||||||
if (Object.entries(ruleError).length) return setErrors(ruleError)
|
if (Object.entries(ruleError).length) return setErrors(ruleError)
|
||||||
setErrors({});
|
setErrors({});
|
||||||
|
|
||||||
|
@ -57,9 +68,9 @@ const PhonoChangeApplier = () => {
|
||||||
}
|
}
|
||||||
startingIndex = index;
|
startingIndex = index;
|
||||||
})
|
})
|
||||||
lexicalFeatureBundles.push({[lexeme]: lexemeBundle});
|
lexicalFeatureBundles.push(lexemeBundle);
|
||||||
})
|
})
|
||||||
console.log(lexicalFeatureBundles)
|
|
||||||
// apply sound changes
|
// apply sound changes
|
||||||
|
|
||||||
// handle output
|
// handle output
|
||||||
|
@ -68,7 +79,7 @@ const PhonoChangeApplier = () => {
|
||||||
return (
|
return (
|
||||||
<div className="PhonoChangeApplier" data-testid="PhonoChangeApplier">
|
<div className="PhonoChangeApplier" data-testid="PhonoChangeApplier">
|
||||||
<ProtoLang lexicon={lexicon} setLexicon={setLexicon}/>
|
<ProtoLang lexicon={lexicon} setLexicon={setLexicon}/>
|
||||||
<Features phonemes={phonemes} setPhonemes={setPhonemes}/>
|
<Features phonemes={phonemes} setPhonemes={setPhonemes} features={features} setFeatures={setFeatures}/>
|
||||||
<Epochs epochs={epochs} setEpochs={setEpochs} errors={errors}/>
|
<Epochs epochs={epochs} setEpochs={setEpochs} errors={errors}/>
|
||||||
<Options options={options} setOptions={setOptions} runChanges={runChanges}/>
|
<Options options={options} setOptions={setOptions} runChanges={runChanges}/>
|
||||||
<Output results={results} setResults={setResults}/>
|
<Output results={results} setResults={setResults}/>
|
||||||
|
|
|
@ -32,6 +32,7 @@ const Features = (props) => {
|
||||||
|
|
||||||
let newPhonemeObject = getPhonemesFromFeatureSubmission(props, newPhonemes, feature);
|
let newPhonemeObject = getPhonemesFromFeatureSubmission(props, newPhonemes, feature);
|
||||||
props.setPhonemes(newPhonemeObject);
|
props.setPhonemes(newPhonemeObject);
|
||||||
|
if (!props.features || !props.features.includes(feature)) props.setFeatures([...props.features, feature])
|
||||||
|
|
||||||
setFeature('');
|
setFeature('');
|
||||||
setNewPhonemes('');
|
setNewPhonemes('');
|
||||||
|
|
Loading…
Reference in a new issue