import Component from '@glimmer/component'; import { on } from '@ember/modifier'; import { action } from '@ember/object'; import { tracked } from '@glimmer/tracking'; import { service } from '@ember/service'; import { fn } from '@ember/helper'; import Icon from '#components/icon'; import { normalizeRelayUrl } from '../../../utils/nostr'; const stripProtocol = (url) => (url ? url.replace(/^wss?:\/\//, '') : ''); export default class AppMenuSettingsNostr extends Component { @service settings; @service nostrData; @tracked newReadRelay = ''; @tracked newWriteRelay = ''; @action updateNewReadRelay(event) { this.newReadRelay = event.target.value; } @action updateNewWriteRelay(event) { this.newWriteRelay = event.target.value; } @action addReadRelay() { const url = normalizeRelayUrl(this.newReadRelay); if (!url) return; const current = this.settings.nostrReadRelays || this.nostrData.defaultReadRelays; const set = new Set([...current, url]); this.settings.update('nostrReadRelays', Array.from(set)); this.newReadRelay = ''; } @action removeReadRelay(url) { const current = this.settings.nostrReadRelays || this.nostrData.defaultReadRelays; const filtered = current.filter((r) => r !== url); this.settings.update('nostrReadRelays', filtered); } @action handleReadRelayKeydown(event) { if (event.key === 'Enter') { this.addReadRelay(); } } @action handleWriteRelayKeydown(event) { if (event.key === 'Enter') { this.addWriteRelay(); } } @action resetReadRelays() { this.settings.update('nostrReadRelays', null); } @action addWriteRelay() { const url = normalizeRelayUrl(this.newWriteRelay); if (!url) return; const current = this.settings.nostrWriteRelays || this.nostrData.defaultWriteRelays; const set = new Set([...current, url]); this.settings.update('nostrWriteRelays', Array.from(set)); this.newWriteRelay = ''; } @action removeWriteRelay(url) { const current = this.settings.nostrWriteRelays || this.nostrData.defaultWriteRelays; const filtered = current.filter((r) => r !== url); this.settings.update('nostrWriteRelays', filtered); } @action resetWriteRelays() { this.settings.update('nostrWriteRelays', null); } }