@appcorp/stellar-solutions-modules 0.1.50 → 0.1.51

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.
@@ -74,6 +74,9 @@ var EnhancedDropzone = function (_a) {
74
74
  // Track remote URLs removed by the user so they don't reappear when
75
75
  // previews are rebuilt from the unchanged `initial` prop.
76
76
  var removedRemoteRef = (0, react_1.useRef)(new Set());
77
+ // Track previous previews and remote map to avoid emitting unchanged values
78
+ var previewsRef = (0, react_1.useRef)([]);
79
+ var remotePreviewsRef = (0, react_1.useRef)({});
77
80
  var dropzoneOptions = {
78
81
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
79
82
  accept: (Array.isArray(accept) ? undefined : accept) || undefined,
@@ -137,8 +140,47 @@ var EnhancedDropzone = function (_a) {
137
140
  next.push("");
138
141
  }
139
142
  });
140
- setPreviews(next);
141
- setRemotePreviews(remoteMap);
143
+ // Avoid unnecessary updates: only set state / notify parent when previews
144
+ // or remoteMap actually changed (shallow equality check). This prevents
145
+ // a cycle when parent mirrors the previews back into `initial`.
146
+ var prev = previewsRef.current || [];
147
+ var arraysEqual = function (a, b) {
148
+ if (a === b)
149
+ return true;
150
+ if (!a || !b)
151
+ return false;
152
+ if (a.length !== b.length)
153
+ return false;
154
+ for (var i = 0; i < a.length; i++)
155
+ if (a[i] !== b[i])
156
+ return false;
157
+ return true;
158
+ };
159
+ var remoteKeysEqual = function (m1, m2) {
160
+ var k1 = Object.keys(m1 || {});
161
+ var k2 = Object.keys(m2 || {});
162
+ if (k1.length !== k2.length)
163
+ return false;
164
+ k1.sort();
165
+ k2.sort();
166
+ for (var i = 0; i < k1.length; i++)
167
+ if (k1[i] !== k2[i])
168
+ return false;
169
+ return true;
170
+ };
171
+ var previewsChanged = !arraysEqual(prev, next);
172
+ var remoteChanged = !remoteKeysEqual(remotePreviewsRef.current || {}, remoteMap);
173
+ if (previewsChanged) {
174
+ setPreviews(next);
175
+ previewsRef.current = next.slice();
176
+ }
177
+ if (remoteChanged) {
178
+ setRemotePreviews(remoteMap);
179
+ remotePreviewsRef.current = __assign({}, remoteMap);
180
+ }
181
+ if (previewsChanged) {
182
+ onPreviewsChange === null || onPreviewsChange === void 0 ? void 0 : onPreviewsChange(next);
183
+ }
142
184
  // notify parent about the current rendered previews (object URLs and remote URLs)
143
185
  onPreviewsChange === null || onPreviewsChange === void 0 ? void 0 : onPreviewsChange(next);
144
186
  return function () {
@@ -168,10 +210,8 @@ var EnhancedDropzone = function (_a) {
168
210
  return;
169
211
  var isRemote = Boolean(remotePreviews[entry]);
170
212
  if (isRemote) {
171
- // notify parent
213
+ // notify parent and mark as removed so it won't reappear from `initial`
172
214
  onRemoveUrl === null || onRemoveUrl === void 0 ? void 0 : onRemoveUrl(entry);
173
- // record removal locally so the value isn't re-added from the `initial`
174
- // prop on the next rebuild
175
215
  removedRemoteRef.current.add(entry);
176
216
  // remove only the specific preview at previewIndex
177
217
  setPreviews(function (p) {
@@ -184,6 +224,9 @@ var EnhancedDropzone = function (_a) {
184
224
  delete next[entry];
185
225
  return next;
186
226
  });
227
+ // inform parent of the immediate change
228
+ var updatedPreviews = previews.filter(function (_, i) { return i !== previewIndex; });
229
+ onPreviewsChange === null || onPreviewsChange === void 0 ? void 0 : onPreviewsChange(updatedPreviews);
187
230
  return;
188
231
  }
189
232
  // local file - compute index relative to files array and remove
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appcorp/stellar-solutions-modules",
3
- "version": "0.1.50",
3
+ "version": "0.1.51",
4
4
  "scripts": {
5
5
  "automate": "./automate.sh",
6
6
  "build": "yarn clean && yarn build:ts && cp package.json lib && cp README.md lib && cp yarn.lock lib",