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 @@ + + + + +