a tool for shared writing and social publishing

handle logged out and non-pub owner cases

+73 -5
+1
app/(home-pages)/home/LeafletList/LeafletInfo.tsx
··· 50 50 document_uri={props.document_uri} 51 51 shareLink={`/${props.token.id}`} 52 52 archived={props.archived} 53 + loggedIn={props.loggedIn} 53 54 /> 54 55 </div> 55 56 </div>
+71 -5
app/(home-pages)/home/LeafletList/LeafletOptions.tsx
··· 22 22 } from "app/lish/[did]/[publication]/dashboard/deletePost"; 23 23 import { ShareButton } from "components/ShareOptions"; 24 24 import { ShareSmall } from "components/Icons/ShareSmall"; 25 + import { HideSmall } from "components/Icons/HideSmall"; 26 + import { hideDoc } from "../storage"; 25 27 26 28 import { PermissionToken } from "src/replicache"; 27 29 import { ··· 40 42 document_uri?: string; 41 43 shareLink: string; 42 44 archived?: boolean | null; 45 + loggedIn?: boolean; 43 46 }) => { 44 47 let [state, setState] = useState<"normal" | "template" | "areYouSure">( 45 48 "normal", 46 49 ); 47 50 let [open, setOpen] = useState(false); 51 + let { identity } = useIdentityData(); 52 + let isPublicationOwner = 53 + !!identity?.atp_did && !!props.document_uri?.includes(identity.atp_did); 48 54 return ( 49 55 <> 50 56 <Menu ··· 67 73 } 68 74 > 69 75 {state === "normal" ? ( 70 - props.document_uri ? ( 76 + !props.loggedIn ? ( 77 + <LoggedOutOptions 78 + leaflet={props.leaflet} 79 + isTemplate={props.isTemplate} 80 + setState={setState} 81 + shareLink={props.shareLink} 82 + /> 83 + ) : props.document_uri && isPublicationOwner ? ( 71 84 <PublishedPostOptions 72 85 setState={setState} 73 86 document_uri={props.document_uri} ··· 160 173 if (item) item.archived = false; 161 174 }); 162 175 mutatePublicationData(mutatePub, (data) => { 163 - let item = data.publication?.leaflets_in_publications.find( 164 - (l) => l.permission_tokens?.id === props.leaflet.id, 165 - ); 176 + let item = 177 + data.publication?.leaflets_in_publications.find( 178 + (l) => l.permission_tokens?.id === props.leaflet.id, 179 + ); 166 180 if (item) item.archived = false; 167 181 }); 168 182 await unarchivePost(props.leaflet.id); ··· 220 234 ); 221 235 }; 222 236 237 + const LoggedOutOptions = (props: { 238 + leaflet: PermissionToken; 239 + isTemplate?: boolean; 240 + setState: (s: "template" | "areYouSure") => void; 241 + shareLink: string; 242 + }) => { 243 + let toaster = useToaster(); 244 + return ( 245 + <> 246 + <ShareButton 247 + text={ 248 + <div className="flex gap-2"> 249 + <ShareSmall /> 250 + Copy Edit Link 251 + </div> 252 + } 253 + subtext="" 254 + smokerText="Link copied!" 255 + id="get-link" 256 + link={`/${props.shareLink}`} 257 + /> 258 + <TemplateOptions 259 + leaflet={props.leaflet} 260 + setState={props.setState} 261 + isTemplate={props.isTemplate} 262 + /> 263 + <hr className="border-border-light" /> 264 + <MenuItem 265 + onSelect={() => { 266 + hideDoc(props.leaflet); 267 + toaster({ 268 + content: <div className="font-bold">Removed from Home!</div>, 269 + type: "success", 270 + }); 271 + }} 272 + > 273 + <HideSmall /> 274 + Remove from Home 275 + </MenuItem> 276 + <MenuItem 277 + onSelect={(e) => { 278 + e.preventDefault(); 279 + props.setState("areYouSure"); 280 + }} 281 + > 282 + <DeleteSmall /> 283 + Delete Forever 284 + </MenuItem> 285 + </> 286 + ); 287 + }; 288 + 223 289 const PublishedPostOptions = (props: { 224 290 setState: (s: "areYouSure") => void; 225 291 document_uri: string; ··· 238 304 } 239 305 smokerText="Link copied!" 240 306 id="get-link" 241 - link={`/${props.shareLink}}`} 307 + link={`${props.shareLink}`} 242 308 /> 243 309 244 310 <hr className="border-border-light" />
+1
app/lish/[did]/[publication]/dashboard/PublishedPostsLists.tsx
··· 97 97 leaflet={leaflet?.permission_tokens!} 98 98 document_uri={doc.documents.uri} 99 99 shareLink={postLink} 100 + loggedIn={true} 100 101 /> 101 102 </> 102 103 )}