1
0
Fork 0
mirror of synced 2024-07-02 21:10:43 +12:00

Merge branch 'feat/user-groups-tab' of github.com:Budibase/budibase into feat/user-groups-tab

This commit is contained in:
Peter Clement 2022-07-14 09:19:08 +01:00
commit 10e046d8a2
4 changed files with 53 additions and 20 deletions

View file

@ -8,12 +8,10 @@
Layout, Layout,
} from "@budibase/bbui" } from "@budibase/bbui"
import { groups, auth } from "stores/portal" import { groups, auth } from "stores/portal"
import { createEventDispatcher } from "svelte"
import { Constants } from "@budibase/frontend-core" import { Constants } from "@budibase/frontend-core"
export let showOnboardingTypeModal export let showOnboardingTypeModal
const password = Math.random().toString(36).substring(2, 22) const password = Math.random().toString(36).substring(2, 22)
const dispatch = createEventDispatcher()
let disabled let disabled
let userGroups = [] let userGroups = []
@ -41,10 +39,8 @@
</script> </script>
<ModalContent <ModalContent
onConfirm={() => { onConfirm={async () =>
showOnboardingTypeModal() showOnboardingTypeModal({ users: userData, groups: userGroups })}
dispatch("change", { users: userData, groups: userGroups })
}}
size="M" size="M"
title="Add new user" title="Add new user"
confirmText="Add user" confirmText="Add user"

View file

@ -112,12 +112,15 @@
} }
}) })
} }
function showOnboardingTypeModal() { const showOnboardingTypeModal = async addUsersData => {
userData = await removingDuplicities(addUsersData)
if (!userData?.users?.length) return
onboardingTypeModal.show() onboardingTypeModal.show()
} }
async function createUserFlow() { async function createUserFlow() {
let emails = userData.map(x => x.email) let emails = userData?.users?.map(x => x.email) || []
try { try {
const res = await users.invite({ const res = await users.invite({
emails: emails, emails: emails,
@ -132,8 +135,29 @@
} }
} }
const removingDuplicities = async userData => {
const currentUserEmails = (await users.fetch())?.map(x => x.email) || []
const newUsers = []
for (const user of userData?.users) {
const { email } = user
if (
newUsers.find(x => x.email === email) ||
currentUserEmails.includes(email)
)
continue
newUsers.push(user)
}
if (!newUsers.length)
notifications.info("Duplicated! There is no new users to add.")
return { ...userData, users: newUsers }
}
const createUsersFromCsv = async userCsvData => { const createUsersFromCsv = async userCsvData => {
const { userEmails, usersRole, userGroups } = userCsvData const { userEmails, usersRole, userGroups: groups } = userCsvData
const users = [] const users = []
for (const email of userEmails) { for (const email of userEmails) {
@ -147,13 +171,15 @@
users.push(newUser) users.push(newUser)
} }
userData = { groups: userGroups, users: users } userData = await removingDuplicities({ groups, users })
if (!userData.users.length) return
return createUser() return createUser()
} }
async function createUser() { async function createUser() {
try { try {
await users.create(userData) await users.create(await removingDuplicities(userData))
notifications.success("Successfully created user") notifications.success("Successfully created user")
await groups.actions.init() await groups.actions.init()
passwordModal.show() passwordModal.show()
@ -272,14 +298,7 @@
</Layout> </Layout>
<Modal bind:this={createUserModal}> <Modal bind:this={createUserModal}>
<AddUserModal <AddUserModal {showOnboardingTypeModal} />
on:change={e => (userData = e.detail)}
on:created={async () => {
pageInfo.reset()
await fetchUsers()
}}
{showOnboardingTypeModal}
/>
</Modal> </Modal>
<Modal bind:this={inviteConfirmationModal}> <Modal bind:this={inviteConfirmationModal}>

View file

@ -23,6 +23,10 @@ export function createUsersStore() {
} }
} }
const fetch = async () => {
return await API.getUsers()
}
async function invite({ emails, builder, admin }) { async function invite({ emails, builder, admin }) {
return API.inviteUsers({ return API.inviteUsers({
emails, emails,
@ -87,6 +91,7 @@ export function createUsersStore() {
subscribe, subscribe,
search, search,
get, get,
fetch,
invite, invite,
acceptInvite, acceptInvite,
create, create,

View file

@ -23,10 +23,23 @@ export const save = async (ctx: any) => {
} }
export const bulkSave = async (ctx: any) => { export const bulkSave = async (ctx: any) => {
let { users: newUsers, groups } = ctx.request.body let { users: newUsersRequested, groups } = ctx.request.body
let usersToSave: any[] = [] let usersToSave: any[] = []
let groupsToSave: any[] = [] let groupsToSave: any[] = []
const newUsers: any[] = []
const db = tenancy.getGlobalDB() const db = tenancy.getGlobalDB()
const currentUserEmails =
(await users.allUsers())?.map((x: any) => x.email) || []
for (const newUser of newUsersRequested) {
if (
newUsers.find((x: any) => x.email === newUser.email) ||
currentUserEmails.includes(newUser.email)
)
continue
newUsers.push(newUser)
}
newUsers.forEach((user: any) => { newUsers.forEach((user: any) => {
usersToSave.push( usersToSave.push(