Skip to content

Commit 0f74a21

Browse files
committed
adds download asset sorting
1 parent cf624bf commit 0f74a21

File tree

2 files changed

+28
-23
lines changed

2 files changed

+28
-23
lines changed

src/hooks/download.js

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ export const usePreparedReleases = (releases) => {
5151
month: 'long',
5252
day: 'numeric'
5353
}),
54-
assets: []
54+
assets: [],
55+
assetsByOs: { Windows: [], MacOS: [], Linux: [] }
5556
};
5657

5758
// Prepare release assets
@@ -66,6 +67,20 @@ export const usePreparedReleases = (releases) => {
6667
});
6768
}
6869

70+
for (let asset of item.assets) {
71+
if (asset.os in item.assetsByOs) {
72+
item.assetsByOs[asset.os].push(asset);
73+
}
74+
}
75+
for (let os in item.assetsByOs) {
76+
item.assetsByOs[os].sort((a, b) => {
77+
if (a.bit === b.bit) return 0;
78+
if (a.bit != null && a.bit.includes('Intel')) return -1;
79+
if (b.bit != null && b.bit.includes('Intel')) return 1;
80+
return 0;
81+
});
82+
}
83+
6984
prepared.push(item);
7085
}
7186

@@ -87,13 +102,13 @@ export const useMachineOS = (releases) => {
87102
[setSelected]
88103
);
89104

90-
const selectOS = (os) => {
91-
const osReleases = releases[os];
92-
const lastAsset = osReleases[osReleases.length - 1];
93-
selectAsset(lastAsset);
94-
};
95-
96105
useEffect(() => {
106+
const selectOS = (os) => {
107+
const osReleases = releases[os];
108+
const firstAsset = osReleases[0];
109+
selectAsset(firstAsset);
110+
};
111+
97112
const { userAgent } = navigator;
98113
if (userAgent.search('Windows') !== -1) {
99114
selectOS('Windows');
@@ -104,7 +119,7 @@ export const useMachineOS = (releases) => {
104119
} else {
105120
selectOS('Windows');
106121
}
107-
}, []);
122+
}, [releases, selectAsset]);
108123

109124
return [selected, selectAsset];
110125
};

src/templates/download.js

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { memo, useMemo } from 'react';
1+
import React, { memo } from 'react';
22
import { navigate, graphql } from 'gatsby';
33
import { useIntl } from 'react-intl';
44
import classnames from 'classnames';
@@ -120,17 +120,7 @@ const Download = ({ data }) => {
120120
const DownloadSection = memo(({ release, onAfterDownload }) => {
121121
const intl = useIntl();
122122

123-
const releasesObject = useMemo(() => {
124-
const assetsObject = { Windows: [], MacOS: [], Linux: [] };
125-
for (let asset of release.assets) {
126-
if (asset.os in assetsObject) {
127-
assetsObject[asset.os].push(asset);
128-
}
129-
}
130-
return assetsObject;
131-
}, [release]);
132-
133-
const [selected] = useMachineOS(releasesObject);
123+
const [selected] = useMachineOS(release.assetsByOs);
134124

135125
return (
136126
<div className={css.downloadSection}>
@@ -157,21 +147,21 @@ const DownloadSection = memo(({ release, onAfterDownload }) => {
157147
<OSSection
158148
logoComponent={<LogoWindows />}
159149
osName="Windows"
160-
assets={releasesObject.Windows}
150+
assets={release.assetsByOs.Windows}
161151
selected={selected}
162152
onAfterDownload={onAfterDownload}
163153
/>
164154
<OSSection
165155
logoComponent={<LogoMac />}
166156
osName="MacOS"
167-
assets={releasesObject.MacOS}
157+
assets={release.assetsByOs.MacOS}
168158
selected={selected}
169159
onAfterDownload={onAfterDownload}
170160
/>
171161
<OSSection
172162
logoComponent={<LogoLinux />}
173163
osName="Linux"
174-
assets={releasesObject.Linux}
164+
assets={release.assetsByOs.Linux}
175165
selected={selected}
176166
onAfterDownload={onAfterDownload}
177167
/>

0 commit comments

Comments
 (0)