From 2efef99c95056cf615c8ed0769f57b5c53f7cfbe Mon Sep 17 00:00:00 2001 From: Martti Malmi Date: Sun, 1 Oct 2023 15:38:31 +0300 Subject: [PATCH] use FormattedMessage for Iris account strings --- .../src/Element/IrisAccount/AccountName.tsx | 7 ++-- .../src/Element/IrisAccount/ActiveAccount.tsx | 5 ++- .../src/Element/IrisAccount/IrisAccount.tsx | 33 ++++++++++++---- .../Element/IrisAccount/ReservedAccount.tsx | 10 +++-- packages/app/src/Element/messages.ts | 2 + packages/app/src/lang.json | 39 +++++++++++++++++++ packages/app/src/translations/en.json | 13 +++++++ packages/shared/src/feed-cache.ts | 2 +- 8 files changed, 94 insertions(+), 17 deletions(-) diff --git a/packages/app/src/Element/IrisAccount/AccountName.tsx b/packages/app/src/Element/IrisAccount/AccountName.tsx index 82c98f252..573e766d9 100644 --- a/packages/app/src/Element/IrisAccount/AccountName.tsx +++ b/packages/app/src/Element/IrisAccount/AccountName.tsx @@ -1,14 +1,15 @@ import { useNavigate } from "react-router-dom"; +import FormattedMessage from "Element/FormattedMessage"; export default function AccountName({ name = "", link = true }) { const navigate = useNavigate(); return ( <>
- Username: {name} + : {name}
- Short link:{" "} + :{" "} {link ? (
- Nostr address (nip05): {name}@iris.to + : {name}@iris.to
); diff --git a/packages/app/src/Element/IrisAccount/ActiveAccount.tsx b/packages/app/src/Element/IrisAccount/ActiveAccount.tsx index 6bdaea720..fb77be99a 100644 --- a/packages/app/src/Element/IrisAccount/ActiveAccount.tsx +++ b/packages/app/src/Element/IrisAccount/ActiveAccount.tsx @@ -5,6 +5,7 @@ import { System } from "../../index"; import { UserCache } from "../../Cache"; import useEventPublisher from "../../Hooks/useEventPublisher"; import { mapEventToProfile } from "@snort/system"; +import FormattedMessage from "Element/FormattedMessage"; export default function ActiveAccount({ name = "", setAsPrimary = () => {} }) { const { publicKey, readonly } = useLogin(s => ({ @@ -60,12 +61,12 @@ export default function ActiveAccount({ name = "", setAsPrimary = () => {} }) { return (
- You have an active iris.to account: + :

diff --git a/packages/app/src/Element/IrisAccount/IrisAccount.tsx b/packages/app/src/Element/IrisAccount/IrisAccount.tsx index a00ede90a..03d79ac58 100644 --- a/packages/app/src/Element/IrisAccount/IrisAccount.tsx +++ b/packages/app/src/Element/IrisAccount/IrisAccount.tsx @@ -6,6 +6,9 @@ import AccountName from "./AccountName"; import ActiveAccount from "./ActiveAccount"; import ReservedAccount from "./ReservedAccount"; import { ProfileLoader } from "../../index"; +import FormattedMessage from "Element/FormattedMessage"; +import { injectIntl } from "react-intl"; +import messages from "Element/messages"; declare global { interface Window { @@ -13,8 +16,12 @@ declare global { } } +type Props = { + intl: any; +}; + // TODO split into smaller components -export default class IrisAccount extends Component { +class IrisAccount extends Component { state = { irisToActive: false, existing: null as any, @@ -63,7 +70,9 @@ export default class IrisAccount extends Component { } else { view = (
-

Register an Iris username (iris.to/username)

+

+ (iris.to/username) +

this.showChallenge(e)}>
this.onNewUserNameChange(e)} /> - +
{this.state.newUserNameValid ? ( <> - Username is available + + + ) : ( @@ -92,7 +105,9 @@ export default class IrisAccount extends Component { return ( <> -

Iris.to account

+

+ +

{view}

FAQ @@ -111,11 +126,12 @@ export default class IrisAccount extends Component { }); return; } + if (newUserName.length < 8 || newUserName.length > 15) { this.setState({ newUserName, newUserNameValid: false, - invalidUsernameMessage: "Username must be between 8 and 15 characters", + invalidUsernameMessage: this.props.intl.formatMessage(messages.IrisUserNameLengthError), }); return; } @@ -123,7 +139,7 @@ export default class IrisAccount extends Component { this.setState({ newUserName, newUserNameValid: false, - invalidUsernameMessage: "Username must only contain lowercase letters and numbers", + invalidUsernameMessage: this.props.intl.formatMessage(messages.IrisUserNameFormatError), }); return; } @@ -244,7 +260,6 @@ export default class IrisAccount extends Component { const login = LoginStore.snapshot(); const publisher = LoginStore.getPublisher(login.id); const event = await publisher?.note(`decline iris.to/${this.state.newUserName}`); - // post signed event as request body to https://api.iris.to/user/confirm_user const res = await fetch("https://api.iris.to/user/decline_user", { method: "POST", headers: { @@ -288,3 +303,5 @@ export default class IrisAccount extends Component { } } } + +export default injectIntl(IrisAccount); diff --git a/packages/app/src/Element/IrisAccount/ReservedAccount.tsx b/packages/app/src/Element/IrisAccount/ReservedAccount.tsx index 25b459cf2..e93774389 100644 --- a/packages/app/src/Element/IrisAccount/ReservedAccount.tsx +++ b/packages/app/src/Element/IrisAccount/ReservedAccount.tsx @@ -1,20 +1,24 @@ import AccountName from "./AccountName"; +import FormattedMessage from "Element/FormattedMessage"; export default function ReservedAccount({ name = "", enableReserved = () => {}, declineReserved = () => {} }) { return (

- Username iris.to/{name} is reserved for you! + {s} }} + />

diff --git a/packages/app/src/Element/messages.ts b/packages/app/src/Element/messages.ts index 904ac0497..9d2f31f40 100644 --- a/packages/app/src/Element/messages.ts +++ b/packages/app/src/Element/messages.ts @@ -98,4 +98,6 @@ export default defineMessages({ ConfirmUnpin: { defaultMessage: "Are you sure you want to unpin this note?" }, ReactionsLink: { defaultMessage: "{n} Reactions" }, ReBroadcast: { defaultMessage: "Broadcast Again" }, + IrisUserNameLengthError: { defaultMessage: "Name must be between 1 and 32 characters" }, + IrisUserNameFormatError: { defaultMessage: "Username must only contain lowercase letters and numbers" }, }); diff --git a/packages/app/src/lang.json b/packages/app/src/lang.json index 690be4c2d..8859ed06f 100644 --- a/packages/app/src/lang.json +++ b/packages/app/src/lang.json @@ -157,6 +157,9 @@ "4L2vUY": { "defaultMessage": "Your new NIP-05 handle is:" }, + "4MBtMa": { + "defaultMessage": "Name must be between 1 and 32 characters" + }, "4OB335": { "defaultMessage": "Dislike" }, @@ -329,6 +332,9 @@ "BcGMo+": { "defaultMessage": "Notes hold text content, the most popular usage of these notes is to store \"tweet like\" messages." }, + "BjNwZW": { + "defaultMessage": "Nostr address (nip05)" + }, "C1LjMx": { "defaultMessage": "Lightning Donation" }, @@ -401,6 +407,9 @@ "EcZF24": { "defaultMessage": "Custom Relays" }, + "EcfIwB": { + "defaultMessage": "Username is available" + }, "EcglP9": { "defaultMessage": "Key" }, @@ -617,6 +626,9 @@ "MWTx65": { "defaultMessage": "Default Page" }, + "MiMipu": { + "defaultMessage": "Set as primary Nostr address (nip05)" + }, "Mrpkot": { "defaultMessage": "Pay for subscription" }, @@ -626,6 +638,9 @@ "MzRYWH": { "defaultMessage": "Buying {item}" }, + "Mzizei": { + "defaultMessage": "Iris.to account" + }, "N2IrpM": { "defaultMessage": "Confirm" }, @@ -720,6 +735,9 @@ "RDZVQL": { "defaultMessage": "Check" }, + "RSr2uB": { + "defaultMessage": "Username must only contain lowercase letters and numbers" + }, "RahCRH": { "defaultMessage": "Expired" }, @@ -792,6 +810,9 @@ "Up5U7K": { "defaultMessage": "Block" }, + "UrKTqQ": { + "defaultMessage": "You have an active iris.to account" + }, "VBadwB": { "defaultMessage": "Hmm, can't find a key manager extension.. try reloading the page." }, @@ -804,6 +825,9 @@ "VR5eHw": { "defaultMessage": "Public key (npub/nprofile)" }, + "VcwrfF": { + "defaultMessage": "Yes please" + }, "VlJkSk": { "defaultMessage": "{n} muted" }, @@ -880,6 +904,9 @@ "ZS+jRE": { "defaultMessage": "Send zap splits to" }, + "Zff6lu": { + "defaultMessage": "Username iris.to/{name} is reserved for you!" + }, "Zr5TMx": { "defaultMessage": "Setup profile" }, @@ -916,6 +943,9 @@ "bxv59V": { "defaultMessage": "Just now" }, + "c+JYNI": { + "defaultMessage": "No thanks" + }, "c+oiJe": { "defaultMessage": "Install Extension", "description": "Heading for install key manager extension" @@ -964,6 +994,9 @@ "dOQCL8": { "defaultMessage": "Display name" }, + "deEeEI": { + "defaultMessage": "Register" + }, "e61Jf3": { "defaultMessage": "Coming soon" }, @@ -1112,6 +1145,9 @@ "k7sKNy": { "defaultMessage": "Our very own NIP-05 verification service, help support the development of this site and get a shiny special badge on our site!" }, + "kEZUR8": { + "defaultMessage": "Register an Iris username" + }, "kJYo0u": { "defaultMessage": "{n,plural,=0{{name} reposted} other{{name} & {n} others reposted}}" }, @@ -1295,6 +1331,9 @@ "rudscU": { "defaultMessage": "Failed to load follows, please try again later" }, + "rx1i0i": { + "defaultMessage": "Short link" + }, "sKDn4e": { "defaultMessage": "Show Badges" }, diff --git a/packages/app/src/translations/en.json b/packages/app/src/translations/en.json index bf0658ddc..9d77d3fd5 100644 --- a/packages/app/src/translations/en.json +++ b/packages/app/src/translations/en.json @@ -51,6 +51,7 @@ "47FYwb": "Cancel", "4IPzdn": "Primary Developers", "4L2vUY": "Your new NIP-05 handle is:", + "4MBtMa": "Name must be between 1 and 32 characters", "4OB335": "Dislike", "4Vmpt4": "Nostr Plebs is one of the first NIP-05 providers in the space and offers a good collection of domains at reasonable prices", "4Z3t5i": "Use imgproxy to compress images", @@ -107,6 +108,7 @@ "BOr9z/": "Snort is an open source project built by passionate people in their free time", "BWpuKl": "Update", "BcGMo+": "Notes hold text content, the most popular usage of these notes is to store \"tweet like\" messages.", + "BjNwZW": "Nostr address (nip05)", "C1LjMx": "Lightning Donation", "C5xzTC": "Premium", "C81/uG": "Logout", @@ -131,6 +133,7 @@ "EWyQH5": "Global", "Ebl/B2": "Translate to {lang}", "EcZF24": "Custom Relays", + "EcfIwB": "Username is available", "EcglP9": "Key", "EjFyoR": "On-chain Donation Address", "EnCOBJ": "Buy", @@ -202,9 +205,11 @@ "MP54GY": "Wallet password", "MRp6Ly": "Twitter username", "MWTx65": "Default Page", + "MiMipu": "Set as primary Nostr address (nip05)", "Mrpkot": "Pay for subscription", "MuVeKe": "Buy nostr address", "MzRYWH": "Buying {item}", + "Mzizei": "Iris.to account", "N2IrpM": "Confirm", "NAidKb": "Notifications", "NAuFNH": "You already have a subscription of this type, please renew or pay", @@ -236,6 +241,7 @@ "R/6nsx": "Subscription", "R81upa": "People you follow", "RDZVQL": "Check", + "RSr2uB": "Username must only contain lowercase letters and numbers", "RahCRH": "Expired", "RfhLwC": "By: {author}", "RhDAoS": "Are you sure you want to delete {id}", @@ -259,10 +265,12 @@ "UT7Nkj": "New Chat", "UUPFlt": "Users must accept the content warning to show the content of your note.", "Up5U7K": "Block", + "UrKTqQ": "You have an active iris.to account", "VBadwB": "Hmm, can't find a key manager extension.. try reloading the page.", "VN0+Fz": "Balance: {amount} sats", "VOjC1i": "Pick which upload service you want to upload attachments to", "VR5eHw": "Public key (npub/nprofile)", + "VcwrfF": "Yes please", "VlJkSk": "{n} muted", "VnXp8Z": "Avatar", "VvaJst": "View Wallets", @@ -288,6 +296,7 @@ "ZKORll": "Activate Now", "ZLmyG9": "Contributors", "ZS+jRE": "Send zap splits to", + "Zff6lu": "Username iris.to/{name} is reserved for you!", "Zr5TMx": "Setup profile", "a5UPxh": "Fund developers and platforms providing NIP-05 verification services", "a7TDNm": "Notes will stream in real time into global and notes tab", @@ -300,6 +309,7 @@ "bfvyfs": "Anon", "brAXSu": "Pick a username", "bxv59V": "Just now", + "c+JYNI": "No thanks", "c+oiJe": "Install Extension", "c2DTVd": "Enter a pin to encrypt your private key, you must enter this pin every time you open Snort.", "c35bj2": "If you have an enquiry about your NIP-05 order please DM {link}", @@ -315,6 +325,7 @@ "d6CyG5": "History", "d7d0/x": "LN Address", "dOQCL8": "Display name", + "deEeEI": "Register", "e61Jf3": "Coming soon", "e7VmYP": "Enter pin to unlock your private key", "e7qqly": "Mark All Read", @@ -364,6 +375,7 @@ "jzgQ2z": "{n} Reactions", "k2veDA": "Write", "k7sKNy": "Our very own NIP-05 verification service, help support the development of this site and get a shiny special badge on our site!", + "kEZUR8": "Register an Iris username", "kJYo0u": "{n,plural,=0{{name} reposted} other{{name} & {n} others reposted}}", "kaaf1E": "now", "kuPHYE": "{n,plural,=0{{name} liked} other{{name} & {n} others liked}}", @@ -424,6 +436,7 @@ "rmdsT4": "{n} days", "rrfdTe": "This is the same technology which is used by Bitcoin and has been proven to be extremely secure.", "rudscU": "Failed to load follows, please try again later", + "rx1i0i": "Short link", "sKDn4e": "Show Badges", "sUNhQE": "user", "sWnYKw": "Snort is designed to have a similar experience to Twitter.", diff --git a/packages/shared/src/feed-cache.ts b/packages/shared/src/feed-cache.ts index 022bd4a0d..ec32b4d88 100644 --- a/packages/shared/src/feed-cache.ts +++ b/packages/shared/src/feed-cache.ts @@ -12,7 +12,7 @@ export interface KeyedHookFilter { /** * Dexie backed generic hookable store */ -export abstract class FeedCache { +export abstract class FeedCache { #name: string; #hooks: Array = []; #snapshot: Array = [];