From 8216cb8741b226157515edaa1beb7e3eb0a08c63 Mon Sep 17 00:00:00 2001 From: Martti Malmi Date: Tue, 9 Jan 2024 14:35:25 +0200 Subject: [PATCH 1/5] note creator style, rm hashtags --- .../Components/Event/Create/NoteCreator.css | 20 ---------- .../Components/Event/Create/NoteCreator.tsx | 22 +---------- .../Event/Create/TrendingHashTagsLine.tsx | 37 ------------------- 3 files changed, 1 insertion(+), 78 deletions(-) delete mode 100644 packages/app/src/Components/Event/Create/TrendingHashTagsLine.tsx diff --git a/packages/app/src/Components/Event/Create/NoteCreator.css b/packages/app/src/Components/Event/Create/NoteCreator.css index 31462c24..52368845 100644 --- a/packages/app/src/Components/Event/Create/NoteCreator.css +++ b/packages/app/src/Components/Event/Create/NoteCreator.css @@ -1,12 +1,3 @@ -.note-creator { - border: 1px solid transparent; - border-radius: 12px; - box-shadow: 0px 0px 6px 1px rgba(182, 108, 156, 0.3); - background: - linear-gradient(var(--gray-superdark), var(--gray-superdark)) padding-box, - linear-gradient(90deg, #ef9644, #fd7c49, #ff5e58, #ff3b70, #ff088e, #eb00b1, #c31ed5, #7b41f6) border-box; -} - .note-creator-modal .modal-body > div { display: flex; flex-direction: column; @@ -86,17 +77,6 @@ height: 32px; } -.light .note-creator textarea { - background-color: var(--gray-superdark); -} - -.light .note-creator { - box-shadow: 0px 0px 6px 1px rgba(182, 108, 156, 0.3); - background: - linear-gradient(var(--gray-superdark), var(--gray-superdark)) padding-box, - linear-gradient(90deg, #ef9644, #fd7c49, #ff5e58, #ff3b70, #ff088e, #eb00b1, #c31ed5, #7b41f6) border-box; -} - .note-creator-modal .rti--container { background-color: unset !important; box-shadow: unset !important; diff --git a/packages/app/src/Components/Event/Create/NoteCreator.tsx b/packages/app/src/Components/Event/Create/NoteCreator.tsx index 6be676f8..a33f974b 100644 --- a/packages/app/src/Components/Event/Create/NoteCreator.tsx +++ b/packages/app/src/Components/Event/Create/NoteCreator.tsx @@ -5,12 +5,10 @@ import { EventBuilder, EventKind, NostrLink, NostrPrefix, TaggedNostrEvent, tryP import classNames from "classnames"; import { ClipboardEventHandler, DragEvent, useEffect } from "react"; import { FormattedMessage, useIntl } from "react-intl"; -import { TagsInput } from "react-tag-input-component"; import AsyncButton from "@/Components/Button/AsyncButton"; import { AsyncIcon } from "@/Components/Button/AsyncIcon"; import CloseButton from "@/Components/Button/CloseButton"; -import { TrendingHashTagsLine } from "@/Components/Event/Create/TrendingHashTagsLine"; import { sendEventToRelays } from "@/Components/Event/Create/util"; import Note from "@/Components/Event/EventComponent"; import Icon from "@/Components/Icons/Icon"; @@ -22,7 +20,7 @@ import ProfileImage from "@/Components/User/ProfileImage"; import useEventPublisher from "@/Hooks/useEventPublisher"; import useLogin from "@/Hooks/useLogin"; import { useNoteCreator } from "@/State/NoteCreator"; -import { appendDedupe, openFile, trackEvent } from "@/Utils"; +import { openFile, trackEvent } from "@/Utils"; import useFileUpload from "@/Utils/Upload"; import { GetPowWorker } from "@/Utils/wasm"; import { ZapTarget } from "@/Utils/Zapper"; @@ -636,7 +634,6 @@ export function NoteCreator() { onDragLeave={handleDragLeave} onDrop={handleDrop} autoFocus - className={classNames("textarea", { "textarea--focused": note.active })} onChange={c => onChange(c)} value={note.note} onFocus={() => note.update(v => (v.active = true))} @@ -648,23 +645,6 @@ export function NoteCreator() { /> {renderPollOptions()} -
- note.update(s => (s.hashTags = e))} - placeHolder={formatMessage({ - defaultMessage: "Add up to 4 hashtags", - id: "AIgmDy", - })} - separators={["Enter", ","]} - /> - {note.hashTags.length > 4 && ( - - - - )} - note.update(s => (s.hashTags = appendDedupe(s.hashTags, [t])))} /> -
)} {uploader.progress.length > 0 && } diff --git a/packages/app/src/Components/Event/Create/TrendingHashTagsLine.tsx b/packages/app/src/Components/Event/Create/TrendingHashTagsLine.tsx deleted file mode 100644 index 93b0f1c3..00000000 --- a/packages/app/src/Components/Event/Create/TrendingHashTagsLine.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { FormattedMessage } from "react-intl"; - -import { ErrorOrOffline } from "@/Components/ErrorOrOffline"; -import NostrBandApi from "@/External/NostrBand"; -import useCachedFetch from "@/Hooks/useCachedFetch"; -import { useLocale } from "@/IntlProvider"; - -export function TrendingHashTagsLine(props: { onClick: (tag: string) => void }) { - const { lang } = useLocale(); - const api = new NostrBandApi(); - const trendingHashtagsUrl = api.trendingHashtagsUrl(lang); - const storageKey = `nostr-band-${trendingHashtagsUrl}`; - - const { data: hashtags, isLoading, error } = useCachedFetch(trendingHashtagsUrl, storageKey, data => data.hashtags); - - if (error && !hashtags) return ; - - if (isLoading || hashtags.length === 0) return null; - - return ( -
- - - -
- {hashtags.slice(0, 5).map(a => ( - props.onClick(a.hashtag)}> - #{a.hashtag} - - ))} -
-
- ); -} From 3eeeee4b064051c20926ed3b043fdca4c892a0a7 Mon Sep 17 00:00:00 2001 From: Martti Malmi Date: Tue, 9 Jan 2024 14:56:20 +0200 Subject: [PATCH 2/5] use queueMicrotask instead of setTimeout 0 --- packages/app/src/Db/FuzzySearch.ts | 4 ++-- .../system/src/SocialGraph/SocialGraph.ts | 20 +------------------ 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/packages/app/src/Db/FuzzySearch.ts b/packages/app/src/Db/FuzzySearch.ts index 7efe0a66..b8921223 100644 --- a/packages/app/src/Db/FuzzySearch.ts +++ b/packages/app/src/Db/FuzzySearch.ts @@ -20,7 +20,7 @@ export const addEventToFuzzySearch = ev => { if (ev.kind !== 0) { return; } - setTimeout(() => { + queueMicrotask(() => { const existing = profileTimestamps.get(ev.pubkey); if (existing) { if (existing > ev.created_at) { @@ -42,7 +42,7 @@ export const addEventToFuzzySearch = ev => { }; export const addCachedMetadataToFuzzySearch = (profile: CachedMetadata) => { - setTimeout(() => { + queueMicrotask(() => { const existing = profileTimestamps.get(profile.pubkey); if (existing) { if (existing > profile.created) { diff --git a/packages/system/src/SocialGraph/SocialGraph.ts b/packages/system/src/SocialGraph/SocialGraph.ts index 7db24e11..767ad2be 100644 --- a/packages/system/src/SocialGraph/SocialGraph.ts +++ b/packages/system/src/SocialGraph/SocialGraph.ts @@ -51,7 +51,7 @@ export default class SocialGraph { if (event.kind !== 3) { return; } - setTimeout(() => { + queueMicrotask(() => { try { const author = ID(event.pubkey); const timestamp = event.created_at; @@ -116,15 +116,6 @@ export default class SocialGraph { if (!this.usersByFollowDistance.has(distance)) { this.usersByFollowDistance.set(distance, new Set()); } - if (distance <= 2) { - /* - let unsub; - // get also profile events for profile search indexing - // eslint-disable-next-line prefer-const - unsub = PubSub.subscribe({ authors: [STR(user)], kinds: [0] }, () => unsub?.(), true); - // TODO subscribe once param? - */ - } this.usersByFollowDistance.get(distance)?.add(user); // remove from higher distances for (const d of this.usersByFollowDistance.keys()) { @@ -166,13 +157,6 @@ export default class SocialGraph { } this.followedByUser.get(follower)?.add(followedUser); - if (this.followedByUser.get(this.root)?.has(follower)) { - /* - setTimeout(() => { - PubSub.subscribe({ authors: [STR(followedUser)], kinds: [0, 3] }, undefined, true); - }, 0); - */ - } } removeFollower(unfollowedUser: UID, follower: UID) { @@ -236,7 +220,6 @@ export default class SocialGraph { if (includeSelf) { set.add(user); } - //return PubSub.subscribe({ kinds: [3], authors: [user] }, callback); return set; } @@ -246,7 +229,6 @@ export default class SocialGraph { for (const id of this.followersByUser.get(userId) || []) { set.add(STR(id)); } - //return PubSub.subscribe({ kinds: [3], '#p': [address] }, callback); // TODO this doesn't fire when a user is unfollowed return set; } } From 376096c5af33ccf01b6dd3d66dba727be89bf80d Mon Sep 17 00:00:00 2001 From: Martti Malmi Date: Tue, 9 Jan 2024 13:03:40 +0000 Subject: [PATCH 3/5] chore: Update translations --- packages/app/src/translations/fi_FI.json | 36 ++++++++++++------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/app/src/translations/fi_FI.json b/packages/app/src/translations/fi_FI.json index 3704ec7d..4be63627 100644 --- a/packages/app/src/translations/fi_FI.json +++ b/packages/app/src/translations/fi_FI.json @@ -24,7 +24,7 @@ "0Azlrb": "Hallitse", "0BUTMv": "Etsi...", "0HFX0T": "Käytä tarkkaa sijaintia", - "0MndVW": "Generic LNDHub wallet (BTCPayServer / Alby / LNBits)", + "0MndVW": "Tavallinen LNDHub-lompakko (BTCPayServer / Alby / LNBits)", "0jOEtS": "Virheellinen LNURL", "0mch2Y": "nimi sisältää sallimattomia merkkejä", "0siT4z": "Politiikka", @@ -151,8 +151,8 @@ "DrZqav": "Tietoja on oltava vähemmän kuin {limit} merkkiä", "DtYelJ": "Siirto", "Dx4ey3": "Vaihda kaikki", - "E5ZIPD": "{amount} sats", - "EHqHsu": "Invoice / Lightning Address", + "E5ZIPD": "{amount} satsia", + "EHqHsu": "Lasku / Lightning-osoite", "EJbFi7": "Etsi muistiinpanoja", "ELbg9p": "Datantoimittajat", "EQKRE4": "Näytä merkit profiilisivuilla", @@ -230,7 +230,7 @@ "LR1XjT": "Liian lyhyt tappi", "LXxsbk": "Nimetön", "LgbKvU": "Kommentoi", - "LhLvRx": "Name must be between 8 and 15 characters", + "LhLvRx": "Nimen tulee olla 8-15 merkkiä", "LmdPXO": "Nostr-osoitetta ei voida tarkistaa", "Lu5/Bj": "Avaa Zapstrissa", "Lw+I+J": "{n,plural,=0{{name} zappasi} other{{name} & {n} muuta zappasivat}}", @@ -267,7 +267,7 @@ "P7nJT9": "Tänään yhteensä (UTC): {amount} satsia", "PCSt5T": "Asetukset", "PJeJFc": "Yhteenveto", - "PXQ0z0": "Receiving to {wallet}", + "PXQ0z0": "Vastaanotto osoitteeseen {wallet}", "PamNxw": "Tuntematon tiedostotunniste: {name}", "Pe0ogR": "Teema", "PrsIg7": "Reaktiot näytetään jokaisella sivulla, jos poistettu käytöstä reaktioita ei näytetä", @@ -307,7 +307,7 @@ "U1aPPi": "Lopeta kuunteleminen", "UDYlxu": "Odottavat tilaukset", "UJTWqI": "Poista releistäni", - "ULXFfP": "Receive", + "ULXFfP": "Vastaanota", "UNjfWJ": "Tarkista kaikki releiltä saadut tapahtuman allekirjoitukset", "UT7Nkj": "Uusi keskustelu", "UUPFlt": "Käyttäjien täytyy hyväksyä sisältövaroitus nähdäkseen viestisi sisällön.", @@ -332,19 +332,19 @@ "X7xU8J": "nsec, npub, nip-05, hex, mnemonic", "XECMfW": "Lähetä käyttötietoja", "XICsE8": "Tiedostojen isäntäpalvelut", - "XPB8VV": "Alby wallet connection", + "XPB8VV": "Alby-lompakon yhteys", "XQiFEl": "Seuraa välittäjän tila", "XXm7jJ": "Suositut tunnisteet", "XgWvGA": "Reaktiot", "XhpBfA": "{site} on avoimen lähdekoodin projekti, jota intohimoiset ihmiset rakentavat vapaa-ajallaan, lahjoituksia arvostetaan suuresti", - "Xnimz0": "Sending from {wallet}", + "Xnimz0": "Lähettäminen osoitteesta {wallet}", "Xopqkl": "Oletus zap-määräsi on {number} satsia, esimerkit on laskettu tämän mukaan.", "XrSk2j": "Lunasta", - "Y7FG5M": "Image not available", + "Y7FG5M": "Kuva ei ole saatavilla", "YDURw6": "Palvelun URL", "YR2I9M": "Ei avaimia, ei {app}, Avaimia ei voi palauttaa, ellet tee niistä varmuuskopiota. Se vie vain minuutin.", "YXA3AH": "Ota reaktiot käyttöön", - "Yf3DwC": "Connect a wallet to send instant payments", + "Yf3DwC": "Yhdistä lompakko välittömien maksujen lähettämistä varten", "Z4BMCZ": "Anna pariliitoslause", "ZKORll": "Aktivoi nyt", "ZLmyG9": "Avustajat", @@ -355,8 +355,8 @@ "a7TDNm": "Viestit striimautuvat reaaliajassa yleiseen ja viestit-välilehteen", "aHje0o": "Nimi tai nimimerkki", "aMaLBK": "Tuetut laajennukset", - "aRex7h": "Paid {amount} sats, fee {fee} sats", - "aSGz4J": "Connect to your own LND node with Lightning Node Connect", + "aRex7h": "Maksettu {amount} satsia, maksu {fee} satsia", + "aSGz4J": "Yhdistä omaan LND-solmuun Lightning Node Connectin avulla", "aWpBzj": "Näytä lisää", "b12Goz": "Mnemonic-lause", "b5vAk0": "Käyttäjätunnuksesi toimii kuin lightning-osoite ja uudelleenohjaa valitsemaasi LNURLiin tai lightning-osoitteeseen", @@ -373,7 +373,7 @@ "c35bj2": "Jos sinulla on kysymyksiä NIP-05-tilauksestasi, lähetä yksityisviesti {link}", "c3g2hL": "Lähetä uudelleen", "cFbU1B": "Käytätkö Albya? Mene {link} saadaksesi NWC-asetuksesi!", - "cG/bKQ": "Native nostr wallet connection", + "cG/bKQ": "Natiivi nostr-lompakkoyhteys", "cHCwbF": "Valokuvaus", "cPIKU2": "Seuraa", "cQfLWb": "URL..", @@ -389,7 +389,7 @@ "dOQCL8": "Näyttönimi", "ddd3JX": "Suosittuja tunnisteita", "deEeEI": "Rekisteröi", - "djLctd": "Amount in sats", + "djLctd": "Määrä satseissa", "djNL6D": "Vain luku", "dmsiLv": "{site} kehittäjille on määritetty oletusarvoinen Zap Poolin jako {n} , voit poistaa sen käytöstä milloin tahansa osoitteessa {link}.", "e61Jf3": "Tulossa pian", @@ -434,7 +434,7 @@ "hniz8Z": "täällä", "hvFRBo": "Vuorovaikutus", "i/dBAR": "Zap-pooli", - "i5gBFz": "Your sent and received payments will show up here.", + "i5gBFz": "Lähetetyt ja vastaanotetut maksut näkyvät täällä.", "iCqGww": "Reaktioita ({n})", "iEoXYx": "DeepL käännökset", "iGT1eE": "Estä väärennettyjä tilejä jäljittelemästä sinua", @@ -443,7 +443,7 @@ "iXPL0Z": "Ei voi kirjautua yksityisavaimella epäturvallisella yhteydellä, käytä Nostr-avainhallintaohjelmalaajennusta", "iYc3Ld": "Maksut", "ieGrWo": "Seuraa", - "ipHVx5": "Generate Invoice", + "ipHVx5": "Luo lasku", "itPgxd": "Profiili", "izWS4J": "Lopeta seuraaminen", "j9xbzF": "Jo varmistettu", @@ -498,7 +498,7 @@ "pI+77w": "Ladattavat varmuuskopiot Snort-välittäjältä", "pRess9": "ZapPooli", "puLNUJ": "Kiinnitä", - "pukxg/": "Payments", + "pukxg/": "Maksut", "pzTOmv": "Seuraajat", "qD9EUF": "Sähköposti-silta Snort nostr-osoitteellesi", "qDwvZ4": "Tuntematon virhe", @@ -529,7 +529,7 @@ "tOdNiY": "Tumma", "th5lxp": "Lähetä viesti osajoukolle kirjoitusvälittäjiäsi", "thnRpU": "NIP-05-varmennuksen hankkiminen voi auttaa:", - "tj6kdX": "{sign} {amount} sats", + "tj6kdX": "{sign} {amount} satsia", "tjpYlr": "Välittäjämittarit", "ttxS0b": "Tukijamerkki", "u+LyXc": "Vuorovaikutukset", From 7073e8d9dd2a1f163c50aab8163a0062f01f4230 Mon Sep 17 00:00:00 2001 From: Martti Malmi Date: Tue, 9 Jan 2024 15:16:47 +0200 Subject: [PATCH 4/5] trackEvent in ErrorBoundary, disable trackEvent in dev --- packages/app/src/Components/ErrorBoundary.tsx | 3 ++ packages/app/src/Pages/Layout/index.tsx | 32 ++++++++++--------- packages/app/src/Utils/index.ts | 2 +- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/packages/app/src/Components/ErrorBoundary.tsx b/packages/app/src/Components/ErrorBoundary.tsx index 9793e7a1..00007b11 100644 --- a/packages/app/src/Components/ErrorBoundary.tsx +++ b/packages/app/src/Components/ErrorBoundary.tsx @@ -1,5 +1,7 @@ import React from "react"; +import {trackEvent} from "@/Utils"; + interface ErrorBoundaryState { hasError: boolean; errorMessage?: string; @@ -21,6 +23,7 @@ export default class ErrorBoundary extends React.Component -
-
- -
- {!shouldHideHeader &&
} - - - + +
+
+
+ +
+ {!shouldHideHeader &&
} + + + +
+
- +
- + + {isStalker && } + {!shouldHideFooter &&
}
- - {isStalker && } - {!shouldHideFooter &&
} -
+ ); } diff --git a/packages/app/src/Utils/index.ts b/packages/app/src/Utils/index.ts index fac3854d..584899e2 100644 --- a/packages/app/src/Utils/index.ts +++ b/packages/app/src/Utils/index.ts @@ -538,7 +538,7 @@ export function trackEvent( props?: Record, e?: { destination?: { url: string } }, ) { - if (CONFIG.features.analytics && (LoginStore.snapshot().appData.item.preferences.telemetry ?? true)) { + if (!import.meta.env.DEV && CONFIG.features.analytics && (LoginStore.snapshot().appData.item.preferences.telemetry ?? true)) { fetch("https://analytics.v0l.io/api/event", { method: "POST", headers: { From 1a4a76d7fa66b8008bad224751be7463ec947b13 Mon Sep 17 00:00:00 2001 From: Martti Malmi Date: Tue, 9 Jan 2024 13:25:01 +0000 Subject: [PATCH 5/5] chore: Update translations --- packages/app/src/Components/ErrorBoundary.tsx | 2 +- packages/app/src/Utils/index.ts | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/app/src/Components/ErrorBoundary.tsx b/packages/app/src/Components/ErrorBoundary.tsx index 00007b11..08b54e19 100644 --- a/packages/app/src/Components/ErrorBoundary.tsx +++ b/packages/app/src/Components/ErrorBoundary.tsx @@ -1,6 +1,6 @@ import React from "react"; -import {trackEvent} from "@/Utils"; +import { trackEvent } from "@/Utils"; interface ErrorBoundaryState { hasError: boolean; diff --git a/packages/app/src/Utils/index.ts b/packages/app/src/Utils/index.ts index 584899e2..78678d48 100644 --- a/packages/app/src/Utils/index.ts +++ b/packages/app/src/Utils/index.ts @@ -538,7 +538,11 @@ export function trackEvent( props?: Record, e?: { destination?: { url: string } }, ) { - if (!import.meta.env.DEV && CONFIG.features.analytics && (LoginStore.snapshot().appData.item.preferences.telemetry ?? true)) { + if ( + !import.meta.env.DEV && + CONFIG.features.analytics && + (LoginStore.snapshot().appData.item.preferences.telemetry ?? true) + ) { fetch("https://analytics.v0l.io/api/event", { method: "POST", headers: {