feat: expand live chat and work server tools
This commit is contained in:
65
src/app/main/mainChatPanel/linkNavigation.ts
Normal file
65
src/app/main/mainChatPanel/linkNavigation.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
const CHAT_EXTERNAL_LINK_OPENED_AT_KEY = 'ai-code-app.chat.external-link-opened-at';
|
||||
const CHAT_EXTERNAL_LINK_TTL_MS = 15_000;
|
||||
|
||||
type LinkNavigationEvent = {
|
||||
preventDefault?: () => void;
|
||||
stopPropagation?: () => void;
|
||||
};
|
||||
|
||||
function canUseSessionStorage() {
|
||||
return typeof window !== 'undefined' && typeof window.sessionStorage !== 'undefined';
|
||||
}
|
||||
|
||||
function persistExternalLinkOpenTimestamp(openedAt: number) {
|
||||
if (!canUseSessionStorage()) {
|
||||
return;
|
||||
}
|
||||
|
||||
window.sessionStorage.setItem(CHAT_EXTERNAL_LINK_OPENED_AT_KEY, String(openedAt));
|
||||
}
|
||||
|
||||
function clearExternalLinkOpenTimestamp() {
|
||||
if (!canUseSessionStorage()) {
|
||||
return;
|
||||
}
|
||||
|
||||
window.sessionStorage.removeItem(CHAT_EXTERNAL_LINK_OPENED_AT_KEY);
|
||||
}
|
||||
|
||||
export function shouldSkipForegroundResyncAfterExternalLink() {
|
||||
if (!canUseSessionStorage()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const rawOpenedAt = window.sessionStorage.getItem(CHAT_EXTERNAL_LINK_OPENED_AT_KEY);
|
||||
clearExternalLinkOpenTimestamp();
|
||||
|
||||
if (!rawOpenedAt) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const openedAt = Number(rawOpenedAt);
|
||||
return Number.isFinite(openedAt) && Date.now() - openedAt <= CHAT_EXTERNAL_LINK_TTL_MS;
|
||||
}
|
||||
|
||||
export function openChatExternalLink(url: string, event?: LinkNavigationEvent) {
|
||||
event?.preventDefault?.();
|
||||
event?.stopPropagation?.();
|
||||
|
||||
if (typeof window === 'undefined') {
|
||||
return;
|
||||
}
|
||||
|
||||
persistExternalLinkOpenTimestamp(Date.now());
|
||||
const openedWindow = window.open(url, '_blank', 'noopener,noreferrer');
|
||||
|
||||
if (openedWindow) {
|
||||
return;
|
||||
}
|
||||
|
||||
const anchor = document.createElement('a');
|
||||
anchor.href = url;
|
||||
anchor.target = '_blank';
|
||||
anchor.rel = 'noopener noreferrer';
|
||||
anchor.click();
|
||||
}
|
||||
Reference in New Issue
Block a user