summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/invite_members/init_invite_members_modal.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/invite_members/init_invite_members_modal.js')
-rw-r--r--app/assets/javascripts/invite_members/init_invite_members_modal.js78
1 files changed, 40 insertions, 38 deletions
diff --git a/app/assets/javascripts/invite_members/init_invite_members_modal.js b/app/assets/javascripts/invite_members/init_invite_members_modal.js
index e9d620cedf0..958121ad735 100644
--- a/app/assets/javascripts/invite_members/init_invite_members_modal.js
+++ b/app/assets/javascripts/invite_members/init_invite_members_modal.js
@@ -5,45 +5,47 @@ import { parseBoolean } from '~/lib/utils/common_utils';
Vue.use(GlToast);
-let initedInviteMembersModal;
+export default (function initInviteMembersModal() {
+ let inviteMembersModal;
-export default function initInviteMembersModal() {
- if (initedInviteMembersModal) {
- // if we already loaded this in another part of the dom, we don't want to do it again
- // else we will stack the modals
- return false;
- }
+ return () => {
+ if (!inviteMembersModal) {
+ // https://gitlab.com/gitlab-org/gitlab/-/issues/344955
+ // bug lying in wait here for someone to put group and project invite in same screen
+ // once that happens we'll need to mount these differently, perhaps split
+ // group/project to each mount one, with many ways to open it.
+ const el = document.querySelector('.js-invite-members-modal');
- // https://gitlab.com/gitlab-org/gitlab/-/issues/344955
- // bug lying in wait here for someone to put group and project invite in same screen
- // once that happens we'll need to mount these differently, perhaps split
- // group/project to each mount one, with many ways to open it.
- const el = document.querySelector('.js-invite-members-modal');
+ if (!el) {
+ return false;
+ }
- if (!el) {
- return false;
- }
-
- initedInviteMembersModal = true;
-
- return new Vue({
- el,
- name: 'InviteMembersModalRoot',
- provide: {
- newProjectPath: el.dataset.newProjectPath,
- },
- render: (createElement) =>
- createElement(InviteMembersModal, {
- props: {
- ...el.dataset,
- isProject: parseBoolean(el.dataset.isProject),
- accessLevels: JSON.parse(el.dataset.accessLevels),
- defaultAccessLevel: parseInt(el.dataset.defaultAccessLevel, 10),
- tasksToBeDoneOptions: JSON.parse(el.dataset.tasksToBeDoneOptions || '[]'),
- projects: JSON.parse(el.dataset.projects || '[]'),
- usersFilter: el.dataset.usersFilter,
- filterId: parseInt(el.dataset.filterId, 10),
+ inviteMembersModal = new Vue({
+ el,
+ name: 'InviteMembersModalRoot',
+ provide: {
+ name: el.dataset.name,
+ newProjectPath: el.dataset.newProjectPath,
+ newTrialRegistrationPath: el.dataset.newTrialRegistrationPath,
+ purchasePath: el.dataset.purchasePath,
+ freeUsersLimit: el.dataset.freeUsersLimit && parseInt(el.dataset.freeUsersLimit, 10),
+ membersCount: el.dataset.membersCount && parseInt(el.dataset.membersCount, 10),
},
- }),
- });
-}
+ render: (createElement) =>
+ createElement(InviteMembersModal, {
+ props: {
+ ...el.dataset,
+ isProject: parseBoolean(el.dataset.isProject),
+ accessLevels: JSON.parse(el.dataset.accessLevels),
+ defaultAccessLevel: parseInt(el.dataset.defaultAccessLevel, 10),
+ tasksToBeDoneOptions: JSON.parse(el.dataset.tasksToBeDoneOptions || '[]'),
+ projects: JSON.parse(el.dataset.projects || '[]'),
+ usersFilter: el.dataset.usersFilter,
+ filterId: parseInt(el.dataset.filterId, 10),
+ },
+ }),
+ });
+ }
+ return inviteMembersModal;
+ };
+})();