Skip to content
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

LF-4415 Animals IDs not sorted in order #3541

Open
wants to merge 3 commits into
base: integration
Choose a base branch
from

Conversation

Tbrid
Copy link
Collaborator

@Tbrid Tbrid commented Nov 20, 2024

Description

Fix the issue of animals IDs not sorted in ascending order in the inventory page.

Jira link: https://lite-farm.atlassian.net/browse/LF-4415

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration

  • Passes test case
  • UI components visually reviewed on desktop view
  • UI components visually reviewed on mobile view
  • Other (please explain)

Checklist:

  • I have commented my code, particularly in hard-to-understand areas
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • The precommit and linting ran successfully
  • I have added or updated language tags for text that's part of the UI
  • I have added "MISSING" for all new language tags to languages I don't speak
  • I have added the GNU General Public License to all new files

@Tbrid Tbrid requested review from a team as code owners November 20, 2024 19:18
@Tbrid Tbrid requested review from antsgar and Duncan-Brain and removed request for a team November 20, 2024 19:18
Copy link
Collaborator

@Duncan-Brain Duncan-Brain left a comment

Choose a reason for hiding this comment

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

Hey @Tbrid thanks for doing this one!

I am not quite sure I know what is the expected order... so I will ask some questions on the Jira ticket.

I think the length check works well specifically for the ID##'s but because the names are sometimes chosen as an identifier it is no longer quite alphabetical but based on length for those ones. The Del 6 in my picture must have been randomly sorted based on chance.

Screenshot 2024-11-21 at 3 26 20 PM

I will tag design who might have an opinion too just to get clarification.

Comment on lines +227 to +231
if (a.identification.length > b.identification.length) {
return 1;
} else {
return a.identification.localeCompare(b.identification);
}
Copy link
Collaborator

@antsgar antsgar Dec 2, 2024

Choose a reason for hiding this comment

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

@Tbrid thank you so much for contributing!!

Unfortunately I don't think this portion of the sorting function is correct, and in testing it I'm not getting the right sorting order. On one hand, we shouldn't be using the identification property to sort since that's a string that can be either the name, the identifier or the internal identifier, but in this case we want to sort granularly, one property at the time, so we'll need to pass identifier and internal_identifier and use them to compare. On the other hand, I'm not sure I understand the reasoning behind comparing the length of the strings?

I think this is more or less what the function could look like

return inventory.sort((a, b) => {
    if (a.name && !b.name) {
      return -1;
    }
    if (b.name && !a.name) {
      return 1;
    }
    if (a.identifier && !b.identifier) {
      return -1;
    }
    if (b.identifier && !a.identifier) {
      return 1;
    }
    return (
      (a.name && b.name && a.name.localeCompare(b.name)) ||
      (a.identifier && b.identifier && a.identifier.localeCompare(b.identifier)) ||
      a.internal_identifier - b.internal_identifier
    );
  });

but I haven't tested it thoroughly!
If you have the time, a good idea could be to add some unit tests to verify that it's working properly. Otherwise we can just test it manually and make sure it works with a variety of records.

Copy link
Collaborator

Choose a reason for hiding this comment

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

I get that the length check was for the internal_identifier string that includes 'ID###' .

If the identification property is no longer used here (it is just for label display now) then it should be a plain number as Anto described 👍

@@ -242,7 +261,7 @@ export const buildInventory = ({
),
];

const sortedInventory = inventory.sort(getComparator(orderEnum.ASC, 'identification'));
Copy link
Collaborator

Choose a reason for hiding this comment

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

Thank you for taking care of this!
getComparator function is used for sorting when clicking the "IDENTIFICATION" column title, and I think the same logic needs to be applied there too.

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.

4 participants