-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: address qa findings, add mobile view for public delegate list
- Loading branch information
1 parent
02a7f33
commit 9fbc0f2
Showing
15 changed files
with
380 additions
and
186 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
<svg width="52" height="52" viewBox="0 0 52 52" fill="none" xmlns="http://www.w3.org/2000/svg"> | ||
<circle cx="26" cy="26" r="26" fill="black" fill-opacity="0.1"/> | ||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.8818 19.8789C32.8818 23.697 29.8204 26.7585 25.9996 26.7585C22.1801 26.7585 19.1174 23.697 19.1174 19.8789C19.1174 16.0607 22.1801 13.0005 25.9996 13.0005C29.8204 13.0005 32.8818 16.0607 32.8818 19.8789ZM25.9996 39.0005C20.3607 39.0005 15.5996 38.084 15.5996 34.5479C15.5996 31.0106 20.3906 30.1266 25.9996 30.1266C31.6398 30.1266 36.3996 31.0431 36.3996 34.5791C36.3996 38.1165 31.6086 39.0005 25.9996 39.0005Z" fill="#3C4254" fill-opacity="0.28"/> | ||
</svg> |
50 changes: 50 additions & 0 deletions
50
modules/delegation/providers/DelegateFromPublicListContext.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
import { createContext, FC, useCallback, useContext, useState } from 'react' | ||
import invariant from 'tiny-invariant' | ||
|
||
// | ||
// Data context | ||
// | ||
|
||
type Value = { | ||
selectedPublicDelegate: string | undefined | ||
onPublicDelegateSelect: (address: string) => () => void | ||
onPublicDelegateReset: () => void | ||
} | ||
|
||
const DelegateFromPublicListContext = createContext<Value | null>(null) | ||
|
||
export const useDelegateFromPublicList = () => { | ||
const value = useContext(DelegateFromPublicListContext) | ||
invariant( | ||
value, | ||
'useDelegateFromPublicList was used outside the DelegateFromPublicListContext provider', | ||
) | ||
return value | ||
} | ||
|
||
export const DelegateFromPublicListProvider: FC = ({ children }) => { | ||
const [selectedPublicDelegate, setSelectedPublicDelegate] = useState<string>() | ||
|
||
const handleDelegatePick = useCallback( | ||
(address: string) => () => { | ||
setSelectedPublicDelegate(address) | ||
}, | ||
[], | ||
) | ||
|
||
const handleDelegateReset = useCallback(() => { | ||
setSelectedPublicDelegate(undefined) | ||
}, []) | ||
|
||
return ( | ||
<DelegateFromPublicListContext.Provider | ||
value={{ | ||
selectedPublicDelegate, | ||
onPublicDelegateSelect: handleDelegatePick, | ||
onPublicDelegateReset: handleDelegateReset, | ||
}} | ||
> | ||
{children} | ||
</DelegateFromPublicListContext.Provider> | ||
) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
75 changes: 32 additions & 43 deletions
75
modules/delegation/ui/DelegationSettings/DelegationSettings.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,58 +1,47 @@ | ||
import { useCallback, useState } from 'react' | ||
import { Button, Text } from '@lidofinance/lido-ui' | ||
import { useState } from 'react' | ||
import { Button, Text, useBreakpoint } from '@lidofinance/lido-ui' | ||
|
||
import { FormTitle, FormWrap, Wrap } from './DelegationSettingsStyle' | ||
import { DelegationForm } from '../DelegationForm' | ||
import { PublicDelegateList } from '../PublicDelegateList' | ||
import { DelegateFromPublicListProvider } from '../../providers/DelegateFromPublicListContext' | ||
|
||
export function DelegationSettings() { | ||
const [isSimpleModeOn, setIsSimpleModeOn] = useState(true) | ||
const [delegateFromPublicList, setDelegateFromPublicList] = useState<string>() | ||
|
||
const handleDelegatePick = useCallback( | ||
(address: string) => () => { | ||
setDelegateFromPublicList(address) | ||
}, | ||
[], | ||
) | ||
const isMobile = useBreakpoint('md') | ||
|
||
return ( | ||
<Wrap> | ||
<FormWrap $customizable={!isSimpleModeOn}> | ||
<FormTitle> | ||
<Text size="xl" weight={700}> | ||
Delegation | ||
</Text> | ||
{!isSimpleModeOn && ( | ||
<Button | ||
variant="outlined" | ||
size="xs" | ||
onClick={() => setIsSimpleModeOn(true)} | ||
> | ||
Back | ||
</Button> | ||
)} | ||
</FormTitle> | ||
{isSimpleModeOn ? ( | ||
<DelegationForm | ||
mode="simple" | ||
presetDelegateAddress={delegateFromPublicList} | ||
onCustomizeClick={() => setIsSimpleModeOn(false)} | ||
/> | ||
) : ( | ||
<> | ||
<DelegateFromPublicListProvider> | ||
<FormWrap $customizable={!isSimpleModeOn}> | ||
<FormTitle> | ||
<Text size={isMobile ? 'lg' : 'xl'} weight={700}> | ||
Delegation | ||
</Text> | ||
{!isSimpleModeOn && ( | ||
<Button | ||
variant="outlined" | ||
size="xs" | ||
onClick={() => setIsSimpleModeOn(true)} | ||
> | ||
Back | ||
</Button> | ||
)} | ||
</FormTitle> | ||
{isSimpleModeOn ? ( | ||
<DelegationForm | ||
mode="aragon" | ||
presetDelegateAddress={delegateFromPublicList} | ||
mode="simple" | ||
onCustomizeClick={() => setIsSimpleModeOn(false)} | ||
/> | ||
<DelegationForm | ||
mode="snapshot" | ||
presetDelegateAddress={delegateFromPublicList} | ||
/> | ||
</> | ||
)} | ||
</FormWrap> | ||
<PublicDelegateList onDelegatePick={handleDelegatePick} /> | ||
) : ( | ||
<> | ||
<DelegationForm mode="aragon" /> | ||
<DelegationForm mode="snapshot" /> | ||
</> | ||
)} | ||
</FormWrap> | ||
<PublicDelegateList /> | ||
</DelegateFromPublicListProvider> | ||
</Wrap> | ||
) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
30 changes: 30 additions & 0 deletions
30
modules/delegation/ui/PublicDelegateList/PublicDelegateAvatar.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
import Image from 'next/image' | ||
import { AvatarWrap } from './PublicDelegateListStyle' | ||
|
||
import AvatarSvg from 'assets/avatar.com.svg.react' | ||
|
||
type Props = { | ||
avatarSrc: string | null | undefined | ||
} | ||
|
||
export function PublicDelegateAvatar({ avatarSrc }: Props) { | ||
if (!avatarSrc) { | ||
return ( | ||
<AvatarWrap> | ||
<AvatarSvg viewBox="0 0 52 52" /> | ||
</AvatarWrap> | ||
) | ||
} | ||
|
||
return ( | ||
<AvatarWrap> | ||
<Image | ||
src={avatarSrc} | ||
alt="" | ||
layout="fill" | ||
loader={({ src }) => src} | ||
unoptimized | ||
/> | ||
</AvatarWrap> | ||
) | ||
} |
Oops, something went wrong.