@ram_28/kf-ai-sdk 2.0.20-beta.0 → 2.0.20-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,9 +7,8 @@ import type { FormItemType, ExtractEditableType, ExtractReadonlyType } from "./t
7
7
  * Key principle: Item has NO state. It's a view over RHF's state.
8
8
  * Editable fields get set(), readonly fields do not.
9
9
  *
10
- * Draft-based upload: In create mode (no _id), upload() automatically creates
11
- * a draft record via draftInteraction() to get an _id, then uploads immediately.
12
- * On form submit, if a draft _id exists, update() is used instead of create().
10
+ * In create mode (no _id), uses "draft" as the instanceId for attachment
11
+ * uploads and fetch operations — no draftInteraction() call needed.
13
12
  *
14
13
  * @param bdo - The BDO instance for field metadata
15
14
  * @param form - The RHF useForm return object
@@ -1 +1 @@
1
- {"version":3,"file":"createItemProxy.d.ts","sourceRoot":"","sources":["../../../../sdk/components/hooks/useBDOForm/createItemProxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAQ,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQ5C,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EAGpB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC9D,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,GAC/B,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAiV9D"}
1
+ {"version":3,"file":"createItemProxy.d.ts","sourceRoot":"","sources":["../../../../sdk/components/hooks/useBDOForm/createItemProxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAQ,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQ5C,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EAGpB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC9D,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,GAC/B,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAqS9D"}
package/dist/form.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const K=require("./constants-QX2RX-wu.cjs"),_=require("react"),I=require("./shared-nnmlRVs7.cjs"),J=require("@tanstack/react-query"),y=require("./client-D5k4SYuw.cjs"),k=require("./attachment-constants-B5jlqoKI.cjs"),W=require("./metadata-DWXQPDav.cjs");function X(T,a){const g=T.getFields(),b=new Map,C=T.getBoId();let m=null,x=null;async function M(){const S=a.getValues("_id");return S||m||(x||(x=y.api(C).draftInteraction({}).then(e=>(m=e._id,a.setValue("_id",m,{shouldDirty:!1}),m)).catch(e=>{throw x=null,e})),x)}return new Proxy({},{get(S,e){if(typeof e=="symbol")return;if(e==="_id")return a.getValues("_id");if(e==="toJSON")return()=>a.getValues();if(e==="validate")return()=>a.trigger();if(e==="_hasDraft")return()=>!!m;if(b.has(e))return b.get(e);const i=g[e],d=(i==null?void 0:i.meta)??{_id:e,Name:e,Type:"String"},L=(i==null?void 0:i.readOnly)??!1,N=()=>{if(!i)return{valid:!0,errors:[]};let l=a.getValues(e);if("integerPart"in i&&typeof l=="string"&&l!==""){const o=Number(l);isNaN(o)||(l=o,a.setValue(e,o,{shouldDirty:!1}))}if(!i.required&&(l==null||l===""||Array.isArray(l)&&l.length===0))return{valid:!0,errors:[]};const s=i.validate(l);if(!s.valid)return s;const t=I.validateConstraints(i,l);if(!t.valid)return t;if(T.hasMetadata()){const o=T.validateFieldExpression(e,l,a.getValues());if(!o.valid)return o}return{valid:!0,errors:[]}},B=l=>{const s=a.getValues(e);return s??l};if(!L){const l=()=>{const t=a.getValues(e);return d.Type==="File"?t??[]:t},s={label:(i==null?void 0:i.label)??e,required:(i==null?void 0:i.required)??!1,readOnly:!1,defaultValue:i==null?void 0:i.defaultValue,meta:d,get:l,getOrDefault:B,set:t=>{a.setValue(e,t,{shouldDirty:!0,shouldTouch:!0,shouldValidate:!1})},validate:N};if(d.Type==="Image"||d.Type==="File"){const t=C,o=()=>{const n=a.getValues("_id");if(!n)throw new Error("Save the record before attachment operations");return n};d.Type==="Image"?(s.upload=async n=>{k.validateFileExtension(n.name,"Image");const r=await M(),[c]=await y.api(t).getUploadUrl(r,e,[{FileName:n.name,Size:n.size,FileExtension:k.extractFileExtension(n.name)}]);await fetch(c.UploadUrl.URL,{method:"PUT",headers:{"Content-Type":c.ContentType},body:n});const f={_id:c._id,_name:c._name,FileName:c.FileName,FileExtension:c.FileExtension,Size:c.Size,ContentType:c.ContentType};return a.setValue(e,f,{shouldDirty:!0}),f},s.deleteAttachment=async()=>{const n=a.getValues(e),r=o();if(!(n!=null&&n._id))throw new Error(`${e} has no image to delete`);await y.api(t).deleteAttachment(r,e,n._id),a.setValue(e,null,{shouldDirty:!0})},s.getDownloadUrl=async n=>{const r=a.getValues(e),c=o();if(!(r!=null&&r._id))throw new Error(`${e} has no image`);return y.api(t).getDownloadUrl(c,e,r._id,n)}):(s.upload=async n=>{for(const V of n)k.validateFileExtension(V.name,"File");const r=await M(),c=n.map(V=>({FileName:V.name,Size:V.size,FileExtension:k.extractFileExtension(V.name)})),f=await y.api(t).getUploadUrl(r,e,c),R=await Promise.all(n.map(async(V,h)=>(await fetch(f[h].UploadUrl.URL,{method:"PUT",headers:{"Content-Type":f[h].ContentType},body:V}),{_id:f[h]._id,_name:f[h]._name,FileName:f[h].FileName,FileExtension:f[h].FileExtension,Size:f[h].Size,ContentType:f[h].ContentType}))),U=a.getValues(e)??[];return a.setValue(e,[...U,...R],{shouldDirty:!0}),R},s.deleteAttachment=async n=>{const r=a.getValues(e)??[],c=o();await y.api(t).deleteAttachment(c,e,n),a.setValue(e,r.filter(f=>f._id!==n),{shouldDirty:!0})},s.getDownloadUrl=async(n,r)=>{const c=o();return y.api(t).getDownloadUrl(c,e,n,r)},s.getDownloadUrls=async n=>{const r=o();return y.api(t).getDownloadUrls(r,e,n)})}return b.set(e,s),s}const u=()=>{const l=a.getValues(e);return d.Type==="File"?l??[]:l},v={label:(i==null?void 0:i.label)??e,required:(i==null?void 0:i.required)??!1,readOnly:!0,defaultValue:i==null?void 0:i.defaultValue,meta:d,get:u,getOrDefault:B,validate:N};if(d.Type==="Image"||d.Type==="File"){const l=C,s=()=>{const t=a.getValues("_id");if(!t)throw new Error("Cannot perform attachment operation: item has no _id. Save the item first.");return t};d.Type==="Image"?v.getDownloadUrl=async t=>{const o=a.getValues(e),n=s();if(!(o!=null&&o._id))throw new Error(`${e} has no image to download`);return y.api(l).getDownloadUrl(n,e,o._id,t)}:(v.getDownloadUrl=async(t,o)=>{const n=s();return y.api(l).getDownloadUrl(n,e,t,o)},v.getDownloadUrls=async t=>{const o=s();return y.api(l).getDownloadUrls(o,e,t)})}return b.set(e,v),v},has(S,e){return typeof e=="symbol"?!1:e==="_id"||e==="toJSON"||e==="validate"||e==="_hasDraft"?!0:e in g},ownKeys(S){return[...Object.keys(g),"_id","toJSON","validate"]},getOwnPropertyDescriptor(S,e){if(typeof e!="symbol")return{configurable:!0,enumerable:e!=="toJSON"&&e!=="validate"&&e!=="_hasDraft"}}})}function Y(T){const{bdo:a,recordId:g,operation:b,defaultValues:C,mode:m="onBlur",enableDraft:x=!1,enableConstraintValidation:M,enableExpressionValidation:S}=T,e=b??(g?"update":"create"),i=_.useMemo(()=>I.createResolver(a,{enableConstraintValidation:M}),[a,M]),{data:d,isLoading:L,isFetching:N,error:B}=J.useQuery({queryKey:["form-record",a.meta._id,g],queryFn:async()=>{const w=await a.get(g);return I.coerceRecordForForm(a.getFields(),w.toJSON())},enabled:e==="update"&&!!g,staleTime:0}),{data:u,isLoading:v,error:l}=J.useQuery({queryKey:["form-draft",a.meta._id],queryFn:async()=>y.api(a.meta._id).draftInteraction({}),enabled:e==="create",staleTime:1/0,gcTime:0,retry:1}),{data:s}=J.useQuery({queryKey:["form-schema",a.meta._id],queryFn:()=>W.getBdoSchema(a.meta._id),staleTime:30*60*1e3,gcTime:60*60*1e3,enabled:S!==!1});_.useEffect(()=>{s!=null&&s.BDOBlob?a.loadMetadata(s.BDOBlob):s!=null&&s.MetaBlob&&a.loadMetadata(s.MetaBlob)},[s,a]);const t=I.useForm({mode:m,resolver:i,defaultValues:C}),o=_.useRef(null);_.useEffect(()=>{e==="update"&&d&&d!==o.current&&(t.reset(d),o.current=d)},[d,e,t]),_.useEffect(()=>{u!=null&&u._id&&t.setValue("_id",u._id)},[u,t]);const n=_.useMemo(()=>X(a,t),[a,t]),r=a.getFields(),c=_.useRef(!1),f=_.useMemo(()=>Object.keys(r).filter(w=>r[w].readOnly),[r]),R=_.useCallback(async(w,F)=>{if(e==="create"&&(u!=null&&u._id))return y.api(a.meta._id).draftInteraction({_id:u._id,[w]:F});if(e==="update"&&g)return y.api(a.meta._id).update(g,{[w]:F})},[e,u,g,a]),U=_.useMemo(()=>I.createSyncField({apiFn:R,allFields:r,readonlyFieldNames:f,rhf:t,isComputingRef:c}),[R,r,f,t]),V=m==="onChange"||m==="all",h=m==="onBlur"||m==="onTouched"||m==="all",Q=_.useMemo(()=>I.createEnhancedRegister({rhf:t,allFields:r,syncField:U,syncOnBlur:h,syncOnChange:V}),[t,r,U,h,V]),$=_.useMemo(()=>I.createEnhancedControl({control:t.control,syncField:U,syncOnBlur:h,syncOnChange:V}),[t.control,U,h,V]),G=_.useCallback((w,F)=>t.handleSubmit(async(P,z)=>{try{const O={},A=t.getValues();if(e==="create")for(const[q,D]of Object.entries(r)){if(D.readOnly)continue;const E=A[q]!==void 0?A[q]:P[q];E!==void 0&&(O[q]=I.coerceFieldValue(D,E))}else{const q=t.formState.dirtyFields;for(const[D,E]of Object.entries(r)){if(E.readOnly||!q[D])continue;const H=A[D]!==void 0?A[D]:P[D];O[D]=I.coerceFieldValue(E,H)}}let j;e==="create"?(O._id=u==null?void 0:u._id,j=await y.api(a.meta._id).draft(O)):j=await y.api(a.meta._id).update(g,O),w==null||w(j,z)}catch(O){F==null||F(O,z)}},(P,z)=>{F==null||F(P,z)}),[t,a,e,g,r,u]);return{item:n,bdo:a,operation:e,recordId:g,register:Q,handleSubmit:G,watch:t.watch,setValue:t.setValue,getValues:t.getValues,reset:t.reset,trigger:t.trigger,control:$,formState:t.formState,errors:t.formState.errors,isDirty:t.formState.isDirty,isValid:t.formState.isValid,isSubmitting:t.formState.isSubmitting,isSubmitSuccessful:t.formState.isSubmitSuccessful,dirtyFields:t.formState.dirtyFields,isLoading:L||v,isFetching:N,loadError:B??l,draftId:u==null?void 0:u._id,isCreatingDraft:v}}exports.FormOperation=K.FormOperation;exports.InteractionMode=K.InteractionMode;exports.ValidationMode=K.ValidationMode;exports.useBDOForm=Y;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const K=require("./constants-QX2RX-wu.cjs"),m=require("react"),w=require("./shared-nnmlRVs7.cjs"),J=require("@tanstack/react-query"),y=require("./client-D5k4SYuw.cjs"),P=require("./attachment-constants-B5jlqoKI.cjs"),W=require("./metadata-DWXQPDav.cjs");function X(T,n){const f=T.getFields(),D=new Map,C=T.getBoId(),c=()=>n.getValues("_id")||"draft";return new Proxy({},{get(q,e){if(typeof e=="symbol")return;if(e==="_id")return n.getValues("_id");if(e==="toJSON")return()=>n.getValues();if(e==="validate")return()=>n.trigger();if(D.has(e))return D.get(e);const s=f[e],o=(s==null?void 0:s.meta)??{_id:e,Name:e,Type:"String"},A=(s==null?void 0:s.readOnly)??!1,S=()=>{if(!s)return{valid:!0,errors:[]};let i=n.getValues(e);if("integerPart"in s&&typeof i=="string"&&i!==""){const a=Number(i);isNaN(a)||(i=a,n.setValue(e,a,{shouldDirty:!1}))}if(!s.required&&(i==null||i===""||Array.isArray(i)&&i.length===0))return{valid:!0,errors:[]};const l=s.validate(i);if(!l.valid)return l;const r=w.validateConstraints(s,i);if(!r.valid)return r;if(T.hasMetadata()){const a=T.validateFieldExpression(e,i,n.getValues());if(!a.valid)return a}return{valid:!0,errors:[]}},x=i=>{const l=n.getValues(e);return l??i};if(!A){const i=()=>{const r=n.getValues(e);return o.Type==="File"?r??[]:r},l={label:(s==null?void 0:s.label)??e,required:(s==null?void 0:s.required)??!1,readOnly:!1,defaultValue:s==null?void 0:s.defaultValue,meta:o,get:i,getOrDefault:x,set:r=>{n.setValue(e,r,{shouldDirty:!0,shouldTouch:!0,shouldValidate:!1})},validate:S};if(o.Type==="Image"||o.Type==="File"){const r=C;o.Type==="Image"?(l.upload=async a=>{P.validateFileExtension(a.name,"Image");const t=c(),[u]=await y.api(r).getUploadUrl(t,e,[{FileName:a.name,Size:a.size,FileExtension:P.extractFileExtension(a.name)}]);await fetch(u.UploadUrl.URL,{method:"PUT",headers:{"Content-Type":u.ContentType},body:a});const d={_id:u._id,_name:u._name,FileName:u.FileName,FileExtension:u.FileExtension,Size:u.Size,ContentType:u.ContentType};return n.setValue(e,d,{shouldDirty:!0}),d},l.deleteAttachment=async()=>{const a=n.getValues(e),t=c();if(!(a!=null&&a._id))throw new Error(`${e} has no image to delete`);await y.api(r).deleteAttachment(t,e,a._id),n.setValue(e,null,{shouldDirty:!0})},l.getDownloadUrl=async a=>{const t=n.getValues(e),u=c();if(!(t!=null&&t._id))throw new Error(`${e} has no image`);return y.api(r).getDownloadUrl(u,e,t._id,a)}):(l.upload=async a=>{for(const _ of a)P.validateFileExtension(_.name,"File");const t=c(),u=a.map(_=>({FileName:_.name,Size:_.size,FileExtension:P.extractFileExtension(_.name)})),d=await y.api(r).getUploadUrl(t,e,u),g=await Promise.all(a.map(async(_,h)=>(await fetch(d[h].UploadUrl.URL,{method:"PUT",headers:{"Content-Type":d[h].ContentType},body:_}),{_id:d[h]._id,_name:d[h]._name,FileName:d[h].FileName,FileExtension:d[h].FileExtension,Size:d[h].Size,ContentType:d[h].ContentType}))),L=n.getValues(e)??[];return n.setValue(e,[...L,...g],{shouldDirty:!0}),g},l.deleteAttachment=async a=>{const t=n.getValues(e)??[],u=c();await y.api(r).deleteAttachment(u,e,a),n.setValue(e,t.filter(d=>d._id!==a),{shouldDirty:!0})},l.getDownloadUrl=async(a,t)=>{const u=c();return y.api(r).getDownloadUrl(u,e,a,t)},l.getDownloadUrls=async a=>{const t=c();return y.api(r).getDownloadUrls(t,e,a)})}return D.set(e,l),l}const k=()=>{const i=n.getValues(e);return o.Type==="File"?i??[]:i},O={label:(s==null?void 0:s.label)??e,required:(s==null?void 0:s.required)??!1,readOnly:!0,defaultValue:s==null?void 0:s.defaultValue,meta:o,get:k,getOrDefault:x,validate:S};if(o.Type==="Image"||o.Type==="File"){const i=C;o.Type==="Image"?O.getDownloadUrl=async l=>{const r=n.getValues(e),a=c();if(!(r!=null&&r._id))throw new Error(`${e} has no image to download`);return y.api(i).getDownloadUrl(a,e,r._id,l)}:(O.getDownloadUrl=async(l,r)=>{const a=c();return y.api(i).getDownloadUrl(a,e,l,r)},O.getDownloadUrls=async l=>{const r=c();return y.api(i).getDownloadUrls(r,e,l)})}return D.set(e,O),O},has(q,e){return typeof e=="symbol"?!1:e==="_id"||e==="toJSON"||e==="validate"?!0:e in f},ownKeys(q){return[...Object.keys(f),"_id","toJSON","validate"]},getOwnPropertyDescriptor(q,e){if(typeof e!="symbol")return{configurable:!0,enumerable:e!=="toJSON"&&e!=="validate"}}})}function Y(T){const{bdo:n,recordId:f,operation:D,defaultValues:C,mode:c="onBlur",enableDraft:q=!1,enableConstraintValidation:e,enableExpressionValidation:s}=T,o=D??(f?"update":"create"),A=m.useMemo(()=>w.createResolver(n,{enableConstraintValidation:e}),[n,e]),{data:S,isLoading:x,isFetching:k,error:O}=J.useQuery({queryKey:["form-record",n.meta._id,f],queryFn:async()=>{const V=await n.get(f);return w.coerceRecordForForm(n.getFields(),V.toJSON())},enabled:o==="update"&&!!f,staleTime:0}),{data:i,isLoading:l,error:r}=J.useQuery({queryKey:["form-draft",n.meta._id],queryFn:async()=>y.api(n.meta._id).draftInteraction({}),enabled:o==="create",staleTime:1/0,gcTime:0,retry:1}),{data:a}=J.useQuery({queryKey:["form-schema",n.meta._id],queryFn:()=>W.getBdoSchema(n.meta._id),staleTime:30*60*1e3,gcTime:60*60*1e3,enabled:s!==!1});m.useEffect(()=>{a!=null&&a.BDOBlob?n.loadMetadata(a.BDOBlob):a!=null&&a.MetaBlob&&n.loadMetadata(a.MetaBlob)},[a,n]);const t=w.useForm({mode:c,resolver:A,defaultValues:C}),u=m.useRef(null);m.useEffect(()=>{o==="update"&&S&&S!==u.current&&(t.reset(S),u.current=S)},[S,o,t]),m.useEffect(()=>{i!=null&&i._id&&t.setValue("_id",i._id)},[i,t]);const d=m.useMemo(()=>X(n,t),[n,t]),g=n.getFields(),L=m.useRef(!1),_=m.useMemo(()=>Object.keys(g).filter(V=>g[V].readOnly),[g]),h=m.useCallback(async(V,F)=>{if(o==="create"&&(i!=null&&i._id))return y.api(n.meta._id).draftInteraction({_id:i._id,[V]:F});if(o==="update"&&f)return y.api(n.meta._id).update(f,{[V]:F})},[o,i,f,n]),M=m.useMemo(()=>w.createSyncField({apiFn:h,allFields:g,readonlyFieldNames:_,rhf:t,isComputingRef:L}),[h,g,_,t]),R=c==="onChange"||c==="all",N=c==="onBlur"||c==="onTouched"||c==="all",Q=m.useMemo(()=>w.createEnhancedRegister({rhf:t,allFields:g,syncField:M,syncOnBlur:N,syncOnChange:R}),[t,g,M,N,R]),$=m.useMemo(()=>w.createEnhancedControl({control:t.control,syncField:M,syncOnBlur:N,syncOnChange:R}),[t.control,M,N,R]),G=m.useCallback((V,F)=>t.handleSubmit(async(E,B)=>{try{const v={},z=t.getValues();if(o==="create")for(const[U,I]of Object.entries(g)){if(I.readOnly)continue;const b=z[U]!==void 0?z[U]:E[U];b!==void 0&&(v[U]=w.coerceFieldValue(I,b))}else{const U=t.formState.dirtyFields;for(const[I,b]of Object.entries(g)){if(b.readOnly||!U[I])continue;const H=z[I]!==void 0?z[I]:E[I];v[I]=w.coerceFieldValue(b,H)}}let j;o==="create"?(v._id=i==null?void 0:i._id,j=await y.api(n.meta._id).draft(v)):j=await y.api(n.meta._id).update(f,v),V==null||V(j,B)}catch(v){F==null||F(v,B)}},(E,B)=>{F==null||F(E,B)}),[t,n,o,f,g,i]);return{item:d,bdo:n,operation:o,recordId:f,register:Q,handleSubmit:G,watch:t.watch,setValue:t.setValue,getValues:t.getValues,reset:t.reset,trigger:t.trigger,control:$,formState:t.formState,errors:t.formState.errors,isDirty:t.formState.isDirty,isValid:t.formState.isValid,isSubmitting:t.formState.isSubmitting,isSubmitSuccessful:t.formState.isSubmitSuccessful,dirtyFields:t.formState.dirtyFields,isLoading:x||l,isFetching:k,loadError:O??r,draftId:i==null?void 0:i._id,isCreatingDraft:l}}exports.FormOperation=K.FormOperation;exports.InteractionMode=K.InteractionMode;exports.ValidationMode=K.ValidationMode;exports.useBDOForm=Y;