Deduplicate data passed to FormPayload #137
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #110
What changed?
Currently,
FormData
keeps the data passed as a list of tuples. That's not an optimal strategy since it doesn't deal with duplicates well.That being said, there are two competing behaviors that we need to handle:
name
s (e.g.{"contact[]", "email"}
.[{"email", "[email protected]"}, {"email", "[email protected]"}]
).In the latter case, we can imagine a user doing a
fill_in
twice, where the email field changed twice. In the first case, we might have something like a checkbox where the user can check multiple values.Like we said, a list of tuples doesn't seem to be the optimal data structure for
FormData
. But while we have it, we handle deduplication of keys inFormPayload.new/1
.But we have to consider one more case. If a user calls:
The final record should show
[email protected]
as theemail
. If we do a simpleEnum.uniq/1
, we dedup[email protected]
, leaving[email protected]
as the last operation -- which is not what we want. Thus, our current implementation has to reverse the list of data, unique it, and then reverse it again.