import { humanTimeDiff } from '@wordpress/date' import { RawHTML } from '@wordpress/element' import { __ } from '@wordpress/i18n' import React, { Fragment } from 'react' import { useSnippetsAPI } from '../../../hooks/useSnippetsAPI' import { useSnippetsList } from '../../../hooks/useSnippetsList' import { handleUnknownError } from '../../../utils/errors' import { isNetworkAdmin } from '../../../utils/screen' import { getSnippetDisplayName, getSnippetEditUrl, getSnippetType } from '../../../utils/snippets/snippets' import { buildUrl } from '../../../utils/urls' import { Badge } from '../../common/Badge' import { SnippetPriorityInput } from '../../common/snippets/SnippetPriorityInput' import { Tooltip } from '../../common/Tooltip' import { RowActions } from './RowActions' import { useFilteredSnippets } from './WithFilteredSnippetsContext' import { useSnippetsFilters } from './WithSnippetsTableFilters' import type { Key } from 'react' import type { Snippet } from '../../../types/Snippet' import type { ListTableColumn } from '../../common/ListTable' interface ColumnProps { snippet: Snippet } const RunOnceButton: React.FC = ({ snippet }) => {__('Run Once', 'code-snippets')} const ActivationSwitch: React.FC = ({ snippet }) => { const { activate, deactivate } = useSnippetsAPI() const { refreshSnippetsList } = useSnippetsList() const actionText = snippet.network && !snippet.shared_network ? snippet.active ? __('Network Deactivate', 'code-snippets') : __('Network Activate', 'code-snippets') : snippet.active ? __('Deactivate', 'code-snippets') : __('Activate', 'code-snippets') return ( { (snippet.active ? deactivate(snippet) : activate(snippet)) .then(refreshSnippetsList) .catch(handleUnknownError) }} /> ) } export const ActivateColumn: React.FC = ({ snippet }) => { const { activeByCondition } = useFilteredSnippets() if (snippet.trashed) { return '' } switch (snippet.scope) { case 'single-use': return case 'condition': return ( {activeByCondition.get(snippet.id)?.length ?? 0} ) default: return } } export const SnippetExtraIcons: React.FC = ({ snippet }) =>
{snippet.locked && ( )}
export const SnippetName: React.FC = ({ snippet }) => <> {!snippet.trashed && (isNetworkAdmin() || !snippet.network || window.CODE_SNIPPETS_MANAGE?.hasNetworkCap) ? {getSnippetDisplayName(snippet)} : {getSnippetDisplayName(snippet)} } {snippet.shared_network && {__('Shared on Network', 'code-snippets')}} const NameColumn: React.FC = ({ snippet }) => <> export const TypeColumn: React.FC = ({ snippet }) => { const { setCurrentType } = useSnippetsFilters() const type = getSnippetType(snippet) return ( { event.preventDefault() setCurrentType(type) }} > ) } export const TagsColumn: React.FC = ({ snippet }) => snippet.tags.map((tag, index) => {tag} {index < snippet.tags.length - 1 ? ', ' : ''} ) export const DateColumn: React.FC = ({ snippet }) => snippet.modified ? : <>— const baseTableColumns: ListTableColumn[] = [ { id: 'activate', title: {__('Activate', 'code-snippets')}, render: snippet => }, { id: 'name', title: __('Name', 'code-snippets'), isPrimary: true, sortedValue: snippet => getSnippetDisplayName(snippet).toLowerCase(), render: snippet => }, { id: 'type', title: __('Type', 'code-snippets'), sortedValue: snippet => getSnippetType(snippet), render: snippet => }, { id: 'desc', title: __('Description', 'code-snippets'), render: snippet =>
{snippet.desc}
}, { id: 'tags', title: __('Tags', 'code-snippets'), render: snippet => }, { id: 'date', title: __('Modified', 'code-snippets'), sortedValue: snippet => snippet.modified ? new Date(snippet.modified).toISOString() : '', render: snippet => }, { id: 'priority', title: __('Priority', 'code-snippets'), sortedValue: snippet => snippet.priority, render: snippet => } ] export const getTableColumns = (hiddenColumns: Set): ListTableColumn[] => baseTableColumns.map(column => ({ ...column, isHidden: hiddenColumns.has(column.id) }))