diff --git a/app/src/lang/en-US/index.json b/app/src/lang/en-US/index.json
index ef5137abfc..42da17940c 100644
--- a/app/src/lang/en-US/index.json
+++ b/app/src/lang/en-US/index.json
@@ -31,6 +31,11 @@
"create_user": "Create User",
"create_webhook": "Create Webhook",
+ "invite_users": "Invite Users",
+ "add_to_invite_user": "admin@example.com, user@example.com...",
+ "invite": "Invite",
+ "emails": "Emails",
+
"connection_excellent": "Excellent Connection",
"connection_good": "Good Connection",
"connection_fair": "Fair Connection",
diff --git a/app/src/modules/settings/routes/roles/item/item.vue b/app/src/modules/settings/routes/roles/item/item.vue
index a4f6cda2ad..79226e8910 100644
--- a/app/src/modules/settings/routes/roles/item/item.vue
+++ b/app/src/modules/settings/routes/roles/item/item.vue
@@ -39,6 +39,10 @@
+
+
+
+
+
+
{{ $t('admins_have_all_permissions') }}
@@ -88,6 +94,7 @@ import useItem from '@/composables/use-item';
import { useUserStore } from '@/stores/';
import RoleInfoSidebarDetail from './components/role-info-sidebar-detail.vue';
import PermissionsOverview from './components/permissions-overview.vue';
+import UsersInvite from '@/views/private/components/users-invite';
type Values = {
[field: string]: any;
@@ -95,7 +102,7 @@ type Values = {
export default defineComponent({
name: 'roles-item',
- components: { SettingsNavigation, RevisionsDrawerDetail, RoleInfoSidebarDetail, PermissionsOverview },
+ components: { SettingsNavigation, RevisionsDrawerDetail, RoleInfoSidebarDetail, PermissionsOverview, UsersInvite },
props: {
primaryKey: {
type: String,
@@ -108,7 +115,7 @@ export default defineComponent({
},
setup(props) {
const userStore = useUserStore();
-
+ const userInviteModalActive = ref(false);
const { primaryKey } = toRefs(props);
const { edits, item, saving, loading, error, save, remove, deleting, isBatch } = useItem(
@@ -142,6 +149,7 @@ export default defineComponent({
deleting,
isBatch,
adminEnabled,
+ userInviteModalActive,
};
/**
diff --git a/app/src/modules/users/routes/collection.vue b/app/src/modules/users/routes/collection.vue
index 7c8d18c863..6581bd2f81 100644
--- a/app/src/modules/users/routes/collection.vue
+++ b/app/src/modules/users/routes/collection.vue
@@ -49,6 +49,10 @@
+
+
+
+
@@ -58,6 +62,8 @@
+
+
import { defineComponent, computed, ref, PropType } from '@vue/composition-api';
import UsersNavigation from '../components/navigation.vue';
+import UsersInvite from '@/views/private/components/users-invite';
import { i18n } from '@/lang';
import api from '@/api';
@@ -120,7 +127,7 @@ type Item = {
export default defineComponent({
name: 'users-collection',
- components: { UsersNavigation, LayoutSidebarDetail, SearchInput },
+ components: { UsersNavigation, LayoutSidebarDetail, SearchInput, UsersInvite },
props: {
queryFilters: {
type: Object as PropType>,
@@ -130,6 +137,7 @@ export default defineComponent({
setup(props) {
const { roles } = useNavigation();
const layoutRef = ref(null);
+ const userInviteModalActive = ref(false);
const selection = ref- ([]);
@@ -175,6 +183,7 @@ export default defineComponent({
searchQuery,
marked,
clearFilters,
+ userInviteModalActive,
};
function useBatchDelete() {
diff --git a/app/src/views/private/components/users-invite/index.ts b/app/src/views/private/components/users-invite/index.ts
new file mode 100644
index 0000000000..809758b70a
--- /dev/null
+++ b/app/src/views/private/components/users-invite/index.ts
@@ -0,0 +1,4 @@
+import UsersInvite from './users-invite.vue';
+
+export { UsersInvite };
+export default UsersInvite;
diff --git a/app/src/views/private/components/users-invite/users-invite.vue b/app/src/views/private/components/users-invite/users-invite.vue
new file mode 100644
index 0000000000..58b6963530
--- /dev/null
+++ b/app/src/views/private/components/users-invite/users-invite.vue
@@ -0,0 +1,121 @@
+
+
+
+ {{ $t('invite_users') }}
+
+
+
+ {{ $t('emails') }}
+
+
+
+ {{ $t('role') }}
+
+
+
+
+
+ {{ $t('cancel') }}
+
+ {{ $t('invite') }}
+
+
+
+
+
+
+
+
+