diff --git a/.changeset/bright-bobcats-ring.md b/.changeset/bright-bobcats-ring.md new file mode 100644 index 000000000..7f86afa55 --- /dev/null +++ b/.changeset/bright-bobcats-ring.md @@ -0,0 +1,5 @@ +--- +'@verdaccio/ui-components': patch +--- + +fix(ui): sort versions diff --git a/packages/ui-components/src/components/Versions/HistoryList.tsx b/packages/ui-components/src/components/Versions/HistoryList.tsx index 83b06c3f0..0389b0dcb 100644 --- a/packages/ui-components/src/components/Versions/HistoryList.tsx +++ b/packages/ui-components/src/components/Versions/HistoryList.tsx @@ -39,7 +39,11 @@ const VersionsHistoryList: React.FC = ({ versions, packageName, time }) = return ( {Object.keys(listVersions) - .reverse() + .sort((a, b) => { + const timeA = time[a] ? new Date(time[a]).getTime() : 0; + const timeB = time[b] ? new Date(time[b]).getTime() : 0; + return timeB - timeA; + }) .map((version) => ( = ({ versions, packageName, time }) = sx={{ pr: 0 }} > - + {typeof versions[version]?.deprecated === 'string' ? ( = (props) => ( @@ -68,5 +69,15 @@ describe(' component', () => { expect(screen.getByText('0.0.1')).toBeInTheDocument(); }); + test('should render versions sorted by timestamp in descending order', () => { + render(); + + const versionElements = screen.getAllByTestId('version-list-link'); + const versions = versionElements.map((el) => el.textContent); + + // Expected order based on timestamps in unsorted-versions.json: + expect(versions).toEqual(['1.0.1', '1.0.0', '0.1.1', '0.1.0']); + }); + test.todo('should click on version link'); }); diff --git a/packages/ui-components/src/components/Versions/__partials__/unsorted-versions.json b/packages/ui-components/src/components/Versions/__partials__/unsorted-versions.json new file mode 100644 index 000000000..4094ab0e4 --- /dev/null +++ b/packages/ui-components/src/components/Versions/__partials__/unsorted-versions.json @@ -0,0 +1,37 @@ +{ + "versions": { + "1.0.0": { + "name": "dummy", + "version": "1.0.0" + }, + "0.1.0": { + "name": "dummy", + "version": "0.1.0" + }, + "0.1.1": { + "name": "dummy", + "version": "0.1.1" + }, + "1.0.1": { + "name": "dummy", + "version": "1.0.1" + } + }, + "time": { + "created": "2012-02-19T21:35:53.514Z", + "modified": "2024-11-21T06:32:43.761Z", + "1.0.0": "2025-01-10T14:55:23.763Z", + "0.1.0": "2012-02-19T21:35:54.455Z", + "0.1.1": "2012-02-20T06:12:03.403Z", + "1.0.1": "2025-01-10T15:11:36.318Z" + }, + "users": {}, + "dist-tags": { + "latest": "1.0.1" + }, + "_id": "dummy", + "latest": { + "name": "dummy", + "version": "1.0.1" + } +}