Skip to content

Commit c4e6e19

Browse files
Merge pull request jhipster#14391 from mshima/skip_ci_needle_angular
Fixes angular duplicated navbar element generation.
2 parents cff779c + 6856bca commit c4e6e19

File tree

4 files changed

+39
-9
lines changed

4 files changed

+39
-9
lines changed

generators/bootstrap/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const { STRING: TYPE_STRING, LONG: TYPE_LONG } = CommonDBTypes;
3636

3737
module.exports = class extends BaseGenerator {
3838
constructor(args, options) {
39-
super(args, options, { unique: 'namespace' });
39+
super(args, options, { unique: 'namespace', customCommitTask: true });
4040

4141
/*
4242
* When testing a generator with yeoman-test using 'withLocalConfig(localConfig)', it instantiates the

generators/client/needle-api/needle-client-angular.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ module.exports = class extends needleClientBase {
9292
modulePath,
9393
importNeedle
9494
);
95+
importRewriteFileModel.prettierAware = true;
9596
this.addBlockContentToFile(importRewriteFileModel, errorMessage);
9697

9798
const moduleRewriteFileModel = this._generateRewriteFileModelAddModule(appName, angularName, modulePath, moduleNeedle);
@@ -155,30 +156,34 @@ module.exports = class extends needleClientBase {
155156
) {
156157
const errorMessage = `${chalk.yellow('Reference to ') + routerName} ${chalk.yellow('not added to menu.\n')}`;
157158
const entityMenuPath = `${this.CLIENT_MAIN_SRC_DIR}app/layouts/navbar/navbar.component.html`;
159+
const routerLink = `routerLink="${routerName}"`;
158160
const entityEntry =
159161
// prettier-ignore
160162
this.generator.stripMargin(`|<li>
161-
| <a class="dropdown-item" routerLink="${routerName}" routerLinkActive="active" [routerLinkActiveOptions]="{ exact: true }" (click)="collapseNavbar()">
163+
| <a class="dropdown-item" ${routerLink} routerLinkActive="active" [routerLinkActiveOptions]="{ exact: true }" (click)="collapseNavbar()">
162164
| <fa-icon icon="asterisk" [fixedWidth]="true"></fa-icon>
163165
| <span${enableTranslation ? ` ${jhiPrefix}Translate="global.menu.entities.${entityTranslationKeyMenu}"` : ''}>${entityTranslationValue}</span>
164166
| </a>
165167
| </li>`);
166168
const rewriteFileModel = this.generateFileModel(entityMenuPath, 'jhipster-needle-add-entity-to-menu', entityEntry);
169+
rewriteFileModel.regexp = routerLink;
167170

168171
this.addBlockContentToFile(rewriteFileModel, errorMessage);
169172
}
170173

171174
addElementToMenu(routerName, iconName, enableTranslation, translationKeyMenu = routerName, jhiPrefix = 'jhi') {
172175
const errorMessage = `${chalk.yellow('Reference to ') + routerName} ${chalk.yellow('not added to menu.\n')}`;
173176
const entityMenuPath = `${this.CLIENT_MAIN_SRC_DIR}app/layouts/navbar/navbar.component.html`;
177+
const routerLink = `routerLink="${routerName}"`;
174178
// prettier-ignore
175179
const entityEntry = `<li class="nav-item" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}">
176-
<a class="nav-link" routerLink="${routerName}" (click)="collapseNavbar()">
180+
<a class="nav-link" ${routerLink} (click)="collapseNavbar()">
177181
<fa-icon icon="${iconName}" [fixedWidth]="true"></fa-icon>
178182
<span${enableTranslation ? ` ${jhiPrefix}Translate="global.menu.${translationKeyMenu}"` : ''}>${_.startCase(routerName)}</span>
179183
</a>
180184
</li>`;
181185
const rewriteFileModel = this.generateFileModel(entityMenuPath, 'jhipster-needle-add-element-to-menu', entityEntry);
186+
rewriteFileModel.regexp = routerLink;
182187

183188
this.addBlockContentToFile(rewriteFileModel, errorMessage);
184189
this.addIcon(iconName);
@@ -187,14 +192,16 @@ module.exports = class extends needleClientBase {
187192
addElementToAdminMenu(routerName, iconName, enableTranslation, translationKeyMenu = routerName, jhiPrefix = 'jhi') {
188193
const errorMessage = `${chalk.yellow('Reference to ') + routerName} ${chalk.yellow('not added to admin menu.\n')}`;
189194
const navbarAdminPath = `${this.CLIENT_MAIN_SRC_DIR}app/layouts/navbar/navbar.component.html`;
195+
const routerLink = `routerLink="${routerName}"`;
190196
// prettier-ignore
191197
const entityEntry = `<li>
192-
<a class="dropdown-item" routerLink="${routerName}" routerLinkActive="active" (click)="collapseNavbar()">
198+
<a class="dropdown-item" ${routerLink} routerLinkActive="active" (click)="collapseNavbar()">
193199
<fa-icon icon="${iconName}" [fixedWidth]="true"></fa-icon>
194200
<span${enableTranslation ? ` ${jhiPrefix}Translate="global.menu.admin.${translationKeyMenu}"` : ''}>${_.startCase(routerName)}</span>
195201
</a>
196202
</li>`;
197203
const rewriteFileModel = this.generateFileModel(navbarAdminPath, 'jhipster-needle-add-element-to-admin-menu', entityEntry);
204+
rewriteFileModel.regexp = routerLink;
198205

199206
this.addBlockContentToFile(rewriteFileModel, errorMessage);
200207
this.addIcon(iconName);
@@ -218,6 +225,7 @@ module.exports = class extends needleClientBase {
218225
| },`
219226
);
220227
const rewriteFileModel = this.generateFileModel(filePath, needleName, routingEntry);
228+
rewriteFileModel.prettierAware = true;
221229
this.addBlockContentToFile(rewriteFileModel, errorMessage);
222230
}
223231

generators/generator-base.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -391,21 +391,21 @@ module.exports = class JHipsterBaseGenerator extends PrivateBase {
391391
addEntityToMenu(
392392
routerName,
393393
enableTranslation,
394-
clientFramework,
394+
clientFramework = this.clientFramework,
395395
entityTranslationKeyMenu = _.camelCase(routerName),
396396
entityTranslationValue = _.startCase(routerName)
397397
) {
398-
if (this.clientFramework === ANGULAR) {
398+
if (clientFramework === ANGULAR) {
399399
this.needleApi.clientAngular.addEntityToMenu(
400400
routerName,
401401
enableTranslation,
402402
entityTranslationKeyMenu,
403403
entityTranslationValue,
404404
this.jhiPrefix
405405
);
406-
} else if (this.clientFramework === REACT) {
406+
} else if (clientFramework === REACT) {
407407
this.needleApi.clientReact.addEntityToMenu(routerName, enableTranslation, entityTranslationKeyMenu, entityTranslationValue);
408-
} else if (this.clientFramework === VUE) {
408+
} else if (clientFramework === VUE) {
409409
this.needleApi.clientVue.addEntityToMenu(routerName, enableTranslation, entityTranslationKeyMenu, entityTranslationValue);
410410
}
411411
}

generators/utils.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,37 @@ function normalizeLineEndings(str) {
126126
return isWin32 ? str.replace(/\r\n/g, '\n') : str;
127127
}
128128

129+
/**
130+
* Change spaces sequences and '>' to allow any number of spaces or new line prefix
131+
*
132+
* @param {string} str string
133+
* @returns {string} string where CRLF is replaced with LF in Windows
134+
*/
135+
function convertToPrettierExpressions(str) {
136+
return str.replace(/\s+/g, '([\\s\n]*)').replace(/>+/g, '(\n?[\\s]*)>');
137+
}
138+
129139
/**
130140
* Rewrite using the passed argument object.
131141
*
132142
* @param {object} args arguments object (containing splicable, haystack, needle properties) to be used
143+
* @param {string[]} args.splicable - content to be added.
144+
* @param {boolean} [args.prettierAware] - apply prettier aware expressions before looking for applied needles.
145+
* @param {string|RegExp} [args.regexp] - use another content for looking for applied needles.
133146
* @returns {*} re-written file
134147
*/
135148
function rewrite(args) {
136149
// check if splicable is already in the body text
137-
const re = new RegExp(args.splicable.map(line => `\\s*${escapeRegExp(normalizeLineEndings(line))}`).join('\n'));
150+
let re = args.regexp;
151+
if (re) {
152+
re = re.test ? re : new RegExp(re);
153+
} else {
154+
let content = args.splicable.map(line => `\\s*${escapeRegExp(normalizeLineEndings(line))}`).join('\n');
155+
if (args.prettierAware) {
156+
content = convertToPrettierExpressions(content);
157+
}
158+
re = new RegExp(content);
159+
}
138160

139161
if (re.test(normalizeLineEndings(args.haystack))) {
140162
return args.haystack;

0 commit comments

Comments
 (0)