-
Notifications
You must be signed in to change notification settings - Fork 571
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merge release/v1.1.0
to develop
#5205
Changes from all commits
dc28213
195aab5
264154d
94ab02d
4a2e28b
93dca43
324b44c
4937680
e3e7cba
bf1d29d
cea9b9a
a995933
0e3fa78
b02a12e
eff1e1e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -45,8 +45,8 @@ export default class Section<K, V> { | |||||||||||||||||
readonly #width: number; | ||||||||||||||||||
|
||||||||||||||||||
#direction: DIRECTION; | ||||||||||||||||||
#dirty: Set<Row<K, V>> = new Set(); | ||||||||||||||||||
#end: Edge<K, V>; | ||||||||||||||||||
#itemIds = new Set<string>(); | ||||||||||||||||||
#nextMap: WeakMap<ID, ID> = new WeakMap(); | ||||||||||||||||||
#previousMap: WeakMap<ID, ID> = new WeakMap(); | ||||||||||||||||||
#shown: Set<Row<K, V>> = new Set(); | ||||||||||||||||||
|
@@ -129,7 +129,6 @@ export default class Section<K, V> { | |||||||||||||||||
target, | ||||||||||||||||||
threshold, | ||||||||||||||||||
top, | ||||||||||||||||||
updater, | ||||||||||||||||||
zooming, | ||||||||||||||||||
}: { | ||||||||||||||||||
config: SpotlightConfig<K, V>; | ||||||||||||||||||
|
@@ -181,14 +180,8 @@ export default class Section<K, V> { | |||||||||||||||||
break; | ||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
if (this.#dirty.has(row) && !zooming && updater) { | ||||||||||||||||||
row.updateItems(updater); | ||||||||||||||||||
this.#dirty.delete(row); | ||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
row.show( | ||||||||||||||||||
this.#container, | ||||||||||||||||||
this.#dirty.has(row) && zooming, | ||||||||||||||||||
this.#direction === DIRECTION.FORWARD ? TOP : BOTTOM, | ||||||||||||||||||
zooming, | ||||||||||||||||||
config | ||||||||||||||||||
|
@@ -225,7 +218,6 @@ export default class Section<K, V> { | |||||||||||||||||
|
||||||||||||||||||
updateItems(updater: (id: ID) => void) { | ||||||||||||||||||
for (const row of this.#shown) row.updateItems(updater); | ||||||||||||||||||
for (const row of this.#rows) !this.#shown.has(row) && this.#dirty.add(row); | ||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
async first( | ||||||||||||||||||
|
@@ -308,7 +300,9 @@ export default class Section<K, V> { | |||||||||||||||||
|
||||||||||||||||||
renderer(() => { | ||||||||||||||||||
const { rows, remainder } = this.#tile( | ||||||||||||||||||
[...end.remainder, ...data.items], | ||||||||||||||||||
[...end.remainder, ...data.items].filter( | ||||||||||||||||||
(i) => !this.#itemIds.has(i.id.description) | ||||||||||||||||||
), | ||||||||||||||||||
this.#height, | ||||||||||||||||||
data.next === null, | ||||||||||||||||||
data.focus, | ||||||||||||||||||
|
@@ -350,6 +344,7 @@ export default class Section<K, V> { | |||||||||||||||||
edge: newEnd, | ||||||||||||||||||
width: this.#width, | ||||||||||||||||||
}); | ||||||||||||||||||
|
||||||||||||||||||
this.#end = this.#start; | ||||||||||||||||||
this.#start = newEnd; | ||||||||||||||||||
|
||||||||||||||||||
|
@@ -452,6 +447,10 @@ export default class Section<K, V> { | |||||||||||||||||
rowItems.reverse(); | ||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
for (const i of rowItems) { | ||||||||||||||||||
this.#itemIds.add(i.id.description); | ||||||||||||||||||
} | ||||||||||||||||||
|
||||||||||||||||||
Comment on lines
+450
to
+453
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Add null/undefined check for item ID description The code assumes for (const i of rowItems) {
- this.#itemIds.add(i.id.description);
+ if (i.id?.description) {
+ this.#itemIds.add(i.id.description);
+ }
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||
const row = new Row({ | ||||||||||||||||||
config: this.#config, | ||||||||||||||||||
dangle: | ||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Ensure
#itemIds
is cleared upon destruction to prevent memory leaksThe
#itemIds
set is not cleared in thedestroy
method. Over time, this could lead to memory leaks if old item IDs are retained. Please consider clearing the#itemIds
set when the section is destroyed.Apply this diff to clear the
#itemIds
set in thedestroy
method:destroy(destroyItems = false) { this.#section.remove(); for (const row of this.#rows) row.destroy(destroyItems); this.#rows = []; + this.#itemIds.clear(); }