Differ icon indicating copy to clipboard operation
Differ copied to clipboard

Differ does not perform row reloading if the changes is happening on same row. (macOS)

Open martindufort opened this issue 3 years ago • 3 comments

Hey there,

I've started implementing Differ in our app to drive changes to our TableView. As our app needs to support 10.15+, we cannot use the native DiffableSource implementation.

So using extendingDiff and patch, I realized that the current AppKit extension that applies the patch to the NSTableView is not using the reloadData(forRowIndexes: IndexSet, columnIndexes: IndexSet) when changes are applicable to a single row.

Here's our patch description:

EmailList DiffPatch [D(4), I(4,<Ocean.EmailListSource: 0x600002d323c0>)]

Why is this important?

By using Delete and Insert, if the selected row was 4, then it is automatically deselected. This behavior, instead of using reloadDate(forRow...) makes for a pretty bad UX in our case.

Any suggestions on how to circumvent that? Thanks

martindufort avatar May 31 '22 20:05 martindufort

Hi Martin :wave: We should really coalesce that delete then insert of the same row into a reload. There's no workaround, but I'd warmly accept a PR 😄

I've not had much time to work on this library lately, so I won't make promises about when I might get to fixing this.

tonyarnold avatar May 31 '22 22:05 tonyarnold

Hey Tony,

I was able to quickly patch the Diff+AppKit.swift file to look for our use case and issue a reload.

However that patch is far away from being usable in the real world. I would need to further understand the internal mechanics of a Patch structure to provide a usable PR for you to review.

It's on my task list however, and like you 😃, it will take sometime to surface. Let's keep this issue open until I come up with something.

Sounds good?

martindufort avatar Jun 01 '22 13:06 martindufort

Of course! I'd be happy for any contribution/help, whenever it can be given. Thanks for thinking about the problem.

tonyarnold avatar Jun 01 '22 22:06 tonyarnold