diff --git a/app/components/activity-timeline.gjs b/app/components/activity-timeline.gjs new file mode 100644 index 0000000..2cc6985 --- /dev/null +++ b/app/components/activity-timeline.gjs @@ -0,0 +1,85 @@ +import Component from '@glimmer/component'; +import { action } from '@ember/object'; +import { tracked } from '@glimmer/tracking'; +import { on } from '@ember/modifier'; +import Icon from './icon'; +import ActivityZapItem from './activity-zap-item'; +import Modal from './modal'; +import NostrConnect from './nostr-connect'; +import not from 'ember-truth-helpers/helpers/not'; +import eq from 'ember-truth-helpers/helpers/eq'; +import restoreScroll from '../modifiers/restore-scroll'; + +export default class ActivityTimelineComponent extends Component { + @tracked isNostrConnectModalOpen = false; + + @action + openNostrConnectModal(event) { + event.preventDefault(); + this.isNostrConnectModalOpen = true; + } + + @action + closeNostrConnectModal() { + this.isNostrConnectModalOpen = false; + } + + @action + onNostrConnected() { + this.closeNostrConnectModal(); + this.args.onNostrConnected?.(); + } + + +} diff --git a/app/components/activity-zap-item.gjs b/app/components/activity-zap-item.gjs new file mode 100644 index 0000000..fc66987 --- /dev/null +++ b/app/components/activity-zap-item.gjs @@ -0,0 +1,96 @@ +import Component from '@glimmer/component'; +import { on } from '@ember/modifier'; +import { fn } from '@ember/helper'; +import formatRelativeDate from '../helpers/format-relative-date'; +import { npubEncode } from 'applesauce-core/helpers/pointers'; +import Icon from './icon'; + +export default class ActivityZapItem extends Component { + get item() { + return this.args.item; + } + + get senderName() { + return this.item?.senderName; + } + + get senderDisplayName() { + const name = this.senderName; + if (name) return name; + const pubkey = this.item?.senderPubkey; + if (!pubkey) return 'Someone'; + try { + return `${npubEncode(pubkey).slice(0, 12)}…`; + } catch { + return `${pubkey.slice(0, 12)}…`; + } + } + + get senderAvatar() { + return this.item?.senderAvatar; + } + + get hasPhoto() { + return !!this.item?.photo; + } + + get photoThumbUrl() { + return this.item?.photo?.thumbUrl || this.item?.photo?.url; + } + + get placeIdentifier() { + return this.item?.placeIdentifier; + } + + +} diff --git a/app/components/app-menu/home.gjs b/app/components/app-menu/home.gjs index 510d505..c0e6528 100644 --- a/app/components/app-menu/home.gjs +++ b/app/components/app-menu/home.gjs @@ -26,8 +26,14 @@ import iconRounded from '../../icons/icon-rounded.svg?raw';
  • - +
  • +
  • +
  • diff --git a/app/components/app-menu/index.gjs b/app/components/app-menu/index.gjs index bba5133..6e4d1de 100644 --- a/app/components/app-menu/index.gjs +++ b/app/components/app-menu/index.gjs @@ -28,6 +28,11 @@ export default class AppMenu extends Component { this.router.transitionTo('contributions'); } + @action + goToActivity() { + this.router.transitionTo('activity'); + } +