edit views
This commit is contained in:
parent
e3a071a7f1
commit
2aeeb016fd
9743
package-lock.json
generated
Normal file
9743
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
114
package.json
Normal file
114
package.json
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
{
|
||||||
|
"name": "no-name",
|
||||||
|
"license": "UNLICENSED",
|
||||||
|
"type": "module",
|
||||||
|
"dependencies": {
|
||||||
|
"@f0rce/ace-widget": "1.0.2",
|
||||||
|
"@polymer/polymer": "3.5.1",
|
||||||
|
"@vaadin/bundles": "24.4.2",
|
||||||
|
"@vaadin/common-frontend": "0.0.19",
|
||||||
|
"@vaadin/polymer-legacy-adapter": "24.4.2",
|
||||||
|
"@vaadin/react-components": "24.4.2",
|
||||||
|
"@vaadin/react-components-pro": "24.4.2",
|
||||||
|
"@vaadin/router": "1.7.5",
|
||||||
|
"@vaadin/vaadin-development-mode-detector": "2.0.7",
|
||||||
|
"@vaadin/vaadin-lumo-styles": "24.4.2",
|
||||||
|
"@vaadin/vaadin-material-styles": "24.4.2",
|
||||||
|
"@vaadin/vaadin-themable-mixin": "24.4.2",
|
||||||
|
"@vaadin/vaadin-usage-statistics": "2.1.2",
|
||||||
|
"construct-style-sheets-polyfill": "3.1.0",
|
||||||
|
"date-fns": "2.29.3",
|
||||||
|
"lit": "3.1.4",
|
||||||
|
"proj4": "2.11.0",
|
||||||
|
"react": "18.3.1",
|
||||||
|
"react-dom": "18.3.1",
|
||||||
|
"react-router-dom": "6.23.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/preset-react": "7.24.7",
|
||||||
|
"@rollup/plugin-replace": "5.0.7",
|
||||||
|
"@rollup/pluginutils": "5.1.0",
|
||||||
|
"@types/react": "18.3.3",
|
||||||
|
"@types/react-dom": "18.3.0",
|
||||||
|
"@vitejs/plugin-react": "4.3.1",
|
||||||
|
"async": "3.2.5",
|
||||||
|
"glob": "10.4.1",
|
||||||
|
"rollup-plugin-brotli": "3.1.0",
|
||||||
|
"rollup-plugin-visualizer": "5.12.0",
|
||||||
|
"strip-css-comments": "5.0.0",
|
||||||
|
"transform-ast": "2.4.4",
|
||||||
|
"typescript": "5.4.5",
|
||||||
|
"vite": "5.3.3",
|
||||||
|
"vite-plugin-checker": "0.6.4",
|
||||||
|
"workbox-build": "7.1.1",
|
||||||
|
"workbox-core": "7.1.0",
|
||||||
|
"workbox-precaching": "7.1.0"
|
||||||
|
},
|
||||||
|
"vaadin": {
|
||||||
|
"dependencies": {
|
||||||
|
"@f0rce/ace-widget": "1.0.2",
|
||||||
|
"@polymer/polymer": "3.5.1",
|
||||||
|
"@vaadin/bundles": "24.4.2",
|
||||||
|
"@vaadin/common-frontend": "0.0.19",
|
||||||
|
"@vaadin/polymer-legacy-adapter": "24.4.2",
|
||||||
|
"@vaadin/react-components": "24.4.2",
|
||||||
|
"@vaadin/react-components-pro": "24.4.2",
|
||||||
|
"@vaadin/router": "1.7.5",
|
||||||
|
"@vaadin/vaadin-development-mode-detector": "2.0.7",
|
||||||
|
"@vaadin/vaadin-lumo-styles": "24.4.2",
|
||||||
|
"@vaadin/vaadin-material-styles": "24.4.2",
|
||||||
|
"@vaadin/vaadin-themable-mixin": "24.4.2",
|
||||||
|
"@vaadin/vaadin-usage-statistics": "2.1.2",
|
||||||
|
"construct-style-sheets-polyfill": "3.1.0",
|
||||||
|
"date-fns": "2.29.3",
|
||||||
|
"lit": "3.1.4",
|
||||||
|
"proj4": "2.11.0",
|
||||||
|
"react": "18.3.1",
|
||||||
|
"react-dom": "18.3.1",
|
||||||
|
"react-router-dom": "6.23.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/preset-react": "7.24.7",
|
||||||
|
"@rollup/plugin-replace": "5.0.7",
|
||||||
|
"@rollup/pluginutils": "5.1.0",
|
||||||
|
"@types/react": "18.3.3",
|
||||||
|
"@types/react-dom": "18.3.0",
|
||||||
|
"@vitejs/plugin-react": "4.3.1",
|
||||||
|
"async": "3.2.5",
|
||||||
|
"glob": "10.4.1",
|
||||||
|
"rollup-plugin-brotli": "3.1.0",
|
||||||
|
"rollup-plugin-visualizer": "5.12.0",
|
||||||
|
"strip-css-comments": "5.0.0",
|
||||||
|
"transform-ast": "2.4.4",
|
||||||
|
"typescript": "5.4.5",
|
||||||
|
"vite": "5.3.3",
|
||||||
|
"vite-plugin-checker": "0.6.4",
|
||||||
|
"workbox-build": "7.1.1",
|
||||||
|
"workbox-core": "7.1.0",
|
||||||
|
"workbox-precaching": "7.1.0"
|
||||||
|
},
|
||||||
|
"hash": "ff8035f5a0dd319a5c705d9cea5b3e1d6c1a0bb871c35af8dd8e4ede5c65fe76"
|
||||||
|
},
|
||||||
|
"overrides": {
|
||||||
|
"@vaadin/bundles": "$@vaadin/bundles",
|
||||||
|
"@vaadin/polymer-legacy-adapter": "$@vaadin/polymer-legacy-adapter",
|
||||||
|
"@vaadin/vaadin-development-mode-detector": "$@vaadin/vaadin-development-mode-detector",
|
||||||
|
"@vaadin/router": "$@vaadin/router",
|
||||||
|
"@vaadin/vaadin-usage-statistics": "$@vaadin/vaadin-usage-statistics",
|
||||||
|
"@vaadin/react-components": "$@vaadin/react-components",
|
||||||
|
"@vaadin/react-components-pro": "$@vaadin/react-components-pro",
|
||||||
|
"@vaadin/common-frontend": "$@vaadin/common-frontend",
|
||||||
|
"react-dom": "$react-dom",
|
||||||
|
"construct-style-sheets-polyfill": "$construct-style-sheets-polyfill",
|
||||||
|
"react-router-dom": "$react-router-dom",
|
||||||
|
"lit": "$lit",
|
||||||
|
"@polymer/polymer": "$@polymer/polymer",
|
||||||
|
"react": "$react",
|
||||||
|
"date-fns": "$date-fns",
|
||||||
|
"proj4": "$proj4",
|
||||||
|
"@vaadin/vaadin-themable-mixin": "$@vaadin/vaadin-themable-mixin",
|
||||||
|
"@vaadin/vaadin-lumo-styles": "$@vaadin/vaadin-lumo-styles",
|
||||||
|
"@vaadin/vaadin-material-styles": "$@vaadin/vaadin-material-styles",
|
||||||
|
"@f0rce/ace-widget": "$@f0rce/ace-widget"
|
||||||
|
}
|
||||||
|
}
|
5
pom.xml
5
pom.xml
@ -113,6 +113,11 @@
|
|||||||
<artifactId>simple-timer</artifactId>
|
<artifactId>simple-timer</artifactId>
|
||||||
<version>2.2.0</version>
|
<version>2.2.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.vaadin.addons.stefan</groupId>
|
||||||
|
<artifactId>clipboard</artifactId>
|
||||||
|
<version>1.0.3</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
|
Binary file not shown.
@ -15,7 +15,9 @@ import java.util.Optional;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public class Assessment extends BaseEntity {
|
public class Assessment extends BaseEntity {
|
||||||
@OneToMany(fetch = FetchType.EAGER)
|
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
|
||||||
|
@JoinTable(name = "ASSESSMENT_QUESTIONS", joinColumns = @JoinColumn(name = "assessment_id"),
|
||||||
|
inverseJoinColumns = @JoinColumn(name = "question_id"))
|
||||||
private List<Question> questions = new ArrayList<>();
|
private List<Question> questions = new ArrayList<>();
|
||||||
|
|
||||||
@OneToMany(fetch = FetchType.EAGER, mappedBy = "assessment", cascade = {CascadeType.ALL})
|
@OneToMany(fetch = FetchType.EAGER, mappedBy = "assessment", cascade = {CascadeType.ALL})
|
||||||
|
@ -2,6 +2,8 @@ package com.primefactorsolutions.service;
|
|||||||
|
|
||||||
import com.primefactorsolutions.model.*;
|
import com.primefactorsolutions.model.*;
|
||||||
import com.primefactorsolutions.repositories.AssessmentRepository;
|
import com.primefactorsolutions.repositories.AssessmentRepository;
|
||||||
|
import jakarta.persistence.EntityManager;
|
||||||
|
import jakarta.transaction.Transactional;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.checkerframework.checker.units.qual.A;
|
import org.checkerframework.checker.units.qual.A;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -12,12 +14,14 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Data
|
@Data
|
||||||
public class AssessmentService {
|
public class AssessmentService {
|
||||||
|
|
||||||
private final AssessmentRepository assessmentRepository;
|
private final AssessmentRepository assessmentRepository;
|
||||||
|
private final EntityManager entityManager;
|
||||||
|
|
||||||
public Assessment createOrUpdate(final Assessment assessment) {
|
public Assessment createOrUpdate(final Assessment assessment) {
|
||||||
final Assessment saved = assessmentRepository.save(assessment);
|
final Assessment saved = assessmentRepository.save(assessment);
|
||||||
@ -146,7 +150,15 @@ public class AssessmentService {
|
|||||||
Assessment saved = assessmentRepository.save(assessment);
|
Assessment saved = assessmentRepository.save(assessment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
public Assessment saveAssessment(final Assessment assessment) {
|
public Assessment saveAssessment(final Assessment assessment) {
|
||||||
|
AppUser merged = entityManager.merge(assessment.getAppUser());
|
||||||
|
List<Question> mergedQuestions = assessment.getQuestions().stream().map(entityManager::merge)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
assessment.setAppUser(merged);
|
||||||
|
assessment.setQuestions(mergedQuestions);
|
||||||
|
|
||||||
return assessmentRepository.save(assessment);
|
return assessmentRepository.save(assessment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,15 +2,20 @@ package com.primefactorsolutions.views;
|
|||||||
|
|
||||||
import com.primefactorsolutions.model.Assessment;
|
import com.primefactorsolutions.model.Assessment;
|
||||||
import com.primefactorsolutions.service.AssessmentService;
|
import com.primefactorsolutions.service.AssessmentService;
|
||||||
|
import com.vaadin.flow.component.Component;
|
||||||
|
import com.vaadin.flow.component.button.Button;
|
||||||
import com.vaadin.flow.component.html.Main;
|
import com.vaadin.flow.component.html.Main;
|
||||||
import com.vaadin.flow.data.provider.DataProvider;
|
import com.vaadin.flow.data.provider.DataProvider;
|
||||||
import com.vaadin.flow.data.provider.DataProviderListener;
|
import com.vaadin.flow.data.provider.DataProviderListener;
|
||||||
import com.vaadin.flow.data.provider.Query;
|
import com.vaadin.flow.data.provider.Query;
|
||||||
|
import com.vaadin.flow.data.renderer.ComponentRenderer;
|
||||||
|
import com.vaadin.flow.function.ValueProvider;
|
||||||
import com.vaadin.flow.router.PageTitle;
|
import com.vaadin.flow.router.PageTitle;
|
||||||
import com.vaadin.flow.router.Route;
|
import com.vaadin.flow.router.Route;
|
||||||
import com.vaadin.flow.shared.Registration;
|
import com.vaadin.flow.shared.Registration;
|
||||||
import com.vaadin.flow.spring.annotation.SpringComponent;
|
import com.vaadin.flow.spring.annotation.SpringComponent;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.vaadin.addon.stefan.clipboard.ClientsideClipboard;
|
||||||
import org.vaadin.firitin.components.grid.VGrid;
|
import org.vaadin.firitin.components.grid.VGrid;
|
||||||
|
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
@ -24,6 +29,9 @@ public class AssessmentsListView extends Main {
|
|||||||
public AssessmentsListView(final AssessmentService assessmentService) {
|
public AssessmentsListView(final AssessmentService assessmentService) {
|
||||||
final VGrid<Assessment> grid = new VGrid<>(Assessment.class);
|
final VGrid<Assessment> grid = new VGrid<>(Assessment.class);
|
||||||
grid.setColumns("id", "appUser.email");
|
grid.setColumns("id", "appUser.email");
|
||||||
|
grid.addComponentColumn((ValueProvider<Assessment, Component>) assessment -> new Button("Copy", event ->
|
||||||
|
ClientsideClipboard.writeToClipboard(String.format("https://localhost:8080/evaluation/%s", assessment.getId()))
|
||||||
|
));
|
||||||
|
|
||||||
grid.setDataProvider(new DataProvider<>() {
|
grid.setDataProvider(new DataProvider<>() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -6,7 +6,7 @@ spring.mustache.check-template-location = false
|
|||||||
vaadin.launch-browser=true
|
vaadin.launch-browser=true
|
||||||
# To improve the performance during development.
|
# To improve the performance during development.
|
||||||
# For more information https://vaadin.com/docs/latest/integrations/spring/configuration#special-configuration-parameters
|
# For more information https://vaadin.com/docs/latest/integrations/spring/configuration#special-configuration-parameters
|
||||||
vaadin.allowed-packages = com.vaadin,org.vaadin,com.primefactorsolutions,com.hilerio.ace,com.flowingcode.vaadin,org.vaadin.firitin
|
vaadin.allowed-packages = com.vaadin,org.vaadin,com.primefactorsolutions,com.hilerio.ace,com.flowingcode.vaadin,org.vaadin.firitin,org.vaadin.addons.stefan
|
||||||
|
|
||||||
|
|
||||||
# spring.datasource.url=jdbc:h2:mem:testdb
|
# spring.datasource.url=jdbc:h2:mem:testdb
|
||||||
|
@ -5,6 +5,6 @@ insert into question (id, version, content, title, description) values ('8a4b213
|
|||||||
|
|
||||||
insert into assessment(id, version, app_user_id) values ('46b153f4-23fd-462f-8430-fbe67b83caab', 1, '23471ab3-f639-4d2b-9541-7227f4ea7ee6');
|
insert into assessment(id, version, app_user_id) values ('46b153f4-23fd-462f-8430-fbe67b83caab', 1, '23471ab3-f639-4d2b-9541-7227f4ea7ee6');
|
||||||
|
|
||||||
insert into ASSESSMENT_QUESTIONS (assessment_id, questions_id) values ('46b153f4-23fd-462f-8430-fbe67b83caab', 'a7e00ff8-da41-4624-b31c-1b13c3f2e3ae');
|
insert into ASSESSMENT_QUESTIONS (assessment_id, question_id) values ('46b153f4-23fd-462f-8430-fbe67b83caab', 'a7e00ff8-da41-4624-b31c-1b13c3f2e3ae');
|
||||||
|
|
||||||
insert into ASSESSMENT_QUESTIONS (assessment_id, questions_id) values ('46b153f4-23fd-462f-8430-fbe67b83caab', '8a4b213c-ca81-4c38-b56d-d7028c2dde88');
|
insert into ASSESSMENT_QUESTIONS (assessment_id, question_id) values ('46b153f4-23fd-462f-8430-fbe67b83caab', '8a4b213c-ca81-4c38-b56d-d7028c2dde88');
|
39
tsconfig.json
Normal file
39
tsconfig.json
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// This TypeScript configuration file is generated by vaadin-maven-plugin.
|
||||||
|
// This is needed for TypeScript compiler to compile your TypeScript code in the project.
|
||||||
|
// It is recommended to commit this file to the VCS.
|
||||||
|
// You might want to change the configurations to fit your preferences
|
||||||
|
// For more information about the configurations, please refer to http://www.typescriptlang.org/docs/handbook/tsconfig-json.html
|
||||||
|
{
|
||||||
|
"_version": "9.1",
|
||||||
|
"compilerOptions": {
|
||||||
|
"sourceMap": true,
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
"inlineSources": true,
|
||||||
|
"module": "esNext",
|
||||||
|
"target": "es2020",
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"strict": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
"noImplicitReturns": true,
|
||||||
|
"noImplicitAny": true,
|
||||||
|
"noImplicitThis": true,
|
||||||
|
"noUnusedLocals": false,
|
||||||
|
"noUnusedParameters": false,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"useDefineForClassFields": false,
|
||||||
|
"baseUrl": "src/main/frontend",
|
||||||
|
"paths": {
|
||||||
|
"@vaadin/flow-frontend": ["generated/jar-resources"],
|
||||||
|
"@vaadin/flow-frontend/*": ["generated/jar-resources/*"],
|
||||||
|
"Frontend/*": ["*"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"src/main/frontend/**/*",
|
||||||
|
"types.d.ts"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"src/main/frontend/generated/jar-resources/**"
|
||||||
|
]
|
||||||
|
}
|
17
types.d.ts
vendored
Normal file
17
types.d.ts
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// This TypeScript modules definition file is generated by vaadin-maven-plugin.
|
||||||
|
// You can not directly import your different static files into TypeScript,
|
||||||
|
// This is needed for TypeScript compiler to declare and export as a TypeScript module.
|
||||||
|
// It is recommended to commit this file to the VCS.
|
||||||
|
// You might want to change the configurations to fit your preferences
|
||||||
|
declare module '*.css?inline' {
|
||||||
|
import type { CSSResultGroup } from 'lit';
|
||||||
|
const content: CSSResultGroup;
|
||||||
|
export default content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow any CSS Custom Properties
|
||||||
|
declare module 'csstype' {
|
||||||
|
interface Properties {
|
||||||
|
[index: `--${string}`]: any;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user