allow even and odd to be clicked before any other terms

This commit is contained in:
EthanHealy01 2025-09-17 20:56:19 +01:00
parent 30072f4289
commit 6924ef2aa1
2 changed files with 5 additions and 6 deletions

View File

@ -21,10 +21,9 @@ export function appendExpression(currentInput: string, expr: string): string {
// Produces a trailing space to allow the next token to be typed naturally.
export function insertOperatorSmart(currentInput: string, op: LogicalOperator): string {
const text = (currentInput || '').trim();
if (text.length === 0) return `${op} `;
// Handle 'even' and 'odd' as page selection expressions, not logical operators
if (op === 'even' || op === 'odd') {
if (text.length === 0) return `${op} `;
// If current input ends with a logical operator, append the page selection with proper spacing
const endsWithOperator = /(\b(and|not|or)\s*|[&|,!]\s*)$/i.test(text);
if (endsWithOperator) {
@ -35,6 +34,8 @@ export function insertOperatorSmart(currentInput: string, op: LogicalOperator):
return `${text} or ${op} `;
}
if (text.length === 0) return `${op} `;
// Extract up to the last two operator tokens (words or symbols) from the end
const tokens: string[] = [];
let rest = text;

View File

@ -53,8 +53,7 @@ const OperatorsSection = ({ csvInput, onInsertOperator }: OperatorsSectionProps)
variant="outline"
className={classes.operatorChip}
onClick={() => onInsertOperator('even')}
disabled={!csvInput.trim()}
title="Combine selections (both conditions must be true)"
title="Select all even-numbered pages (2, 4, 6, 8...)"
>
<Text size="xs" fw={500}>even</Text>
</Button>
@ -63,8 +62,7 @@ const OperatorsSection = ({ csvInput, onInsertOperator }: OperatorsSectionProps)
variant="outline"
className={classes.operatorChip}
onClick={() => onInsertOperator('odd')}
disabled={!csvInput.trim()}
title="Add to selection (either condition can be true)"
title="Select all odd-numbered pages (1, 3, 5, 7...)"
>
<Text size="xs" fw={500}>odd</Text>
</Button>