Skip to content

Commit 8d8ef88

Browse files
refactor PortfolioDialog and replace the prompt in the yields table (#2262)
* refactor the dialog component and update imports * replace prompt with the DialogForm
1 parent a3642b0 commit 8d8ef88

File tree

4 files changed

+51
-21
lines changed

4 files changed

+51
-21
lines changed
Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
11
import { Dialog, DialogDismiss, DialogHeading } from '@ariakit/react'
22
import { Icon } from '~/components/Icon'
33

4-
export function PortfolioDialog({ open, setOpen, addPortfolio }) {
4+
export function DialogForm({
5+
open,
6+
setOpen,
7+
title,
8+
description,
9+
onSubmit
10+
}: {
11+
open: boolean
12+
setOpen: (value: boolean) => void
13+
title: string
14+
description: string
15+
onSubmit: (name: string) => void
16+
}) {
517
return (
618
<Dialog
719
open={open}
@@ -10,7 +22,7 @@ export function PortfolioDialog({ open, setOpen, addPortfolio }) {
1022
className="fixed top-[50%] left-[50%] flex h-fit w-8/10 max-w-150 translate-x-[-50%] translate-y-[-50%] flex-col gap-4 rounded-md border border-(--cards-border) bg-(--cards-bg) p-6 sm:w-1/2 lg:w-1/3"
1123
>
1224
<div className="flex items-center justify-between gap-2">
13-
<DialogHeading className="text-lg font-medium">New portfolio</DialogHeading>
25+
<DialogHeading className="text-lg font-medium">{title}</DialogHeading>
1426
<DialogDismiss
1527
className="-my-2 ml-auto rounded-lg p-2 text-(--text-tertiary) hover:bg-(--divider) hover:text-(--text-primary)"
1628
onClick={() => setOpen(false)}
@@ -21,27 +33,33 @@ export function PortfolioDialog({ open, setOpen, addPortfolio }) {
2133
</DialogDismiss>
2234
</div>
2335
<form
24-
id='newPortfolio'
36+
id="newPortfolio"
2537
onSubmit={(e) => {
2638
e.preventDefault()
2739
const form = e.target as HTMLFormElement
2840
const formData = new FormData(form)
2941
const name = formData.get('name') as string
30-
addPortfolio(name)
42+
onSubmit(name)
3143
setOpen(false)
3244
form.reset()
3345
}}
3446
>
3547
<label className="flex flex-col gap-1">
36-
<span className="text-sm text-(--text-secondary)">Enter the name of your new portfolio</span>
48+
<span className="text-sm text-(--text-secondary)">{description}</span>
3749
<input
3850
required
3951
className="rounded-md border border-(--form-control-border) bg-white p-2 text-black disabled:opacity-50 dark:bg-black dark:text-white"
4052
name="name"
4153
/>
4254
</label>
4355
</form>
44-
<button type='submit' form='newPortfolio' className="mt-3 rounded-md bg-(--link-active-bg) p-3 text-white disabled:opacity-50">Save</button>
56+
<button
57+
type="submit"
58+
form="newPortfolio"
59+
className="mt-3 rounded-md bg-(--link-active-bg) p-3 text-white disabled:opacity-50"
60+
>
61+
Save
62+
</button>
4563
</Dialog>
4664
)
4765
}

src/containers/DeFiWatchlist/index.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useMemo, useState } from 'react'
22
import { useRouter } from 'next/router'
3+
import { DialogForm } from '~/components/DialogForm'
34
import { Icon } from '~/components/Icon'
45
import { Menu } from '~/components/Menu'
56
import { SelectWithCombobox } from '~/components/SelectWithCombobox'
@@ -10,7 +11,6 @@ import { ChainProtocolsTable } from '../ChainOverview/Table'
1011
import { IProtocol } from '../ChainOverview/types'
1112
import { useGroupAndFormatChains } from '../ChainsByCategory'
1213
import { WatchListTabs } from '../Yields/Watchlist'
13-
import { PortfolioDialog } from './PortfolioDialog'
1414

1515
export function DefiWatchlistContainer({ protocols, chains }) {
1616
const [extraTvlsEnabled] = useLocalStorageSettingsManager('tvl')
@@ -218,7 +218,13 @@ function PortfolioSelection({
218218
onItemClick={(value) => setSelectedPortfolio(value)}
219219
className="relative flex min-w-[120px] cursor-pointer flex-nowrap items-center justify-between gap-2 rounded-md border border-(--form-control-border) px-3 py-2 text-sm font-medium text-(--text-primary) hover:bg-(--link-hover-bg) focus-visible:bg-(--link-hover-bg)"
220220
/>
221-
<PortfolioDialog open={open} setOpen={setOpen} addPortfolio={addPortfolio} />
221+
<DialogForm
222+
title="New Portfolio"
223+
description="Enter the name of your new portfolio"
224+
open={open}
225+
setOpen={setOpen}
226+
onSubmit={addPortfolio}
227+
/>
222228
<button
223229
onClick={() => setOpen(true)}
224230
className="flex items-center gap-2 rounded-md border border-(--form-control-border) px-3 py-2 text-sm text-(--text-primary) transition-colors hover:bg-(--link-hover-bg) focus-visible:bg-(--link-hover-bg)"

src/containers/Yields/Filters/index.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as React from 'react'
22
import { useRouter } from 'next/router'
33
import * as Ariakit from '@ariakit/react'
4+
import { DialogForm } from '~/components/DialogForm'
45
import { Icon } from '~/components/Icon'
56
import { NestedMenu } from '~/components/NestedMenu'
67
import { useYieldFilters } from '~/contexts/LocalStorage'
@@ -16,13 +17,7 @@ import type { IYieldFiltersProps } from './types'
1617
function SavedFilters({ currentFilters }) {
1718
const { savedFilters, saveFilter, deleteFilter } = useYieldFilters()
1819
const router = useRouter()
19-
20-
const handleSave = () => {
21-
const name = window.prompt('Enter a name for this filter configuration')
22-
if (name) {
23-
saveFilter(name, currentFilters)
24-
}
25-
}
20+
const [dialogOpen, setDialogOpen] = React.useState(false)
2621

2722
const handleLoad = (name: string) => {
2823
const filters = savedFilters[name]
@@ -47,11 +42,18 @@ function SavedFilters({ currentFilters }) {
4742
return (
4843
<div className="ml-auto flex items-center gap-2">
4944
<button
50-
onClick={handleSave}
45+
onClick={() => setDialogOpen(true)}
5146
className="ml-auto flex items-center justify-center gap-1 rounded-md bg-(--link-bg) px-2 py-2 text-xs whitespace-nowrap text-(--link-text) hover:bg-(--link-hover-bg) focus-visible:bg-(--link-hover-bg) disabled:cursor-not-allowed disabled:opacity-50"
5247
>
5348
Save Current Filters
5449
</button>
50+
<DialogForm
51+
title="Saving filters"
52+
description="Enter a name for this filter configuration"
53+
open={dialogOpen}
54+
setOpen={setDialogOpen}
55+
onSubmit={(name) => saveFilter(name, currentFilters)}
56+
/>
5557
<Ariakit.MenuProvider>
5658
<Ariakit.MenuButton className="flex cursor-pointer flex-nowrap items-center justify-between gap-2 rounded-md bg-(--btn-bg) px-3 py-2 text-xs text-(--text-primary) hover:bg-(--btn-hover-bg) focus-visible:bg-(--btn-hover-bg)">
5759
Saved Filters

src/containers/Yields/Watchlist.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { useMemo, useState } from 'react'
22
import { useRouter } from 'next/router'
3+
import { DialogForm } from '~/components/DialogForm'
34
import { Icon } from '~/components/Icon'
45
import { BasicLink } from '~/components/Link'
56
import { Menu } from '~/components/Menu'
67
import { Switch } from '~/components/Switch'
78
import { YieldsPoolsTable } from '~/containers/Yields/Tables/Pools'
89
import { DEFAULT_PORTFOLIO_NAME, useWatchlistManager } from '~/contexts/LocalStorage'
910
import { useIsClient } from '~/hooks'
10-
import { PortfolioDialog } from '../DeFiWatchlist/PortfolioDialog'
1111

1212
export function YieldsWatchlistContainer({ protocolsDict }) {
1313
const { query, pathname, push } = useRouter()
@@ -88,10 +88,14 @@ export function YieldsWatchlistContainer({ protocolsDict }) {
8888
onItemClick={(value) => setSelectedPortfolio(value)}
8989
className="relative flex cursor-pointer flex-nowrap items-center justify-between gap-2 rounded-md border border-(--form-control-border) p-2 text-xs font-medium text-(--text-form) hover:bg-(--link-hover-bg) focus-visible:bg-(--link-hover-bg)"
9090
/>
91-
<PortfolioDialog open={open} setOpen={setOpen} addPortfolio={addPortfolio}/>
92-
<button
93-
onClick={() => setOpen(true)}
94-
>
91+
<DialogForm
92+
title="New Portfolio"
93+
description="Enter the name of your new portfolio"
94+
open={open}
95+
setOpen={setOpen}
96+
onSubmit={addPortfolio}
97+
/>
98+
<button onClick={() => setOpen(true)}>
9599
<Icon name="folder-plus" height={24} width={24} />
96100
</button>
97101
{selectedPortfolio !== DEFAULT_PORTFOLIO_NAME && (

0 commit comments

Comments
 (0)