on master help sign in
ux: detect user's device OS for Port download link
c6f53eftomholford
package-lock.json+9−2
@@ -27837,6 +27837,14 @@
27837 }
27837 }
27838 }
27838 }
27839 },
27839 },
27840+ "react-device-detect": {
27841+ "version": "2.0.1",
27842+ "resolved": "https://registry.npmjs.org/react-device-detect/-/react-device-detect-2.0.1.tgz",
27843+ "integrity": "sha512-DrDKiKky/L/DSEJUw5CL2I38s/18zCLIoKP4pE4CyO1FyL6XhQZMIjHmv0pbYQBlfdKB+ZUXP53tWeLkt0eqJw==",
27844+ "requires": {
27845+ "ua-parser-js": "^0.7.28"
27846+ }
27847+ },
27840 "react-dom": {
27848 "react-dom": {
27841 "version": "17.0.2",
27849 "version": "17.0.2",
27842 "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
27850 "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
@@ -32445,8 +32453,7 @@
32445 "ua-parser-js": {
32453 "ua-parser-js": {
32446 "version": "0.7.28",
32454 "version": "0.7.28",
32447 "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
32455 "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
32448− "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==",
32456+ "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g=="
32449− "optional": true
32450 },
32457 },
32451 "uint8arrays": {
32458 "uint8arrays": {
32452 "version": "1.1.0",
32459 "version": "1.1.0",
package.json+1
@@ -65,6 +65,7 @@
65 "new-github-issue-url": "^0.2.1",
65 "new-github-issue-url": "^0.2.1",
66 "prop-types": "^15.6.2",
66 "prop-types": "^15.6.2",
67 "react": "^17.0.2",
67 "react": "^17.0.2",
68+ "react-device-detect": "^2.0.1",
68 "react-dom": "^17.0.2",
69 "react-dom": "^17.0.2",
69 "react-final-form": "^6.3.0",
70 "react-final-form": "^6.3.0",
70 "react-final-form-arrays": "^3.1.0",
71 "react-final-form-arrays": "^3.1.0",
src/views/Activate/MasterKeyTransfer.tsx+21−7
@@ -13,6 +13,8 @@ import PointPresenter from './PointPresenter';
13import DangerBox from './DangerBox';
13import DangerBox from './DangerBox';
14import View from 'components/View';
14import View from 'components/View';
15
15
16+import { isMacOs, isWindows } from 'react-device-detect';
17+
16const MasterKeyTransfer = () => {
18const MasterKeyTransfer = () => {
17 const { performL2Reticket } = useRoller();
19 const { performL2Reticket } = useRoller();
18 const {
20 const {
@@ -45,6 +47,22 @@ const MasterKeyTransfer = () => {
45 inviteWallet.value,
47 inviteWallet.value,
46 ]);
48 ]);
47
49
50+ const downloadButtonLabel = useMemo(() => {
51+ return isMacOs
52+ ? 'Download the Client for Mac'
53+ : isWindows
54+ ? 'Download the Client for Windows'
55+ : 'Download the Client for Your OS';
56+ }, []);
57+
58+ const downloadUrl = useMemo(() => {
59+ return isMacOs
60+ ? `https://github.com/urbit/port/releases/latest/download/Port.dmg`
61+ : isWindows
62+ ? 'https://github.com/urbit/urbit/releases/download/latest/windows.tgz'
63+ : 'https://github.com/urbit/port/releases/download/latest';
64+ }, []);
65+
48 useFadeIn();
66 useFadeIn();
49
67
50 useLifecycle(() => {
68 useLifecycle(() => {
@@ -95,14 +113,10 @@ const MasterKeyTransfer = () => {
95 justifyContent={'space-between'}>
113 justifyContent={'space-between'}>
96 {error && <DangerBox>{error.toString()}</DangerBox>}
114 {error && <DangerBox>{error.toString()}</DangerBox>}
97 <ActivateButton
115 <ActivateButton
98− onClick={() =>
99− window.open(
116+ onClick={() => window.open(downloadUrl)}
100− 'https://github.com/urbit/port/releases/latest/download/Port.dmg'
101− )
102− }
103 disabled={error}
117 disabled={error}
104 success={true}>
118 success={true}>
105− Download the Client for Mac
119+ {downloadButtonLabel}
106 </ActivateButton>
120 </ActivateButton>
107 <Anchor
121 <Anchor
108 href="https://urbit.org/getting-started/cli"
122 href="https://urbit.org/getting-started/cli"
@@ -120,7 +134,7 @@ const MasterKeyTransfer = () => {
120 </Anchor>
134 </Anchor>
121 </Box>
135 </Box>
122 );
136 );
123− }, [error]);
137+ }, [downloadButtonLabel, downloadUrl, error]);
124
138
125 return (
139 return (
126 <View centered={true}>
140 <View centered={true}>