From 817b791e136f06b32a3e893b57d251b61f7f246e Mon Sep 17 00:00:00 2001 From: Kieran Date: Thu, 14 Dec 2023 12:36:24 +0000 Subject: [PATCH] refactor: cleanup closes https://github.com/v0l/snort/pull/575 --- packages/app/src/Const.ts | 8 +- packages/app/src/Element/messages.ts | 10 +- packages/app/src/Pages/settings/Profile.tsx | 195 +++++++++----------- packages/app/src/lang.json | 18 ++ packages/app/src/translations/en.json | 6 + 5 files changed, 117 insertions(+), 120 deletions(-) diff --git a/packages/app/src/Const.ts b/packages/app/src/Const.ts index 3cc75db0..07efd323 100644 --- a/packages/app/src/Const.ts +++ b/packages/app/src/Const.ts @@ -157,11 +157,11 @@ export const WavlakeRegex = export const CashuRegex = /(cashuA[A-Za-z0-9_-]{0,10000}={0,3})/i; /* -* Max username length - profile/settings -*/ + * Max username length - profile/settings + */ export const MaxUsernameLength = 100; /* -* Max about length - profile/settings -*/ + * Max about length - profile/settings + */ export const MaxAboutLength = 1000; diff --git a/packages/app/src/Element/messages.ts b/packages/app/src/Element/messages.ts index be732c2b..088354fc 100644 --- a/packages/app/src/Element/messages.ts +++ b/packages/app/src/Element/messages.ts @@ -101,9 +101,9 @@ export default defineMessages({ ReBroadcast: { defaultMessage: "Broadcast Again", id: "c3g2hL" }, IrisUserNameLengthError: { defaultMessage: "Name must be between 1 and 32 characters", id: "4MBtMa" }, IrisUserNameFormatError: { defaultMessage: "Username must only contain lowercase letters and numbers", id: "RSr2uB" }, - InvalidNip05Address: { defaultMessage: "Invalid Nostr Address(nip05)", id: 'X6TK3B' }, - ErrorValidatingNip05Address: { defaultMessage: "Cannot verify Nostr Address(nip05)", id: 'I32UtP'}, - UserNameLengthError: { defaultMessage: "Name must be less than 100 characters", id: 'X/GZY6' }, - AboutLengthError: { defaultMessage: "About must be less than 1000 characters", id: 'vCanok' }, - InvalidLud16:{ defaultMessage: "Invalid Lightning Address", id: 'GqQeu/' } + InvalidNip05Address: { defaultMessage: "Invalid Nostr Address", id: "P2o+ZZ" }, + ErrorValidatingNip05Address: { defaultMessage: "Cannot verify Nostr Address", id: "LmdPXO" }, + UserNameLengthError: { defaultMessage: "Name must be less than {limit} characters", id: "u9NoC1" }, + AboutLengthError: { defaultMessage: "About must be less than {limit} characters", id: "DrZqav" }, + InvalidLud16: { defaultMessage: "Invalid Lightning Address", id: "GqQeu/" }, }); diff --git a/packages/app/src/Pages/settings/Profile.tsx b/packages/app/src/Pages/settings/Profile.tsx index 4893d5ae..0078ebb4 100644 --- a/packages/app/src/Pages/settings/Profile.tsx +++ b/packages/app/src/Pages/settings/Profile.tsx @@ -14,10 +14,9 @@ import Icon from "@/Icons/Icon"; import Avatar from "@/Element/User/Avatar"; import { FormattedMessage, useIntl } from "react-intl"; import { ErrorOrOffline } from "@/Element/ErrorOrOffline"; -import { LNURL, LNURLError } from '@snort/shared'; +import { LNURL, fetchNip05Pubkey } from "@snort/shared"; import messages from "@/Element/messages"; import { MaxAboutLength, MaxUsernameLength } from "@/Const"; -import { fetchNip05Pubkey } from "../../Nip05/Verifier"; export interface ProfileSettingsProps { avatar?: boolean; @@ -41,15 +40,14 @@ export default function ProfileSettings(props: ProfileSettingsProps) { const [nip05, setNip05] = useState(); const [lud16, setLud16] = useState(); const [nip05AddressValid, setNip05AddressValid] = useState(); - const [invalidNip05AddressMessage, setInvalidNip05AddressMessage] = useState(); + const [invalidNip05AddressMessage, setInvalidNip05AddressMessage] = useState(); const [usernameValid, setUsernameValid] = useState(); - const [invalidUsernameMessage, setInvalidUsernameMessage] = useState(); + const [invalidUsernameMessage, setInvalidUsernameMessage] = useState(); const [aboutValid, setAboutValid] = useState(); - const [invalidAboutMessage, setInvalidAboutMessage] = useState(); + const [invalidAboutMessage, setInvalidAboutMessage] = useState(); const [lud16Valid, setLud16Valid] = useState(); - const [invalidLud16Message, setInvalidLud16Message] = useState(); + const [invalidLud16Message, setInvalidLud16Message] = useState(); - useEffect(() => { if (user) { setName(user.name); @@ -63,43 +61,38 @@ export default function ProfileSettings(props: ProfileSettingsProps) { }, [user]); useEffect(() => { - return debounce(500,async () => { - if(lud16){ - try { - await new LNURL(lud16).load(); - setLud16Valid(true); - setInvalidLud16Message("") - }catch(e){ - setLud16Valid(false); - if(e instanceof LNURLError) - setInvalidLud16Message((e as LNURLError).message); - else - setInvalidLud16Message(formatMessage(messages.InvalidLud16)); - } - }else{ - setInvalidLud16Message("") + return debounce(500, async () => { + if (lud16) { + try { + await new LNURL(lud16).load(); + setLud16Valid(true); + setInvalidLud16Message(""); + } catch (e) { + setLud16Valid(false); + setInvalidLud16Message(formatMessage(messages.InvalidLud16)); + } + } else { + setInvalidLud16Message(""); } - }) + }); }, [lud16]); - useEffect(()=>{ - return debounce(500,async () => { - const Nip05AddressElements = nip05?.split('@') ?? []; - if (nip05.length === 0) { - setNip05AddressValid(false) - setInvalidNip05AddressMessage("") - }else if(Nip05AddressElements.length < 2){ - setNip05AddressValid(false) - setInvalidNip05AddressMessage(formatMessage(messages.InvalidNip05Address)) - } - else if(Nip05AddressElements.length === 2){ + useEffect(() => { + return debounce(500, async () => { + const Nip05AddressElements = nip05?.split("@") ?? []; + if ((nip05?.length ?? 0) === 0) { + setNip05AddressValid(false); + setInvalidNip05AddressMessage(""); + } else if (Nip05AddressElements.length < 2) { + setNip05AddressValid(false); + setInvalidNip05AddressMessage(formatMessage(messages.InvalidNip05Address)); + } else if (Nip05AddressElements.length === 2) { nip05NostrAddressVerification(Nip05AddressElements.pop(), Nip05AddressElements.pop()); + } else { + setNip05AddressValid(false); } - else{ - setNip05AddressValid(false) - } - }) - },[nip05]) + }); + }, [nip05]); async function saveProfile() { // copy user object and delete internal fields @@ -165,51 +158,64 @@ export default function ProfileSettings(props: ProfileSettingsProps) { } } - async function onNip05Change(e: React.ChangeEvent){ + async function onNip05Change(e: React.ChangeEvent) { const Nip05Address = e.target.value.toLowerCase(); - setNip05(Nip05Address) + setNip05(Nip05Address); } - async function onLimitCheck(val:string, field:string){ - if(field === "username"){ + async function onLimitCheck(val: string, field: string) { + if (field === "username") { setName(val); - if(val?.length >= MaxUsernameLength){ - setUsernameValid(false) - setInvalidUsernameMessage(formatMessage(messages.UserNameLengthError)) - }else{ - setUsernameValid(true) - setInvalidUsernameMessage("") + if (val?.length >= MaxUsernameLength) { + setUsernameValid(false); + setInvalidUsernameMessage( + formatMessage(messages.UserNameLengthError, { + limit: MaxUsernameLength, + }), + ); + } else { + setUsernameValid(true); + setInvalidUsernameMessage(""); } - } - else if(field === "about"){ + } else if (field === "about") { setAbout(val); - if(val?.length >= MaxAboutLength){ - setAboutValid(false) - setInvalidAboutMessage(formatMessage(messages.AboutLengthError)) - }else{ - setAboutValid(true) - setInvalidAboutMessage("") + if (val?.length >= MaxAboutLength) { + setAboutValid(false); + setInvalidAboutMessage( + formatMessage(messages.AboutLengthError, { + limit: MaxAboutLength, + }), + ); + } else { + setAboutValid(true); + setInvalidAboutMessage(""); } } } - async function nip05NostrAddressVerification(nip05Domain: string | undefined, nip05Name: string| undefined) { - try{ - const result = await fetchNip05Pubkey(nip05Name!,nip05Domain!); - if(result){ - setNip05AddressValid(true); - }else{ + async function nip05NostrAddressVerification(nip05Domain: string | undefined, nip05Name: string | undefined) { + try { + const result = await fetchNip05Pubkey(nip05Name!, nip05Domain!); + if (result) { + if (result === id) { + setNip05AddressValid(true); + } else { + setInvalidNip05AddressMessage( + formatMessage({ defaultMessage: "Nostr address does not belong to you", id: "01iNut" }), + ); + } + } else { setNip05AddressValid(false); - setInvalidNip05AddressMessage(formatMessage(messages.InvalidNip05Address)) + setInvalidNip05AddressMessage(formatMessage(messages.InvalidNip05Address)); } - }catch(e){ - setNip05AddressValid(false) - setInvalidNip05AddressMessage(formatMessage(messages.InvalidNip05Address)) + } catch (e) { + setNip05AddressValid(false); + setInvalidNip05AddressMessage(formatMessage(messages.InvalidNip05Address)); } } - async function onLud16Change(address:string){ - setLud16(address) + async function onLud16Change(address: string) { + setLud16(address); } function editor() { @@ -223,17 +229,11 @@ export default function ProfileSettings(props: ProfileSettingsProps) { className="w-max" type="text" value={name} - onChange={e => onLimitCheck(e.target.value,"username")} + onChange={e => onLimitCheck(e.target.value, "username")} disabled={readonly} maxLength={MaxUsernameLength} /> -
- {usernameValid === false ? ( - {invalidUsernameMessage} - ) - : (<>) - } -
+
{usernameValid === false ? {invalidUsernameMessage} : <>}

@@ -241,16 +241,11 @@ export default function ProfileSettings(props: ProfileSettingsProps) {

-
- {aboutValid === false ? ( - {invalidAboutMessage} - ) - : (<>) - } -
+ disabled={readonly} + maxLength={MaxAboutLength}> +
{aboutValid === false ? {invalidAboutMessage} : <>}

@@ -269,24 +264,8 @@ export default function ProfileSettings(props: ProfileSettingsProps) {

- onNip05Change(e)} - disabled={readonly} - /> -
- {nip05AddressValid ? ( - <> - - - - - ) : ( - {invalidNip05AddressMessage} - )} -
+ onNip05Change(e)} disabled={readonly} /> +
{!nip05AddressValid && {invalidNip05AddressMessage}}
onLud16Change(e.target.value.toLowerCase())} disabled={readonly} /> -
- {lud16Valid === false ? ( - {invalidLud16Message} - ) - : (<>) - } -
+
{lud16Valid === false ? {invalidLud16Message} : <>}
saveProfile()} disabled={readonly}> diff --git a/packages/app/src/lang.json b/packages/app/src/lang.json index 762d092b..e46403a6 100644 --- a/packages/app/src/lang.json +++ b/packages/app/src/lang.json @@ -57,6 +57,9 @@ "00LcfG": { "defaultMessage": "Load more" }, + "01iNut": { + "defaultMessage": "Nostr address does not belong to you" + }, "08zn6O": { "defaultMessage": "Export Keys" }, @@ -419,6 +422,9 @@ "Dn82AL": { "defaultMessage": "Live" }, + "DrZqav": { + "defaultMessage": "About must be less than {limit} characters" + }, "DtYelJ": { "defaultMessage": "Transfer" }, @@ -506,6 +512,9 @@ "Gcn9NQ": { "defaultMessage": "Magnet Link" }, + "GqQeu/": { + "defaultMessage": "Invalid Lightning Address" + }, "GspYR7": { "defaultMessage": "{n} Dislike" }, @@ -640,6 +649,9 @@ "LgbKvU": { "defaultMessage": "Comment" }, + "LmdPXO": { + "defaultMessage": "Cannot verify Nostr Address" + }, "Lu5/Bj": { "defaultMessage": "Open on Zapstr" }, @@ -722,6 +734,9 @@ "ORGv1Q": { "defaultMessage": "Created" }, + "P2o+ZZ": { + "defaultMessage": "Invalid Nostr Address" + }, "P61BTu": { "defaultMessage": "Copy Event JSON" }, @@ -1453,6 +1468,9 @@ "u4bHcR": { "defaultMessage": "Check out the code here: {link}" }, + "u9NoC1": { + "defaultMessage": "Name must be less than {limit} characters" + }, "uCk8r+": { "defaultMessage": "Already have an account?" }, diff --git a/packages/app/src/translations/en.json b/packages/app/src/translations/en.json index 0469d0ca..82f959a8 100644 --- a/packages/app/src/translations/en.json +++ b/packages/app/src/translations/en.json @@ -18,6 +18,7 @@ "/d6vEc": "Make your profile easier to find and share", "/n5KSF": "{n} ms", "00LcfG": "Load more", + "01iNut": "Nostr address does not belong to you", "08zn6O": "Export Keys", "0Azlrb": "Manage", "0BUTMv": "Search...", @@ -138,6 +139,7 @@ "DZzCem": "Show latest {n} notes", "Dh3hbq": "Auto Zap", "Dn82AL": "Live", + "DrZqav": "About must be less than {limit} characters", "DtYelJ": "Transfer", "Dx4ey3": "Toggle all", "EJbFi7": "Search notes", @@ -167,6 +169,7 @@ "GSye7T": "Lightning Address", "GUlSVG": "Claim your included Snort nostr address", "Gcn9NQ": "Magnet Link", + "GqQeu/": "Invalid Lightning Address", "GspYR7": "{n} Dislike", "Gxcr08": "Broadcast Event", "H+vHiz": "Hex Key..", @@ -211,6 +214,7 @@ "LR1XjT": "Pin too short", "LXxsbk": "Anonymous", "LgbKvU": "Comment", + "LmdPXO": "Cannot verify Nostr Address", "Lu5/Bj": "Open on Zapstr", "Lw+I+J": "{n,plural,=0{{name} zapped} other{{name} & {n} others zapped}}", "LwYmVi": "Zaps on this note will be split to the following users.", @@ -238,6 +242,7 @@ "OQSOJF": "Get a free nostr address", "OQXnew": "You subscription is still active, you can't renew yet", "ORGv1Q": "Created", + "P2o+ZZ": "Invalid Nostr Address", "P61BTu": "Copy Event JSON", "P7FD0F": "System (Default)", "P7nJT9": "Total today (UTC): {amount} sats", @@ -479,6 +484,7 @@ "u+LyXc": "Interactions", "u/vOPu": "Paid", "u4bHcR": "Check out the code here: {link}", + "u9NoC1": "Name must be less than {limit} characters", "uCk8r+": "Already have an account?", "uKqSN+": "Follows Feed", "uSV4Ti": "Reposts need to be manually confirmed",