generator-jhipster 8.5.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.
- package/README.md +3 -4
- package/dist/cli/commands.mjs +2 -0
- package/dist/cli/environment-builder.mjs +5 -0
- package/dist/cli/program.mjs +10 -4
- package/dist/generators/angular/entity-files-angular.js +6 -7
- package/dist/generators/angular/resources/package.json +17 -17
- package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.component.spec.ts.ejs +4 -3
- package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.service.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.spec.ts.ejs +4 -5
- package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.service.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.spec.ts.ejs +4 -3
- package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.spec.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.service.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.spec.ts.ejs +2 -3
- package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.service.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.component.spec.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.spec.ts.ejs +3 -4
- package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.component.spec.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.service.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.component.spec.ts.ejs +4 -4
- package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.service.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/admin/health/modal/health-modal.component.spec.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.component.spec.ts.ejs +4 -3
- package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.service.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/jvm-threads/jvm-threads.component.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.spec.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.component.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.service.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.spec.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.spec.ts.ejs +3 -4
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/service/user-management.service.spec.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/app-page-title-strategy.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/app.component.ts.ejs +0 -1
- package/dist/generators/angular/templates/src/main/webapp/app/app.config.ts.ejs +2 -2
- package/dist/generators/angular/templates/src/main/webapp/app/config/uib-pagination.config.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/core/auth/account.service.spec.ts.ejs +7 -5
- package/dist/generators/angular/templates/src/main/webapp/app/core/auth/auth-jwt.service.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/auth-expired.interceptor.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/auth.interceptor.ts.ejs +2 -2
- package/dist/generators/angular/templates/src/main/webapp/app/core/interceptor/error-handler.interceptor.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/core/util/alert.service.spec.ts.ejs +6 -6
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.spec.ts.ejs +3 -4
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.html.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.spec.ts.ejs +2 -3
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.ts.ejs +2 -2
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/route/_entityFile_-routing-resolve.service.spec.ts.ejs +2 -3
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/service/_entityFile_.service.spec.ts.ejs +5 -3
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.spec.ts.ejs +2 -3
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/error/error.component.ts.ejs +2 -2
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/active-menu.directive.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.spec.ts.ejs +3 -2
- package/dist/generators/angular/templates/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/shared/language/find-language-from-key.pipe.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/shared/language/translation.module.ts.ejs +2 -2
- package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts.ejs +10 -10
- package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.ts.ejs +6 -7
- package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort.directive.spec.ts.ejs +4 -4
- package/dist/generators/angular/templates/src/main/webapp/content/scss/global.scss.ejs +2 -0
- package/dist/generators/base/command.js +1 -0
- package/dist/generators/base/generator.js +7 -12
- package/dist/generators/base/internal/command.js +13 -0
- package/dist/generators/base/internal/index.js +1 -0
- package/dist/generators/base/shared-data.js +74 -2
- package/dist/generators/base/support/config.js +1 -1
- package/dist/generators/base/support/jhipster7-context.js +155 -52
- package/dist/generators/base-application/generator.js +1 -1
- package/dist/generators/base-core/generator.js +93 -55
- package/dist/generators/bootstrap/generator.js +1 -1
- package/dist/generators/bootstrap/support/eslint-worker.js +14 -12
- package/dist/generators/bootstrap/support/multi-step-transform/template-file.js +6 -1
- package/dist/generators/bootstrap-application/generator.js +1 -1
- package/dist/generators/bootstrap-application-client/generator.js +5 -1
- package/dist/generators/ci-cd/generator.js +1 -1
- package/dist/generators/ci-cd/templates/docker-registry.yml.ejs +0 -1
- package/dist/generators/ci-cd/templates/jenkins/jenkins.yml.ejs +0 -1
- package/dist/generators/client/generator.js +2 -3
- package/dist/generators/client/resources/package.json +3 -3
- package/dist/generators/client/support/filter-entities.js +1 -1
- package/dist/generators/client/templates/.eslintignore.ejs +9 -5
- package/dist/generators/client/templates/README.md.jhi.client.ejs +29 -20
- package/dist/generators/client/templates/src/main/webapp/index.html.ejs +1 -1
- package/dist/generators/common/resources/package.json +1 -1
- package/dist/generators/docker/templates/docker/keycloak.yml.ejs +2 -1
- package/dist/generators/docker/templates/docker/mariadb.yml.ejs +1 -1
- package/dist/generators/docker/templates/docker/mysql.yml.ejs +1 -2
- package/dist/generators/docker/templates/docker/realm-config/keycloak-health-check.sh +2 -2
- package/dist/generators/docker-compose/templates/docker-compose.yml.ejs +1 -0
- package/dist/generators/docker-compose/templates/realm-config/keycloak-health-check.sh +2 -2
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizationHeaderUtil.java.ejs +1 -1
- package/dist/generators/gatling/generator.js +0 -1
- package/dist/generators/generate-blueprint/files.js +3 -1
- package/dist/generators/generate-blueprint/generator.js +17 -7
- package/dist/generators/generate-blueprint/resources/package.json +2 -0
- package/dist/generators/generate-blueprint/templates/.blueprint/github-build-matrix/generator.mjs.ejs +2 -6
- package/dist/generators/generate-blueprint/templates/.github/workflows/build-cache.yml.ejs +39 -0
- package/dist/generators/generate-blueprint/templates/.github/workflows/samples.yml.ejs +105 -0
- package/dist/generators/generate-blueprint/templates/.prettierignore.jhi.blueprint.ejs +1 -1
- package/dist/generators/generate-blueprint/templates/eslint.config.js.ejs +33 -0
- package/dist/generators/generator-constants.js +2 -2
- package/dist/generators/gradle/templates/gradle/wrapper/gradle-wrapper.properties +1 -1
- package/dist/generators/heroku/generator.js +1 -1
- package/dist/generators/info/support/extract-info.js +60 -0
- package/dist/generators/info/support/index.js +1 -0
- package/dist/generators/init/resources/.node-version +1 -1
- package/dist/generators/init/resources/package.json +2 -2
- package/dist/generators/java/generators/bootstrap/generator.js +9 -2
- package/dist/generators/java/generators/build-tool/command.js +2 -2
- package/dist/generators/java/generators/node/templates/npmw +1 -5
- package/dist/generators/java/support/add-java-annotation.js +1 -1
- package/dist/generators/jdl/generator.js +6 -6
- package/dist/generators/kubernetes/templates/db/mysql.yml.ejs +1 -0
- package/dist/generators/languages/generator.js +1 -0
- package/dist/generators/liquibase/templates/src/main/java/_package_/config/LiquibaseConfiguration.java.ejs +1 -1
- package/dist/generators/maven/command.js +15 -0
- package/dist/generators/maven/generator.js +6 -1
- package/dist/generators/maven/index.js +1 -0
- package/dist/generators/maven/internal/xml-store.js +7 -6
- package/dist/generators/maven/support/pom-store.js +24 -9
- package/dist/generators/maven/templates/.mvn/wrapper/maven-wrapper.properties +1 -1
- package/dist/generators/react/entity-files-react.js +7 -7
- package/dist/generators/react/resources/package.json +12 -12
- package/dist/generators/react/templates/src/main/webapp/app/app.tsx.ejs +9 -0
- package/dist/generators/react/templates/src/main/webapp/app/config/translation.ts.ejs +4 -0
- package/dist/generators/react/templates/src/main/webapp/app/modules/home/home.tsx.ejs +15 -1
- package/dist/generators/react/templates/src/main/webapp/app/modules/login/login-redirect.tsx.ejs +4 -0
- package/dist/generators/react/templates/src/main/webapp/app/modules/login/logout.tsx.ejs +5 -3
- package/dist/generators/react/templates/src/main/webapp/app/routes.tsx.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/shared/auth/private-route.spec.tsx.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/shared/auth/private-route.tsx.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header.tsx.ejs +0 -9
- package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/account.spec.tsx.ejs +1 -3
- package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/account.tsx.ejs +29 -6
- package/dist/generators/react/templates/src/main/webapp/app/shared/util/url-utils.ts.ejs +1 -1
- package/dist/generators/server/generator.js +7 -5
- package/dist/generators/server/resources/Dockerfile +5 -5
- package/dist/generators/server/resources/gradle/libs.versions.toml +5 -5
- package/dist/generators/server/resources/pom.xml +11 -11
- package/dist/generators/server/templates/gradle/profile_dev.gradle.ejs +1 -1
- package/dist/generators/server/templates/gradle/profile_prod.gradle.ejs +1 -1
- package/dist/generators/server/templates/pom.xml.ejs +0 -26
- package/dist/generators/server/templates/src/main/java/_package_/config/AsyncConfiguration.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/config/SecurityJwtConfiguration.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/config/WebConfigurer.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/security/DomainUserDetailsService.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/security/PersistentTokenRememberMeServices.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/security/oauth2/AudienceValidator.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/service/MailService.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/service/dto/UserDTO.java.ejs +11 -0
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource_oauth2.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource_skipUserManagement.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/AuthenticateController.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +1 -1
- package/dist/generators/server/templates/src/main/resources/config/application.yml.ejs +1 -1
- package/dist/generators/server/templates/src/main/resources/config/bootstrap.yml.ejs +1 -1
- package/dist/generators/spring-boot/generator.js +4 -2
- package/dist/generators/spring-boot/resources/spring-boot-dependencies.pom +105 -105
- package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/UserService.java.ejs +1 -1
- package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/_entityClass_QueryService.java.ejs +1 -1
- package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/service/impl/_entityClass_ServiceImpl.java.ejs +1 -1
- package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/PublicUserResource.java.ejs +1 -1
- package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/UserResource.java.ejs +1 -1
- package/dist/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs +1 -1
- package/dist/generators/spring-cache/resources/gradle/libs.versions.toml +1 -1
- package/dist/generators/spring-cache/templates/src/main/java/_package_/config/CacheConfiguration.java.ejs +3 -3
- package/dist/generators/spring-cloud/generators/gateway/command.js +5 -0
- package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/broker/KafkaConsumer_imperative.java.ejs +1 -1
- package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/broker/KafkaConsumer_reactive.java.ejs +1 -1
- package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/web/rest/KafkaResource_imperative.java.ejs +1 -1
- package/dist/generators/spring-cloud-stream/generators/kafka/templates/src/main/java/_package_/web/rest/KafkaResource_reactive.java.ejs +1 -1
- package/dist/generators/spring-data-couchbase/templates/src/main/java/_package_/config/DatabaseConfiguration.java.ejs +1 -1
- package/dist/generators/spring-data-neo4j/templates/src/main/java/_package_/config/DatabaseConfiguration.java_neo4j.ejs +18 -2
- package/dist/generators/spring-data-relational/templates/src/main/java/_package_/config/DatabaseConfiguration.java.ejs +1 -1
- package/dist/generators/vue/entity-files-vue.js +7 -7
- package/dist/generators/vue/resources/package.json +11 -11
- package/dist/generators/vue/templates/.eslintrc.cjs.ejs +7 -0
- package/dist/lib/eslint/base.js +25 -0
- package/dist/lib/eslint/recommended.js +22 -0
- package/dist/testing/github.js +32 -0
- package/dist/testing/helpers.js +9 -0
- package/dist/testing/index.js +2 -0
- package/dist/testing/sample-config.js +31 -0
- package/dist/types/cli/commands.d.mts +2 -0
- package/dist/types/cli/environment-builder.d.mts +1 -0
- package/dist/types/generators/base/api.d.ts +14 -7
- package/dist/types/generators/base/internal/command.d.ts +2 -0
- package/dist/types/generators/base/internal/index.d.ts +1 -0
- package/dist/types/generators/base/shared-data.d.ts +10 -1
- package/dist/types/generators/base/types.d.ts +12 -0
- package/dist/types/generators/base-application/types.d.ts +11 -0
- package/dist/types/generators/base-core/generator.d.ts +2 -1
- package/dist/types/generators/generator-constants.d.ts +1 -1
- package/dist/types/generators/info/support/extract-info.d.ts +14 -0
- package/dist/types/generators/info/support/index.d.ts +1 -0
- package/dist/types/generators/java/types.d.ts +12 -0
- package/dist/types/generators/maven/internal/xml-store.d.ts +3 -2
- package/dist/types/generators/maven/support/pom-store.d.ts +5 -2
- package/dist/types/generators/maven/types.d.ts +1 -0
- package/dist/types/generators/server/types.d.ts +2 -1
- package/dist/types/lib/eslint/base.d.ts +20 -0
- package/dist/types/lib/eslint/recommended.d.ts +20 -0
- package/dist/types/testing/github.d.ts +11 -0
- package/dist/types/testing/helpers.d.ts +8 -0
- package/dist/types/testing/index.d.ts +2 -0
- package/dist/types/testing/sample-config.d.ts +4 -0
- package/package.json +22 -18
- package/dist/generators/generate-blueprint/templates/.eslintrc.json.ejs +0 -35
|
@@ -174,7 +174,7 @@ export default class JdlGenerator extends BaseGenerator {
|
|
|
174
174
|
return;
|
|
175
175
|
}
|
|
176
176
|
const generatorOptions = { defaults: true, reproducible: this.options.reproducible ?? this.reproducible, force: this.force };
|
|
177
|
-
if (this.ignoreApplication || this.applications.length === 0) {
|
|
177
|
+
if (this.ignoreApplication !== false && (this.ignoreApplication || this.applications.length === 0)) {
|
|
178
178
|
if (this.applications.length === 0) {
|
|
179
179
|
const entities = this.exportedEntities;
|
|
180
180
|
await this.composeWithJHipster(this.entitiesGenerator, {
|
|
@@ -194,11 +194,7 @@ export default class JdlGenerator extends BaseGenerator {
|
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
|
-
else if (this.applications.length
|
|
198
|
-
this.log.info('Generating 1 application');
|
|
199
|
-
await this.composeWithJHipster(this.entrypointGenerator, { generatorOptions });
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
197
|
+
else if (this.applications.length > 1) {
|
|
202
198
|
this.log.info(`Generating ${this.applications.length} applications`);
|
|
203
199
|
await this.composeWithJHipster(this.workspacesGenerator, {
|
|
204
200
|
generatorOptions: {
|
|
@@ -207,6 +203,10 @@ export default class JdlGenerator extends BaseGenerator {
|
|
|
207
203
|
},
|
|
208
204
|
});
|
|
209
205
|
}
|
|
206
|
+
else {
|
|
207
|
+
this.log.info('Generating 1 application');
|
|
208
|
+
await this.composeWithJHipster(this.entrypointGenerator, { generatorOptions });
|
|
209
|
+
}
|
|
210
210
|
},
|
|
211
211
|
});
|
|
212
212
|
}
|
|
@@ -310,6 +310,7 @@ export default class LanguagesGenerator extends BaseApplicationGenerator {
|
|
|
310
310
|
if (application.enableTranslation &&
|
|
311
311
|
application.generateUserManagement &&
|
|
312
312
|
!application.skipServer &&
|
|
313
|
+
application.backendTypeJavaAny &&
|
|
313
314
|
application.backendTypeSpringBoot) {
|
|
314
315
|
updateLanguagesInJava.call(this, { application, control });
|
|
315
316
|
}
|
|
@@ -55,7 +55,7 @@ import org.springframework.core.env.Profiles;
|
|
|
55
55
|
@Configuration
|
|
56
56
|
public class LiquibaseConfiguration {
|
|
57
57
|
|
|
58
|
-
private final Logger log = LoggerFactory.getLogger(LiquibaseConfiguration.class);
|
|
58
|
+
private static final Logger log = LoggerFactory.getLogger(LiquibaseConfiguration.class);
|
|
59
59
|
|
|
60
60
|
private final Environment env;
|
|
61
61
|
|
|
@@ -25,6 +25,7 @@ import cleanupOldServerFilesTask from './cleanup.js';
|
|
|
25
25
|
import { createPomStorage } from './support/index.js';
|
|
26
26
|
export default class MavenGenerator extends BaseApplicationGenerator {
|
|
27
27
|
pomStorage;
|
|
28
|
+
sortMavenPom;
|
|
28
29
|
async beforeQueue() {
|
|
29
30
|
if (!this.fromBlueprint) {
|
|
30
31
|
await this.composeWithBlueprints();
|
|
@@ -35,8 +36,11 @@ export default class MavenGenerator extends BaseApplicationGenerator {
|
|
|
35
36
|
}
|
|
36
37
|
get initializing() {
|
|
37
38
|
return this.asInitializingTaskGroup({
|
|
39
|
+
async parseCommand() {
|
|
40
|
+
await this.parseCurrentJHipsterCommand();
|
|
41
|
+
},
|
|
38
42
|
pomStorage() {
|
|
39
|
-
this.pomStorage = createPomStorage(this);
|
|
43
|
+
this.pomStorage = createPomStorage(this, { sortFile: this.sortMavenPom });
|
|
40
44
|
},
|
|
41
45
|
});
|
|
42
46
|
}
|
|
@@ -72,6 +76,7 @@ export default class MavenGenerator extends BaseApplicationGenerator {
|
|
|
72
76
|
}
|
|
73
77
|
};
|
|
74
78
|
}
|
|
79
|
+
source.mergeMavenPomContent = content => this.pomStorage.merge(content);
|
|
75
80
|
source.addMavenAnnotationProcessor = createForEach(artifact => this.pomStorage.addAnnotationProcessor(artifact));
|
|
76
81
|
source.addMavenDependency = createForEach(artifact => this.pomStorage.addDependency(artifact));
|
|
77
82
|
source.addMavenDependencyManagement = createForEach(artifact => this.pomStorage.addDependencyManagement(artifact));
|
|
@@ -36,19 +36,20 @@ const defaultXmlBuildOptions = {
|
|
|
36
36
|
indentBy: ' ',
|
|
37
37
|
};
|
|
38
38
|
export default class XmlStorage {
|
|
39
|
-
sortFile
|
|
39
|
+
sortFile;
|
|
40
40
|
saveFile;
|
|
41
41
|
loadFile;
|
|
42
42
|
parser;
|
|
43
43
|
builder;
|
|
44
44
|
_cachedStore;
|
|
45
|
-
constructor({ saveFile, loadFile, xmlParserOptions, xmlBuildOptions, }) {
|
|
45
|
+
constructor({ saveFile, loadFile, xmlParserOptions, xmlBuildOptions, sortFile, }) {
|
|
46
46
|
assert(saveFile, 'saveFile callback is required to create a storage');
|
|
47
47
|
assert(loadFile, 'loadFile callback is required to create a storage');
|
|
48
48
|
this.parser = new XMLParser({ ...defaultXmlParserOptions, ...xmlParserOptions });
|
|
49
49
|
this.builder = new XMLBuilder({ ...defaultXmlBuildOptions, ...xmlBuildOptions });
|
|
50
50
|
this.saveFile = saveFile;
|
|
51
51
|
this.loadFile = loadFile;
|
|
52
|
+
this.sortFile = sortFile ?? true;
|
|
52
53
|
}
|
|
53
54
|
clearCache() {
|
|
54
55
|
delete this._cachedStore;
|
|
@@ -59,6 +60,10 @@ export default class XmlStorage {
|
|
|
59
60
|
}
|
|
60
61
|
this.persist(false);
|
|
61
62
|
}
|
|
63
|
+
merge(source) {
|
|
64
|
+
assert(typeof source === 'object', 'Storage `merge` method only accept objects');
|
|
65
|
+
this._cachedStore = merge({}, this.store, source);
|
|
66
|
+
}
|
|
62
67
|
sort() { }
|
|
63
68
|
persist(sort = this.sortFile) {
|
|
64
69
|
if (this._cachedStore) {
|
|
@@ -77,10 +82,6 @@ export default class XmlStorage {
|
|
|
77
82
|
this._cachedStore = this.parser.parse(this.loadFile());
|
|
78
83
|
}
|
|
79
84
|
}
|
|
80
|
-
merge(source) {
|
|
81
|
-
assert(typeof source === 'object', 'Storage `merge` method only accept objects');
|
|
82
|
-
this._cachedStore = merge({}, this.store, source);
|
|
83
|
-
}
|
|
84
85
|
mergeContent(existing, newContent) {
|
|
85
86
|
return newContent ? { ...existing, ...this.parser.parse(newContent) } : existing;
|
|
86
87
|
}
|
|
@@ -55,6 +55,17 @@ const propertiesOrder = [
|
|
|
55
55
|
'spring-boot.version',
|
|
56
56
|
];
|
|
57
57
|
const formatFirstXmlLevel = content => content.replace(/(\n {4}<(?:groupId|distributionManagement|repositories|pluginRepositories|properties|dependencyManagement|dependencies|build|profiles)>)/g, '\n$1');
|
|
58
|
+
const sortSection = section => {
|
|
59
|
+
return Object.fromEntries(Object.entries(section).sort(([key1, value1], [key2, value2]) => {
|
|
60
|
+
if (typeof value1 === typeof value2)
|
|
61
|
+
key1.localeCompare(key2);
|
|
62
|
+
if (typeof value1 === 'string')
|
|
63
|
+
return -1;
|
|
64
|
+
if (typeof value2 === 'string')
|
|
65
|
+
return 1;
|
|
66
|
+
return 0;
|
|
67
|
+
}));
|
|
68
|
+
};
|
|
58
69
|
const isComment = name => name.startsWith('#');
|
|
59
70
|
const toMaxInt = nr => (nr === -1 ? Number.MAX_SAFE_INTEGER : nr);
|
|
60
71
|
const sortWithTemplate = (template, a, b) => {
|
|
@@ -129,7 +140,7 @@ const sortArtifacts = (artifacts) => artifacts.sort((a, b) => {
|
|
|
129
140
|
}
|
|
130
141
|
return a.artifactId.localeCompare(b.artifactId);
|
|
131
142
|
});
|
|
132
|
-
const sortProfiles = (profiles) => profiles.sort((a, b) => a.id
|
|
143
|
+
const sortProfiles = (profiles) => profiles.sort((a, b) => a.id?.localeCompare(b.id) ?? 1);
|
|
133
144
|
const ensureChildPath = (node, childPath) => {
|
|
134
145
|
let child = get(node, childPath);
|
|
135
146
|
if (child)
|
|
@@ -158,8 +169,8 @@ const ensureChild = (current, ...childPath) => {
|
|
|
158
169
|
const reorderArtifact = ({ groupId, artifactId, inProfile, version, ...rest }) => ({ inProfile, groupId, artifactId, version, ...rest });
|
|
159
170
|
const reorderDependency = ({ groupId, artifactId, inProfile, version, type, scope, classifier, ...rest }) => ({ inProfile, groupId, artifactId, version, type, scope, classifier, ...rest });
|
|
160
171
|
export default class PomStorage extends XmlStorage {
|
|
161
|
-
constructor({ saveFile, loadFile }) {
|
|
162
|
-
super({ saveFile, loadFile });
|
|
172
|
+
constructor({ saveFile, loadFile, sortFile }) {
|
|
173
|
+
super({ saveFile, loadFile, sortFile });
|
|
163
174
|
}
|
|
164
175
|
addProperty({ inProfile, property, value = null }) {
|
|
165
176
|
const node = this.getNode({ nodePath: 'properties', profile: inProfile });
|
|
@@ -262,11 +273,14 @@ export default class PomStorage extends XmlStorage {
|
|
|
262
273
|
if (Array.isArray(project.dependencyManagement?.dependencies?.dependency)) {
|
|
263
274
|
project.dependencyManagement.dependencies.dependency = sortArtifacts(project.dependencyManagement.dependencies.dependency);
|
|
264
275
|
}
|
|
265
|
-
if (
|
|
266
|
-
project.build
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
276
|
+
if (project.build) {
|
|
277
|
+
project.build = sortSection(project.build);
|
|
278
|
+
if (Array.isArray(project.build.plugins?.plugin)) {
|
|
279
|
+
project.build.plugins.plugin = sortArtifacts(project.build.plugins.plugin);
|
|
280
|
+
}
|
|
281
|
+
if (Array.isArray(project.build.pluginManagement?.plugins?.plugin)) {
|
|
282
|
+
project.build.pluginManagement.plugins.plugin = sortArtifacts(project.build.pluginManagement.plugins.plugin);
|
|
283
|
+
}
|
|
270
284
|
}
|
|
271
285
|
if (Array.isArray(project.profiles?.profile)) {
|
|
272
286
|
project.profiles.profile = sortProfiles(project.profiles.profile);
|
|
@@ -280,11 +294,12 @@ const emptyPomFile = `<?xml version="1.0" encoding="UTF-8"?>
|
|
|
280
294
|
<modelVersion>4.0.0</modelVersion>
|
|
281
295
|
</project>
|
|
282
296
|
`;
|
|
283
|
-
export const createPomStorage = (generator) => {
|
|
297
|
+
export const createPomStorage = (generator, { sortFile } = {}) => {
|
|
284
298
|
const loadFile = () => generator.readDestination('pom.xml', { defaults: emptyPomFile })?.toString() ?? '';
|
|
285
299
|
const pomStorage = new PomStorage({
|
|
286
300
|
loadFile,
|
|
287
301
|
saveFile: content => generator.writeDestination('pom.xml', formatFirstXmlLevel(content)),
|
|
302
|
+
sortFile,
|
|
288
303
|
});
|
|
289
304
|
generator.fs.store.on('change', filename => {
|
|
290
305
|
if (filename === generator.destinationPath('pom.xml')) {
|
|
@@ -15,4 +15,4 @@
|
|
|
15
15
|
# specific language governing permissions and limitations
|
|
16
16
|
# under the License.
|
|
17
17
|
wrapperVersion=3.3.2
|
|
18
|
-
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.
|
|
18
|
+
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.8/apache-maven-3.9.8-bin.zip
|
|
@@ -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 { clientApplicationTemplatesBlock
|
|
19
|
+
import { clientApplicationTemplatesBlock } from '../client/support/index.js';
|
|
20
20
|
export const reactFiles = {
|
|
21
21
|
client: [
|
|
22
22
|
{
|
|
@@ -48,16 +48,16 @@ export const reactFiles = {
|
|
|
48
48
|
},
|
|
49
49
|
],
|
|
50
50
|
};
|
|
51
|
-
export async function writeEntitiesFiles({ application, entities }) {
|
|
52
|
-
for (const entity of filterEntitiesAndPropertiesForClient(entities).filter(entity => !entity.builtInUser)) {
|
|
51
|
+
export async function writeEntitiesFiles({ control, application, entities }) {
|
|
52
|
+
for (const entity of (control.filterEntitiesAndPropertiesForClient ?? (entities => entities))(entities).filter(entity => !entity.builtInUser)) {
|
|
53
53
|
await this.writeFiles({
|
|
54
54
|
sections: reactFiles,
|
|
55
55
|
context: { ...application, ...entity },
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
export async function postWriteEntitiesFiles({ application, entities }) {
|
|
60
|
-
for (const entity of filterEntitiesForClient(entities).filter(entity => !entity.builtInUser)) {
|
|
59
|
+
export async function postWriteEntitiesFiles({ control, application, entities }) {
|
|
60
|
+
for (const entity of (control.filterEntitiesForClient ?? (entities => entities))(entities).filter(entity => !entity.builtInUser)) {
|
|
61
61
|
if (!entity.embedded) {
|
|
62
62
|
const { entityInstance, entityClass, entityAngularName, entityFolderName, entityFileName } = entity;
|
|
63
63
|
const { applicationTypeMicroservice, clientSrcDir } = application;
|
|
@@ -69,8 +69,8 @@ export async function postWriteEntitiesFiles({ application, entities }) {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
export function cleanupEntitiesFiles({ application, entities }) {
|
|
73
|
-
for (const entity of filterEntitiesForClient(entities).filter(entity => !entity.builtInUser)) {
|
|
72
|
+
export function cleanupEntitiesFiles({ control, application, entities }) {
|
|
73
|
+
for (const entity of (control.filterEntitiesForClient ?? (entities => entities))(entities).filter(entity => !entity.builtInUser)) {
|
|
74
74
|
const { entityFolderName, entityFileName } = entity;
|
|
75
75
|
if (this.isJhipsterVersionLessThan('7.0.0-beta.1')) {
|
|
76
76
|
this.removeFile(`${application.clientTestDir}spec/app/entities/${entityFolderName}/${entityFileName}-reducer.spec.ts`);
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"path-browserify": "1.0.1",
|
|
12
12
|
"react": "18.3.1",
|
|
13
13
|
"react-dom": "18.3.1",
|
|
14
|
-
"react-hook-form": "7.
|
|
14
|
+
"react-hook-form": "7.52.0",
|
|
15
15
|
"react-jhipster": "0.25.3",
|
|
16
16
|
"react-loadable": "5.5.0",
|
|
17
17
|
"react-redux": "9.1.2",
|
|
@@ -24,23 +24,23 @@
|
|
|
24
24
|
"rxjs": "7.8.1",
|
|
25
25
|
"sockjs-client": "1.6.1",
|
|
26
26
|
"sonar-scanner": "3.1.0",
|
|
27
|
-
"tslib": "2.6.
|
|
28
|
-
"uuid": "
|
|
27
|
+
"tslib": "2.6.3",
|
|
28
|
+
"uuid": "10.0.0",
|
|
29
29
|
"webstomp-client": "1.2.6"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@module-federation/utilities": "3.0.3-0",
|
|
33
|
-
"@testing-library/react": "
|
|
33
|
+
"@testing-library/react": "16.0.0",
|
|
34
34
|
"@types/jest": "29.5.12",
|
|
35
|
-
"@types/lodash": "4.17.
|
|
35
|
+
"@types/lodash": "4.17.5",
|
|
36
36
|
"@types/node": "20.11.25",
|
|
37
37
|
"@types/react": "18.3.3",
|
|
38
38
|
"@types/react-dom": "18.3.0",
|
|
39
39
|
"@types/react-redux": "7.1.33",
|
|
40
40
|
"@types/redux": "3.6.31",
|
|
41
41
|
"@types/webpack-env": "1.18.5",
|
|
42
|
-
"@typescript-eslint/eslint-plugin": "7.
|
|
43
|
-
"@typescript-eslint/parser": "7.
|
|
42
|
+
"@typescript-eslint/eslint-plugin": "7.13.1",
|
|
43
|
+
"@typescript-eslint/parser": "7.13.1",
|
|
44
44
|
"autoprefixer": "10.4.19",
|
|
45
45
|
"browser-sync": "2.29.3",
|
|
46
46
|
"browser-sync-webpack-plugin": "2.3.0",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"css-minimizer-webpack-plugin": "7.0.0",
|
|
52
52
|
"eslint": "8.57.0",
|
|
53
53
|
"eslint-config-prettier": "9.1.0",
|
|
54
|
-
"eslint-plugin-react": "7.34.
|
|
54
|
+
"eslint-plugin-react": "7.34.3",
|
|
55
55
|
"eslint-webpack-plugin": "4.2.0",
|
|
56
56
|
"folder-hash": "4.0.4",
|
|
57
57
|
"fork-ts-checker-webpack-plugin": "9.0.2",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"react-infinite-scroll-component": "6.1.0",
|
|
70
70
|
"redux-mock-store": "1.5.4",
|
|
71
71
|
"rimraf": "5.0.7",
|
|
72
|
-
"sass": "1.77.
|
|
72
|
+
"sass": "1.77.6",
|
|
73
73
|
"sass-loader": "14.2.1",
|
|
74
74
|
"simple-progress-webpack-plugin": "2.0.0",
|
|
75
75
|
"sinon": "18.0.0",
|
|
@@ -78,10 +78,10 @@
|
|
|
78
78
|
"style-loader": "4.0.0",
|
|
79
79
|
"terser-webpack-plugin": "5.3.10",
|
|
80
80
|
"thread-loader": "4.0.2",
|
|
81
|
-
"ts-jest": "29.1.
|
|
81
|
+
"ts-jest": "29.1.5",
|
|
82
82
|
"ts-loader": "9.5.1",
|
|
83
|
-
"typescript": "5.
|
|
84
|
-
"webpack": "5.
|
|
83
|
+
"typescript": "5.5.2",
|
|
84
|
+
"webpack": "5.92.1",
|
|
85
85
|
"webpack-cli": "5.1.4",
|
|
86
86
|
"webpack-dev-server": "5.0.4",
|
|
87
87
|
"webpack-merge": "5.10.0",
|
|
@@ -34,6 +34,9 @@ import { hasAnyAuthority } from 'app/shared/auth/private-route';
|
|
|
34
34
|
import ErrorBoundary from 'app/shared/error/error-boundary';
|
|
35
35
|
import { AUTHORITIES } from 'app/config/constants';
|
|
36
36
|
import AppRoutes from 'app/routes';
|
|
37
|
+
<%_ if (enableTranslation && enableI18nRTL) { _%>
|
|
38
|
+
import { setTextDirection } from './config/translation';
|
|
39
|
+
<%_ } _%>
|
|
37
40
|
|
|
38
41
|
const baseHref = document.querySelector('base').getAttribute('href').replace(/\/$/, '');
|
|
39
42
|
|
|
@@ -54,6 +57,12 @@ export const App = () => {
|
|
|
54
57
|
const isInProduction = useAppSelector(state => state.applicationProfile.inProduction);
|
|
55
58
|
const isOpenAPIEnabled = useAppSelector(state => state.applicationProfile.isOpenAPIEnabled);
|
|
56
59
|
|
|
60
|
+
<%_ if (enableTranslation && enableI18nRTL) { _%>
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
setTextDirection(currentLocale);
|
|
63
|
+
}, [currentLocale]);
|
|
64
|
+
<%_ } _%>
|
|
65
|
+
|
|
57
66
|
const paddingTop = '60px';
|
|
58
67
|
return (
|
|
59
68
|
<BrowserRouter basename={baseHref}>
|
|
@@ -34,6 +34,10 @@ export const locales = Object.keys(languages).sort();
|
|
|
34
34
|
|
|
35
35
|
<%_ if (enableI18nRTL) { _%>
|
|
36
36
|
export const isRTL = (lang: string): boolean => languages[lang] && languages[lang].rtl;
|
|
37
|
+
|
|
38
|
+
export const setTextDirection = (lang: string) => {
|
|
39
|
+
document.querySelector('html').setAttribute('dir', isRTL(lang) ? 'rtl' : 'ltr');
|
|
40
|
+
};
|
|
37
41
|
<%_ } _%>
|
|
38
42
|
|
|
39
43
|
export const registerLocale = store => {
|
|
@@ -23,7 +23,11 @@ import React, { useEffect } from 'react';
|
|
|
23
23
|
<%_ } else { _%>
|
|
24
24
|
import React from 'react';
|
|
25
25
|
<%_ } _%>
|
|
26
|
+
<%_ if (authenticationTypeOauth2) { _%>
|
|
27
|
+
import { useLocation, useNavigate } from 'react-router-dom';
|
|
28
|
+
<%_ } else { _%>
|
|
26
29
|
import { Link } from 'react-router-dom';
|
|
30
|
+
<%_ } _%>
|
|
27
31
|
import { Translate } from 'react-jhipster';
|
|
28
32
|
import { Row, Col, Alert } from 'reactstrap';
|
|
29
33
|
|
|
@@ -35,6 +39,9 @@ import { useAppSelector } from 'app/config/store';
|
|
|
35
39
|
export const Home = () => {
|
|
36
40
|
const account = useAppSelector(state => state.authentication.account);
|
|
37
41
|
<%_ if (authenticationTypeOauth2) { _%>
|
|
42
|
+
const pageLocation = useLocation();
|
|
43
|
+
const navigate = useNavigate();
|
|
44
|
+
|
|
38
45
|
useEffect(() => {
|
|
39
46
|
const redirectURL = localStorage.getItem(REDIRECT_URL);
|
|
40
47
|
if (redirectURL) {
|
|
@@ -65,7 +72,14 @@ export const Home = () => {
|
|
|
65
72
|
<Translate contentKey="global.messages.info.authenticated.prefix">If you want to </Translate>
|
|
66
73
|
<% if (!enableTranslation) { %><span> </span><% } %>
|
|
67
74
|
<%_ if (authenticationTypeOauth2) { _%>
|
|
68
|
-
<a
|
|
75
|
+
<a
|
|
76
|
+
className="alert-link"
|
|
77
|
+
onClick={() =>
|
|
78
|
+
navigate(getLoginUrl(), {
|
|
79
|
+
state: { from: pageLocation },
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
>
|
|
69
83
|
<Translate contentKey="global.messages.info.authenticated.link">sign in</Translate>
|
|
70
84
|
</a>
|
|
71
85
|
<%_ } else { _%>
|
package/dist/generators/react/templates/src/main/webapp/app/modules/login/login-redirect.tsx.ejs
CHANGED
|
@@ -7,7 +7,11 @@ export const LoginRedirect = () => {
|
|
|
7
7
|
|
|
8
8
|
useEffect(() => {
|
|
9
9
|
localStorage.setItem(REDIRECT_URL, pageLocation.state.from.pathname);
|
|
10
|
+
<%_ if (authenticationTypeOauth2) { _%>
|
|
11
|
+
window.location.href = '/oauth2/authorization/oidc';
|
|
12
|
+
<%_ } else { _%>
|
|
10
13
|
window.location.reload();
|
|
14
|
+
<%_ } _%>
|
|
11
15
|
});
|
|
12
16
|
|
|
13
17
|
return null;
|
|
@@ -22,13 +22,15 @@ import { useAppDispatch, useAppSelector } from 'app/config/store';
|
|
|
22
22
|
import { logout } from 'app/shared/reducers/authentication';
|
|
23
23
|
|
|
24
24
|
export const Logout = () => {
|
|
25
|
-
const
|
|
25
|
+
const authentication = useAppSelector(state => state.authentication);
|
|
26
26
|
const dispatch = useAppDispatch();
|
|
27
27
|
|
|
28
28
|
useLayoutEffect(() => {
|
|
29
29
|
dispatch(logout());
|
|
30
|
-
if (logoutUrl) {
|
|
31
|
-
window.location.href = logoutUrl;
|
|
30
|
+
if (authentication.logoutUrl) {
|
|
31
|
+
window.location.href = authentication.logoutUrl;
|
|
32
|
+
} else if (!authentication.isAuthenticated) {
|
|
33
|
+
window.location.href = '/';
|
|
32
34
|
}
|
|
33
35
|
});
|
|
34
36
|
|
|
@@ -112,7 +112,7 @@ const AppRoutes = () => {
|
|
|
112
112
|
}
|
|
113
113
|
/>
|
|
114
114
|
<%_ if (authenticationTypeOauth2) { _%>
|
|
115
|
-
<Route path="
|
|
115
|
+
<Route path="sign-in" element={<LoginRedirect />} />
|
|
116
116
|
<%_ } _%>
|
|
117
117
|
<%_ if (applicationTypeGateway && microfrontend) { _%>
|
|
118
118
|
<%_ for (const remote of microfrontends) { _%>
|
package/dist/generators/react/templates/src/main/webapp/app/shared/auth/private-route.spec.tsx.ejs
CHANGED
|
@@ -92,7 +92,7 @@ describe('private-route component', () => {
|
|
|
92
92
|
</PrivateRoute>
|
|
93
93
|
}
|
|
94
94
|
/>
|
|
95
|
-
<Route path="<% if(authenticationTypeOauth2) { %>/
|
|
95
|
+
<Route path="<% if(authenticationTypeOauth2) { %>/sign-in<% } else { %>/login<% } %>" element={<div>Login</div>} />
|
|
96
96
|
</Routes>,
|
|
97
97
|
{
|
|
98
98
|
isAuthenticated: false,
|
package/dist/generators/react/templates/src/main/webapp/app/shared/auth/private-route.tsx.ejs
CHANGED
|
@@ -42,7 +42,7 @@ export const PrivateRoute = ({ children, hasAnyAuthorities = [], ...rest }: IOwn
|
|
|
42
42
|
return (
|
|
43
43
|
<Navigate
|
|
44
44
|
to={{
|
|
45
|
-
pathname: '<%_ if (authenticationTypeOauth2) { _%>/
|
|
45
|
+
pathname: '<%_ if (authenticationTypeOauth2) { _%>/sign-in<%_ } else {_%>/login<%_ } _%>',
|
|
46
46
|
search: pageLocation.search,
|
|
47
47
|
}}
|
|
48
48
|
replace
|
package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header.tsx.ejs
CHANGED
|
@@ -28,9 +28,6 @@ import {
|
|
|
28
28
|
} from 'reactstrap';
|
|
29
29
|
import LoadingBar from 'react-redux-loading-bar';
|
|
30
30
|
|
|
31
|
-
<%_ if (enableTranslation && enableI18nRTL) { _%>
|
|
32
|
-
import { isRTL } from 'app/config/translation';
|
|
33
|
-
<%_ } _%>
|
|
34
31
|
import { Home, Brand } from './header-components';
|
|
35
32
|
import { AdminMenu, EntitiesMenu, AccountMenu<%_ if (enableTranslation) { _%>, LocaleMenu<%_ } _%>} from '../menus';
|
|
36
33
|
<%_ if (enableTranslation) { _%>
|
|
@@ -52,9 +49,6 @@ export interface IHeaderProps {
|
|
|
52
49
|
|
|
53
50
|
const Header = (props: IHeaderProps) => {
|
|
54
51
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
55
|
-
<%_ if (enableI18nRTL) { _%>
|
|
56
|
-
useEffect(() => document.querySelector('html').setAttribute('dir', isRTL(Storage.session.get('locale')) ? 'rtl' : 'ltr'));
|
|
57
|
-
<%_ } _%>
|
|
58
52
|
|
|
59
53
|
<%_ if (enableTranslation) { _%>
|
|
60
54
|
const dispatch = useAppDispatch();
|
|
@@ -63,9 +57,6 @@ const Header = (props: IHeaderProps) => {
|
|
|
63
57
|
const langKey = event.target.value;
|
|
64
58
|
Storage.session.set('locale', langKey);
|
|
65
59
|
dispatch(setLocale(langKey));
|
|
66
|
-
<%_ if (enableI18nRTL) { _%>
|
|
67
|
-
document.querySelector('html').setAttribute('dir', isRTL(langKey) ? 'rtl' : 'ltr');
|
|
68
|
-
<%_ } _%>
|
|
69
60
|
}
|
|
70
61
|
<%_ } _%>
|
|
71
62
|
|
package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/account.spec.tsx.ejs
CHANGED
|
@@ -68,9 +68,7 @@ describe('AccountMenu', () => {
|
|
|
68
68
|
it('Renders a guest AccountMenu component', () => {
|
|
69
69
|
const html = guestWrapper();
|
|
70
70
|
|
|
71
|
-
<%_ if (authenticationTypeOauth2) { _%>
|
|
72
|
-
expect(html).toContain(getLoginUrl());
|
|
73
|
-
<%_ } else { _%>
|
|
71
|
+
<%_ if (!authenticationTypeOauth2) { _%>
|
|
74
72
|
expect(html).toContain('/login');
|
|
75
73
|
<%_ } _%>
|
|
76
74
|
expect(html).not.toContain('/logout');
|
package/dist/generators/react/templates/src/main/webapp/app/shared/layout/menus/account.tsx.ejs
CHANGED
|
@@ -27,6 +27,9 @@ import { Translate, translate } from 'react-jhipster';
|
|
|
27
27
|
import { getLoginUrl } from 'app/shared/util/url-utils';
|
|
28
28
|
<%_ } _%>
|
|
29
29
|
import { NavDropdown } from './menu-components';
|
|
30
|
+
<%_ if (authenticationTypeOauth2) { _%>
|
|
31
|
+
import { useLocation, useNavigate } from 'react-router';
|
|
32
|
+
<%_ } _%>
|
|
30
33
|
|
|
31
34
|
|
|
32
35
|
const accountMenuItemsAuthenticated = () => (
|
|
@@ -42,18 +45,38 @@ const accountMenuItemsAuthenticated = () => (
|
|
|
42
45
|
</>
|
|
43
46
|
);
|
|
44
47
|
|
|
48
|
+
<%_ if (authenticationTypeOauth2) { _%>
|
|
49
|
+
const accountMenuItems = () => {
|
|
50
|
+
const navigate = useNavigate();
|
|
51
|
+
const pageLocation = useLocation();
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<>
|
|
55
|
+
<DropdownItem
|
|
56
|
+
id="login-item"
|
|
57
|
+
tag="a"
|
|
58
|
+
data-cy="login"
|
|
59
|
+
onClick={() =>
|
|
60
|
+
navigate(getLoginUrl(), {
|
|
61
|
+
state: { from: pageLocation },
|
|
62
|
+
})
|
|
63
|
+
}
|
|
64
|
+
>
|
|
65
|
+
<FontAwesomeIcon icon="sign-in-alt" /> <Translate contentKey="global.menu.account.login">Sign in</Translate>
|
|
66
|
+
</DropdownItem>
|
|
67
|
+
</>
|
|
68
|
+
);
|
|
69
|
+
};
|
|
70
|
+
<%_ } else { _%>
|
|
45
71
|
const accountMenuItems = () => (
|
|
46
72
|
<>
|
|
47
|
-
<%_ if (!authenticationTypeOauth2) { _%>
|
|
48
73
|
<MenuItem id="login-item" icon="sign-in-alt" to="/login" data-cy="login"><Translate contentKey="global.menu.account.login">Sign in</Translate></MenuItem>
|
|
49
|
-
<%_
|
|
50
|
-
<DropdownItem id="login-item" tag="a" href={getLoginUrl()} data-cy="login"><FontAwesomeIcon icon="sign-in-alt" /> <Translate contentKey="global.menu.account.login">Sign in</Translate></DropdownItem>
|
|
51
|
-
<%_ } _%>
|
|
52
|
-
<%_ if (generateUserManagement) { _%>
|
|
74
|
+
<%_ if (generateUserManagement) { _%>
|
|
53
75
|
<MenuItem icon="user-plus" to="/account/register" data-cy="register"><Translate contentKey="global.menu.account.register">Register</Translate></MenuItem>
|
|
54
|
-
<%_ } _%>
|
|
76
|
+
<%_ } _%>
|
|
55
77
|
</>
|
|
56
78
|
);
|
|
79
|
+
<%_ } _%>
|
|
57
80
|
|
|
58
81
|
export const AccountMenu = ({ isAuthenticated = false }) => (
|
|
59
82
|
<NavDropdown icon="user" name={translate('global.menu.account.main')} id="account-menu" data-cy="accountMenu">
|
|
@@ -21,7 +21,7 @@ export const getLoginUrl = () => {
|
|
|
21
21
|
|
|
22
22
|
// If you have configured multiple OIDC providers, then, you can update this URL to /login.
|
|
23
23
|
// It will show a Spring Security generated login page with links to configured OIDC providers.
|
|
24
|
-
return `//${location.hostname}${port}
|
|
24
|
+
return `//${location.hostname}${port}/sign-in`;
|
|
25
25
|
}
|
|
26
26
|
<%_ if (authenticationTypeOauth2) { _%>
|
|
27
27
|
export const REDIRECT_URL = 'redirectURL';
|
|
@@ -428,14 +428,16 @@ export default class JHipsterServerGenerator extends BaseApplicationGenerator {
|
|
|
428
428
|
packageJsonE2eScripts({ application }) {
|
|
429
429
|
const scriptsStorage = this.packageJson.createStorage('scripts');
|
|
430
430
|
const buildCmd = application.buildToolGradle ? 'gradlew' : 'mvnw';
|
|
431
|
+
const applicationWaitTimeout = WAIT_TIMEOUT * (application.applicationTypeGateway ? 2 : 1);
|
|
432
|
+
const applicationEndpoint = application.applicationTypeMicroservice
|
|
433
|
+
? `http-get://127.0.0.1:${application.gatewayServerPort}/${application.endpointPrefix}/management/health/readiness`
|
|
434
|
+
: 'http-get://127.0.0.1:$npm_package_config_backend_port/management/health';
|
|
435
|
+
scriptsStorage.set({
|
|
436
|
+
'ci:server:await': `echo "Waiting for server at port $npm_package_config_backend_port to start" && wait-on -t ${applicationWaitTimeout} ${applicationEndpoint} && echo "Server at port $npm_package_config_backend_port started"`,
|
|
437
|
+
});
|
|
431
438
|
// TODO add e2eTests property to application.
|
|
432
439
|
if (this.jhipsterConfig.testFrameworks?.includes('cypress')) {
|
|
433
|
-
const applicationWaitTimeout = WAIT_TIMEOUT * (application.applicationTypeGateway ? 2 : 1);
|
|
434
|
-
const applicationEndpoint = application.applicationTypeMicroservice
|
|
435
|
-
? `http-get://127.0.0.1:${application.gatewayServerPort}/${application.endpointPrefix}/management/health/readiness`
|
|
436
|
-
: 'http-get://127.0.0.1:$npm_package_config_backend_port/management/health';
|
|
437
440
|
scriptsStorage.set({
|
|
438
|
-
'ci:server:await': `echo "Waiting for server at port $npm_package_config_backend_port to start" && wait-on -t ${applicationWaitTimeout} ${applicationEndpoint} && echo "Server at port $npm_package_config_backend_port started"`,
|
|
439
441
|
'pree2e:headless': 'npm run ci:server:await',
|
|
440
442
|
'ci:e2e:run': 'concurrently -k -s first "npm run ci:e2e:server:start" "npm run e2e:headless"',
|
|
441
443
|
'e2e:dev': `concurrently -k -s first "./${buildCmd}" "npm run e2e"`,
|