import { ColumnHelper } from 'nocodb-sdk' import type { ColumnType, TableType, UITypes } from 'nocodb-sdk' export const valueToCopy = ( rowObj: Row, columnObj: ColumnType, cb: { isPg: (sourceId: string) => boolean isMysql: (sourceId: string) => boolean meta: TableType metas?: { [idOrTitle: string]: TableType | any } }, option?: { skipUidt?: UITypes[] skipClipboardColumn?: boolean }, ): { textToCopy: any cellValue: any clipboardColumn: Partial rowId: string } => { const { isPg, isMysql, meta, metas } = cb const result: { textToCopy: any cellValue: any clipboardColumn: Partial rowId: string } = { textToCopy: '', cellValue: null, clipboardColumn: {}, rowId: '', } const textToCopy = (columnObj.title && rowObj.row[columnObj.title]) ?? '' result.textToCopy = textToCopy result.cellValue = textToCopy result.rowId = extractPkFromRow(rowObj.row, (meta?.columns as ColumnType[]) ?? []) ?? '' if (!option?.skipClipboardColumn) { result.clipboardColumn = ColumnHelper.getClipboardConfig({ col: columnObj, }).column } if (option?.skipUidt?.includes(columnObj.uidt as UITypes)) { return result } result.textToCopy = ColumnHelper.parseValue(textToCopy, { col: columnObj, isMysql, isPg, meta, metas, rowId: isMMOrMMLike(columnObj) ? result.rowId : null, }) return result } export const serializeRange = ( rows: Row[], cols: ColumnType[], cb: { isPg: (sourceId: string) => boolean isMysql: (sourceId: string) => boolean meta: TableType metas?: { [idOrTitle: string]: TableType | any } }, option?: { skipUidt?: UITypes[] }, ) => { let html = '' let text = '' const json: string[][] = [] const clipboardItemConfig: Pick< NcClipboardDataItemType, 'columns' | 'rowIds' | 'dbCellValueArr' | 'copiedPlainText' | 'copiedHtml' > = { columns: cols.map((col) => { return ColumnHelper.getClipboardConfig({ col, }).column }), rowIds: [], dbCellValueArr: [], copiedPlainText: '', copiedHtml: '', } rows.forEach((row, i) => { let copyRow = '' const jsonRow: string[] = [] const clipboardCellValue: any[] = [] let recordId = '' cols.forEach((col, i) => { const { textToCopy, rowId, cellValue } = valueToCopy(row, col, cb, { ...(option ?? {}), skipClipboardColumn: true, }) copyRow += `` text = `${text}${textToCopy}${cols.length - 1 !== i ? '\t' : ''}` jsonRow.push(textToCopy) clipboardCellValue.push(cellValue) recordId = rowId }) html += `${copyRow}` if (rows.length - 1 !== i) { text = `${text}\n` } json.push(jsonRow) clipboardItemConfig.dbCellValueArr!.push(clipboardCellValue) clipboardItemConfig.rowIds!.push(recordId) }) html += '
${textToCopy}
' clipboardItemConfig.copiedPlainText = text clipboardItemConfig.copiedHtml = html return { html, text, json, clipboardItemConfig } }