UNPKG

3.04 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/util/fromRenderProp.js"],"names":["React","cache","Map","filterProps","props","blacklist","Object","entries","reduce","r","k","v","includes","fromRenderProp","elementType","customProps","isComposite","uniqueCustomProps","Array","from","Set","sort","key","join","has","Component","createElement","displayName","set","get"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB,C,CAEA;;AACA,IAAMC,KAAK,GAAG,IAAIC,GAAJ,EAAd;AAEA,OAAO,IAAMC,WAAW,GAAG,SAAdA,WAAc;AAAA,MAACC,KAAD,uEAAS,EAAT;AAAA,MAAaC,SAAb,uEAAyB,EAAzB;AAAA,SACvBC,MAAM,CAACC,OAAP,CAAeH,KAAf,EAAsBI,MAAtB,CAA6B,UAACC,CAAD,QAAe;AAAA;AAAA,QAAVC,CAAU;AAAA,QAAPC,CAAO;;AACxC,QAAI,CAACN,SAAS,CAACO,QAAV,CAAmBF,CAAnB,CAAL,EAA4B;AACxBD,MAAAA,CAAC,CAACC,CAAD,CAAD,GAAOC,CAAP;AACH;;AACD,WAAOF,CAAP;AACH,GALD,EAKG,EALH,CADuB;AAAA,CAApB;;AAQP,IAAMI,cAAc,GAAG,SAAjBA,cAAiB,CAACC,WAAD,EAAmC;AAAA,MAArBC,WAAqB,uEAAP,EAAO;AACtD,MAAMC,WAAW,GAAG,OAAOF,WAAP,KAAuB,UAA3C,CADsD,CAGtD;;AACA,MAAIE,WAAJ,EAAiB;AACb,WAAOF,WAAP;AACH,GANqD,CAQtD;;;AACA,MAAMG,iBAAiB,GAAGC,KAAK,CAACC,IAAN,CAAW,IAAIC,GAAJ,CAAQ,mBAAIL,WAAJ,EAAiBM,IAAjB,EAAR,CAAX,CAA1B,CATsD,CAWtD;;AACA,MAAMC,GAAG,aAAMR,WAAN,eAAsBG,iBAAiB,CAACM,IAAlB,CAAuB,GAAvB,CAAtB,CAAT,CAZsD,CActD;AACA;;AACA,MAAI,CAACtB,KAAK,CAACuB,GAAN,CAAUF,GAAV,CAAL,EAAqB;AACjB;AACA;AACA,QAAMG,SAAS,GAAG,SAAZA,SAAY,CAAArB,KAAK;AAAA,aACnBJ,KAAK,CAAC0B,aAAN,CACIZ,WADJ,EAEIX,WAAW,CAACC,KAAD,EAAQa,iBAAR,CAFf,CADmB;AAAA,KAAvB;;AAMAQ,IAAAA,SAAS,CAACE,WAAV,4BAA0Cb,WAA1C;AACAb,IAAAA,KAAK,CAAC2B,GAAN,CAAUN,GAAV,EAAeG,SAAf;AACH;;AAED,SAAOxB,KAAK,CAAC4B,GAAN,CAAUP,GAAV,CAAP;AACH,CA9BD;;AAgCA,eAAeT,cAAf","sourcesContent":["import React from 'react';\n\n// memoization cache\nconst cache = new Map();\n\nexport const filterProps = (props = {}, blacklist = []) =>\n Object.entries(props).reduce((r, [k, v]) => {\n if (!blacklist.includes(k)) {\n r[k] = v;\n }\n return r;\n }, {});\n\nconst fromRenderProp = (elementType, customProps = []) => {\n const isComposite = typeof elementType === 'function';\n\n // if `elementType` is a function, it's already a component\n if (isComposite) {\n return elementType;\n }\n\n // sort and de-dupe `customProps`\n const uniqueCustomProps = Array.from(new Set([...customProps].sort()));\n\n // hash arguments for memoization\n const key = `${elementType}//${uniqueCustomProps.join(',')}`;\n\n // only create a new component if not cached\n // otherwise React will unmount on every render\n if (!cache.has(key)) {\n // create an SFC that renders a node of type `elementType`\n // and filter any props that shouldn't be written to the DOM\n const Component = props =>\n React.createElement(\n elementType,\n filterProps(props, uniqueCustomProps)\n );\n\n Component.displayName = `fromRenderProp(${elementType})`;\n cache.set(key, Component);\n }\n\n return cache.get(key);\n};\n\nexport default fromRenderProp;\n"],"file":"fromRenderProp.js"}
\No newline at end of file