Merge remote-tracking branch 'origin/main'
continuous-integration/drone/push Build encountered an error Details

This commit is contained in:
Kieran 2024-01-09 16:40:51 +00:00
commit 8a5a089b4d
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
9 changed files with 47 additions and 133 deletions

View File

@ -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<ErrorBoundaryProps, E
componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {
console.error("Caught an error:", error, errorInfo);
trackEvent("error", { error: error.message, errorInfo: JSON.stringify(errorInfo) });
}
render() {

View File

@ -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;

View File

@ -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()}
</div>
<div className="flex flex-col g4">
<TagsInput
value={note.hashTags}
onChange={e => note.update(s => (s.hashTags = e))}
placeHolder={formatMessage({
defaultMessage: "Add up to 4 hashtags",
id: "AIgmDy",
})}
separators={["Enter", ","]}
/>
{note.hashTags.length > 4 && (
<small className="warning">
<FormattedMessage defaultMessage="Try to use less than 5 hashtags to stay on topic 🙏" id="d8gpCh" />
</small>
)}
<TrendingHashTagsLine onClick={t => note.update(s => (s.hashTags = appendDedupe(s.hashTags, [t])))} />
</div>
</>
)}
{uploader.progress.length > 0 && <FileUploadProgress progress={uploader.progress} />}

View File

@ -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 <ErrorOrOffline error={error} className="p" />;
if (isLoading || hashtags.length === 0) return null;
return (
<div className="flex flex-col g4">
<small>
<FormattedMessage defaultMessage="Popular Hashtags" id="ddd3JX" />
</small>
<div className="flex g4 flex-wrap">
{hashtags.slice(0, 5).map(a => (
<span
key={a.hashtag}
className="px-2 py-1 bg-dark rounded-full pointer nowrap"
onClick={() => props.onClick(a.hashtag)}>
#{a.hashtag}
</span>
))}
</div>
</div>
);
}

View File

@ -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) {

View File

@ -56,24 +56,26 @@ export default function Index() {
const isStalker = !!stalker;
return (
<div className="flex justify-center">
<div className="w-full max-w-screen-xl">
<div className="flex flex-row">
<NavSidebar />
<div className="flex flex-1 flex-col pb-footer-height md:pb-0 w-full md:w-1/3">
{!shouldHideHeader && <Header />}
<ErrorBoundary>
<Outlet />
</ErrorBoundary>
<ErrorBoundary>
<div className="flex justify-center">
<div className="w-full max-w-screen-xl">
<div className="flex flex-row">
<NavSidebar />
<div className="flex flex-1 flex-col pb-footer-height md:pb-0 w-full md:w-1/3">
{!shouldHideHeader && <Header />}
<ErrorBoundary>
<Outlet />
</ErrorBoundary>
</div>
<RightColumn />
</div>
<RightColumn />
<Toaster />
</div>
<Toaster />
<LoginUnlock />
{isStalker && <StalkerModal id={id} />}
{!shouldHideFooter && <Footer />}
</div>
<LoginUnlock />
{isStalker && <StalkerModal id={id} />}
{!shouldHideFooter && <Footer />}
</div>
</ErrorBoundary>
);
}

View File

@ -537,7 +537,11 @@ export function trackEvent(
props?: Record<string, string | boolean>,
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: {

View File

@ -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": "<big>{amount}</big> <small>sats</small>",
"EHqHsu": "Invoice / Lightning Address",
"E5ZIPD": "<big>{amount}</big> <small>satsia</small>",
"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 <b>{wallet}</b>",
"PXQ0z0": "Vastaanotto osoitteeseen <b>{wallet}</b>",
"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 <b>{wallet}</b>",
"Xnimz0": "Lähettäminen osoitteesta <b>{wallet}</b>",
"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",

View File

@ -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;
}
}