Skip to content

Commit 0dd50ce

Browse files
feat: Adapt Modular Dev Tool
1 parent 24cf2f6 commit 0dd50ce

File tree

4 files changed

+74
-57
lines changed

4 files changed

+74
-57
lines changed

.changeset/fuzzy-bees-thank.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"live-mobile": minor
3+
---
4+
5+
Adapt Modular Dev Tool
Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
1-
export const assetLeftOptions = [
2-
{ label: "Undefined", value: "undefined" },
3-
{ label: "APY", value: "apy" },
4-
{ label: "Price Variation", value: "priceVariation" },
5-
];
1+
import {
2+
assetsLeftElementOptions,
3+
assetsRightElementOptions,
4+
networksLeftElementOptions,
5+
networksRightElementOptions,
6+
} from "@ledgerhq/live-common/wallet-api/ModularDrawer/types";
67

7-
export const assetRightOptions = [
8-
{ label: "Undefined", value: "undefined" },
9-
{ label: "Balance", value: "balance" },
10-
{ label: "Market Trend", value: "marketTrend" },
11-
];
8+
const toHumanLabel = (value: string): string => {
9+
if (value === "undefined") return "Undefined";
10+
const withSpaces = value.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/_/g, " ");
11+
return withSpaces
12+
.split(" ")
13+
.map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())
14+
.join(" ");
15+
};
1216

13-
export const networkLeftOptions = [
14-
{ label: "Undefined", value: "undefined" },
15-
{ label: "Number of Accounts", value: "numberOfAccounts" },
16-
{ label: "Number of Accounts and APY", value: "numberOfAccountsAndApy" },
17-
];
17+
const toPickerOptions = <T extends readonly string[]>(values: T) =>
18+
values.map(v => ({ label: toHumanLabel(v), value: v }));
1819

19-
export const networkRightOptions = [
20-
{ label: "Undefined", value: "undefined" },
21-
{ label: "Balance", value: "balance" },
22-
];
20+
export const assetLeftOptions = toPickerOptions(assetsLeftElementOptions);
21+
export const assetRightOptions = toPickerOptions(assetsRightElementOptions);
22+
export const networkLeftOptions = toPickerOptions(networksLeftElementOptions);
23+
export const networkRightOptions = toPickerOptions(networksRightElementOptions);

apps/ledger-live-mobile/src/newArch/features/ModularDrawer/Debug/index.tsx

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ import {
1414
networkRightOptions,
1515
} from "./const/configurationOptions";
1616
import { AssetConfiguration, NetworkConfiguration } from "./types";
17+
import {
18+
assetsLeftElementOptions,
19+
assetsRightElementOptions,
20+
networksLeftElementOptions,
21+
networksRightElementOptions,
22+
} from "@ledgerhq/live-common/wallet-api/ModularDrawer/types";
23+
import { getElement, makeOnValueChange } from "./utils";
1724

1825
function ModularDrawerScreenDebug() {
1926
const { openDrawer } = useModularDrawerController();
@@ -46,16 +53,12 @@ function ModularDrawerScreenDebug() {
4653
flow: "debug_flow",
4754
source: "debug_source",
4855
assetsConfiguration: {
49-
leftElement:
50-
selectedAssetLeftElement === "undefined" ? undefined : selectedAssetLeftElement,
51-
rightElement:
52-
selectedAssetRightElement === "undefined" ? undefined : selectedAssetRightElement,
56+
leftElement: getElement(selectedAssetLeftElement),
57+
rightElement: getElement(selectedAssetRightElement),
5358
},
5459
networksConfiguration: {
55-
leftElement:
56-
selectedNetworkLeftElement === "undefined" ? undefined : selectedNetworkLeftElement,
57-
rightElement:
58-
selectedNetworkRightElement === "undefined" ? undefined : selectedNetworkRightElement,
60+
leftElement: getElement(selectedNetworkLeftElement),
61+
rightElement: getElement(selectedNetworkRightElement),
5962
},
6063
});
6164
}, [
@@ -85,12 +88,14 @@ function ModularDrawerScreenDebug() {
8588
</SectionCard>
8689

8790
<SectionCard title="Feature Flag">
88-
<FeatureFlagDetails
89-
key={"llmModularDrawer"}
90-
focused={isFocused}
91-
flagName={"llmModularDrawer"}
92-
setFocusedName={v => setIsFocused(v === "llmModularDrawer")}
93-
/>
91+
{(["llmModularDrawer", "llmModularDrawerBackendData"] as const).map(flag => (
92+
<FeatureFlagDetails
93+
key={flag}
94+
focused={isFocused}
95+
flagName={flag}
96+
setFocusedName={v => setIsFocused(v === flag)}
97+
/>
98+
))}
9499
</SectionCard>
95100

96101
<SectionCard title="Basic Configuration">
@@ -125,23 +130,18 @@ function ModularDrawerScreenDebug() {
125130
label="Left Element"
126131
description="Choose what to display on the left side of asset rows"
127132
value={selectedAssetLeftElement || "undefined"}
128-
onValueChange={(value: string) => {
129-
if (value === "undefined" || value === "apy" || value === "priceVariation") {
130-
setSelectedAssetLeftElement(value);
131-
}
132-
}}
133+
onValueChange={makeOnValueChange(assetsLeftElementOptions, setSelectedAssetLeftElement)}
133134
options={assetLeftOptions}
134135
/>
135136

136137
<PickerField
137138
label="Right Element"
138139
description="Choose what to display on the right side of asset rows"
139140
value={selectedAssetRightElement || "undefined"}
140-
onValueChange={(value: string) => {
141-
if (value === "undefined" || value === "balance" || value === "marketTrend") {
142-
setSelectedAssetRightElement(value);
143-
}
144-
}}
141+
onValueChange={makeOnValueChange(
142+
assetsRightElementOptions,
143+
setSelectedAssetRightElement,
144+
)}
145145
options={assetRightOptions}
146146
/>
147147
</SectionCard>
@@ -151,27 +151,21 @@ function ModularDrawerScreenDebug() {
151151
label="Left Element"
152152
description="Choose what to display on the left side of network rows"
153153
value={selectedNetworkLeftElement || "undefined"}
154-
onValueChange={(value: string) => {
155-
if (
156-
value === "undefined" ||
157-
value === "numberOfAccounts" ||
158-
value === "numberOfAccountsAndApy"
159-
) {
160-
setSelectedNetworkLeftElement(value);
161-
}
162-
}}
154+
onValueChange={makeOnValueChange(
155+
networksLeftElementOptions,
156+
setSelectedNetworkLeftElement,
157+
)}
163158
options={networkLeftOptions}
164159
/>
165160

166161
<PickerField
167162
label="Right Element"
168163
description="Choose what to display on the right side of network rows"
169164
value={selectedNetworkRightElement || "undefined"}
170-
onValueChange={(value: string) => {
171-
if (value === "undefined" || value === "balance") {
172-
setSelectedNetworkRightElement(value);
173-
}
174-
}}
165+
onValueChange={makeOnValueChange(
166+
networksRightElementOptions,
167+
setSelectedNetworkRightElement,
168+
)}
175169
options={networkRightOptions}
176170
/>
177171
</SectionCard>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const getElement = <T extends string>(value: T | "undefined" | undefined): T | undefined =>
2+
value === "undefined" || value === undefined ? undefined : value;
3+
4+
const isOneOf = <T extends readonly string[]>(value: string, allowed: T): value is T[number] => {
5+
for (const item of allowed) {
6+
if (item === value) return true;
7+
}
8+
return false;
9+
};
10+
11+
const makeOnValueChange =
12+
<T extends readonly string[]>(allowed: T, setter: (v: T[number]) => void) =>
13+
(value: string) => {
14+
if (isOneOf(value, allowed)) setter(value);
15+
};
16+
17+
export { getElement, isOneOf, makeOnValueChange };

0 commit comments

Comments
 (0)