Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add pinia for vue 3 #1188

Merged
merged 1 commit into from
Apr 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 136 additions & 8 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
},
"dependencies": {
"axios": "0.26.1",
"pinia": "2.0.12",
"pinia-plugin-persist": "1.0.0",
"vue": "3.2.31",
"vue-router": "4.0.14"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ public void addVue(Project project) {
vueService.addVue(project);
}

public void addPinia(Project project) {
vueService.addPinia(project);
}

public void addStyledVue(Project project) {
vueService.addStyledVue(project);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,36 @@
package tech.jhipster.lite.generator.client.vue.core.domain;

import java.util.Collection;
import java.util.List;

public class Vue {

public static final String ROUTER_IMPORT = "import router from \'./router/router\';";
public static final String ROUTER_PROVIDER = "app.use(router);";
public static final Collection<String> PINIA_IMPORTS = List.of(
"import {createPinia} from 'pinia';",
"import piniaPersist from 'pinia-plugin-persist'"
);
public static final Collection<String> PINIA_PROVIDERS = List.of(
"const pinia = createPinia();",
"pinia.use(piniaPersist);",
"app.use(pinia);"
);

private Vue() {}

public static List<String> dependencies() {
return List.of("vue");
}

public static List<String> piniaDependencies() {
return List.of("pinia", "pinia-plugin-persist");
}

public static List<String> piniaDevDependencies() {
return List.of("@pinia/testing");
}

public static List<String> routerDependencies() {
return List.of("vue-router");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,15 @@ public class VueDomainService implements VueService {
public static final String SOURCE = "client/vue";
public static final String NEEDLE_IMPORT = "// jhipster-needle-main-ts-import";
public static final String NEEDLE_PROVIDER = "// jhipster-needle-main-ts-provider";
public static final String SOURCE_PRIMARY = getPath(SOURCE, "webapp/app/common/primary/app");
public static final String DESTINATION_PRIMARY = "src/main/webapp/app/common/primary/app";
public static final String SOURCE_PRIMARY = getPath(SOURCE, "webapp/app/common/primary");
public static final String SOURCE_TEST_PRIMARY = getPath(SOURCE, "test/spec/common/primary");
public static final String SOURCE_PRIMARY_APP = getPath(SOURCE_PRIMARY, "app");
public static final String DESTINATION_PRIMARY = "src/main/webapp/app/common/primary";
public static final String DESTINATION_PRIMARY_APP = DESTINATION_PRIMARY + "/app";
public static final String DESTINATION_PRIMARY_TEST = "src/test/javascript/spec/common/primary";
public static final String DESTINATION_PRIMARY_ROUTER = DESTINATION_PRIMARY + "/app";
public static final String DESTINATION_APP = "src/main/webapp/app";
public static final String DESTINATION_ROUTER = DESTINATION_APP + "/router";

private final ProjectRepository projectRepository;
private final NpmService npmService;
Expand All @@ -42,6 +48,14 @@ public void addStyledVue(Project project) {
addAppFilesWithCss(project);
}

@Override
public void addPinia(Project project) {
Assert.notNull("project", project);

addPiniaDependencies(project);
addPiniaMainConfiguration(project);
}

private void addCommonVue(Project project) {
Assert.notNull("project", project);
addDependencies(project);
Expand All @@ -58,6 +72,18 @@ public void addDependencies(Project project) {
Vue.dependencies().forEach(dependency -> addDependency(project, dependency));
}

public void addPiniaDependencies(Project project) {
Vue.piniaDependencies().forEach(dependency -> addDependency(project, dependency));
Vue.piniaDevDependencies().forEach(devDependency -> addDevDependency(project, devDependency));
}

private void addPiniaMainConfiguration(Project project) {
Vue.PINIA_IMPORTS.forEach(importLine -> addNewNeedleLineToFile(project, importLine, DESTINATION_APP, MAIN_TYPESCRIPT, NEEDLE_IMPORT));
Vue.PINIA_PROVIDERS.forEach(providerLine ->
addNewNeedleLineToFile(project, providerLine, DESTINATION_APP, MAIN_TYPESCRIPT, NEEDLE_PROVIDER)
);
}

public void addDevDependencies(Project project) {
Vue.devDependencies().forEach(devDependency -> addDevDependency(project, devDependency));
}
Expand Down Expand Up @@ -126,7 +152,7 @@ private void addRouterFiles(Project project) {
}

private void addRouterConfigAndTestFiles(Project project) {
projectRepository.template(project, getPath(SOURCE, "webapp/app/router"), "router.ts", "src/main/webapp/app/router");
projectRepository.template(project, getPath(SOURCE, "webapp/app/router"), ROUTER_TYPESCRIPT, "src/main/webapp/app/router");
projectRepository.template(project, getPath(SOURCE, "test/spec/router"), "Router.spec.ts", "src/test/javascript/spec/router");
}

Expand All @@ -143,29 +169,24 @@ private void addNewNeedleLineToFile(Project project, String importLine, String f
public void addAppFiles(Project project) {
project.addDefaultConfig(BASE_NAME);

projectRepository.template(project, SOURCE_PRIMARY, "App.component.ts", DESTINATION_PRIMARY);
projectRepository.template(project, SOURCE_PRIMARY, "index.ts", DESTINATION_PRIMARY);
projectRepository.template(project, SOURCE_PRIMARY_APP, "App.component.ts", DESTINATION_PRIMARY_APP);
projectRepository.template(project, SOURCE_PRIMARY_APP, "index.ts", DESTINATION_PRIMARY_APP);

projectRepository.template(
project,
getPath(SOURCE, "test/spec/common/primary/app"),
"App.spec.ts",
"src/test/javascript/spec/common/primary/app"
);
projectRepository.template(project, getPath(SOURCE_TEST_PRIMARY, "app"), "App.spec.ts", DESTINATION_PRIMARY_TEST + "/app");
}

public void addAppFilesWithoutCss(Project project) {
project.addDefaultConfig(BASE_NAME);

projectRepository.template(project, SOURCE_PRIMARY, "App.html", DESTINATION_PRIMARY);
projectRepository.template(project, SOURCE_PRIMARY, "App.vue", DESTINATION_PRIMARY);
projectRepository.template(project, SOURCE_PRIMARY_APP, "App.html", DESTINATION_PRIMARY_APP);
projectRepository.template(project, SOURCE_PRIMARY_APP, "App.vue", DESTINATION_PRIMARY_APP);
}

public void addAppFilesWithCss(Project project) {
project.addDefaultConfig(BASE_NAME);

projectRepository.template(project, SOURCE_PRIMARY, "StyledApp.html", DESTINATION_PRIMARY, "App.html");
projectRepository.template(project, SOURCE_PRIMARY, "StyledApp.vue", DESTINATION_PRIMARY, "App.vue");
projectRepository.template(project, SOURCE_PRIMARY_APP, "StyledApp.html", DESTINATION_PRIMARY_APP, "App.html");
projectRepository.template(project, SOURCE_PRIMARY_APP, "StyledApp.vue", DESTINATION_PRIMARY_APP, "App.vue");

projectRepository.add(
project,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@ public interface VueService {
void addVue(Project project);

void addStyledVue(Project project);

void addPinia(Project project);
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,13 @@ public void addStyledVue(@RequestBody ProjectDTO projectDTO) {
Project project = ProjectDTO.toProject(projectDTO);
vueApplicationService.addStyledVue(project);
}

@Operation(summary = "Add Pinia", description = "Add pinia for state management")
@ApiResponse(responseCode = "500", description = "An error occurred while adding Pinia")
@PostMapping("/pinia")
@GeneratorStep(id = GeneratorAction.VUE_PINIA)
public void addPinia(@RequestBody ProjectDTO projectDTO) {
Project project = ProjectDTO.toProject(projectDTO);
vueApplicationService.addPinia(project);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ private Constants() {}
public static final String MAIN_TYPESCRIPT = "main.ts";
public static final String JHIPSTER_FOLDER = ".jhipster";
public static final String HISTORY_JSON = "history.json";
public static final String ROUTER_TYPESCRIPT = "router.ts";

public static final String COMMENT_PROPERTIES_PREFIX = "#";
public static final String KEY_VALUE_PROPERTIES_SEPARATOR = "=";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ private GeneratorAction() {}

public static final String VUE = "vue";
public static final String VUE_STYLED = "vue-styled";
public static final String VUE_PINIA = "vue-pinia";

public static final String JIB = "jib";
public static final String DOCKERFILE = "dockerfile";
Expand Down
3 changes: 3 additions & 0 deletions src/main/resources/generator/dependencies/vue/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
"description": "JHipster Lite : used for Vite+Vue3 dependencies",
"license": "Apache-2.0",
"dependencies": {
"pinia": "2.0.12",
"pinia-plugin-persist": "1.0.0",
"vue": "3.2.31",
"vue-router": "4.0.14"
},
"devDependencies": {
"@pinia/testing": "0.0.10",
"@rushstack/eslint-patch": "1.1.1",
"@types/jest": "27.4.1",
"@typescript-eslint/parser": "5.17.0",
Expand Down
Loading