From e507a30616b578a444c0bfaa8bfa8808ebc765e3 Mon Sep 17 00:00:00 2001 From: celine Date: Wed, 25 Mar 2026 16:40:18 -0400 Subject: [PATCH] bug fixes --- app/[leaflet_id]/actions/PublishButton.tsx | 8 +- components/Domains/AddDomainForm.tsx | 1 + components/Domains/PublicationDomains.tsx | 278 ++++++++++++--------- components/Domains/domainAssignment.ts | 4 +- components/Popover/index.tsx | 4 +- 5 files changed, 163 insertions(+), 132 deletions(-) diff --git a/app/[leaflet_id]/actions/PublishButton.tsx b/app/[leaflet_id]/actions/PublishButton.tsx index c2497139..b9725750 100644 --- a/app/[leaflet_id]/actions/PublishButton.tsx +++ b/app/[leaflet_id]/actions/PublishButton.tsx @@ -185,7 +185,7 @@ const PublishToPublicationButton = (props: { entityID: string }) => { onOpenChange={(o) => setOpen(o)} side={isMobile ? "top" : "right"} align={isMobile ? "center" : "start"} - className="sm:max-w-sm w-[1000px]" + className="sm:max-w-sm w-[1000px] p-0!" trigger={ { } > {!identity || !identity.atp_did ? ( -
+
@@ -219,7 +219,7 @@ const PublishToPublicationButton = (props: { entityID: string }) => {
) : ( -
+
void; }) => { return ( -
+
Post Details
diff --git a/components/Domains/AddDomainForm.tsx b/components/Domains/AddDomainForm.tsx index 4a042070..1662b7c0 100644 --- a/components/Domains/AddDomainForm.tsx +++ b/components/Domains/AddDomainForm.tsx @@ -24,6 +24,7 @@ export function AddDomainForm(props: {
{ + e.preventDefault(); setLoading(true); let { error } = await addDomain(value); if (error) { diff --git a/components/Domains/PublicationDomains.tsx b/components/Domains/PublicationDomains.tsx index 8e61b00a..22a94eff 100644 --- a/components/Domains/PublicationDomains.tsx +++ b/components/Domains/PublicationDomains.tsx @@ -14,78 +14,29 @@ import { } from "app/lish/[did]/[publication]/dashboard/PublicationSWRProvider"; import { updatePublicationBasePath } from "app/lish/createPub/updatePublication"; import { assignDomainToPublication } from "actions/domains/assignDomainToPublication"; +import { removeDomainAssignment } from "actions/domains/removeDomainAssignment"; import { PubSettingsHeader } from "app/lish/[did]/[publication]/dashboard/settings/PublicationSettings"; import { AddDomainForm } from "./AddDomainForm"; import { DomainSettingsView } from "./DomainSettingsView"; import { PinTiny } from "components/Icons/PinTiny"; import { LoadingTiny } from "components/Icons/LoadingTiny"; import { AddTiny } from "components/Icons/AddTiny"; +import { UnlinkTiny } from "components/Icons/UnlinkTiny"; import { DotLoader } from "components/utils/DotLoader"; import { useToaster } from "components/Toast"; import type { CustomDomain } from "./DomainList"; -type State = - | "list" - | "add-domain" - | { type: "domain-settings"; domain: string }; - export function PublicationDomains(props: { backToMenu: () => void; publication_uri: string; }) { - let [state, setState] = useState("list"); - let [loading, setLoading] = useState(false); let { data, mutate: mutatePubData } = usePublicationData(); - let toaster = useToaster(); let { publication: pubData } = data || {}; let record = useNormalizedPublicationRecord(); let { identity, mutate: mutateIdentity } = useIdentityData(); + let toaster = useToaster(); let basePath = record?.url?.replace(/^https?:\/\//, "") || ""; - if (state === "add-domain") { - return ( -
- setState("list")}> - Add Domain - - { - await assignDomainToPublication({ - domain, - publication_uri: props.publication_uri, - }); - mutateIdentity(); - mutate("publication-data"); - setState({ type: "domain-settings", domain }); - }} - onBack={() => setState("list")} - /> -
- ); - } - - if (typeof state === "object" && state.type === "domain-settings") { - return ( -
- setState("list")}> - Domain Settings - - setState("list")} - onRemoveAssignment={() => { - mutate("publication-data"); - setState("list"); - }} - onDeleteDomain={() => { - mutate("publication-data"); - setState("list"); - }} - /> -
- ); - } - let pubDomains = pubData?.publication_domains || []; let pubDomainNames = new Set(pubDomains.map((d) => d.domain)); @@ -95,7 +46,7 @@ export function PublicationDomains(props: { Domains
-

This Publication's Domains

+

This Publication's Domains

DEFAULT
{pubDomains .filter((d) => d.domain === basePath) @@ -106,9 +57,9 @@ export function PublicationDomains(props: { publication_uri={props.publication_uri} basePath={basePath} mutatePubData={mutatePubData} - onSettings={() => - setState({ type: "domain-settings", domain: d.domain }) - } + mutateIdentity={mutateIdentity} + toaster={toaster} + onSettings={() => {}} /> ))} {pubDomains.filter((d) => d.domain !== basePath).length !== 0 && ( @@ -123,15 +74,16 @@ export function PublicationDomains(props: { publication_uri={props.publication_uri} basePath={basePath} mutatePubData={mutatePubData} - onSettings={() => - setState({ type: "domain-settings", domain: d.domain }) - } + mutateIdentity={mutateIdentity} + toaster={toaster} + onSettings={() => {}} /> ))} )} +
-

Available Domains

+

Available Domains

{(() => { let availableDomains = (identity?.custom_domains || []) .filter((d) => !pubDomainNames.has(d.domain)) @@ -147,13 +99,12 @@ export function PublicationDomains(props: { key={d.domain} domainData={d} publication_uri={props.publication_uri} + mutatePubData={mutatePubData} onAssigned={() => { mutateIdentity(); mutate("publication-data"); }} - onSettings={() => - setState({ type: "domain-settings", domain: d.domain }) - } + onSettings={() => {}} /> ))}
@@ -178,11 +129,14 @@ function PubDomainRow(props: { publication_uri: string; basePath: string; mutatePubData: ReturnType["mutate"]; + mutateIdentity: ReturnType["mutate"]; + toaster: ReturnType; onSettings: () => void; }) { let { pending } = useDomainStatus(props.domain); let [loading, setLoading] = useState(false); - let toaster = useToaster(); + let [unlinking, setUnlinking] = useState(false); + let toaster = props.toaster; return (
@@ -205,61 +159,117 @@ function PubDomainRow(props: {

- ) : props.basePath === props.domain ? null : ( - + )} + +
)} - + )}
@@ -269,6 +279,7 @@ function PubDomainRow(props: { function UnassignedDomainRow(props: { domainData: CustomDomain; publication_uri: string; + mutatePubData: ReturnType["mutate"]; onAssigned: () => void; onSettings: () => void; }) { @@ -300,6 +311,29 @@ function UnassignedDomainRow(props: { ]; } }); + props.mutatePubData( + (current) => { + if (!current) return current; + let pub = current.publication; + if (!pub) return current; + return { + ...current, + publication: { + ...pub, + publication_domains: [ + ...(pub.publication_domains || []), + { + publication: props.publication_uri, + domain: props.domainData.domain, + created_at: new Date().toISOString(), + identity: "", + }, + ], + }, + }; + }, + { revalidate: false }, + ); setConfirming(false); props.onAssigned(); await assignDomainToPublication({ @@ -319,13 +353,7 @@ function UnassignedDomainRow(props: { {props.domainData.domain} {pending ? ( - +
unverfied
) : confirming ? null : (