Skip to content

Commit

Permalink
feat(ap): Required Inputs
Browse files Browse the repository at this point in the history
fix #1340
  • Loading branch information
vogloblinsky committed May 22, 2023
1 parent 65a4f7c commit e1a5396
Show file tree
Hide file tree
Showing 19 changed files with 61 additions and 18 deletions.
47 changes: 30 additions & 17 deletions src/app/compiler/angular/deps/helpers/class-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1445,32 +1445,45 @@ export class ClassHelper {
}

private visitInputAndHostBinding(property, inDecorator, sourceFile?) {
let inArgs = inDecorator.expression.arguments;
const inArgs = inDecorator.expression.arguments;

let _return: any = {};

let getRequiredField = () =>
let isInputConfigStringLiteral = false;
let isInputConfigObjectLiteralExpression = false;
let hasRequiredField = false;
let hasAlias = false;

const getRequiredField = () =>
inArgs[0].properties.find(property => property.name.escapedText === 'required');
let getAliasProperty = () =>
const getAliasProperty = () =>
inArgs[0].properties.find(property => property.name.escapedText === 'alias');

let isInputConfigStringLiteral = inArgs[0] && ts.isStringLiteral(inArgs[0]);
let isInputConfigObjectLiteralExpression =
inArgs[0] && ts.isObjectLiteralExpression(inArgs[0]);
let hasRequiredField = isInputConfigObjectLiteralExpression && !!getRequiredField();
let hasAlias = isInputConfigObjectLiteralExpression ? !!getAliasProperty() : false;

_return.name = isInputConfigStringLiteral
? inArgs[0].text
: hasAlias
? getAliasProperty().initializer.text
: property.name.text;
if (inArgs.length > 0 && inArgs[0].properties) {
isInputConfigStringLiteral = inArgs[0] && ts.isStringLiteral(inArgs[0]);
isInputConfigObjectLiteralExpression =
inArgs[0] && ts.isObjectLiteralExpression(inArgs[0]);
hasRequiredField = isInputConfigObjectLiteralExpression && !!getRequiredField();
hasAlias = isInputConfigObjectLiteralExpression ? !!getAliasProperty() : false;

_return.name = isInputConfigStringLiteral
? inArgs[0].text
: hasAlias
? getAliasProperty().initializer.text
: property.name.text;

_return.required = !!getRequiredField();
} else {
_return.name = property.name.text;
}

_return.defaultValue = property.initializer
? this.stringifyDefaultValue(property.initializer)
: undefined;
_return.deprecated = false;
_return.deprecationMessage = '';

if (hasRequiredField) {
if (inArgs.length > 0 && inArgs[0].properties && hasRequiredField) {
_return.optional = getRequiredField().initializer.kind !== SyntaxKind.TrueKeyword;
}

Expand Down Expand Up @@ -1509,9 +1522,9 @@ export class ClassHelper {
}
// Try to get inferred type
if (property.symbol) {
let symbol: ts.Symbol = property.symbol;
const symbol: ts.Symbol = property.symbol;
if (symbol.valueDeclaration) {
let symbolType = this.typeChecker.getTypeOfSymbolAtLocation(
const symbolType = this.typeChecker.getTypeOfSymbolAtLocation(
symbol,
symbol.valueDeclaration
);
Expand Down
1 change: 1 addition & 0 deletions src/locales/bg-BG.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_BG_BG = {
providers: 'Providers',
pure: 'Pure',
readme: 'README',
required: 'Задължително',
reset: 'Нулиране',
'results-matching': 'намерени резултати',
returns: 'Returns',
Expand Down
1 change: 1 addition & 0 deletions src/locales/de-DE.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_DE_DE = {
providers: 'Providers',
pure: 'Pure',
readme: 'README',
required: 'Erforderlich',
reset: 'Zurücksetzen',
'results-matching': 'übereinstimmende Ergebnisse',
returns: 'Returns',
Expand Down
1 change: 1 addition & 0 deletions src/locales/en-US.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_EN_US = {
providers: 'Providers',
pure: 'Pure',
readme: 'README',
required: 'Required',
reset: 'Reset',
'results-matching': 'results matching',
returns: 'Returns',
Expand Down
1 change: 1 addition & 0 deletions src/locales/es-ES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_ES_ES = {
providers: 'Proveedores',
pure: 'Puro',
readme: 'Léeme',
required: 'Requerido',
reset: 'Restablecer',
'results-matching': 'comparación de resultados',
returns: 'Devuelve',
Expand Down
1 change: 1 addition & 0 deletions src/locales/fr-FR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_FR_FR = {
providers: 'Providers',
pure: 'Pure',
readme: 'README',
required: 'Requis',
reset: 'Remise à zéro',
'results-matching': 'résultats matchant',
returns: 'Renvoie',
Expand Down
1 change: 1 addition & 0 deletions src/locales/hu-HU.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_HU_HU = {
providers: 'Providerek',
pure: 'Pure',
readme: 'README',
required: 'Kívánt',
reset: 'Visszaállít',
'results-matching': 'találat',
returns: 'Visszatérési érték',
Expand Down
1 change: 1 addition & 0 deletions src/locales/it-IT.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_IT_IT = {
providers: 'Providers',
pure: 'Pure',
readme: 'README',
required: 'Necessario',
reset: 'Reset',
'results-matching': 'corrispondenza',
returns: 'Returns',
Expand Down
1 change: 1 addition & 0 deletions src/locales/ja-JP.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_JA_JP = {
providers: 'プロバイダー',
pure: 'Pure',
readme: 'README',
required: '必要',
reset: 'リセット',
'results-matching': '件の結果が一致しました',
returns: '戻り値',
Expand Down
1 change: 1 addition & 0 deletions src/locales/ko-KR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_KO_KR = {
providers: '제공자',
pure: 'Pure',
readme: 'README',
required: '필수의',
reset: '초기화',
'results-matching': '개의 결과가 일치했습니다',
returns: '반환',
Expand Down
1 change: 1 addition & 0 deletions src/locales/nl-NL.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_NL_NL = {
providers: 'Providers',
pure: 'Puur',
readme: 'README',
required: 'Vereist',
reset: 'Reset',
'results-matching': 'overeenkomende resultaten',
returns: 'Returns',
Expand Down
1 change: 1 addition & 0 deletions src/locales/pl-PL.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_PL_PL = {
providers: 'Dostarczyciele',
pure: 'Czysty',
readme: 'README',
required: 'Wymagany',
reset: 'Reset',
'results-matching': 'pasujących wyników',
returns: 'Zwraca',
Expand Down
1 change: 1 addition & 0 deletions src/locales/pt-BR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_PT_BR = {
providers: 'Providers',
pure: 'Puro',
readme: 'README',
required: 'Obrigatório',
reset: 'Resetar',
'results-matching': 'resultados correspondentes',
returns: 'Retorna',
Expand Down
1 change: 1 addition & 0 deletions src/locales/sk-SK.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_SK_SK = {
providers: 'Providers',
pure: 'Pure',
readme: 'README',
required: 'Požadovaný',
reset: 'Resetovať',
'results-matching': 'výsledkov pre',
returns: 'Návratová hodnota',
Expand Down
1 change: 1 addition & 0 deletions src/locales/zh-CN.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_ZH_CN = {
providers: '提供商列表',
pure: 'Pure',
readme: '手册',
required: '必需的',
reset: '重置',
'results-matching': '匹配的结果',
returns: '返回',
Expand Down
1 change: 1 addition & 0 deletions src/locales/zh-TW.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ export const TRANSLATION_ZH_TW = {
providers: '提供者列表',
pure: 'Pure',
readme: 'README',
required: '必需的',
reset: '重設',
'results-matching': '匹配的結果',
returns: '回傳值',
Expand Down
7 changes: 7 additions & 0 deletions src/templates/partials/block-input.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@
</td>
</tr>
{{/if}}
{{#if required}}
<tr>
<td class="col-md-4">
<i>{{t "required" }} : </i>&nbsp;<b>{{ required }}</b>
</td>
</tr>
{{/if}}
{{#if defaultValue}}
<tr>
<td class="col-md-4">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,10 @@ export class TodoComponent {
/**
* The entry todo from the parent list
*/
@Input() todo: Todo;
@Input({
required: true
})
todo: Todo;

unionVariable: string[] | Todo;

Expand Down
5 changes: 5 additions & 0 deletions test/src/cli/cli-generation-big-app.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -948,4 +948,9 @@ describe('CLI simple generation - big app', () => {
file = read(distFolder + '/pipes/StandAlonePipe.html');
expect(file).to.contain('<td class="col-md-3">standalone</td>');
});

it('should support required for inputs', () => {
const file = read(distFolder + '/components/TodoComponent.html');
expect(file).to.contain('<i>Required : </i>&nbsp;<b>true</b>');
});
});

0 comments on commit e1a5396

Please sign in to comment.