Fixing a bug when editing the linked hosted file for Archive Content.

This commit is contained in:
Scott Idem
2026-01-02 13:29:16 -05:00
parent a8314a5da0
commit 9111e14961
5 changed files with 57 additions and 2 deletions

View File

@@ -83,4 +83,17 @@ My efficiency heavily relies on the `replace` tool, and precision is paramount.
- **Consult Svelte Documentation:** The Svelte compiler often provides helpful links (`https://svelte.dev/e/js_parse_error`) which should be a first point of reference if the error is unfamiliar.
- **Re-read File Content:** If a `replace` operation fails or produces unexpected results, immediately use `read_file` to verify the exact state of the file before attempting another change.
By following these guidelines, I aim to significantly reduce errors and improve my performance in Svelte development tasks.
## 5. Safe Property Binding (Preventing `props_invalid_value`)
Svelte 5 enforces strict contracts for bound properties (`bind:prop`). If a component expects a property to have a fallback/default value, you cannot bind `undefined` to it.
- **The Error:** `Uncaught Svelte error: props_invalid_value. Cannot do bind:prop={undefined} when prop has a fallback value`.
- **The Cause:** Attempting to bind a variable that is currently `undefined` to a component prop that has a default value (e.g., `let { prop = false } = $props()`). Svelte cannot determine whether to use the bound `undefined` or the component's internal default, so it throws an error.
- **The Fix:** **Always initialize bound variables.**
- **Initialization:** Ensure the variable you are binding to is initialized to a valid value (matching the prop's type) *before* the component mounts.
- Example: `let myVar = $state(false);` instead of `let myVar = $state();`.
- **Data Fetching:** If the data comes from an asynchronous source (API, DB), ensure the object properties have default values *immediately* upon assignment, even before the data is fully populated.
- **Good:** `$slct.obj = { ...apiResult, myBoundProp: apiResult.myBoundProp ?? false };`
- **Bad:** `$slct.obj = apiResult;` (if `apiResult.myBoundProp` is missing/undefined).
- **Updates/resets:** When resetting or updating the object, explicitly re-initialize the bound properties.
- `obj = {};` -> `obj = { myBoundProp: false };`

View File

@@ -47,6 +47,24 @@
if ($idaa_slct.archive_content_id) {
console.log(`Archive Content ID selected: ${$idaa_slct.archive_content_id}`);
console.log(`Archive Content Object selected: ${$idaa_slct.archive_content_obj}`);
if (
$idaa_slct.archive_content_obj &&
$idaa_slct.archive_content_obj.upload_complete === undefined
) {
$idaa_slct.archive_content_obj.upload_complete = false;
}
if (
$idaa_slct.archive_content_obj &&
!Array.isArray($idaa_slct.archive_content_obj.hosted_file_id_li)
) {
$idaa_slct.archive_content_obj.hosted_file_id_li = [];
}
if (
$idaa_slct.archive_content_obj &&
!Array.isArray($idaa_slct.archive_content_obj.hosted_file_obj_li)
) {
$idaa_slct.archive_content_obj.hosted_file_obj_li = [];
}
} else {
$idaa_slct.archive_content_id = null;
$idaa_slct.archive_content_obj = {
@@ -71,7 +89,10 @@
hide: false,
priority: null,
sort: null,
notes: null
notes: null,
upload_complete: false,
hosted_file_id_li: [],
hosted_file_obj_li: []
};
console.log(`Archive Content Object started: ${$idaa_slct.archive_content_obj}`);
}
@@ -251,6 +272,9 @@
$idaa_slct.archive_content_obj = archive_content_obj_create_result;
$idaa_slct.archive_content_obj.archive_content_id =
archive_content_obj_create_result.archive_content_id_random; // This is because we need use the string ID, not int ID.
$idaa_slct.archive_content_obj.upload_complete = false;
$idaa_slct.archive_content_obj.hosted_file_id_li = [];
$idaa_slct.archive_content_obj.hosted_file_obj_li = [];
return archive_content_obj_create_result;
})
@@ -321,6 +345,13 @@
.then(function (archive_content_obj_update_result) {
// $idaa_slct.archive_content_obj = $lq__archive_content_obj;
$idaa_slct.archive_content_obj = archive_content_obj_update_result;
$idaa_slct.archive_content_obj.upload_complete = true;
if (!Array.isArray($idaa_slct.archive_content_obj.hosted_file_id_li)) {
$idaa_slct.archive_content_obj.hosted_file_id_li = [];
}
if (!Array.isArray($idaa_slct.archive_content_obj.hosted_file_obj_li)) {
$idaa_slct.archive_content_obj.hosted_file_obj_li = [];
}
})
.catch(function (error: any) {
console.log('Something went wrong.');
@@ -364,6 +395,13 @@
.then(function (archive_content_obj_update_result) {
// $idaa_slct.archive_content_obj = $lq__archive_content_obj;
$idaa_slct.archive_content_obj = archive_content_obj_update_result;
$idaa_slct.archive_content_obj.upload_complete = false;
if (!Array.isArray($idaa_slct.archive_content_obj.hosted_file_id_li)) {
$idaa_slct.archive_content_obj.hosted_file_id_li = [];
}
if (!Array.isArray($idaa_slct.archive_content_obj.hosted_file_obj_li)) {
$idaa_slct.archive_content_obj.hosted_file_obj_li = [];
}
})
.catch(function (error: any) {
console.log('Something went wrong.');
@@ -620,6 +658,10 @@
$idaa_slct.archive_content_obj.file_path = null;
$idaa_slct.archive_content_obj.filename = null;
$idaa_slct.archive_content_obj.file_extension = null;
$idaa_slct.archive_content_obj.upload_complete = false;
$idaa_slct.archive_content_obj.hosted_file_id_li = [];
$idaa_slct.archive_content_obj.hosted_file_obj_li = [];
});
}
}}