Skip to content

Commit 97b7106

Browse files
committed
feat(dw): experimental features
1 parent 4016927 commit 97b7106

File tree

5 files changed

+76
-58
lines changed

5 files changed

+76
-58
lines changed

packages/apps/dev-wallet/src/App/Layout/SideBar.tsx

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import {
2-
MonoApps,
32
MonoCheck,
43
MonoContacts,
54
MonoContrast,
65
MonoDarkMode,
6+
MonoExtension,
77
MonoKey,
88
MonoLightMode,
99
MonoLogout,
@@ -117,12 +117,14 @@ export const SideBar: FC = () => {
117117
component={Link}
118118
href="/contacts"
119119
/>
120-
<SideBarItem
121-
visual={<MonoApps />}
122-
label="Plugins"
123-
component={Link}
124-
href="/plugins"
125-
/>
120+
{profile?.showExperimentalFeatures && (
121+
<SideBarItem
122+
visual={<MonoExtension />}
123+
label="Plugins"
124+
component={Link}
125+
href="/plugins"
126+
/>
127+
)}
126128
</>
127129
}
128130
context={

packages/apps/dev-wallet/src/App/routes.tsx

+11-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import { Keyset } from '@/pages/keyset/keyset';
2222
import { Networks } from '@/pages/networks/networks';
2323
import { Plugins } from '@/pages/plugins/plugins';
2424
import { Ready } from '@/pages/ready/ready';
25-
import { AutoBackup } from '@/pages/settings/auto-backup/auto-backup';
2625
import { ChangePassword } from '@/pages/settings/change-password/change-password';
2726
import { ExportData } from '@/pages/settings/export-data/export-data';
2827
import { ImportData } from '@/pages/settings/import-data/import-data';
@@ -81,7 +80,7 @@ const RouteContext: FC = () => {
8180
};
8281

8382
export const Routes: FC = () => {
84-
const { isUnlocked } = useWallet();
83+
const { isUnlocked, profile } = useWallet();
8584
const isLocked = !isUnlocked;
8685
const { origin, setOrigin } = useGlobalState();
8786

@@ -127,10 +126,18 @@ export const Routes: FC = () => {
127126
<Route path="/transfer" element={<TransferV2 />} />
128127
<Route path="/contacts" element={<Contacts />} />
129128
<Route path="/settings" element={<Settings />} />
130-
<Route path="/settings/auto-backup" element={<AutoBackup />} />
131129
<Route path="/settings/export-data" element={<ExportData />} />
132130
<Route path="/settings/import-data" element={<ImportData />} />
133-
<Route path="/plugins" element={<Plugins />} />
131+
<Route
132+
element={
133+
<Redirect
134+
if={!profile || !profile.showExperimentalFeatures}
135+
to="/"
136+
/>
137+
}
138+
>
139+
<Route path="/plugins" element={<Plugins />} />
140+
</Route>
134141
<Route
135142
path="/account-discovery/:keySourceId"
136143
element={<AccountDiscovery />}

packages/apps/dev-wallet/src/modules/wallet/wallet.repository.ts

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export interface IProfile {
2626
securityPhraseId: string;
2727
accentColor: string;
2828
selectedNetworkUUID?: UUID;
29+
showExperimentalFeatures?: boolean;
2930
options: {
3031
rememberPassword: 'never' | 'session' | 'short-time';
3132
} & (
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
11
import { backupDatabase } from '@/modules/backup/backup.service';
22
import { useSubscribe } from '@/modules/db/useSubscribe';
33
import { IBackup, walletRepository } from '@/modules/wallet/wallet.repository';
4-
import { Button, Heading, Notification, Stack, Text } from '@kadena/kode-ui';
4+
import { successClass } from '@/pages/transaction/components/style.css';
5+
import {
6+
MonoSettingsBackupRestore,
7+
MonoToggleOff,
8+
MonoToggleOn,
9+
} from '@kadena/kode-icons/system';
10+
import { Button } from '@kadena/kode-ui';
511
import {
612
getDirectoryHandle,
713
isFileSystemAccessSupported,
814
} from '../../../modules/backup/fileApi';
915

1016
export function AutoBackup() {
1117
const backupOptions = useSubscribe<IBackup>('backup', 'backup-id');
12-
if (!isFileSystemAccessSupported()) {
13-
return (
14-
<Stack gap="lg" flexDirection={'column'}>
15-
<Heading variant="h4">Auto Backup</Heading>
16-
<Text>
17-
Your browser does not support the File System Access API. This feature
18-
is not available. You can use the manual backup feature instead.
19-
</Text>
20-
</Stack>
21-
);
22-
}
2318

2419
async function enableAutoBackup() {
2520
const handle = await getDirectoryHandle();
@@ -37,29 +32,23 @@ export function AutoBackup() {
3732
});
3833
}
3934

35+
const isEnabled = backupOptions && backupOptions.directoryHandle;
36+
4037
return (
41-
<Stack gap="lg" flexDirection={'column'}>
42-
<Heading variant="h4">Auto Backup</Heading>
43-
{backupOptions?.directoryHandle && (
44-
<Notification intent="positive" role="status">
45-
Enabled
46-
</Notification>
47-
)}
48-
<Text>
49-
This feature allows you to automatically backup your wallet data to your
50-
computer. You can enable or disable this feature at any time.
51-
</Text>
52-
<Stack>
53-
{backupOptions && backupOptions.directoryHandle ? (
54-
<Button variant="warning" onClick={disableAutoBackup}>
55-
Disable Auto Backup
56-
</Button>
38+
<Button
39+
variant="outlined"
40+
isDisabled={!isFileSystemAccessSupported()}
41+
onClick={isEnabled ? disableAutoBackup : enableAutoBackup}
42+
startVisual={<MonoSettingsBackupRestore />}
43+
endVisual={
44+
isEnabled ? (
45+
<MonoToggleOn className={successClass} fontSize={40} />
5746
) : (
58-
<Button variant="primary" onClick={enableAutoBackup}>
59-
Enable Auto Backup
60-
</Button>
61-
)}
62-
</Stack>
63-
</Stack>
47+
<MonoToggleOff fontSize={40} />
48+
)
49+
}
50+
>
51+
Automatic Backup
52+
</Button>
6453
);
6554
}

packages/apps/dev-wallet/src/pages/settings/settings.tsx

+32-13
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { usePrompt } from '@/Components/PromptProvider/Prompt';
33
import { SideBarBreadcrumbs } from '@/Components/SideBarBreadcrumbs/SideBarBreadcrumbs';
44
import { dbService } from '@/modules/db/db.service';
55
import { useWallet } from '@/modules/wallet/wallet.hook';
6+
import { walletRepository } from '@/modules/wallet/wallet.repository';
67
import { deleteProfile } from '@/modules/wallet/wallet.service';
78
import { getErrorMessage } from '@/utils/getErrorMessage';
89
import {
@@ -13,9 +14,11 @@ import {
1314
MonoPassword,
1415
MonoPerson,
1516
MonoRemoveRedEye,
17+
MonoRocketLaunch,
1618
MonoSelectAll,
1719
MonoSettings,
18-
MonoSettingsBackupRestore,
20+
MonoToggleOff,
21+
MonoToggleOn,
1922
} from '@kadena/kode-icons/system';
2023
import {
2124
Button,
@@ -28,8 +31,12 @@ import {
2831
import { SideBarBreadcrumbsItem, useLayout } from '@kadena/kode-ui/patterns';
2932
import { useState } from 'react';
3033
import { Link } from 'react-router-dom';
31-
import { isFileSystemAccessSupported } from '../../modules/backup/fileApi';
3234
import { linkClass } from '../home/style.css';
35+
import {
36+
failureClass,
37+
successClass,
38+
} from '../transaction/components/style.css';
39+
import { AutoBackup } from './auto-backup/auto-backup';
3340
import { ProfileNameColorForm } from './components/ProfileNameColorForm';
3441
import { downloadAsFile } from './utils/download-file';
3542

@@ -100,15 +107,6 @@ export function Settings() {
100107
>
101108
Download Entire Database
102109
</Button>
103-
<UiLink
104-
href="/settings/auto-backup"
105-
component={Link}
106-
variant="outlined"
107-
startVisual={<MonoSettingsBackupRestore />}
108-
isDisabled={!isFileSystemAccessSupported()}
109-
>
110-
Set automatic backup
111-
</UiLink>
112110
<UiLink
113111
href={`/account-discovery/${keySources[0].uuid}`}
114112
component={Link}
@@ -118,9 +116,30 @@ export function Settings() {
118116
>
119117
Start Account Discovery
120118
</UiLink>
119+
<AutoBackup />
120+
<Button
121+
startVisual={<MonoRocketLaunch />}
122+
endVisual={
123+
profile?.showExperimentalFeatures ? (
124+
<MonoToggleOn className={successClass} fontSize={40} />
125+
) : (
126+
<MonoToggleOff fontSize={40} />
127+
)
128+
}
129+
variant="outlined"
130+
onClick={() => {
131+
if (profile?.uuid) {
132+
walletRepository.patchProfile(profile.uuid, {
133+
showExperimentalFeatures: !profile.showExperimentalFeatures,
134+
});
135+
}
136+
}}
137+
>
138+
Experimental Features
139+
</Button>
121140
<Button
122-
variant="negative"
123-
startVisual={<MonoDangerous />}
141+
variant="outlined"
142+
startVisual={<MonoDangerous className={failureClass} />}
124143
onClick={async () => {
125144
if (!profile) return;
126145
const answer = await prompt((resolve, reject) => (

0 commit comments

Comments
 (0)