Skip to content

Conversation

@niekbridge
Copy link

Description

This PR addresses #6. I made a simple change to the filter logic in the @rstore/vue package to handle an array of references instead of a single reference.

Additional context

I have not added a test yet. I am not sure where to add it. The item.spec.ts file, where I would normally place it, mocks the method (peekMany) to which I have made the change.


What is the purpose of this pull request?

  • Bug fix
  • New Feature
  • Documentation update
  • Other

Before submitting the PR, please make sure you do the following

  • If it's a new feature, provide a convincing reason to add it. Ideally, you should open a suggestion issue first and have it approved before working on it.
  • Read the Contributing Guidelines.
  • Read the Pull Request Guidelines and follow the Commit Convention.
  • Check that there isn't already a PR that solves the problem the same way to avoid creating a duplicate.
  • Provide a description in this PR that addresses what the PR is solving, or reference the issue that it solves (e.g. fixes #123).
  • Ideally, include relevant tests that fail without this PR but pass with it.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @niekbridge, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

I've implemented a new feature that allows relations in @rstore/vue to handle an array of references rather than just a single reference. This change directly addresses issue #6, enhancing the flexibility of how related data can be filtered and retrieved within the system.

Highlights

  • Enhanced Relation Filtering: Modified the filter logic within the wrapItem function in packages/vue/src/item.ts to correctly handle cases where the value (representing the foreign key) is an array. Previously, it only supported single values.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments or fill out our survey to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds a useful feature to handle arrays of references in relations. The implementation is straightforward. I've suggested a performance improvement for the filtering logic. As you've mentioned, tests for this new functionality are missing. It's important to add them to ensure correctness and prevent regressions. You could test the filter function passed to the mocked peekMany in item.spec.ts by capturing its arguments.

Comment on lines +105 to +110
filter: (foreignItem) => {
if (Array.isArray(value)) {
return value.includes(foreignItem[targetModelConfig.on])
}
return foreignItem[targetModelConfig.on] === value
},

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For performance, it's better to use a Set for checking inclusion when value is an array. Array.prototype.includes() has O(n) time complexity, while Set.prototype.has() is O(1) on average. This can make a significant difference if the array of references is large.

You can use an IIFE (Immediately Invoked Function Expression) to create the Set once before the filter function is returned.

                filter: (() => {
                  if (Array.isArray(value)) {
                    const valueSet = new Set(value)
                    return (foreignItem) => valueSet.has(foreignItem[targetModelConfig.on])
                  }
                  return (foreignItem) => foreignItem[targetModelConfig.on] === value
                })(),

@Akryum Akryum force-pushed the main branch 3 times, most recently from 9eabebb to ed8e3d0 Compare September 24, 2025 13:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant