UNPKG

3.26 kBSource Map (JSON)View Raw
1{"version":3,"file":"react-use-control.umd.min.js","sources":["../src/index.js"],"sourcesContent":["// TODO: combine multiple controls\n\nimport * as React from 'react';\n\nconst controlSymbol = Symbol('control');\n\nexport function isControl(obj) {\n return obj && obj[controlSymbol];\n}\n\n// TODO: 同一个 control 传给多个 组件实例\nexport function useProp(control, prop, initial) {\n // if (__DEV__) {\n // // eslint-disable-next-line no-prototype-builtins\n // if (React.useRef(control.hasOwnProperty(prop)).current)\n // throw new Error('Could not use prop multiple times.');\n // }\n\n if (!control) return React.useState(initial);\n const {state, transform} = control[prop] || {};\n const isSource = React.useRef(!state).current;\n const s = isSource ? React.useState(initial) : state;\n return transform ? transform(s) : s;\n}\n\n/**\n * Create or reuse a control\n * @param {object} [control] state store\n * @param {object | array} [transforms] state transforms\n * @return {array} control and useProp\n */\nexport default function useControl(control, transforms) {\n const m = isControl(control)\n ? Object.create(control)\n : {[controlSymbol]: true};\n if (transforms) {\n (Array.isArray(transforms)\n ? transforms\n : Object.entries(transforms)\n ).forEach(([prop, t]) => {\n const {state, transform} = m[prop] || {};\n m[prop] = {state, transform: transform ? (s) => transform(t(s)) : t};\n });\n }\n\n return [\n m,\n function useProp$(prop, initial) {\n const state = useProp(control, prop, initial);\n m[prop] = {transform: transforms && transforms[prop], state};\n return state;\n }\n ];\n}\n\nexport function useControlProp(control) {\n return function useProp$(prop, initial) {\n return useProp(control, prop, initial);\n };\n}\n\nexport function usePick(control, props) {\n const [m, useProp] = useControl();\n if (control) {\n props.forEach((prop) => {\n const [from, to] = Array.isArray(prop) ? prop : [prop, prop];\n m[to || from] = control[from];\n });\n }\n return [m, useProp];\n}\n\n// TODO: useWatch\n"],"names":["controlSymbol","Symbol","isControl","obj","useProp","control","prop","initial","React","state","transform","s","current","useControl","transforms","m","Object","create","Array","isArray","entries","forEach","t","props","from","to"],"mappings":";;;;;suCAIA,IAAMA,EAAgBC,OAAO,WAEtB,SAASC,EAAUC,UACjBA,GAAOA,EAAIH,GAIb,SAASI,EAAQC,EAASC,EAAMC,OAOhCF,EAAS,OAAOG,WAAeD,SACTF,EAAQC,IAAS,GAArCG,IAAAA,MAAOC,IAAAA,UAERC,EADWH,UAAcC,GAAOG,QACjBJ,WAAeD,GAAWE,SACxCC,EAAYA,EAAUC,GAAKA,EASrB,SAASE,EAAWR,EAASS,aACpCC,EAAIb,EAAUG,GAChBW,OAAOC,OAAOZ,OACI,KAAhBL,2GACFc,IACDI,MAAMC,QAAQL,GACXA,EACAE,OAAOI,QAAQN,IACjBO,SAAQ,yBAAEf,OAAMgB,SACWP,EAAET,IAAS,GAA/BG,IAAAA,MAAOC,IAAAA,UACdK,EAAET,GAAQ,CAACG,MAAAA,EAAOC,UAAWA,EAAY,SAACC,UAAMD,EAAUY,EAAEX,KAAMW,MAI/D,CACLP,EACA,SAAkBT,EAAMC,OAChBE,EAAQL,EAAQC,EAASC,EAAMC,UACrCQ,EAAET,GAAQ,CAACI,UAAWI,GAAcA,EAAWR,GAAOG,MAAAA,GAC/CA,+CAKN,SAAwBJ,UACtB,SAAkBC,EAAMC,UACtBH,EAAQC,EAASC,EAAMC,eAI3B,SAAiBF,EAASkB,WACVV,OAAdE,OAAGX,cACNC,GACFkB,EAAMF,SAAQ,SAACf,WACMY,MAAMC,QAAQb,GAAQA,EAAO,CAACA,EAAMA,MAAhDkB,OAAMC,OACbV,EAAEU,GAAMD,GAAQnB,EAAQmB,MAGrB,CAACT,EAAGX"}
\No newline at end of file