@solcre-org/core-ui 2.11.39 → 2.11.41

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.
@@ -990,6 +990,7 @@ class FileFieldComponent extends BaseFieldComponent {
990
990
  existingFiles = signal([]);
991
991
  previewUrls = signal([]);
992
992
  previewBlobs = signal([]);
993
+ previewFileIds = signal(new Map());
993
994
  errorMessage = signal('');
994
995
  errorParams = signal(null);
995
996
  displayErrorMessage = computed(() => {
@@ -1023,36 +1024,38 @@ class FileFieldComponent extends BaseFieldComponent {
1023
1024
  return [];
1024
1025
  }
1025
1026
  if (typeof previewUrls === 'function') {
1026
- const result = rowData ? previewUrls(rowData) : [];
1027
- return result;
1027
+ return rowData ? previewUrls(rowData) : [];
1028
1028
  }
1029
- const result = Array.isArray(previewUrls) ? previewUrls : [];
1030
- return result;
1029
+ return Array.isArray(previewUrls) ? previewUrls : [];
1031
1030
  }
1032
- async createBlobsFromUrls(urls) {
1031
+ async createBlobsFromUrls(previewUrls) {
1033
1032
  const blobs = [];
1034
- for (let i = 0; i < urls.length; i++) {
1033
+ const fileIdMap = new Map();
1034
+ for (let i = 0; i < previewUrls.length; i++) {
1035
1035
  try {
1036
- const url = urls[i];
1037
- const response = await fetch(url);
1036
+ const previewFile = previewUrls[i];
1037
+ const response = await fetch(previewFile.url);
1038
1038
  if (!response.ok) {
1039
1039
  throw new Error(`HTTP error! status: ${response.status}`);
1040
1040
  }
1041
1041
  const blob = await response.blob();
1042
- const filename = this.extractFilenameFromUrl(url) || `preview-image-${i + 1}.jpg`;
1042
+ const filename = this.extractFilenameFromUrl(previewFile.url) || `preview-image-${i + 1}.jpg`;
1043
1043
  const file = new File([blob], filename, {
1044
1044
  type: blob.type || 'image/jpeg',
1045
1045
  lastModified: Date.now()
1046
1046
  });
1047
1047
  file.__isPreviewFile = true;
1048
- file.__originalUrl = url;
1048
+ file.__originalUrl = previewFile.url;
1049
+ file.__previewId = previewFile.id;
1049
1050
  blobs.push(file);
1051
+ fileIdMap.set(file, previewFile.id);
1050
1052
  }
1051
1053
  catch (error) {
1052
- console.error(`❌ Error loading preview image from URL: ${urls[i]}`, error);
1054
+ console.error(`❌ Error loading preview image from URL: ${previewUrls[i].url}`, error);
1053
1055
  }
1054
1056
  }
1055
1057
  this.previewBlobs.set(blobs);
1058
+ this.previewFileIds.set(fileIdMap);
1056
1059
  }
1057
1060
  extractFilenameFromUrl(url) {
1058
1061
  try {
@@ -1196,6 +1199,14 @@ class FileFieldComponent extends BaseFieldComponent {
1196
1199
  }
1197
1200
  this.selectedFiles.set(cfg.multiple ? combined : [combined[0]]);
1198
1201
  this.generatePreviews(this.selectedFiles());
1202
+ if (cfg.onFilesAdded) {
1203
+ const currentPreviewUrls = this.getPreviewUrls();
1204
+ const newFiles = cfg.multiple ? incoming : [incoming[0]];
1205
+ cfg.onFilesAdded({
1206
+ previewUrls: currentPreviewUrls,
1207
+ newFiles: newFiles
1208
+ });
1209
+ }
1199
1210
  this.formControl().markAsTouched();
1200
1211
  this.emitCurrentValue();
1201
1212
  }
@@ -1220,13 +1231,20 @@ class FileFieldComponent extends BaseFieldComponent {
1220
1231
  const fileToRemove = all[index];
1221
1232
  const config = this.fieldConfig();
1222
1233
  let fileType;
1234
+ let previewFile;
1223
1235
  if (this.isServerFile(fileToRemove)) {
1236
+ const serverFile = fileToRemove;
1224
1237
  const existing = [...this.existingFiles()];
1225
- const idx = existing.findIndex(f => f.id === fileToRemove.id);
1238
+ const idx = existing.findIndex(f => f.id === serverFile.id);
1226
1239
  if (idx !== -1) {
1227
1240
  existing.splice(idx, 1);
1228
1241
  this.existingFiles.set(existing);
1229
1242
  fileType = 'existing';
1243
+ const currentPreviewUrls = this.getPreviewUrls();
1244
+ const matchingPreview = currentPreviewUrls.find(p => p.id === serverFile.id);
1245
+ if (matchingPreview) {
1246
+ previewFile = matchingPreview;
1247
+ }
1230
1248
  }
1231
1249
  }
1232
1250
  else if (this.isPreviewFile(fileToRemove)) {
@@ -1235,6 +1253,24 @@ class FileFieldComponent extends BaseFieldComponent {
1235
1253
  if (idx !== -1) {
1236
1254
  blobs.splice(idx, 1);
1237
1255
  this.previewBlobs.set(blobs);
1256
+ const fileIdMap = this.previewFileIds();
1257
+ const previewId = fileToRemove.__previewId || fileIdMap.get(fileToRemove);
1258
+ const originalUrl = fileToRemove.__originalUrl;
1259
+ if (previewId) {
1260
+ previewFile = {
1261
+ id: previewId,
1262
+ url: originalUrl || ''
1263
+ };
1264
+ const existing = [...this.existingFiles()];
1265
+ const existingIdx = existing.findIndex(f => f.id === previewId);
1266
+ if (existingIdx !== -1) {
1267
+ existing.splice(existingIdx, 1);
1268
+ this.existingFiles.set(existing);
1269
+ }
1270
+ const newMap = new Map(fileIdMap);
1271
+ newMap.delete(fileToRemove);
1272
+ this.previewFileIds.set(newMap);
1273
+ }
1238
1274
  fileType = 'preview';
1239
1275
  }
1240
1276
  }
@@ -1249,7 +1285,12 @@ class FileFieldComponent extends BaseFieldComponent {
1249
1285
  }
1250
1286
  }
1251
1287
  if (config.onFileRemoved && fileType) {
1252
- config.onFileRemoved(fileToRemove, index, fileType);
1288
+ config.onFileRemoved({
1289
+ file: fileToRemove,
1290
+ index: index,
1291
+ fileType: fileType,
1292
+ previewFile: previewFile
1293
+ });
1253
1294
  }
1254
1295
  this.validateCurrentState();
1255
1296
  this.formControl().markAsTouched();
@@ -10692,11 +10733,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
10692
10733
  // Este archivo es generado automáticamente por scripts/update-version.js
10693
10734
  // No edites manualmente este archivo
10694
10735
  const VERSION = {
10695
- full: '2.11.39',
10736
+ full: '2.11.41',
10696
10737
  major: 2,
10697
10738
  minor: 11,
10698
- patch: 39,
10699
- timestamp: '2025-09-02T15:20:12.868Z',
10739
+ patch: 41,
10740
+ timestamp: '2025-09-02T16:19:28.934Z',
10700
10741
  buildDate: '2/9/2025'
10701
10742
  };
10702
10743