forked from coracle/flotilla
56 lines
1.9 KiB
Svelte
56 lines
1.9 KiB
Svelte
<script lang="ts">
|
|
import {nthNe} from "@welshman/lib"
|
|
import type {Profile} from "@welshman/util"
|
|
import {
|
|
getTag,
|
|
makeEvent,
|
|
makeProfile,
|
|
editProfile,
|
|
createProfile,
|
|
isPublishedProfile,
|
|
uniqTags,
|
|
} from "@welshman/util"
|
|
import {Router} from "@welshman/router"
|
|
import {pubkey, profilesByPubkey, publishThunk} from "@welshman/app"
|
|
import Button from "@lib/components/Button.svelte"
|
|
import ProfileEditForm from "@app/components/ProfileEditForm.svelte"
|
|
import {clearModals} from "@app/util/modal"
|
|
import {pushToast} from "@app/util/toast"
|
|
import {PROTECTED, getMembershipUrls, userMembership} from "@app/core/state"
|
|
|
|
const profile = $profilesByPubkey.get($pubkey!) || makeProfile()
|
|
const shouldBroadcast = !getTag(PROTECTED, profile.event?.tags || [])
|
|
const initialValues = {profile, shouldBroadcast}
|
|
|
|
const back = () => history.back()
|
|
|
|
const onsubmit = ({profile, shouldBroadcast}: {profile: Profile; shouldBroadcast: boolean}) => {
|
|
const router = Router.get()
|
|
const template = isPublishedProfile(profile) ? editProfile(profile) : createProfile(profile)
|
|
const scenarios = [router.FromRelays(getMembershipUrls($userMembership))]
|
|
|
|
if (shouldBroadcast) {
|
|
scenarios.push(router.FromUser(), router.Index())
|
|
template.tags = template.tags.filter(nthNe(0, "-"))
|
|
} else {
|
|
template.tags = uniqTags([...template.tags, PROTECTED])
|
|
}
|
|
|
|
const event = makeEvent(template.kind, template)
|
|
const relays = router.merge(scenarios).getUrls()
|
|
|
|
publishThunk({event, relays})
|
|
pushToast({message: "Your profile has been updated!"})
|
|
clearModals()
|
|
}
|
|
</script>
|
|
|
|
<ProfileEditForm {initialValues} {onsubmit}>
|
|
{#snippet footer()}
|
|
<div class="mt-4 flex flex-row items-center justify-between gap-4">
|
|
<Button class="btn btn-neutral" onclick={back}>Discard Changes</Button>
|
|
<Button type="submit" class="btn btn-primary">Save Changes</Button>
|
|
</div>
|
|
{/snippet}
|
|
</ProfileEditForm>
|