@donotdev/crud 0.0.18 → 0.0.19

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.
Files changed (195) hide show
  1. package/dist/CrudService.js +2 -2
  2. package/dist/CrudStore.js +1 -1
  3. package/dist/FieldRegistry.js +1 -1
  4. package/dist/adapters/FunctionsAdapter.js +1 -1
  5. package/dist/components/CrudButton.d.ts.map +1 -1
  6. package/dist/components/CrudButton.js +1 -1
  7. package/dist/components/CrudCard.js +1 -1
  8. package/dist/components/DateFilter.js +1 -1
  9. package/dist/components/DisplayFieldRenderer.d.ts +2 -4
  10. package/dist/components/DisplayFieldRenderer.d.ts.map +1 -1
  11. package/dist/components/DisplayFieldRenderer.js +1 -1
  12. package/dist/components/DisplayThumbnail.js +1 -1
  13. package/dist/components/EntityFilters.d.ts.map +1 -1
  14. package/dist/components/EntityFilters.js +1 -1
  15. package/dist/components/FormFieldRenderer.js +1 -1
  16. package/dist/components/FormLayout.js +1 -1
  17. package/dist/components/controlled/complex/ControlledAddressField.js +1 -1
  18. package/dist/components/controlled/complex/ControlledDateField.js +1 -1
  19. package/dist/components/controlled/complex/ControlledFieldArrayField.js +1 -1
  20. package/dist/components/controlled/complex/ControlledGeoPointField.js +1 -1
  21. package/dist/components/controlled/complex/ControlledMapField.js +1 -1
  22. package/dist/components/controlled/complex/ControlledMultiInputField.js +1 -1
  23. package/dist/components/controlled/complex/ControlledRichTextField.js +1 -1
  24. package/dist/components/controlled/complex/ControlledTimestampField.js +1 -1
  25. package/dist/components/controlled/complex/index.js +1 -1
  26. package/dist/components/controlled/file/ControlledDocumentField.js +1 -1
  27. package/dist/components/controlled/file/ControlledFileField.js +1 -1
  28. package/dist/components/controlled/file/ControlledImageField.js +1 -1
  29. package/dist/components/controlled/file/ControlledMultiDocumentField.js +1 -1
  30. package/dist/components/controlled/file/ControlledMultiFileField.js +1 -1
  31. package/dist/components/controlled/file/ControlledMultiImageField.js +1 -1
  32. package/dist/components/controlled/file/index.js +1 -1
  33. package/dist/components/controlled/index.js +1 -1
  34. package/dist/components/controlled/input/ControlledCheckboxField.js +1 -1
  35. package/dist/components/controlled/input/ControlledCurrencyField.js +1 -1
  36. package/dist/components/controlled/input/ControlledDurationField.js +1 -1
  37. package/dist/components/controlled/input/ControlledGdprConsentField.js +1 -1
  38. package/dist/components/controlled/input/ControlledNumberField.js +1 -1
  39. package/dist/components/controlled/input/ControlledPasswordField.js +1 -1
  40. package/dist/components/controlled/input/ControlledPhoneField.js +1 -1
  41. package/dist/components/controlled/input/ControlledPriceField.js +1 -1
  42. package/dist/components/controlled/input/ControlledRangeField.js +1 -1
  43. package/dist/components/controlled/input/ControlledRatingField.js +1 -1
  44. package/dist/components/controlled/input/ControlledSwitchField.js +1 -1
  45. package/dist/components/controlled/input/ControlledTextField.js +1 -1
  46. package/dist/components/controlled/input/ControlledTextareaField.js +1 -1
  47. package/dist/components/controlled/input/index.js +1 -1
  48. package/dist/components/controlled/select/ControlledComboboxField.js +1 -1
  49. package/dist/components/controlled/select/ControlledDropdownField.js +1 -1
  50. package/dist/components/controlled/select/ControlledMultiDropdownField.js +1 -1
  51. package/dist/components/controlled/select/ControlledRadioField.js +1 -1
  52. package/dist/components/controlled/select/ControlledReferenceField.d.ts +20 -0
  53. package/dist/components/controlled/select/ControlledReferenceField.d.ts.map +1 -0
  54. package/dist/components/controlled/select/ControlledReferenceField.js +1 -0
  55. package/dist/components/controlled/select/ControlledYearField.js +1 -1
  56. package/dist/components/controlled/select/index.d.ts +1 -0
  57. package/dist/components/controlled/select/index.d.ts.map +1 -1
  58. package/dist/components/controlled/select/index.js +1 -1
  59. package/dist/components/controlled/types.js +1 -1
  60. package/dist/components/fields/display/AvatarFieldDisplay.js +1 -1
  61. package/dist/components/fields/display/BadgeFieldDisplay.js +1 -1
  62. package/dist/components/fields/display/ButtonFieldDisplay.js +1 -1
  63. package/dist/components/fields/display/CheckboxFieldDisplay.js +1 -1
  64. package/dist/components/fields/display/DateFieldDisplay.js +1 -1
  65. package/dist/components/fields/display/DropdownDisplay.js +1 -1
  66. package/dist/components/fields/display/FileFieldDisplay.js +1 -1
  67. package/dist/components/fields/display/GeoPointFieldDisplay.js +1 -1
  68. package/dist/components/fields/display/HiddenFieldDisplay.js +1 -1
  69. package/dist/components/fields/display/ImageFieldDisplay.js +1 -1
  70. package/dist/components/fields/display/LinkFieldDisplay.js +1 -1
  71. package/dist/components/fields/display/MapFieldDisplay.js +1 -1
  72. package/dist/components/fields/display/MultiDropdownDisplay.js +1 -1
  73. package/dist/components/fields/display/MultiInputTextFieldDisplay.js +1 -1
  74. package/dist/components/fields/display/NumberFieldDisplay.js +1 -1
  75. package/dist/components/fields/display/PasswordFieldDisplay.js +1 -1
  76. package/dist/components/fields/display/PhoneNumberDisplay.js +1 -1
  77. package/dist/components/fields/display/RadioFieldDisplay.js +1 -1
  78. package/dist/components/fields/display/RangeFieldDisplay.js +1 -1
  79. package/dist/components/fields/display/ReferenceFieldDisplay.js +1 -1
  80. package/dist/components/fields/display/RichTextDisplay.js +2 -2
  81. package/dist/components/fields/display/TextAreaDisplay.js +1 -1
  82. package/dist/components/fields/display/TextFieldDisplay.js +1 -1
  83. package/dist/components/fields/display/TimestampFieldDisplay.js +1 -1
  84. package/dist/components/fields/display/index.js +1 -1
  85. package/dist/components/form/fields/AddressFieldComponent.d.ts.map +1 -1
  86. package/dist/components/form/fields/AddressFieldComponent.js +1 -1
  87. package/dist/components/form/fields/AvatarFieldComponent.js +1 -1
  88. package/dist/components/form/fields/BadgeFieldComponent.js +1 -1
  89. package/dist/components/form/fields/ButtonFieldComponent.js +1 -1
  90. package/dist/components/form/fields/CheckboxFieldComponent.js +1 -1
  91. package/dist/components/form/fields/ComboboxComponent.js +1 -1
  92. package/dist/components/form/fields/CurrencyFieldComponent.js +1 -1
  93. package/dist/components/form/fields/DateFieldComponent.js +1 -1
  94. package/dist/components/form/fields/DocumentFieldComponent.js +1 -1
  95. package/dist/components/form/fields/DropdownComponent.js +1 -1
  96. package/dist/components/form/fields/DurationFieldComponent.js +1 -1
  97. package/dist/components/form/fields/FileFieldComponent.js +1 -1
  98. package/dist/components/form/fields/GdprConsentFieldComponent.js +1 -1
  99. package/dist/components/form/fields/GeoPointFieldComponent.js +1 -1
  100. package/dist/components/form/fields/HiddenFieldComponent.js +1 -1
  101. package/dist/components/form/fields/ImageFieldComponent.js +1 -1
  102. package/dist/components/form/fields/MapFieldComponent.js +1 -1
  103. package/dist/components/form/fields/MultiDropdownComponent.d.ts.map +1 -1
  104. package/dist/components/form/fields/MultiDropdownComponent.js +1 -1
  105. package/dist/components/form/fields/MultiInputTextFieldComponent.js +1 -1
  106. package/dist/components/form/fields/NumberFieldComponent.js +1 -1
  107. package/dist/components/form/fields/PasswordFieldComponent.js +1 -1
  108. package/dist/components/form/fields/PhoneNumberComponent.js +1 -1
  109. package/dist/components/form/fields/PriceFieldComponent.js +1 -1
  110. package/dist/components/form/fields/RadioFieldComponent.js +1 -1
  111. package/dist/components/form/fields/RangeFieldComponent.js +1 -1
  112. package/dist/components/form/fields/RatingFieldComponent.js +1 -1
  113. package/dist/components/form/fields/ReferenceFieldComponent.js +1 -1
  114. package/dist/components/form/fields/RichTextComponent.js +1 -1
  115. package/dist/components/form/fields/SwitchFieldComponent.d.ts.map +1 -1
  116. package/dist/components/form/fields/SwitchFieldComponent.js +1 -1
  117. package/dist/components/form/fields/TextAreaComponent.js +1 -1
  118. package/dist/components/form/fields/TextFieldComponent.js +1 -1
  119. package/dist/components/form/fields/TimestampFieldComponent.js +1 -1
  120. package/dist/components/form/fields/index.js +1 -1
  121. package/dist/components/form/fields/internal/TiptapEditor.js +2 -2
  122. package/dist/components/form/internal/ImageViewerDialog.js +1 -1
  123. package/dist/components/index.js +1 -1
  124. package/dist/contexts/UploadContext.js +1 -1
  125. package/dist/contexts/index.js +1 -1
  126. package/dist/fieldTypeRegistry.d.ts +3 -1
  127. package/dist/fieldTypeRegistry.d.ts.map +1 -1
  128. package/dist/fieldTypeRegistry.js +1 -1
  129. package/dist/forms/hooks/index.js +1 -1
  130. package/dist/forms/hooks/useController.js +1 -1
  131. package/dist/forms/hooks/useEntityField.js +1 -1
  132. package/dist/forms/hooks/useEntityForm.js +1 -1
  133. package/dist/forms/index.js +1 -1
  134. package/dist/forms/utils/buildInitialValues.js +1 -1
  135. package/dist/forms/utils/getFieldsForOperation.js +1 -1
  136. package/dist/forms/utils/index.js +1 -1
  137. package/dist/forms/utils/isFieldEditable.js +1 -1
  138. package/dist/forms/utils/translateFieldLabel.js +1 -1
  139. package/dist/forms/utils/validateEntity.js +1 -1
  140. package/dist/hooks/index.d.ts +3 -0
  141. package/dist/hooks/index.d.ts.map +1 -1
  142. package/dist/hooks/index.js +1 -1
  143. package/dist/hooks/useCrudFilters.js +1 -1
  144. package/dist/hooks/useEntityFavorites.js +1 -1
  145. package/dist/hooks/useFieldConditions.d.ts +27 -0
  146. package/dist/hooks/useFieldConditions.d.ts.map +1 -0
  147. package/dist/hooks/useFieldConditions.js +1 -0
  148. package/dist/hooks/useFileUpload.js +1 -1
  149. package/dist/hooks/useReferenceResolver.d.ts +15 -0
  150. package/dist/hooks/useReferenceResolver.d.ts.map +1 -0
  151. package/dist/hooks/useReferenceResolver.js +1 -0
  152. package/dist/hooks/useRelatedItems.js +1 -1
  153. package/dist/hooks/useUnsavedChangesWarning.js +1 -1
  154. package/dist/index.d.ts +5 -2
  155. package/dist/index.d.ts.map +1 -1
  156. package/dist/index.js +1 -1
  157. package/dist/registerBuiltinFieldTypes.d.ts.map +1 -1
  158. package/dist/registerBuiltinFieldTypes.js +1 -1
  159. package/dist/stores/FormStore.js +1 -1
  160. package/dist/stores/UploadStore.js +1 -1
  161. package/dist/stores/index.js +1 -1
  162. package/dist/tsconfig.tsbuildinfo +1 -1
  163. package/dist/types.js +1 -1
  164. package/dist/useBaseCrudList.js +1 -1
  165. package/dist/useCrud.js +1 -1
  166. package/dist/useCrudCardList.d.ts.map +1 -1
  167. package/dist/useCrudCardList.js +1 -1
  168. package/dist/useCrudList.js +1 -1
  169. package/dist/utils/clientListProcessing.js +1 -1
  170. package/dist/utils/collections.js +1 -1
  171. package/dist/utils/fileStorage.js +1 -1
  172. package/dist/utils/imageProcessing.d.ts +1 -3
  173. package/dist/utils/imageProcessing.d.ts.map +1 -1
  174. package/dist/utils/imageProcessing.js +1 -1
  175. package/dist/utils/imageStorage.js +1 -1
  176. package/dist/utils/imageUtils.js +1 -1
  177. package/dist/utils/matchesFilter.d.ts.map +1 -1
  178. package/dist/utils/matchesFilter.js +1 -1
  179. package/dist/utils/mergeWithOptimistic.js +1 -1
  180. package/dist/utils/sanitizeHtml.js +1 -1
  181. package/dist/utils/scopeUtils.js +1 -1
  182. package/dist/utils/uploadValidation.js +1 -1
  183. package/dist/workflows/WorkflowPersistence.d.ts +31 -0
  184. package/dist/workflows/WorkflowPersistence.d.ts.map +1 -0
  185. package/dist/workflows/WorkflowPersistence.js +1 -0
  186. package/dist/workflows/defineWorkflow.d.ts +92 -0
  187. package/dist/workflows/defineWorkflow.d.ts.map +1 -0
  188. package/dist/workflows/defineWorkflow.js +1 -0
  189. package/dist/workflows/index.d.ts +15 -0
  190. package/dist/workflows/index.d.ts.map +1 -0
  191. package/dist/workflows/index.js +1 -0
  192. package/dist/workflows/useEntityWorkflow.d.ts +54 -0
  193. package/dist/workflows/useEntityWorkflow.d.ts.map +1 -0
  194. package/dist/workflows/useEntityWorkflow.js +1 -0
  195. package/package.json +3 -3
@@ -1 +1 @@
1
- "use client";import{createDoNotDevStore as l}from"@donotdev/core";const i={status:"idle",error:null,uploadProgress:0,isDirty:!1},m=l({name:"form-store",createStore:(o,t)=>{const n=new Map;return{forms:{},startSubmit:r=>{o(s=>{const e=s.forms[r]||i;return{forms:{...s.forms,[r]:{...e,status:"uploading",error:null,uploadProgress:0}}}})},setUploading:(r,s)=>{o(e=>{const u=e.forms[r]||i;return{forms:{...e.forms,[r]:{...u,status:"uploading",uploadProgress:Math.min(100,Math.max(0,s))}}}})},setValidating:r=>{o(s=>{const e=s.forms[r]||i;return{forms:{...s.forms,[r]:{...e,status:"validating",uploadProgress:100}}}})},setSubmitting:r=>{o(s=>{const e=s.forms[r]||i;return{forms:{...s.forms,[r]:{...e,status:"submitting"}}}})},setSuccess:r=>{o(u=>{const a=u.forms[r]||i;return{forms:{...u.forms,[r]:{...a,status:"success",error:null}}}});const s=n.get(r);s!==void 0&&clearTimeout(s);const e=setTimeout(()=>{n.delete(r),t().reset(r)},1500);n.set(r,e)},setError:(r,s)=>{o(e=>{const u=e.forms[r]||i;return{forms:{...e.forms,[r]:{...u,status:"error",error:s}}}})},reset:r=>{o(s=>({forms:{...s.forms,[r]:{...i}}}))},setIsDirty:(r,s)=>{o(e=>{const u=e.forms[r]||i;return{forms:{...e.forms,[r]:{...u,isDirty:s}}}})},hasDirtyForms:()=>{const r=t().forms;return Object.values(r).some(s=>s.isDirty)},getDirtyFormIds:()=>{const r=t().forms;return Object.entries(r).filter(([s,e])=>e.isDirty).map(([s])=>s)},cleanup:r=>{const s=n.get(r);s!==void 0&&(clearTimeout(s),n.delete(r)),o(e=>{const{[r]:u,...a}=e.forms;return{forms:a}})},getStatus:r=>t().forms[r]?.status??"idle",isLoading:r=>{const s=t().forms[r]?.status??"idle";return s==="uploading"||s==="validating"||s==="submitting"},getUploadProgress:r=>t().forms[r]?.uploadProgress??0,getError:r=>t().forms[r]?.error??null,getIsDirty:r=>t().forms[r]?.isDirty??!1}}}),c=o=>m(t=>t.forms[o]?.status??"idle"),g=o=>m(t=>{const n=t.forms[o]?.status??"idle";return n==="uploading"||n==="validating"||n==="submitting"}),p=o=>m(t=>t.forms[o]?.uploadProgress??0),d=o=>m(t=>t.forms[o]?.error??null),D=o=>m(t=>t.forms[o]?.isDirty??!1),y=()=>m(o=>Object.values(o.forms).some(t=>t.isDirty));export{d as useFormError,D as useFormIsDirty,g as useFormLoading,c as useFormStatus,m as useFormStore,y as useHasDirtyForms,p as useUploadProgress};
1
+ "use client";import{createDoNotDevStore as f}from"@donotdev/core";const a={status:"idle",error:null,uploadProgress:0,isDirty:!1},i=f({name:"form-store",createStore:(t,o)=>{const m=new Map;return{forms:{},startSubmit:s=>{t(r=>{const e=r.forms[s]||a;return{forms:{...r.forms,[s]:{...e,status:"uploading",error:null,uploadProgress:0}}}})},setUploading:(s,r)=>{t(e=>{const u=e.forms[s]||a;return{forms:{...e.forms,[s]:{...u,status:"uploading",uploadProgress:Math.min(100,Math.max(0,r))}}}})},setValidating:s=>{t(r=>{const e=r.forms[s]||a;return{forms:{...r.forms,[s]:{...e,status:"validating",uploadProgress:100}}}})},setSubmitting:s=>{t(r=>{const e=r.forms[s]||a;return{forms:{...r.forms,[s]:{...e,status:"submitting"}}}})},setSuccess:s=>{t(u=>{const n=u.forms[s]||a;return{forms:{...u.forms,[s]:{...n,status:"success",error:null}}}});const r=m.get(s);r!==void 0&&clearTimeout(r);const e=setTimeout(()=>{m.delete(s),o().reset(s)},1500);m.set(s,e)},setError:(s,r)=>{t(e=>{const u=e.forms[s]||a;return{forms:{...e.forms,[s]:{...u,status:"error",error:r}}}})},reset:s=>{t(r=>({forms:{...r.forms,[s]:{...a}}}))},setIsDirty:(s,r)=>{t(e=>{const u=e.forms[s]||a;return{forms:{...e.forms,[s]:{...u,isDirty:r}}}})},hasDirtyForms:()=>{const s=o().forms;return Object.values(s).some(r=>r.isDirty)},getDirtyFormIds:()=>{const s=o().forms;return Object.entries(s).filter(([r,e])=>e.isDirty).map(([r])=>r)},cleanup:s=>{const r=m.get(s);r!==void 0&&(clearTimeout(r),m.delete(s)),t(e=>{const{[s]:u,...n}=e.forms;return{forms:n}})},getStatus:s=>o().forms[s]?.status??"idle",isLoading:s=>{const r=o().forms[s]?.status??"idle";return r==="uploading"||r==="validating"||r==="submitting"},getUploadProgress:s=>o().forms[s]?.uploadProgress??0,getError:s=>o().forms[s]?.error??null,getIsDirty:s=>o().forms[s]?.isDirty??!1}}}),l=t=>i(o=>o.forms[t]?.status??"idle"),c=t=>i(o=>{const m=o.forms[t]?.status??"idle";return m==="uploading"||m==="validating"||m==="submitting"}),g=t=>i(o=>o.forms[t]?.uploadProgress??0),d=t=>i(o=>o.forms[t]?.error??null),p=t=>i(o=>o.forms[t]?.isDirty??!1),D=()=>i(t=>Object.values(t.forms).some(o=>o.isDirty));export{d as useFormError,p as useFormIsDirty,c as useFormLoading,l as useFormStatus,i as useFormStore,D as useHasDirtyForms,g as useUploadProgress};
@@ -1 +1 @@
1
- "use client";import{createDoNotDevStore as y}from"@donotdev/core";const g={status:"idle",progress:0,error:null},F=y({name:"upload-store",createStore:(u,e)=>({uploads:{},uploadFunctions:{},checkPendingFunctions:{},retryAttempts:{},maxRetries:3,retryDelay:1e3,registerUpload:(n,t,s,o)=>{u(r=>({uploadFunctions:{...r.uploadFunctions,[n]:{...r.uploadFunctions[n]||{},[t]:s}},checkPendingFunctions:{...r.checkPendingFunctions,[n]:{...r.checkPendingFunctions[n]||{},[t]:o||(()=>!1)}}}))},unregisterUpload:(n,t)=>{u(s=>{const o=s.uploadFunctions[n],r=s.checkPendingFunctions[n];if(!o)return s;const{[t]:c,...l}=o,{[t]:p,...a}=r||{},{[t]:d,...h}=s.retryAttempts[n]||{};return{uploadFunctions:{...s.uploadFunctions,[n]:l},checkPendingFunctions:{...s.checkPendingFunctions,[n]:a},retryAttempts:{...s.retryAttempts,[n]:h}}})},startUpload:(n,t)=>{u(s=>({uploads:{...s.uploads,[n]:{...s.uploads[n]||{},[t]:{status:"uploading",progress:0,error:null}}}}))},setProgress:(n,t,s)=>{u(o=>{const r=o.uploads[n]?.[t]||g;return{uploads:{...o.uploads,[n]:{...o.uploads[n]||{},[t]:{...r,progress:Math.min(100,Math.max(0,s))}}}}})},completeUpload:(n,t)=>{u(s=>{const o=s.uploads[n]?.[t]||g;return{uploads:{...s.uploads,[n]:{...s.uploads[n]||{},[t]:{...o,status:"complete",progress:100}}}}})},failUpload:(n,t,s)=>{u(o=>{const r=o.uploads[n]?.[t]||g;return{uploads:{...o.uploads,[n]:{...o.uploads[n]||{},[t]:{...r,status:"error",error:s}}}}})},resetUpload:(n,t)=>{u(s=>({uploads:{...s.uploads,[n]:{...s.uploads[n]||{},[t]:{...g}}}}))},resetForm:n=>{u(t=>({uploads:{...t.uploads,[n]:{}}}))},cleanup:n=>{u(t=>{const{[n]:s,...o}=t.uploads,{[n]:r,...c}=t.uploadFunctions,{[n]:l,...p}=t.checkPendingFunctions,{[n]:a,...d}=t.retryAttempts;return{uploads:o,uploadFunctions:c,checkPendingFunctions:p,retryAttempts:d}})},uploadAll:async n=>{const s=e().uploadFunctions[n];if(!s)return;const o=Object.entries(s);if(o.length===0)return;const r=async(c,l,p=1)=>{e().startUpload(n,c);try{await l(a=>{e().setProgress(n,c,a)}),e().completeUpload(n,c),u(a=>({retryAttempts:{...a.retryAttempts,[n]:{...a.retryAttempts[n]||{},[c]:0}}}))}catch(a){const d=a instanceof Error?a.message:"Upload failed",h=e().maxRetries;if((e().retryAttempts[n]?.[c]??0)<h){u(i=>({retryAttempts:{...i.retryAttempts,[n]:{...i.retryAttempts[n]||{},[c]:(i.retryAttempts[n]?.[c]??0)+1}}}));const P=e().retryDelay*Math.pow(2,p-1);return await new Promise(i=>setTimeout(i,P)),r(c,l,p+1)}else throw e().failUpload(n,c,d),a}};await Promise.all(o.map(async([c,l])=>{await r(c,l)}))},hasPendingUploads:n=>{const t=e(),s=t.uploadFunctions[n],o=t.checkPendingFunctions[n];return s?Object.entries(s).some(([r,c])=>{const l=o?.[r];return l?l():!0}):!1},getStatus:(n,t)=>e().uploads[n]?.[t]?.status??"idle",getProgress:(n,t)=>e().uploads[n]?.[t]?.progress??0,getTotalProgress:n=>{const t=e().uploads[n];if(!t)return 100;const s=Object.values(t);if(s.length===0)return 100;const o=s.reduce((r,c)=>r+c.progress,0);return Math.round(o/s.length)},isUploading:n=>{const t=e().uploads[n];return t?Object.values(t).some(s=>s.status==="uploading"):!1},getError:(n,t)=>e().uploads[n]?.[t]?.error??null})}),k=u=>F(e=>{const n=e.uploads[u];if(!n)return 100;const t=Object.values(n);if(t.length===0)return 100;const s=t.reduce((o,r)=>o+r.progress,0);return Math.round(s/t.length)}),_=u=>F(e=>{const n=e.uploads[u];return n?Object.values(n).some(t=>t.status==="uploading"):!1}),x=(u,e)=>F(n=>n.uploads[u]?.[e]?.progress??0),m=(u,e)=>F(n=>n.uploads[u]?.[e]?.status??"idle");export{x as useFieldProgress,m as useFieldUploadStatus,_ as useIsUploading,k as useTotalProgress,F as useUploadStore};
1
+ "use client";import{createDoNotDevStore as F}from"@donotdev/core";const m={status:"idle",progress:0,error:null},c=F({name:"upload-store",createStore:(u,a)=>({uploads:{},uploadFunctions:{},checkPendingFunctions:{},retryAttempts:{},maxRetries:3,retryDelay:1e3,registerUpload:(t,s,e,r)=>{u(o=>({uploadFunctions:{...o.uploadFunctions,[t]:{...o.uploadFunctions[t]||{},[s]:e}},checkPendingFunctions:{...o.checkPendingFunctions,[t]:{...o.checkPendingFunctions[t]||{},[s]:r||(()=>!1)}}}))},unregisterUpload:(t,s)=>{u(e=>{const r=e.uploadFunctions[t],o=e.checkPendingFunctions[t];if(!r)return e;const{[s]:l,...p}=r,{[s]:n,...i}=o||{},{[s]:g,...h}=e.retryAttempts[t]||{};return{uploadFunctions:{...e.uploadFunctions,[t]:p},checkPendingFunctions:{...e.checkPendingFunctions,[t]:i},retryAttempts:{...e.retryAttempts,[t]:h}}})},startUpload:(t,s)=>{u(e=>({uploads:{...e.uploads,[t]:{...e.uploads[t]||{},[s]:{status:"uploading",progress:0,error:null}}}}))},setProgress:(t,s,e)=>{u(r=>{const o=r.uploads[t]?.[s]||m;return{uploads:{...r.uploads,[t]:{...r.uploads[t]||{},[s]:{...o,progress:Math.min(100,Math.max(0,e))}}}}})},completeUpload:(t,s)=>{u(e=>{const r=e.uploads[t]?.[s]||m;return{uploads:{...e.uploads,[t]:{...e.uploads[t]||{},[s]:{...r,status:"complete",progress:100}}}}})},failUpload:(t,s,e)=>{u(r=>{const o=r.uploads[t]?.[s]||m;return{uploads:{...r.uploads,[t]:{...r.uploads[t]||{},[s]:{...o,status:"error",error:e}}}}})},resetUpload:(t,s)=>{u(e=>({uploads:{...e.uploads,[t]:{...e.uploads[t]||{},[s]:{...m}}}}))},resetForm:t=>{u(s=>({uploads:{...s.uploads,[t]:{}}}))},cleanup:t=>{u(s=>{const{[t]:e,...r}=s.uploads,{[t]:o,...l}=s.uploadFunctions,{[t]:p,...n}=s.checkPendingFunctions,{[t]:i,...g}=s.retryAttempts;return{uploads:r,uploadFunctions:l,checkPendingFunctions:n,retryAttempts:g}})},uploadAll:async t=>{const s=a().uploadFunctions[t];if(!s)return;const e=Object.entries(s);if(e.length===0)return;const r=async(o,l,p=1)=>{a().startUpload(t,o);try{await l(n=>{a().setProgress(t,o,n)}),a().completeUpload(t,o),u(n=>({retryAttempts:{...n.retryAttempts,[t]:{...n.retryAttempts[t]||{},[o]:0}}}))}catch(n){const i=n instanceof Error?n.message:"Upload failed",g=a().maxRetries;if((a().retryAttempts[t]?.[o]??0)<g){u(d=>({retryAttempts:{...d.retryAttempts,[t]:{...d.retryAttempts[t]||{},[o]:(d.retryAttempts[t]?.[o]??0)+1}}}));const h=a().retryDelay*Math.pow(2,p-1);return await new Promise(d=>setTimeout(d,h)),r(o,l,p+1)}else throw a().failUpload(t,o,i),n}};await Promise.all(e.map(async([o,l])=>{await r(o,l)}))},hasPendingUploads:t=>{const s=a(),e=s.uploadFunctions[t],r=s.checkPendingFunctions[t];return e?Object.entries(e).some(([o,l])=>{const p=r?.[o];return p?p():!0}):!1},getStatus:(t,s)=>a().uploads[t]?.[s]?.status??"idle",getProgress:(t,s)=>a().uploads[t]?.[s]?.progress??0,getTotalProgress:t=>{const s=a().uploads[t];if(!s)return 100;const e=Object.values(s);if(e.length===0)return 100;const r=e.reduce((o,l)=>o+l.progress,0);return Math.round(r/e.length)},isUploading:t=>{const s=a().uploads[t];return s?Object.values(s).some(e=>e.status==="uploading"):!1},getError:(t,s)=>a().uploads[t]?.[s]?.error??null})}),y=u=>c(a=>{const t=a.uploads[u];if(!t)return 100;const s=Object.values(t);if(s.length===0)return 100;const e=s.reduce((r,o)=>r+o.progress,0);return Math.round(e/s.length)}),P=u=>c(a=>{const t=a.uploads[u];return t?Object.values(t).some(s=>s.status==="uploading"):!1}),A=(u,a)=>c(t=>t.uploads[u]?.[a]?.progress??0),U=(u,a)=>c(t=>t.uploads[u]?.[a]?.status??"idle");export{A as useFieldProgress,U as useFieldUploadStatus,P as useIsUploading,y as useTotalProgress,c as useUploadStore};
@@ -1 +1 @@
1
- import{useFormStore as o,useFormStatus as e,useFormLoading as u,useUploadProgress as t,useFormError as a,useFormIsDirty as m,useHasDirtyForms as F}from"./FormStore";import{useUploadStore as l,useTotalProgress as i,useIsUploading as p,useFieldProgress as g,useFieldUploadStatus as S}from"./UploadStore";export{g as useFieldProgress,S as useFieldUploadStatus,a as useFormError,m as useFormIsDirty,u as useFormLoading,e as useFormStatus,o as useFormStore,F as useHasDirtyForms,p as useIsUploading,i as useTotalProgress,t as useUploadProgress,l as useUploadStore};
1
+ import{useFormStore as s,useFormStatus as a,useFormLoading as r,useUploadProgress as o,useFormError as e,useFormIsDirty as u,useHasDirtyForms as t}from"./FormStore";import{useUploadStore as m,useTotalProgress as F,useIsUploading as i,useFieldProgress as l,useFieldUploadStatus as d}from"./UploadStore";export{l as useFieldProgress,d as useFieldUploadStatus,e as useFormError,u as useFormIsDirty,r as useFormLoading,a as useFormStatus,s as useFormStore,t as useHasDirtyForms,i as useIsUploading,F as useTotalProgress,o as useUploadProgress,m as useUploadStore};