From db4249dafe381ce34cb1e64218a902ba172f49f3 Mon Sep 17 00:00:00 2001 From: Jakub Jankowski Date: Wed, 28 Aug 2019 16:27:52 +0200 Subject: [PATCH 1/3] fix: setting array subtype --- src/components/shared/Property.tsx | 4 ++-- src/utils/getNodeType.ts | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 src/utils/getNodeType.ts diff --git a/src/components/shared/Property.tsx b/src/components/shared/Property.tsx index 851d8528..dfc79104 100644 --- a/src/components/shared/Property.tsx +++ b/src/components/shared/Property.tsx @@ -2,7 +2,7 @@ import { size } from 'lodash'; import * as React from 'react'; import { GoToRefHandler, IArrayNode, IObjectNode, SchemaKind, SchemaNodeWithMeta } from '../../types'; import { isCombiner, isRef } from '../../utils'; -import { inferType } from '../../utils/inferType'; +import { getNodeType } from '../../utils/getNodeType'; import { Types } from './Types'; export interface IProperty { @@ -14,7 +14,7 @@ export const Property: React.FunctionComponent = ({ node, onGoToRef } const type = isRef(node) ? '$ref' : isCombiner(node) ? node.combiner : node.type; const subtype = type === SchemaKind.Array && (node as IArrayNode).items !== undefined - ? inferType((node as IArrayNode).items!) + ? getNodeType((node as IArrayNode).items!) : undefined; const childrenCount = React.useMemo( diff --git a/src/utils/getNodeType.ts b/src/utils/getNodeType.ts new file mode 100644 index 00000000..9cacbb5a --- /dev/null +++ b/src/utils/getNodeType.ts @@ -0,0 +1,6 @@ +import { JSONSchema4, JSONSchema4TypeName } from 'json-schema'; +import { inferType } from './inferType'; + +export function getNodeType(node: JSONSchema4): JSONSchema4TypeName | JSONSchema4TypeName[] | undefined { + return node.type ? node.type : inferType(node); +} From 8ccd4669a7acba7ec12be15809e1a5e13ec3ccf7 Mon Sep 17 00:00:00 2001 From: Jakub Jankowski Date: Wed, 28 Aug 2019 16:28:08 +0200 Subject: [PATCH 2/3] test: add Prorerty tests --- src/components/__tests__/Property.spec.tsx | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/components/__tests__/Property.spec.tsx diff --git a/src/components/__tests__/Property.spec.tsx b/src/components/__tests__/Property.spec.tsx new file mode 100644 index 00000000..3331148b --- /dev/null +++ b/src/components/__tests__/Property.spec.tsx @@ -0,0 +1,27 @@ +import { shallow } from 'enzyme'; +import 'jest-enzyme'; +import * as React from 'react'; +import { SchemaNodeWithMeta } from '../../types'; +import { Property, Types } from '../shared'; + +describe('Property component', () => { + it('should render Types with propper type and subtype', () => { + const node: SchemaNodeWithMeta = { + id: '1', + type: 'array', + items: { + type: 'string', + }, + annotations: { + examples: {}, + }, + validations: {}, + path: [], + }; + + const wrapper = shallow(); + expect(wrapper.find(Types)).toExist(); + expect(wrapper.find(Types)).toHaveProp('type', 'array'); + expect(wrapper.find(Types)).toHaveProp('subtype', 'string'); + }); +}); From 42368d56338223009803bee6293221622e2acb04 Mon Sep 17 00:00:00 2001 From: Jakub Jankowski Date: Wed, 28 Aug 2019 20:32:58 +0200 Subject: [PATCH 3/3] chore: update inferType --- src/components/shared/Property.tsx | 4 ++-- src/utils/getNodeType.ts | 6 ------ src/utils/inferType.ts | 6 +++++- 3 files changed, 7 insertions(+), 9 deletions(-) delete mode 100644 src/utils/getNodeType.ts diff --git a/src/components/shared/Property.tsx b/src/components/shared/Property.tsx index dfc79104..851d8528 100644 --- a/src/components/shared/Property.tsx +++ b/src/components/shared/Property.tsx @@ -2,7 +2,7 @@ import { size } from 'lodash'; import * as React from 'react'; import { GoToRefHandler, IArrayNode, IObjectNode, SchemaKind, SchemaNodeWithMeta } from '../../types'; import { isCombiner, isRef } from '../../utils'; -import { getNodeType } from '../../utils/getNodeType'; +import { inferType } from '../../utils/inferType'; import { Types } from './Types'; export interface IProperty { @@ -14,7 +14,7 @@ export const Property: React.FunctionComponent = ({ node, onGoToRef } const type = isRef(node) ? '$ref' : isCombiner(node) ? node.combiner : node.type; const subtype = type === SchemaKind.Array && (node as IArrayNode).items !== undefined - ? getNodeType((node as IArrayNode).items!) + ? inferType((node as IArrayNode).items!) : undefined; const childrenCount = React.useMemo( diff --git a/src/utils/getNodeType.ts b/src/utils/getNodeType.ts deleted file mode 100644 index 9cacbb5a..00000000 --- a/src/utils/getNodeType.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { JSONSchema4, JSONSchema4TypeName } from 'json-schema'; -import { inferType } from './inferType'; - -export function getNodeType(node: JSONSchema4): JSONSchema4TypeName | JSONSchema4TypeName[] | undefined { - return node.type ? node.type : inferType(node); -} diff --git a/src/utils/inferType.ts b/src/utils/inferType.ts index eb7a37c5..1cb043c8 100644 --- a/src/utils/inferType.ts +++ b/src/utils/inferType.ts @@ -1,7 +1,11 @@ import { JSONSchema4, JSONSchema4TypeName } from 'json-schema'; import { SchemaKind } from '../types'; -export function inferType(node: JSONSchema4): JSONSchema4TypeName | undefined { +export function inferType(node: JSONSchema4): JSONSchema4TypeName | JSONSchema4TypeName[] | undefined { + if ('type' in node) { + return node.type; + } + if ('properties' in node) { return SchemaKind.Object; }