1- /* eslint-disable @typescript-eslint/no-explicit-any */
2- import React from "react" ;
3-
4- import { PagePropsType } from "../../types/page.types" ;
51import { Definition } from "../../pages/components/definition" ;
62import { Returns } from "../../pages/components/returns" ;
73import { Generics } from "../../pages/components/generics" ;
@@ -18,76 +14,44 @@ import { Description } from "../../pages/components/description";
1814import { Signature } from "../../pages/components/signature" ;
1915import { Sources } from "../../pages/components/sources" ;
2016import { Type } from "../../pages/components/type" ;
21- import { ComponentsProps } from "./component.types" ;
2217import { ReturnsPreview } from "../../pages/components/returns-preview" ;
2318import { Npm } from "pages/components/npm" ;
2419import { Details } from "pages/components/details" ;
2520
26- export const getComponent = ( options : ComponentsProps ) : React . FC < PagePropsType > => {
21+ const components = {
22+ definition : Definition ,
23+ npm : Npm ,
24+ import : Import ,
25+ details : Details ,
26+ description : Description ,
27+ generics : Generics ,
28+ method : Method ,
29+ methods : Methods ,
30+ name : Name ,
31+ parameter : Parameter ,
32+ parameters : Parameters ,
33+ preview : Preview ,
34+ property : Property ,
35+ properties : Properties ,
36+ returns : Returns ,
37+ returnsPreview : ReturnsPreview ,
38+ signature : Signature ,
39+ sources : Sources ,
40+ type : Type ,
41+ } ;
42+
43+ export type DocsComponents = typeof components ;
44+
45+ export type GetComponentProps < Name extends keyof DocsComponents > = {
46+ type : Name ;
47+ } & React . ComponentPropsWithoutRef < ( typeof components ) [ Name ] > ;
48+
49+ export const getComponent = < Name extends keyof DocsComponents > ( options : GetComponentProps < Name > ) => {
2750 const { type : componentType } = options ;
28- switch ( componentType ) {
29- case "definition" : {
30- return Definition ;
31- }
32- case "npm" : {
33- return Npm ;
34- }
35- case "import" : {
36- return Import ;
37- }
38- case "details" : {
39- return Details ;
40- }
41- case "description" : {
42- return Description ;
43- }
44- case "generics" : {
45- return Generics as any ;
46- }
47- case "method" : {
48- return Method ;
49- }
50- case "methods" : {
51- return Methods ;
52- }
53- case "name" : {
54- return Name ;
55- }
56- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
57- // @ts -ignore
58- case "parameter" : {
59- return Parameter ;
60- }
61- case "parameters" : {
62- return Parameters ;
63- }
64- case "preview" : {
65- return Preview as any ;
66- }
67- case "property" : {
68- return Property ;
69- }
70- case "properties" : {
71- return Properties ;
72- }
73- case "returns" : {
74- return Returns ;
75- }
76- case "returnsPreview" : {
77- return ReturnsPreview ;
78- }
79- case "signature" : {
80- return Signature as any ;
81- }
82- case "sources" : {
83- return Sources ;
84- }
85- case "type" : {
86- return Type as React . FC < PagePropsType > ;
87- }
88- // Todo display page
89- default : {
90- throw new Error ( `Component type not found - ${ componentType } ` ) ;
91- }
51+
52+ if ( ! components [ componentType ] ) {
53+ throw new Error ( `Component type not found - ${ componentType } ` ) ;
9254 }
55+
56+ return components [ componentType ] ;
9357} ;
0 commit comments