fixed duplicating users in user creation frontend

This commit is contained in:
NEOLPAR 2022-07-13 17:12:44 +01:00
parent 6eb4f189ce
commit cb29ac9e26
3 changed files with 39 additions and 19 deletions

View File

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

View File

@ -97,12 +97,15 @@
}
})
}
function showOnboardingTypeModal() {
const showOnboardingTypeModal = async addUsersData => {
userData = await removingDuplicities(addUsersData)
if (!userData?.users?.length) return
onboardingTypeModal.show()
}
async function createUserFlow() {
let emails = userData.map(x => x.email)
let emails = userData?.users?.map(x => x.email) || []
try {
const res = await users.invite({
emails: emails,
@ -117,8 +120,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 { userEmails, usersRole, userGroups } = userCsvData
const { userEmails, usersRole, userGroups: groups } = userCsvData
const users = []
for (const email of userEmails) {
@ -132,13 +156,15 @@
users.push(newUser)
}
userData = { groups: userGroups, users: users }
userData = await removingDuplicities({ groups, users })
if (!userData.users.length) return
return createUser()
}
async function createUser() {
try {
await users.create(userData)
await users.create(await removingDuplicities(userData))
notifications.success("Successfully created user")
await groups.actions.init()
passwordModal.show()
@ -245,14 +271,7 @@
</Layout>
<Modal bind:this={createUserModal}>
<AddUserModal
on:change={e => (userData = e.detail)}
on:created={async () => {
pageInfo.reset()
await fetchUsers()
}}
{showOnboardingTypeModal}
/>
<AddUserModal {showOnboardingTypeModal} />
</Modal>
<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 }) {
return API.inviteUsers({
emails,
@ -83,6 +87,7 @@ export function createUsersStore() {
subscribe,
search,
get,
fetch,
invite,
acceptInvite,
create,