@donotdev/crud 0.0.7 → 0.0.9

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 (184) hide show
  1. package/dist/CrudService.d.ts +6 -54
  2. package/dist/CrudService.d.ts.map +1 -1
  3. package/dist/CrudService.js +1 -1
  4. package/dist/CrudStore.d.ts +1 -94
  5. package/dist/CrudStore.d.ts.map +1 -1
  6. package/dist/adapters/FirestoreAdapter.d.ts +3 -1
  7. package/dist/adapters/FirestoreAdapter.d.ts.map +1 -1
  8. package/dist/adapters/FirestoreAdapter.js +1 -1
  9. package/dist/adapters/FunctionsAdapter.d.ts +8 -1
  10. package/dist/adapters/FunctionsAdapter.d.ts.map +1 -1
  11. package/dist/adapters/FunctionsAdapter.js +1 -1
  12. package/dist/builtinFieldTypes.d.ts.map +1 -1
  13. package/dist/builtinFieldTypes.js +1 -1
  14. package/dist/components/EntityCardList.d.ts +5 -3
  15. package/dist/components/EntityCardList.d.ts.map +1 -1
  16. package/dist/components/EntityCardList.js +1 -1
  17. package/dist/components/EntityDisplayRenderer.d.ts +3 -3
  18. package/dist/components/EntityDisplayRenderer.d.ts.map +1 -1
  19. package/dist/components/EntityDisplayRenderer.js +1 -1
  20. package/dist/components/EntityFilters.d.ts +43 -0
  21. package/dist/components/EntityFilters.d.ts.map +1 -0
  22. package/dist/components/EntityFilters.js +1 -0
  23. package/dist/components/EntityFormRenderer.d.ts +22 -1
  24. package/dist/components/EntityFormRenderer.d.ts.map +1 -1
  25. package/dist/components/EntityFormRenderer.js +1 -1
  26. package/dist/components/EntityList.d.ts +12 -6
  27. package/dist/components/EntityList.d.ts.map +1 -1
  28. package/dist/components/EntityList.js +1 -1
  29. package/dist/components/FormFieldRenderer.d.ts.map +1 -1
  30. package/dist/components/controlled/complex/ControlledAddressField.d.ts +3 -0
  31. package/dist/components/controlled/complex/ControlledAddressField.d.ts.map +1 -1
  32. package/dist/components/controlled/complex/ControlledDateField.d.ts +3 -0
  33. package/dist/components/controlled/complex/ControlledDateField.d.ts.map +1 -1
  34. package/dist/components/controlled/complex/ControlledGeoPointField.d.ts +3 -0
  35. package/dist/components/controlled/complex/ControlledGeoPointField.d.ts.map +1 -1
  36. package/dist/components/controlled/complex/ControlledMapField.d.ts +3 -0
  37. package/dist/components/controlled/complex/ControlledMapField.d.ts.map +1 -1
  38. package/dist/components/controlled/complex/ControlledMultiInputField.d.ts +3 -0
  39. package/dist/components/controlled/complex/ControlledMultiInputField.d.ts.map +1 -1
  40. package/dist/components/controlled/complex/ControlledRichTextField.d.ts +3 -0
  41. package/dist/components/controlled/complex/ControlledRichTextField.d.ts.map +1 -1
  42. package/dist/components/controlled/complex/ControlledTimestampField.d.ts +3 -0
  43. package/dist/components/controlled/complex/ControlledTimestampField.d.ts.map +1 -1
  44. package/dist/components/controlled/complex/index.d.ts.map +1 -1
  45. package/dist/components/controlled/file/ControlledDocumentField.d.ts +3 -0
  46. package/dist/components/controlled/file/ControlledDocumentField.d.ts.map +1 -1
  47. package/dist/components/controlled/file/ControlledFileField.d.ts +3 -0
  48. package/dist/components/controlled/file/ControlledFileField.d.ts.map +1 -1
  49. package/dist/components/controlled/file/ControlledImageField.d.ts +3 -0
  50. package/dist/components/controlled/file/ControlledImageField.d.ts.map +1 -1
  51. package/dist/components/controlled/file/ControlledMultiDocumentField.d.ts +3 -0
  52. package/dist/components/controlled/file/ControlledMultiDocumentField.d.ts.map +1 -1
  53. package/dist/components/controlled/file/ControlledMultiFileField.d.ts +3 -0
  54. package/dist/components/controlled/file/ControlledMultiFileField.d.ts.map +1 -1
  55. package/dist/components/controlled/file/ControlledMultiImageField.d.ts +3 -0
  56. package/dist/components/controlled/file/ControlledMultiImageField.d.ts.map +1 -1
  57. package/dist/components/controlled/file/index.d.ts.map +1 -1
  58. package/dist/components/controlled/index.d.ts +4 -0
  59. package/dist/components/controlled/index.d.ts.map +1 -1
  60. package/dist/components/controlled/input/ControlledCheckboxField.d.ts +3 -0
  61. package/dist/components/controlled/input/ControlledCheckboxField.d.ts.map +1 -1
  62. package/dist/components/controlled/input/ControlledCheckboxField.js +1 -1
  63. package/dist/components/controlled/input/ControlledGdprConsentField.d.ts +8 -0
  64. package/dist/components/controlled/input/ControlledGdprConsentField.d.ts.map +1 -0
  65. package/dist/components/controlled/input/ControlledGdprConsentField.js +1 -0
  66. package/dist/components/controlled/input/ControlledNumberField.d.ts +3 -0
  67. package/dist/components/controlled/input/ControlledNumberField.d.ts.map +1 -1
  68. package/dist/components/controlled/input/ControlledPasswordField.d.ts +3 -0
  69. package/dist/components/controlled/input/ControlledPasswordField.d.ts.map +1 -1
  70. package/dist/components/controlled/input/ControlledPhoneField.d.ts +3 -0
  71. package/dist/components/controlled/input/ControlledPhoneField.d.ts.map +1 -1
  72. package/dist/components/controlled/input/ControlledRangeField.d.ts +3 -0
  73. package/dist/components/controlled/input/ControlledRangeField.d.ts.map +1 -1
  74. package/dist/components/controlled/input/ControlledSwitchField.d.ts +3 -0
  75. package/dist/components/controlled/input/ControlledSwitchField.d.ts.map +1 -1
  76. package/dist/components/controlled/input/ControlledTextField.d.ts +3 -0
  77. package/dist/components/controlled/input/ControlledTextField.d.ts.map +1 -1
  78. package/dist/components/controlled/input/ControlledTextareaField.d.ts +3 -0
  79. package/dist/components/controlled/input/ControlledTextareaField.d.ts.map +1 -1
  80. package/dist/components/controlled/input/index.d.ts +1 -0
  81. package/dist/components/controlled/input/index.d.ts.map +1 -1
  82. package/dist/components/controlled/input/index.js +1 -1
  83. package/dist/components/controlled/select/ControlledComboboxField.d.ts +4 -0
  84. package/dist/components/controlled/select/ControlledComboboxField.d.ts.map +1 -1
  85. package/dist/components/controlled/select/ControlledDropdownField.d.ts +4 -0
  86. package/dist/components/controlled/select/ControlledDropdownField.d.ts.map +1 -1
  87. package/dist/components/controlled/select/ControlledMultiDropdownField.d.ts +4 -0
  88. package/dist/components/controlled/select/ControlledMultiDropdownField.d.ts.map +1 -1
  89. package/dist/components/controlled/select/ControlledRadioField.d.ts +4 -0
  90. package/dist/components/controlled/select/ControlledRadioField.d.ts.map +1 -1
  91. package/dist/components/controlled/select/ControlledYearField.d.ts +9 -0
  92. package/dist/components/controlled/select/ControlledYearField.d.ts.map +1 -0
  93. package/dist/components/controlled/select/ControlledYearField.js +1 -0
  94. package/dist/components/controlled/select/index.d.ts +1 -0
  95. package/dist/components/controlled/select/index.d.ts.map +1 -1
  96. package/dist/components/controlled/select/index.js +1 -1
  97. package/dist/components/controlled/types.d.ts +6 -0
  98. package/dist/components/controlled/types.d.ts.map +1 -1
  99. package/dist/components/form/fields/CheckboxFieldComponent.d.ts +3 -3
  100. package/dist/components/form/fields/CheckboxFieldComponent.d.ts.map +1 -1
  101. package/dist/components/form/fields/DocumentFieldComponent.d.ts.map +1 -1
  102. package/dist/components/form/fields/FileFieldComponent.d.ts.map +1 -1
  103. package/dist/components/form/fields/GdprConsentFieldComponent.d.ts +26 -0
  104. package/dist/components/form/fields/GdprConsentFieldComponent.d.ts.map +1 -0
  105. package/dist/components/form/fields/GdprConsentFieldComponent.js +1 -0
  106. package/dist/components/form/fields/ImageFieldComponent.d.ts +4 -3
  107. package/dist/components/form/fields/ImageFieldComponent.d.ts.map +1 -1
  108. package/dist/components/form/fields/ImageFieldComponent.js +1 -1
  109. package/dist/components/form/fields/PhoneNumberComponent.d.ts.map +1 -1
  110. package/dist/components/form/fields/PhoneNumberComponent.js +1 -1
  111. package/dist/components/form/fields/RichTextComponent.d.ts +2 -21
  112. package/dist/components/form/fields/RichTextComponent.d.ts.map +1 -1
  113. package/dist/components/form/fields/TextAreaComponent.d.ts.map +1 -1
  114. package/dist/components/form/fields/TextAreaComponent.js +1 -1
  115. package/dist/components/form/fields/index.d.ts +3 -1
  116. package/dist/components/form/fields/index.d.ts.map +1 -1
  117. package/dist/components/form/fields/index.js +1 -1
  118. package/dist/components/form/fields/internal/TiptapEditor.d.ts +1 -1
  119. package/dist/components/form/fields/internal/TiptapEditor.d.ts.map +1 -1
  120. package/dist/components/form/fields/types.d.ts +33 -0
  121. package/dist/components/form/fields/types.d.ts.map +1 -0
  122. package/dist/components/form/fields/types.js +0 -0
  123. package/dist/components/form/internal/ImageViewerDialog.d.ts +2 -1
  124. package/dist/components/form/internal/ImageViewerDialog.d.ts.map +1 -1
  125. package/dist/components/form/internal/ImageViewerDialog.js +1 -1
  126. package/dist/components/index.d.ts +2 -0
  127. package/dist/components/index.d.ts.map +1 -1
  128. package/dist/components/index.js +1 -1
  129. package/dist/contexts/UploadContext.d.ts.map +1 -1
  130. package/dist/forms/hooks/useEntityForm.d.ts.map +1 -1
  131. package/dist/forms/hooks/useEntityForm.js +1 -1
  132. package/dist/forms/index.d.ts +2 -2
  133. package/dist/forms/index.d.ts.map +1 -1
  134. package/dist/forms/index.js +1 -1
  135. package/dist/forms/types.d.ts +15 -0
  136. package/dist/forms/types.d.ts.map +1 -1
  137. package/dist/forms/utils/index.d.ts +0 -2
  138. package/dist/forms/utils/index.d.ts.map +1 -1
  139. package/dist/forms/utils/index.js +1 -1
  140. package/dist/forms/utils/validateEntity.js +1 -1
  141. package/dist/hooks/useFileUpload.d.ts +1 -1
  142. package/dist/hooks/useFileUpload.d.ts.map +1 -1
  143. package/dist/hooks/useFileUpload.js +1 -1
  144. package/dist/hooks/useFormNavigationGuard.d.ts +34 -0
  145. package/dist/hooks/useFormNavigationGuard.d.ts.map +1 -0
  146. package/dist/hooks/useFormNavigationGuard.js +1 -0
  147. package/dist/hooks/useUnsavedChangesWarning.d.ts +51 -0
  148. package/dist/hooks/useUnsavedChangesWarning.d.ts.map +1 -0
  149. package/dist/hooks/useUnsavedChangesWarning.js +1 -0
  150. package/dist/index.d.ts +6 -4
  151. package/dist/index.d.ts.map +1 -1
  152. package/dist/index.js +1 -1
  153. package/dist/stores/FormStore.d.ts +17 -0
  154. package/dist/stores/FormStore.d.ts.map +1 -1
  155. package/dist/stores/FormStore.js +1 -1
  156. package/dist/stores/index.d.ts +1 -1
  157. package/dist/stores/index.d.ts.map +1 -1
  158. package/dist/stores/index.js +1 -1
  159. package/dist/tsconfig.tsbuildinfo +1 -1
  160. package/dist/types.d.ts +167 -0
  161. package/dist/types.d.ts.map +1 -0
  162. package/dist/types.js +0 -0
  163. package/dist/useCrud.d.ts +1 -2
  164. package/dist/useCrud.d.ts.map +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.d.ts +7 -0
  169. package/dist/useCrudList.d.ts.map +1 -1
  170. package/dist/useCrudList.js +1 -1
  171. package/dist/utils/fileStorage.d.ts +1 -1
  172. package/dist/utils/fileStorage.d.ts.map +1 -1
  173. package/dist/utils/imageStorage.d.ts +1 -1
  174. package/dist/utils/imageStorage.d.ts.map +1 -1
  175. package/dist/utils/imageUtils.d.ts +1 -1
  176. package/dist/utils/imageUtils.d.ts.map +1 -1
  177. package/dist/utils/mergeWithOptimistic.d.ts +1 -1
  178. package/dist/utils/mergeWithOptimistic.d.ts.map +1 -1
  179. package/dist/utils/uploadValidation.d.ts +1 -1
  180. package/dist/utils/uploadValidation.d.ts.map +1 -1
  181. package/package.json +17 -11
  182. package/dist/forms/utils/optionHelpers.d.ts +0 -54
  183. package/dist/forms/utils/optionHelpers.d.ts.map +0 -1
  184. package/dist/forms/utils/optionHelpers.js +0 -1
@@ -0,0 +1,167 @@
1
+ /**
2
+ * @fileoverview Shared CRUD Types
3
+ * @description Types shared between CrudService and CrudStore to break circular dependencies
4
+ *
5
+ * @version 0.0.1
6
+ * @since 0.0.1
7
+ * @author AMBROISE PARK Consulting
8
+ */
9
+ import type { dndevSchema, QueryClient } from '@donotdev/core';
10
+ import type { QueryOptions } from './adapters/FirestoreAdapter';
11
+ import type { PaginatedQueryResult } from './adapters/FunctionsAdapter';
12
+ /**
13
+ * Backend type for CRUD operations
14
+ *
15
+ * @version 0.0.1
16
+ * @since 0.0.1
17
+ * @author AMBROISE PARK Consulting
18
+ */
19
+ export type BackendType = 'functions' | 'firestore';
20
+ /**
21
+ * Optimistic operation status
22
+ */
23
+ export type OptimisticStatus = 'pending' | 'confirmed' | 'failed';
24
+ /**
25
+ * Optimistic operation metadata
26
+ */
27
+ export interface OptimisticMeta {
28
+ tempId: string;
29
+ originalData: unknown | null;
30
+ status: OptimisticStatus;
31
+ operation: 'add' | 'update' | 'delete';
32
+ }
33
+ /**
34
+ * CRUD store state interface
35
+ *
36
+ * @version 0.0.2
37
+ * @since 0.0.1
38
+ * @author AMBROISE PARK Consulting
39
+ */
40
+ export interface CrudState {
41
+ backend: BackendType | null;
42
+ crudService: CrudServiceInterface | null;
43
+ collections: Record<string, {
44
+ loading: boolean;
45
+ error: Error | null;
46
+ data: Record<string, unknown>;
47
+ lastUpdated: number;
48
+ /** Optimistic operation metadata keyed by document id */
49
+ optimistic: Record<string, OptimisticMeta>;
50
+ }>;
51
+ }
52
+ /**
53
+ * CRUD store actions interface
54
+ *
55
+ * @version 0.0.2
56
+ * @since 0.0.1
57
+ * @author AMBROISE PARK Consulting
58
+ */
59
+ export interface CrudActions {
60
+ setCrudService: (service: CrudServiceInterface) => void;
61
+ setBackend: (backend: BackendType) => void;
62
+ setLoading: (collection: string, loading: boolean) => void;
63
+ setError: (collection: string, error: Error | null) => void;
64
+ setData: (collection: string, id: string, data: unknown) => void;
65
+ /** Batch update multiple documents in a single state update (performance) */
66
+ setDataBatch: (collection: string, items: Array<{
67
+ id: string;
68
+ data: unknown;
69
+ }>) => void;
70
+ removeData: (collection: string, id: string) => void;
71
+ clearCollection: (collection: string) => void;
72
+ clearError: (collection: string) => void;
73
+ /** Add item optimistically (before server confirms) */
74
+ addOptimistic: (collection: string, tempId: string, data: unknown) => void;
75
+ /** Confirm optimistic add - replace temp item with real item */
76
+ confirmOptimistic: (collection: string, tempId: string, realId: string, realData: unknown) => void;
77
+ /** Reject optimistic add - remove temp item */
78
+ rejectOptimistic: (collection: string, tempId: string) => void;
79
+ /** Update item optimistically */
80
+ updateOptimistic: (collection: string, id: string, data: unknown, originalData: unknown) => void;
81
+ /** Confirm optimistic update */
82
+ confirmUpdate: (collection: string, id: string) => void;
83
+ /** Reject optimistic update - restore original data */
84
+ rejectUpdate: (collection: string, id: string) => void;
85
+ /** Delete item optimistically (hide but keep for rollback) */
86
+ deleteOptimistic: (collection: string, id: string, originalData: unknown) => void;
87
+ /** Confirm optimistic delete - remove completely */
88
+ confirmDelete: (collection: string, id: string) => void;
89
+ /** Reject optimistic delete - restore item */
90
+ rejectDelete: (collection: string, id: string) => void;
91
+ getLoading: (collection: string) => boolean;
92
+ getError: (collection: string) => Error | null;
93
+ getData: (collection: string, id: string) => unknown | null;
94
+ /** Check if item is optimistic (not yet confirmed by server) */
95
+ isOptimistic: (collection: string, id: string) => boolean;
96
+ /** Get optimistic status for an item */
97
+ getOptimisticStatus: (collection: string, id: string) => OptimisticStatus | null;
98
+ /** Get all items in collection (including optimistic, excluding deleted) */
99
+ getCollectionData: (collection: string) => Array<{
100
+ id: string;
101
+ data: unknown;
102
+ isOptimistic: boolean;
103
+ }>;
104
+ }
105
+ /**
106
+ * Store API type for CrudService - typed instead of any
107
+ * Used by CrudService to type the store it receives
108
+ */
109
+ export type CrudStoreApi = {
110
+ getState: () => CrudState & CrudActions;
111
+ };
112
+ /**
113
+ * Cache options for read operations
114
+ */
115
+ export interface CacheOptions {
116
+ /** Bypass cache and fetch directly from adapter */
117
+ noCache?: boolean;
118
+ /** Custom stale time in ms (default: Infinity) */
119
+ staleTime?: number;
120
+ }
121
+ /**
122
+ * CRUD Service Interface
123
+ * Complete interface for CRUD operations with caching and optimistic updates
124
+ *
125
+ * @version 0.0.4
126
+ * @since 0.0.1
127
+ * @author AMBROISE PARK Consulting
128
+ */
129
+ export interface CrudServiceInterface {
130
+ initialize(backend: BackendType): Promise<void>;
131
+ setStore(store: CrudStoreApi): void;
132
+ /** Schema accepts unknown since OperationSchemas stores dndevSchema<unknown>. T is for return type. */
133
+ getListQueryOptions<T>(collection: string, queryOptions: QueryOptions, schema: dndevSchema<unknown>, cacheOptions?: CacheOptions, schemaType?: 'list' | 'listCard'): {
134
+ queryKey: readonly string[];
135
+ queryFn: () => Promise<PaginatedQueryResult<T>>;
136
+ staleTime: number;
137
+ };
138
+ /** Schema accepts unknown since OperationSchemas stores dndevSchema<unknown>. T is for return type. */
139
+ getDocQueryOptions<T>(collection: string, id: string, schema: dndevSchema<unknown>, cacheOptions?: CacheOptions): {
140
+ queryKey: readonly string[];
141
+ queryFn: () => Promise<T | null>;
142
+ staleTime: number;
143
+ };
144
+ get<T>(collection: string, id: string, schema: dndevSchema<T>, options?: CacheOptions): Promise<T | null>;
145
+ query<T>(collection: string, options: QueryOptions, schema: dndevSchema<T>, cacheOptions?: CacheOptions, schemaType?: 'list' | 'listCard'): Promise<PaginatedQueryResult<T>>;
146
+ set<T>(collection: string, id: string, data: T, schema: dndevSchema<T>): Promise<void>;
147
+ update<T>(collection: string, id: string, data: Partial<T>): Promise<void>;
148
+ delete(collection: string, id: string): Promise<void>;
149
+ add<T>(collection: string, data: T, schema: dndevSchema<T>): Promise<string>;
150
+ subscribe<T>(collection: string, id: string, callback: (data: T | null, error?: Error) => void, schema: dndevSchema<T>): () => void;
151
+ subscribeToCollection<T>(collection: string, options: QueryOptions, callback: (data: T[], error?: Error) => void, schema: dndevSchema<T>): () => void;
152
+ /** Add with optimistic update - shows item immediately, confirms/rolls back after server */
153
+ addOptimistic<T extends {
154
+ id?: string;
155
+ }>(collection: string, data: T, schema: dndevSchema<T>): Promise<T & {
156
+ id: string;
157
+ }>;
158
+ /** Update with optimistic update - shows change immediately, confirms/rolls back after server */
159
+ updateOptimistic<T>(collection: string, id: string, data: Partial<T>, schema: dndevSchema<T>): Promise<T>;
160
+ /** Delete with optimistic update - hides item immediately, confirms/restores after server */
161
+ deleteOptimistic(collection: string, id: string): Promise<void>;
162
+ /** Invalidate all cached queries for a collection */
163
+ invalidateCollection(collection: string): Promise<void>;
164
+ /** Get the shared QueryClient instance from @donotdev/core */
165
+ getQueryClient(): QueryClient;
166
+ }
167
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
File without changes
package/dist/useCrud.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import type { dndevSchema, Entity, FeatureStatus, OperationSchemas, CrudAPI } from '@donotdev/core';
2
- import type { CrudServiceInterface, CacheOptions } from './CrudService';
3
- import type { BackendType } from './CrudStore';
2
+ import type { CrudServiceInterface, CacheOptions, BackendType } from './types';
4
3
  export declare const EMPTY_DATA: Record<string, unknown>;
5
4
  export declare const EMPTY_OPTIMISTIC: Record<string, unknown>;
6
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"useCrud.d.ts","sourceRoot":"","sources":["../src/useCrud.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,WAAW,EACX,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,OAAO,EACR,MAAM,gBAAgB,CAAC;AAKxB,OAAO,KAAK,EAAE,oBAAoB,EAAgB,YAAY,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,CAAC;AACtD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,CAAC;AAM5D;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,oBAAoB,GAAG,IAAI,CAEpE;AAMD,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAElD,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACvC,8BAA8B;IAC9B,aAAa,EAAE,YAAY,CAAC;IAC5B,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,aAAa,CAAC;AACtD,wBAAgB,OAAO,CAAC,CAAC,GAAG,OAAO,EACjC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,aAAa,CAAC,CAAC,CAAC,CAAC;AACpB,wBAAgB,OAAO,CAAC,CAAC,GAAG,OAAO,EACjC,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,aAAa,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"useCrud.d.ts","sourceRoot":"","sources":["../src/useCrud.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,WAAW,EACX,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,OAAO,EACR,MAAM,gBAAgB,CAAC;AAMxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAK/E,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,CAAC;AACtD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,CAAC;AAM5D;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,oBAAoB,GAAG,IAAI,CAEpE;AAMD,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAElD,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACvC,8BAA8B;IAC9B,aAAa,EAAE,YAAY,CAAC;IAC5B,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,aAAa,CAAC;AACtD,wBAAgB,OAAO,CAAC,CAAC,GAAG,OAAO,EACjC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,aAAa,CAAC,CAAC,CAAC,CAAC;AACpB,wBAAgB,OAAO,CAAC,CAAC,GAAG,OAAO,EACjC,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,aAAa,CAAC,CAAC,CAAC,CAAC"}
package/dist/useCrud.js CHANGED
@@ -1 +1 @@
1
- "use client";import{useEffect as B,useMemo as y,useCallback as n}from"react";import{useFeatureConsent as L,FRAMEWORK_FEATURES as j,FEATURE_STATUS as f,handleError as V,isClient as W,createSchemas as Z,DEGRADED_CRUD_API as $}from"@donotdev/core";import{getCrudService as H}from"./CrudService";import{useCrudStore as a}from"./CrudStore";const J={},ee={};let U=null,v=null,D=!1;function o(){return U}function te(u,i={}){const m=L(j.CRUD),P=a(e=>e.crudService),E=m&&!P,h=m?E?f.INITIALIZING:f.READY:f.DEGRADED;if(u==="status")return h;const S=typeof u=="object"?u:i.entity,t=typeof u=="string"?u:u.collection,d=i.backend||"functions",g=i.noCache??!1,T=i.staleTime,l=y(()=>({noCache:g,staleTime:T}),[g,T]),s=y(()=>{if(i.schema){const e=i.schema;return{create:e,draft:e,update:e,get:e,list:e,listCard:e,delete:e}}if(S)return Z(S)},[i.schema?"custom":S?.name,t]),b=a(e=>e.collections[t]?.data||J),w=a(e=>e.collections[t]?.loading||!1),A=a(e=>e.collections[t]?.error||null),F=a(e=>e.collections[t]?.data.current||null);B(()=>{if(!W()||!m||!s)return;const{crudService:e,backend:c}=a.getState();e&&c===d||v||(v=(async()=>{try{const r=H();U=r,r.setStore(a),await r.initialize(d),D=!1,a.getState().setBackend(d),a.getState().setCrudService(r)}catch(r){D||(V(r,{userMessage:"Failed to initialize CRUD service.",context:{backend:d,collection:t},severity:"error"}),D=!0)}finally{v=null}})())},[m,d,t,s?"hasSchema":"noSchema"]);const C=E||w,k=h===f.READY,x=n(async e=>{const c=o();return!c||!s?null:c.get(t,e,s.get,l)},[t,s?"hasSchema":"noSchema",l]),M=n(async(e,c)=>{const r=o();if(!r||!s)return;const G=c?.status==="draft"?s.draft:s.create;await r.set(t,e,c,G)},[t,s?"hasSchema":"noSchema"]),N=n(async(e,c)=>{const r=o();r&&await r.update(t,e,c)},[t]),z=n(async e=>{const c=o();c&&await c.delete(t,e)},[t]),Y=n(async e=>{const c=o();if(!c||!s)return"";const R=e?.status==="draft"?s.draft:s.create;return c.add(t,e,R)},[t,s?"hasSchema":"noSchema"]),q=n(async e=>{const c=o();return!c||!s?[]:c.query(t,e,s.list,l)},[t,s?"hasSchema":"noSchema",l]),p=n((e,c)=>{const r=o();return!r||!s?()=>{}:r.subscribe(t,e,c,s.get)},[t,s?"hasSchema":"noSchema"]),_=n((e,c)=>{const r=o();return!r||!s?()=>{}:r.subscribeToCollection(t,e,c,s.list)},[t,s?"hasSchema":"noSchema"]),I=n(async()=>{const e=o();e&&await e.invalidateCollection(t)},[t]);return k?{status:f.READY,data:F,loading:C,error:A,get:x,set:M,update:N,delete:z,add:Y,query:q,subscribe:p,subscribeToCollection:_,invalidate:I,isAvailable:!0,_collection:t,_schemas:s,_cacheOptions:l,_storeData:b}:{...$,status:h,loading:C,error:A,subscribe:p,subscribeToCollection:_,invalidate:I,_collection:t,_schemas:s,_cacheOptions:l,_storeData:b}}export{J as EMPTY_DATA,ee as EMPTY_OPTIMISTIC,o as getCrudServiceInstance,te as useCrud};
1
+ "use client";import{useEffect as B,useMemo as y,useCallback as n}from"react";import{useFeatureConsent as L,FRAMEWORK_FEATURES as j,FEATURE_STATUS as f,handleError as V,isClient as W,createSchemas as Z,DEGRADED_CRUD_API as $}from"@donotdev/core";import{getCrudService as H}from"./CrudService";import{useCrudStore as a}from"./CrudStore";const J={},ee={};let U=null,v=null,D=!1;function i(){return U}function te(u,o={}){const m=L(j.CRUD),w=a(e=>e.crudService),E=m&&!w,h=m?E?f.INITIALIZING:f.READY:f.DEGRADED;if(u==="status")return h;const S=typeof u=="object"?u:o.entity,t=typeof u=="string"?u:u.collection,d=o.backend||"functions",g=o.noCache??!1,T=o.staleTime,l=y(()=>({noCache:g,staleTime:T}),[g,T]),s=y(()=>{if(o.schema){const e=o.schema;return{create:e,draft:e,update:e,get:e,list:e,listCard:e,delete:e}}if(S)return Z(S)},[o.schema?"custom":S?.name,t]),b=a(e=>e.collections[t]?.data||J),P=a(e=>e.collections[t]?.loading||!1),A=a(e=>e.collections[t]?.error||null),F=a(e=>e.collections[t]?.data.current||null);B(()=>{if(!W()||!m||!s)return;const{crudService:e,backend:c}=a.getState();e&&c===d||v||(v=(async()=>{try{const r=H();U=r,r.setStore(a),await r.initialize(d),D=!1,a.getState().setBackend(d),a.getState().setCrudService(r)}catch(r){D||(V(r,{userMessage:"Failed to initialize CRUD service.",context:{backend:d,collection:t},severity:"error"}),D=!0)}finally{v=null}})())},[m,d,t,s?"hasSchema":"noSchema"]);const C=E||P,k=h===f.READY,x=n(async e=>{const c=i();return!c||!s?null:c.get(t,e,s.get,l)},[t,s?"hasSchema":"noSchema",l]),M=n(async(e,c)=>{const r=i();if(!r||!s)return;const G=c?.status==="draft"?s.draft:s.create;await r.set(t,e,c,G)},[t,s?"hasSchema":"noSchema"]),N=n(async(e,c)=>{const r=i();r&&await r.update(t,e,c)},[t]),z=n(async e=>{const c=i();c&&await c.delete(t,e)},[t]),Y=n(async e=>{const c=i();if(!c||!s)return"";const R=e?.status==="draft"?s.draft:s.create;return c.add(t,e,R)},[t,s?"hasSchema":"noSchema"]),q=n(async e=>{const c=i();return!c||!s?[]:(await c.query(t,e,s.list,l)).items},[t,s?"hasSchema":"noSchema",l]),p=n((e,c)=>{const r=i();return!r||!s?()=>{}:r.subscribe(t,e,c,s.get)},[t,s?"hasSchema":"noSchema"]),_=n((e,c)=>{const r=i();return!r||!s?()=>{}:r.subscribeToCollection(t,e,c,s.list)},[t,s?"hasSchema":"noSchema"]),I=n(async()=>{const e=i();e&&await e.invalidateCollection(t)},[t]);return k?{status:f.READY,data:F,loading:C,error:A,get:x,set:M,update:N,delete:z,add:Y,query:q,subscribe:p,subscribeToCollection:_,invalidate:I,isAvailable:!0,_collection:t,_schemas:s,_cacheOptions:l,_storeData:b}:{...$,status:h,loading:C,error:A,subscribe:p,subscribeToCollection:_,invalidate:I,_collection:t,_schemas:s,_cacheOptions:l,_storeData:b}}export{J as EMPTY_DATA,ee as EMPTY_OPTIMISTIC,i as getCrudServiceInstance,te as useCrud};
@@ -1 +1 @@
1
- {"version":3,"file":"useCrudCardList.d.ts","sourceRoot":"","sources":["../src/useCrudCardList.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAO5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,WAAW,sBAAsB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAClE,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5B,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACvE,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,OAAO,GAAE,sBAAsB,CAAC,CAAC,CAAM,GACtC,qBAAqB,CAAC,CAAC,CAAC,CAsF1B"}
1
+ {"version":3,"file":"useCrudCardList.d.ts","sourceRoot":"","sources":["../src/useCrudCardList.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAO5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,WAAW,sBAAsB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAClE,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5B,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACvE,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,OAAO,GAAE,sBAAsB,CAAC,CAAC,CAAM,GACtC,qBAAqB,CAAC,CAAC,CAAC,CA6F1B"}
@@ -1 +1 @@
1
- import{useMemo as y,useCallback as T}from"react";import{useQuery as _}from"@donotdev/core";import{useCrudStore as I}from"./CrudStore";import{useCrud as h,getCrudServiceInstance as L,EMPTY_OPTIMISTIC as A}from"./useCrud";import{mergeWithOptimistic as D}from"./utils/mergeWithOptimistic";function K(p,n={}){const C=n.enabled??!0,i=h("status"),e=i==="ready",g=h(p,n),{error:c,invalidate:u,_collection:r,_schemas:a,_cacheOptions:l,_storeData:m}=g,d=I(s=>s.collections[r]?.optimistic||A),t=y(()=>{if(!e||!a)return null;const s=L();return s?s.getListQueryOptions(r,{},a.listCard,l,"listCard"):null},[e,r,l,a?"hasSchema":"noSchema"]),{data:o,isLoading:b,isFetching:q,error:v,refetch:f}=_({queryKey:t?.queryKey??["crud",r,"disabled"],queryFn:t?.queryFn??(()=>Promise.resolve([])),staleTime:t?.staleTime,enabled:C&&!!t}),O=y(()=>!o||!e?[]:D(o,d,m),[o,d,m,e]),S=T(async()=>{e&&(await u(),await f())},[u,f,e]);return e?{status:i,data:{items:O},loading:b,fetching:q,error:v??c,mutate:S,isAvailable:!0}:{status:i,data:{items:[]},loading:!1,fetching:!1,error:c,mutate:async()=>{},isAvailable:!1}}export{K as useCrudCardList};
1
+ import{useMemo as y,useCallback as S}from"react";import{useQuery as T}from"@donotdev/core";import{useCrudStore as _}from"./CrudStore";import{useCrud as h,getCrudServiceInstance as L,EMPTY_OPTIMISTIC as A}from"./useCrud";import{mergeWithOptimistic as D}from"./utils/mergeWithOptimistic";function K(p,n={}){const C=n.enabled??!0,i=h("status"),e=i==="ready",g=h(p,n),{error:c,invalidate:u,_collection:r,_schemas:a,_cacheOptions:l,_storeData:m}=g,d=_(t=>t.collections[r]?.optimistic||A),s=y(()=>{if(!e||!a)return null;const t=L();return t?t.getListQueryOptions(r,{},a.listCard,l,"listCard"):null},[e,r,l,a?"hasSchema":"noSchema"]),{data:o,isLoading:b,isFetching:q,error:v,refetch:f}=T({queryKey:s?.queryKey??["crud",r,"disabled"],queryFn:s?.queryFn??(()=>Promise.resolve({items:[]})),staleTime:s?.staleTime,enabled:C&&!!s}),O=y(()=>{if(!o||!e)return[];const t=o.items;return D(t,d,m)},[o,d,m,e]),I=S(async()=>{e&&(await u(),await f())},[u,f,e]);return e?{status:i,data:{items:O},loading:b,fetching:q,error:v??c,mutate:I,isAvailable:!0}:{status:i,data:{items:[]},loading:!1,fetching:!1,error:c,mutate:async()=>{},isAvailable:!1}}export{K as useCrudCardList};
@@ -12,11 +12,18 @@ import type { UseCrudOptions } from './useCrud';
12
12
  export interface UseCrudListOptions<T> extends UseCrudOptions<T> {
13
13
  /** Automatically fetch data on mount (default: true) */
14
14
  enabled?: boolean;
15
+ /** Pagination mode: 'client' (default) fetches all, 'server' fetches per page */
16
+ pagination?: 'client' | 'server';
17
+ /** Page number for server-side pagination (1-indexed, default: 1) */
18
+ page?: number;
19
+ /** Page size for server-side pagination (default: 10) */
20
+ pageSize?: number;
15
21
  }
16
22
  export interface UseCrudListReturn<T> {
17
23
  status: FeatureStatus;
18
24
  data: {
19
25
  items: T[];
26
+ total?: number;
20
27
  } | null;
21
28
  /** True during initial fetch (show skeletons) */
22
29
  loading: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useCrudList.d.ts","sourceRoot":"","sources":["../src/useCrudList.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAO5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,WAAW,kBAAkB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAC9D,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5B,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACnE,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,OAAO,GAAE,kBAAkB,CAAC,CAAC,CAAM,GAClC,iBAAiB,CAAC,CAAC,CAAC,CAsFtB"}
1
+ {"version":3,"file":"useCrudList.d.ts","sourceRoot":"","sources":["../src/useCrudList.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAO5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKhD,MAAM,WAAW,kBAAkB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAC9D,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iFAAiF;IACjF,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACjC,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACnE,kBAAkB,EAAE,MAAM,GAAG,MAAM,EACnC,OAAO,GAAE,kBAAkB,CAAC,CAAC,CAAM,GAClC,iBAAiB,CAAC,CAAC,CAAC,CA6NtB"}
@@ -1 +1 @@
1
- import{useMemo as y,useCallback as T}from"react";import{useQuery as _}from"@donotdev/core";import{useCrudStore as I}from"./CrudStore";import{useCrud as h,getCrudServiceInstance as L,EMPTY_OPTIMISTIC as A}from"./useCrud";import{mergeWithOptimistic as D}from"./utils/mergeWithOptimistic";function K(p,n={}){const g=n.enabled??!0,i=h("status"),e=i==="ready",b=h(p,n),{error:c,invalidate:u,_collection:t,_schemas:a,_cacheOptions:l,_storeData:m}=b,d=I(s=>s.collections[t]?.optimistic||A),r=y(()=>{if(!e||!a)return null;const s=L();return s?s.getListQueryOptions(t,{},a.list,l,"list"):null},[e,t,l,a?"hasSchema":"noSchema"]),{data:o,isLoading:q,isFetching:v,error:C,refetch:f}=_({queryKey:r?.queryKey??["crud",t,"disabled"],queryFn:r?.queryFn??(()=>Promise.resolve([])),staleTime:r?.staleTime,enabled:g&&!!r}),O=y(()=>!o||!e?[]:D(o,d,m),[o,d,m,e]),S=T(async()=>{e&&(await u(),await f())},[u,f,e]);return e?{status:i,data:{items:O},loading:q,fetching:v,error:C??c,mutate:S,isAvailable:!0}:{status:i,data:{items:[]},loading:!1,fetching:!1,error:c,mutate:async()=>{},isAvailable:!1}}export{K as useCrudList};
1
+ import{useMemo as w,useCallback as B,useRef as x}from"react";import{useQuery as G}from"@donotdev/core";import{useCrudStore as H}from"./CrudStore";import{useCrud as A,getCrudServiceInstance as J,EMPTY_OPTIMISTIC as N}from"./useCrud";import{mergeWithOptimistic as U}from"./utils/mergeWithOptimistic";function ae(L,f={}){const _=f.enabled??!0,l=f.pagination??"client",e=f.page??1,s=f.pageSize??10,b=A("status"),r=b==="ready",E=A(L,f),{error:v,invalidate:C,_collection:m,_schemas:h,_cacheOptions:I,_storeData:O}=E,F=H(t=>t.collections[m]?.optimistic||N),T=x(new Map([[1,null]])),g=x(0),p=w(()=>{if(!r||!h)return null;const t=J();if(!t)return null;if(l==="client")return t.getListQueryOptions(m,{},h.list,I,"list");const d=T.current,i=g.current;let n,o;if(d.has(e))n=d.get(e)??void 0,o=s;else if(e>i&&d.has(i)){const M=e-i;n=d.get(i)??void 0,o=M*s}else n=void 0,o=e*s;return t.getListQueryOptions(m,{limit:o,startAfterId:n},h.list,I,"list")},[r,m,I,h?"hasSchema":"noSchema",l,e,s]),{data:u,isLoading:Q,isFetching:R,error:j,refetch:q}=G({queryKey:p?.queryKey??["crud",m,"disabled"],queryFn:p?.queryFn??(()=>Promise.resolve({items:[]})),staleTime:p?.staleTime,enabled:_&&!!p}),z=w(()=>{if(!u||!r)return{items:[],total:void 0};let t=u.items;if(l==="server"&&t.length>0){const a=T.current,c=g.current,k=t.length;if(Math.ceil(k/s)>1||e>c){const S=a.has(e)?e:c+1;for(let y=S;y<=e;y++){const D=(y-S+1)*s-1;if(D<t.length){const Y=t[D];a.set(y+1,Y.id)}}}u.lastVisible&&a.set(e+1,u.lastVisible),g.current=Math.max(c,e);const P=a.has(e)?0:(e-c-1)*s,W=P+s;t=t.slice(P,W)}const d=U(t,F,O),i=new Set(t.map(a=>a.id));let n=0,o=0;for(const[a,c]of Object.entries(F))c.operation==="add"&&!i.has(a)?n++:c.operation==="delete"&&i.has(a)&&o++;const V=(u.total??t.length)+n-o;return{items:d,total:V}},[u,F,O,r,l,e,s]),K=B(async()=>{r&&(l==="server"&&(T.current=new Map([[1,null]]),g.current=0),await C(),await q())},[C,q,r,l]);return r?{status:b,data:z,loading:Q,fetching:R,error:j??v,mutate:K,isAvailable:!0}:{status:b,data:{items:[],total:void 0},loading:!1,fetching:!1,error:v,mutate:async()=>{},isAvailable:!1}}export{ae as useCrudList};
@@ -1,5 +1,5 @@
1
1
  import type { UploadProgressCallback } from '@donotdev/firebase';
2
- import type { FileAsset } from '@donotdev/types';
2
+ import type { FileAsset } from '@donotdev/core';
3
3
  export type { FileAsset };
4
4
  export interface UploadProgress {
5
5
  bytesTransferred: number;
@@ -1 +1 @@
1
- {"version":3,"file":"fileStorage.d.ts","sourceRoot":"","sources":["../../src/utils/fileStorage.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAYD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAkCpB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,SAAS,EAAE,CAAC,CA4BtB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CA4CxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAY/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAY/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
1
+ {"version":3,"file":"fileStorage.d.ts","sourceRoot":"","sources":["../../src/utils/fileStorage.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAYD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,SAAS,CAAC,CAkCpB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,SAAS,EAAE,CAAC,CA4BtB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CA4CxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAY/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAY/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
@@ -1,5 +1,5 @@
1
1
  import type { UploadProgressCallback } from '@donotdev/firebase';
2
- import type { Picture } from '@donotdev/types';
2
+ import type { Picture } from '@donotdev/core';
3
3
  export type { Picture };
4
4
  export interface UploadProgress {
5
5
  bytesTransferred: number;
@@ -1 +1 @@
1
- {"version":3,"file":"imageStorage.d.ts","sourceRoot":"","sources":["../../src/utils/imageStorage.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,YAAY,EAAE,OAAO,EAAE,CAAC;AAExB,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAYD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,IAAI,EACf,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,OAAO,CAAC,CAmFlB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAcjE"}
1
+ {"version":3,"file":"imageStorage.d.ts","sourceRoot":"","sources":["../../src/utils/imageStorage.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,YAAY,EAAE,OAAO,EAAE,CAAC;AAExB,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAYD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,IAAI,EACf,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,OAAO,CAAC,CAmFlB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAcjE"}
@@ -6,7 +6,7 @@
6
6
  * @since 0.0.1
7
7
  * @author AMBROISE PARK Consulting
8
8
  */
9
- import type { Picture } from '@donotdev/types';
9
+ import type { Picture } from '@donotdev/core';
10
10
  /**
11
11
  * Generate SHA-256 hash of file for deduplication
12
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"imageUtils.d.ts","sourceRoot":"","sources":["../../src/utils/imageUtils.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD7D;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,IAAI,EAAE,IAAI,CAAC;IACX,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kDAAkD;IAClD,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,qCAAqC;IACrC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,YAAY,CAAM;IAE1B,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAS/B,IAAI,IAAI,WAAW,GAAG,IAAI;IAS1B,IAAI,IAAI,WAAW,GAAG,IAAI;IAS1B,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,OAAO;IAIlB,KAAK,IAAI,IAAI;CAId;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,EAAE,MAAM,GACd,aAAa,EAAE,CAEjB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
1
+ {"version":3,"file":"imageUtils.d.ts","sourceRoot":"","sources":["../../src/utils/imageUtils.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD7D;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,IAAI,EAAE,IAAI,CAAC;IACX,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kDAAkD;IAClD,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,qCAAqC;IACrC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,YAAY,CAAM;IAE1B,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAS/B,IAAI,IAAI,WAAW,GAAG,IAAI;IAS1B,IAAI,IAAI,WAAW,GAAG,IAAI;IAS1B,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,OAAO;IAIlB,KAAK,IAAI,IAAI;CAId;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,EAAE,MAAM,GACd,aAAa,EAAE,CAEjB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
@@ -6,7 +6,7 @@
6
6
  * @since 0.0.1
7
7
  * @author AMBROISE PARK Consulting
8
8
  */
9
- import type { OptimisticMeta } from '../CrudStore';
9
+ import type { OptimisticMeta } from '../types';
10
10
  interface WithId {
11
11
  id: string;
12
12
  [key: string]: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"mergeWithOptimistic.d.ts","sourceRoot":"","sources":["../../src/utils/mergeWithOptimistic.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,UAAU,MAAM;IACd,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,SAAS,EAAE,CAAC,EAAE,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC1C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,CAAC,EAAE,CA4BL"}
1
+ {"version":3,"file":"mergeWithOptimistic.d.ts","sourceRoot":"","sources":["../../src/utils/mergeWithOptimistic.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,UAAU,MAAM;IACd,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,SAAS,EAAE,CAAC,EAAE,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC1C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,CAAC,EAAE,CA4BL"}
@@ -7,7 +7,7 @@
7
7
  * @since 0.0.1
8
8
  * @author AMBROISE PARK Consulting
9
9
  */
10
- import type { Picture } from '@donotdev/types';
10
+ import type { Picture } from '@donotdev/core';
11
11
  /**
12
12
  * Check if a URL is a valid storage URL (not a blob URL)
13
13
  * @param url - URL to check
@@ -1 +1 @@
1
- {"version":3,"file":"uploadValidation.d.ts","sourceRoot":"","sources":["../../src/utils/uploadValidation.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAKzD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,SAAK,GAAG,MAAM,EAAE,CA2C/D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAE9C"}
1
+ {"version":3,"file":"uploadValidation.d.ts","sourceRoot":"","sources":["../../src/utils/uploadValidation.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAGzD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,SAAK,GAAG,MAAM,EAAE,CA2C/D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAE9C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@donotdev/crud",
3
- "version": "0.0.7",
3
+ "version": "0.0.9",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -49,35 +49,41 @@
49
49
  "type-check": "tsc --noEmit"
50
50
  },
51
51
  "dependencies": {
52
- "@donotdev/components": "^0.0.13",
53
- "@donotdev/core": "^0.0.14",
52
+ "@dnd-kit/core": "^6.3.1",
53
+ "@dnd-kit/sortable": "^10.0.0",
54
+ "@dnd-kit/utilities": "^3.2.2",
55
+ "@donotdev/components": "^0.0.14",
56
+ "@donotdev/core": "^0.0.18",
54
57
  "@hookform/resolvers": "^5.2.2",
55
58
  "react-easy-crop": "^5.5.6"
56
59
  },
57
60
  "peerDependencies": {
58
- "@donotdev/firebase": "^0.0.5",
61
+ "@donotdev/firebase": "^0.0.6",
62
+ "@tiptap/extension-placeholder": "^3.16.0",
63
+ "@tiptap/pm": "^3.16.0",
64
+ "@tiptap/react": "^3.16.0",
65
+ "@tiptap/starter-kit": "^3.16.0",
59
66
  "firebase": "^12.5.0",
60
67
  "lucide-react": "^0.562.0",
61
68
  "react": "^19.2.3",
62
69
  "react-dom": "^19.2.3",
63
70
  "react-hook-form": "^7.71.0",
64
- "valibot": "^1.2.0",
65
- "@tiptap/react": "^3.16.0",
66
- "@tiptap/pm": "^3.16.0",
67
- "@tiptap/starter-kit": "^3.16.0",
68
- "@tiptap/extension-placeholder": "^3.16.0"
71
+ "valibot": "^1.2.0"
69
72
  },
70
73
  "peerDependenciesMeta": {
71
- "@tiptap/react": {
74
+ "@tiptap/extension-placeholder": {
72
75
  "optional": true
73
76
  },
74
77
  "@tiptap/pm": {
75
78
  "optional": true
76
79
  },
80
+ "@tiptap/react": {
81
+ "optional": true
82
+ },
77
83
  "@tiptap/starter-kit": {
78
84
  "optional": true
79
85
  },
80
- "@tiptap/extension-placeholder": {
86
+ "tiptap": {
81
87
  "optional": true
82
88
  }
83
89
  }
@@ -1,54 +0,0 @@
1
- /**
2
- * @fileoverview Option generation helpers for select fields
3
- * @description Simple utilities to generate options arrays for select/dropdown fields.
4
- *
5
- * @version 0.0.1
6
- * @since 0.0.1
7
- * @author AMBROISE PARK Consulting
8
- */
9
- /** Standard option format for select fields */
10
- export interface SelectOption {
11
- value: string;
12
- label: string;
13
- }
14
- /**
15
- * Generates year options for a select field.
16
- *
17
- * @param startYear - First year in the range
18
- * @param endYear - Last year in the range (defaults to current year)
19
- * @param descending - Whether to sort descending (newest first, default: true)
20
- * @returns Array of options with value and label
21
- *
22
- * @example
23
- * ```ts
24
- * // In entity definition
25
- * year: {
26
- * type: 'select',
27
- * validation: {
28
- * required: true,
29
- * options: yearOptions(1995) // 2026, 2025, 2024, ... 1995
30
- * }
31
- * }
32
- * ```
33
- */
34
- export declare function yearOptions(startYear: number, endYear?: number, descending?: boolean): SelectOption[];
35
- /**
36
- * Generates numeric range options for a select field.
37
- *
38
- * @param start - First number in the range
39
- * @param end - Last number in the range
40
- * @param step - Increment between numbers (default: 1)
41
- * @param descending - Whether to sort descending (default: false)
42
- * @returns Array of options with value and label
43
- *
44
- * @example
45
- * ```ts
46
- * // Quantities 1-10
47
- * options: rangeOptions(1, 10)
48
- *
49
- * // Percentages 0-100 by 10
50
- * options: rangeOptions(0, 100, 10)
51
- * ```
52
- */
53
- export declare function rangeOptions(start: number, end: number, step?: number, descending?: boolean): SelectOption[];
54
- //# sourceMappingURL=optionHelpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optionHelpers.d.ts","sourceRoot":"","sources":["../../../src/forms/utils/optionHelpers.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,MAAiC,EAC1C,UAAU,GAAE,OAAc,GACzB,YAAY,EAAE,CAchB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,MAAU,EAChB,UAAU,GAAE,OAAe,GAC1B,YAAY,EAAE,CAchB"}
@@ -1 +0,0 @@
1
- function o(n,t=new Date().getFullYear(),i=!0){const r=[];if(i)for(let e=t;e>=n;e--)r.push({value:String(e),label:String(e)});else for(let e=n;e<=t;e++)r.push({value:String(e),label:String(e)});return r}function u(n,t,i=1,r=!1){const e=[];if(r)for(let l=t;l>=n;l-=i)e.push({value:String(l),label:String(l)});else for(let l=n;l<=t;l+=i)e.push({value:String(l),label:String(l)});return e}export{u as rangeOptions,o as yearOptions};