@atlaskit/renderer
Version:
Renderer component
81 lines • 2.76 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import React, { Fragment } from 'react';
import { componentWithCondition } from '@atlaskit/platform-feature-flags-react';
import { getEventHandler } from '../../utils';
import { PLATFORM, MODE } from '../../analytics/events';
import { ACTION, ACTION_SUBJECT, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
import { AnalyticsContext } from '@atlaskit/analytics-next';
import { LinkUrlCompiled } from './link-compiled';
import { LinkUrlEmotion } from './link-emotion';
const LinkUrlMigration = componentWithCondition(() => expValEquals('platform_editor_renderer_static_css', 'isEnabled', true), LinkUrlCompiled, LinkUrlEmotion);
/**
* Render an ADF link mark in renderer.
*/
export default function Link(props) {
const {
href,
target,
onSetLinkTarget,
eventHandlers,
fireAnalyticsEvent,
isMediaLink,
dataAttributes
} = props;
let actualTarget = target;
if (onSetLinkTarget && href) {
try {
var _onSetLinkTarget;
actualTarget = (_onSetLinkTarget = onSetLinkTarget(href)) !== null && _onSetLinkTarget !== void 0 ? _onSetLinkTarget : actualTarget;
} catch (error) {
// eslint-disable-line no-unused-vars
// If URL parsing fails, use the original target
}
}
const anchorProps = {
href,
target: actualTarget,
title: href
};
if (actualTarget === '_blank') {
anchorProps.rel = 'noreferrer noopener';
}
const handler = getEventHandler(eventHandlers, 'link');
if (isMediaLink) {
return /*#__PURE__*/React.createElement(Fragment, null, props.children);
}
const analyticsData = {
attributes: {
location: 'renderer'
},
// Below is added for the future implementation of Linking Platform namespaced analytic context
location: 'renderer'
};
return /*#__PURE__*/React.createElement(AnalyticsContext, {
data: analyticsData
}, /*#__PURE__*/React.createElement(LinkUrlMigration
// eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed)
, _extends({
onClick: e => {
if (fireAnalyticsEvent) {
fireAnalyticsEvent({
action: ACTION.VISITED,
actionSubject: ACTION_SUBJECT.LINK,
eventType: EVENT_TYPE.TRACK,
attributes: {
platform: PLATFORM.WEB,
mode: MODE.RENDERER
}
});
}
if (handler) {
handler(e, href);
}
}
// Ignored via go/ees005
// eslint-disable-next-line react/jsx-props-no-spreading
}, anchorProps, dataAttributes, {
isLinkComponent: true,
enableResolve: true
}), props.children));
}