Skip to content

Commit

Permalink
Sort csv content by alphabet like in the ui (#3135)
Browse files Browse the repository at this point in the history
* Sort csv content by alphabet

* Export csv like in ui
  • Loading branch information
EMaksy authored Nov 11, 2024
1 parent 1ddc339 commit e8ba130
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 21 deletions.
22 changes: 9 additions & 13 deletions assets/js/common/UpgradablePackagesList/UpgradablePackagesList.jsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useEffect, useState } from 'react';
import { noop } from 'lodash';

import Button from '@common/Button';
Expand All @@ -11,21 +11,17 @@ function UpgradablePackagesList({
upgradablePackages = upgradablePackagesDefault,
patchesLoading,
onPatchClick = noop,
sortDirection = 'asc',
toggleSortDirection = () => {},
}) {
const [sortDirection, setSortDirection] = useState('asc');

const toggleSortDirection = () => {
if (sortDirection === 'asc') {
setSortDirection('desc');
} else {
setSortDirection('asc');
}
};

const [sortBy, setSortBy] = useState(sortDirection);
const sortByLatestPackage = createStringSortingPredicate(
'latestPackage',
sortDirection
sortBy
);
useEffect(() => {
setSortBy(sortDirection);
}, [sortDirection]);

const config = {
pagination: true,
Expand All @@ -40,7 +36,7 @@ function UpgradablePackagesList({
title: 'Latest Package',
key: 'latestPackage',
sortable: true,
sortDirection,
sortDirection: sortBy,
handleClick: () => toggleSortDirection(),
render: (content, _) => <div>{content}</div>,
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { upgradablePackageFactory } from '@lib/test-utils/factories/relevantPatches';
import { csvDataupgradablePackageFactory } from '@lib/test-utils/factories/relevantPatches';
import UpgradablePackagesList from './UpgradablePackagesList';

export default {
Expand Down Expand Up @@ -30,14 +30,14 @@ export const Default = {
args: {
hostname: 'Example Host',
patchesLoading: false,
upgradablePackages: upgradablePackageFactory.buildList(2),
upgradablePackages: csvDataupgradablePackageFactory.buildList(2),
},
};

export const PatchesLoading = {
args: {
hostname: 'Example Host',
patchesLoading: true,
upgradablePackages: upgradablePackageFactory.buildList(2),
upgradablePackages: csvDataupgradablePackageFactory.buildList(2),
},
};
2 changes: 1 addition & 1 deletion assets/js/lib/test-utils/factories/relevantPatches.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export const patchForPackageFactory = Factory.define(({ sequence }) => ({
last_modified_date: faker.date.anytime().toString(),
}));

export const upgradablePackageFactory = Factory.define(() => ({
export const csvDataupgradablePackageFactory = Factory.define(() => ({
installedPackage: `Package ${faker.animal.cat()}`,
latestPackage: faker.system.semver(),
patches: [{ advisory: faker.animal.cat() }],
Expand Down
28 changes: 25 additions & 3 deletions assets/js/pages/UpgradablePackagesPage/UpgradablePackages.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,19 @@ import Input from '@common/Input';
import Button from '@common/Button';
import { containsSubstring } from '@lib/filter';

const sortCsvContent = (content, sortingDirection) => {
if (content.length <= 1) {
return content;
}

return content.sort((packageA, packageB) => {
const comparison = packageA.latest_package.localeCompare(
packageB.latest_package
);
return sortingDirection === 'asc' ? comparison : -comparison;
});
};

export default function UpgradablePackages({
hostName,
upgradablePackages,
Expand All @@ -18,6 +31,14 @@ export default function UpgradablePackages({
}) {
const [search, setSearch] = useState('');
const [csvURL, setCsvURL] = useState(null);
const [sortDirection, setSortDirection] = useState('asc');

const toggleSortDirection = () => {
setSortDirection((prevDirection) =>
prevDirection === 'asc' ? 'desc' : 'asc'
);
};

const enrichedPackages = upgradablePackages.map((packageDetails) => {
const {
name,
Expand Down Expand Up @@ -62,7 +83,6 @@ export default function UpgradablePackages({
if (csvURL) {
URL.revokeObjectURL(csvURL);
}

setCsvURL(
enrichedPackages.length > 0
? URL.createObjectURL?.(
Expand All @@ -71,7 +91,7 @@ export default function UpgradablePackages({
Papa.unparse(
{
fields: ['installed_package', 'latest_package', 'patches'],
data: csvContent,
data: sortCsvContent(csvContent, sortDirection),
},
{ header: true }
),
Expand All @@ -88,7 +108,7 @@ export default function UpgradablePackages({
URL.revokeObjectURL(csvURL);
}
};
}, [enrichedPackages.length, patchesLoading]);
}, [enrichedPackages.length, patchesLoading, sortDirection]);

return (
<>
Expand Down Expand Up @@ -117,6 +137,8 @@ export default function UpgradablePackages({
upgradablePackages={filteredPackages}
onPatchClick={onPatchClick}
onLoad={onLoad}
toggleSortDirection={toggleSortDirection}
sortDirection={sortDirection}
/>
</>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import '@testing-library/jest-dom';
import { noop } from 'lodash';
import { faker } from '@faker-js/faker';
import { upgradablePackageFactory } from '@lib/test-utils/factories/upgradablePackage';

import { renderWithRouter as render } from '@lib/test-utils';

import UpgradablePackages from './UpgradablePackages';
Expand Down

0 comments on commit e8ba130

Please sign in to comment.