UNPKG

@cs-open/react-fabric

Version:
3 lines (2 loc) 1.27 kB
"use client";import{useRef as v,useMemo as g,useEffect as h}from"react";import{bindEvents as j}from"../utils/events.mjs";import{transformDefaultProps as w}from"../utils/props.mjs";import{useDidUpdate as y}from"./useDidUpdate.mjs";import{useStoreApi as C,useStore as E}from"./useStore.mjs";function F({Constructor:s,attributes:o,defaultValues:c={},param:u,group:i,listeners:l={}}){const a=C(),f=E(t=>t.canvas),d=v(null),e=g(()=>{const t=Object.keys(c).length>0;d.current=t?"uncontrolled":"controlled";const n={...o,...w(c)};return u!==void 0?new s(u,n):new s(n)},[s,u]),r=g(()=>i??f,[i,f]);return h(()=>{if(!(!e||!r))return r.add(e),()=>{try{e&&(e.off(),r.contains(e)&&r.remove(e),typeof e.dispose=="function"&&e.dispose())}catch(t){console.warn("\u6E05\u7406\u5BF9\u8C61\u65F6\u53D1\u751F\u9519\u8BEF:",t)}}},[e,r]),h(()=>{if(e)return j(e,l)},[e,l]),y(()=>{if(!e)return;const{canvas:t}=a.getState();if(d.current==="uncontrolled"){const n=Object.entries(o).reduce((p,[m,b])=>(m.match(/^(left|top|width|height|scaleX|scaleY|angle|points|path|originX|originY)$/)||(p[m]=b),p),{});Object.keys(n).length>0&&(e.set(n),t?.requestRenderAll())}else e.set(o),e.setCoords(),t?.requestRenderAll()},[e,o,a]),e}export{F as useCreateObject}; //# sourceMappingURL=useCreateObject.mjs.map