debian-mirror-gitlab/app/assets/javascripts/sidebar/components/lock/lock_issue_sidebar.vue

159 lines
3.3 KiB
Vue
Raw Normal View History

2018-03-17 18:26:18 +05:30
<script>
2018-10-15 14:42:47 +05:30
import { __ } from '~/locale';
2018-05-09 12:01:36 +05:30
import Flash from '~/flash';
2018-10-15 14:42:47 +05:30
import tooltip from '~/vue_shared/directives/tooltip';
import issuableMixin from '~/vue_shared/mixins/issuable';
import Icon from '~/vue_shared/components/icon.vue';
import eventHub from '~/sidebar/event_hub';
2018-05-09 12:01:36 +05:30
import editForm from './edit_form.vue';
2018-03-17 18:26:18 +05:30
2018-05-09 12:01:36 +05:30
export default {
components: {
editForm,
Icon,
},
2018-10-15 14:42:47 +05:30
directives: {
tooltip,
},
2018-05-09 12:01:36 +05:30
mixins: [issuableMixin],
2018-03-17 18:26:18 +05:30
2018-05-09 12:01:36 +05:30
props: {
isLocked: {
required: true,
type: Boolean,
},
2018-03-17 18:26:18 +05:30
2018-05-09 12:01:36 +05:30
isEditable: {
required: true,
type: Boolean,
},
2018-03-17 18:26:18 +05:30
2018-05-09 12:01:36 +05:30
mediator: {
required: true,
type: Object,
validator(mediatorObject) {
return (
mediatorObject.service &&
mediatorObject.service.update &&
mediatorObject.store
);
2018-03-17 18:26:18 +05:30
},
},
2018-05-09 12:01:36 +05:30
},
2018-03-17 18:26:18 +05:30
2018-05-09 12:01:36 +05:30
computed: {
lockIcon() {
return this.isLocked ? 'lock' : 'lock-open';
},
2018-03-17 18:26:18 +05:30
2018-05-09 12:01:36 +05:30
isLockDialogOpen() {
return this.mediator.store.isLockDialogOpen;
2018-03-17 18:26:18 +05:30
},
2018-10-15 14:42:47 +05:30
tooltipLabel() {
return this.isLocked ? __('Locked') : __('Unlocked');
},
2018-05-09 12:01:36 +05:30
},
2018-03-17 18:26:18 +05:30
2018-05-09 12:01:36 +05:30
created() {
eventHub.$on('closeLockForm', this.toggleForm);
},
beforeDestroy() {
eventHub.$off('closeLockForm', this.toggleForm);
},
2018-03-17 18:26:18 +05:30
2018-05-09 12:01:36 +05:30
methods: {
toggleForm() {
this.mediator.store.isLockDialogOpen = !this.mediator.store
.isLockDialogOpen;
},
updateLockedAttribute(locked) {
this.mediator.service
.update(this.issuableType, {
2018-03-17 18:26:18 +05:30
discussion_locked: locked,
})
.then(() => location.reload())
2018-05-09 12:01:36 +05:30
.catch(() =>
Flash(
this.__(
`Something went wrong trying to change the locked state of this ${
this.issuableDisplayName
}`,
),
),
);
2018-03-17 18:26:18 +05:30
},
2018-05-09 12:01:36 +05:30
},
};
2018-03-17 18:26:18 +05:30
</script>
<template>
<div class="block issuable-sidebar-item lock">
2018-05-09 12:01:36 +05:30
<div
class="sidebar-collapsed-icon"
@click="toggleForm"
2018-10-15 14:42:47 +05:30
v-tooltip
data-container="body"
data-placement="left"
:title="tooltipLabel"
2018-05-09 12:01:36 +05:30
>
2018-03-17 18:26:18 +05:30
<icon
:name="lockIcon"
aria-hidden="true"
class="sidebar-item-icon is-active"
/>
</div>
<div class="title hide-collapsed">
{{ sprintf(__('Lock %{issuableDisplayName}'), { issuableDisplayName: issuableDisplayName }) }}
<button
v-if="isEditable"
2018-03-27 19:54:05 +05:30
class="pull-right lock-edit"
2018-03-17 18:26:18 +05:30
type="button"
@click.prevent="toggleForm"
>
{{ __('Edit') }}
</button>
</div>
<div class="value sidebar-item-value hide-collapsed">
<edit-form
v-if="isLockDialogOpen"
:is-locked="isLocked"
:update-locked-attribute="updateLockedAttribute"
:issuable-type="issuableType"
/>
<div
v-if="isLocked"
class="value sidebar-item-value"
>
<icon
name="lock"
:size="16"
aria-hidden="true"
class="sidebar-item-icon inline is-active"
/>
{{ __('Locked') }}
</div>
<div
v-else
class="no-value sidebar-item-value hide-collapsed"
>
<icon
name="lock-open"
:size="16"
aria-hidden="true"
class="sidebar-item-icon inline"
/>
{{ __('Unlocked') }}
</div>
</div>
</div>
</template>