(
items: Array<T>,
{ os, installMethod, platform, version, release }: Types.ReleaseContextType
)
| 46 | * Parses compatibility of dropdown items based on context |
| 47 | */ |
| 48 | export const parseCompat = < |
| 49 | K extends string, |
| 50 | T extends DownloadDropdownItem<K>, |
| 51 | >( |
| 52 | items: Array<T>, |
| 53 | { os, installMethod, platform, version, release }: Types.ReleaseContextType |
| 54 | ): Array<T> => { |
| 55 | const checkCompatibility = (compatibility: T['compatibility']) => { |
| 56 | const checks = [ |
| 57 | !compatibility.os || compatibility.os.includes(os), |
| 58 | !compatibility.installMethod || |
| 59 | compatibility.installMethod.includes(installMethod), |
| 60 | !compatibility.platform || compatibility.platform.includes(platform), |
| 61 | !compatibility.semver || |
| 62 | compatibility.semver.every(semver => satisfies(version, semver)), |
| 63 | !compatibility.releases || |
| 64 | compatibility.releases.includes(release.status), |
| 65 | ]; |
| 66 | |
| 67 | return checks.every(Boolean); |
| 68 | }; |
| 69 | |
| 70 | return items.map(item => ({ |
| 71 | ...item, |
| 72 | disabled: !checkCompatibility(item.compatibility), |
| 73 | })); |
| 74 | }; |
| 75 | |
| 76 | /** |
| 77 | * Creates an icon element for a component |
no test coverage detected