Pubkey filter for event log.

This commit is contained in:
Ryan Breen
2023-02-14 22:35:28 -05:00
parent 14a20dd13d
commit bed3c121e7
2 changed files with 49 additions and 2 deletions

View File

@@ -8,6 +8,12 @@
<script defer src="event_log.build.js"></script> <script defer src="event_log.build.js"></script>
<link rel="stylesheet" href="options.build.css"> <link rel="stylesheet" href="options.build.css">
<title>Event Log</title> <title>Event Log</title>
<style>
label {
display: block;
}
</style>
</head> </head>
<body class="text-fuchsia-900 p-3.5 lg:p-32" x-data="eventLog"> <body class="text-fuchsia-900 p-3.5 lg:p-32" x-data="eventLog">
@@ -20,7 +26,7 @@
<div class="section"> <div class="section">
<div class="section-header">Filters</div> <div class="section-header">Filters</div>
<div class="grid grid-cols-2 lg:grid-cols-4 gap-4"> <div class="grid grid-cols-2 xl:grid-cols-4 gap-4">
<div> <div>
<label for="view">View</label> <label for="view">View</label>
<select id="view" class="input" x-model="view" @change="reload"> <select id="view" class="input" x-model="view" @change="reload">
@@ -81,6 +87,21 @@
</template> </template>
</select> </select>
</div> </div>
<div x-show="view === 'pubkey'">
<label for="profiles">Profiles</label>
<select id="profiles" class="input" x-model="profile" @change="pkFromProfile">
<option value=""></option>
<template x-for="p in profileNames">
<option :value="p" x-text="p"></option>
</template>
</select>
</div>
<div x-show="view === 'pubkey'">
<label for="pubkey">Pubkey</label>
<input type="text" class="input" x-model="pubkey" @input.debounce="reload">
</div>
</div> </div>
</div> </div>

View File

@@ -1,6 +1,7 @@
import Alpine from 'alpinejs'; import Alpine from 'alpinejs';
import { getPublicKey } from 'nostr-tools';
import { getHosts, sortByIndex } from './db'; import { getHosts, sortByIndex } from './db';
import { KINDS } from './utils'; import { getProfiles, KINDS } from './utils';
Alpine.data('eventLog', () => ({ Alpine.data('eventLog', () => ({
kinds: KINDS, kinds: KINDS,
@@ -10,6 +11,9 @@ Alpine.data('eventLog', () => ({
sort: 'asc', sort: 'asc',
allHosts: [], allHosts: [],
host: '', host: '',
allProfiles: [],
profile: '',
pubkey: '',
// date view // date view
fromCreatedAt: '2008-10-31', fromCreatedAt: '2008-10-31',
@@ -33,6 +37,12 @@ Alpine.data('eventLog', () => ({
); );
this.events = events; this.events = events;
getHosts().then(hosts => (this.allHosts = hosts)); getHosts().then(hosts => (this.allHosts = hosts));
const profiles = await getProfiles();
console.log(profiles);
this.allProfiles = profiles.map(profile => ({
name: profile.name,
pubkey: getPublicKey(profile.privKey),
}));
}, },
quickKindSelect() { quickKindSelect() {
@@ -43,6 +53,13 @@ Alpine.data('eventLog', () => ({
this.reload(); this.reload();
}, },
pkFromProfile() {
this.pubkey = this.allProfiles.find(
({ name }) => name === this.profile
).pubkey;
this.reload();
},
// Properties // Properties
get fromTime() { get fromTime() {
@@ -55,6 +72,10 @@ Alpine.data('eventLog', () => ({
return Math.floor(dt.getTime() / 1000); return Math.floor(dt.getTime() / 1000);
}, },
get profileNames() {
return this.allProfiles.map(p => p.name);
},
get keyRange() { get keyRange() {
switch (this.view) { switch (this.view) {
case 'created_at': case 'created_at':
@@ -66,6 +87,11 @@ Alpine.data('eventLog', () => ({
case 'host': case 'host':
if (this.host.length === 0) return null; if (this.host.length === 0) return null;
return IDBKeyRange.only(this.host); return IDBKeyRange.only(this.host);
case 'pubkey':
if (this.pubkey.length === 0) return null;
return IDBKeyRange.only(this.pubkey);
default: default:
return null; return null;
} }