feat(webui): complete postbox quick access
This commit is contained in:
@@ -45,6 +45,7 @@ import { FormGrid,
|
||||
type ApiSettings,
|
||||
type AuthInfo
|
||||
} from "@govoplan/core-webui";
|
||||
import { useLocation, useNavigate } from "react-router";
|
||||
import {
|
||||
createPostboxGrouping,
|
||||
createPostboxMessage,
|
||||
@@ -110,13 +111,16 @@ export default function PostboxPage({
|
||||
settings: ApiSettings;
|
||||
auth: AuthInfo;
|
||||
}) {
|
||||
const location = useLocation();
|
||||
const navigate = useNavigate();
|
||||
const requestedMessageId = useRef(
|
||||
new URLSearchParams(window.location.search).get("message") ?? ""
|
||||
new URLSearchParams(location.search).get("message") ?? ""
|
||||
);
|
||||
const requestedPostboxId = useRef(
|
||||
new URLSearchParams(window.location.search).get("postbox") ?? ""
|
||||
new URLSearchParams(location.search).get("postbox") ?? ""
|
||||
);
|
||||
const requestedMessageLoaded = useRef(false);
|
||||
const requestedComposeLoaded = useRef(false);
|
||||
const [postboxes, setPostboxes] = useState<PostboxDirectoryItem[]>([]);
|
||||
const [groupings, setGroupings] = useState<PostboxGrouping[]>([]);
|
||||
const [selectedScope, setSelectedScope] = useState("all");
|
||||
@@ -269,6 +273,44 @@ export default function PostboxPage({
|
||||
void loadDirectory();
|
||||
}, [loadDirectory]);
|
||||
|
||||
useEffect(() => {
|
||||
const parameters = new URLSearchParams(location.search);
|
||||
if (
|
||||
requestedComposeLoaded.current ||
|
||||
parameters.get("quickAction") !== "compose" ||
|
||||
loadingDirectory
|
||||
) {
|
||||
return;
|
||||
}
|
||||
requestedComposeLoaded.current = true;
|
||||
const requestedId = parameters.get("postbox");
|
||||
const postbox =
|
||||
postboxes.find((item) => item.id === requestedId) ?? postboxes[0] ?? null;
|
||||
if (canSend && postbox) {
|
||||
setSelectedPostboxId(postbox.id);
|
||||
openComposeFor(postbox);
|
||||
} else if (!canSend) {
|
||||
setError(POSTBOX_INTERFACE_I18N.noSendReason);
|
||||
} else {
|
||||
setError(POSTBOX_INTERFACE_I18N.noPostbox);
|
||||
}
|
||||
|
||||
parameters.delete("quickAction");
|
||||
const search = parameters.toString();
|
||||
navigate(
|
||||
{ pathname: location.pathname, search: search ? `?${search}` : "" },
|
||||
{ replace: true, state: location.state }
|
||||
);
|
||||
}, [
|
||||
canSend,
|
||||
loadingDirectory,
|
||||
location.pathname,
|
||||
location.search,
|
||||
location.state,
|
||||
navigate,
|
||||
postboxes
|
||||
]);
|
||||
|
||||
useEffect(() => {
|
||||
void loadMessages();
|
||||
}, [loadMessages]);
|
||||
@@ -469,6 +511,10 @@ export default function PostboxPage({
|
||||
function openCompose() {
|
||||
const postbox = selectedPostbox ?? postboxes[0] ?? null;
|
||||
if (!postbox) return;
|
||||
openComposeFor(postbox);
|
||||
}
|
||||
|
||||
function openComposeFor(postbox: PostboxDirectoryItem) {
|
||||
setReplyParent(null);
|
||||
const next = {
|
||||
...emptyMessageDraft(),
|
||||
|
||||
Reference in New Issue
Block a user