fix(ivy): allow empty cases for ICU expressions (#30846)
We used to ignore empty strings for optimization purposes, but it turns out that empty strings are also valid values for ICU cases and we shouldn't ignore those. FW-1290 #resolve PR Close #30846
This commit is contained in:
parent
b74df20c2a
commit
0d4f8c7dd9
|
@ -123,7 +123,7 @@ function extractParts(pattern: string): (string | IcuExpression)[] {
|
||||||
const block = pattern.substring(prevPos, pos);
|
const block = pattern.substring(prevPos, pos);
|
||||||
if (ICU_BLOCK_REGEXP.test(block)) {
|
if (ICU_BLOCK_REGEXP.test(block)) {
|
||||||
results.push(parseICUBlock(block));
|
results.push(parseICUBlock(block));
|
||||||
} else if (block) { // Don't push empty strings
|
} else {
|
||||||
results.push(block);
|
results.push(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,10 +140,7 @@ function extractParts(pattern: string): (string | IcuExpression)[] {
|
||||||
}
|
}
|
||||||
|
|
||||||
const substring = pattern.substring(prevPos);
|
const substring = pattern.substring(prevPos);
|
||||||
if (substring != '') {
|
results.push(substring);
|
||||||
results.push(substring);
|
|
||||||
}
|
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,7 +179,7 @@ function parseICUBlock(pattern: string): IcuExpression {
|
||||||
}
|
}
|
||||||
|
|
||||||
const blocks = extractParts(parts[pos++]) as string[];
|
const blocks = extractParts(parts[pos++]) as string[];
|
||||||
if (blocks.length) {
|
if (cases.length > values.length) {
|
||||||
values.push(blocks);
|
values.push(blocks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -618,6 +618,13 @@ onlyInIvy('Ivy i18n logic').describe('runtime i18n', () => {
|
||||||
|
|
||||||
expect(fixture.nativeElement.innerHTML).toContain('at least');
|
expect(fixture.nativeElement.innerHTML).toContain('at least');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('with empty values', () => {
|
||||||
|
const fixture = initWithTemplate(AppComp, `{count, select, 10 {} 20 {twenty} other {other}}`);
|
||||||
|
|
||||||
|
const element = fixture.nativeElement;
|
||||||
|
expect(element).toHaveText('other');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('should support attributes', () => {
|
describe('should support attributes', () => {
|
||||||
|
|
Loading…
Reference in New Issue