mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-14 19:27:05 -04:00
Merge pull request #559 from Ni-zav/fix/544-project-item-deselect-s20261010T084400Z-a6e9
# Conflicts: # crates/script/src/tests.rs
This commit is contained in:
2 files changed
+40
-1
No files matched your search
@@ -1342,7 +1342,18 @@ Item.prototype = {
|
||||
get parentFolder() { return __item(this.__info().parent); },
|
||||
set parentFolder(f) { __call("project.move", { items: [this.__id], folder: f && f.__id ? f.__id : null }); },
|
||||
get selected() { return this.__info().selected; },
|
||||
set selected(v) { if (v) __call("project.select", { items: [this.__id], add: true }); },
|
||||
set selected(v) {
|
||||
var selection = __get("project").selection;
|
||||
var selected = selection.indexOf(this.__id) !== -1;
|
||||
if (!!v === selected) return;
|
||||
if (v) {
|
||||
__call("project.select", { items: [this.__id], add: true });
|
||||
} else {
|
||||
var id = this.__id;
|
||||
// Replace just this item, preserving the other Project panel selections and their order.
|
||||
__call("project.select", { items: selection.filter(function (item) { return item !== id; }) });
|
||||
}
|
||||
},
|
||||
get usedIn() { return this.__info().usedIn.map(function (c) { return new CompItem(c); }); },
|
||||
remove: function () { __call("project.delete", { items: [this.__id] }); },
|
||||
};
|
||||
|
||||
@@ -564,3 +564,31 @@ fn text_document_baseline_flags_reflect_pending_edits_and_applied_value() {
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn setting_item_selected_false_preserves_other_project_items() {
|
||||
let mut s = session();
|
||||
let o = ok(
|
||||
&mut s,
|
||||
r#"
|
||||
var target = app.project.items.addFolder("Target");
|
||||
var keep = app.project.items.addFolder("Keep");
|
||||
app.run("project.select", {items: []});
|
||||
keep.selected = true;
|
||||
target.selected = true;
|
||||
var states = [[target.selected, keep.selected]];
|
||||
target.selected = false;
|
||||
states.push([target.selected, keep.selected]);
|
||||
target.selected = false; // idempotent: never remove Keep
|
||||
states.push([target.selected, keep.selected]);
|
||||
target.selected = true;
|
||||
states.push([target.selected, keep.selected]);
|
||||
app.project.selection.map(function (item) { return item.name; }).join(",")
|
||||
+ "|" + JSON.stringify(states);
|
||||
"#,
|
||||
);
|
||||
assert_eq!(
|
||||
o.result,
|
||||
json!("Keep,Target|[[true,true],[false,true],[false,true],[true,true]]")
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user