TOTPFit/setting/ui/card.js

141 lines
3.9 KiB
JavaScript

export function createTOTPCard({
element,
index,
storage,
isEditing,
tempIssuer,
tempClient,
onRename,
onSave,
onDelete,
onMoveUp,
onMoveDown,
onIssuerChange,
onClientChange,
}) {
const colors = {
secondaryBg: "#282828",
text: "#fafafa",
alert: "#ad3c23",
notify: "#555555",
};
const infoView = View(
{
style: {
display: "flex",
flexDirection: "column",
alignItems: "flex-start",
},
},
isEditing
? [
TextInput({
label: "Issuer",
value: tempIssuer,
onChange: onIssuerChange,
}),
TextInput({
label: "Client",
value: tempClient,
onChange: onClientChange,
}),
]
: [
Text(
{ style: { color: colors.text, marginBottom: "2px" } },
`Issuer: ${element.issuer}`,
),
Text(
{ style: { color: colors.text } },
`Client: ${element.client}`,
),
],
);
const buttonsView = View(
{ style: { display: "flex", flexDirection: "row" } },
isEditing
? [
Button({
label: "Save",
style: {
margin: "5px",
backgroundColor: "#28a745",
color: colors.text,
},
onClick: onSave,
}),
]
: [
Button({
label: "Rename",
style: {
margin: "5px",
backgroundColor: colors.notify,
color: colors.text,
},
onClick: onRename,
}),
Button({
label: "Delete",
style: {
margin: "5px",
backgroundColor: colors.alert,
color: colors.text,
},
onClick: onDelete,
}),
],
);
const reorderView = View(
{ style: { display: "flex", flexDirection: "column" } },
[
Button({
label: "↑",
disabled: index === 0,
style: { width: "50px", margin: "2px" },
onClick: onMoveUp,
}),
Button({
label: "↓",
disabled: index === storage.length - 1,
style: { width: "50px", margin: "2px" },
onClick: onMoveDown,
}),
],
);
const mainContent = View({ style: { flexGrow: 1, padding: "5px" } }, [
infoView,
Text(
{
style: {
color: colors.text,
fontSize: "14px",
marginTop: "5px",
},
},
`${element.hashType} | ${element.digits} digits | ${element.fetchTime} seconds | ${element.timeOffset} sec offset`,
),
buttonsView,
]);
return View(
{
style: {
display: "flex",
flexDirection: "row",
justifyContent: "space-between",
alignItems: "center",
backgroundColor: colors.secondaryBg,
borderRadius: "5px",
margin: "10px",
padding: "5px",
},
},
[mainContent, reorderView],
);
}