Skip to content

Commit

Permalink
chore: Remove old unused code to generate prop type docs
Browse files Browse the repository at this point in the history
  • Loading branch information
jerelmiller committed Jun 8, 2020
1 parent bd8399c commit 521801f
Showing 1 changed file with 1 addition and 98 deletions.
99 changes: 1 addition & 98 deletions src/hooks/useComponentDoc.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useMemo } from 'react';
import { getPropTypeDefinition, getDefaultValue } from '../utils/propTypeInfo';
import { getPropTypeDefinition } from '../utils/propTypeInfo';

const IGNORED_METHODS = [
'prototype',
Expand All @@ -16,103 +16,6 @@ const extractPropTypes = (component) => {
);
};

const toStaticName = (propName) =>
propName
.replace(/(.+?)(?=[A-Z])/g, '$1_')
.replace('.', '_')
.toUpperCase();

const processPropType = (component, propName, prop) => {
const propDocs = prop.__docs__;
const propMeta = prop.__reflect__;
const type = processType(component, propName, propMeta);

const staticName = toStaticName(propName);

const enums =
type.isOneOf || type.isArrayOfOneOf
? Object.keys(component[staticName] || {}).map(
(name) => `${component.name}.${staticName}.${name}`
)
: [];

return {
...type,
description: propDocs?.text,
example: propDocs?.tags?.examples?.[0],
isRequired: propMeta.some((item) => item.name === 'isRequired'),
params: propDocs?.tags?.param,
deprecated: propDocs?.tags?.deprecated?.[0],
returns: propDocs?.tags?.returns,
defaultValue: getDefaultValue(component, propName),
enums,
};
};

// TODO: refactor: remove switch? remove let usage? breakdown into smaller functions?
const processType = (component, propName, propMeta) => {
const propTypeName = propMeta[1].name;
const isOneOf = propTypeName === 'oneOf';
const isArrayOf = propTypeName === 'arrayOf';
const isArrayOfOneOf =
isArrayOf && propMeta[2].args[0].__reflect__[1].name === 'oneOf';

let displayType;
let shapes = [];

const mapArgsToTypes = (arg) => {
const { displayType, shapes: s } = processType(
component,
propName,
arg.__reflect__
);
shapes = shapes.concat(s);

return displayType;
};

const args = (propMeta.find((m) => m.args) || {}).args;

switch (propTypeName) {
case 'oneOf':
displayType = 'enum';
break;
case 'oneOfType':
displayType = args[0].map(mapArgsToTypes).join('|');
break;
case 'arrayOf': {
const arrayTypes = args.map(mapArgsToTypes).toString();
displayType =
arrayTypes.indexOf('|') >= 0 ? `(${arrayTypes})[]` : `${arrayTypes}[]`;
break;
}
case 'func':
displayType = 'function';
break;
case 'bool':
displayType = 'boolean';
break;
default:
displayType = propTypeName;
}

if (displayType === 'shape') {
shapes.push(
Object.entries(args[0]).map(([name, prop]) => ({
...processPropType(component, `${propName}.${name}`, prop),
name,
}))
);
}

return {
displayType,
isOneOf,
isArrayOfOneOf,
shapes,
};
};

const useComponentDoc = (componentName) => {
if (typeof window === 'undefined') global.window = {};

Expand Down

0 comments on commit 521801f

Please sign in to comment.