Commit c4fea61f authored by Phil Hughes's avatar Phil Hughes

Added inline confidential field

[ci skip]
parent 36df19e7
...@@ -7,6 +7,7 @@ import Service from '../services/index'; ...@@ -7,6 +7,7 @@ import Service from '../services/index';
import Store from '../stores'; import Store from '../stores';
import titleComponent from './title.vue'; import titleComponent from './title.vue';
import descriptionComponent from './description.vue'; import descriptionComponent from './description.vue';
import confidentialCheckbox from './fields/confidential_checkbox.vue';
import editActions from './edit_actions.vue'; import editActions from './edit_actions.vue';
export default { export default {
...@@ -41,6 +42,10 @@ export default { ...@@ -41,6 +42,10 @@ export default {
required: false, required: false,
default: '', default: '',
}, },
isConfidential: {
type: Boolean,
required: true,
},
}, },
data() { data() {
const store = new Store({ const store = new Store({
...@@ -67,12 +72,14 @@ export default { ...@@ -67,12 +72,14 @@ export default {
descriptionComponent, descriptionComponent,
titleComponent, titleComponent,
editActions, editActions,
confidentialCheckbox,
}, },
methods: { methods: {
openForm() { openForm() {
this.showForm = true; this.showForm = true;
this.store.formState = { this.store.formState = {
title: this.state.titleText, title: this.state.titleText,
confidential: this.isConfidential,
}; };
}, },
closeForm() { closeForm() {
...@@ -80,7 +87,13 @@ export default { ...@@ -80,7 +87,13 @@ export default {
}, },
updateIssuable() { updateIssuable() {
this.service.updateIssuable(this.store.formState) this.service.updateIssuable(this.store.formState)
.then(() => { .then((res) => {
const data = res.json();
if (data.confidential !== this.isConfidential) {
location.reload();
}
eventHub.$emit('close.form'); eventHub.$emit('close.form');
}) })
.catch(() => { .catch(() => {
...@@ -157,6 +170,9 @@ export default { ...@@ -157,6 +170,9 @@ export default {
:description-text="state.descriptionText" :description-text="state.descriptionText"
:updated-at="state.updatedAt" :updated-at="state.updatedAt"
:task-status="state.taskStatus" /> :task-status="state.taskStatus" />
<confidential-checkbox
v-if="showForm"
:form-state="formState" />
<edit-actions <edit-actions
v-if="canUpdate && showForm" v-if="canUpdate && showForm"
:can-destroy="canDestroy" /> :can-destroy="canDestroy" />
......
<script>
export default {
props: {
formState: {
type: Object,
required: true,
},
},
};
</script>
<template>
<fieldset class="checkbox">
<label for="issue_confidential">
<input
type="checkbox"
value="1"
id="issue_confidential"
v-model="formState.confidential" />
This issue is confidential and should only be visible to team members with at least Reporter access.
</label>
</fieldset>
</template>
...@@ -25,6 +25,7 @@ document.addEventListener('DOMContentLoaded', () => { ...@@ -25,6 +25,7 @@ document.addEventListener('DOMContentLoaded', () => {
canDestroy, canDestroy,
endpoint, endpoint,
issuableRef, issuableRef,
isConfidential,
} = issuableElement.dataset; } = issuableElement.dataset;
return { return {
...@@ -35,6 +36,7 @@ document.addEventListener('DOMContentLoaded', () => { ...@@ -35,6 +36,7 @@ document.addEventListener('DOMContentLoaded', () => {
initialTitle: issuableTitleElement.innerHTML, initialTitle: issuableTitleElement.innerHTML,
initialDescriptionHtml: issuableDescriptionElement ? issuableDescriptionElement.innerHTML : '', initialDescriptionHtml: issuableDescriptionElement ? issuableDescriptionElement.innerHTML : '',
initialDescriptionText: issuableDescriptionTextarea ? issuableDescriptionTextarea.textContent : '', initialDescriptionText: issuableDescriptionTextarea ? issuableDescriptionTextarea.textContent : '',
isConfidential: gl.utils.convertPermissionToBoolean(isConfidential),
}; };
}, },
render(createElement) { render(createElement) {
...@@ -47,6 +49,7 @@ document.addEventListener('DOMContentLoaded', () => { ...@@ -47,6 +49,7 @@ document.addEventListener('DOMContentLoaded', () => {
initialTitle: this.initialTitle, initialTitle: this.initialTitle,
initialDescriptionHtml: this.initialDescriptionHtml, initialDescriptionHtml: this.initialDescriptionHtml,
initialDescriptionText: this.initialDescriptionText, initialDescriptionText: this.initialDescriptionText,
isConfidential: this.isConfidential,
}, },
}); });
}, },
......
...@@ -14,6 +14,7 @@ export default class Store { ...@@ -14,6 +14,7 @@ export default class Store {
}; };
this.formState = { this.formState = {
title: '', title: '',
confidential: false,
}; };
} }
......
...@@ -55,6 +55,7 @@ ...@@ -55,6 +55,7 @@
"can-update" => can?(current_user, :update_issue, @issue).to_s, "can-update" => can?(current_user, :update_issue, @issue).to_s,
"can-destroy" => can?(current_user, :destroy_issue, @issue).to_s, "can-destroy" => can?(current_user, :destroy_issue, @issue).to_s,
"issuable-ref" => @issue.to_reference, "issuable-ref" => @issue.to_reference,
"is-confidential" => @issue.confidential.to_s,
} } } }
%h2.title= markdown_field(@issue, :title) %h2.title= markdown_field(@issue, :title)
- if @issue.description.present? - if @issue.description.present?
......
...@@ -35,6 +35,7 @@ describe('Issuable output', () => { ...@@ -35,6 +35,7 @@ describe('Issuable output', () => {
initialDescriptionHtml: '', initialDescriptionHtml: '',
initialDescriptionText: '', initialDescriptionText: '',
showForm: false, showForm: false,
isConfidential: false,
}, },
}).$mount(); }).$mount();
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment