2017-03-17 17:21:25 +00:00
|
|
|
import Vue from 'vue';
|
2020-10-23 03:08:37 +00:00
|
|
|
import { mapActions, mapGetters, mapState } from 'vuex';
|
2018-02-26 19:43:34 +00:00
|
|
|
|
2019-12-09 12:07:58 +00:00
|
|
|
import 'ee_else_ce/boards/models/issue';
|
|
|
|
import 'ee_else_ce/boards/models/list';
|
|
|
|
import BoardSidebar from 'ee_else_ce/boards/components/board_sidebar';
|
|
|
|
import initNewListDropdown from 'ee_else_ce/boards/components/new_list_dropdown';
|
|
|
|
import boardConfigToggle from 'ee_else_ce/boards/config_toggle';
|
|
|
|
import toggleLabels from 'ee_else_ce/boards/toggle_labels';
|
2020-05-29 09:08:06 +00:00
|
|
|
import toggleEpicsSwimlanes from 'ee_else_ce/boards/toggle_epics_swimlanes';
|
2019-12-09 12:07:58 +00:00
|
|
|
import {
|
|
|
|
setPromotionState,
|
2020-09-21 09:09:29 +00:00
|
|
|
setWeightFetchingState,
|
2019-12-09 12:07:58 +00:00
|
|
|
setEpicFetchingState,
|
|
|
|
getMilestoneTitle,
|
|
|
|
getBoardsModalData,
|
|
|
|
} from 'ee_else_ce/boards/ee_functions';
|
|
|
|
|
2020-04-30 09:09:39 +00:00
|
|
|
import VueApollo from 'vue-apollo';
|
2020-08-19 06:10:04 +00:00
|
|
|
import BoardContent from '~/boards/components/board_content.vue';
|
2020-10-20 06:09:03 +00:00
|
|
|
import BoardExtraActions from '~/boards/components/board_extra_actions.vue';
|
2020-04-30 09:09:39 +00:00
|
|
|
import createDefaultClient from '~/lib/graphql';
|
2020-08-20 09:09:55 +00:00
|
|
|
import { deprecatedCreateFlash as Flash } from '~/flash';
|
2018-02-26 19:43:34 +00:00
|
|
|
import { __ } from '~/locale';
|
2019-06-07 13:23:10 +00:00
|
|
|
import './models/label';
|
|
|
|
import './models/assignee';
|
2018-02-26 19:43:34 +00:00
|
|
|
|
2020-05-14 00:07:47 +00:00
|
|
|
import toggleFocusMode from '~/boards/toggle_focus';
|
2019-07-10 07:18:14 +00:00
|
|
|
import FilteredSearchBoards from '~/boards/filtered_search_boards';
|
|
|
|
import eventHub from '~/boards/eventhub';
|
2018-09-19 22:42:20 +00:00
|
|
|
import sidebarEventHub from '~/sidebar/event_hub';
|
2019-07-10 07:18:14 +00:00
|
|
|
import '~/boards/models/milestone';
|
|
|
|
import '~/boards/models/project';
|
2019-10-28 15:05:58 +00:00
|
|
|
import store from '~/boards/stores';
|
2019-07-10 07:18:14 +00:00
|
|
|
import boardsStore from '~/boards/stores/boards_store';
|
|
|
|
import ModalStore from '~/boards/stores/modal_store';
|
|
|
|
import modalMixin from '~/boards/mixins/modal_mixins';
|
|
|
|
import '~/boards/filters/due_date_filters';
|
|
|
|
import BoardAddIssuesModal from '~/boards/components/modal/index.vue';
|
2019-04-09 10:39:42 +00:00
|
|
|
import {
|
|
|
|
NavigationType,
|
|
|
|
convertObjectPropsToCamelCase,
|
|
|
|
parseBoolean,
|
2020-08-24 09:10:14 +00:00
|
|
|
urlParamsToObject,
|
2019-04-09 10:39:42 +00:00
|
|
|
} from '~/lib/utils/common_utils';
|
2019-07-17 20:42:33 +00:00
|
|
|
import mountMultipleBoardsSwitcher from './mount_multiple_boards_switcher';
|
2020-04-30 09:09:39 +00:00
|
|
|
|
|
|
|
Vue.use(VueApollo);
|
|
|
|
|
|
|
|
const apolloProvider = new VueApollo({
|
|
|
|
defaultClient: createDefaultClient(),
|
|
|
|
});
|
2016-07-28 11:33:04 +00:00
|
|
|
|
2018-10-10 17:08:43 +00:00
|
|
|
let issueBoardsApp;
|
|
|
|
|
2018-02-21 22:28:08 +00:00
|
|
|
export default () => {
|
2017-01-12 03:49:57 +00:00
|
|
|
const $boardApp = document.getElementById('board-app');
|
2016-07-28 11:33:04 +00:00
|
|
|
|
2018-10-02 10:00:58 +00:00
|
|
|
// check for browser back and trigger a hard reload to circumvent browser caching.
|
2018-10-30 20:28:31 +00:00
|
|
|
window.addEventListener('pageshow', event => {
|
|
|
|
const isNavTypeBackForward =
|
|
|
|
window.performance && window.performance.navigation.type === NavigationType.TYPE_BACK_FORWARD;
|
2018-10-02 10:00:58 +00:00
|
|
|
|
|
|
|
if (event.persisted || isNavTypeBackForward) {
|
|
|
|
window.location.reload();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2018-10-10 17:08:43 +00:00
|
|
|
if (issueBoardsApp) {
|
|
|
|
issueBoardsApp.$destroy(true);
|
2016-08-05 13:00:06 +00:00
|
|
|
}
|
|
|
|
|
2018-10-10 17:08:43 +00:00
|
|
|
boardsStore.create();
|
2019-06-11 10:40:01 +00:00
|
|
|
boardsStore.setTimeTrackingLimitToHours($boardApp.dataset.timeTrackingLimitToHours);
|
2017-04-07 19:36:09 +00:00
|
|
|
|
2018-10-10 17:08:43 +00:00
|
|
|
issueBoardsApp = new Vue({
|
2016-08-16 08:02:45 +00:00
|
|
|
el: $boardApp,
|
2016-08-15 09:07:53 +00:00
|
|
|
components: {
|
2020-06-04 09:08:01 +00:00
|
|
|
BoardContent,
|
2020-07-01 09:09:30 +00:00
|
|
|
Board: () => import('ee_else_ce/boards/components/board_column.vue'),
|
2018-10-10 17:08:43 +00:00
|
|
|
BoardSidebar,
|
2018-06-26 12:29:06 +00:00
|
|
|
BoardAddIssuesModal,
|
2020-07-30 12:09:33 +00:00
|
|
|
BoardSettingsSidebar: () => import('~/boards/components/board_settings_sidebar.vue'),
|
2016-08-15 09:07:53 +00:00
|
|
|
},
|
2020-09-14 12:09:34 +00:00
|
|
|
provide: {
|
2020-09-17 09:09:32 +00:00
|
|
|
boardId: $boardApp.dataset.boardId,
|
2020-10-02 18:08:56 +00:00
|
|
|
groupId: Number($boardApp.dataset.groupId),
|
2020-09-14 12:09:34 +00:00
|
|
|
rootPath: $boardApp.dataset.rootPath,
|
2020-11-16 06:09:20 +00:00
|
|
|
currentUserId: gon.current_user_id || null,
|
2020-09-24 03:09:48 +00:00
|
|
|
canUpdate: $boardApp.dataset.canUpdate,
|
2020-10-15 18:08:43 +00:00
|
|
|
labelsFetchPath: $boardApp.dataset.labelsFetchPath,
|
|
|
|
labelsManagePath: $boardApp.dataset.labelsManagePath,
|
|
|
|
labelsFilterBasePath: $boardApp.dataset.labelsFilterBasePath,
|
2020-10-29 09:08:38 +00:00
|
|
|
timeTrackingLimitToHours: parseBoolean($boardApp.dataset.timeTrackingLimitToHours),
|
2020-11-12 09:08:57 +00:00
|
|
|
weightFeatureAvailable: parseBoolean($boardApp.dataset.weightFeatureAvailable),
|
|
|
|
boardWeight: $boardApp.dataset.boardWeight
|
|
|
|
? parseInt($boardApp.dataset.boardWeight, 10)
|
|
|
|
: null,
|
2020-11-16 06:09:20 +00:00
|
|
|
scopedLabelsAvailable: parseBoolean($boardApp.dataset.scopedLabels),
|
2020-09-14 12:09:34 +00:00
|
|
|
},
|
2020-09-17 09:09:32 +00:00
|
|
|
store,
|
|
|
|
apolloProvider,
|
2020-04-30 09:09:39 +00:00
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
state: boardsStore.state,
|
|
|
|
loading: 0,
|
|
|
|
boardsEndpoint: $boardApp.dataset.boardsEndpoint,
|
|
|
|
recentBoardsEndpoint: $boardApp.dataset.recentBoardsEndpoint,
|
|
|
|
listsEndpoint: $boardApp.dataset.listsEndpoint,
|
|
|
|
disabled: parseBoolean($boardApp.dataset.disabled),
|
|
|
|
bulkUpdatePath: $boardApp.dataset.bulkUpdatePath,
|
|
|
|
detailIssue: boardsStore.detail,
|
|
|
|
parent: $boardApp.dataset.parent,
|
|
|
|
};
|
2016-07-28 11:33:04 +00:00
|
|
|
},
|
2016-10-19 21:26:51 +00:00
|
|
|
computed: {
|
2020-08-24 09:10:14 +00:00
|
|
|
...mapState(['isShowingEpicsSwimlanes']),
|
2020-10-23 03:08:37 +00:00
|
|
|
...mapGetters(['shouldUseGraphQL']),
|
2018-07-25 15:38:43 +00:00
|
|
|
detailIssueVisible() {
|
2016-10-19 21:26:51 +00:00
|
|
|
return Object.keys(this.detailIssue.issue).length;
|
2016-11-04 10:24:59 +00:00
|
|
|
},
|
2016-10-19 21:26:51 +00:00
|
|
|
},
|
2018-07-25 15:38:43 +00:00
|
|
|
created() {
|
2020-06-04 09:08:01 +00:00
|
|
|
const endpoints = {
|
2017-09-06 05:02:30 +00:00
|
|
|
boardsEndpoint: this.boardsEndpoint,
|
2019-03-01 16:32:05 +00:00
|
|
|
recentBoardsEndpoint: this.recentBoardsEndpoint,
|
2017-09-06 05:02:30 +00:00
|
|
|
listsEndpoint: this.listsEndpoint,
|
|
|
|
bulkUpdatePath: this.bulkUpdatePath,
|
2020-09-17 09:09:32 +00:00
|
|
|
boardId: $boardApp.dataset.boardId,
|
2020-03-10 09:08:10 +00:00
|
|
|
fullPath: $boardApp.dataset.fullPath,
|
2020-06-04 09:08:01 +00:00
|
|
|
};
|
2020-08-24 12:10:17 +00:00
|
|
|
this.setInitialBoardData({
|
|
|
|
...endpoints,
|
|
|
|
boardType: this.parent,
|
|
|
|
disabled: this.disabled,
|
|
|
|
showPromotion: parseBoolean($boardApp.getAttribute('data-show-promotion')),
|
|
|
|
});
|
2020-06-04 09:08:01 +00:00
|
|
|
boardsStore.setEndpoints(endpoints);
|
2018-10-10 17:08:43 +00:00
|
|
|
boardsStore.rootPath = this.boardsEndpoint;
|
2017-03-07 11:05:37 +00:00
|
|
|
|
2017-03-14 11:32:58 +00:00
|
|
|
eventHub.$on('updateTokens', this.updateTokens);
|
2017-11-14 06:05:40 +00:00
|
|
|
eventHub.$on('newDetailIssue', this.updateDetailIssue);
|
|
|
|
eventHub.$on('clearDetailIssue', this.clearDetailIssue);
|
|
|
|
sidebarEventHub.$on('toggleSubscription', this.toggleSubscription);
|
2020-08-24 09:10:14 +00:00
|
|
|
eventHub.$on('performSearch', this.performSearch);
|
2020-09-29 00:09:59 +00:00
|
|
|
eventHub.$on('initialBoardLoad', this.initialBoardLoad);
|
2017-03-09 12:32:43 +00:00
|
|
|
},
|
|
|
|
beforeDestroy() {
|
2017-03-14 11:32:58 +00:00
|
|
|
eventHub.$off('updateTokens', this.updateTokens);
|
2017-11-14 06:05:40 +00:00
|
|
|
eventHub.$off('newDetailIssue', this.updateDetailIssue);
|
|
|
|
eventHub.$off('clearDetailIssue', this.clearDetailIssue);
|
|
|
|
sidebarEventHub.$off('toggleSubscription', this.toggleSubscription);
|
2020-08-24 09:10:14 +00:00
|
|
|
eventHub.$off('performSearch', this.performSearch);
|
2020-09-29 00:09:59 +00:00
|
|
|
eventHub.$off('initialBoardLoad', this.initialBoardLoad);
|
2016-08-08 15:15:05 +00:00
|
|
|
},
|
2018-07-25 15:38:43 +00:00
|
|
|
mounted() {
|
2018-10-10 17:08:43 +00:00
|
|
|
this.filterManager = new FilteredSearchBoards(boardsStore.filter, true, boardsStore.cantEdit);
|
2017-09-26 21:19:28 +00:00
|
|
|
this.filterManager.setup();
|
|
|
|
|
2020-08-24 09:10:14 +00:00
|
|
|
this.performSearch();
|
|
|
|
|
2018-10-10 17:08:43 +00:00
|
|
|
boardsStore.disabled = this.disabled;
|
2020-04-30 09:09:39 +00:00
|
|
|
|
2020-10-23 03:08:37 +00:00
|
|
|
if (!this.shouldUseGraphQL) {
|
2020-09-29 00:09:59 +00:00
|
|
|
this.initialBoardLoad();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
methods: {
|
2020-09-29 06:09:45 +00:00
|
|
|
...mapActions([
|
|
|
|
'setInitialBoardData',
|
|
|
|
'setFilters',
|
|
|
|
'fetchEpicsSwimlanes',
|
|
|
|
'resetIssues',
|
|
|
|
'resetEpics',
|
2020-10-08 15:08:17 +00:00
|
|
|
'fetchLists',
|
2020-09-29 06:09:45 +00:00
|
|
|
]),
|
2020-09-29 00:09:59 +00:00
|
|
|
initialBoardLoad() {
|
2020-04-30 09:09:39 +00:00
|
|
|
boardsStore
|
|
|
|
.all()
|
|
|
|
.then(res => res.data)
|
|
|
|
.then(lists => {
|
|
|
|
lists.forEach(list => boardsStore.addList(list));
|
|
|
|
boardsStore.addBlankState();
|
|
|
|
setPromotionState(boardsStore);
|
|
|
|
this.loading = false;
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
Flash(__('An error occurred while fetching the board lists. Please try again.'));
|
|
|
|
});
|
2020-09-29 00:09:59 +00:00
|
|
|
},
|
2017-03-09 12:32:43 +00:00
|
|
|
updateTokens() {
|
|
|
|
this.filterManager.updateTokens();
|
2017-11-14 06:05:40 +00:00
|
|
|
},
|
2020-08-24 09:10:14 +00:00
|
|
|
performSearch() {
|
|
|
|
this.setFilters(convertObjectPropsToCamelCase(urlParamsToObject(window.location.search)));
|
|
|
|
if (gon.features.boardsWithSwimlanes && this.isShowingEpicsSwimlanes) {
|
2020-09-29 06:09:45 +00:00
|
|
|
this.resetEpics();
|
2020-10-08 15:08:17 +00:00
|
|
|
this.resetIssues();
|
|
|
|
this.fetchEpicsSwimlanes({});
|
|
|
|
} else if (gon.features.graphqlBoardLists && !this.isShowingEpicsSwimlanes) {
|
|
|
|
this.fetchLists();
|
2020-09-21 09:09:29 +00:00
|
|
|
this.resetIssues();
|
2020-08-24 09:10:14 +00:00
|
|
|
}
|
|
|
|
},
|
2020-06-23 00:08:58 +00:00
|
|
|
updateDetailIssue(newIssue, multiSelect = false) {
|
2018-06-16 21:50:13 +00:00
|
|
|
const { sidebarInfoEndpoint } = newIssue;
|
2017-11-14 06:05:40 +00:00
|
|
|
if (sidebarInfoEndpoint && newIssue.subscribed === undefined) {
|
|
|
|
newIssue.setFetchingState('subscriptions', true);
|
2020-09-21 09:09:29 +00:00
|
|
|
setWeightFetchingState(newIssue, true);
|
2019-07-19 07:53:11 +00:00
|
|
|
setEpicFetchingState(newIssue, true);
|
2019-11-25 12:06:13 +00:00
|
|
|
boardsStore
|
|
|
|
.getIssueInfo(sidebarInfoEndpoint)
|
2017-12-15 08:31:14 +00:00
|
|
|
.then(res => res.data)
|
2018-07-25 15:38:43 +00:00
|
|
|
.then(data => {
|
2019-04-09 10:39:42 +00:00
|
|
|
const {
|
|
|
|
subscribed,
|
|
|
|
totalTimeSpent,
|
|
|
|
timeEstimate,
|
|
|
|
humanTimeEstimate,
|
|
|
|
humanTotalTimeSpent,
|
|
|
|
weight,
|
|
|
|
epic,
|
2019-12-14 00:08:27 +00:00
|
|
|
assignees,
|
2019-04-09 10:39:42 +00:00
|
|
|
} = convertObjectPropsToCamelCase(data);
|
|
|
|
|
2017-11-14 06:05:40 +00:00
|
|
|
newIssue.setFetchingState('subscriptions', false);
|
2020-09-21 09:09:29 +00:00
|
|
|
setWeightFetchingState(newIssue, false);
|
2019-07-19 07:53:11 +00:00
|
|
|
setEpicFetchingState(newIssue, false);
|
2017-11-14 06:05:40 +00:00
|
|
|
newIssue.updateData({
|
2019-04-09 10:39:42 +00:00
|
|
|
humanTimeSpent: humanTotalTimeSpent,
|
|
|
|
timeSpent: totalTimeSpent,
|
|
|
|
humanTimeEstimate,
|
|
|
|
timeEstimate,
|
|
|
|
subscribed,
|
|
|
|
weight,
|
|
|
|
epic,
|
2019-12-14 00:08:27 +00:00
|
|
|
assignees,
|
2017-11-14 06:05:40 +00:00
|
|
|
});
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
newIssue.setFetchingState('subscriptions', false);
|
2020-09-21 09:09:29 +00:00
|
|
|
setWeightFetchingState(newIssue, false);
|
2017-11-14 06:05:40 +00:00
|
|
|
Flash(__('An error occurred while fetching sidebar data'));
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-10-15 09:06:09 +00:00
|
|
|
if (multiSelect) {
|
|
|
|
boardsStore.toggleMultiSelect(newIssue);
|
|
|
|
|
|
|
|
if (boardsStore.detail.issue) {
|
|
|
|
boardsStore.clearDetailIssue();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-06-04 15:34:17 +00:00
|
|
|
boardsStore.setIssueDetail(newIssue);
|
2017-11-14 06:05:40 +00:00
|
|
|
},
|
2019-10-15 09:06:09 +00:00
|
|
|
clearDetailIssue(multiSelect = false) {
|
|
|
|
if (multiSelect) {
|
|
|
|
boardsStore.clearMultiSelect();
|
|
|
|
}
|
2019-05-30 07:31:42 +00:00
|
|
|
boardsStore.clearDetailIssue();
|
2017-11-14 06:05:40 +00:00
|
|
|
},
|
|
|
|
toggleSubscription(id) {
|
2018-10-10 17:08:43 +00:00
|
|
|
const { issue } = boardsStore.detail;
|
2017-11-14 06:05:40 +00:00
|
|
|
if (issue.id === id && issue.toggleSubscriptionEndpoint) {
|
|
|
|
issue.setFetchingState('subscriptions', true);
|
2019-11-25 12:06:13 +00:00
|
|
|
boardsStore
|
|
|
|
.toggleIssueSubscription(issue.toggleSubscriptionEndpoint)
|
2017-11-14 06:05:40 +00:00
|
|
|
.then(() => {
|
|
|
|
issue.setFetchingState('subscriptions', false);
|
|
|
|
issue.updateData({
|
|
|
|
subscribed: !issue.subscribed,
|
|
|
|
});
|
|
|
|
})
|
|
|
|
.catch(() => {
|
|
|
|
issue.setFetchingState('subscriptions', false);
|
|
|
|
Flash(__('An error occurred when toggling the notification subscription'));
|
|
|
|
});
|
|
|
|
}
|
2018-07-25 15:38:43 +00:00
|
|
|
},
|
2020-04-30 09:09:39 +00:00
|
|
|
getNodes(data) {
|
|
|
|
return data[this.parent]?.board?.lists.nodes;
|
|
|
|
},
|
2017-03-09 12:32:43 +00:00
|
|
|
},
|
2016-07-28 11:33:04 +00:00
|
|
|
});
|
2016-08-30 09:32:19 +00:00
|
|
|
|
2018-10-10 17:08:43 +00:00
|
|
|
// eslint-disable-next-line no-new
|
|
|
|
new Vue({
|
2017-03-08 12:17:01 +00:00
|
|
|
el: document.getElementById('js-add-list'),
|
2016-08-30 09:32:19 +00:00
|
|
|
data: {
|
2018-10-10 17:08:43 +00:00
|
|
|
filters: boardsStore.state.filters,
|
2019-07-19 07:53:11 +00:00
|
|
|
...getMilestoneTitle($boardApp),
|
2016-11-04 10:24:59 +00:00
|
|
|
},
|
2018-07-25 15:38:43 +00:00
|
|
|
mounted() {
|
2018-10-10 17:08:43 +00:00
|
|
|
initNewListDropdown();
|
2017-09-06 05:02:30 +00:00
|
|
|
},
|
2016-08-30 09:32:19 +00:00
|
|
|
});
|
2017-01-24 10:27:41 +00:00
|
|
|
|
2019-07-10 07:18:14 +00:00
|
|
|
boardConfigToggle(boardsStore);
|
|
|
|
|
2018-07-25 15:38:43 +00:00
|
|
|
const issueBoardsModal = document.getElementById('js-add-issues-btn');
|
|
|
|
|
|
|
|
if (issueBoardsModal) {
|
2018-10-10 17:08:43 +00:00
|
|
|
// eslint-disable-next-line no-new
|
|
|
|
new Vue({
|
2018-07-25 15:38:43 +00:00
|
|
|
el: issueBoardsModal,
|
|
|
|
mixins: [modalMixin],
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
modal: ModalStore.store,
|
2018-10-10 17:08:43 +00:00
|
|
|
store: boardsStore.state,
|
2020-05-14 00:07:47 +00:00
|
|
|
...getBoardsModalData(),
|
2018-07-25 15:38:43 +00:00
|
|
|
canAdminList: this.$options.el.hasAttribute('data-can-admin-list'),
|
|
|
|
};
|
2017-01-30 15:56:45 +00:00
|
|
|
},
|
2018-07-25 15:38:43 +00:00
|
|
|
computed: {
|
|
|
|
disabled() {
|
|
|
|
if (!this.store) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return !this.store.lists.filter(list => !list.preset).length;
|
|
|
|
},
|
2017-02-10 16:13:13 +00:00
|
|
|
},
|
2018-07-25 15:38:43 +00:00
|
|
|
methods: {
|
|
|
|
openModal() {
|
|
|
|
if (!this.disabled) {
|
|
|
|
this.toggleModal(true);
|
2017-02-10 16:13:13 +00:00
|
|
|
}
|
2018-07-25 15:38:43 +00:00
|
|
|
},
|
2017-02-10 16:13:13 +00:00
|
|
|
},
|
2020-10-20 06:09:03 +00:00
|
|
|
render(createElement) {
|
|
|
|
return createElement(BoardExtraActions, {
|
|
|
|
props: {
|
|
|
|
canAdminList: this.$options.el.hasAttribute('data-can-admin-list'),
|
|
|
|
openModal: this.openModal,
|
|
|
|
disabled: this.disabled,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
},
|
2018-07-25 15:38:43 +00:00
|
|
|
});
|
|
|
|
}
|
2019-07-04 10:53:09 +00:00
|
|
|
|
2020-05-14 00:07:47 +00:00
|
|
|
toggleFocusMode(ModalStore, boardsStore);
|
2019-10-28 15:05:58 +00:00
|
|
|
toggleLabels();
|
2020-10-15 18:08:43 +00:00
|
|
|
|
|
|
|
if (gon.features?.swimlanes) {
|
|
|
|
toggleEpicsSwimlanes();
|
|
|
|
}
|
|
|
|
|
2019-07-04 10:53:09 +00:00
|
|
|
mountMultipleBoardsSwitcher();
|
2018-02-21 22:28:08 +00:00
|
|
|
};
|