UNPKG

@wordpress/compose

Version:
8 lines (7 loc) 2.21 kB
{ "version": 3, "sources": ["../../../src/utils/create-higher-order-component/index.ts"], "sourcesContent": ["/**\n * External dependencies\n */\nimport { pascalCase } from 'change-case';\nimport type { ComponentType } from 'react';\n\ntype GetProps< C > = C extends ComponentType< infer P > ? P : never;\n\nexport type WithoutInjectedProps< C, I > = Omit< GetProps< C >, keyof I >;\n\nexport type WithInjectedProps< C, I > = ComponentType<\n\tWithoutInjectedProps< C, I > & I\n>;\n\n/**\n * Given a function mapping a component to an enhanced component and modifier\n * name, returns the enhanced component augmented with a generated displayName.\n *\n * @param mapComponent Function mapping component to enhanced component.\n * @param modifierName Seed name from which to generated display name.\n *\n * @return Component class with generated display name assigned.\n */\nexport function createHigherOrderComponent<\n\tTInner extends ComponentType< any >,\n\tTOuter extends ComponentType< any >,\n>( mapComponent: ( Inner: TInner ) => TOuter, modifierName: string ) {\n\treturn ( Inner: TInner ) => {\n\t\tconst Outer = mapComponent( Inner );\n\t\tOuter.displayName = hocName( modifierName, Inner );\n\t\treturn Outer;\n\t};\n}\n\n/**\n * Returns a displayName for a higher-order component, given a wrapper name.\n *\n * @example\n * hocName( 'MyMemo', Widget ) === 'MyMemo(Widget)';\n * hocName( 'MyMemo', <div /> ) === 'MyMemo(Component)';\n *\n * @param name Name assigned to higher-order component's wrapper component.\n * @param Inner Wrapped component inside higher-order component.\n * @return Wrapped name of higher-order component.\n */\nconst hocName = ( name: string, Inner: ComponentType< any > ) => {\n\tconst inner = Inner.displayName || Inner.name || 'Component';\n\tconst outer = pascalCase( name ?? '' );\n\n\treturn `${ outer }(${ inner })`;\n};\n"], "mappings": ";AAGA,SAAS,kBAAkB;AAoBpB,SAAS,2BAGb,cAA2C,cAAuB;AACpE,SAAO,CAAE,UAAmB;AAC3B,UAAM,QAAQ,aAAc,KAAM;AAClC,UAAM,cAAc,QAAS,cAAc,KAAM;AACjD,WAAO;AAAA,EACR;AACD;AAaA,IAAM,UAAU,CAAE,MAAc,UAAiC;AAChE,QAAM,QAAQ,MAAM,eAAe,MAAM,QAAQ;AACjD,QAAM,QAAQ,WAAY,QAAQ,EAAG;AAErC,SAAO,GAAI,KAAM,IAAK,KAAM;AAC7B;", "names": [] }