Skip to content

Commit fb0c383

Browse files
committed
feat: Add openInNewTab option to link editor
1 parent 026ed95 commit fb0c383

File tree

3 files changed

+28
-2
lines changed
  • features/admin.flow-builder-core.v1/components/resource-property-panel/rich-text/helper-plugins
  • modules/i18n/src

3 files changed

+28
-2
lines changed

features/admin.flow-builder-core.v1/components/resource-property-panel/rich-text/helper-plugins/link-plugin.tsx

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import { $isLinkNode, TOGGLE_LINK_COMMAND } from "@lexical/link";
2020
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
2121
import { mergeRegister } from "@lexical/utils";
2222
import Button from "@oxygen-ui/react/Button";
23+
import Checkbox from "@oxygen-ui/react/Checkbox";
24+
import FormControlLabel from "@oxygen-ui/react/FormControlLabel";
2325
import IconButton from "@oxygen-ui/react/IconButton";
2426
import MenuItem from "@oxygen-ui/react/MenuItem";
2527
import Select from "@oxygen-ui/react/Select";
@@ -162,6 +164,7 @@ const LinkEditor = (): ReactElement => {
162164
const [ isEditMode, setEditMode ] = useState(false);
163165
const [ lastSelection, setLastSelection ] = useState<BaseSelection | null>(null);
164166
const [ selectedUrlType, setSelectedUrlType ] = useState<string>("CUSTOM");
167+
const [ openInNewTab, setOpenInNewTab ] = useState<boolean>(true);
165168

166169
const { t } = useTranslation();
167170

@@ -178,14 +181,18 @@ const LinkEditor = (): ReactElement => {
178181

179182
if ($isLinkNode(parent)) {
180183
const url: string = parent.getURL();
184+
const target: string = parent.getTarget();
181185

182186
setLinkUrl(getPlaceholderUrl(url));
183187
setSelectedUrlType(determineUrlType(url));
188+
setOpenInNewTab(target === "_blank");
184189
} else if ($isLinkNode(node)) {
185190
const url: string = node.getURL();
191+
const target: string = node.getTarget();
186192

187193
setLinkUrl(getPlaceholderUrl(url));
188194
setSelectedUrlType(determineUrlType(url));
195+
setOpenInNewTab(target === "_blank");
189196
} else {
190197
setLinkUrl("");
191198
setSelectedUrlType("CUSTOM");
@@ -377,8 +384,14 @@ const LinkEditor = (): ReactElement => {
377384

378385
if ($isLinkNode(linkNode)) {
379386
// Update the link node with safe attributes.
380-
linkNode.setTarget("_blank");
381387
linkNode.setRel("noopener noreferrer");
388+
389+
// Set target based on user preference
390+
if (openInNewTab) {
391+
linkNode.setTarget("_blank");
392+
} else {
393+
linkNode.setTarget("_self");
394+
}
382395
}
383396
}
384397
} else {
@@ -391,7 +404,7 @@ const LinkEditor = (): ReactElement => {
391404
HighPriority
392405
)
393406
);
394-
}, [ editor, updateLinkEditor, isEditMode ]);
407+
}, [ editor, updateLinkEditor, isEditMode, openInNewTab ]);
395408

396409
/**
397410
* Updates the link editor position.
@@ -465,6 +478,17 @@ const LinkEditor = (): ReactElement => {
465478
}
466479
} }
467480
/>
481+
<FormControlLabel
482+
control={ (
483+
<Checkbox
484+
checked={ openInNewTab }
485+
onChange={ (event: ChangeEvent<HTMLInputElement>) => {
486+
setOpenInNewTab(event.target.checked);
487+
} }
488+
/>
489+
) }
490+
label={ t("flows:core.elements.richText.linkEditor.openInNewTab") }
491+
/>
468492
<Button
469493
size="small"
470494
variant="outlined"

modules/i18n/src/models/namespaces/flows-ns.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export interface flowsNS {
5454
elements: {
5555
richText: {
5656
linkEditor: {
57+
openInNewTab: string;
5758
placeholder: string;
5859
predefinedUrls: {
5960
applicationAccessUrl: string;

modules/i18n/src/translations/en-US/portals/flows.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export const flows: flowsNS = {
4646
elements: {
4747
richText: {
4848
linkEditor: {
49+
openInNewTab: "Open in new tab",
4950
placeholder: "Enter link URL here...",
5051
predefinedUrls: {
5152
applicationAccessUrl: "Application Access URL",

0 commit comments

Comments
 (0)