diff --git a/front/components/GtkUI/ElementList.tsx b/front/components/GtkUI/ElementList.tsx
index d94aa57..d451634 100644
--- a/front/components/GtkUI/ElementList.tsx
+++ b/front/components/GtkUI/ElementList.tsx
@@ -10,39 +10,56 @@ type DropdownOption = {
value: string;
};
-const getElementTypeNode = (
- type: ElementType,
- text?: string,
- options?: DropdownOption[],
- onToggle?: (value: boolean) => void,
- toggleValue?: boolean,
- defaultToggleValue?: boolean,
- onSelect?: (value: string) => void
-): React.ReactNode => {
- switch (type) {
- case "text":
- return (
-
- {text}
-
- );
- case "toggle":
- return (
-
- );
- case "dropdown":
- return Dropdown;
- default:
- return Default;
- }
+type ElementTextProps = {
+ text: string;
+};
+
+type ElementToggleProps = {
+ onToggle: (value: boolean) => void;
+ value: boolean;
+ defaultValue?: boolean;
+};
+
+type ElementDropdownProps = {
+ options: DropdownOption[];
+ onSelect: (value: string) => void;
+ value: string;
+ defaultValue?: string;
+};
+
+const getElementTextNode = ({ text, type }: ElementTextProps) => {
+ return (
+
+ {text}
+
+ );
+};
+
+const getElementToggleNode = ({
+ onToggle,
+ value,
+ defaultValue,
+}: ElementToggleProps) => {
+ return (
+
+ );
+};
+
+const getElementDropdownNode = ({
+ options,
+ onSelect,
+ value,
+ defaultValue,
+}: ElementDropdownProps) => {
+ return Dropdown;
};
type ElementProps = {
@@ -54,12 +71,7 @@ type ElementProps = {
onPress?: () => void;
// node is only used if type is "custom"
node?: React.ReactNode;
- onToggle?: (value: boolean) => void;
- toggleValue?: boolean;
- defaultToggleValue?: boolean;
- text?: string;
- options?: DropdownOption[];
- onSelect?: (value: string) => void;
+ data?: ElementTextProps | ElementToggleProps | ElementDropdownProps;
};
const Element = ({
@@ -70,12 +82,7 @@ const Element = ({
disabled,
onPress,
node,
- onToggle,
- toggleValue,
- defaultToggleValue,
- text,
- options,
- onSelect,
+ data,
}: ElementProps) => {
return (
{title}
- {type === "custom"
- ? node
- : getElementTypeNode(
- type ?? "default",
- text,
- options,
- onToggle,
- toggleValue,
- defaultToggleValue,
- onSelect
- )}
+ {(() => {
+ switch (type) {
+ case "text":
+ return getElementTextNode(data as ElementTextProps);
+ case "toggle":
+ return getElementToggleNode(data as ElementToggleProps);
+ case "dropdown":
+ return getElementDropdownNode(data as ElementDropdownProps);
+ case "custom":
+ return node;
+ default:
+ return Unknown type;
+ }
+ })()}
);
diff --git a/front/views/settings/SettingsProfileView.tsx b/front/views/settings/SettingsProfileView.tsx
index a1b3a8e..3986289 100644
--- a/front/views/settings/SettingsProfileView.tsx
+++ b/front/views/settings/SettingsProfileView.tsx
@@ -59,19 +59,15 @@ const ProfileSettings = ({ navigation }: { navigation: any }) => {
paddingTop: 40,
}}
>
-
+
{getInitials(user.name)}
-
- }
- />
-
{
{
type: "text",
title: "Username",
- text: user.name,
+ data: {
+ text: user.name,
+ },
},
{
type: "text",
title: "Email",
- text: user.email,
+ data: {
+ text: user.email,
+ },
},
{
type: "text",
title: "ID",
- text: user.id,
+ data: {
+ text: user.id,
+ },
},
{
type: "text",
title: "Party played",
- text: user.data.partyPlayed,
+ data: {
+ text: user.data.partyPlayed,
+ },
},
{
type: "text",
title: "XP",
- text: user.data.xp,
+ data: {
+ text: user.data.xp,
+ },
},
{
type: "text",
title: "Date de création",
- text: user.data.createdAt,
+ data: {
+ text: user.data.createdAt,
+ },
},
{
type: "toggle",
title: "Notifications",
- onToggle: (value) => {
- console.log(value);
- setToggle(value);
+ data: {
+ value: toggle,
+ onToggle: () => {
+ console.log("toggle", toggle);
+ setToggle(!toggle);
+ },
},
- toggleValue: toggle,
},
{
type: "dropdown",
title: "Langue",
- options: [
- {
- label: "Français",
- value: "fr",
- },
- {
- label: "English",
- value: "en",
- },
- ],
- onSelect: (value) => console.log(value),
- }
+ data: {
+ value: "fr",
+ options: [
+ {
+ label: "Français",
+ value: "fr",
+ },
+ {
+ label: "English",
+ value: "en",
+ },
+ ],
+ onSelect: (value) => console.log(value),
+ },
+ },
]}
/>