Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e1a5396

Browse files
committed
feat(ap): Required Inputs
fix #1340
1 parent 65a4f7c commit e1a5396

File tree

19 files changed

+61
-18
lines changed

19 files changed

+61
-18
lines changed

src/app/compiler/angular/deps/helpers/class-helper.ts

+30-17
Original file line numberDiff line numberDiff line change
@@ -1445,32 +1445,45 @@ export class ClassHelper {
14451445
}
14461446

14471447
private visitInputAndHostBinding(property, inDecorator, sourceFile?) {
1448-
let inArgs = inDecorator.expression.arguments;
1448+
const inArgs = inDecorator.expression.arguments;
1449+
14491450
let _return: any = {};
14501451

1451-
let getRequiredField = () =>
1452+
let isInputConfigStringLiteral = false;
1453+
let isInputConfigObjectLiteralExpression = false;
1454+
let hasRequiredField = false;
1455+
let hasAlias = false;
1456+
1457+
const getRequiredField = () =>
14521458
inArgs[0].properties.find(property => property.name.escapedText === 'required');
1453-
let getAliasProperty = () =>
1459+
const getAliasProperty = () =>
14541460
inArgs[0].properties.find(property => property.name.escapedText === 'alias');
14551461

1456-
let isInputConfigStringLiteral = inArgs[0] && ts.isStringLiteral(inArgs[0]);
1457-
let isInputConfigObjectLiteralExpression =
1458-
inArgs[0] && ts.isObjectLiteralExpression(inArgs[0]);
1459-
let hasRequiredField = isInputConfigObjectLiteralExpression && !!getRequiredField();
1460-
let hasAlias = isInputConfigObjectLiteralExpression ? !!getAliasProperty() : false;
1461-
1462-
_return.name = isInputConfigStringLiteral
1463-
? inArgs[0].text
1464-
: hasAlias
1465-
? getAliasProperty().initializer.text
1466-
: property.name.text;
1462+
if (inArgs.length > 0 && inArgs[0].properties) {
1463+
isInputConfigStringLiteral = inArgs[0] && ts.isStringLiteral(inArgs[0]);
1464+
isInputConfigObjectLiteralExpression =
1465+
inArgs[0] && ts.isObjectLiteralExpression(inArgs[0]);
1466+
hasRequiredField = isInputConfigObjectLiteralExpression && !!getRequiredField();
1467+
hasAlias = isInputConfigObjectLiteralExpression ? !!getAliasProperty() : false;
1468+
1469+
_return.name = isInputConfigStringLiteral
1470+
? inArgs[0].text
1471+
: hasAlias
1472+
? getAliasProperty().initializer.text
1473+
: property.name.text;
1474+
1475+
_return.required = !!getRequiredField();
1476+
} else {
1477+
_return.name = property.name.text;
1478+
}
1479+
14671480
_return.defaultValue = property.initializer
14681481
? this.stringifyDefaultValue(property.initializer)
14691482
: undefined;
14701483
_return.deprecated = false;
14711484
_return.deprecationMessage = '';
14721485

1473-
if (hasRequiredField) {
1486+
if (inArgs.length > 0 && inArgs[0].properties && hasRequiredField) {
14741487
_return.optional = getRequiredField().initializer.kind !== SyntaxKind.TrueKeyword;
14751488
}
14761489

@@ -1509,9 +1522,9 @@ export class ClassHelper {
15091522
}
15101523
// Try to get inferred type
15111524
if (property.symbol) {
1512-
let symbol: ts.Symbol = property.symbol;
1525+
const symbol: ts.Symbol = property.symbol;
15131526
if (symbol.valueDeclaration) {
1514-
let symbolType = this.typeChecker.getTypeOfSymbolAtLocation(
1527+
const symbolType = this.typeChecker.getTypeOfSymbolAtLocation(
15151528
symbol,
15161529
symbol.valueDeclaration
15171530
);

src/locales/bg-BG.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_BG_BG = {
8080
providers: 'Providers',
8181
pure: 'Pure',
8282
readme: 'README',
83+
required: 'Задължително',
8384
reset: 'Нулиране',
8485
'results-matching': 'намерени резултати',
8586
returns: 'Returns',

src/locales/de-DE.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_DE_DE = {
8080
providers: 'Providers',
8181
pure: 'Pure',
8282
readme: 'README',
83+
required: 'Erforderlich',
8384
reset: 'Zurücksetzen',
8485
'results-matching': 'übereinstimmende Ergebnisse',
8586
returns: 'Returns',

src/locales/en-US.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_EN_US = {
8080
providers: 'Providers',
8181
pure: 'Pure',
8282
readme: 'README',
83+
required: 'Required',
8384
reset: 'Reset',
8485
'results-matching': 'results matching',
8586
returns: 'Returns',

src/locales/es-ES.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_ES_ES = {
8080
providers: 'Proveedores',
8181
pure: 'Puro',
8282
readme: 'Léeme',
83+
required: 'Requerido',
8384
reset: 'Restablecer',
8485
'results-matching': 'comparación de resultados',
8586
returns: 'Devuelve',

src/locales/fr-FR.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_FR_FR = {
8080
providers: 'Providers',
8181
pure: 'Pure',
8282
readme: 'README',
83+
required: 'Requis',
8384
reset: 'Remise à zéro',
8485
'results-matching': 'résultats matchant',
8586
returns: 'Renvoie',

src/locales/hu-HU.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_HU_HU = {
8080
providers: 'Providerek',
8181
pure: 'Pure',
8282
readme: 'README',
83+
required: 'Kívánt',
8384
reset: 'Visszaállít',
8485
'results-matching': 'találat',
8586
returns: 'Visszatérési érték',

src/locales/it-IT.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_IT_IT = {
8080
providers: 'Providers',
8181
pure: 'Pure',
8282
readme: 'README',
83+
required: 'Necessario',
8384
reset: 'Reset',
8485
'results-matching': 'corrispondenza',
8586
returns: 'Returns',

src/locales/ja-JP.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_JA_JP = {
8080
providers: 'プロバイダー',
8181
pure: 'Pure',
8282
readme: 'README',
83+
required: '必要',
8384
reset: 'リセット',
8485
'results-matching': '件の結果が一致しました',
8586
returns: '戻り値',

src/locales/ko-KR.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_KO_KR = {
8080
providers: '제공자',
8181
pure: 'Pure',
8282
readme: 'README',
83+
required: '필수의',
8384
reset: '초기화',
8485
'results-matching': '개의 결과가 일치했습니다',
8586
returns: '반환',

src/locales/nl-NL.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_NL_NL = {
8080
providers: 'Providers',
8181
pure: 'Puur',
8282
readme: 'README',
83+
required: 'Vereist',
8384
reset: 'Reset',
8485
'results-matching': 'overeenkomende resultaten',
8586
returns: 'Returns',

src/locales/pl-PL.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_PL_PL = {
8080
providers: 'Dostarczyciele',
8181
pure: 'Czysty',
8282
readme: 'README',
83+
required: 'Wymagany',
8384
reset: 'Reset',
8485
'results-matching': 'pasujących wyników',
8586
returns: 'Zwraca',

src/locales/pt-BR.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_PT_BR = {
8080
providers: 'Providers',
8181
pure: 'Puro',
8282
readme: 'README',
83+
required: 'Obrigatório',
8384
reset: 'Resetar',
8485
'results-matching': 'resultados correspondentes',
8586
returns: 'Retorna',

src/locales/sk-SK.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_SK_SK = {
8080
providers: 'Providers',
8181
pure: 'Pure',
8282
readme: 'README',
83+
required: 'Požadovaný',
8384
reset: 'Resetovať',
8485
'results-matching': 'výsledkov pre',
8586
returns: 'Návratová hodnota',

src/locales/zh-CN.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_ZH_CN = {
8080
providers: '提供商列表',
8181
pure: 'Pure',
8282
readme: '手册',
83+
required: '必需的',
8384
reset: '重置',
8485
'results-matching': '匹配的结果',
8586
returns: '返回',

src/locales/zh-TW.ts

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const TRANSLATION_ZH_TW = {
8080
providers: '提供者列表',
8181
pure: 'Pure',
8282
readme: 'README',
83+
required: '必需的',
8384
reset: '重設',
8485
'results-matching': '匹配的結果',
8586
returns: '回傳值',

src/templates/partials/block-input.hbs

+7
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@
1616
</td>
1717
</tr>
1818
{{/if}}
19+
{{#if required}}
20+
<tr>
21+
<td class="col-md-4">
22+
<i>{{t "required" }} : </i>&nbsp;<b>{{ required }}</b>
23+
</td>
24+
</tr>
25+
{{/if}}
1926
{{#if defaultValue}}
2027
<tr>
2128
<td class="col-md-4">

test/fixtures/todomvc-ng2/src/app/list/todo/todo.component.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ export class TodoComponent {
2626
/**
2727
* The entry todo from the parent list
2828
*/
29-
@Input() todo: Todo;
29+
@Input({
30+
required: true
31+
})
32+
todo: Todo;
3033

3134
unionVariable: string[] | Todo;
3235

test/src/cli/cli-generation-big-app.spec.ts

+5
Original file line numberDiff line numberDiff line change
@@ -948,4 +948,9 @@ describe('CLI simple generation - big app', () => {
948948
file = read(distFolder + '/pipes/StandAlonePipe.html');
949949
expect(file).to.contain('<td class="col-md-3">standalone</td>');
950950
});
951+
952+
it('should support required for inputs', () => {
953+
const file = read(distFolder + '/components/TodoComponent.html');
954+
expect(file).to.contain('<i>Required : </i>&nbsp;<b>true</b>');
955+
});
951956
});

0 commit comments

Comments
 (0)