From 5febac2d8b6efb109850ae45ac6ff48566817e3f Mon Sep 17 00:00:00 2001 From: Tori Kraft Date: Tue, 20 Oct 2020 15:22:20 -0500 Subject: [PATCH 1/2] mapping supports searchInput parameter using JS regex add schema update fix schema tests --- src/server/__tests__/schema.test.js | 4 ++-- src/server/resolvers.js | 13 ++++++++----- src/server/schema.js | 4 +++- src/server/utils/utils.js | 9 +++++++++ 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/server/__tests__/schema.test.js b/src/server/__tests__/schema.test.js index 5ae12551..bf71e97d 100644 --- a/src/server/__tests__/schema.test.js +++ b/src/server/__tests__/schema.test.js @@ -133,8 +133,8 @@ describe('Schema', () => { const expectedMappingSchema = ` type Mapping { - subject: [String] - file: [String] + subject(searchInput: String): [String] + file(searchInput: String): [String] }`; test('could create mapping schema', async () => { const mappingSchema = getMappingSchema(config.esConfig); diff --git a/src/server/resolvers.js b/src/server/resolvers.js index 847bdc8a..755286fe 100644 --- a/src/server/resolvers.js +++ b/src/server/resolvers.js @@ -2,7 +2,7 @@ import GraphQLJSON from 'graphql-type-json'; import { parseResolveInfo } from 'graphql-parse-resolve-info'; import _ from 'lodash'; import log from './logger'; -import { firstLetterUpperCase, buildNestedFieldMapping } from './utils/utils'; +import { buildNestedFieldMapping, filterFieldMapping, firstLetterUpperCase } from './utils/utils'; import { esFieldNumericTextTypeMapping, NumericTextTypeTypeEnum } from './es/const'; /** @@ -235,10 +235,13 @@ const getResolver = (esConfig, esInstance) => { }, {}); const mappingResolvers = esConfig.indices.reduce((acc, cfg) => { - log.debug(`${cfg.index} `, esInstance.getESFields(cfg.index)); - acc[cfg.type] = () => (_.flattenDeep( - esInstance.getESFields(cfg.index).fields.map((f) => buildNestedFieldMapping(f)), - )); + acc[cfg.type] = filterFieldMapping( + _.flattenDeep( + esInstance.getESFields(cfg.index).fields.map( + (f) => buildNestedFieldMapping(f), + ), + ), + ); return acc; }, {}); diff --git a/src/server/schema.js b/src/server/schema.js index e144a8e4..e9dcd161 100644 --- a/src/server/schema.js +++ b/src/server/schema.js @@ -221,7 +221,9 @@ export const getAggregationSchemaForEachNestedType = (esConfig, esInstance) => e export const getMappingSchema = (esConfig) => ` type Mapping { - ${esConfig.indices.map((cfg) => `${cfg.type}: [String]`).join('\n')} + ${esConfig.indices.map((cfg) => `${cfg.type} ( + searchInput: String + ): [String]`).join('\n')} } `; diff --git a/src/server/utils/utils.js b/src/server/utils/utils.js index b0360397..65a36f8f 100644 --- a/src/server/utils/utils.js +++ b/src/server/utils/utils.js @@ -1,4 +1,5 @@ import config from '../config'; +import log from '../logger'; export const firstLetterUpperCase = (str) => str.charAt(0).toUpperCase() + str.slice(1); @@ -129,3 +130,11 @@ export const buildNestedFieldMapping = (field, parent) => { )); return resultArray; }; + +export const filterFieldMapping = (fieldArray) => (parent, args) => { + const { searchInput } = args; + const regEx = new RegExp(searchInput); + log.debug('utils [filterFieldMapping] searchInput', searchInput); + const resultArray = fieldArray.filter((field) => regEx.test(field)); + return resultArray; +}; From c6d79500a90e01003511a276d1fec01fdca3f77d Mon Sep 17 00:00:00 2001 From: Tori Kraft Date: Thu, 22 Oct 2020 13:09:25 -0500 Subject: [PATCH 2/2] restore log statement --- src/server/resolvers.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/resolvers.js b/src/server/resolvers.js index 755286fe..8610130a 100644 --- a/src/server/resolvers.js +++ b/src/server/resolvers.js @@ -235,6 +235,7 @@ const getResolver = (esConfig, esInstance) => { }, {}); const mappingResolvers = esConfig.indices.reduce((acc, cfg) => { + log.debug(`${cfg.index} `, esInstance.getESFields(cfg.index)); acc[cfg.type] = filterFieldMapping( _.flattenDeep( esInstance.getESFields(cfg.index).fields.map(