generator-jhipster 8.4.0 → 8.6.0

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 (430) hide show
  1. package/README.md +3 -4
  2. package/dist/cli/commands.mjs +2 -0
  3. package/dist/cli/environment-builder.mjs +5 -0
  4. package/dist/cli/program.mjs +10 -4
  5. package/dist/generators/angular/entity-files-angular.js +6 -7
  6. package/dist/generators/angular/resources/package.json +20 -20
  7. package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.component.spec.ts.ejs +4 -3
  8. package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.service.spec.ts.ejs +3 -2
  9. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.spec.ts.ejs +4 -5
  10. package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.service.spec.ts.ejs +3 -2
  11. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.spec.ts.ejs +6 -5
  12. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs +3 -6
  13. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.spec.ts.ejs +3 -2
  14. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.spec.ts.ejs +5 -5
  15. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts.ejs +3 -6
  16. package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.service.spec.ts.ejs +3 -2
  17. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.spec.ts.ejs +2 -3
  18. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.ts.ejs +3 -6
  19. package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.service.spec.ts.ejs +3 -2
  20. package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.component.spec.ts.ejs +3 -3
  21. package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.spec.ts.ejs +3 -4
  22. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.component.spec.ts.ejs +3 -3
  23. package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.service.spec.ts.ejs +3 -2
  24. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.component.spec.ts.ejs +4 -4
  25. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.service.spec.ts.ejs +3 -2
  26. package/dist/generators/angular/templates/src/main/webapp/app/admin/health/modal/health-modal.component.spec.ts.ejs +3 -3
  27. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.component.spec.ts.ejs +4 -3
  28. package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.service.spec.ts.ejs +3 -2
  29. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/jvm-threads/jvm-threads.component.ts.ejs +1 -1
  30. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.html.ejs +11 -11
  31. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.spec.ts.ejs +3 -3
  32. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.component.spec.ts.ejs +3 -2
  33. package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.service.spec.ts.ejs +3 -2
  34. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.html.ejs +0 -2
  35. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.spec.ts.ejs +3 -3
  36. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +1 -1
  37. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.spec.ts.ejs +3 -4
  38. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/service/user-management.service.spec.ts.ejs +3 -3
  39. package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.spec.ts.ejs +3 -2
  40. package/dist/generators/angular/templates/src/main/webapp/app/app-page-title-strategy.ts.ejs +1 -1
  41. package/dist/generators/angular/templates/src/main/webapp/app/app.component.ts.ejs +0 -1
  42. package/dist/generators/angular/templates/src/main/webapp/app/app.config.ts.ejs +2 -2
  43. package/dist/generators/angular/templates/src/main/webapp/app/config/uib-pagination.config.ts.ejs +1 -1
  44. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/account.service.spec.ts.ejs +7 -5
  45. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/auth-jwt.service.spec.ts.ejs +3 -2
  46. package/dist/generators/angular/templates/src/main/webapp/app/core/auth/user-route-access.service.ts.ejs +1 -1
  47. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/auth-expired.interceptor.ts.ejs +3 -3
  48. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/auth.interceptor.ts.ejs +2 -2
  49. package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/error-handler.interceptor.ts.ejs +1 -1
  50. package/dist/generators/angular/templates/src/main/webapp/app/core/util/alert.service.spec.ts.ejs +6 -6
  51. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.html.ejs +0 -3
  52. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.spec.ts.ejs +3 -4
  53. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/detail/_entityFile_-detail.component.spec.ts.ejs +2 -2
  54. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.html.ejs +1 -1
  55. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.spec.ts.ejs +2 -3
  56. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.ts.ejs +2 -2
  57. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/route/_entityFile_-routing-resolve.service.spec.ts.ejs +4 -5
  58. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/service/_entityFile_.service.spec.ts.ejs +5 -3
  59. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.spec.ts.ejs +5 -6
  60. package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.ts.ejs +11 -17
  61. package/dist/generators/angular/templates/src/main/webapp/app/layouts/error/error.component.ts.ejs +2 -2
  62. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/active-menu.directive.ts.ejs +6 -6
  63. package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts.ejs +3 -3
  64. package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.spec.ts.ejs +3 -2
  65. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.spec.ts.ejs +2 -2
  66. package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.ts.ejs +3 -4
  67. package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert-error.component.spec.ts.ejs +2 -2
  68. package/dist/generators/angular/templates/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts.ejs +11 -9
  69. package/dist/generators/angular/templates/src/main/webapp/app/shared/auth/has-any-authority.directive.ts.ejs +3 -8
  70. package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.component.html.ejs +6 -2
  71. package/dist/generators/angular/templates/src/main/webapp/app/shared/language/find-language-from-key.pipe.ts.ejs +1 -1
  72. package/dist/generators/angular/templates/src/main/webapp/app/shared/language/translation.module.ts.ejs +2 -2
  73. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts.ejs +10 -10
  74. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.ts.ejs +6 -7
  75. package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort.directive.spec.ts.ejs +4 -4
  76. package/dist/generators/angular/templates/src/main/webapp/content/scss/global.scss.ejs +2 -0
  77. package/dist/generators/app/generator.js +4 -13
  78. package/dist/generators/base/command.js +1 -0
  79. package/dist/generators/base/generator.js +22 -28
  80. package/dist/generators/base/internal/command.js +13 -0
  81. package/dist/generators/base/internal/index.js +1 -0
  82. package/dist/generators/base/priorities.js +12 -1
  83. package/dist/generators/base/shared-data.js +74 -2
  84. package/dist/generators/base/support/config.js +1 -1
  85. package/dist/generators/base/support/jhipster7-context.js +155 -52
  86. package/dist/generators/base-application/generator.js +15 -3
  87. package/dist/generators/base-application/priorities.js +1 -0
  88. package/dist/generators/base-application/support/prepare-entity.js +7 -8
  89. package/dist/generators/base-application/support/prepare-relationship.js +3 -2
  90. package/dist/generators/base-core/generator.js +132 -63
  91. package/dist/generators/bootstrap/generator.js +1 -1
  92. package/dist/generators/bootstrap/support/eslint-worker.js +14 -12
  93. package/dist/generators/bootstrap/support/multi-step-transform/template-file.js +6 -1
  94. package/dist/generators/bootstrap-application/generator.js +1 -1
  95. package/dist/generators/bootstrap-application-base/generator.js +7 -3
  96. package/dist/generators/bootstrap-application-client/generator.js +5 -1
  97. package/dist/generators/bootstrap-application-server/generator.js +1 -0
  98. package/dist/generators/ci-cd/generator.js +1 -1
  99. package/dist/generators/ci-cd/templates/docker-registry.yml.ejs +0 -1
  100. package/dist/generators/ci-cd/templates/jenkins/jenkins.yml.ejs +0 -1
  101. package/dist/generators/client/command.js +2 -2
  102. package/dist/generators/client/generator.js +2 -3
  103. package/dist/generators/client/generators/common/command.js +5 -0
  104. package/dist/generators/client/generators/common/generator.js +79 -0
  105. package/dist/generators/client/generators/common/index.js +20 -0
  106. package/dist/generators/client/generators/common/templates/src/main/webapp/app/shared/jhipster/headers.ts.ejs +57 -0
  107. package/dist/generators/client/generators/common/templates/src/main/webapp/app/shared/jhipster/problem-details.ts.ejs +51 -0
  108. package/dist/generators/client/resources/package.json +6 -6
  109. package/dist/generators/client/support/filter-entities.js +1 -1
  110. package/dist/generators/client/templates/.eslintignore.ejs +9 -5
  111. package/dist/generators/client/templates/README.md.jhi.client.ejs +29 -20
  112. package/dist/generators/client/templates/src/main/webapp/index.html.ejs +1 -1
  113. package/dist/generators/common/generator.js +5 -0
  114. package/dist/generators/common/resources/package.json +2 -2
  115. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/login-page.cy.ts.ejs +4 -4
  116. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/password-page.cy.ts.ejs +2 -2
  117. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/register-page.cy.ts.ejs +1 -1
  118. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/account/reset-password-page.cy.ts.ejs +1 -1
  119. package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/entity/_entity_.cy.ts.ejs +10 -10
  120. package/dist/generators/docker/templates/docker/keycloak.yml.ejs +2 -1
  121. package/dist/generators/docker/templates/docker/mariadb.yml.ejs +1 -1
  122. package/dist/generators/docker/templates/docker/mysql.yml.ejs +1 -2
  123. package/dist/generators/docker/templates/docker/realm-config/jhipster-realm.json.ejs +14 -3
  124. package/dist/generators/docker/templates/docker/realm-config/keycloak-health-check.sh +2 -2
  125. package/dist/generators/docker-compose/templates/docker-compose.yml.ejs +1 -0
  126. package/dist/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +14 -3
  127. package/dist/generators/docker-compose/templates/realm-config/keycloak-health-check.sh +2 -2
  128. package/dist/generators/entity/generator.js +2 -10
  129. package/dist/generators/entity/prompts.js +6 -11
  130. package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizationHeaderUtil.java.ejs +1 -1
  131. package/dist/generators/gatling/README.md +15 -0
  132. package/dist/generators/gatling/generator.js +0 -1
  133. package/dist/generators/gatling/templates/src/test/java/gatling/simulations/_entityClass_GatlingTest.java.ejs +2 -10
  134. package/dist/generators/generate-blueprint/command.js +16 -0
  135. package/dist/generators/generate-blueprint/files.js +11 -1
  136. package/dist/generators/generate-blueprint/generator.js +34 -17
  137. package/dist/generators/generate-blueprint/resources/package.json +3 -1
  138. package/dist/generators/generate-blueprint/templates/.blueprint/cli/commands.mjs.ejs +6 -0
  139. package/dist/generators/generate-blueprint/templates/.blueprint/generate-sample/command.mjs.ejs +20 -0
  140. package/dist/generators/generate-blueprint/templates/.blueprint/generate-sample/generator.mjs.ejs +9 -13
  141. package/dist/generators/generate-blueprint/templates/.blueprint/github-build-matrix/build-matrix.mjs.ejs +22 -0
  142. package/dist/generators/generate-blueprint/templates/.blueprint/github-build-matrix/generator.mjs.ejs +20 -0
  143. package/dist/generators/generate-blueprint/templates/.blueprint/github-build-matrix/index.mjs.ejs +1 -0
  144. package/dist/generators/generate-blueprint/templates/.github/workflows/build-cache.yml.ejs +39 -0
  145. package/dist/generators/generate-blueprint/templates/.github/workflows/samples.yml.ejs +105 -0
  146. package/dist/generators/generate-blueprint/templates/.prettierignore.jhi.blueprint.ejs +1 -1
  147. package/dist/generators/generate-blueprint/templates/README.md.ejs +16 -8
  148. package/dist/generators/generate-blueprint/templates/eslint.config.js.ejs +33 -0
  149. package/dist/generators/generate-blueprint/templates/vitest.config.ts.ejs +1 -0
  150. package/dist/generators/generator-constants.js +2 -2
  151. package/dist/generators/gradle/templates/gradle/wrapper/gradle-wrapper.properties +1 -1
  152. package/dist/generators/heroku/generator.js +1 -1
  153. package/dist/generators/info/generator.js +1 -3
  154. package/dist/generators/info/support/extract-info.js +60 -0
  155. package/dist/generators/info/support/index.js +1 -0
  156. package/dist/generators/init/generator.js +2 -2
  157. package/dist/generators/init/resources/.node-version +1 -1
  158. package/dist/generators/init/resources/package.json +2 -2
  159. package/dist/generators/java/generators/bootstrap/generator.js +9 -2
  160. package/dist/generators/java/generators/build-tool/command.js +6 -3
  161. package/dist/generators/java/generators/domain/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.ejs +1 -5
  162. package/dist/generators/java/generators/domain/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_Asserts.java.ejs +3 -3
  163. package/dist/generators/java/generators/domain/templates/src/test/java/_package_/_entityPackage_/domain/_persistClass_Test.java.ejs +3 -3
  164. package/dist/generators/java/generators/node/templates/npmw +1 -5
  165. package/dist/generators/java/support/add-java-annotation.js +28 -7
  166. package/dist/generators/java/support/generated-annotation-transform.js +1 -1
  167. package/dist/generators/java/support/index.js +1 -1
  168. package/dist/generators/jdl/generator.js +7 -7
  169. package/dist/generators/kubernetes/files.js +1 -1
  170. package/dist/generators/kubernetes/templates/db/mysql.yml.ejs +1 -1
  171. package/dist/generators/kubernetes/templates/keycloak/keycloak-configmap.yml.ejs +14 -3
  172. package/dist/generators/languages/generator.js +5 -2
  173. package/dist/generators/liquibase/templates/src/main/java/_package_/config/LiquibaseConfiguration.java.ejs +1 -1
  174. package/dist/generators/maven/command.js +15 -0
  175. package/dist/generators/maven/generator.js +6 -1
  176. package/dist/generators/maven/index.js +1 -0
  177. package/dist/generators/maven/internal/xml-store.js +7 -6
  178. package/dist/generators/maven/support/pom-store.js +24 -9
  179. package/dist/generators/maven/templates/.mvn/wrapper/maven-wrapper.properties +2 -2
  180. package/dist/generators/maven/templates/mvnw +185 -243
  181. package/dist/generators/maven/templates/mvnw.cmd +121 -180
  182. package/dist/generators/react/entity-files-react.js +7 -7
  183. package/dist/generators/react/generator.js +10 -0
  184. package/dist/generators/react/resources/package.json +28 -28
  185. package/dist/generators/react/templates/src/main/webapp/app/app.tsx.ejs +9 -0
  186. package/dist/generators/react/templates/src/main/webapp/app/config/axios-interceptor.spec.ts.ejs +1 -1
  187. package/dist/generators/react/templates/src/main/webapp/app/config/axios-interceptor.ts.ejs +1 -1
  188. package/dist/generators/react/templates/src/main/webapp/app/config/notification-middleware.spec.ts.ejs +1 -1
  189. package/dist/generators/react/templates/src/main/webapp/app/config/notification-middleware.ts.ejs +80 -87
  190. package/dist/generators/react/templates/src/main/webapp/app/config/store.ts.ejs +1 -1
  191. package/dist/generators/react/templates/src/main/webapp/app/config/translation.ts.ejs +4 -0
  192. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.tsx.ejs +3 -3
  193. package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.reducer.ts.ejs +12 -7
  194. package/dist/generators/react/templates/src/main/webapp/app/modules/home/home.tsx.ejs +15 -1
  195. package/dist/generators/react/templates/src/main/webapp/app/modules/login/login-redirect.tsx.ejs +4 -0
  196. package/dist/generators/react/templates/src/main/webapp/app/modules/login/logout.tsx.ejs +5 -3
  197. package/dist/generators/react/templates/src/main/webapp/app/routes.tsx.ejs +1 -1
  198. package/dist/generators/react/templates/src/main/webapp/app/shared/auth/private-route.spec.tsx.ejs +1 -1
  199. package/dist/generators/react/templates/src/main/webapp/app/shared/auth/private-route.tsx.ejs +1 -1
  200. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header.tsx.ejs +0 -9
  201. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/account.spec.tsx.ejs +1 -3
  202. package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/account.tsx.ejs +29 -6
  203. package/dist/generators/react/templates/src/main/webapp/app/shared/reducers/reducer.utils.ts.ejs +2 -3
  204. package/dist/generators/react/templates/src/main/webapp/app/shared/util/url-utils.ts.ejs +1 -1
  205. package/dist/generators/server/command.js +0 -11
  206. package/dist/generators/server/generator.js +16 -75
  207. package/dist/generators/server/jdl/application-definition.js +3 -1
  208. package/dist/generators/server/resources/Dockerfile +13 -13
  209. package/dist/generators/server/resources/gradle/libs.versions.toml +9 -7
  210. package/dist/generators/server/resources/pom.xml +16 -16
  211. package/dist/generators/server/support/config.js +4 -8
  212. package/dist/generators/server/support/prepare-entity.js +5 -6
  213. package/dist/generators/server/support/relationship.js +5 -2
  214. package/dist/generators/server/templates/build.gradle.ejs +5 -3
  215. package/dist/generators/server/templates/gradle/profile_dev.gradle.ejs +2 -1
  216. package/dist/generators/server/templates/gradle/profile_prod.gradle.ejs +2 -1
  217. package/dist/generators/server/templates/gradle.properties.ejs +1 -1
  218. package/dist/generators/server/templates/pom.xml.ejs +7 -31
  219. package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/service/dto/_dtoClass_.java.ejs +1 -1
  220. package/dist/generators/server/templates/src/main/java/_package_/config/AsyncConfiguration.java.ejs +1 -1
  221. package/dist/generators/server/templates/src/main/java/_package_/config/Constants.java.ejs +0 -2
  222. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_imperative.java.ejs +1 -18
  223. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_reactive.java.ejs +1 -15
  224. package/dist/generators/server/templates/src/main/java/_package_/config/SecurityJwtConfiguration.java.ejs +1 -21
  225. package/dist/generators/server/templates/src/main/java/_package_/config/WebConfigurer.java.ejs +1 -1
  226. package/dist/generators/server/templates/src/main/java/_package_/security/DomainUserDetailsService.java.ejs +1 -1
  227. package/dist/generators/server/templates/src/main/java/_package_/security/PersistentTokenRememberMeServices.java.ejs +1 -1
  228. package/dist/generators/server/templates/src/main/java/_package_/security/SecurityUtils.java.ejs +65 -5
  229. package/dist/generators/server/templates/src/main/java/_package_/security/oauth2/AudienceValidator.java.ejs +1 -1
  230. package/dist/generators/server/templates/src/main/java/_package_/service/MailService.java.ejs +1 -1
  231. package/dist/generators/server/templates/src/main/java/_package_/service/dto/UserDTO.java.ejs +34 -0
  232. package/dist/generators/server/templates/src/main/java/_package_/service/mapper/UserMapper.java.ejs +8 -4
  233. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource.java.ejs +1 -1
  234. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource_oauth2.java.ejs +1 -1
  235. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource_skipUserManagement.java.ejs +44 -10
  236. package/dist/generators/server/templates/src/main/java/_package_/web/rest/AuthenticateController.java.ejs +1 -1
  237. package/dist/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +1 -1
  238. package/dist/generators/server/templates/src/main/resources/config/application.yml.ejs +60 -22
  239. package/dist/generators/server/templates/src/main/resources/config/bootstrap.yml.ejs +1 -1
  240. package/dist/generators/server/templates/src/main/resources/swagger/api.yml.ejs +1 -1
  241. package/dist/generators/server/templates/src/test/java/_package_/security/DomainUserDetailsServiceIT.java.ejs +31 -13
  242. package/dist/generators/server/templates/src/test/java/_package_/service/mapper/UserMapperTest.java.ejs +84 -17
  243. package/dist/generators/server/templates/src/test/java/_package_/web/rest/AccountResourceIT.java.ejs +62 -6
  244. package/dist/generators/server/templates/src/test/java/_package_/web/rest/AccountResourceIT_oauth2.java.ejs +22 -0
  245. package/dist/generators/server/templates/src/test/resources/config/application.yml.ejs +20 -10
  246. package/dist/generators/spring-boot/command.js +117 -6
  247. package/dist/generators/spring-boot/files.js +0 -5
  248. package/dist/generators/spring-boot/generator.js +44 -9
  249. package/dist/generators/spring-boot/prompts.js +6 -70
  250. package/dist/generators/spring-boot/resources/spring-boot-dependencies.pom +374 -582
  251. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/UserService.java.ejs +1 -1
  252. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/_entityClass_QueryService.java.ejs +1 -1
  253. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/impl/_entityClass_ServiceImpl.java.ejs +1 -1
  254. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/PublicUserResource.java.ejs +1 -1
  255. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/UserResource.java.ejs +1 -1
  256. package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs +1 -1
  257. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/service/UserServiceIT.java.ejs +47 -11
  258. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/web/rest/PublicUserResourceIT.java.ejs +60 -24
  259. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/web/rest/UserResourceIT.java.ejs +195 -318
  260. package/dist/generators/spring-boot/templates/src/test/java/_package_/_entityPackage_/web/rest/_entityClass_ResourceIT.java.ejs +58 -51
  261. package/dist/generators/spring-cache/internal/dependencies.js +2 -2
  262. package/dist/generators/spring-cache/resources/gradle/libs.versions.toml +1 -1
  263. package/dist/generators/spring-cache/templates/src/main/java/_package_/config/CacheConfiguration.java.ejs +3 -3
  264. package/dist/generators/spring-cloud/generators/gateway/command.js +10 -1
  265. package/dist/generators/spring-cloud/generators/gateway/generator.js +13 -0
  266. package/dist/generators/spring-cloud/generators/gateway/jdl/jdl-routes-option.js +6 -0
  267. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/broker/KafkaConsumer_imperative.java.ejs +1 -1
  268. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/broker/KafkaConsumer_reactive.java.ejs +1 -1
  269. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/web/rest/KafkaResource_imperative.java.ejs +1 -1
  270. package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/web/rest/KafkaResource_reactive.java.ejs +1 -1
  271. package/dist/generators/spring-data-cassandra/generator.js +2 -2
  272. package/dist/generators/spring-data-couchbase/templates/src/main/java/_package_/config/DatabaseConfiguration.java.ejs +1 -1
  273. package/dist/generators/spring-data-neo4j/templates/src/main/java/_package_/config/DatabaseConfiguration.java_neo4j.ejs +18 -2
  274. package/dist/generators/spring-data-relational/templates/src/main/java/_package_/config/DatabaseConfiguration.java.ejs +1 -1
  275. package/dist/generators/spring-data-relational/templates/src/test/java/_package_/config/SqlTestContainersSpringContextCustomizerFactory.java.ejs +3 -1
  276. package/dist/generators/vue/entity-files-vue.js +7 -7
  277. package/dist/generators/vue/resources/package.json +21 -21
  278. package/dist/generators/vue/templates/.eslintrc.cjs.ejs +7 -0
  279. package/dist/generators/vue/templates/src/main/webapp/app/admin/tracker/tracker.service.spec.ts.ejs +1 -1
  280. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-details.vue.ejs +1 -1
  281. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.vue.ejs +1 -1
  282. package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.vue.ejs +1 -1
  283. package/dist/generators/vue/templates/src/main/webapp/app/shared/alert/alert.service.spec.ts.ejs +8 -8
  284. package/dist/generators/vue/templates/src/main/webapp/app/shared/data/data-utils.service.spec.ts.ejs +1 -1
  285. package/dist/generators/vue/templates/tsconfig.app.json.ejs +1 -1
  286. package/dist/generators/vue/templates/vite.config.mts.ejs +5 -4
  287. package/dist/jdl/converters/jdl-to-json/jdl-to-json-basic-entity-converter.js +1 -1
  288. package/dist/jdl/converters/jdl-to-json/jdl-to-json-field-converter.js +4 -4
  289. package/dist/jdl/converters/jdl-to-json/jdl-with-applications-to-json-converter.js +9 -9
  290. package/dist/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.js +2 -2
  291. package/dist/jdl/converters/json-to-jdl-application-converter.js +1 -1
  292. package/dist/jdl/converters/json-to-jdl-converter.js +6 -5
  293. package/dist/jdl/converters/json-to-jdl-entity-converter.js +14 -14
  294. package/dist/jdl/converters/json-to-jdl-option-converter.js +1 -2
  295. package/dist/jdl/converters/parsed-jdl-to-jdl-object/application-converter.js +1 -1
  296. package/dist/jdl/converters/parsed-jdl-to-jdl-object/option-converter.js +2 -2
  297. package/dist/jdl/converters/parsed-jdl-to-jdl-object/parsed-jdl-to-jdl-object-converter.js +7 -6
  298. package/dist/jdl/converters/parsed-jdl-to-jdl-object/validation-converter.js +1 -1
  299. package/dist/jdl/exporters/applications/jhipster-application-formatter.js +16 -23
  300. package/dist/jdl/exporters/config.js +1 -0
  301. package/dist/jdl/exporters/jhipster-deployment-exporter.js +5 -5
  302. package/dist/jdl/exporters/jhipster-entity-exporter.js +1 -1
  303. package/dist/jdl/jdl-importer.js +22 -20
  304. package/dist/jdl/jhipster/binary-options.js +12 -8
  305. package/dist/jdl/jhipster/json-entity.js +1 -1
  306. package/dist/jdl/models/abstract-jdl-option.js +2 -2
  307. package/dist/jdl/models/jdl-application-configuration-factory.js +2 -0
  308. package/dist/jdl/models/jdl-binary-option.js +2 -2
  309. package/dist/jdl/models/jdl-deployment.js +11 -0
  310. package/dist/jdl/models/jdl-entity.js +1 -1
  311. package/dist/jdl/models/jdl-enum.js +1 -1
  312. package/dist/jdl/models/jdl-enums.js +0 -18
  313. package/dist/jdl/models/jdl-field.js +2 -2
  314. package/dist/jdl/models/jdl-object-wrapper.js +1 -0
  315. package/dist/jdl/models/jdl-object.js +23 -45
  316. package/dist/jdl/models/jdl-options.js +0 -18
  317. package/dist/jdl/models/jdl-relationships.js +8 -16
  318. package/dist/jdl/models/jdl-unary-option.js +1 -1
  319. package/dist/jdl/models/list-jdl-application-configuration-option.js +5 -2
  320. package/dist/jdl/parsing/jdl-ast-builder-visitor.js +12 -0
  321. package/dist/jdl/parsing/jdl-parser.js +14 -0
  322. package/dist/jdl/parsing/lexer/lexer.js +17 -11
  323. package/dist/jdl/parsing/validator.js +16 -2
  324. package/dist/jdl/readers/json-reader.js +1 -1
  325. package/dist/jdl/utils/array-utils.js +6 -0
  326. package/dist/jdl/utils/set-utils.js +3 -2
  327. package/dist/jdl/validators/jdl-without-application-validator.js +2 -2
  328. package/dist/lib/eslint/base.js +25 -0
  329. package/dist/lib/eslint/recommended.js +22 -0
  330. package/dist/testing/github.js +32 -0
  331. package/dist/testing/helpers.js +13 -0
  332. package/dist/testing/index.js +2 -0
  333. package/dist/testing/sample-config.js +31 -0
  334. package/dist/types/cli/commands.d.mts +2 -0
  335. package/dist/types/cli/environment-builder.d.mts +1 -0
  336. package/dist/types/generators/base/api.d.ts +19 -8
  337. package/dist/types/generators/base/generator.d.ts +10 -4
  338. package/dist/types/generators/base/internal/command.d.ts +2 -0
  339. package/dist/types/generators/base/internal/index.d.ts +1 -0
  340. package/dist/types/generators/base/priorities.d.ts +4 -0
  341. package/dist/types/generators/base/shared-data.d.ts +11 -2
  342. package/dist/types/generators/base/types.d.ts +12 -0
  343. package/dist/types/generators/base-application/priorities.d.ts +2 -0
  344. package/dist/types/generators/base-application/support/entity.d.ts +2 -2
  345. package/dist/types/generators/base-application/support/prepare-entity.d.ts +3 -3
  346. package/dist/types/generators/base-application/support/relationship.d.ts +5 -5
  347. package/dist/types/generators/base-application/types.d.ts +11 -0
  348. package/dist/types/generators/base-core/generator.d.ts +18 -2
  349. package/dist/types/generators/generator-constants.d.ts +1 -1
  350. package/dist/types/generators/info/support/extract-info.d.ts +14 -0
  351. package/dist/types/generators/info/support/index.d.ts +1 -0
  352. package/dist/types/generators/java/support/add-java-annotation.d.ts +10 -20
  353. package/dist/types/generators/java/support/doc.d.ts +1 -1
  354. package/dist/types/generators/java/support/index.d.ts +1 -1
  355. package/dist/types/generators/java/types.d.ts +12 -0
  356. package/dist/types/generators/maven/internal/xml-store.d.ts +3 -2
  357. package/dist/types/generators/maven/support/pom-store.d.ts +5 -2
  358. package/dist/types/generators/maven/types.d.ts +1 -0
  359. package/dist/types/generators/server/support/relationship.d.ts +2 -2
  360. package/dist/types/generators/server/types.d.ts +7 -1
  361. package/dist/types/generators/spring-cloud/generators/gateway/jdl/jdl-routes-option.d.ts +2 -0
  362. package/dist/types/generators/spring-cloud/generators/gateway/types.d.ts +4 -0
  363. package/dist/types/jdl/converters/jdl-to-json/jdl-to-json-field-converter.d.ts +2 -2
  364. package/dist/types/jdl/converters/jdl-to-json/jdl-with-applications-to-json-converter.d.ts +2 -1
  365. package/dist/types/jdl/converters/jdl-to-json/jdl-without-application-to-json-converter.d.ts +3 -1
  366. package/dist/types/jdl/converters/json-to-jdl-application-converter.d.ts +9 -2
  367. package/dist/types/jdl/converters/json-to-jdl-converter.d.ts +3 -3
  368. package/dist/types/jdl/converters/json-to-jdl-entity-converter.d.ts +2 -4
  369. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/application-converter.d.ts +3 -1
  370. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/deployment-converter.d.ts +2 -1
  371. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/entity-converter.d.ts +3 -1
  372. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/enum-converter.d.ts +2 -1
  373. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/field-converter.d.ts +2 -1
  374. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/option-converter.d.ts +3 -3
  375. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/parsed-jdl-to-jdl-object-converter.d.ts +2 -1
  376. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/relationship-converter.d.ts +2 -1
  377. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/types.d.ts +110 -0
  378. package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/validation-converter.d.ts +2 -1
  379. package/dist/types/jdl/converters/types.d.ts +102 -14
  380. package/dist/types/jdl/exporters/applications/jhipster-application-formatter.d.ts +4 -4
  381. package/dist/types/jdl/exporters/config.d.ts +2 -1
  382. package/dist/types/jdl/exporters/export-utils.d.ts +2 -1
  383. package/dist/types/jdl/exporters/jdl-exporter.d.ts +2 -1
  384. package/dist/types/jdl/exporters/jhipster-deployment-exporter.d.ts +3 -1
  385. package/dist/types/jdl/exporters/jhipster-entity-exporter.d.ts +3 -1
  386. package/dist/types/jdl/exporters/types.d.ts +61 -0
  387. package/dist/types/jdl/jhipster/binary-options.d.ts +8 -26
  388. package/dist/types/jdl/jhipster/field-types.d.ts +2 -2
  389. package/dist/types/jdl/jhipster/json-entity.d.ts +2 -2
  390. package/dist/types/jdl/models/abstract-jdl-option.d.ts +14 -9
  391. package/dist/types/jdl/models/boolean-jdl-application-configuration-option.d.ts +1 -1
  392. package/dist/types/jdl/models/integer-jdl-application-configuration-option.d.ts +1 -1
  393. package/dist/types/jdl/models/jdl-application-configuration-factory.d.ts +1 -1
  394. package/dist/types/jdl/models/jdl-application-configuration-option.d.ts +4 -4
  395. package/dist/types/jdl/models/jdl-application-configuration.d.ts +4 -4
  396. package/dist/types/jdl/models/jdl-application-definition.d.ts +4 -4
  397. package/dist/types/jdl/models/jdl-application-entities.d.ts +4 -4
  398. package/dist/types/jdl/models/jdl-application.d.ts +16 -13
  399. package/dist/types/jdl/models/jdl-binary-option.d.ts +5 -3
  400. package/dist/types/jdl/models/jdl-deployment.d.ts +13 -1
  401. package/dist/types/jdl/models/jdl-entity.d.ts +5 -5
  402. package/dist/types/jdl/models/jdl-enum-value.d.ts +4 -4
  403. package/dist/types/jdl/models/jdl-enum.d.ts +9 -5
  404. package/dist/types/jdl/models/jdl-enums.d.ts +6 -5
  405. package/dist/types/jdl/models/jdl-field.d.ts +10 -8
  406. package/dist/types/jdl/models/jdl-object-wrapper.d.ts +25 -0
  407. package/dist/types/jdl/models/jdl-object.d.ts +23 -19
  408. package/dist/types/jdl/models/jdl-options.d.ts +7 -24
  409. package/dist/types/jdl/models/jdl-relationship.d.ts +16 -10
  410. package/dist/types/jdl/models/jdl-relationships.d.ts +5 -5
  411. package/dist/types/jdl/models/jdl-validation.d.ts +3 -3
  412. package/dist/types/jdl/models/list-jdl-application-configuration-option.d.ts +4 -3
  413. package/dist/types/jdl/models/string-jdl-application-configuration-option.d.ts +2 -2
  414. package/dist/types/jdl/parsing/jdl-ast-builder-visitor.d.ts +1 -0
  415. package/dist/types/jdl/parsing/jdl-parser.d.ts +1 -0
  416. package/dist/types/jdl/parsing/jdl-parsing-types.d.ts +23 -0
  417. package/dist/types/jdl/parsing/lexer/lexer.d.ts +6 -2
  418. package/dist/types/jdl/parsing/validator.d.ts +1 -1
  419. package/dist/types/jdl/utils/array-utils.d.ts +1 -0
  420. package/dist/types/jdl/utils/set-utils.d.ts +1 -19
  421. package/dist/types/jdl/validators/deployment-validator.d.ts +2 -1
  422. package/dist/types/lib/eslint/base.d.ts +20 -0
  423. package/dist/types/lib/eslint/recommended.d.ts +20 -0
  424. package/dist/types/testing/github.d.ts +11 -0
  425. package/dist/types/testing/helpers.d.ts +21 -3
  426. package/dist/types/testing/index.d.ts +2 -0
  427. package/dist/types/testing/sample-config.d.ts +4 -0
  428. package/package.json +35 -30
  429. package/dist/generators/generate-blueprint/templates/.eslintrc.json.ejs +0 -35
  430. /package/dist/jdl/converters/{types.js → parsed-jdl-to-jdl-object/types.js} +0 -0
@@ -81,7 +81,7 @@ import { ParseLinks } from 'app/core/util/parse-links.service';
81
81
  import { FilterComponent, FilterOptions, IFilterOptions, IFilterOption } from 'app/shared/filter';
82
82
  <%_ } _%>
83
83
  <%_ if (paginationInfiniteScroll) { _%>
84
- import { InfiniteScrollModule } from 'ngx-infinite-scroll';
84
+ import { InfiniteScrollDirective } from 'ngx-infinite-scroll';
85
85
  <%_ } _%>
86
86
 
87
87
  @Component({
@@ -106,7 +106,7 @@ import { InfiniteScrollModule } from 'ngx-infinite-scroll';
106
106
  ItemCountComponent,
107
107
  <%_ } _%>
108
108
  <%_ if (paginationInfiniteScroll) { _%>
109
- InfiniteScrollModule,
109
+ InfiniteScrollDirective,
110
110
  <%_ } _%>
111
111
  ],
112
112
  })
@@ -20,8 +20,7 @@
20
20
  const tsKeyId = this.generateTestEntityId(primaryKey.type);
21
21
  _%>
22
22
  import { TestBed } from '@angular/core/testing';
23
- import { HttpResponse } from '@angular/common/http';
24
- import { HttpClientTestingModule } from '@angular/common/http/testing';
23
+ import { provideHttpClient, HttpResponse } from '@angular/common/http';
25
24
  import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } from '@angular/router';
26
25
  import { of } from 'rxjs';
27
26
 
@@ -38,8 +37,8 @@ describe('<%= entityAngularName %> routing resolve service', () => {
38
37
 
39
38
  beforeEach(() => {
40
39
  TestBed.configureTestingModule({
41
- imports: [HttpClientTestingModule],
42
40
  providers: [
41
+ provideHttpClient(),
43
42
  {
44
43
  provide: ActivatedRoute,
45
44
  useValue: {
@@ -73,7 +72,7 @@ describe('<%= entityAngularName %> routing resolve service', () => {
73
72
  });
74
73
 
75
74
  // THEN
76
- expect(service.find).toBeCalledWith(<%- tsKeyId %>);
75
+ expect(service.find).toHaveBeenCalledWith(<%- tsKeyId %>);
77
76
  expect(result<%= entityAngularName %>).toEqual({ <%= primaryKey.name %>: <%- tsKeyId %> });
78
77
  });
79
78
 
@@ -111,7 +110,7 @@ describe('<%= entityAngularName %> routing resolve service', () => {
111
110
  });
112
111
 
113
112
  // THEN
114
- expect(service.find).toBeCalledWith(<%- tsKeyId %>);
113
+ expect(service.find).toHaveBeenCalledWith(<%- tsKeyId %>);
115
114
  expect(result<%= entityAngularName %>).toEqual(undefined);
116
115
  expect(mockRouter.navigate).toHaveBeenCalledWith(['404']);
117
116
  });
@@ -21,7 +21,8 @@ const tsKeyId = this.generateTestEntityId(primaryKey.type);
21
21
  const enumImports = this.generateEntityClientEnumImports(fields);
22
22
  _%>
23
23
  import { TestBed } from '@angular/core/testing';
24
- import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
24
+ import { provideHttpClientTesting, HttpTestingController } from '@angular/common/http/testing';
25
+ import { provideHttpClient } from '@angular/common/http';
25
26
 
26
27
  <%_ if (anyFieldIsLocalDate) { _%>
27
28
  import { DATE_FORMAT } from 'app/config/input.constants';
@@ -49,8 +50,9 @@ describe('<%= entityAngularName %> Service', () => {
49
50
 
50
51
  beforeEach(() => {
51
52
  TestBed.configureTestingModule({
52
- imports: [
53
- HttpClientTestingModule
53
+ providers: [
54
+ provideHttpClient(),
55
+ provideHttpClientTesting()
54
56
  ]
55
57
  });
56
58
  expectedResult = null;
@@ -19,15 +19,14 @@
19
19
  <%_
20
20
  const tsKeyId = this.generateTestEntityId(primaryKey.type);
21
21
  const allRelationshipsByEntityNeedingOptions = Object
22
- .values(differentRelationships)
23
- .map(relationships => relationships.filter(rel => rel.persistableRelationship))
22
+ .values(relationshipsByOtherEntity)
23
+ .map(relationships => relationships.filter(rel => rel.persistableRelationship && !rel.otherEntity.embedded))
24
24
  .filter(relationships => relationships.length > 0);
25
25
  const testEntityPrimaryKey0 = this.generateTestEntityPrimaryKey(primaryKey, 0);
26
26
  const testEntityPrimaryKey1 = this.generateTestEntityPrimaryKey(primaryKey, 1);
27
27
  _%>
28
28
  import { ComponentFixture, TestBed } from '@angular/core/testing';
29
- import { HttpResponse } from '@angular/common/http';
30
- import { HttpClientTestingModule } from '@angular/common/http/testing';
29
+ import { provideHttpClient, HttpResponse } from '@angular/common/http';
31
30
  import { FormBuilder } from '@angular/forms';
32
31
  import { ActivatedRoute } from '@angular/router';
33
32
  import { of, Subject, from } from 'rxjs';
@@ -57,10 +56,10 @@ describe('<%= entityAngularName %> Management Update Component', () => {
57
56
  beforeEach(() => {
58
57
  TestBed.configureTestingModule({
59
58
  imports: [
60
- HttpClientTestingModule,
61
59
  <%= entityAngularName %>UpdateComponent,
62
60
  ],
63
61
  providers: [
62
+ provideHttpClient(),
64
63
  FormBuilder,
65
64
  {
66
65
  provide: ActivatedRoute,
@@ -245,7 +244,7 @@ describe('<%= entityAngularName %> Management Update Component', () => {
245
244
  <%_ } _%>
246
245
  });
247
246
 
248
- <%_ const trackedRelationships = Object.values(differentRelationships).filter(arr => arr.some(rel => rel.persistableRelationship && rel.otherEntity.primaryKey));
247
+ <%_ const trackedRelationships = Object.values(relationshipsByOtherEntity).filter(arr => arr.some(rel => rel.persistableRelationship && !rel.otherEntity.embedded));
249
248
  if (trackedRelationships.length > 0) {
250
249
  _%>
251
250
 
@@ -18,8 +18,8 @@
18
18
  -%>
19
19
  <%_
20
20
  const allRelationshipsByEntityNeedingOptions = Object
21
- .values(differentRelationships)
22
- .map(relationships => relationships.filter(rel => rel.persistableRelationship))
21
+ .values(relationshipsByOtherEntity)
22
+ .map(relationships => relationships.filter(rel => rel.persistableRelationship && !rel.otherEntity.embedded))
23
23
  .filter(relationships => relationships.length > 0);
24
24
  _%>
25
25
  import { Component, inject, OnInit<% if (anyFieldHasImageContentType) { %>, ElementRef<% } %> } from '@angular/core';
@@ -39,10 +39,8 @@ import { AlertError } from 'app/shared/alert/alert-error.model';
39
39
  import { EventManager, EventWithContent } from 'app/core/util/event-manager.service';
40
40
  import { DataUtils, FileLoadError } from 'app/core/util/data-util.service';
41
41
  <%_ } _%>
42
- <%_
43
- Object.keys(differentRelationships).forEach(key => {
44
- if (differentRelationships[key].some(rel => rel.persistableRelationship)) {
45
- const uniqueRel = differentRelationships[key][0];
42
+ <%_ for (const relationshipsByEntityNeedingOptions of allRelationshipsByEntityNeedingOptions) {
43
+ const uniqueRel = relationshipsByEntityNeedingOptions[0];
46
44
  if (uniqueRel.otherEntityAngularName !== entityAngularName) {
47
45
  _%>
48
46
  import { I<%= uniqueRel.otherEntityAngularName %> } from 'app/entities/<%= uniqueRel.otherEntityPath %>/<%= uniqueRel.otherEntityFileName %>.model';
@@ -50,7 +48,6 @@ import { <%= uniqueRel.otherEntityAngularName %>Service } from 'app/entities/<%=
50
48
  <%_
51
49
  }
52
50
  }
53
- });
54
51
  _%>
55
52
  <%_ const enumImports = this.generateEntityClientEnumImports(fields); _%>
56
53
  <%_ enumImports.forEach( (importedPath, importedType) => { _%>
@@ -70,7 +67,7 @@ export class <%= entityAngularName %>UpdateComponent implements OnInit {
70
67
  <%- this._.lowerFirst(importedType) %>Values = Object.keys(<%- importedType %>);
71
68
  <%_ }); _%>
72
69
 
73
- <%_ for (const relationshipsByEntityNeedingOptions of Object.values(differentRelationships).map(relationships => relationships.filter(rel => rel.persistableRelationship)).filter(relationships => relationships.length > 0)) { _%>
70
+ <%_ for (const relationshipsByEntityNeedingOptions of allRelationshipsByEntityNeedingOptions) { _%>
74
71
  <%_ const relationshipsWithCustomUniqueOptions = relationshipsByEntityNeedingOptions.filter(rel => rel.relationshipOneToOne && rel.otherRelationship); _%>
75
72
  <%_ if (relationshipsByEntityNeedingOptions.length > relationshipsWithCustomUniqueOptions.length) { _%>
76
73
  <%_ const otherEntity = relationshipsByEntityNeedingOptions[0].otherEntity _%>
@@ -87,17 +84,14 @@ export class <%= entityAngularName %>UpdateComponent implements OnInit {
87
84
  <%_ } _%>
88
85
  protected <%= entityInstance %>Service = inject(<%= entityAngularName %>Service);
89
86
  protected <%= entityInstance %>FormService = inject(<%= entityAngularName %>FormService);
90
- <%_
91
- Object.keys(differentRelationships).forEach(key => {
92
- if (differentRelationships[key].some(rel => rel.persistableRelationship)) {
93
- const uniqueRel = differentRelationships[key][0];
87
+ <%_ for (const relationshipsByEntityNeedingOptions of allRelationshipsByEntityNeedingOptions) {
88
+ const uniqueRel = relationshipsByEntityNeedingOptions[0];
94
89
  if (uniqueRel.otherEntityAngularName !== entityAngularName) {
95
90
  _%>
96
91
  protected <%= uniqueRel.otherEntity.entityInstance %>Service = inject(<%= uniqueRel.otherEntityAngularName %>Service);
97
92
  <%_
98
93
  }
99
94
  }
100
- });
101
95
  _%>
102
96
  <%_ if (anyFieldHasImageContentType) { _%>
103
97
  protected elementRef = inject(ElementRef);
@@ -107,8 +101,8 @@ _%>
107
101
  // eslint-disable-next-line @typescript-eslint/member-ordering
108
102
  editForm: <%= entityAngularName %>FormGroup = this.<%= entityInstance %>FormService.create<%= entityAngularName %>FormGroup();
109
103
 
110
- <%_ for (const relationshipsByEntity of Object.values(differentRelationships).filter(arr => arr.some(rel => rel.persistableRelationship && rel.otherEntity.primaryKey))) {
111
- const { otherEntity } = relationshipsByEntity[0];
104
+ <%_ for (const relationshipsByEntityNeedingOptions of allRelationshipsByEntityNeedingOptions) {
105
+ const { otherEntity } = relationshipsByEntityNeedingOptions[0];
112
106
  _%>
113
107
 
114
108
  compare<%= otherEntity.entityAngularName %> = (o1: I<%= otherEntity.entityAngularName %> | null, o2: I<%= otherEntity.entityAngularName %> | null): boolean =>
@@ -122,7 +116,7 @@ _%>
122
116
  this.updateForm(<%= entityInstance %>);
123
117
  }
124
118
 
125
- <%_ if (relationships.filter(rel => rel.persistableRelationship && !rel.otherEntityIsEmbedded).length > 0) { _%>
119
+ <%_ if (relationships.filter(rel => rel.persistableRelationship && !rel.otherEntity.embedded).length > 0) { _%>
126
120
  this.loadRelationshipsOptions();
127
121
  <%_ } _%>
128
122
  });
@@ -225,7 +219,7 @@ _%>
225
219
 
226
220
  <%_ if (relationships.filter(rel => rel.persistableRelationship && !rel.otherEntityIsEmbedded).length > 0) { _%>
227
221
  protected loadRelationshipsOptions(): void {
228
- <%_ for (const relationshipsByEntityNeedingOptions of Object.values(differentRelationships).map(relationships => relationships.filter(rel => rel.persistableRelationship)).filter(relationships => relationships.length > 0)) { _%>
222
+ <%_ for (const relationshipsByEntityNeedingOptions of allRelationshipsByEntityNeedingOptions) { _%>
229
223
  <%_ const relationshipsWithCustomUniqueOptions = relationshipsByEntityNeedingOptions.filter(rel => rel.relationshipOneToOne && rel.otherRelationship); %>
230
224
  <%_ const relationshipsWithCustomSharedOptions = relationshipsByEntityNeedingOptions.filter(rel => !relationshipsWithCustomUniqueOptions.includes(rel)); %>
231
225
  <%_ const { otherEntity } = relationshipsByEntityNeedingOptions[0] _%>
@@ -38,9 +38,9 @@ export default class ErrorComponent implements OnInit<% if (enableTranslation) {
38
38
  <%_ } _%>
39
39
 
40
40
  <%_ if (enableTranslation) { _%>
41
- private translateService = inject(TranslateService);
41
+ private readonly translateService = inject(TranslateService);
42
42
  <%_ } _%>
43
- private route = inject(ActivatedRoute);
43
+ private readonly route = inject(ActivatedRoute);
44
44
 
45
45
  ngOnInit(): void {
46
46
  this.route.data.subscribe(routeData => {
@@ -16,7 +16,7 @@
16
16
  See the License for the specific language governing permissions and
17
17
  limitations under the License.
18
18
  -%>
19
- import { Directive, OnInit, ElementRef, Renderer2, inject, Input } from '@angular/core';
19
+ import { Directive, OnInit, ElementRef, Renderer2, inject, input } from '@angular/core';
20
20
  import { TranslateService, LangChangeEvent } from '@ngx-translate/core';
21
21
 
22
22
  @Directive({
@@ -24,11 +24,11 @@ import { TranslateService, LangChangeEvent } from '@ngx-translate/core';
24
24
  selector: '[<%= jhiPrefix %>ActiveMenu]',
25
25
  })
26
26
  export default class ActiveMenuDirective implements OnInit {
27
- @Input() <%= jhiPrefix %>ActiveMenu?: string;
27
+ <%= jhiPrefix %>ActiveMenu = input();
28
28
 
29
- private el = inject(ElementRef);
30
- private renderer = inject(Renderer2);
31
- private translateService = inject(TranslateService);
29
+ private readonly el = inject(ElementRef);
30
+ private readonly renderer = inject(Renderer2);
31
+ private readonly translateService = inject(TranslateService);
32
32
 
33
33
  ngOnInit(): void {
34
34
  this.translateService.onLangChange.subscribe((event: LangChangeEvent) => {
@@ -39,7 +39,7 @@ export default class ActiveMenuDirective implements OnInit {
39
39
  }
40
40
 
41
41
  updateActiveFlag(selectedLanguage: string): void {
42
- if (this.<%= jhiPrefix %>ActiveMenu === selectedLanguage) {
42
+ if (this.<%= jhiPrefix %>ActiveMenu() === selectedLanguage) {
43
43
  this.renderer.addClass(this.el.nativeElement, 'active');
44
44
  } else {
45
45
  this.renderer.removeClass(this.el.nativeElement, 'active');
@@ -19,7 +19,8 @@
19
19
  jest.mock('app/login/login.service');
20
20
 
21
21
  import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
22
- import { HttpClientTestingModule } from '@angular/common/http/testing';
22
+ import { provideHttpClientTesting } from '@angular/common/http/testing';
23
+ import { provideHttpClient } from '@angular/common/http';
23
24
  import { of } from 'rxjs';
24
25
  <%_ if (enableTranslation) { _%>
25
26
  import { TranslateModule } from '@ngx-translate/core';
@@ -54,12 +55,11 @@ describe('Navbar Component', () => {
54
55
  TestBed.configureTestingModule({
55
56
  imports: [
56
57
  NavbarComponent,
57
- HttpClientTestingModule,
58
58
  <%_ if (enableTranslation) { _%>
59
59
  TranslateModule.forRoot(),
60
60
  <%_ } _%>
61
61
  ],
62
- providers: [LoginService],
62
+ providers: [provideHttpClient(), provideHttpClientTesting(), LoginService],
63
63
  })
64
64
  .overrideTemplate(NavbarComponent, '')
65
65
  .compileComponents();
@@ -1,5 +1,5 @@
1
1
  import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
2
- import { HttpClientTestingModule } from '@angular/common/http/testing';
2
+ import { provideHttpClient } from '@angular/common/http';
3
3
  import { of } from 'rxjs';
4
4
 
5
5
  import { ProfileInfo } from 'app/layouts/profiles/profile-info.model';
@@ -15,7 +15,8 @@ describe('Page Ribbon Component', () => {
15
15
  beforeEach(
16
16
  waitForAsync(() => {
17
17
  TestBed.configureTestingModule({
18
- imports: [HttpClientTestingModule, PageRibbonComponent],
18
+ imports: [PageRibbonComponent],
19
+ providers: [provideHttpClient()],
19
20
  })
20
21
  .overrideTemplate(PageRibbonComponent, '')
21
22
  .compileComponents();
@@ -19,7 +19,7 @@
19
19
  jest.mock('app/core/auth/account.service');
20
20
  jest.mock('app/login/login.service');
21
21
 
22
- import { ElementRef } from '@angular/core';
22
+ import { ElementRef, signal } from '@angular/core';
23
23
  import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
24
24
  import { FormBuilder } from '@angular/forms';
25
25
  import { Router, Navigation } from '@angular/router';
@@ -110,7 +110,7 @@ describe('LoginComponent', () => {
110
110
  const node = {
111
111
  focus: jest.fn(),
112
112
  };
113
- comp.username = new ElementRef(node);
113
+ comp.username = signal<ElementRef>(new ElementRef(node));
114
114
 
115
115
  // WHEN
116
116
  comp.ngAfterViewInit();
@@ -16,7 +16,7 @@
16
16
  See the License for the specific language governing permissions and
17
17
  limitations under the License.
18
18
  -%>
19
- import { Component, ViewChild, OnInit, AfterViewInit, ElementRef, inject, signal } from '@angular/core';
19
+ import { Component, OnInit, AfterViewInit, ElementRef, inject, signal, viewChild } from '@angular/core';
20
20
  import { FormGroup, FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
21
21
  import { Router, RouterModule } from '@angular/router';
22
22
 
@@ -31,8 +31,7 @@ import { AccountService } from 'app/core/auth/account.service';
31
31
  templateUrl: './login.component.html',
32
32
  })
33
33
  export default class LoginComponent implements OnInit, AfterViewInit {
34
- @ViewChild('username', { static: false })
35
- username!: ElementRef;
34
+ username = viewChild.required<ElementRef>('username');
36
35
 
37
36
  authenticationError = signal(false);
38
37
 
@@ -56,7 +55,7 @@ export default class LoginComponent implements OnInit, AfterViewInit {
56
55
  }
57
56
 
58
57
  ngAfterViewInit(): void {
59
- this.username.nativeElement.focus();
58
+ this.username().nativeElement.focus();
60
59
  }
61
60
 
62
61
  login(): void {
@@ -100,7 +100,7 @@ describe('Alert Error Component', () => {
100
100
  status: 400,
101
101
  statusText: 'Bad Request',
102
102
  error: {
103
- type: 'https://www.jhipster.tech/problem/constraint-violation',
103
+ type: 'https://www.jhipster.tech/problem/problem-with-message',
104
104
  title: 'Bad Request',
105
105
  status: 400,
106
106
  path: '/api/foos',
@@ -135,7 +135,7 @@ describe('Alert Error Component', () => {
135
135
  status: 400,
136
136
  statusText: 'Bad Request',
137
137
  error: {
138
- type: 'https://www.jhipster.tech/problem/constraint-violation',
138
+ type: 'https://www.jhipster.tech/problem/problem-with-message',
139
139
  title: 'Method argument not valid',
140
140
  status: 400,
141
141
  path: '/api/foos',
@@ -18,9 +18,12 @@
18
18
  -%>
19
19
  jest.mock('app/core/auth/account.service');
20
20
 
21
- import { Component, ElementRef, Signal, ViewChild, WritableSignal, signal } from '@angular/core';
21
+ import { Component, ElementRef, WritableSignal, signal, viewChild } from '@angular/core';
22
+ import { provideHttpClient } from '@angular/common/http';
22
23
  import { TestBed, waitForAsync } from '@angular/core/testing';
23
- import { Subject } from 'rxjs';
24
+ <%_ if (enableTranslation) { _%>
25
+ import { TranslateModule } from '@ngx-translate/core';
26
+ <%_ } _%>
24
27
 
25
28
  import { AccountService } from 'app/core/auth/account.service';
26
29
  import { Account } from 'app/core/auth/account.model';
@@ -31,8 +34,7 @@ import HasAnyAuthorityDirective from './has-any-authority.directive';
31
34
  template: ` <div *<%= jhiPrefix %>HasAnyAuthority="'ROLE_ADMIN'" #content></div> `,
32
35
  })
33
36
  class TestHasAnyAuthorityDirectiveComponent {
34
- @ViewChild('content', { static: false })
35
- content?: ElementRef;
37
+ content = viewChild<ElementRef>('content');
36
38
  }
37
39
 
38
40
  describe('HasAnyAuthorityDirective tests', () => {
@@ -41,9 +43,9 @@ describe('HasAnyAuthorityDirective tests', () => {
41
43
 
42
44
  beforeEach(waitForAsync(() => {
43
45
  TestBed.configureTestingModule({
44
- imports: [HasAnyAuthorityDirective],
46
+ imports: [HasAnyAuthorityDirective<%_ if (enableTranslation) { _%>, TranslateModule.forRoot()<%_ } _%>],
45
47
  declarations: [TestHasAnyAuthorityDirectiveComponent],
46
- providers: [AccountService],
48
+ providers: [provideHttpClient(), AccountService],
47
49
  });
48
50
  }));
49
51
 
@@ -79,7 +81,7 @@ describe('HasAnyAuthorityDirective tests', () => {
79
81
  fixture.detectChanges();
80
82
 
81
83
  // THEN
82
- expect(comp.content).toBeUndefined();
84
+ expect(comp.content()).toBeUndefined();
83
85
  });
84
86
  });
85
87
 
@@ -95,7 +97,7 @@ describe('HasAnyAuthorityDirective tests', () => {
95
97
  fixture.detectChanges();
96
98
 
97
99
  // THEN
98
- expect(comp.content).toBeDefined();
100
+ expect(comp.content()).toBeDefined();
99
101
 
100
102
  // GIVEN
101
103
  currentAccount.set(null);
@@ -104,7 +106,7 @@ describe('HasAnyAuthorityDirective tests', () => {
104
106
  fixture.detectChanges();
105
107
 
106
108
  // THEN
107
- expect(comp.content).toBeUndefined();
109
+ expect(comp.content()).toBeUndefined();
108
110
 
109
111
  // WHEN
110
112
  currentAccount.set({ activated: true, authorities: ['foo'] } as any);
@@ -16,7 +16,7 @@
16
16
  See the License for the specific language governing permissions and
17
17
  limitations under the License.
18
18
  -%>
19
- import { Directive, inject, Input, TemplateRef, ViewContainerRef, effect, signal, computed } from '@angular/core';
19
+ import { Directive, inject, input, TemplateRef, ViewContainerRef, effect, computed } from '@angular/core';
20
20
 
21
21
  import { AccountService } from 'app/core/auth/account.service';
22
22
 
@@ -36,7 +36,7 @@ import { AccountService } from 'app/core/auth/account.service';
36
36
  selector: '[<%= jhiPrefix %>HasAnyAuthority]',
37
37
  })
38
38
  export default class HasAnyAuthorityDirective {
39
- private authorities = signal<string | string[]>([]);
39
+ public authorities = input<string | string[]>([], { alias: '<%= jhiPrefix %>HasAnyAuthority' });
40
40
 
41
41
  private templateRef = inject(TemplateRef<any>);
42
42
  private viewContainerRef = inject(ViewContainerRef);
@@ -52,11 +52,6 @@ export default class HasAnyAuthorityDirective {
52
52
  } else {
53
53
  this.viewContainerRef.clear();
54
54
  }
55
- });
56
- }
57
-
58
- @Input()
59
- set <%= jhiPrefix %>HasAnyAuthority(value: string | string[]) {
60
- this.authorities.set(value);
55
+ }, { allowSignalWrites: true });
61
56
  }
62
57
  }
@@ -1,13 +1,17 @@
1
1
  @if (filters.hasAnyFilterSet()) {
2
2
  <div class="filter-display">
3
3
  <span>__jhiTranslateTag__('entity.filters.set')</span>
4
- <fa-icon icon="times" (click)="clearAllFilters()" title="__jhiTranslatePipe__('entity.filters.clearAll')"></fa-icon>
4
+ <button class="btn" (click)="clearAllFilters()" (keydown.enter)="clearAllFilters()">
5
+ <fa-icon icon="times" title="__jhiTranslatePipe__('entity.filters.clearAll')"></fa-icon>
6
+ </button>
5
7
  <ul>
6
8
  @for (filterOption of filters.filterOptions; track filterOption.name) {
7
9
  @for (value of filterOption.values; track value) {
8
10
  <li>
9
11
  <span>{{ filterOption.name }}:</span> {{ value }}
10
- <fa-icon icon="times" (click)="clearFilter(filterOption.name, value)" title="__jhiTranslatePipe__('entity.filters.clear')"></fa-icon>
12
+ <button class="btn" (click)="clearFilter(filterOption.name, value)" (keydown.enter)="clearFilter(filterOption.name, value)">
13
+ <fa-icon icon="times" title="__jhiTranslatePipe__('entity.filters.clear')"></fa-icon>
14
+ </button>
11
15
  </li>
12
16
  }
13
17
  }
@@ -23,7 +23,7 @@ import { Pipe, PipeTransform } from '@angular/core';
23
23
  name: 'findLanguageFromKey',
24
24
  })
25
25
  export default class FindLanguageFromKeyPipe implements PipeTransform {
26
- private languages: { [key: string]: { name: string; rtl?: boolean } } = {
26
+ private readonly languages: { [key: string]: { name: string; rtl?: boolean } } = {
27
27
  // jhipster-needle-i18n-language-key-pipe - JHipster will add/remove languages in this object
28
28
  };
29
29
 
@@ -71,8 +71,8 @@ export class LazyTranslationModule {
71
71
  ],
72
72
  })
73
73
  export class TranslationModule {
74
- private translateService = inject(TranslateService);
75
- private stateStorageService = inject(StateStorageService);
74
+ private readonly translateService = inject(TranslateService);
75
+ private readonly stateStorageService = inject(StateStorageService);
76
76
 
77
77
  constructor() {
78
78
  this.translateService.setDefaultLang('<%= nativeLanguage %>');
@@ -16,7 +16,7 @@
16
16
  See the License for the specific language governing permissions and
17
17
  limitations under the License.
18
18
  -%>
19
- import { Component, DebugElement, inject } from '@angular/core';
19
+ import { Component, DebugElement, Type, inject } from '@angular/core';
20
20
  import { ComponentFixture, TestBed } from '@angular/core/testing';
21
21
  import { By } from '@angular/platform-browser';
22
22
  import { FaIconComponent, FaIconLibrary } from '@fortawesome/angular-fontawesome';
@@ -72,58 +72,58 @@ describe('Directive: SortByDirective', () => {
72
72
  it('should have a neutral state for predicate column and undefined order value', () => {
73
73
  // GIVEN
74
74
  component.sortState.set({ predicate: 'name' });
75
- const sortByDirective = tableHead.injector.get(SortByDirective);
75
+ const sortByDirective = tableHead.injector.get(SortByDirective as Type<SortByDirective>);
76
76
 
77
77
  // WHEN
78
78
  fixture.detectChanges();
79
79
 
80
80
  // THEN
81
81
  expect(sortByDirective.<%= jhiPrefix %>SortBy).toEqual('name');
82
- expect(sortByDirective.iconComponent?.icon).toEqual(faSort.iconName);
82
+ expect(sortByDirective.iconComponent()?.icon).toEqual(faSort.iconName);
83
83
  });
84
84
 
85
85
  it('should have an asc state for predicate column and true asc value', () => {
86
86
  // GIVEN
87
87
  component.sortState.set({ predicate: 'name', order: 'asc' });
88
- const sortByDirective = tableHead.injector.get(SortByDirective);
88
+ const sortByDirective = tableHead.injector.get(SortByDirective as Type<SortByDirective>);
89
89
 
90
90
  // WHEN
91
91
  fixture.detectChanges();
92
92
 
93
93
  // THEN
94
94
  expect(sortByDirective.<%= jhiPrefix %>SortBy).toEqual('name');
95
- expect(sortByDirective.iconComponent?.icon).toEqual(faSortUp.iconName);
95
+ expect(sortByDirective.iconComponent()?.icon).toEqual(faSortUp.iconName);
96
96
  });
97
97
 
98
98
  it('should have a desc state for predicate column and desc value', () => {
99
99
  // GIVEN
100
100
  component.sortState.set({ predicate: 'name', order: 'desc' });
101
- const sortByDirective = tableHead.injector.get(SortByDirective);
101
+ const sortByDirective = tableHead.injector.get(SortByDirective as Type<SortByDirective>);
102
102
 
103
103
  // WHEN
104
104
  fixture.detectChanges();
105
105
 
106
106
  // THEN
107
107
  expect(sortByDirective.<%= jhiPrefix %>SortBy).toEqual('name');
108
- expect(sortByDirective.iconComponent?.icon).toEqual(faSortDown.iconName);
108
+ expect(sortByDirective.iconComponent()?.icon).toEqual(faSortDown.iconName);
109
109
  });
110
110
 
111
111
  it('should have a neutral state for non-predicate column', () => {
112
112
  // GIVEN
113
113
  component.sortState.set({ predicate: 'non-existing-column', order: 'asc' });
114
- const sortByDirective = tableHead.injector.get(SortByDirective);
114
+ const sortByDirective = tableHead.injector.get(SortByDirective as Type<SortByDirective>);
115
115
 
116
116
  // WHEN
117
117
  fixture.detectChanges();
118
118
 
119
119
  // THEN
120
120
  expect(sortByDirective.<%= jhiPrefix %>SortBy).toEqual('name');
121
- expect(sortByDirective.iconComponent?.icon).toEqual(faSort.iconName);
121
+ expect(sortByDirective.iconComponent()?.icon).toEqual(faSort.iconName);
122
122
  });
123
123
 
124
124
  it('multiple clicks at same component, should call SortDirective sort', () => {
125
125
  // GIVEN
126
- const sortDirective = tableHead.injector.get(SortDirective);
126
+ const sortDirective = tableHead.injector.get(SortDirective as Type<SortDirective>);
127
127
  sortDirective.sort = jest.fn();
128
128
 
129
129
  // WHEN
@@ -16,7 +16,7 @@
16
16
  See the License for the specific language governing permissions and
17
17
  limitations under the License.
18
18
  -%>
19
- import { ContentChild, Directive, Host, HostListener, Input, effect } from '@angular/core';
19
+ import { Directive, Host, HostListener, Input, contentChild, effect } from '@angular/core';
20
20
  import { FaIconComponent } from '@fortawesome/angular-fontawesome';
21
21
  import { faSort, faSortDown, faSortUp, IconDefinition } from '@fortawesome/free-solid-svg-icons';
22
22
 
@@ -29,8 +29,7 @@ import { SortDirective } from './sort.directive';
29
29
  export class SortByDirective {
30
30
  @Input() <%= jhiPrefix %>SortBy!: string;
31
31
 
32
- @ContentChild(FaIconComponent, { static: false })
33
- iconComponent?: FaIconComponent;
32
+ iconComponent = contentChild(FaIconComponent);
34
33
 
35
34
  protected sortIcon = faSort;
36
35
  protected sortAscIcon = faSortUp;
@@ -38,21 +37,21 @@ export class SortByDirective {
38
37
 
39
38
  constructor(@Host() private sort: SortDirective) {
40
39
  effect(() => {
41
- if (this.iconComponent) {
40
+ if (this.iconComponent()) {
42
41
  let icon: IconDefinition = this.sortIcon;
43
42
  const { predicate, order } = this.sort.sortState();
44
43
  if (predicate === this.<%= jhiPrefix %>SortBy && order !== undefined) {
45
44
  icon = order === 'asc' ? this.sortAscIcon : this.sortDescIcon;
46
45
  }
47
- this.iconComponent.icon = icon.iconName;
48
- this.iconComponent.render();
46
+ this.iconComponent()!.icon = icon.iconName;
47
+ this.iconComponent()!.render();
49
48
  }
50
49
  });
51
50
  }
52
51
 
53
52
  @HostListener('click')
54
53
  onClick(): void {
55
- if (this.iconComponent) {
54
+ if (this.iconComponent()) {
56
55
  this.sort.sort(this.<%= jhiPrefix %>SortBy);
57
56
  }
58
57
  }