Skip to content

Commit 71d4621

Browse files
committed
Enhance token management to handle merged tokens in expression model, preventing structure breaks during updates
1 parent 9199c1d commit 71d4621

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

workspaces/ballerina/ballerina-side-panel/src/components/editors/MultiModeExpressionEditor/ChipExpressionEditor/ChipExpressionBaseComponent.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,11 +243,17 @@ export const ChipExpressionBaseComponent = (props: ChipExpressionBaseComponentPr
243243
const cursorPositionAfterUpdate = getAbsoluteCaretPositionFromModel(updatedModel);
244244
const cursorDelta = updatedValue.length - props.value.length;
245245

246+
// Check if expression model contains merged tokens (document or variable with interpolations)
247+
// These tokens have metadata and are created by merging multiple sub-tokens
248+
const hasMergedTokens = expressionModel?.some(el => el.metadata !== undefined) || false;
249+
246250
// Update tokens based on cursor movement
251+
// Skip manual token updates if merged tokens are present to avoid breaking their structure
247252
const previousFullText = getTextValueFromExpressionModel(expressionModel);
248-
const updatedTokens = updateTokens(tokens, cursorPositionBeforeUpdate, cursorDelta, previousFullText);
253+
const updatedTokens = hasMergedTokens ? tokens : updateTokens(tokens, cursorPositionBeforeUpdate, cursorDelta, previousFullText);
249254

250-
const shouldUpdateTokens = (!lastTypedText?.startsWith('#$') || lastTypedText === BACKSPACE_MARKER)
255+
const shouldUpdateTokens = !hasMergedTokens
256+
&& (!lastTypedText?.startsWith('#$') || lastTypedText === BACKSPACE_MARKER)
251257
&& JSON.stringify(updatedTokens) !== JSON.stringify(tokens);
252258

253259
if (shouldUpdateTokens) {
@@ -267,7 +273,8 @@ export const ChipExpressionBaseComponent = (props: ChipExpressionBaseComponentPr
267273
}
268274

269275
// Determine if we need to fetch new tokens
270-
if (shouldFetchNewTokens(lastTypedText)) {
276+
// Always fetch new tokens if merged tokens are present to maintain their structure
277+
if (hasMergedTokens || shouldFetchNewTokens(lastTypedText)) {
271278
fetchnewTokensRef.current = true;
272279
}
273280

0 commit comments

Comments
 (0)