Skip to content
Snippets Groups Projects
Commit 2afd2c92 authored by Marcel Nellesen's avatar Marcel Nellesen
Browse files

New: Add adaptable save and delete handler (coscine/issues#607)

parent 3845f618
No related branches found
No related tags found
1 merge request!22Sprint/2020-01
.DS_Store .DS_Store
node_modules node_modules
/dist /dist
package-lock.json
# local env files # local env files
.env.local .env.local
......
This diff is collapsed.
...@@ -22,44 +22,43 @@ ...@@ -22,44 +22,43 @@
"dist/*" "dist/*"
], ],
"dependencies": { "dependencies": {
"@coscine/api-connection": "^1.2.0", "@coscine/api-connection": "^1.6.0",
"@types/jquery": "^3.3.30", "@types/jquery": "^3.3.31",
"@types/vuelidate": "^0.7.5", "@types/vuelidate": "^0.7.10",
"axios": "^0.19.0", "bootstrap-vue": "^2.3.0",
"bootstrap-vue": "^2.0.0-rc.28",
"jquery": "^3.4.1", "jquery": "^3.4.1",
"vue": "^2.6.6", "vue": "^2.6.11",
"vue-i18n": "^8.14.0", "vue-i18n": "^8.15.3",
"vue-multiselect": "^2.1.6", "vue-multiselect": "^2.1.6",
"vuejs-datepicker": "^1.6.2", "vuejs-datepicker": "^1.6.2",
"vue-loading-overlay": "^3.2.0", "vue-loading-overlay": "^3.2.0",
"vuelidate": "^0.7.4" "vuelidate": "^0.7.5"
}, },
"devDependencies": { "devDependencies": {
"@semantic-release/commit-analyzer": "^6.1.0", "@semantic-release/commit-analyzer": "^8.0.0",
"@semantic-release/git": "^7.0.5", "@semantic-release/git": "^9.0.0",
"@semantic-release/gitlab": "^3.0.5", "@semantic-release/gitlab": "^6.0.0",
"@semantic-release/npm": "^5.1.1", "@semantic-release/npm": "^7.0.0",
"@semantic-release/release-notes-generator": "^7.1.4", "@semantic-release/release-notes-generator": "^9.0.0",
"@types/chai": "^4.1.0", "@types/chai": "^4.2.7",
"@types/mocha": "^5.2.4", "@types/mocha": "^5.2.7",
"@vue/cli-plugin-babel": "^3.5.0", "@vue/cli-plugin-babel": "^4.1.2",
"@vue/cli-plugin-typescript": "^3.5.0", "@vue/cli-plugin-typescript": "^4.1.2",
"@vue/cli-plugin-unit-mocha": "^3.5.0", "@vue/cli-plugin-unit-mocha": "^4.1.2",
"@vue/cli-service": "^3.5.0", "@vue/cli-service": "^4.1.2",
"@vue/test-utils": "1.0.0-beta.29", "@vue/test-utils": "1.0.0-beta.31",
"bili": "^4.8.1", "bili": "^4.8.1",
"chai": "^4.1.2", "chai": "^4.2.0",
"rollup-plugin-typescript2": "^0.22.1", "rollup-plugin-typescript2": "^0.25.3",
"rollup-plugin-vue": "5.0.1", "rollup-plugin-vue": "5.1.6",
"semantic-release": "^15.12.0", "semantic-release": "^17.0.1",
"semantic-release-gitlab": "^7.1.0", "@hutson/semantic-delivery-gitlab": "^9.1.0",
"typescript": "^3.5.3", "typescript": "^3.7.5",
"vue-template-compiler": "^2.6.10" "vue-template-compiler": "^2.6.11"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://git.rwth-aachen.de/coscine/vue/project-creation.git" "url": "https://git.rwth-aachen.de/coscine/vue/project-creation.git"
}, },
"license": "ISC" "license": "MIT"
} }
...@@ -184,8 +184,9 @@ ...@@ -184,8 +184,9 @@
<DeleteModal <DeleteModal
:projectId="projectId" :projectId="projectId"
:displayName="form.DisplayName" :displayName="form.DisplayName"
:projectParentId="parentId" :projectParentId="form.ParentId"
:languageLocale="languageLocale" :languageLocale="languageLocale"
:handleDelete="$props.deleteHandler"
@back="clickBack" @back="clickBack"
style="display: inline;" style="display: inline;"
v-show="isOwner"></DeleteModal> v-show="isOwner"></DeleteModal>
...@@ -193,7 +194,7 @@ ...@@ -193,7 +194,7 @@
type="submit" type="submit"
variant="primary" variant="primary"
class="btn-float-right" class="btn-float-right"
:disabled="$v.form.$invalid || isUploadInProgess" :disabled="$v.form.$invalid || isUploadInProgess || !$v.form.$anyDirty"
name="save" name="save"
@click.prevent="clickSave" @click.prevent="clickSave"
v-show="isOwner || isNewProject" v-show="isOwner || isNewProject"
...@@ -338,7 +339,7 @@ export default Vue.extend({ ...@@ -338,7 +339,7 @@ export default Vue.extend({
Keywords: [] as object[], Keywords: [] as object[],
Visibility: {}, Visibility: {},
GrantId: '', GrantId: '',
ParentId: String, ParentId: '',
}, },
initialState: { initialState: {
ProjectName: '', ProjectName: '',
...@@ -362,9 +363,16 @@ export default Vue.extend({ ...@@ -362,9 +363,16 @@ export default Vue.extend({
}; };
}, },
props: { props: {
parentId: String,
projectId: String, projectId: String,
languageLocale: String, languageLocale: String,
saveHandler: {
type: Function,
default: redirectToProject,
},
deleteHandler: {
type: Function,
default: redirectToProject,
},
}, },
methods: { methods: {
addTag(newTag: any) { addTag(newTag: any) {
...@@ -390,7 +398,7 @@ export default Vue.extend({ ...@@ -390,7 +398,7 @@ export default Vue.extend({
}, },
clickSave() { clickSave() {
this.$v.$touch(); this.$v.$touch();
if (this.$v.$anyError) { if (this.$v.$anyError || !this.$v.$anyDirty) {
return; return;
} }
tag_inputs_helper.parseKeywords(this.form, ';'); tag_inputs_helper.parseKeywords(this.form, ';');
...@@ -405,7 +413,10 @@ export default Vue.extend({ ...@@ -405,7 +413,10 @@ export default Vue.extend({
if (this.isNewProject) { if (this.isNewProject) {
ProjectApi.storeProject( ProjectApi.storeProject(
this.form, this.form,
(response: any) => redirectToProject(response.data), (response: any) => {
this.$props.saveHandler(response.data);
this.handleAfterSave();
},
defaultOnCatch, defaultOnCatch,
); );
} else { } else {
...@@ -413,14 +424,20 @@ export default Vue.extend({ ...@@ -413,14 +424,20 @@ export default Vue.extend({
this.form, this.form,
(response: any) => { (response: any) => {
response.data === 1 response.data === 1
? redirectToProject({id: this.projectId}) ? this.$props.saveHandler({id: this.projectId})
: redirectToProject({id: this.form.ParentId}); : this.$props.saveHandler({id: this.form.ParentId});
this.handleAfterSave();
}, },
defaultOnCatch, defaultOnCatch,
); );
} }
} }
}, },
handleAfterSave() {
this.isWaitingForResponse = false;
this.isUploadInProgess = false;
this.$v.$reset();
},
translateProjectNameToDisplayName() { translateProjectNameToDisplayName() {
if (this.displayNameIsLocked) { if (this.displayNameIsLocked) {
return; return;
...@@ -532,11 +549,11 @@ export default Vue.extend({ ...@@ -532,11 +549,11 @@ export default Vue.extend({
background-color: #ffffff; background-color: #ffffff;
} }
#CreateProject .multiselect { #CreateProject .multiselect {
height: calc(1.4em + .75rem + 2px); min-height: calc(1.4em + .75rem + 2px);
} }
#CreateProject .multiselect__input { #CreateProject .multiselect__input {
border: 0px; border: 0px;
height: calc(1.4em + .75rem + 2px); min-height: calc(1.4em + .75rem + 2px);
} }
#CreateProject .multiselect__tags { #CreateProject .multiselect__tags {
border-radius: 0px; border-radius: 0px;
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import { ProjectApi, defaultOnCatch, redirectToProject } from '@coscine/api-connection'; import { ProjectApi, defaultOnCatch } from '@coscine/api-connection';
import Loading from 'vue-loading-overlay'; import Loading from 'vue-loading-overlay';
import 'vue-loading-overlay/dist/vue-loading.css'; import 'vue-loading-overlay/dist/vue-loading.css';
...@@ -92,6 +92,7 @@ export default Vue.extend({ ...@@ -92,6 +92,7 @@ export default Vue.extend({
projectId: String, projectId: String,
displayName: String, displayName: String,
projectParentId: String, projectParentId: String,
handleDelete: Function,
}, },
methods: { methods: {
checkFormValidity() { checkFormValidity() {
...@@ -122,7 +123,21 @@ export default Vue.extend({ ...@@ -122,7 +123,21 @@ export default Vue.extend({
this.isDeletionInProgress = true; this.isDeletionInProgress = true;
ProjectApi.deleteProject( ProjectApi.deleteProject(
this.projectId, this.projectId,
(response: any) => { redirectToProject( { id: this.projectParentId }); }, (response: any) => {
ProjectApi.getProjectInformation(
this.projectParentId,
(response: any) => {
this.handleDelete({ id: this.projectParentId });
this.isWaitingForResponse = false;
this.isDeletionInProgress = false;
},
(errorResponse: any) => {
this.handleDelete({ id: null });
this.isWaitingForResponse = false;
this.isDeletionInProgress = false;
},
);
},
defaultOnCatch, defaultOnCatch,
); );
}, },
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment