Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat-mobile: add exclude/include & delete node to settings #5633

Merged
merged 10 commits into from Jan 26, 2023
Expand Up @@ -50,6 +50,12 @@ export class NetworkConfigurationSettingsRouter extends Subrouter<NetworkConfigu
case NetworkConfigurationSettingsAction.UnsetAsPrimaryNode:
nextRoute = NetworkConfigurationSettingsRoute.UnsetAsPrimaryNodeConfirmation
break
case NetworkConfigurationSettingsAction.ExcludeNode:
nextRoute = NetworkConfigurationSettingsRoute.ExcludeNodeConfirmation
break
case NetworkConfigurationSettingsAction.DeleteNode:
nextRoute = NetworkConfigurationSettingsRoute.DeleteNodeConfirmation
break
}
}
break
Expand Down
Expand Up @@ -65,7 +65,7 @@
</button>
</div>
</div>
<div class="flex flex-col space-y-6">
<div class="flex flex-col space-y-4">
{#if features?.dashboard?.profileActions?.networkStatus?.enabled}
<NetworkStatusButton onClick={() => $profileRouter.next({ networkStatus: true })} />
{/if}
Expand Down
@@ -1,5 +1,9 @@
<script lang="typescript">
import { togglePrimaryNodeInClientOptions } from '@core/network'
import {
removeNodeFromClientOptions,
toggleDisabledNodeInClientOptions,
togglePrimaryNodeInClientOptions,
} from '@core/network'
import { activeProfile } from '@core/profile'
import { NetworkConfigurationSettingsAction } from '../../../../../../../../lib/contexts/settings'
import {
Expand Down Expand Up @@ -33,7 +37,8 @@
const isPrimary = $activeProfile?.clientOptions?.primaryNode?.url === $selectedNode.url
if ($networkConfigurationSettingsRoute === NetworkConfigurationSettingsRoute.NodeDetails) {
if (!isPrimary) {
togglePrimaryNodeInClientOptions($selectedNode)
void togglePrimaryNodeInClientOptions($selectedNode)
$networkConfigurationSettingsRouter.previous()
} else {
$networkConfigurationSettingsRouter.next({
action: NetworkConfigurationSettingsAction.UnsetAsPrimaryNode,
Expand All @@ -42,8 +47,33 @@
} else if (
$networkConfigurationSettingsRoute === NetworkConfigurationSettingsRoute.UnsetAsPrimaryNodeConfirmation
) {
togglePrimaryNodeInClientOptions($selectedNode)
$networkConfigurationSettingsRouter.previous()
void togglePrimaryNodeInClientOptions($selectedNode)
$networkConfigurationSettingsRouter.reset()
}
}
function handleToggleDisabledNodeClick(): void {
if ($networkConfigurationSettingsRoute === NetworkConfigurationSettingsRoute.NodeDetails) {
if ($selectedNode.disabled) {
void toggleDisabledNodeInClientOptions($selectedNode)
$networkConfigurationSettingsRouter.previous()
} else {
$networkConfigurationSettingsRouter.next({
action: NetworkConfigurationSettingsAction.ExcludeNode,
})
}
} else if ($networkConfigurationSettingsRoute === NetworkConfigurationSettingsRoute.ExcludeNodeConfirmation) {
void toggleDisabledNodeInClientOptions($selectedNode)
$networkConfigurationSettingsRouter.reset()
}
}
function handleDeleteNodeClick(): void {
if ($networkConfigurationSettingsRoute === NetworkConfigurationSettingsRoute.NodeDetails) {
$networkConfigurationSettingsRouter.next({
action: NetworkConfigurationSettingsAction.DeleteNode,
})
} else if ($networkConfigurationSettingsRoute === NetworkConfigurationSettingsRoute.DeleteNodeConfirmation) {
void removeNodeFromClientOptions($selectedNode)
$networkConfigurationSettingsRouter.reset()
}
}
function onConfirmViewCancelClick(): void {
Expand All @@ -58,6 +88,8 @@
node={$selectedNode}
onEditClick={onNodeEditClick}
onTogglePrimaryClick={handleTogglePrimaryNode}
onToggleDisabledClick={handleToggleDisabledNodeClick}
onRemoveClick={handleDeleteNodeClick}
/>
{:else if $networkConfigurationSettingsRoute === NetworkConfigurationSettingsRoute.AddNode}
<NetworkConfigurationAddUpdateNodeView node={$selectedNode} onSuccess={onAddNodeSuccess} />
Expand All @@ -70,4 +102,18 @@
onCancel={onConfirmViewCancelClick}
node={$selectedNode}
/>
{:else if $networkConfigurationSettingsRoute === NetworkConfigurationSettingsRoute.ExcludeNodeConfirmation}
<NetworkConfigurationNodeConfirmationView
action={NetworkConfigurationSettingsAction.ExcludeNode}
onConfirm={handleToggleDisabledNodeClick}
onCancel={onConfirmViewCancelClick}
node={$selectedNode}
/>
{:else if $networkConfigurationSettingsRoute === NetworkConfigurationSettingsRoute.DeleteNodeConfirmation}
<NetworkConfigurationNodeConfirmationView
action={NetworkConfigurationSettingsAction.DeleteNode}
onConfirm={handleDeleteNodeClick}
onCancel={onConfirmViewCancelClick}
node={$selectedNode}
/>
{/if}
Expand Up @@ -20,6 +20,14 @@
descriptionText = localize('popups.unsetAsPrimaryNode.body', { values: { url: node.url } })
confirmButtonText = localize('actions.clear')
break
case NetworkConfigurationSettingsAction.ExcludeNode:
descriptionText = localize('popups.excludeNode.body', { values: { url: node?.url } })
confirmButtonText = localize('views.settings.configureNodeList.excludeNode')
break
case NetworkConfigurationSettingsAction.DeleteNode:
descriptionText = localize('popups.node.removeConfirmation')
confirmButtonText = localize('actions.removeNode')
break
}
}
</script>
Expand Down
@@ -1,11 +1,21 @@
<script lang="typescript">
import { showAppNotification } from '@auxiliary/notification'
import { localize } from '@core/i18n'
import { INode, INodeInfo } from '@core/network'
import { getOfficialNodes, INode, INodeInfo } from '@core/network'
import { activeProfile } from '@core/profile'
import { getNodeInfo } from '@core/profile-manager'
import { resolveObjectPath, setClipboard } from '@core/utils'
import { Button, Checkbox, CopyableBox, FontWeight, Spinner, Text, TextType } from 'shared/components'
import {
Button,
ButtonVariant,
Checkbox,
CopyableBox,
FontWeight,
HR,
Spinner,
Text,
TextType,
} from 'shared/components'
import { onMount } from 'svelte'
enum NodeInfoTab {
Expand All @@ -18,6 +28,8 @@
export let node: INode = { url: '' }
export let onEditClick: () => void
export let onTogglePrimaryClick: () => void
export let onToggleDisabledClick: () => void
export let onRemoveClick: () => void
const NODE_INFO_LOCALE_BASE_PATH = 'popups.node.info'
const NODE_INFO_TAB_MAP: Readonly<
Expand Down Expand Up @@ -68,6 +80,11 @@
}
$: isPrimary = $activeProfile?.clientOptions?.primaryNode?.url === node.url
$: isOfficialNode = getOfficialNodes($activeProfile?.networkProtocol, $activeProfile?.networkType).some(
(n) => n.url === node?.url
)
$: allowDisableOrRemove =
node?.disabled || $activeProfile?.clientOptions?.nodes?.filter((node) => !node.disabled)?.length > 1
let nodeInfo: INodeInfo
let nodeInfoTab: NodeInfoTab = NodeInfoTab.General
Expand Down Expand Up @@ -164,20 +181,31 @@
{#if nodeInfo && nodeInfoTab}
<Button
busyMessage={localize('popups.node.loadingNodeInfo')}
isBusy={!nodeInfo || !nodeInfoTab}
disabled={!nodeInfo}
classes="w-full"
outline
onClick={handleCopyAllInformationClick}
>
{localize('actions.copyAllInformation')}
</Button>
{/if}
<Button disabled={node?.disabled} classes="w-full" outline onClick={onTogglePrimaryClick}>
{localize(`views.settings.configureNodeList.${isPrimary ? 'unsetAsPrimary' : 'setAsPrimary'}`)}
</Button>
<Button classes="w-full" outline onClick={onEditClick}>
{localize('views.settings.configureNodeList.editDetails')}
</Button>
{#if !isOfficialNode}
<Button classes="w-full" outline onClick={onEditClick}>
{localize('views.settings.configureNodeList.editDetails')}
</Button>
{/if}
{#if !node?.disabled}
<Button classes="w-full" outline onClick={onTogglePrimaryClick}>
{localize(`views.settings.configureNodeList.${isPrimary ? 'unsetAsPrimary' : 'setAsPrimary'}`)}
</Button>
{/if}
{#if allowDisableOrRemove}
<Button classes="w-full" outline onClick={onToggleDisabledClick}>
{localize(`views.settings.configureNodeList.${node.disabled ? 'include' : 'exclude'}Node`)}
</Button>
<HR />
<Button classes="w-full" variant={ButtonVariant.Warning} outline onClick={onRemoveClick}>
{localize('views.settings.configureNodeList.removeNode')}
</Button>
{/if}
</div>
</div>