Parse URLs from note field (#154)

This commit is contained in:
jeffvli 2023-09-22 04:25:16 -07:00
parent 14f4649b93
commit 25e621372c
2 changed files with 49 additions and 1 deletions

View file

@ -0,0 +1,47 @@
import type { ICellRendererParams } from '@ag-grid-community/core';
import { Skeleton } from '/@/renderer/components/skeleton';
import { CellContainer } from '/@/renderer/components/virtual-table/cells/generic-cell';
import { useMemo } from 'react';
import { Text } from '/@/renderer/components/text';
const URL_REGEX =
/((?:https?:\/\/)?(?:[\w-]{1,32}(?:\.[\w-]{1,32})+)(?:\/[\w\-./?%&=][^.|^\s]*)?)/g;
const replaceURLWithHTMLLinks = (text: string) => {
const urlRegex = new RegExp(URL_REGEX, 'g');
return text.replaceAll(
urlRegex,
(url) => `<a href="${url}" target="_blank" rel="noreferrer">${url}</a>`,
);
};
export const NoteCell = ({ value }: ICellRendererParams) => {
const formattedValue = useMemo(() => {
if (!value) {
return '';
}
return replaceURLWithHTMLLinks(value);
}, [value]);
if (value === undefined) {
return (
<CellContainer $position="left">
<Skeleton
height="1rem"
width="80%"
/>
</CellContainer>
);
}
return (
<CellContainer $position="left">
<Text
$secondary
dangerouslySetInnerHTML={{ __html: formattedValue }}
overflow="hidden"
/>
</CellContainer>
);
};

View file

@ -36,6 +36,7 @@ import { TablePagination } from '/@/renderer/components/virtual-table/table-pagi
import { ActionsCell } from '/@/renderer/components/virtual-table/cells/actions-cell';
import { TitleCell } from '/@/renderer/components/virtual-table/cells/title-cell';
import { useFixedTableHeader } from '/@/renderer/components/virtual-table/hooks/use-fixed-table-header';
import { NoteCell } from '/@/renderer/components/virtual-table/cells/note-cell';
export * from './table-config-dropdown';
export * from './table-pagination';
@ -150,7 +151,7 @@ const tableColumns: { [key: string]: ColDef } = {
width: 100,
},
comment: {
cellRenderer: GenericCell,
cellRenderer: NoteCell,
colId: TableColumn.COMMENT,
headerName: 'Note',
valueGetter: (params: ValueGetterParams) => (params.data ? params.data.comment : undefined),