function initEditSearch()

in app/addons/search/reducers.js [95:141]


function initEditSearch (state, { database, designDocs, ddocID, indexName }) {
  const ddoc = designDocs.find(ddoc => {
    return ddoc.id === ddocID;
  }).dDocModel();

  // the selected analyzer returned in the ddoc can be applied to both the single analyzer and the default multiple
  // analyzer. We store them separately in the store so those values don't change when toggling from Single to Multiple
  const analyzer = ddoc.getAnalyzer(indexName);
  let newSingleAnalyzer;
  if (_.isString(analyzer)) {
    newSingleAnalyzer = analyzer;
  } else {
    if (_.has(analyzer, 'default')) {
      newSingleAnalyzer = analyzer.default;
    } else {
      newSingleAnalyzer = Constants.DEFAULT_ANALYZER;
    }
  }
  const newAnalyzerFields = [];
  if (analyzer && analyzer.fields) {
    Object.keys(analyzer.fields).forEach(fieldName => {
      newAnalyzerFields.push({
        key: getUniqueKey(),
        fieldName: (fieldName) ? fieldName : '',
        analyzer: analyzer.fields[fieldName],
        valid: !_.isUndefined(fieldName) && !_.isEmpty(fieldName)
      });
    });
  }

  return {
    loading: false,
    searchPerformed: false,
    database: database,
    designDocs: designDocs,
    searchIndexName: indexName,
    ddocName: ddocID,
    lastSavedSearchIndexName: indexName,
    lastSavedDesignDocName: ddocID,
    searchIndexFunction: ddoc.getIndex(indexName),
    analyzerType: ddoc.analyzerType(indexName),
    // this either returns a simple string (single) or a complex object (multiple)
    singleAnalyzer: newSingleAnalyzer,
    defaultMultipleAnalyzer: newSingleAnalyzer,
    analyzerFields: newAnalyzerFields
  };
}