68 lines
1.8 KiB
JavaScript
68 lines
1.8 KiB
JavaScript
import Vue from 'vue';
|
|
|
|
import Translate from '../vue_shared/translate';
|
|
import eventHub from './event_hub';
|
|
import ProjectsService from './service/projects_service';
|
|
import ProjectsStore from './store/projects_store';
|
|
|
|
import projectsDropdownApp from './components/app.vue';
|
|
|
|
Vue.use(Translate);
|
|
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
const el = document.getElementById('js-projects-dropdown');
|
|
const navEl = document.getElementById('nav-projects-dropdown');
|
|
|
|
// Don't do anything if element doesn't exist (No projects dropdown)
|
|
// This is for when the user accesses GitLab without logging in
|
|
if (!el || !navEl) {
|
|
return;
|
|
}
|
|
|
|
$(navEl).on('show.bs.dropdown', (e) => {
|
|
const dropdownEl = $(e.currentTarget).find('.projects-dropdown-menu');
|
|
dropdownEl.one('transitionend', () => {
|
|
eventHub.$emit('dropdownOpen');
|
|
});
|
|
});
|
|
|
|
// eslint-disable-next-line no-new
|
|
new Vue({
|
|
el,
|
|
components: {
|
|
projectsDropdownApp,
|
|
},
|
|
data() {
|
|
const dataset = this.$options.el.dataset;
|
|
const store = new ProjectsStore();
|
|
const service = new ProjectsService(dataset.userName);
|
|
|
|
const project = {
|
|
id: Number(dataset.projectId),
|
|
name: dataset.projectName,
|
|
namespace: dataset.projectNamespace,
|
|
webUrl: dataset.projectWebUrl,
|
|
avatarUrl: dataset.projectAvatarUrl || null,
|
|
lastAccessedOn: Date.now(),
|
|
};
|
|
|
|
return {
|
|
store,
|
|
service,
|
|
state: store.state,
|
|
currentUserName: dataset.userName,
|
|
currentProject: project,
|
|
};
|
|
},
|
|
render(createElement) {
|
|
return createElement('projects-dropdown-app', {
|
|
props: {
|
|
currentUserName: this.currentUserName,
|
|
currentProject: this.currentProject,
|
|
store: this.store,
|
|
service: this.service,
|
|
},
|
|
});
|
|
},
|
|
});
|
|
});
|