Skip to content
This repository was archived by the owner on Jun 24, 2022. It is now read-only.

switcher added #2013

Merged
merged 15 commits into from
Jan 24, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion src/custom/components/Settings/SettingsMod.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import { Text } from 'rebass'
import styled, { ThemeContext } from 'styled-components/macro'
import { useOnClickOutside } from 'hooks/useOnClickOutside'
import { useModalOpen, useToggleSettingsMenu } from 'state/application/hooks'
import { useExpertModeManager, useRecipientToggleManager } from 'state/user/hooks'
import { ApplicationModal } from 'state/application/reducer'
import { /* useClientSideRouter, */ useExpertModeManager } from 'state/user/hooks'
import { TYPE } from 'theme'
import { ButtonError } from 'components/Button'
import { AutoColumn } from 'components/Column'
Expand Down Expand Up @@ -127,6 +127,7 @@ export default function SettingsTab({ className, placeholderSlippage, SettingsBu
const theme = useContext(ThemeContext)

const [expertMode, toggleExpertMode] = useExpertModeManager()
const [recipientToggleVisible, toggleRecipientVisibility] = useRecipientToggleManager()

// const [clientSideRouter, setClientSideRouter] = useClientSideRouter()

Expand Down Expand Up @@ -244,15 +245,38 @@ export default function SettingsTab({ className, placeholderSlippage, SettingsBu
expertMode
? () => {
toggleExpertMode()
toggleRecipientVisibility(false)
setShowConfirmation(false)
}
: () => {
toggle()
toggleRecipientVisibility(true)
setShowConfirmation(true)
}
}
/>
</RowBetween>

<RowBetween>
<RowFixed>
<TYPE.black fontWeight={400} fontSize={14} color={theme.text2}>
<Trans>Toggle Recipient</Trans>
</TYPE.black>
<QuestionHelper
bgColor={theme.bg3}
color={theme.text1}
text={
<Trans>Allows you to choose a destination address for the swap other than the connected one.</Trans>
}
/>
</RowFixed>
<Toggle
id="toggle-recipient-mode-button"
isActive={recipientToggleVisible || expertMode}
toggle={() => (expertMode ? null : toggleRecipientVisibility())}
className={expertMode ? 'disabled' : ''}
/>
</RowBetween>
</AutoColumn>
</MenuFlyout>
)}
Expand Down
14 changes: 11 additions & 3 deletions src/custom/components/Toggle/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,17 @@ const WrappedToggle = styled(ToggleUni)`
border: 2px solid ${({ theme }) => theme.text1};
}
}
.disabled {
background: ${({ theme }) => theme.primary1};
color: ${({ theme }) => theme.text2};

&.disabled {
cursor: default;

${ToggleElement} {
opacity: 0.5;

&:hover {
border: 2px solid transparent;
}
}
}
`

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -280,8 +280,8 @@ SwapModalHeaderProps) {
)}
</AutoColumn>
{recipient !== null ? (
<AutoColumn justify="flex-start" gap="sm" style={{ padding: '12px 0 0 0px' }}>
<TYPE.main>
<AutoColumn justify="flex-start" gap="sm">
<TYPE.main style={{ padding: '0.75rem 1rem' }}>
<Trans>
Output will be sent to{' '}
<b title={recipient}>{isAddress(recipient) ? shortenAddress(recipient) : recipient}</b>
Expand Down
15 changes: 10 additions & 5 deletions src/custom/pages/Swap/SwapMod.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ import {
useHighFeeWarning,
useUnknownImpactWarning,
} from 'state/swap/hooks'
import { useExpertModeManager } from 'state/user/hooks'
import { useExpertModeManager, useRecipientToggleManager } from 'state/user/hooks'
import { /* HideSmall, */ LinkStyledButton, TYPE, ButtonSize } from 'theme'
// import { computeFiatValuePriceImpact } from 'utils/computeFiatValuePriceImpact'
// import { getTradeVersion } from 'utils/getTradeVersion'
Expand Down Expand Up @@ -169,6 +169,8 @@ export default function Swap({
// for expert mode
const [isExpertMode] = useExpertModeManager()

const [recipientToggleVisible] = useRecipientToggleManager()

// get version from the url
// const toggledVersion = useToggledVersion()

Expand Down Expand Up @@ -527,7 +529,7 @@ export default function Swap({
<AffiliateStatusCheck />
<StyledAppBody className={className}>
<SwapHeader allowedSlippage={allowedSlippage} />
<Wrapper id="swap-page" className={isExpertMode ? 'expertMode' : ''}>
<Wrapper id="swap-page" className={isExpertMode || recipientToggleVisible ? 'expertMode' : ''}>
<ConfirmSwapModal
isOpen={showConfirm}
trade={trade}
Expand Down Expand Up @@ -589,13 +591,16 @@ export default function Swap({
</ArrowWrapper>
*/}
{/* GP ARROW SWITCHER */}
<AutoColumn justify="space-between" style={{ margin: `${isExpertMode ? 10 : 3}px 0` }}>
<AutoColumn
justify="space-between"
style={{ margin: `${isExpertMode || recipientToggleVisible ? 10 : 3}px 0` }}
>
<AutoRow
justify={isExpertMode ? 'space-between' : 'center'}
justify={isExpertMode || recipientToggleVisible ? 'space-between' : 'center'}
// style={{ padding: '0 1rem' }}
>
<ArrowWrapperLoader onSwitchTokens={onSwitchTokens} setApprovalSubmitted={setApprovalSubmitted} />
{recipient === null && !showWrap && isExpertMode ? (
{recipient === null && !showWrap && (isExpertMode || recipientToggleVisible) ? (
<LinkStyledButton id="add-recipient-button" onClick={() => onChangeRecipient('')}>
<Trans>+ Add a send (optional)</Trans>
</LinkStyledButton>
Expand Down
2 changes: 2 additions & 0 deletions src/state/user/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ export const updateOptimismAlphaAcknowledged = createAction<{ optimismAlphaAckno
)
export const updateUserDarkMode = createAction<{ userDarkMode: boolean }>('user/updateUserDarkMode')
export const updateUserExpertMode = createAction<{ userExpertMode: boolean }>('user/updateUserExpertMode')
export const updateRecipientToggleVisible =
createAction<{ recipientToggleVisible: boolean }>('user/recipientToggleVisible')
export const updateUserLocale = createAction<{ userLocale: SupportedLocale }>('user/updateUserLocale')
export const updateUserClientSideRouter = createAction<{ userClientSideRouter: boolean }>(
'user/updateUserClientSideRouter'
Expand Down
25 changes: 25 additions & 0 deletions src/state/user/hooks.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
SerializedToken,
updateArbitrumAlphaAcknowledged,
updateHideClosedPositions,
updateRecipientToggleVisible,
updateOptimismAlphaAcknowledged,
updateUserClientSideRouter,
updateUserDarkMode,
Expand All @@ -29,6 +30,7 @@ import {
updateUserLocale,
updateUserSlippageTolerance,
} from './actions'
import { useSwapActionHandlers } from '../swap/hooks'

export function serializeToken(token: Token): SerializedToken {
return {
Expand Down Expand Up @@ -106,6 +108,29 @@ export function useExpertModeManager(): [boolean, () => void] {
return [expertMode, toggleSetExpertMode]
}

export function useIsRecipientToggleVisible(): boolean {
return useAppSelector((state) => state.user.recipientToggleVisible)
}

export function useRecipientToggleManager(): [boolean, (value?: boolean) => void] {
const dispatch = useAppDispatch()
const recipientToggleVisible = useIsRecipientToggleVisible()
const { onChangeRecipient } = useSwapActionHandlers()

const toggleRecipientVisibility = useCallback(
(value?: boolean) => {
const newRecipientToggleVisibilityValue = value ?? !recipientToggleVisible
dispatch(updateRecipientToggleVisible({ recipientToggleVisible: newRecipientToggleVisibilityValue }))
if (!newRecipientToggleVisibilityValue) {
onChangeRecipient(null)
}
},
[recipientToggleVisible, dispatch, onChangeRecipient]
)

return [recipientToggleVisible, toggleRecipientVisibility]
}

export function useClientSideRouter(): [boolean, (userClientSideRouter: boolean) => void] {
const dispatch = useAppDispatch()

Expand Down
14 changes: 11 additions & 3 deletions src/state/user/reducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,18 @@ import {
removeSerializedToken,
SerializedPair,
SerializedToken,
updateArbitrumAlphaAcknowledged,
updateHideClosedPositions,
updateMatchesDarkMode,
updateOptimismAlphaAcknowledged,
updateUserClientSideRouter,
updateUserDarkMode,
updateUserDeadline,
updateUserExpertMode,
updateUserLocale,
updateUserSlippageTolerance,
toggleURLWarning,
updateHideClosedPositions,
updateUserLocale,
updateArbitrumAlphaAcknowledged,
updateRecipientToggleVisible,
} from './actions'

const currentTimestamp = () => new Date().getTime()
Expand All @@ -40,6 +41,8 @@ export interface UserState {

userExpertMode: boolean

recipientToggleVisible: boolean

userClientSideRouter: boolean // whether routes should be calculated with the client side router only

// hides closed (inactive) positions across the app
Expand Down Expand Up @@ -79,6 +82,7 @@ export const initialState: UserState = {
optimismAlphaAcknowledged: false,
userDarkMode: null,
userExpertMode: false,
recipientToggleVisible: false,
userLocale: null,
userClientSideRouter: false,
userHideClosedPositions: false,
Expand Down Expand Up @@ -144,6 +148,10 @@ export default createReducer(initialState, (builder) =>
state.userExpertMode = action.payload.userExpertMode
state.timestamp = currentTimestamp()
})
.addCase(updateRecipientToggleVisible, (state, action) => {
state.recipientToggleVisible = action.payload.recipientToggleVisible
state.timestamp = currentTimestamp()
})
.addCase(updateUserLocale, (state, action) => {
state.userLocale = action.payload.userLocale
state.timestamp = currentTimestamp()
Expand Down