import "./NoteBadges.css"; import clsx from "clsx"; import { ComponentChildren, MouseEventHandler } from "preact"; import { useRef } from "preact/hooks"; import { t } from "../../services/i18n"; import Dropdown, { DropdownProps } from "../react/Dropdown"; import { useIsNoteReadOnly, useNoteContext, useNoteLabel, useNoteLabelBoolean, useStaticTooltip } from "../react/hooks"; import Icon from "../react/Icon"; import { useShareInfo } from "../shared_info"; export default function NoteBadges() { return (
); } function ReadOnlyBadge() { const { note, noteContext } = useNoteContext(); const { isReadOnly, enableEditing } = useIsNoteReadOnly(note, noteContext); const isExplicitReadOnly = note?.isLabelTruthy("readOnly"); const isTemporarilyEditable = noteContext?.ntxId !== "_popup-editor" && noteContext?.viewScope?.readOnlyTemporarilyDisabled; if (isTemporarilyEditable) { return enableEditing(false)} />; } else if (isReadOnly) { return enableEditing()} />; } } function ShareBadge() { const { note } = useNoteContext(); const { isSharedExternally, link, linkHref } = useShareInfo(note); return (link && ); } function ClippedNoteBadge() { const { note } = useNoteContext(); const [ pageUrl ] = useNoteLabel(note, "pageUrl"); return (pageUrl && ); } function ExecuteBadge() { const { note, parentComponent } = useNoteContext(); const isScript = note?.isTriliumScript(); const isSql = note?.isTriliumSqlite(); const isExecutable = isScript || isSql; const [ executeDescription ] = useNoteLabel(note, "executeDescription"); const [ executeButton ] = useNoteLabelBoolean(note, "executeButton"); return (note && isExecutable && (executeDescription || executeButton) && parentComponent.triggerCommand("runActiveNote")} /> ); } interface BadgeProps { text?: string; icon?: string; className: string; tooltip?: string; onClick?: MouseEventHandler; href?: string; } function Badge({ icon, className, text, tooltip, onClick, href }: BadgeProps) { const containerRef = useRef(null); useStaticTooltip(containerRef, { placement: "bottom", fallbackPlacements: [ "bottom" ], animation: false, html: true, title: tooltip }); const content = <> {icon && <> } {text} ; return (
{href ? {content} : {content}}
); } function BadgeWithDropdown({ children, tooltip, className, dropdownOptions, ...props }: BadgeProps & { children: ComponentChildren, dropdownOptions?: Partial }) { return ( } noDropdownListStyle noSelectButtonStyle hideToggleArrow title={tooltip} titlePosition="bottom" {...dropdownOptions} dropdownOptions={{ ...dropdownOptions?.dropdownOptions, popperConfig: { ...dropdownOptions?.dropdownOptions?.popperConfig, placement: "bottom", strategy: "fixed" } }} >{children} ); }