Skip to content

Commit 495dda3

Browse files
committed
feat(web): auth button styling
1 parent a2a2376 commit 495dda3

File tree

6 files changed

+37
-17
lines changed

6 files changed

+37
-17
lines changed

apps/mobile/src/utils/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ReactNode } from 'react';
22

3+
/** @deprecated Import from ui library */
34
export interface HasChildren {
45
children?: ReactNode;
56
}
Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,37 @@
1-
import type { AuthState } from '~/helpers/utils';
1+
import type { ExtensionState } from '~/helpers/utils';
22

3-
import { Button, type ButtonProps } from '@leather.io/ui';
3+
import { Button, type ButtonProps, type HasChildren } from '@leather.io/ui';
4+
import { assertUnreachable } from '@leather.io/utils';
45

5-
const authStateCopyMap: Record<AuthState, string> = {
6-
'no-extension': 'Install',
7-
'extension-pre-onboarding': 'Sign up',
8-
'extension-user': 'Account',
9-
};
6+
interface AuthButtonLayoutProps extends ButtonProps, HasChildren {}
7+
export function AuthButtonLayout(props: AuthButtonLayoutProps) {
8+
return <Button variant="outline" fullWidth {...props}></Button>;
9+
}
10+
11+
export function AuthButtonExtensionMissing(props: ButtonProps) {
12+
return <AuthButtonLayout {...props}>Install</AuthButtonLayout>;
13+
}
14+
15+
export function AuthButtonExtensionInstalled(props: ButtonProps) {
16+
return <AuthButtonLayout {...props}>Connect</AuthButtonLayout>;
17+
}
18+
19+
export function AuthButtonExtensionConnected(props: ButtonProps) {
20+
return <AuthButtonLayout {...props}>SP....sldkfjsd</AuthButtonLayout>;
21+
}
1022

1123
interface AuthButtonProps extends ButtonProps {
12-
state: AuthState;
24+
state: ExtensionState;
1325
}
14-
export function AuthButton(props: AuthButtonProps) {
15-
return (
16-
<Button variant="outline" {...props}>
17-
{authStateCopyMap[props.state]}
18-
</Button>
19-
);
26+
export function AuthButton({ state, ...rest }: AuthButtonProps) {
27+
switch (state) {
28+
case 'missing':
29+
return <AuthButtonExtensionMissing {...rest} />;
30+
case 'detected':
31+
return <AuthButtonExtensionInstalled {...rest} />;
32+
case 'connected':
33+
return <AuthButtonExtensionConnected {...rest} />;
34+
default:
35+
return assertUnreachable(state);
36+
}
2037
}

apps/web/app/helpers/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ export function isLeatherInstalled() {
1111
return isDefined(window.LeatherProvider);
1212
}
1313

14-
export type AuthState = 'no-extension' | 'extension-pre-onboarding' | 'extension-user';
14+
export type ExtensionState = 'missing' | 'detected' | 'connected';

apps/web/app/layouts/nav/nav.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ export function Nav() {
8282
</NavItem>
8383
</styled.div>
8484
)}
85-
<styled.div mt="auto" mb="space.04">
86-
<AuthButton state="extension-pre-onboarding" mx="space.04" />
85+
<styled.div mt="auto" mb="space.04" mx="space.04">
86+
<AuthButton state="detected" />
8787
</styled.div>
8888
</styled.nav>
8989
);

packages/ui/native.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,4 @@ export { usePressedState } from './src/hooks/use-pressed-state.native';
6060
export { useHaptics, HapticsProvider } from './src/hooks/use-haptics.native';
6161
export { Approver } from './src/components/approver/approver.native';
6262
export { Badge, type BadgeProps } from './src/components/badge/badge.native';
63+
export * from './src/utils/has-children.shared';

packages/ui/src/exports.web.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,4 @@ export { Prism, type PrismType } from './components/highlighting/clarity-prism.s
4141
export { Slider } from './components/slider/slider.web';
4242
export { useClipboard } from './utils/use-clipboard.web';
4343
export { useOnMount } from './utils/use-on-mount.shared';
44+
export * from './utils/has-children.shared';

0 commit comments

Comments
 (0)