Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
CloWM UI
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Monitor
Service Desk
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Computational Metagenomics
CloWM
CloWM UI
Merge requests
!116
Resolve "Create user"
Code
Review changes
Check out branch
Download
Patches
Plain diff
Merged
Resolve "Create user"
feature/119-create-user
into
main
Overview
0
Commits
1
Pipelines
0
Changes
5
Merged
Daniel Göbel
requested to merge
feature/119-create-user
into
main
10 months ago
Overview
0
Commits
1
Pipelines
0
Changes
5
Expand
Closes
#119 (closed)
0
0
Merge request reports
Compare
main
main (base)
and
latest version
latest version
1c68f0a8
1 commit,
10 months ago
5 files
+
194
−
11
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
Files
5
Search (e.g. *.vue) (Ctrl+P)
src/components/admin/CreateUserModal.vue
0 → 100644
+
171
−
0
Options
<
script
setup
lang=
"ts"
>
import
{
RoleEnum
,
type
UserIn
,
type
UserOutExtended
}
from
"
@/client
"
;
import
{
onMounted
,
reactive
,
ref
}
from
"
vue
"
;
import
{
Modal
,
Toast
}
from
"
bootstrap
"
;
import
BootstrapModal
from
"
@/components/modals/BootstrapModal.vue
"
;
import
{
useUserStore
}
from
"
@/stores/users
"
;
import
BootstrapToast
from
"
@/components/BootstrapToast.vue
"
;
let
modal
:
Modal
|
null
=
null
;
const
createUserForm
=
ref
<
HTMLFormElement
|
undefined
>
(
undefined
);
let
successToast
:
Toast
|
undefined
;
let
errorToast
:
Toast
|
undefined
;
const
userRepository
=
useUserStore
();
const
formState
=
reactive
<
{
loading
:
boolean
;
user
:
UserIn
;
errorMessage
?:
string
;
registeredUserName
:
string
;
validated
:
boolean
;
}
>
({
loading
:
false
,
errorMessage
:
""
,
validated
:
false
,
registeredUserName
:
""
,
user
:
{
display_name
:
""
,
email
:
""
,
roles
:
[
RoleEnum
.
USER
],
},
});
const
props
=
defineProps
<
{
modalId
:
string
;
}
>
();
const
emit
=
defineEmits
<
{
(
e
:
"
user-created
"
,
user
:
UserOutExtended
):
void
;
}
>
();
function
createUser
()
{
formState
.
validated
=
true
;
if
(
createUserForm
.
value
?.
checkValidity
())
{
formState
.
loading
=
true
;
formState
.
registeredUserName
=
formState
.
user
.
display_name
;
userRepository
.
createUser
(
formState
.
user
)
.
then
((
user
)
=>
{
emit
(
"
user-created
"
,
user
);
formState
.
validated
=
false
;
formState
.
user
=
{
display_name
:
""
,
email
:
""
,
roles
:
[
RoleEnum
.
USER
],
};
successToast
?.
show
();
modal
?.
hide
();
})
.
catch
((
err
)
=>
{
formState
.
errorMessage
=
err
.
body
?.
detail
;
errorToast
?.
show
();
})
.
finally
(()
=>
{
formState
.
loading
=
false
;
});
}
}
onMounted
(()
=>
{
modal
=
Modal
.
getOrCreateInstance
(
`#
${
props
.
modalId
}
`
);
successToast
=
new
Toast
(
"
#create-user-success-toast
"
);
errorToast
=
new
Toast
(
"
#create-user-error-toast
"
);
});
</
script
>
<
template
>
<bootstrap-toast
toast-id=
"create-user-success-toast"
>
Successfully registered user
{{
formState
.
registeredUserName
}}
</bootstrap-toast>
<bootstrap-toast
toast-id=
"create-user-error-toast"
color-class=
"danger"
>
<template
#default
>
Couldn't regsiter user
{{
formState
.
registeredUserName
}}
</
template
>
<
template
#body
>
Error:
{{
formState
.
errorMessage
}}
</
template
>
</bootstrap-toast>
<bootstrap-modal
:modalId=
"props.modalId"
:static-backdrop=
"true"
modal-label=
"Create user"
>
<
template
#header
>
Register a user
</
template
>
<
template
#body
>
<form
id=
"create-user-form"
@
submit.prevent=
"createUser()"
:class=
"
{ 'was-validated': formState.validated }"
ref="createUserForm"
novalidate
>
<div
class=
"mb-3"
>
<label
for=
"create-user-name"
class=
"form-label"
>
Name
</label>
<input
type=
"text"
class=
"form-control"
id=
"create-user-name"
minlength=
"3"
maxlength=
"256"
required
placeholder=
"John Doe"
v-model=
"formState.user.display_name"
/>
<div
class=
"invalid-feedback"
>
Please choose a name.
</div>
</div>
<div
class=
"mb-3"
>
<label
for=
"create-user-email"
class=
"form-label"
>
Email address
</label
>
<input
type=
"email"
class=
"form-control"
id=
"create-user-email"
required
placeholder=
"name@example.com"
minlength=
"3"
maxlength=
"256"
v-model=
"formState.user.email"
/>
<div
class=
"invalid-feedback"
>
Please provide a valid email address.
</div>
</div>
<div
class=
"mb-3"
>
<div
class=
"mb-1"
>
Roles:
</div>
<div
class=
"form-check"
v-for=
"role in Object.values(RoleEnum)"
:key=
"role"
>
<input
class=
"form-check-input"
type=
"checkbox"
:value=
"role"
:id=
"`create-user-role-$
{role}`"
v-model="formState.user.roles"
/>
<label
class=
"form-check-label"
:for=
"`create-user-role-$
{role}`">
{{
role
.
toUpperCase
()
}}
</label>
</div>
</div>
</form>
</
template
>
<
template
#footer
>
<button
type=
"button"
class=
"btn btn-secondary"
data-bs-dismiss=
"modal"
>
Close
</button>
<button
type=
"submit"
form=
"create-user-form"
class=
"btn btn-primary"
:disabled=
"formState.loading"
>
Save
</button>
</
template
>
</bootstrap-modal>
</template>
<
style
scoped
></
style
>
Loading