Skip to content

Commit

Permalink
Merge pull request #1188 from seraphinandrieux/add-pinia
Browse files Browse the repository at this point in the history
Add pinia for vue 3
  • Loading branch information
pascalgrimaud authored Apr 3, 2022
2 parents 5097fc4 + 2a1d658 commit bcdd8fd
Show file tree
Hide file tree
Showing 16 changed files with 284 additions and 28 deletions.
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

0 comments on commit bcdd8fd

Please sign in to comment.