feat: add UI for storage

This commit is contained in:
Vlad Stan 2023-02-09 14:33:19 +02:00
parent 50fd1942cc
commit cb81726297
3 changed files with 169 additions and 67 deletions

View file

@ -22,6 +22,11 @@ class ClientConfig(BaseModel):
created_at_hours_future = Field(0, alias="createdAtHoursFuture") created_at_hours_future = Field(0, alias="createdAtHoursFuture")
created_at_minutes_future = Field(0, alias="createdAtMinutesFuture") created_at_minutes_future = Field(0, alias="createdAtMinutesFuture")
created_at_seconds_future = Field(0, alias="createdAtSecondsFuture") created_at_seconds_future = Field(0, alias="createdAtSecondsFuture")
free_storage_value = Field("1", alias="freeStorageValue")
free_storage_unit = Field("MB", alias="freeStorageUnit")
full_storage_action = Field("prune", alias="fullStorageAction")
allowed_public_keys = Field([], alias="allowedPublicKeys") allowed_public_keys = Field([], alias="allowedPublicKeys")
blocked_public_keys = Field([], alias="blockedPublicKeys") blocked_public_keys = Field([], alias="blockedPublicKeys")

View file

@ -62,7 +62,39 @@
<q-tab-panel name="payment"> <q-tab-panel name="payment">
<div v-if="relay"> <div v-if="relay">
<div class="row items-center no-wrap q-mb-md"> <div class="row items-center no-wrap q-mb-md">
<div class="col-3 q-pr-lg">Require Payment:</div> <div class="col-3 q-pr-lg">Free storage:</div>
<div class="col-2 q-pr-lg">
<q-input
filled
dense
v-model.trim="relay.config.freeStorageValue"
type="number"
hint="Value"
min="0"
></q-input>
</div>
<div class="col-2 q-pr-lg">
<q-select
filled
dense
v-model="relay.config.freeStorageUnit"
type="text"
hint="Unit"
:options="storageUnits"
></q-select>
</div>
<div class="col-5">
<q-badge
v-if="relay.config.freeStorageValue == 0"
color="orange"
class="float-left q-mb-md"
><span>No free storage</span>
</q-badge>
</div>
</div>
<q-separator></q-separator>
<div class="row items-center no-wrap q-mb-md">
<div class="col-3 q-pr-lg">Paid Plan:</div>
<div class="col-3 q-pr-lg"> <div class="col-3 q-pr-lg">
<q-toggle <q-toggle
color="secodary" color="secodary"
@ -71,6 +103,12 @@
></q-toggle> ></q-toggle>
</div> </div>
<div class="col-6"> <div class="col-6">
<q-badge
v-if="!relay.config.isPaidRelay && relay.config.freeStorageValue == 0"
color="orange"
class="float-left q-mb-md"
><span>No data will be stored, only broadcast</span>
</q-badge>
<q-select <q-select
v-if="relay.config.isPaidRelay" v-if="relay.config.isPaidRelay"
filled filled
@ -83,79 +121,101 @@
</q-select> </q-select>
</div> </div>
</div> </div>
<div
v-if="relay.config.isPaidRelay" <div v-if="relay.config.isPaidRelay && relay.config.wallet">
class="row items-center no-wrap q-mb-md" <div class="row items-center no-wrap q-mb-md">
> <div class="col-3 q-pr-lg">Cost to join (sats):</div>
<div class="col-3 q-pr-lg">Cost to join (sats):</div> <div class="col-3 q-pr-lg">
<div class="col-3 q-pr-lg"> <q-input
<q-input filled
filled dense
dense v-model.trim="relay.config.costToJoin"
v-model.trim="relay.config.costToJoin" type="number"
type="number" min="0"
min="0" ></q-input>
></q-input> </div>
<div class="col-6">
<q-badge
v-if="relay.config.costToJoin == 0"
color="green"
class="float-left"
><span>Free to join</span>
</q-badge>
</div>
</div> </div>
<div class="col-6"> <div class="row items-center no-wrap q-mb-md">
<q-badge <div class="col-3 q-pr-lg">Storage cost per Kilo-Byte (sats):</div>
v-if="relay.config.costToJoin == 0" <div class="col-3 q-pr-lg">
color="green" <q-input
class="float-left" filled
><span>Free to join</span> dense
</q-badge> v-model.trim="relay.config.storageCostPerKb"
</div> type="number"
</div> min="0"
<div ></q-input>
v-if="relay.config.isPaidRelay" </div>
class="row items-center no-wrap q-mb-md" <div class="col-6">
> <q-badge
<div class="col-3 q-pr-lg">Storage cost per Kilo-Byte (sats):</div> v-if="relay.config.storageCostPerKb == 0"
<div class="col-3 q-pr-lg"> color="green"
<q-input class="float-left"
filled ><span>Unlimited storage</span>
dense </q-badge>
v-model.trim="relay.config.storageCostPerKb" </div>
type="number"
min="0"
></q-input>
</div>
<div class="col-6">
<q-badge
v-if="relay.config.storageCostPerKb == 0"
color="green"
class="float-left"
><span>Unlimited storage</span>
</q-badge>
</div>
</div>
<div
v-if="relay.config.isPaidRelay && relay.config.storageCostPerKb != 0"
class="row items-center no-wrap q-mb-md"
>
<div class="col-3 q-pr-lg">Free storage (kb):</div>
<div class="col-3 q-pr-lg">
<q-input
filled
dense
v-model.trim="relay.config.freeStorage"
type="number"
min="0"
></q-input>
</div>
<div class="col-6">
<q-badge
v-if="relay.config.freeStorage == 0"
color="orange"
class="float-left"
><span>No free storage</span>
</q-badge>
</div> </div>
</div> </div>
</div> </div>
</q-tab-panel> </q-tab-panel>
<q-tab-panel name="config"> <q-tab-panel name="config">
<div v-if="relay"> <div v-if="relay">
<!-- <div class="row items-center no-wrap q-mb-md">
<div class="col-3 q-pr-lg">Free Storage:</div>
<div class="col-2 q-pr-lg">
<q-toggle
color="secodary"
v-model="relay.config.hasFreeStorage"
></q-toggle>
</div>
<div class="col-2 q-pr-lg">
<q-input
filled
dense
v-model.trim="relay.config.freeStorageAmount"
type="number"
min="0"
hint="Value"
></q-input>
</div>
<div class="col-2 q-pr-lg">
<q-select
filled
dense
v-model="relay.config.freeStorageXXX"
type="text"
hint="Unit"
:options="storageUnits"
></q-select>
</div>
<div class="col-2 q-pr-lg">
<q-select
filled
dense
v-model="relay.config.createdAtSecondsPast"
type="number"
hint="Seconds"
:options="fullStorageActions"
></q-select>
</div>
<div class="col-1 q-pb-md">
<q-icon name="info" class="cursor-pointer">
<q-tooltip>
NIP 22: Lower limit within which a relay will consider an
event's created_at to be acceptable.
</q-tooltip></q-icon
>
</div>
</div> -->
<div class="row items-center no-wrap q-mb-md"> <div class="row items-center no-wrap q-mb-md">
<div class="col-3 q-pr-lg">Created At in Past:</div> <div class="col-3 q-pr-lg">Created At in Past:</div>
<div class="col-2 q-pr-lg"> <div class="col-2 q-pr-lg">
@ -258,6 +318,34 @@
> >
</div> </div>
</div> </div>
<q-separator></q-separator>
<div class="row items-center no-wrap q-mb-md q-mt-md">
<div class="col-3 q-pr-lg">Full Storage Action:</div>
<div class="col-3 q-pr-lg">
<q-select
filled
dense
emit-value
v-model="relay.config.fullStorageAction"
type="text"
:options="fullStorageActions"
></q-select>
</div>
<div class="col-6">
<q-icon name="info" class="cursor-pointer">
<q-tooltip>
Action to be taken when the storage limit (if any) has been
reached.
</q-tooltip></q-icon
>
<q-badge
v-if="relay.config.limitPerFilter == 0"
color="green"
class="float-left"
><span>No Limit</span>
</q-badge>
</div>
</div>
<div class="row items-center no-wrap q-mb-md"> <div class="row items-center no-wrap q-mb-md">
<div class="col-3 q-pr-lg">Limit per filter:</div> <div class="col-3 q-pr-lg">Limit per filter:</div>
<div class="col-3 q-pr-lg"> <div class="col-3 q-pr-lg">

View file

@ -35,6 +35,15 @@ async function relayDetails(path) {
y.push(i) y.push(i)
} }
return y return y
},
storageUnits: function () {
return ['KB', 'MB']
},
fullStorageActions: function () {
return [
{value: 'block', label: 'Block New Events'},
{value: 'prune', label: 'Prune Old Events'}
]
} }
}, },