generator-jhipster 7.9.0 → 7.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/cli/environment-builder.js +15 -1
  2. package/cli/jhipster.js +0 -0
  3. package/generators/app/index.js +12 -1
  4. package/generators/bootstrap/index.js +33 -1
  5. package/generators/ci-cd/templates/circle.yml.ejs +3 -13
  6. package/generators/client/files-angular.js +1 -1
  7. package/generators/client/files-react.js +5 -2
  8. package/generators/client/files-vue.js +3 -2
  9. package/generators/client/templates/angular/jest.conf.js.ejs +6 -3
  10. package/generators/client/templates/angular/package.json +18 -18
  11. package/generators/client/templates/angular/package.json.ejs +3 -7
  12. package/generators/client/templates/angular/src/main/webapp/app/admin/admin-routing.module.ts.ejs +1 -1
  13. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.model.ts.ejs +1 -1
  14. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.ts.ejs +17 -15
  15. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.model.ts.ejs +2 -2
  16. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.route.ts.ejs +4 -4
  17. package/generators/client/templates/angular/src/main/webapp/app/core/request/request-util.ts.ejs +4 -2
  18. package/generators/client/templates/angular/src/main/webapp/app/core/util/data-util.service.ts.ejs +1 -1
  19. package/generators/client/templates/angular/src/main/webapp/app/core/util/parse-links.service.ts.ejs +1 -1
  20. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +1 -1
  21. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.component.html.ejs +8 -6
  22. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.component.ts.ejs +6 -11
  23. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.model.spec.ts.ejs +227 -25
  24. package/generators/client/templates/angular/src/main/webapp/app/shared/filter/filter.model.ts.ejs +104 -43
  25. package/generators/client/templates/angular/src/main/webapp/content/scss/global.scss.ejs +8 -0
  26. package/generators/client/templates/angular/tsconfig.json.ejs +0 -1
  27. package/generators/client/templates/angular/tsconfig.spec.json.ejs +2 -3
  28. package/generators/client/templates/angular/webpack/webpack.microfrontend.js.ejs +0 -3
  29. package/generators/client/templates/common/package.json +4 -4
  30. package/generators/client/templates/common/src/main/webapp/swagger-ui/index.html.ejs +1 -1
  31. package/generators/client/templates/react/jest.conf.js.ejs +2 -2
  32. package/generators/client/templates/react/package.json +24 -24
  33. package/generators/client/templates/react/package.json.ejs +3 -7
  34. package/generators/client/templates/react/src/main/webapp/app/config/store.ts.ejs +0 -6
  35. package/generators/client/templates/react/src/main/webapp/app/index.tsx.ejs +4 -5
  36. package/generators/client/templates/react/src/main/webapp/app/modules/administration/administration.reducer.spec.ts.ejs +7 -7
  37. package/generators/client/templates/react/src/main/webapp/app/modules/administration/administration.reducer.ts.ejs +6 -6
  38. package/generators/client/templates/react/src/main/webapp/app/modules/administration/index.tsx.ejs +2 -2
  39. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/admin.tsx.ejs +1 -1
  40. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/authentication.spec.ts.ejs +17 -8
  41. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/authentication.ts.ejs +1 -1
  42. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.spec.ts.ejs +176 -19
  43. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.ts.ejs +46 -13
  44. package/generators/client/templates/react/webpack/webpack.microfrontend.js.jhi.react.ejs +1 -1
  45. package/generators/client/templates/vue/package.json +17 -17
  46. package/generators/client/templates/vue/package.json.ejs +3 -7
  47. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +2 -1
  48. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.vue.ejs +1 -1
  49. package/generators/client/templates/vue/src/main/webapp/app/main.ts.ejs +2 -2
  50. package/generators/client/templates/vue/src/main/webapp/app/router/admin.ts.ejs +2 -2
  51. package/generators/client/templates/vue/src/test/javascript/e2e/modules/administration/administration.spec.ts.ejs +1 -1
  52. package/generators/client/templates/vue/src/test/javascript/e2e/page-objects/administration-page.ts.ejs +1 -1
  53. package/generators/client/templates/vue/src/test/javascript/e2e/page-objects/navbar-page.ts.ejs +2 -2
  54. package/generators/client/templates/vue/src/test/javascript/jest.conf.js.ejs +5 -6
  55. package/generators/client/templates/vue/src/test/javascript/spec/app/account/account.service.spec.ts.ejs +4 -0
  56. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/alert/alert.service.spec.ts.ejs +106 -3
  57. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/config/axios-interceptor.spec.ts.ejs +12 -0
  58. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/config/formatter.spec.ts.ejs +6 -0
  59. package/generators/client/templates/vue/src/test/javascript/spec/app/shared/sort/sorts.spec.ts.ejs +10 -0
  60. package/generators/client/templates/vue/webpack/webpack.common.js.ejs +1 -1
  61. package/generators/client/templates/vue/webpack/webpack.dev.js.ejs +2 -2
  62. package/generators/common/files.js +5 -4
  63. package/generators/common/templates/.husky/pre-commit.ejs +0 -0
  64. package/generators/common/templates/package.json +1 -1
  65. package/generators/common/templates/sonar-project.properties.ejs +19 -11
  66. package/generators/cypress/index.js +1 -1
  67. package/generators/docker-compose/templates/README-DOCKER-COMPOSE.md.ejs +3 -3
  68. package/generators/docker-compose/templates/docker-compose.yml.ejs +1 -1
  69. package/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +32 -14
  70. package/generators/entity/index.js +4 -3
  71. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.html.ejs +1 -1
  72. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.html.ejs +18 -6
  73. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.spec.ts.ejs +1 -1
  74. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +23 -19
  75. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.spec.ts.ejs +3 -1
  76. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.ts.ejs +1 -1
  77. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-form.service.ts.ejs +1 -1
  78. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity.component.ts.ejs +2 -2
  79. package/generators/entity-server/templates/src/main/java/package/common/delete_template.ejs +7 -3
  80. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +2 -2
  81. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +15 -5
  82. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.spring_data_persistable.ejs +8 -1
  83. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryInternalImpl_reactive.java.ejs +5 -0
  84. package/generators/entity-server/templates/src/main/java/package/service/EntityQueryService.java.ejs +4 -4
  85. package/generators/entity-server/templates/src/main/java/package/service/EntityService.java.ejs +6 -4
  86. package/generators/entity-server/templates/src/main/java/package/service/criteria/EntityCriteria.java.ejs +3 -26
  87. package/generators/entity-server/templates/src/main/java/package/service/dto/EntityDTO.java.ejs +1 -0
  88. package/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs +1 -1
  89. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +33 -28
  90. package/generators/generate-blueprint/constants.mjs +46 -6
  91. package/generators/generate-blueprint/esm.mjs +0 -0
  92. package/generators/generate-blueprint/files.mjs +7 -5
  93. package/generators/generate-blueprint/generator.mjs +73 -19
  94. package/generators/generate-blueprint/templates/cli/cli.mjs.ejs +0 -0
  95. package/generators/generate-blueprint/templates/generators/generator/generator.spec.mjs.ejs +1 -1
  96. package/generators/generate-blueprint/templates/generators/generator/templates/template-file.ejs +0 -0
  97. package/generators/generator-base-blueprint.js +23 -1
  98. package/generators/generator-base-entities.cjs +5 -1
  99. package/generators/generator-base.js +82 -15
  100. package/generators/generator-constants.js +17 -23
  101. package/generators/init/templates/.husky/pre-commit +0 -0
  102. package/generators/kubernetes/templates/deployment.yml.ejs +1 -1
  103. package/generators/kubernetes/templates/ingress.yml.ejs +1 -1
  104. package/generators/kubernetes/templates/istio/gateway.yml.ejs +1 -1
  105. package/generators/kubernetes/templates/kubectl-apply.sh.ejs +0 -0
  106. package/generators/kubernetes/templates/kustomize/kustomization.yml.ejs +1 -1
  107. package/generators/kubernetes/templates/service.yml.ejs +1 -1
  108. package/generators/kubernetes-knative/templates/istio/gateway.yml.ejs +1 -1
  109. package/generators/kubernetes-knative/templates/kubectl-apply.sh.ejs +0 -0
  110. package/generators/kubernetes-knative/templates/service.yml.ejs +3 -3
  111. package/generators/languages/templates/src/main/webapp/i18n/al/health.json.ejs +1 -1
  112. package/generators/languages/templates/src/main/webapp/i18n/ar-ly/health.json.ejs +1 -1
  113. package/generators/languages/templates/src/main/webapp/i18n/bg/health.json.ejs +1 -1
  114. package/generators/languages/templates/src/main/webapp/i18n/bn/health.json.ejs +1 -1
  115. package/generators/languages/templates/src/main/webapp/i18n/by/health.json.ejs +1 -1
  116. package/generators/languages/templates/src/main/webapp/i18n/ca/health.json.ejs +1 -1
  117. package/generators/languages/templates/src/main/webapp/i18n/cs/health.json.ejs +1 -1
  118. package/generators/languages/templates/src/main/webapp/i18n/da/health.json.ejs +1 -1
  119. package/generators/languages/templates/src/main/webapp/i18n/de/health.json.ejs +1 -1
  120. package/generators/languages/templates/src/main/webapp/i18n/el/activate.json.ejs +1 -1
  121. package/generators/languages/templates/src/main/webapp/i18n/el/health.json.ejs +1 -1
  122. package/generators/languages/templates/src/main/webapp/i18n/el/password.json +1 -1
  123. package/generators/languages/templates/src/main/webapp/i18n/el/register.json +3 -3
  124. package/generators/languages/templates/src/main/webapp/i18n/el/tracker.json +1 -1
  125. package/generators/languages/templates/src/main/webapp/i18n/el/user-management.json +9 -9
  126. package/generators/languages/templates/src/main/webapp/i18n/en/health.json.ejs +1 -1
  127. package/generators/languages/templates/src/main/webapp/i18n/es/health.json.ejs +1 -1
  128. package/generators/languages/templates/src/main/webapp/i18n/et/health.json.ejs +1 -1
  129. package/generators/languages/templates/src/main/webapp/i18n/fa/health.json.ejs +1 -1
  130. package/generators/languages/templates/src/main/webapp/i18n/fi/health.json.ejs +1 -1
  131. package/generators/languages/templates/src/main/webapp/i18n/fr/health.json.ejs +1 -1
  132. package/generators/languages/templates/src/main/webapp/i18n/gl/health.json.ejs +1 -1
  133. package/generators/languages/templates/src/main/webapp/i18n/hi/health.json.ejs +1 -1
  134. package/generators/languages/templates/src/main/webapp/i18n/hr/health.json.ejs +1 -1
  135. package/generators/languages/templates/src/main/webapp/i18n/hu/health.json.ejs +1 -1
  136. package/generators/languages/templates/src/main/webapp/i18n/hy/health.json.ejs +1 -1
  137. package/generators/languages/templates/src/main/webapp/i18n/in/health.json.ejs +1 -1
  138. package/generators/languages/templates/src/main/webapp/i18n/it/health.json.ejs +1 -1
  139. package/generators/languages/templates/src/main/webapp/i18n/ja/health.json.ejs +1 -1
  140. package/generators/languages/templates/src/main/webapp/i18n/ko/health.json.ejs +1 -1
  141. package/generators/languages/templates/src/main/webapp/i18n/mr/health.json.ejs +1 -1
  142. package/generators/languages/templates/src/main/webapp/i18n/my/health.json.ejs +1 -1
  143. package/generators/languages/templates/src/main/webapp/i18n/nl/health.json.ejs +1 -1
  144. package/generators/languages/templates/src/main/webapp/i18n/pa/health.json.ejs +1 -1
  145. package/generators/languages/templates/src/main/webapp/i18n/pl/health.json.ejs +1 -1
  146. package/generators/languages/templates/src/main/webapp/i18n/pt-br/health.json.ejs +1 -1
  147. package/generators/languages/templates/src/main/webapp/i18n/pt-pt/health.json.ejs +1 -1
  148. package/generators/languages/templates/src/main/webapp/i18n/ro/health.json.ejs +1 -1
  149. package/generators/languages/templates/src/main/webapp/i18n/ru/health.json.ejs +1 -1
  150. package/generators/languages/templates/src/main/webapp/i18n/si/health.json.ejs +1 -1
  151. package/generators/languages/templates/src/main/webapp/i18n/sk/health.json.ejs +1 -1
  152. package/generators/languages/templates/src/main/webapp/i18n/sr/health.json.ejs +1 -1
  153. package/generators/languages/templates/src/main/webapp/i18n/sv/health.json.ejs +1 -1
  154. package/generators/languages/templates/src/main/webapp/i18n/ta/health.json.ejs +1 -1
  155. package/generators/languages/templates/src/main/webapp/i18n/te/health.json.ejs +1 -1
  156. package/generators/languages/templates/src/main/webapp/i18n/th/health.json.ejs +1 -1
  157. package/generators/languages/templates/src/main/webapp/i18n/tr/health.json.ejs +1 -1
  158. package/generators/languages/templates/src/main/webapp/i18n/ua/health.json.ejs +1 -1
  159. package/generators/languages/templates/src/main/webapp/i18n/uz-Latn-uz/health.json.ejs +1 -1
  160. package/generators/languages/templates/src/main/webapp/i18n/vi/health.json.ejs +1 -1
  161. package/generators/languages/templates/src/main/webapp/i18n/zh-cn/health.json.ejs +1 -1
  162. package/generators/languages/templates/src/main/webapp/i18n/zh-tw/health.json.ejs +1 -1
  163. package/generators/maven/templates/mvnw +0 -0
  164. package/generators/openshift/templates/deployment.yml.ejs +2 -2
  165. package/generators/server/cleanup-elasticsearch.js +5 -0
  166. package/generators/server/files.js +17 -8
  167. package/generators/server/index.js +0 -2
  168. package/generators/server/templates/build.gradle.ejs +6 -14
  169. package/generators/server/templates/gradle/profile_dev.gradle.ejs +1 -1
  170. package/generators/server/templates/gradle/profile_prod.gradle.ejs +1 -1
  171. package/generators/server/templates/gradle.properties.ejs +6 -4
  172. package/generators/server/templates/gradlew +0 -0
  173. package/generators/server/templates/mvnw +0 -0
  174. package/generators/server/templates/npmw +0 -0
  175. package/generators/server/templates/npmw.cmd +31 -29
  176. package/generators/server/templates/package.json.ejs +2 -2
  177. package/generators/server/templates/pom.xml.ejs +12 -23
  178. package/generators/server/templates/sql/common/src/test/java/package/config/MsSqlTestContainer.java.ejs +2 -3
  179. package/generators/server/templates/src/main/docker/app.yml.ejs +7 -1
  180. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +32 -14
  181. package/generators/server/templates/src/main/docker/jhipster-control-center.yml.ejs +1 -1
  182. package/generators/server/templates/src/main/docker/prometheus/prometheus.yml.ejs +1 -1
  183. package/generators/server/templates/src/main/java/package/Application.java.ejs +11 -4
  184. package/generators/server/templates/src/main/java/package/config/CRLFLogConverter.java.ejs +57 -0
  185. package/generators/server/templates/src/main/java/package/config/EurekaWorkaroundConfiguration.java.ejs +49 -0
  186. package/generators/server/templates/src/main/java/package/config/LoggingConfiguration.java.ejs +4 -4
  187. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +17 -18
  188. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +13 -5
  189. package/generators/server/templates/src/main/java/package/domain/AbstractAuditingEntity.java.ejs +5 -6
  190. package/generators/server/templates/src/main/java/package/domain/User.java.ejs +1 -1
  191. package/generators/server/templates/src/main/java/package/repository/UserRepository.java.ejs +1 -1
  192. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +13 -6
  193. package/generators/server/templates/src/main/java/package/service/dto/AdminUserDTO.java.ejs +3 -1
  194. package/generators/server/templates/src/main/java/package/service/dto/PasswordChangeDTO.java.ejs +5 -1
  195. package/generators/server/templates/src/main/java/package/service/dto/UserDTO.java.ejs +3 -1
  196. package/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs +15 -42
  197. package/generators/server/templates/src/main/java/package/web/rest/errors/BadRequestAlertException.java.ejs +1 -0
  198. package/generators/server/templates/src/main/java/package/web/rest/errors/EmailAlreadyUsedException.java.ejs +1 -0
  199. package/generators/server/templates/src/main/java/package/web/rest/errors/InvalidPasswordException.java.ejs +1 -0
  200. package/generators/server/templates/src/main/java/package/web/rest/errors/LoginAlreadyUsedException.java.ejs +1 -0
  201. package/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +1 -1
  202. package/generators/server/templates/src/main/resources/config/application-prod.yml.ejs +3 -3
  203. package/generators/server/templates/src/main/resources/config/application.yml.ejs +4 -2
  204. package/generators/server/templates/src/main/resources/config/liquibase/master.xml.ejs +3 -8
  205. package/generators/server/templates/src/main/resources/logback-spring.xml.ejs +5 -0
  206. package/generators/server/templates/src/test/java/package/config/{ElasticsearchReactiveTestConfiguration.java.ejs → ElasticsearchTestConfiguration.java.ejs} +3 -3
  207. package/generators/server/templates/src/test/java/package/config/ElasticsearchTestContainer.java.ejs +1 -0
  208. package/generators/server/templates/src/test/java/package/config/JHipsterBlockHoundIntegration.java.ejs +3 -0
  209. package/generators/server/templates/src/test/java/package/config/TestContainersSpringContextCustomizerFactory.java.ejs +2 -2
  210. package/generators/sql-constants.js +5 -2
  211. package/generators/utils.js +43 -3
  212. package/generators/workspaces/index.js +2 -1
  213. package/jdl/exporters/jdl-exporter.js +6 -1
  214. package/jdl/jhipster/application-options.js +2 -1
  215. package/jdl/jhipster/binary-options.js +2 -2
  216. package/jdl/jhipster/default-application-options.js +11 -8
  217. package/jdl/jhipster/entity-options.js +1 -0
  218. package/jdl/jhipster/search-engine-types.js +1 -0
  219. package/lib/constants/priorities.cjs +16 -0
  220. package/lib/constants/priorities.mjs +1 -0
  221. package/lib/index.js +2 -0
  222. package/lib/support/base.cjs +2 -1
  223. package/package.json +7 -6
  224. package/utils/blueprint.js +10 -0
  225. package/utils/field.js +9 -9
  226. package/generators/client/templates/react/src/main/webapp/app/config/translation-middleware.ts.ejs +0 -58
  227. package/generators/server/templates/.npmrc.ejs +0 -1
@@ -20,6 +20,7 @@ const assert = require('assert');
20
20
  const chalk = require('chalk');
21
21
  const _ = require('lodash');
22
22
  const path = require('path');
23
+ const { existsSync } = require('fs');
23
24
  const Environment = require('yeoman-environment');
24
25
  const { CLI_NAME, logger } = require('./utils');
25
26
  const { loadYoRc, packageNameToNamespace } = require('../generators/utils');
@@ -88,7 +89,7 @@ module.exports = class EnvironmentBuilder {
88
89
  }
89
90
 
90
91
  prepare({ blueprints, lookups } = {}) {
91
- this._lookupJHipster()._loadBlueprints(blueprints)._lookups(lookups)._lookupBlueprints()._loadSharedOptions();
92
+ this._lookupJHipster()._lookupLocalBlueprint()._loadBlueprints(blueprints)._lookups(lookups)._lookupBlueprints()._loadSharedOptions();
92
93
  return this;
93
94
  }
94
95
 
@@ -125,6 +126,19 @@ module.exports = class EnvironmentBuilder {
125
126
  return this;
126
127
  }
127
128
 
129
+ _lookupLocalBlueprint() {
130
+ const localBlueprintPath = path.join(process.cwd(), '.blueprint');
131
+ if (existsSync(localBlueprintPath)) {
132
+ // Register jhipster generators.
133
+ const generators = this.env.lookup({ packagePaths: [localBlueprintPath], lookups: ['.'] });
134
+ if (generators.length > 0) {
135
+ this.env.alias(/^@jhipster\/jhipster-local(:(.*))?$/, '.blueprint$1');
136
+ this.env.sharedOptions.localBlueprint = true;
137
+ }
138
+ }
139
+ return this;
140
+ }
141
+
128
142
  _lookups(lookups = []) {
129
143
  lookups = [].concat(lookups);
130
144
  lookups.forEach(lookup => {
package/cli/jhipster.js CHANGED
File without changes
@@ -301,6 +301,11 @@ module.exports = class JHipsterAppGenerator extends BaseBlueprintGenerator {
301
301
  type: Boolean,
302
302
  });
303
303
 
304
+ this.option('auto-crlf', {
305
+ desc: 'Detect line endings',
306
+ type: Boolean,
307
+ });
308
+
304
309
  // Just constructing help, stop here
305
310
  if (this.options.help) {
306
311
  return;
@@ -407,6 +412,12 @@ module.exports = class JHipsterAppGenerator extends BaseBlueprintGenerator {
407
412
  this.jhipsterConfig.clientFramework === CLIENT_FRAMEWORK_NO;
408
413
  this.jhipsterConfig.withAdminUi = false;
409
414
  this.jhipsterConfig.skipUserManagement = true;
415
+ } else {
416
+ this.jhipsterConfig.skipClient = this.jhipsterConfig.skipClient || this.jhipsterConfig.clientFramework === CLIENT_FRAMEWORK_NO;
417
+ }
418
+
419
+ if (this.jhipsterConfig.skipClient) {
420
+ this.jhipsterConfig.clientFramework = CLIENT_FRAMEWORK_NO;
410
421
  }
411
422
 
412
423
  // Set app defaults
@@ -441,7 +452,7 @@ module.exports = class JHipsterAppGenerator extends BaseBlueprintGenerator {
441
452
  if (!this.jhipsterConfig.skipServer) {
442
453
  await this.composeWithJHipster(GENERATOR_SERVER, true);
443
454
  }
444
- if (!this.jhipsterConfig.skipClient) {
455
+ if (this.jhipsterConfig.clientFramework !== CLIENT_FRAMEWORK_NO) {
445
456
  await this.composeWithJHipster(GENERATOR_CLIENT, true);
446
457
  }
447
458
  if (!this.configOptions.skipI18n) {
@@ -25,6 +25,9 @@ const {
25
25
  patternFilter,
26
26
  patternSpy,
27
27
  } = require('yeoman-environment/transform');
28
+ const { transform } = require('p-transform');
29
+ const { stat } = require('fs/promises');
30
+ const { isBinaryFile } = require('isbinaryfile');
28
31
 
29
32
  const { hasState, setModifiedFileState } = State;
30
33
 
@@ -44,6 +47,7 @@ const { prepareFieldForTemplates } = require('../../utils/field');
44
47
  const { createUserEntity } = require('../../utils/user');
45
48
  const { OAUTH2 } = require('../../jdl/jhipster/authentication-types');
46
49
  const { CommonDBTypes } = require('../../jdl/jhipster/field-types');
50
+ const { detectCrLf, normalizeLineEndings } = require('../utils');
47
51
 
48
52
  const { LONG: TYPE_LONG } = CommonDBTypes;
49
53
 
@@ -161,7 +165,7 @@ module.exports = class extends BaseGenerator {
161
165
  */
162
166
  async _commitSharedFs(stream = this.env.sharedFs.stream(), skipPrettier = this.options.skipPrettier) {
163
167
  const { skipYoResolve } = this.options;
164
- const { withGeneratedFlag } = this.jhipsterConfig;
168
+ const { withGeneratedFlag, autoCrlf } = this.jhipsterConfig;
165
169
 
166
170
  // JDL writes directly to disk, set the file as modified so prettier will be applied
167
171
  const { upgradeCommand, ignoreErrors } = this.options;
@@ -199,6 +203,33 @@ module.exports = class extends BaseGenerator {
199
203
  file.conflicter = 'force';
200
204
  }, '**/.jhipster/*.json').name('jhipster:config-files:force');
201
205
 
206
+ const convertToCRLF = () =>
207
+ transform(async file => {
208
+ if (!file.contents) {
209
+ return file;
210
+ }
211
+ if (await isBinaryFile(file.contents)) {
212
+ return file;
213
+ }
214
+ const fstat = await stat(file.path);
215
+ if (!fstat.isFile()) {
216
+ return file;
217
+ }
218
+ const attributes = Object.fromEntries(
219
+ (await this.createGit().raw('check-attr', 'binary', 'eol', '--', file.path))
220
+ .split(/\r\n|\r|\n/)
221
+ .map(attr => attr.split(':'))
222
+ .map(([_file, attr, value]) => [attr, value])
223
+ );
224
+ if (attributes.binary === 'set' || attributes.eol === 'lf') {
225
+ return file;
226
+ }
227
+ if (attributes.eol === 'crlf' || (await detectCrLf(file.path))) {
228
+ file.contents = Buffer.from(normalizeLineEndings(file.contents.toString(), '\r\n'));
229
+ }
230
+ return file;
231
+ }, 'jhipster:crlf');
232
+
202
233
  const transformStreams = [
203
234
  // multi-step changes the file path, should be executed earlier in the pipeline
204
235
  new MultiStepTransform(),
@@ -207,6 +238,7 @@ module.exports = class extends BaseGenerator {
207
238
  createForceWriteConfigFiles(),
208
239
  ...(withGeneratedFlag ? [generatedAnnotationTransform(this)] : []),
209
240
  ...(skipPrettier ? [] : [createApplyPrettierTransform()]),
241
+ ...(autoCrlf ? [convertToCRLF()] : []),
210
242
  createConflicterCheckTransform(this.env.conflicter, conflicterStatus),
211
243
  createConflicterStatusTransform(),
212
244
  ];
@@ -19,21 +19,11 @@
19
19
  version: 2.1
20
20
  jobs:
21
21
  build:
22
- docker:
23
- - image: jhipster/jhipster:v<%= jhipsterVersion %>
22
+ machine:
23
+ image: ubuntu-2004:current
24
+ resource_class: large
24
25
  steps:
25
26
  - checkout
26
- - setup_remote_docker:
27
- version: 19.03.13
28
- - run:
29
- name: Install docker and docker-compose
30
- command: |
31
- echo jhipster | sudo -S apt update
32
- echo jhipster | sudo -S apt install -y docker.io
33
- echo jhipster | sudo -S curl -Lo /usr/local/bin/docker-compose $(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep "browser_download_url.*docker-compose-Linux" | cut -d ':' -f 2,3 | tr -d \" | tr -d ' ')
34
- echo jhipster | sudo -S chmod +x /usr/local/bin/docker-compose
35
- docker version
36
- docker-compose version
37
27
  # Download and cache dependencies
38
28
  - restore_cache:
39
29
  keys:
@@ -270,7 +270,7 @@ const files = {
270
270
  ],
271
271
  },
272
272
  {
273
- condition: generator => generator.applicationType === GATEWAY && generator.serviceDiscoveryType,
273
+ condition: generator => generator.applicationType === GATEWAY && generator.serviceDiscoveryAny,
274
274
  path: ANGULAR_DIR,
275
275
  templates: [
276
276
  'admin/gateway/gateway.route.ts',
@@ -76,7 +76,7 @@ const files = {
76
76
  {
77
77
  condition: generator => generator.enableTranslation,
78
78
  path: REACT_DIR,
79
- templates: ['config/translation.ts', 'config/translation-middleware.ts'],
79
+ templates: ['config/translation.ts'],
80
80
  },
81
81
  {
82
82
  condition: generator => generator.websocket === SPRING_WEBSOCKET,
@@ -199,7 +199,7 @@ const files = {
199
199
  ],
200
200
  },
201
201
  {
202
- condition: generator => generator.applicationType === GATEWAY && generator.serviceDiscoveryType,
202
+ condition: generator => generator.applicationType === GATEWAY && generator.serviceDiscoveryAny,
203
203
  path: REACT_DIR,
204
204
  templates: ['modules/administration/gateway/gateway.tsx'],
205
205
  },
@@ -359,6 +359,9 @@ function cleanup() {
359
359
  this.removeFile(`${CLIENT_MAIN_SRC_DIR}app/shared/error/error-boundary-route.tsx`);
360
360
  this.removeFile(`${CLIENT_MAIN_SRC_DIR}app/shared/error/error-boundary-route.spec.tsx`);
361
361
  }
362
+ if (this.isJhipsterVersionLessThan('7.9.3')) {
363
+ this.removeFile(`${CLIENT_MAIN_SRC_DIR}app/config/translation-middleware.ts`);
364
+ }
362
365
  }
363
366
 
364
367
  function writeFiles() {
@@ -238,7 +238,7 @@ const vueFiles = {
238
238
  ],
239
239
  },
240
240
  {
241
- condition: generator => generator.applicationType === GATEWAY && generator.serviceDiscoveryType,
241
+ condition: generator => generator.applicationType === GATEWAY && generator.serviceDiscoveryAny,
242
242
  path: VUE_DIR,
243
243
  templates: ['admin/gateway/gateway.vue', 'admin/gateway/gateway.component.ts', 'admin/gateway/gateway.service.ts'],
244
244
  },
@@ -267,6 +267,7 @@ const vueFiles = {
267
267
  'spec/app/shared/alert/alert.service.spec.ts',
268
268
  'spec/app/shared/config/axios-interceptor.spec.ts',
269
269
  'spec/app/shared/data/data-utils.service.spec.ts',
270
+ 'spec/app/shared/sort/sorts.spec.ts',
270
271
  ],
271
272
  },
272
273
  {
@@ -329,7 +330,7 @@ const vueFiles = {
329
330
  ],
330
331
  },
331
332
  {
332
- condition: generator => generator.applicationType === GATEWAY && generator.serviceDiscoveryType,
333
+ condition: generator => generator.applicationType === GATEWAY && generator.serviceDiscoveryAny,
333
334
  path: CLIENT_TEST_SRC_DIR,
334
335
  templates: ['spec/app/admin/gateway/gateway.component.spec.ts'],
335
336
  },
@@ -33,10 +33,13 @@ module.exports = {
33
33
  cacheDirectory: '<rootDir>/<%= BUILD_DIR %>jest-cache',
34
34
  coverageDirectory: '<rootDir>/<%= BUILD_DIR %>test-results/',
35
35
  moduleNameMapper: pathsToModuleNameMapper(paths, { prefix: `<rootDir>/${baseUrl}/` }),
36
- reporters: ['default', ['jest-junit', { outputDirectory: '<rootDir>/<%= BUILD_DIR %>test-results/', outputName: 'TESTS-results-jest.xml' }]],
37
- testResultsProcessor: 'jest-sonar-reporter',
36
+ reporters: [
37
+ 'default',
38
+ ['jest-junit', { outputDirectory: '<rootDir>/<%= BUILD_DIR %>test-results/', outputName: 'TESTS-results-jest.xml' }],
39
+ ['jest-sonar', { outputDirectory: './<%= BUILD_DIR %>test-results/jest', outputName: 'TESTS-results-sonar.xml' }],
40
+ ],
38
41
  testMatch: ['<rootDir>/<%= CLIENT_MAIN_SRC_DIR %>app/**/@(*.)@(spec.ts)'],
39
42
  testEnvironmentOptions: {
40
- url: 'http://localhost/',
43
+ url: 'https://jhipster.tech',
41
44
  },
42
45
  };
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "dependencies": {
3
- "@angular/common": "14.1.0",
3
+ "@angular/common": "14.2.0",
4
4
  "@fortawesome/angular-fontawesome": "0.11.1",
5
- "@fortawesome/fontawesome-svg-core": "6.1.2",
6
- "@fortawesome/free-solid-svg-icons": "6.1.2",
5
+ "@fortawesome/fontawesome-svg-core": "6.2.0",
6
+ "@fortawesome/free-solid-svg-icons": "6.2.0",
7
7
  "@ng-bootstrap/ng-bootstrap": "13.0.0",
8
8
  "@ngx-translate/core": "14.0.0",
9
9
  "@ngx-translate/http-loader": "7.0.0",
10
- "@popperjs/core": "2.11.5",
10
+ "@popperjs/core": "2.11.6",
11
11
  "bootstrap": "5.2.0",
12
12
  "bootswatch": "5.2.0",
13
13
  "ngx-cookie-service": "14.0.1",
@@ -18,32 +18,32 @@
18
18
  "zone.js": "0.11.6"
19
19
  },
20
20
  "devDependencies": {
21
- "@angular/cli": "14.1.0",
22
- "@angular-builders/custom-webpack": "14.0.0",
23
- "@angular-builders/jest": "14.0.0",
24
- "@angular-eslint/eslint-plugin": "14.0.2",
25
- "@types/node": "16.11.47",
26
- "@types/jest": "28.1.6",
27
- "@typescript-eslint/eslint-plugin": "5.31.0",
21
+ "@angular/cli": "14.2.1",
22
+ "@angular-builders/custom-webpack": "14.0.1",
23
+ "@angular-builders/jest": "14.0.1",
24
+ "@angular-eslint/eslint-plugin": "14.0.3",
25
+ "@types/node": "16.11.56",
26
+ "@types/jest": "28.1.8",
27
+ "@typescript-eslint/eslint-plugin": "5.36.1",
28
28
  "browser-sync": "2.27.10",
29
29
  "browser-sync-webpack-plugin": "2.3.0",
30
30
  "copy-webpack-plugin": "11.0.0",
31
- "eslint": "8.20.0",
31
+ "eslint": "8.23.0",
32
32
  "eslint-config-prettier": "8.5.0",
33
33
  "eslint-webpack-plugin": "3.2.0",
34
34
  "folder-hash": "4.0.2",
35
35
  "jest": "28.1.3",
36
- "jest-preset-angular": "12.2.0",
36
+ "jest-preset-angular": "12.2.2",
37
37
  "jest-date-mock": "1.0.8",
38
- "jest-junit": "14.0.0",
39
- "jest-sonar-reporter": "2.0.0",
38
+ "jest-junit": "14.0.1",
39
+ "jest-sonar": "0.2.12",
40
40
  "merge-jsons-webpack-plugin": "2.0.1",
41
41
  "postcss-rtlcss": "3.7.2",
42
42
  "rimraf": "3.0.2",
43
- "ts-jest": "28.0.7",
44
- "typescript": "4.7.4",
43
+ "ts-jest": "28.0.8",
44
+ "typescript": "4.8.2",
45
45
  "webpack": "5.74.0",
46
- "webpack-bundle-analyzer": "4.5.0",
46
+ "webpack-bundle-analyzer": "4.6.1",
47
47
  "webpack-merge": "5.8.0",
48
48
  "webpack-notifier": "1.15.0"
49
49
  }
@@ -120,7 +120,7 @@
120
120
  "jest-preset-angular": "<%= dependabotPackageJson.devDependencies['jest-preset-angular'] %>",
121
121
  "jest-date-mock": "<%= dependabotPackageJson.devDependencies['jest-date-mock'] %>",
122
122
  "jest-junit": "<%= dependabotPackageJson.devDependencies['jest-junit'] %>",
123
- "jest-sonar-reporter": "<%= dependabotPackageJson.devDependencies['jest-sonar-reporter'] %>",
123
+ "jest-sonar": "<%= dependabotPackageJson.devDependencies['jest-sonar'] %>",
124
124
  "prettier": "<%= dependabotPackageJson.devDependencies['prettier'] %>",
125
125
  "prettier-plugin-packagejson": "<%= dependabotPackageJson.devDependencies['prettier-plugin-packagejson'] %>",
126
126
  <%_ if (enableI18nRTL) { _%>
@@ -144,8 +144,8 @@
144
144
  "default_environment": "prod"
145
145
  },
146
146
  "scripts": {
147
- "prettier:check": "prettier --check \"{,src/**/,webpack/}*.{<%= getPrettierExtensions() %>}\"",
148
- "prettier:format": "prettier --write \"{,src/**/,webpack/}*.{<%= getPrettierExtensions() %>}\"",
147
+ "prettier:check": "prettier --check \"{,src/**/,webpack/,.blueprint/**/}*.{<%= getPrettierExtensions() %>}\"",
148
+ "prettier:format": "prettier --write \"{,src/**/,webpack/,.blueprint/**/}*.{<%= getPrettierExtensions() %>}\"",
149
149
  "lint": "eslint . --ext .js,.ts",
150
150
  "lint:fix": "<%= clientPackageManager %> run lint -- --fix",
151
151
  "cleanup": "rimraf <%= DIST_DIR %>",
@@ -191,9 +191,5 @@
191
191
  "webapp:dev-ssl": "ng serve --ssl",
192
192
  "webapp:prod": "<%= clientPackageManager %> run clean-www && <%= clientPackageManager %> run webapp:build:prod",
193
193
  "webapp:test": "<%= clientPackageManager %> run test --"
194
- },
195
- "jestSonar": {
196
- "reportPath": "<%= BUILD_DIR %>test-results/jest",
197
- "reportFile": "TESTS-results-sonar.xml"
198
194
  }
199
195
  }
@@ -55,7 +55,7 @@ import { RouterModule } from '@angular/router';
55
55
  loadChildren: () => import('./metrics/metrics.module').then(m => m.MetricsModule),
56
56
  },
57
57
  <%_ } _%>
58
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
58
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
59
59
  {
60
60
  path: 'gateway',
61
61
  loadChildren: () => import('./gateway/gateway.module').then(m => m.GatewayModule),
@@ -22,7 +22,7 @@ export type HealthKey =
22
22
  <%_ if (messageBrokerKafka) { _%>
23
23
  | 'binders'
24
24
  <%_ } _%>
25
- <%_ if (applicationTypeGateway || serviceDiscoveryType) { _%>
25
+ <%_ if (applicationTypeGateway || serviceDiscoveryAny) { _%>
26
26
  | 'discoveryComposite'
27
27
  | 'refreshScope'
28
28
  | 'clientConfigServer'
@@ -23,14 +23,17 @@ import { ActivatedRoute } from '@angular/router';
23
23
  <%_ if (enableTranslation) { _%>
24
24
  import { LANGUAGES } from 'app/config/language.constants';
25
25
  <%_ } _%>
26
- import { User } from '../user-management.model';
26
+ import { IUser } from '../user-management.model';
27
27
  import { UserManagementService } from '../service/user-management.service';
28
28
 
29
- const initialUser: User = {
29
+ const userTemplate = {} as IUser;
30
+
31
+ const newUser: IUser = {
30
32
  <%_ if (enableTranslation) { _%>
31
33
  langKey: '<%= nativeLanguage %>',
32
34
  <%_ } _%>
33
- };
35
+ activated: true,
36
+ } as IUser;
34
37
 
35
38
  @Component({
36
39
  selector: '<%= jhiPrefixDashed %>-user-mgmt-update',
@@ -44,8 +47,8 @@ export class UserManagementUpdateComponent implements OnInit {
44
47
  isSaving = false;
45
48
 
46
49
  editForm = new FormGroup({
47
- id: new FormControl(initialUser.id),
48
- login: new FormControl(initialUser.login, {
50
+ id: new FormControl(userTemplate.id),
51
+ login: new FormControl(userTemplate.login, {
49
52
  nonNullable: true,
50
53
  validators: [
51
54
  Validators.required,
@@ -54,17 +57,17 @@ export class UserManagementUpdateComponent implements OnInit {
54
57
  Validators.pattern('^[a-zA-Z0-9!$&*+=?^_`{|}~.-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$|^[_.@A-Za-z0-9-]+$'),
55
58
  ],
56
59
  }),
57
- firstName: new FormControl(initialUser.firstName, { validators: [Validators.maxLength(50)] }),
58
- lastName: new FormControl(initialUser.lastName, { validators: [Validators.maxLength(50)] }),
59
- email: new FormControl(initialUser.email, {
60
+ firstName: new FormControl(userTemplate.firstName, { validators: [Validators.maxLength(50)] }),
61
+ lastName: new FormControl(userTemplate.lastName, { validators: [Validators.maxLength(50)] }),
62
+ email: new FormControl(userTemplate.email, {
60
63
  nonNullable: true,
61
64
  validators: [Validators.minLength(5), Validators.maxLength(254), Validators.email],
62
65
  }),
63
- activated: new FormControl(initialUser.activated, { nonNullable: true }),
66
+ activated: new FormControl(userTemplate.activated, { nonNullable: true }),
64
67
  <%_ if (enableTranslation) { _%>
65
- langKey: new FormControl(initialUser.langKey, { nonNullable: true }),
68
+ langKey: new FormControl(userTemplate.langKey, { nonNullable: true }),
66
69
  <%_ } _%>
67
- authorities: new FormControl(initialUser.authorities, { nonNullable: true }),
70
+ authorities: new FormControl(userTemplate.authorities, { nonNullable: true }),
68
71
  });
69
72
 
70
73
  constructor(private userService: UserManagementService, private route: ActivatedRoute) {}
@@ -72,10 +75,9 @@ export class UserManagementUpdateComponent implements OnInit {
72
75
  ngOnInit(): void {
73
76
  this.route.data.subscribe(({ user }) => {
74
77
  if (user) {
75
- if (user.id === undefined) {
76
- user.activated = true;
77
- }
78
- this.editForm.patchValue(user);
78
+ this.editForm.reset(user);
79
+ } else {
80
+ this.editForm.reset(newUser);
79
81
  }
80
82
  });
81
83
  this.userService.authorities().subscribe(authorities => (this.authorities = authorities));
@@ -20,7 +20,7 @@
20
20
  const idType = getTypescriptKeyType(user.primaryKey.type);
21
21
  _%>
22
22
  export interface IUser {
23
- id?: <%= idType %> | null;
23
+ id: <%= idType %> | null;
24
24
  login?: string;
25
25
  firstName?: string | null;
26
26
  lastName?: string | null;
@@ -36,7 +36,7 @@ export interface IUser {
36
36
 
37
37
  export class User implements IUser {
38
38
  constructor(
39
- public id?: <%= idType %> | null,
39
+ public id: <%= idType %> | null,
40
40
  public login?: string,
41
41
  public firstName?: string | null,
42
42
  public lastName?: string | null,
@@ -20,22 +20,22 @@ import { Injectable } from '@angular/core';
20
20
  import { Resolve, ActivatedRouteSnapshot, Routes } from '@angular/router';
21
21
  import { Observable, of } from 'rxjs';
22
22
 
23
- import { User, IUser } from './user-management.model';
23
+ import { IUser } from './user-management.model';
24
24
  import { UserManagementService } from './service/user-management.service';
25
25
  import { UserManagementComponent } from './list/user-management.component';
26
26
  import { UserManagementDetailComponent } from './detail/user-management-detail.component';
27
27
  import { UserManagementUpdateComponent } from './update/user-management-update.component';
28
28
 
29
29
  @Injectable({ providedIn: 'root' })
30
- export class UserManagementResolve implements Resolve<IUser> {
30
+ export class UserManagementResolve implements Resolve<IUser | null> {
31
31
  constructor(private service: UserManagementService) {}
32
32
 
33
- resolve(route: ActivatedRouteSnapshot): Observable<IUser> {
33
+ resolve(route: ActivatedRouteSnapshot): Observable<IUser | null> {
34
34
  const id = route.params['login'];
35
35
  if (id) {
36
36
  return this.service.find(id);
37
37
  }
38
- return of(new User());
38
+ return of(null);
39
39
  }
40
40
  }
41
41
 
@@ -23,8 +23,10 @@ export const createRequestOption = (req?: any): HttpParams => {
23
23
 
24
24
  if (req) {
25
25
  Object.keys(req).forEach(key => {
26
- if (key !== 'sort' && req[key] && req[key] !== '') {
27
- options = options.set(key, req[key]);
26
+ if (key !== 'sort' && req[key]) {
27
+ for (const value of [].concat(req[key]).filter(v => v !== '')) {
28
+ options = options.append(key, value);
29
+ }
28
30
  }
29
31
  });
30
32
 
@@ -142,6 +142,6 @@ export class DataUtils {
142
142
  }
143
143
 
144
144
  private formatAsBytes(size: number): string {
145
- return size.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ') + ' bytes';
145
+ return size.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ') + ' bytes'; // NOSONAR
146
146
  }
147
147
  }
@@ -45,7 +45,7 @@ export class ParseLinks {
45
45
  throw new Error('section could not be split on ";"');
46
46
  }
47
47
 
48
- const url: string = section[0].replace(/<(.*)>/, '$1').trim();
48
+ const url: string = section[0].replace(/<(.*)>/, '$1').trim(); // NOSONAR
49
49
  const queryString: { [key: string]: string | undefined } = {};
50
50
 
51
51
  url.replace(
@@ -99,7 +99,7 @@
99
99
  </span>
100
100
  </a>
101
101
  <ul class="dropdown-menu" ngbDropdownMenu aria-labelledby="admin-menu">
102
- <%_ if (applicationTypeGateway && serviceDiscoveryType) { _%>
102
+ <%_ if (applicationTypeGateway && serviceDiscoveryAny) { _%>
103
103
  <li>
104
104
  <a class="dropdown-item" routerLink="admin/gateway" routerLinkActive="active" (click)="collapseNavbar()">
105
105
  <fa-icon icon="road" [fixedWidth]="true"></fa-icon>
@@ -1,10 +1,12 @@
1
1
  <div class="filter-display" *ngIf="filters.hasAnyFilterSet()">
2
2
  <span <%= jhiPrefix %>Translate="entity.filters.set"><%- this._getClientTranslation('entity.filters.set') %></span>
3
- <fa-icon icon="times" (click)="clearAllFilters()" title="{{ 'entity.filters.clearAll' | translate }}"></fa-icon >
3
+ <fa-icon icon="times" (click)="clearAllFilters()" title="<% if (enableTranslation) { %>{{ 'entity.filters.clearAll' | translate }}<% } else { %><%- this._getClientTranslation('entity.filters.clearAll') %><% } %>"></fa-icon>
4
4
  <ul>
5
- <li *ngFor="let filterOption of filters.filterOptions">
6
- <span>{{ filterOption.name }}:</span> {{ filterOption.value }}
7
- <fa-icon icon="times" (click)="clearFilter(filterOption.name)" title="{{ 'entity.filters.clear' | translate }}"></fa-icon>
8
- </li>
5
+ <ng-container *ngFor="let filterOption of filters.filterOptions">
6
+ <li *ngFor="let value of filterOption.values">
7
+ <span>{{ filterOption.name }}:</span> {{ value }}
8
+ <fa-icon icon="times" (click)="clearFilter(filterOption.name, value)" title="<% if (enableTranslation) { %>{{ 'entity.filters.clear' | translate }}<% } else { %><%- this._getClientTranslation('entity.filters.clear') %><% } %>"></fa-icon>
9
+ </li>
10
+ </ng-container>
9
11
  </ul>
10
- </div>
12
+ </div>
@@ -1,23 +1,18 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { IFilterableComponent, IFilterOptions } from './filter.model';
1
+ import { Component, Input } from '@angular/core';
2
+ import { IFilterOptions } from './filter.model';
3
3
 
4
4
  @Component({
5
5
  selector: '<%= jhiPrefixDashed %>-filter',
6
6
  templateUrl: './filter.component.html',
7
7
  })
8
- export class FilterComponent implements IFilterableComponent {
9
- @Input()
10
- filters!: IFilterOptions;
11
-
12
- @Output() filterChange = new EventEmitter<IFilterOptions>();
8
+ export class FilterComponent {
9
+ @Input() filters!: IFilterOptions;
13
10
 
14
11
  clearAllFilters(): void {
15
12
  this.filters.clear();
16
- this.filterChange.emit();
17
13
  }
18
14
 
19
- clearFilter(filterName: string): void {
20
- this.filters.removeByName(filterName);
21
- this.filterChange.emit();
15
+ clearFilter(filterName: string, value: string): void {
16
+ this.filters.removeFilter(filterName, value);
22
17
  }
23
18
  }