58 lines
1.8 KiB
JavaScript
58 lines
1.8 KiB
JavaScript
|
import { takeRightWhile } from 'lodash';
|
||
|
|
||
|
export function getSymbol(type) {
|
||
|
if (type === 'new') return '+';
|
||
|
if (type === 'old') return '-';
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
function getLineNumber(lineRange, key) {
|
||
|
if (!lineRange || !key) return '';
|
||
|
const lineCode = lineRange[`${key}_line_code`] || '';
|
||
|
const lineType = lineRange[`${key}_line_type`] || '';
|
||
|
const lines = lineCode.split('_') || [];
|
||
|
const lineNumber = lineType === 'old' ? lines[1] : lines[2];
|
||
|
return (lineNumber && getSymbol(lineType) + lineNumber) || '';
|
||
|
}
|
||
|
|
||
|
export function getStartLineNumber(lineRange) {
|
||
|
return getLineNumber(lineRange, 'start');
|
||
|
}
|
||
|
|
||
|
export function getEndLineNumber(lineRange) {
|
||
|
return getLineNumber(lineRange, 'end');
|
||
|
}
|
||
|
|
||
|
export function getLineClasses(line) {
|
||
|
const symbol = typeof line === 'string' ? line.charAt(0) : getSymbol(line?.type);
|
||
|
|
||
|
if (symbol !== '+' && symbol !== '-') return '';
|
||
|
|
||
|
return [
|
||
|
'gl-px-1 gl-rounded-small gl-border-solid gl-border-1 gl-border-white',
|
||
|
{
|
||
|
'gl-bg-green-100 gl-text-green-800': symbol === '+',
|
||
|
'gl-bg-red-100 gl-text-red-800': symbol === '-',
|
||
|
},
|
||
|
];
|
||
|
}
|
||
|
|
||
|
export function commentLineOptions(diffLines, lineCode) {
|
||
|
const selectedIndex = diffLines.findIndex(line => line.line_code === lineCode);
|
||
|
const notMatchType = l => l.type !== 'match';
|
||
|
|
||
|
// We're limiting adding comments to only lines above the current line
|
||
|
// to make rendering simpler. Future interations will use a more
|
||
|
// intuitive dragging interface that will make this unnecessary
|
||
|
const upToSelected = diffLines.slice(0, selectedIndex + 1);
|
||
|
|
||
|
// Only include the lines up to the first "Show unchanged lines" block
|
||
|
// i.e. not a "match" type
|
||
|
const lines = takeRightWhile(upToSelected, notMatchType);
|
||
|
|
||
|
return lines.map(l => ({
|
||
|
value: { lineCode: l.line_code, type: l.type },
|
||
|
text: `${getSymbol(l.type)}${l.new_line || l.old_line}`,
|
||
|
}));
|
||
|
}
|