From fedeb0c104b4187124aafcc187b66fb7a1d54243 Mon Sep 17 00:00:00 2001 From: Malar Kannan Date: Thu, 13 Jul 2017 19:37:42 +0530 Subject: [PATCH] computing entries from redux xmldata --- src/LexSetup.tsx | 85 ++++++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 39 deletions(-) diff --git a/src/LexSetup.tsx b/src/LexSetup.tsx index e1cdbad..d161d2a 100644 --- a/src/LexSetup.tsx +++ b/src/LexSetup.tsx @@ -21,48 +21,55 @@ const fieldMetaMap = { lang: { lens: '$.id', type: 'select', options: ['en', 'es'] }, }; +const xmlToEntries = (xmlData: any) => { + let allEntries = _.chain(xmlData) + .get('document.lexicon[0].item') + .flatMap((o: any) => _.chain(o) + .get('entry') + .map((p: any) => _.chain(p) + .get('lang[0]') + .set('guid[0]', o.$.guid) + .value()) + .value() + ) + .value(); + let langReducer = ((result: any, q: any) => { + let lang = _.get(q, fieldMetaMap.lang.lens, 'en'); + (result[lang] || (result[lang] = [])).push(q); + return result; + }); + let langEntries = _.reduce(allEntries, langReducer, {}); + let langs = _.keys(langEntries); + let selectFields = _.fromPairs(langs.map((lang) => { + let langOpts = _.fromPairs(_.keys(fieldMetaMap).filter((s) => { + return fieldMetaMap[s].type === 'select'; + }).map((s) => { + let lens = fieldMetaMap[s].lens; + let entries = _.get(langEntries, lang, 'en'); + let selectOptions = _.uniq(entries.map((q: any) => { + return _.get(q, lens, ''); + })); + return [s, selectOptions]; + })); + return [lang, langOpts]; + })); + return ({ + allEntries, selectFields, fieldMetaMap + }); +}; + export class LexSetup extends React.Component { + constructor(props: any) { + super(props); + this.state = { xmlLoaded: false }; + } public componentDidMount() { fetch(this.props.fileName) .then((response) => response.text()) .then((xmlString) => { - XML.parseString(xmlString, (err, lexData) => { - let allEntries = _.chain(lexData) - .get('document.lexicon[0].item') - .flatMap((o: any) => _.chain(o) - .get('entry') - .map((p: any) => _.chain(p) - .get('lang[0]') - .set('guid[0]', o.$.guid) - .value()) - .value() - ) - .value(); - - let langReducer = ((result: any, q: any) => { - let lang = _.get(q, fieldMetaMap.lang.lens, 'en'); - (result[lang] || (result[lang] = [])).push(q); - return result; - }); - let langEntries = _.reduce(allEntries, langReducer, {}); - let langs = _.keys(langEntries); - let selectFields = _.fromPairs(langs.map((lang) => { - let langOpts = _.fromPairs(_.keys(fieldMetaMap).filter((s) => { - return fieldMetaMap[s].type === 'select'; - }).map((s) => { - let lens = fieldMetaMap[s].lens; - let entries = _.get(langEntries, lang, 'en'); - let selectOptions = _.uniq(entries.map((q: any) => { - return _.get(q, lens, ''); - })); - return [s, selectOptions]; - })); - return [lang, langOpts]; - })); - this.props.addXmlData(lexData); - this.setState({ - allEntries, selectFields, fieldMetaMap - }); + XML.parseString(xmlString, (err, xmlData) => { + this.props.addXmlData(xmlData); + this.setState({ xmlLoaded: true }); }); }) .catch((e) => { @@ -71,8 +78,8 @@ export class LexSetup extends React.Component { } render() { - return this.state ? ( - + return this.state.xmlLoaded ? ( + ) : ( Loading