UNPKG

@atlaskit/editor-common

Version:

A package that contains common classes and components for editor and renderer

161 lines (156 loc) 5.16 kB
import _defineProperty from "@babel/runtime/helpers/defineProperty"; /** * @jsxRuntime classic * @jsx jsx */ import React, { Fragment } from 'react'; // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766 import { css, jsx } from '@emotion/react'; // AFP-2532 TODO: Fix automatic suppressions below // eslint-disable-next-line @atlassian/tangerine/import/entry-points import { injectIntl } from 'react-intl-next'; import { relativeFontSizeToBase16 } from '@atlaskit/editor-shared-styles'; import { getCorrectAltByIconUrl } from './listItemAlts'; import { transformTimeStamp } from './transformTimeStamp'; // eslint-disable-next-line @atlaskit/ui-styling-standard/no-exported-styles -- Ignored via go/DSP-18766 export const container = css({ backgroundColor: 'transparent', padding: `${"var(--ds-space-100, 8px)"} ${"var(--ds-space-150, 12px)"}`, cursor: 'pointer', display: 'flex', marginTop: 0 }); // eslint-disable-next-line @atlaskit/ui-styling-standard/no-exported-styles -- Ignored via go/DSP-18766 export const containerSelected = css({ backgroundColor: "var(--ds-background-neutral-subtle-hovered, #091E420F)" }); const nameWrapper = css({ overflow: 'hidden' }); // eslint-disable-next-line @atlaskit/ui-styling-standard/no-exported-styles -- Ignored via go/DSP-18766 export const nameStyle = css({ color: "var(--ds-text, #172B4D)", overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', // eslint-disable-next-line @atlaskit/design-system/use-tokens-typography lineHeight: '20px' }); // eslint-disable-next-line @atlaskit/ui-styling-standard/no-exported-styles -- Ignored via go/DSP-18766 export const containerName = css({ color: "var(--ds-text-subtlest, #626F86)", // eslint-disable-next-line @atlaskit/design-system/use-tokens-typography lineHeight: '14px', // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 fontSize: relativeFontSizeToBase16(11) }); const iconStyle = css({ minWidth: '16px', marginTop: "var(--ds-space-050, 4px)", marginRight: "var(--ds-space-150, 12px)", // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors -- Ignored via go/DSP-18766 img: { maxWidth: '16px' } }); // Ignored via go/ees005 // eslint-disable-next-line @repo/internal/react/no-class-components class LinkSearchListItem extends React.PureComponent { constructor(...args) { super(...args); _defineProperty(this, "handleSelect", e => { e.preventDefault(); // don't let editor lose focus const { item, onSelect } = this.props; onSelect(item.url, item.name); }); _defineProperty(this, "handleMouseMove", () => { const { onMouseMove, item } = this.props; onMouseMove && onMouseMove(item.objectId); }); _defineProperty(this, "handleMouseEnter", () => { const { onMouseEnter, item } = this.props; onMouseEnter && onMouseEnter(item.objectId); }); _defineProperty(this, "handleMouseLeave", () => { const { onMouseLeave, item } = this.props; onMouseLeave && onMouseLeave(item.objectId); }); } renderIcon() { const { item: { icon, iconUrl }, intl } = this.props; if (icon) { return jsx("span", { css: iconStyle }, icon); } if (iconUrl) { return jsx("span", { css: iconStyle }, jsx("img", { src: iconUrl, alt: getCorrectAltByIconUrl(iconUrl, intl) })); } return null; } renderTimeStamp() { const { item, intl } = this.props; const date = transformTimeStamp(intl, item.lastViewedDate, item.lastUpdatedDate); return date && jsx(Fragment, null, "\xA0 \u2022", jsx("span", { // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 className: "link-search-timestamp", "data-test-id": "link-search-timestamp" }, "\xA0 ", date.pageAction, " ", date.dateString, " ", date.timeSince || '')); } render() { const { item, selected, id, role } = this.props; return ( // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions jsx("li", { css: [container, selected && containerSelected], role: role, id: id, "aria-selected": selected, "data-testid": "link-search-list-item", onMouseMove: this.handleMouseMove, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, onClick: this.handleSelect }, this.renderIcon(), jsx("span", { css: nameWrapper }, jsx("div", { css: nameStyle }, item.name), jsx("div", { "data-testid": "link-search-list-item-container", css: containerName }, item.container, this.renderTimeStamp()))) ); } } export default injectIntl(LinkSearchListItem);